#!/bin/sh # Everest Linux 1.0.0-busybox - Stage 2 Installation Script # This program is free software: See the GNU GPL v3.0 for details printf "[ !!! ] WARNING! DO NOT RUN THIS SCRIPT AS ROOT!\n" printf "[ i ] Starting in 10 seconds.\n" sleep 10 printf "[ i ] Starting stage 2 installation...\n" sleep 0.5 printf "[ i ] Creating bash configuration files...\n" cat > ~/.bash_profile << "EOF" exec env -i HOME=${HOME} TERM=${TERM} PS1='\u:\w\$ ' /bin/bash EOF cat > ~/.bashrc << "EOF" set +h umask 022 EVEREST=/mnt/everest LC_ALL=POSIX PATH=${EVEREST}/cross-tools/bin:/bin:/usr/bin export EVEREST LC_ALL PATH EOF printf "[ i ] Sourcing .bash_profile...\n" source ~/.bash_profile printf "[ i ] Unsetting CFLAGS...\n" unset CFLAGS echo unset CFLAGS >> ~/.bashrc printf "[ i ] Setting build variables...\n" export EVEREST_HOST=$(echo ${MACHTYPE} | sed "s/-[^-]*/-cross/") export EVEREST_TARGET=x86_64-linux-musl export EVEREST_CPU=k8 printf "[ i ] Setting CPU architecture..\n" export EVEREST_ARCH="x86" printf "[ i ] Adding build variables to .bashrc...\n" echo export EVEREST_HOST=\""${EVEREST_HOST}\"" >> ~/.bashrc echo export EVEREST_TARGET=\""${EVEREST_TARGET}\"" >> ~/.bashrc echo export EVEREST_ARCH=\""${EVEREST_ARCH}\"" >> ~/.bashrc echo export EVEREST_CPU=\""${EVEREST_CPU}\"" >> ~/.bashrc 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 > ${CLFS}/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