#!/bin/sh # Everest Linux 1.0.0-busybox - Stage 3 Installation Script # This program is free software: See the GNU GPL v3.0 for details. printf "[ i ] NOTICE - This script can either be run as the 'everest' user (assuming they own /mnt/everest), or as root.\n" sleep 5 printf "[ i ] Creating sysroot directory...\n" mkdir -p ${EVEREST}/cross-tools/${EVEREST_TARGET} ln -sfv . ${EVEREST}/cross-tools/${EVEREST_TARGET}/usr printf "[ i ] Moving tarballs to cross-tools directory...\n" cd /home/everest/everest-install/scripts/tempfiles mv -rv * $EVEREST/sources printf "[ i ] Preparing to build initial toolchain...\n" cd $EVEREST/sources printf "[ i ] Starting build of >>> Linux-Headers-4.9.22 <<<\n" sleep 3 tar -xvf linux-4.9.22.tar.xz cd linux-4.9.22 make mrproper make ARCH=${EVEREST_ARCH} headers_check make ARCH=${EVEREST_ARCH} INSTALL_HDR_PATH=${EVEREST}/cross-tools/${EVEREST_TARGET} headers_install cd .. printf "[ i ] Starting build of >>> Binutils-2.27 <<<\n" sleep 3 tar -xvf binutils-2.27.tar.bz2 cd binutils-2.27 mkdir -v ../binutils-build cd ../binutils-build ../binutils-2.27/configure \ --prefix=${EVEREST}/cross-tools \ --target=${EVEREST_TARGET} \ --with-sysroot=${EVEREST}/cross-tools/${EVEREST_TARGET} \ --disable-nls \ --disable-multilib make configure-host make make install cd ../.. printf "[ i ] Finished build of >>> Binutils-2.27 <<<\n" printf "[ i ] Starting build of >>> GCC-6.2.0 - Static <<<\n" sleep 3 tar -xvf gcc-6.2.0.tar.bz2 cd gcc-6.2.0 tar xf ../mpfr-3.1.4.tar.bz2 mv -v mpfr-3.1.4 mpfr tar xf ../gmp-6.1.1.tar.bz2 mv -v gmp-6.1.1 gmp tar xf ../mpc-1.0.3.tar.gz mv -v mpc-1.0.3 mpc mkdir -v ../gcc-build cd ../gcc-build ../gcc-6.2.0/configure \ --prefix=${EVEREST}/cross-tools \ --build=${EVEREST_HOST} \ --host=${EVEREST_HOST} \ --target=${EVEREST_TARGET} \ --with-sysroot=${EVEREST}/cross-tools/${EVEREST_TARGET} \ --disable-nls \ --disable-shared \ --without-headers \ --with-newlib \ --disable-decimal-float \ --disable-libgomp \ --disable-libmudflap \ --disable-libssp \ --disable-libatomic \ --disable-libquadmath \ --disable-threads \ --enable-languages=c \ --disable-multilib \ --with-mpfr-include=$(pwd)/../gcc-6.2.0/mpfr/src \ --with-mpfr-lib=$(pwd)/mpfr/src/.libs \ --with-arch=${EVEREST_CPU} make all-gcc all-target-libgcc make install-gcc install-target-libgcc cd .. rm -rf gcc-build cd .. printf "[ i ] Finished build of >>> GCC-6.2.0 - Static <<<\n" printf "[ i ] Starting build of >>> musl-1.1.16 <<<\n" sleep 3 tar -xvf musl-1.1.16.tar.gz cd musl-1.1.16 ./configure \ CROSS_COMPILE=${EVEREST_TARGET}- \ --prefix=/ \ --target=${EVEREST_TARGET} make DESTDIR=${EVEREST}/cross-tools/${EVEREST_TARGET} make install cd .. printf "[ i ] Finished build of >>> musl-1.1.16 <<<\n" printf "[ i ] Starting build of >>> GCC-6.2.0 - Final <<<\n" sleep 3 rm -rf gcc-6.2.0 tar -xvf gcc-6.2.0.tar.bz2 cd gcc-6.2.0 tar xf ../mpfr-3.1.4.tar.bz2 mv -v mpfr-3.1.4 mpfr tar xf ../gmp-6.1.1.tar.bz2 mv -v gmp-6.1.1 gmp tar xf ../mpc-1.0.3.tar.gz mv -v mpc-1.0.3 mpc mkdir -v ../gcc-build cd ../gcc-build ../gcc-6.2.0/configure \ --prefix=${EVEREST}/cross-tools \ --build=${EVEREST_HOST} \ --host=${EVEREST_HOST} \ --target=${EVEREST_TARGET} \ --with-sysroot=${EVEREST}/cross-tools/${EVEREST_TARGET} \ --disable-nls \ --enable-languages=c,c++ \ --enable-c99 \ --enable-long-long \ --disable-libmudflap \ --disable-multilib \ --with-mpfr-include=$(pwd)/../gcc-6.2.0/mpfr/src \ --with-mpfr-lib=$(pwd)/mpfr/src/.libs \ --with-arch=${EVEREST_CPU} make make install cd .. printf "[ i ] Finished build of >> GCC-6.2.0 - Final <<<\n" printf "[ i ] Toolchain has finished building.\n" printf "[ i ] Setting toolchain variables...\n" echo export CC=\""${EVEREST_TARGET}-gcc --sysroot=${EVEREST}/targetfs\"" >> ~/.bashrc echo export CXX=\""${EVEREST_TARGET}-g++ --sysroot=${EVEREST}/targetfs\"" >> ~/.bashrc echo export AR=\""${EVEREST_TARGET}-ar\"" >> ~/.bashrc echo export AS=\""${EVEREST_TARGET}-as\"" >> ~/.bashrc echo export LD=\""${EVEREST_TARGET}-ld --sysroot=${EVEREST}/targetfs\"" >> ~/.bashrc echo export RANLIB=\""${EVEREST_TARGET}-ranlib\"" >> ~/.bashrc echo export READELF=\""${EVEREST_TARGET}-readelf\"" >> ~/.bashrc echo export STRIP=\""${EVEREST_TARGET}-strip\"" >> ~/.bashrc source ~/.bashrc printf "[ i ] Starting build of system...\n" sleep 3 printf "[ i ] Creating system directories...\n" mkdir -pv ${EVEREST}/targetfs/{bin,boot,dev,etc,home,lib/{firmware,modules}} mkdir -pv ${EVEREST}/targetfs/{mnt,opt,proc,sbin,srv,sys} mkdir -pv ${EVEREST}/targetfs/var/{cache,lib,local,lock,log,opt,run,spool} install -dv -m 0750 ${EVEREST}/targetfs/root install -dv -m 1777 ${EVEREST}/targetfs/{var/,}tmp mkdir -pv ${EVEREST}/targetfs/usr/{,local/}{bin,include,lib,sbin,share,src} ln -svf ../proc/mounts ${EVEREST}/targetfs/etc/mtab cat > ${EVEREST}/targetfs/etc/passwd << "EOF" root::0:0:root:/root:/bin/ash EOF cat > ${EVEREST}/targetfs/etc/group << "EOF" root:x:0: bin:x:1: sys:x:2: kmem:x:3: tty:x:4: tape:x:5: daemon:x:6: floppy:x:7: disk:x:8: lp:x:9: dialout:x:10: audio:x:11: video:x:12: utmp:x:13: usb:x:14: cdrom:x:15: EOF touch ${EVEREST}/targetfs/var/log/lastlog chmod -v 664 ${EVEREST}/targetfs/var/log/lastlog printf "[ i ] Starting build of >>> libgcc-6.2.0 <<<\n" cp -v ${EVEREST}/cross-tools/${EVEREST_TARGET}/lib/libgcc_s.so.1 ${EVEREST}/targetfs/lib/ ${EVEREST_TARGET}-strip ${EVEREST}/targetfs/lib/libgcc_s.so.1 printf "[ i ] Finished build of >>> libgcc-6.2.0 <<<\n" sleep 1 printf "[ i ] Starting build of >>> musl-1.1.16 <<<\n" rm -rf musl-1.1.16 tar -xvf musl-1.1.16.tar.gz cd musl-1.1.16 ./configure \ CROSS_COMPILE=${EVEREST_TARGET}- \ --prefix=/ \ --disable-static \ --target=${EVEREST_TARGET} make DESTDIR=${EVEREST}/targetfs make install-libs cd .. printf "[ i ] Finished build of >>> musl-1.1.16 <<<\n" sleep 1 printf "[ i ] Starting build of >>> busybox-1.24.2 <<<\n" tar -xvf busybox-1.24.2.tar.bz2 cd busybox-1.24.2 make distclean make ARCH="${EVEREST_ARCH}" defconfig sed -i 's/\(CONFIG_\)\(.*\)\(INETD\)\(.*\)=y/# \1\2\3\4 is not set/g' .config sed -i 's/\(CONFIG_IFPLUGD\)=y/# \1 is not set/' .config sed -i 's/\(CONFIG_FEATURE_WTMP\)=y/# \1 is not set/' .config sed -i 's/\(CONFIG_FEATURE_UTMP\)=y/# \1 is not set/' .config sed -i 's/\(CONFIG_UDPSVD\)=y/# \1 is not set/' .config sed -i 's/\(CONFIG_TCPSVD\)=y/# \1 is not set/' .config make ARCH="${EVEREST_ARCH}" CROSS_COMPILE="${EVEREST_TARGET}-" make ARCH="${EVEREST_ARCH}" CROSS_COMPILE="${EVEREST_TARGET}-"\ CONFIG_PREFIX="${EVEREST}/targetfs" install cp -v examples/depmod.pl ${EVEREST}/cross-tools/bin chmod -v 755 ${EVEREST}/cross-tools/bin/depmod.pl cd .. printf "[ i ] Finished build of >>> busybox-1.24.2 <<<\n" sleep 1 printf "[ i ] Starting build of >>> iana-etc-2.30 <<<\n" tar -xvf iana-etc-2.30.tar.bz2 cd iana-etc-2.30 patch -Np1 -i ../iana-etc-2.30-update-2.patch make get make STRIP=yes make DESTFIR=${EVEREST}/targetfs install printf "[ i ] Finished build of >>> iana-etc-2.30 <<<\n" sleep 1 printf "[ i ] Finished building system software\n" sleep 1 printf "[ i ] Creating /etc/fstab...\n" cat > ${EVEREST}/targetfs/etc/fstab << "EOF" # file-system mount-point type options dump fsck EOF printf "[ i ] Building the Linux kernel...\n" rm -rf linux-4.9.22 tar -xvf linux-4.9.22.tar.xz cd linux-4.9.22 make mrproper printf "[ !!! ] WARNING!!! KERNEL INSTALLATION WILL COMMENCE ONCE MENUCONFIG IS EXITED BY THE USER!!!\n" wait 5 make ARCH=${EVEREST_ARCH} CROSS_COMPILE=${EVEREST_TARGET}- menuconfig make ARCH=${EVEREST_ARCH} CROSS_COMPILE=${EVEREST_TARGET}- make ARCH=${EVEREST_ARCH} CROSS_COMPILE=${EVEREST_TARGET}- \ INSTALL_MOD_PATH=${EVEREST}/targetfs modules_install printf "[ i ] Finished build of the Linux kernel...\n" printf "[ i ] NOTE: Bootloader will need to be installed manually by the user (unless utilizing the bootloader of another system)\n" printf "[ i ] GRUB can be installed through Glacier.\n" wait 3 printf "[ i ] Bootstrapping Glacier package management system...\n" cd ${EVEREST}/tmp git clone https://git.everestlinux.org/EverestLinux/glacier cd install tar xvf glacier.tar.gz cd src chmod +x INSTALL.sh ./INSTALL.sh cd ${EVEREST}/sources printf "[ i ] Setting up bootscripts...\n" tar -xvf master.tar.gz cd bootscripts-embedded-master make DESTDIR=${EVEREST}/targetfs install-bootscripts printf "[ i ] Creating system files...\n" printf "[ i ] It may be a good idea to review the following files after this script finishes:\n" printf " /etc/mdev.conf\n" printf " /etc/profile\n" printf " /etc/inittab\n" printf " /etc/hostname\n" printf " /etc/hosts\n" cd /home/everest/everest-install/scripts/sysfiles cp mdev ${EVEREST}/targetfs/etc/mdev.conf cp profile ${EVEREST}/targetfs/etc/profile cp inittab ${EVEREST}/targetfs/etc/inittab cp hostname ${EVEREST}/targetfs/etc/hostname cp hosts ${EVEREST}/targetfs/etc/hosts mkdir -pv ${EVEREST}/targetfs/etc/network/if-{post-{up,down},pre-{up,down},up,down}.d mkdir -pv ${EVEREST}/targetfs/usr/share/udhcpc cat > ${EVEREST}/targetfs/etc/network/interfaces << "EOF" auto eth0 iface eth0 inet dhcp EOF cp default.script ${EVEREST}/targetfs/usr/share/udhcpc/default.script chmod +x ${EVEREST}/targetfs/usr/share/udhcpc/default.script