clfs-bootstrap

clfs-bootstrap.git
git clone git://git.lenczewski.org/clfs-bootstrap.git
Log | Files | Refs | README | LICENSE

commit d5ba5c95d8f0bc148f30b548c8a635a201ea689f
parent 3b39835c88629c93dc75da9b59dac7f661636190
Author: w79958ml <mikolaj.lenczewski@student.manchester.ac.uk>
Date:   Sat, 10 Oct 2020 16:43:09 +0100

Finally have working bootstrap script! Cleaned up repo

Diffstat:
Mbuild-clfs | 4++--
Dbuild-clfs-legacy | 932-------------------------------------------------------------------------------
Dbuild-clfs-test | 306-------------------------------------------------------------------------------
Mmd5sums.src | 5-----
Dmd5sums.src.bak | 18------------------
Mscripts/build-core-packages.sh | 239++++++++++++++++++++++++++++++-------------------------------------------------
Mscripts/build-cross-toolchain.sh | 270+++++++++++++++----------------------------------------------------------------
Mscripts/build-extra-packages.sh | 37++++++++++++++++++-------------------
Dscripts/build-test-packages.sh | 116-------------------------------------------------------------------------------
Mscripts/host-check.sh | 4++--
Mscripts/skeleton.sh | 2++
Mwget-list.src | 18++----------------
Dwget-list.src.bak | 22----------------------
13 files changed, 164 insertions(+), 1809 deletions(-)

diff --git a/build-clfs b/build-clfs @@ -72,8 +72,8 @@ read _ rm -rf /home/clfs userdel clfs -sudo groupadd clfs -sudo useradd -s /bin/bash -g clfs -m -k /dev/null clfs +groupadd clfs +useradd -s /bin/bash -g clfs -m -k /dev/null clfs chown -Rv clfs ${CLFS} diff --git a/build-clfs-legacy b/build-clfs-legacy @@ -1,932 +0,0 @@ -#!/bin/sh - - -################################################################################ -### I) Preparation for the build ############################################### -################################################################################ -export CLFS=/mnt/clfs -export CLFS_BUILD=${CLFS}/build -export CLFS_CONFIGS=${CLFS}/configs -export CLFS_LOGS=${CLFS}/logs -export CLFS_SCRIPTS=${CLFS}/scripts -export CLFS_SOURCES=${CLFS}/sources -export CLFS_ROOT=${CLFS}/rootfs -export CLFS_SYSROOT=${CLFS_ROOT} -export CLFS_BOOT_ROOT=${CLFS}/bootfs -export CLFS_CROSS_ROOT=${CLFS}/crossfs -export CLFS_CROSS_SYSROOT=${CLFS_CROSS_ROOT} #### this assignment is temporary - - -mkdir -pv ${CLFS} -rm -rf ${CLFS_BUILD} ${CLFS_ROOT} ${CLFS_BOOT_ROOT} ${CLFS_CROSS_ROOT} -chmod 777 ${CLFS} - -mkdir -pv ${CLFS_BUILD} ${CLFS_CONFIGS} ${CLFS_LOGS} ${CLFS_SCRIPTS} ${CLFS_SOURCES} -chmod -v a+wt ${CLFS_BUILD} ${CLFS_CONFIGS} ${CLFS_LOGS} ${CLFS_SCRIPTS} ${CLFS_SOURCES} - - -fetch_packages () { - rm -rf ${CLFS_SOURCES}/{md5sums,wget-list} - - tr -d '\r' < wget-list.src > ${CLFS_SOURCES}/wget-list - tr -d '\r' < md5sums.src > ${CLFS_SOURCES}/md5sums - - pushd ${CLFS_SOURCES} > /dev/null - wget --input-file=wget-list --continue - md5sum -c md5sums - popd > /dev/null -} - -fetch_packages - - -## Copying over scripts and additional config files -rm -rf ${CLFS_CONFIGS}/* ${CLFS_SCRIPTS}/* -cp -rf configs/* ${CLFS_CONFIGS} -cp -rf scripts/* ${CLFS_SCRIPTS} -chmod +x ${CLFS_SCRIPTS}/* - - -${CLFS_SCRIPTS}/host-check.sh -echo "Press enter to continue..." -read _ - - -## Creating the CLFS build user -rm -rf /home/clfs -userdel clfs - -sudo groupadd clfs -sudo useradd -s /bin/bash -g clfs -m -k /dev/null clfs - -chown -Rv clfs ${CLFS} - -mkdir -p /home/clfs - -cat > /home/clfs/.bash_profile <<'EOF' -exec env -i HOME=${HOME} TERM=${TERM} PS1='\u:\w\$ ' /bin/bash -EOF - -cat > /home/clfs/.bashrc <<'EOF' -set +h -umask 022 - -## Extracts a package source archive, and runs the given callback function. -## $1 : Package definition variable group name (i.e. GCC, LINUX, ZLIB) -## $2 : Processing callback function, run in source directory after unzipping -## $3 : Log file name -EXTRACT () { - local PKG_VAR_GROUP_NAME=${1} - local PROCESS_FUNC=${2} - local PKG_VANITY_NAME=${3:-${PKG_VAR_GROUP_NAME}} - - local PKG_VER=${PKG_VAR_GROUP_NAME}_VER - local PKG_VER=${!PKG_VER} - local PKG_DIR=${PKG_VAR_GROUP_NAME}_DIR - local PKG_DIR=${!PKG_DIR} - local PKG_ARCHIVE=${PKG_VAR_GROUP_NAME}_ARCHIVE - local PKG_ARCHIVE=${!PKG_ARCHIVE} - - echo "Extracting package ${PKG_VANITY_NAME} (ver. ${PKG_VER}) source: '${PKG_ARCHIVE}' -> '${PKG_DIR}'" - pushd ${CLFS_SOURCES} > /dev/null - - local STDOUT_LOG="${PKG_VANITY_NAME}.stdout.log" - local STDERR_LOG="${PKG_VANITY_NAME}.stderr.log" - - echo " stdout will be logged to '${STDOUT_LOG}'; stderr will be logged to '${STDERR_LOG}'" - - local TMP_OUT="${TMPDIR:-/tmp}/out.$$" TMP_ERR="${TMPDIR:-/tmp}/err.$$" - mkfifo "${TMP_OUT}" "${TMP_ERR}" - - tar xf ${PKG_ARCHIVE} && cd ${PKG_DIR} && \ - $PROCESS_FUNC >"${TMP_OUT}" 2>"${TMP_ERR}" & \ - tee "${CLFS_LOGS}/${STDOUT_LOG}" < "${TMP_OUT}" & \ - tee "${CLFS_LOGS}/${STDERR_LOG}" < "${TMP_ERR}" && \ - echo "Successfully extracted and processed package ${PKG_VANITY_NAME}!" || \ - echo "Failed to extract or process package ${PKG_VANITY_NAME}!" - - cd ${CLFS_SOURCES} - rm -rf ${PKG_DIR} - - rm "${TMP_OUT}" "${TMP_ERR}" > /dev/null - popd > /dev/null -} - -EOF - -cat >> /home/clfs/.bashrc <<EOF -export CLFS=${CLFS} -export CLFS_BUILD=${CLFS_BUILD} -export CLFS_CONFIGS=${CLFS_CONFIGS} -export CLFS_LOGS=${CLFS_LOGS} -export CLFS_SCRIPTS=${CLFS_SCRIPTS} -export CLFS_SOURCES=${CLFS_SOURCES} -export CLFS_ROOT=${CLFS_ROOT} -export CLFS_SYSROOT=${CLFS_SYSROOT} -export CLFS_BOOT_ROOT=${CLFS_BOOT_ROOT} -export CLFS_CROSS_ROOT=${CLFS_CROSS_ROOT} - -EOF - -cat >> /home/clfs/.bashrc <<'EOF' -export CLFS_HOSTNAME="raspi" -export CLFS_HOST="$(echo ${MACHTYPE} | sed "s/-[^-]*/-cross/")" -export CLFS_TARGET="arm-linux-musleabihf" -export CLFS_ARCH="arm" -export CLFS_ARCH_DTS_LIST=("bcm2837-rpi-3-b.dtb") -export CLFS_GCC_ARCH="armv8-a+crc+crypto" -export CLFS_GCC_ARCH_HAS_FLOAT_AND_FPU=true -export CLFS_GCC_FLOAT="hard" -export CLFS_GCC_FPU="crypto-neon-fp-armv8" -export CLFS_GCC_TUNE="cortex-a53" - -if [ "${CLFS_GCC_ARCH_HAS_FLOAT_AND_FPU}" = true ]; then -export CLFS_GCC_FLOAT_OPT="--with-float=${CLFS_GCC_FLOAT}" -export CLFS_GCC_FPU_OPT="--with-fpu=${CLFS_GCC_FPU}" -fi - -export CLFS_CROSS_SYSROOT=${CLFS_CROSS_ROOT}/${CLFS_TARGET} - -MAKEFLAGS="-j$(nproc --all)" -LC_ALL=POSIX -PATH=${CLFS_CROSS_ROOT}/bin:/bin:/usr/bin -export MAKEFLAGS LC_ALL PATH -unset CFLAGS -EOF - -chown -Rf clfs /home/clfs - - -su - clfs <<'CLFS_USER_EOF' - -source ~/.bashrc - - -################################################################################ -### II) Setting package version variables ###################################### -################################################################################ -## Defines a package -## $1 : The name of the package variable group (e.g. MUSL, LINUX, GCC) -## $2 : The package source version -## $3 : The package source archive compression (e.g. gz, bz2, xz) -## $4 : The package source directory prefix -## $5 : The package source archive prefix. Overrides the PKG_DIR_PREFIX if defined -DEFINE () { - local PKG_NAME=$1 - local PKG_VER=$2 - local PKG_COMPRESSION=$3 - local PKG_DIR_PREFIX=$4 - local PKG_ARCHIVE_PREFIX=$5 - - local PKG_VER_SUBSTR=${PKG_VER:+'-'}${PKG_VER} - local PKG_DIR=${PKG_DIR_PREFIX}${PKG_VER_SUBSTR} - local PKG_ARCHIVE=${PKG_ARCHIVE_PREFIX:-${PKG_DIR_PREFIX}}${PKG_VER_SUBSTR}.tar.${PKG_COMPRESSION} - - [ -n "${PKG_VER}" ] && printf -v ${PKG_NAME}_VER ${PKG_VER} - printf -v ${PKG_NAME}_DIR ${PKG_DIR} - printf -v ${PKG_NAME}_ARCHIVE ${PKG_ARCHIVE} - - export "${PKG_NAME}_VER" "${PKG_NAME}_DIR" "${PKG_NAME}_ARCHIVE" -} - -###### "VAR_GROUP_NAME" "VERSION" "COMPRESSION" "DIR_PREFIX" "ARCHIVE_PREFIX" -#################################################################################################### -DEFINE "BINUTILS" "2.35" "xz" "binutils" "" -DEFINE "BOOTSCRIPTS" "" "gz" "bootscripts-embedded-master" "master" -DEFINE "BUSYBOX" "1.32.0" "bz2" "busybox" "" -DEFINE "DROPBEAR" "2020.80" "bz2" "dropbear" "" -DEFINE "GCC" "10.2.0" "xz" "gcc" "" -DEFINE "GMP" "6.2.0" "xz" "gmp" "" -DEFINE "IANA_ETC" "20200910" "gz" "iana-etc" "" -DEFINE "LINUX" "5.8.9" "xz" "linux" "" -DEFINE "MPC" "1.2.0" "gz" "mpc" "" -DEFINE "MPFR" "4.1.0" "xz" "mpfr" "" -DEFINE "MUSL" "1.2.1" "gz" "musl" "" -DEFINE "NETPLUG" "1.2.9.2" "bz2" "netplug" "" -DEFINE "UBOOT" "2020.07" "bz2" "u-boot" "" -DEFINE "ZLIB" "1.2.11" "xz" "zlib" "" - - -################################################################################ -### III) Preparation for the build ############################################# -################################################################################ -## Creating a FSH-compliant directory structure in CLFS_ROOT -mkdir -pv ${CLFS_ROOT}/{bin,boot,dev,etc,home,lib,media,mnt,opt,proc,root,run,sbin,srv,tmp} - -mkdir -pv ${CLFS_ROOT}/etc/{opt,} -mkdir -pv ${CLFS_ROOT}/lib/{modules,} -mkdir -pv ${CLFS_ROOT}/usr/{bin,include,lib,libexec,sbin,share,src} -mkdir -pv ${CLFS_ROOT}/usr/local/{bin,etc,games,include,lib,man,sbin,share,src} -mkdir -pv ${CLFS_ROOT}/usr/share/{man,misc} -mkdir -pv ${CLFS_ROOT}/var/{cache,lib,local,lock,log,mail,opt,spool,tmp} - -ln -fsv ../proc/mounts ${CLFS_ROOT}/etc/mtab -ln -fsv ../run ${CLFS_ROOT}/var/run -ln -fsv ../mail ${CLFS_ROOT}/var/spool/mail - -chmod 0750 ${CLFS_ROOT}/root -chmod 1777 ${CLFS_ROOT}/{var/,}tmp - - -## Ensuring that ${CLFS_SYSROOT}, ${CLFS_BOOT_ROOT}, and ${CLFS_CROSS_(SYS)ROOT} exist -mkdir -pv ${CLFS_SYSROOT} ${CLFS_BOOT_ROOT} ${CLFS_CROSS_SYSROOT} -#### this allows us to treat ${CLFS_CROSS_SYSROOT} and ${CLFS_CROSS_SYSROOT}/usr identically -ln -fsv . ${CLFS_CROSS_SYSROOT}/usr - - -## Creating the group,passwd, and lastlog files -cat > ${CLFS_ROOT}/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 - -cat > ${CLFS_ROOT}/etc/passwd << "EOF" -root::0:0:root:/root:/bin/ash -EOF - -touch ${CLFS_ROOT}/var/log/lastlog -chmod -v 664 ${CLFS_ROOT}/var/log/lastlog - - -cd ${CLFS_SOURCES} - - -################################################################################ -### IV) Building the cross-compilation toolchain ############################### -################################################################################ -## Binutils - Pass 1 -BINUTILS_PASS1 () { - mkdir -v binutils-build - cd binutils-build - - ../configure \ - --prefix=${CLFS_CROSS_ROOT} \ - --with-sysroot=${CLFS_CROSS_SYSROOT} \ - --build=${CLFS_HOST} \ - --host=${CLFS_HOST} \ - --target=${CLFS_TARGET} \ - --disable-nls \ - --disable-shared \ - --disable-multilib \ - --disable-werror - - make && make install -} -EXTRACT "BINUTILS" BINUTILS_PASS1 "toolchain-binutils-pass1-install" - - -## GCC - Pass 1 -GCC_PASS1 () { - tar xf ../${MPFR_ARCHIVE} - mv -v ${MPFR_DIR} mpfr - tar xf ../${GMP_ARCHIVE} - mv -v ${GMP_DIR} gmp - tar xf ../${MPC_ARCHIVE} - mv -v ${MPC_DIR} mpc - - mkdir -v gcc-build - cd gcc-build - - ../configure \ - --prefix=${CLFS_CROSS_ROOT} \ - --with-sysroot=${CLFS_CROSS_SYSROOT} \ - --build=${CLFS_HOST} \ - --host=${CLFS_HOST} \ - --target=${CLFS_TARGET} \ - --with-newlib \ - --without-headers \ - --enable-initfini-array \ - --disable-nls \ - --disable-shared \ - --disable-multilib \ - --disable-decimal-float \ - --disable-threads \ - --disable-libatomic \ - --disable-libgomp \ - --disable-libquadmath \ - --disable-libsanitizer \ - --disable-libssp \ - --disable-libvtv \ - --disable-libstdcxx \ - --enable-languages=c,c++ \ - --with-arch=${CLFS_ARM_ARCH} \ - --with-tune=${CLFS_GCC_TUNE} \ - ${CLFS_GCC_FLOAT_OPT} ${CLFS_GCC_FPU_OPT} - - make all-gcc all-target-libgcc && make install-gcc install-target-libgcc - - cd .. - cat gcc/limitx.h gcc/glimits.h gcc/limity.h > \ - `dirname $(${CLFS_TARGET}-gcc -print-libgcc-file-name)`/install-tools/include/limits.h -} -EXTRACT "GCC" GCC_PASS1 "toolchain-gcc-pass1-install" - - -## Linux API Headers -LINUX () { - make mrproper - - make ARCH=${CLFS_ARCH} headers_check - make ARCH=${CLFS_ARCH} headers - - find usr/include -name '.*' -delete - rm usr/include/Makefile - cp -r usr/include ${CLFS_CROSS_SYSROOT} -} -EXTRACT "LINUX" LINUX "toolchain-linux-headers-install" - - -## Musl libc -MUSL () { - ./configure \ - CROSS_COMPILE=${CLFS_TARGET}- \ - --prefix=/ \ - --build=${CLFS_HOST} \ - --host=${CLFS_HOST} \ - --target=${CLFS_TARGET} - - make && make DESTDIR=${CLFS_CROSS_SYSROOT} install - - ${CLFS_CROSS_ROOT}/libexec/gcc/${CLFS_TARGET}/${GCC_VER}/install-tools/mkheaders -} -EXTRACT "MUSL" MUSL "toolchain-libc-install" - - -## Libstdc++ - Pass 1 -LIBSTDCXX_PASS1 () { - mkdir -v libstdcxx-build - cd libstdcxx-build - - ../libstdc++-v3/configure \ - --prefix=/ \ - --build=${CLFS_HOST} \ - --host=${CLFS_HOST} \ - --target=${CLFS_TARGET} \ - --disable-nls \ - --disable-multilib \ - --disable-libstdcxx-pch \ - --with-gxx-include-dir=${CLFS_CROSS_SYSROOT}/include/c++/${GCC_VER} - - make && make DESTDIR=${CLFS_CROSS_SYSROOT} install -} -EXTRACT "GCC" LIBSTDCXX_PASS1 "toolchain-libstdc++-pass1-install" - - -## Binutils - Pass 2 -BINUTILS_PASS2 () { - mkdir -v binutils-build - cd binutils-build - - ../configure \ - --prefix=${CLFS_CROSS_ROOT} \ - --with-sysroot=${CLFS_SYSROOT} \ - --with-build-sysroot=${CLFS_CROSS_SYSROOT} \ - --build=${CLFS_HOST} \ - --host=${CLFS_HOST} \ - --target=${CLFS_TARGET} \ - --disable-nls \ - --enable-shared \ - --disable-multilib \ - --disable-werror - - make && make install -} -EXTRACT "BINUTILS" BINUTILS_PASS2 "toolchain-binutils-pass2-install" - - -## GCC - Pass 2 -GCC_PASS2 () { - tar xf ../${MPFR_ARCHIVE} - mv -v ${MPFR_DIR} mpfr - tar xf ../${GMP_ARCHIVE} - mv -v ${GMP_DIR} gmp - tar xf ../${MPC_ARCHIVE} - mv -v ${MPC_DIR} mpc - - mkdir -v gcc-build - cd gcc-build - - mkdir -pv ${CLFS_TARGET}/libgcc - ln -s ../../../libgcc/gthr-posix.h ${CLFS_TARGET}/libgcc/gthr-default.h - - ../configure \ - --prefix=${CLFS_CROSS_ROOT} \ - --with-sysroot=${CLFS_SYSROOT} \ - --with-build-sysroot=${CLFS_CROSS_SYSROOT} \ - --build=${CLFS_HOST} \ - --host=${CLFS_HOST} \ - CC_FOR_TARGET=${CLFS_TARGET}-gcc \ - --target=${CLFS_TARGET} \ - --enable-initfini-array \ - --disable-nls \ - --disable-multilib \ - --disable-libsanitizer \ - --disable-libstdcxx \ - --enable-languages=c,c++ \ - --with-arch=${CLFS_ARM_ARCH} \ - --with-tune=${CLFS_GCC_TUNE} \ - ${CLFS_GCC_FLOAT_OPT} ${CLFS_GCC_FPU_OPT} - - make && make install -} -EXTRACT "GCC" GCC_PASS2 "toolchain-gcc-pass2-install" - - -## Libstdc++ - Pass 2 -LIBSTDCXX_PASS2 () { - ln -s gthr-posix.h libgcc/gthr-default.h - - mkdir -v libstdcxx-build - cd libstdcxx-build - - ../libstdc++-v3/configure \ - CXXFLAGS="-g -O2 -D_GNU_SOURCE" \ - --prefix=/ \ - --build=${CLFS_HOST} \ - --host=${CLFS_HOST} \ - --target=${CLFS_TARGET} \ - --disable-nls \ - --disable-multilib \ - --disable-libstdcxx-pch - - make && make DESTDIR=${CLFS_CROSS_SYSROOT} install -} -EXTRACT "GCC" LIBSTDCXX_PASS2 "toolchain-libstdc++-pass2-install" - - -## Setting toolchain variables -echo export CC=\""${CLFS_TARGET}-gcc\"" >> ~/.bashrc -echo export CXX=\""${CLFS_TARGET}-g++\"" >> ~/.bashrc -echo export AR=\""${CLFS_TARGET}-ar\"" >> ~/.bashrc -echo export AS=\""${CLFS_TARGET}-as\"" >> ~/.bashrc -echo export LD=\""${CLFS_TARGET}-ld\"" >> ~/.bashrc -echo export RANLIB=\""${CLFS_TARGET}-ranlib\"" >> ~/.bashrc -echo export READELF=\""${CLFS_TARGET}-readelf\"" >> ~/.bashrc -echo export STRIP=\""${CLFS_TARGET}-strip\"" >> ~/.bashrc - - -source ~/.bashrc - - -################################################################################ -### V) Building and installing basic system packages ########################### -################################################################################ -## Creating passwd, group, and lastlog files -ln -svf ../proc/mounts ${CLFS_ROOT}/etc/mtab - -cat > ${CLFS_ROOT}/etc/passwd <<'EOF' -root::0:0:root:/root:/bin/ash -EOF - -cat > ${CLFS_ROOT}/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 ${CLFS_ROOT}/var/log/lastlog -chmod -v 664 ${CLFS_ROOT}/var/log/lastlog - -## Installing libgcc -cp -v ${CLFS_CROSS_SYSROOT}/lib/libgcc_s.so{.1,} ${CLFS_ROOT}/lib/ -${CLFS_TARGET}-strip ${CLFS_ROOT}/lib/libgcc_s.so{.1,} - - -## Linux API Headers -LINUX () { - make mrproper - - make ARCH=${CLFS_ARCH} headers_check - make ARCH=${CLFS_ARCH} headers - - find usr/include -name '.*' -delete - rm usr/include/Makefile - cp -r usr/include ${CLFS_SYSROOT}/usr -} -EXTRACT "LINUX" LINUX "core-pkg-linux-headers-install" - - -## Musl libc -MUSL () { - ./configure \ - CROSS_COMPILE=${CLFS_TARGET}- \ - --prefix=/usr \ - --build=${CLFS_HOST} \ - --host=${CLFS_TARGET} \ - --target=${CLFS_TARGET} - - make && make DESTDIR=${CLFS_SYSROOT} install -} -EXTRACT "MUSL" MUSL "core-pkg-iana-etc-install" - - -## Libstdc++ -LIBSTDCXX () { - ln -s gthr-posix.h libgcc/gthr-default.h - - mkdir -v libstdcxx-build - cd libstdcxx-build - - ../libstdc++-v3/configure \ - CXXFLAGS="-g -O2 -D_GNU_SOURCE" \ - --prefix=/usr \ - --build=${CLFS_HOST} \ - --host=${CLFS_TARGET} \ - --target=${CLFS_TARGET} \ - --disable-nls \ - --disable-multilib - - make && make DESTDIR=${CLFS_SYSROOT} install -} -EXTRACT "GCC" LIBSTDCXX "core-pkg-libstdc++-install" - - -## Installing busybox -BUSYBOX () { - make distclean - - make ARCH="${CLFS_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="${CLFS_ARCH}" CROSS_COMPILE="${CLFS_TARGET}-" && \ - make ARCH="${CLFS_ARCH}" CROSS_COMPILE="${CLFS_TARGET}-" CONFIG_PREFIX="${CLFS_ROOT}" install - - #### For building the linux kernel with modules - cp -v examples/depmod.pl ${CLFS_CROSS_ROOT}/bin - chmod -v 755 ${CLFS_CROSS_ROOT}/bin/depmod.pl -} -EXTRACT "BUSYBOX" BUSYBOX "core-pkg-busybox-install" - - -## Installing iana-etc -IANA_ETC () { - cp protocols services ${CLFS_ROOT}/etc -} -EXTRACT "IANA_ETC" IANA_ETC "core-pkg-iana-etc-install" - - -## Zlib -ZLIB () { - ./configure \ - --prefix=/usr \ - --const \ - --shared - - make && make DESTDIR=${CLFS_SYSROOT} install -} -EXTRACT "ZLIB" ZLIB "core-pkg-zlib-install" - - -### Making the system bootable -## /etc/fstab file -cat > ${CLFS_ROOT}/etc/fstab <<'EOF' -# file-system mount-point type options dump fsck -EOF - - -## Linux kernel -LINUX () { - make mrproper - - cp ${CLFS_CONFIGS}/linux-kernel-config .config - - make ARCH=${CLFS_ARCH} CROSS_COMPILE=${CLFS_TARGET}- && \ - make ARCH=${CLFS_ARCH} CROSS_COMPILE=${CLFS_TARGET}- INSTALL_MOD_PATH=${CLFS_ROOT} modules_install - - cp arch/${CLFS_ARCH}/boot/zImage ${CLFS_BOOT_ROOT} - for DTS in ${CLFS_ARCH_DTS_LIST[@]} - do - cp arch/${CLFS_ARCH}/boot/dts/$DTS ${CLFS_BOOT_ROOT} - done -} -EXTRACT "LINUX" LINUX "linux-kernel-build" - - -## Das U-Boot -UBOOT () { - make distclean - - cp ${CLFS_CONFIGS}/uboot-config .config - - make ARCH=${CLFS_ARCH} CROSS_COMPILE=${CLFS_TARGET}- - - cp u-boot.bin ${CLFS_BOOT_ROOT} -} -EXTRACT "UBOOT" UBOOT "uboot-bootloader-build" - - -## Bootscripts -BOOTSCRIPTS () { - make DESTDIR=${CLFS_ROOT} install-bootscripts - make DESTDIR=${CLFS_ROOT} install-dropbear - make DESTDIR=${CLFS_ROOT} install-netplug -} -EXTRACT "BOOTSCRIPTS" BOOTSCRIPTS "core-pkg-bootscripts-install" - - -## Configuring mdev -cat > ${CLFS_ROOT}/etc/mdev.conf<<'EOF' -# /etc/mdev/conf - -# Devices: -# Syntax: %s %d:%d %s -# devices user:group mode - -# null does already exist; therefore ownership has to be changed with command -null root:root 0666 @chmod 666 $MDEV -zero root:root 0666 -grsec root:root 0660 -full root:root 0666 - -random root:root 0666 -urandom root:root 0444 -hwrandom root:root 0660 - -# console does already exist; therefore ownership has to be changed with command -#console root:tty 0600 @chmod 600 $MDEV && mkdir -p vc && ln -sf ../$MDEV vc/0 -console root:tty 0600 @mkdir -pm 755 fd && cd fd && for x in 0 1 2 3 ; do ln -sf /proc/self/fd/$x $x; done - -fd0 root:floppy 0660 -kmem root:root 0640 -mem root:root 0640 -port root:root 0640 -ptmx root:tty 0666 - -# ram.* -ram([0-9]*) root:disk 0660 >rd/%1 -loop([0-9]+) root:disk 0660 >loop/%1 -sd[a-z].* root:disk 0660 */lib/mdev/usbdisk_link -hd[a-z][0-9]* root:disk 0660 */lib/mdev/ide_links -md[0-9] root:disk 0660 - -tty root:tty 0666 -tty[0-9] root:root 0600 -tty[0-9][0-9] root:tty 0660 -ttyS[0-9]* root:tty 0660 -pty.* root:tty 0660 -vcs[0-9]* root:tty 0660 -vcsa[0-9]* root:tty 0660 - -ttyLTM[0-9] root:dialout 0660 @ln -sf $MDEV modem -ttySHSF[0-9] root:dialout 0660 @ln -sf $MDEV modem -slamr root:dialout 0660 @ln -sf $MDEV slamr0 -slusb root:dialout 0660 @ln -sf $MDEV slusb0 -fuse root:root 0666 - -# dri device -card[0-9] root:video 0660 =dri/ - -# alsa sound devices and audio stuff -pcm.* root:audio 0660 =snd/ -control.* root:audio 0660 =snd/ -midi.* root:audio 0660 =snd/ -seq root:audio 0660 =snd/ -timer root:audio 0660 =snd/ - -adsp root:audio 0660 >sound/ -audio root:audio 0660 >sound/ -dsp root:audio 0660 >sound/ -mixer root:audio 0660 >sound/ -sequencer.* root:audio 0660 >sound/ - -# misc stuff -agpgart root:root 0660 >misc/ -psaux root:root 0660 >misc/ -rtc root:root 0664 >misc/ - -# input stuff -event[0-9]+ root:root 0640 =input/ -mice root:root 0640 =input/ -mouse[0-9] root:root 0640 =input/ -ts[0-9] root:root 0600 =input/ - -# v4l stuff -vbi[0-9] root:video 0660 >v4l/ -video[0-9] root:video 0660 >v4l/ - -# dvb stuff -dvb.* root:video 0660 */lib/mdev/dvbdev - -# load drivers for usb devices -usbdev[0-9].[0-9] root:root 0660 */lib/mdev/usbdev -usbdev[0-9].[0-9]_.* root:root 0660 - -# net devices -tun[0-9]* root:root 0600 =net/ -tap[0-9]* root:root 0600 =net/ - -# zaptel devices -zap(.*) root:dialout 0660 =zap/%1 -dahdi!(.*) root:dialout 0660 =dahdi/%1 - -# raid controllers -cciss!(.*) root:disk 0660 =cciss/%1 -ida!(.*) root:disk 0660 =ida/%1 -rd!(.*) root:disk 0660 =rd/%1 - -sr[0-9] root:cdrom 0660 @ln -sf $MDEV cdrom - -# hpilo -hpilo!(.*) root:root 0660 =hpilo/%1 - -# xen stuff -xvd[a-z] root:root 0660 */lib/mdev/xvd_links -EOF - -## Creating /etc/profile -cat > ${CLFS_ROOT}/etc/profile <<'EOF' -# /etc/profile - -# Set the initial path -export PATH=/bin:/usr/bin - -if [ `id -u` -eq 0 ] ; then -PATH=/bin:/sbin:/usr/bin:/usr/sbin -unset HISTFILE -fi - -# Setup some environment variables. -export USER=`id -un` -export LOGNAME=$USER -export HOSTNAME=`/bin/hostname` -export HISTSIZE=1000 -export HISTFILESIZE=1000 -export PAGER='/bin/more ' -export EDITOR='/bin/vi' - -# End /etc/profile -EOF - -## Creating /etc/inittab -cat > ${CLFS_ROOT}/etc/inittab <<'EOF' -# /etc/inittab - -::sysinit:/etc/rc.d/startup - -tty1::respawn:/sbin/getty 38400 tty1 -tty2::respawn:/sbin/getty 38400 tty2 -tty3::respawn:/sbin/getty 38400 tty3 -tty4::respawn:/sbin/getty 38400 tty4 -tty5::respawn:/sbin/getty 38400 tty5 -tty6::respawn:/sbin/getty 38400 tty6 - -# Put a getty on the serial line (for a terminal). Uncomment this line if -# you're using a serial console on ttyS0, or uncomment and adjust it if using a -# serial console on a different serial port. -#::respawn:/sbin/getty -L ttyS0 115200 vt100 - -::shutdown:/etc/rc.d/shutdown -::ctrlaltdel:/sbin/reboot -EOF - -## Setting hostname -echo ${CLFS_HOSTNAME} > ${CLFS_ROOT}/etc/HOSTNAME - -## Customising /etc/hosts -cat > ${CLFS_ROOT}/etc/hosts <<'EOF' -# Begin /etc/hosts (no network card version) - -127.0.0.1 localhost - -# End /etc/hosts (no network card version) -EOF - -## Configuring the network script -mkdir -pv ${CLFS_ROOT}/etc/network/if-{post-{up,down},pre-{up,down},up,down}.d -mkdir -pv ${CLFS_ROOT}/usr/share/udhcpc - -cat > ${CLFS_ROOT}/etc/network/interfaces <<'EOF' -auto eth0 -iface eth0 inet dhcp -EOF - -cat > ${CLFS_ROOT}/usr/share/udhcpc/default.script <<'EOF' -#!/bin/sh -# udhcpc Interface Configuration -# Based on http://lists.debian.org/debian-boot/2002/11/msg00500.html -# udhcpc script edited by Tim Riker <Tim@Rikers.org> - -[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1 - -RESOLV_CONF="/etc/resolv.conf" -[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast" -[ -n "$subnet" ] && NETMASK="netmask $subnet" - -case "$1" in -deconfig) -/sbin/ifconfig $interface 0.0.0.0 -;; - -renew|bound) -/sbin/ifconfig $interface $ip $BROADCAST $NETMASK - -if [ -n "$router" ] ; then -while route del default gw 0.0.0.0 dev $interface ; do -true -done - -for i in $router ; do -route add default gw $i dev $interface -done -fi - -echo -n > $RESOLV_CONF -[ -n "$domain" ] && echo search $domain >> $RESOLV_CONF -for i in $dns ; do -echo nameserver $i >> $RESOLV_CONF -done -;; -esac - -exit 0 -EOF - -chmod +x ${CLFS_ROOT}/usr/share/udhcpc/default.script - - -source ~/.bashrc - - -################################################################################ -### VI) Building and installing additional system packages ##################### -################################################################################ -## Netplug -NETPLUG () { - patch -Np1 -i ../netplug-1.2.9.2-fixes-1.patch - - make && make DESTDIR=${CLFS_ROOT} install -} -EXTRACT "NETPLUG" NETPLUG "extra-pkg-netplug-install" - - -## Dropbear -DROPBEAR () { - cp ${CLFS_CONFIGS}/dropbear_config.h localoptions.h - - ./configure \ - --prefix=/usr \ - --build=${CLFS_HOST} \ - --host=${CLFS_TARGET} - - make MULTI=1 PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" && \ - make MULTI=1 PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" DESTDIR=${CLFS_ROOT} install - - install -dv ${CLFS_ROOT}/etc/dropbear -} -EXTRACT "DROPBEAR" DROPBEAR "extra-pkg-dropbear-install" - -source ~/.bashrc - - -CLFS_USER_EOF - -################################################################################ -### VII) Cleanup and packaging of finished system ############################## -################################################################################ -chown -Rv root:root ${CLFS_ROOT} -chgrp -v 13 ${CLFS_ROOT}/var/log/lastlog - -cd ${CLFS_ROOT} -tar cfjv ${CLFS_BUILD}/clfs-rootfs.tar.xz * -echo "Packaged CLFS rootfs: use \'tar -fpx ${CLFS_BUILD}/clfs-rootfs.tar.xz -C targetdir\' to unpack into a target directory" - -cd ${CLFS_BOOT_ROOT} -tar cfjv ${CLFS_BUILD}/clfs-bootfs.tar.xz * -echo "Packaged CLFS bootfs: use \'tar -fpx ${CLFS_BUILD}/clfs-bootfs.tar.xz -C targetdir\' to unpack into a target directory" - -echo "Finished and packaged CLFS system!" diff --git a/build-clfs-test b/build-clfs-test @@ -1,306 +0,0 @@ -#!/bin/sh - - -################################################################################ -### 0) Parameters ############################################################## -################################################################################ -export CLFS_HOSTNAME="raspi" -export CLFS_TARGET="arm-linux-musleabihf" -export CLFS_ARCH="arm" -export CLFS_ARCH_DTS_LIST=("bcm2837-rpi-3-b.dtb") -export CLFS_GCC_ARCH="armv8-a+crc+crypto" -export CLFS_GCC_ARCH_HAS_FLOAT_AND_FPU='true' -export CLFS_GCC_FLOAT="hard" -export CLFS_GCC_FPU="crypto-neon-fp-armv8" -export CLFS_GCC_TUNE="cortex-a53" - -export CLFS_CFLAGS="-O2 -pipe" -export CLFS_CXXFLAGS="-O2 -pipe" - - -################################################################################ -### I) Preparation for the build ############################################### -################################################################################ -export CLFS=/mnt/clfs -export CLFS_BUILD=${CLFS}/build -export CLFS_CONFIGS=${CLFS}/configs -export CLFS_LOGS=${CLFS}/logs -export CLFS_SCRIPTS=${CLFS}/scripts -export CLFS_SOURCES=${CLFS}/sources -export CLFS_ROOT=${CLFS}/rootfs -export CLFS_BOOT_ROOT=${CLFS}/bootfs -export CLFS_CROSS_NAME=crossfs -export CLFS_CROSS_ROOT=${CLFS}/${CLFS_CROSS_NAME} -export CLFS_CROSS_SYSROOT=${CLFS_CROSS_ROOT} #### this assignment is temporary - - -mkdir -pv ${CLFS} -rm -rf ${CLFS_BUILD} ${CLFS_ROOT} ${CLFS_BOOT_ROOT} ${CLFS_CROSS_ROOT} -chmod 777 ${CLFS} - -mkdir -pv ${CLFS_BUILD} ${CLFS_CONFIGS} ${CLFS_LOGS} ${CLFS_SCRIPTS} ${CLFS_SOURCES} -chmod -v a+wt ${CLFS_BUILD} ${CLFS_CONFIGS} ${CLFS_LOGS} ${CLFS_SCRIPTS} ${CLFS_SOURCES} - - -fetch_packages () { - rm -rf ${CLFS_SOURCES}/{md5sums,wget-list} - - tr -d '\r' < wget-list.src > ${CLFS_SOURCES}/wget-list - tr -d '\r' < md5sums.src > ${CLFS_SOURCES}/md5sums - - pushd ${CLFS_SOURCES} > /dev/null - wget --input-file=wget-list --continue - md5sum -c md5sums - popd > /dev/null -} - -fetch_packages - - -## Copying over scripts and additional config files -rm -rf ${CLFS_CONFIGS}/* ${CLFS_SCRIPTS}/* -cp -rf configs/* ${CLFS_CONFIGS} -cp -rf scripts/* ${CLFS_SCRIPTS} -chmod +x ${CLFS_SCRIPTS}/* - - -${CLFS_SCRIPTS}/host-check.sh -echo "Press enter to continue..." -read _ - - -## Creating the CLFS build user -rm -rf /home/clfs -userdel clfs - -sudo groupadd clfs -sudo useradd -s /bin/bash -g clfs -m -k /dev/null clfs - -chown -Rv clfs ${CLFS} - -mkdir -p /home/clfs - -cat > /home/clfs/.bash_profile <<'EOF' -exec env -i HOME=${HOME} TERM=${TERM} PS1='\u:\w\$ ' /bin/bash -EOF - -cat > /home/clfs/.bashrc <<'EOF' -set +h -umask 022 - -## Extracts a package source archive, and runs the given callback function. -## $1 : Package definition variable group name (i.e. GCC, LINUX, ZLIB) -## $2 : Processing callback function, run in source directory after unzipping -## $3 : Log file name -EXTRACT () { - local PKG_VAR_GROUP_NAME=${1} - local PROCESS_FUNC=${2} - local PKG_VANITY_NAME=${3:-${PKG_VAR_GROUP_NAME}} - - local PKG_VER=${PKG_VAR_GROUP_NAME}_VER - local PKG_VER=${!PKG_VER} - local PKG_DIR=${PKG_VAR_GROUP_NAME}_DIR - local PKG_DIR=${!PKG_DIR} - local PKG_ARCHIVE=${PKG_VAR_GROUP_NAME}_ARCHIVE - local PKG_ARCHIVE=${!PKG_ARCHIVE} - - echo "Extracting package ${PKG_VANITY_NAME} (ver. ${PKG_VER}) source: '${PKG_ARCHIVE}' -> '${PKG_DIR}'" - pushd ${CLFS_SOURCES} > /dev/null - - local STDOUT_LOG="${PKG_VANITY_NAME}.stdout.log" - local STDERR_LOG="${PKG_VANITY_NAME}.stderr.log" - - echo " stdout will be logged to '${STDOUT_LOG}'; stderr will be logged to '${STDERR_LOG}'" - - local TMP_OUT="${TMPDIR:-/tmp}/out.$$" TMP_ERR="${TMPDIR:-/tmp}/err.$$" - mkfifo "${TMP_OUT}" "${TMP_ERR}" - - tar xf ${PKG_ARCHIVE} && cd ${PKG_DIR} && \ - $PROCESS_FUNC >"${TMP_OUT}" 2>"${TMP_ERR}" & \ - tee "${CLFS_LOGS}/${STDOUT_LOG}" < "${TMP_OUT}" & \ - tee "${CLFS_LOGS}/${STDERR_LOG}" < "${TMP_ERR}" && \ - echo "Successfully extracted and processed package ${PKG_VANITY_NAME}!" || \ - echo "Failed to extract or process package ${PKG_VANITY_NAME}!" - - cd ${CLFS_SOURCES} - rm -rf ${PKG_DIR} - - rm "${TMP_OUT}" "${TMP_ERR}" > /dev/null - popd > /dev/null -} - -EOF - -cat >> /home/clfs/.bashrc <<EOF -export CLFS="${CLFS}" -export CLFS_BUILD="${CLFS_BUILD}" -export CLFS_CONFIGS="${CLFS_CONFIGS}" -export CLFS_LOGS="${CLFS_LOGS}" -export CLFS_SCRIPTS="${CLFS_SCRIPTS}" -export CLFS_SOURCES="${CLFS_SOURCES}" -export CLFS_ROOT="${CLFS_ROOT}" -export CLFS_BOOT_ROOT="${CLFS_BOOT_ROOT}" -export CLFS_CROSS_NAME="${CLFS_CROSS_NAME}" -export CLFS_CROSS_ROOT="${CLFS_CROSS_ROOT}" - -export CLFS_HOSTNAME="${CLFS_HOSTNAME}" -export CLFS_TARGET="${CLFS_TARGET}" -export CLFS_ARCH="${CLFS_ARCH}" -export CLFS_ARCH_DTS_LIST=(${CLFS_ARCH_DTS_LIST[@]}) -export CLFS_GCC_ARCH="${CLFS_GCC_ARCH}" -export CLFS_GCC_ARCH_HAS_FLOAT_AND_FPU="${CLFS_GCC_ARCH_HAS_FLOAT_AND_FPU}" -export CLFS_GCC_FLOAT="${CLFS_GCC_FLOAT}" -export CLFS_GCC_FPU="${CLFS_GCC_FPU}" -export CLFS_GCC_TUNE="${CLFS_GCC_TUNE}" - -unset CFLAGS CXXFLAGS -export CFLAGS="${CLFS_CFLAGS}" -export CXXFLAGS="${CLFS_CXXFLAGS}" - -EOF - -cat >> /home/clfs/.bashrc <<'EOF' -export CLFS_HOST="$(echo ${MACHTYPE} | sed "s/-[^-]*/-cross/")" - -[ "${CLFS_GCC_ARCH_HAS_FLOAT_AND_FPU}" = 'true' ] && \ - export CLFS_GCC_FLOAT_OPT="--with-float=${CLFS_GCC_FLOAT}" && \ - export CLFS_GCC_FPU_OPT="--with-fpu=${CLFS_GCC_FPU}" - -export CLFS_CROSS_SYSROOT=${CLFS_CROSS_ROOT}/${CLFS_TARGET} - -MAKEFLAGS="-j$(nproc --all)" -LC_ALL=POSIX -PATH=${CLFS_CROSS_ROOT}/bin:/bin:/usr/bin -export MAKEFLAGS LC_ALL PATH -EOF - -chown -Rf clfs /home/clfs - - -su - clfs <<'CLFS_USER_EOF' - -source ~/.bashrc - - -################################################################################ -### II) Setting package version variables ###################################### -################################################################################ -## Defines a package -## $1 : The name of the package variable group (e.g. MUSL, LINUX, GCC) -## $2 : The package source version -## $3 : The package source archive compression (e.g. gz, bz2, xz) -## $4 : The package source directory prefix -## $5 : The package source archive prefix. Overrides the PKG_DIR_PREFIX if defined -DEFINE () { - local PKG_NAME=$1 - local PKG_VER=$2 - local PKG_COMPRESSION=$3 - local PKG_DIR_PREFIX=$4 - local PKG_ARCHIVE_PREFIX=$5 - - local PKG_DIR=${PKG_DIR_PREFIX}${PKG_VER} - local PKG_ARCHIVE=${PKG_ARCHIVE_PREFIX}${PKG_VER}.tar.${PKG_COMPRESSION} - - [ -n "${PKG_VER}" ] && printf -v ${PKG_NAME}_VER ${PKG_VER} - printf -v ${PKG_NAME}_DIR ${PKG_DIR} - printf -v ${PKG_NAME}_ARCHIVE ${PKG_ARCHIVE} - - export "${PKG_NAME}_VER" "${PKG_NAME}_DIR" "${PKG_NAME}_ARCHIVE" -} - -###### "VAR_GROUP_NAME" "VERSION" "COMP" "DIR_PREFIX" "ARCHIVE_PREFIX" -#################################################################################################### -DEFINE "BASH" "5.0" "gz" "bash-" "bash-" -DEFINE "BINUTILS" "2.35" "xz" "binutils-" "binutils-" -DEFINE "BOOTSCRIPTS" "" "gz" "bootscripts-embedded-master" "master" -DEFINE "BUSYBOX" "1.32.0" "bz2" "busybox-" "busybox-" -DEFINE "COREUTILS" "8.32" "xz" "coreutils-" "coreutils-" -DEFINE "DROPBEAR" "2020.80" "bz2" "dropbear-" "dropbear-" -DEFINE "DIFFUTILS" "3.7" "xz" "diffutils-" "diffutils-" -DEFINE "FILE" "5.39" "gz" "file-" "file-" -DEFINE "FINDUTILS" "4.7.0" "xz" "findutils-" "findutils-" -DEFINE "GAWK" "5.1.0" "xz" "gawk-" "gawk-" -DEFINE "GCC" "10.2.0" "xz" "gcc-" "gcc-" -DEFINE "GMP" "6.2.0" "xz" "gmp-" "gmp-" -DEFINE "GREP" "3.4" "xz" "grep-" "grep-" -DEFINE "GZIP" "1.10" "xz" "gzip-" "gzip-" -DEFINE "IANA_ETC" "20200910" "gz" "iana-etc-" "iana-etc-" -DEFINE "LINUX" "5.8.9" "xz" "linux-" "linux-" -DEFINE "MAKE" "4.3" "gz" "make-" "make-" -DEFINE "MPC" "1.2.0" "gz" "mpc-" "mpc-" -DEFINE "MPFR" "4.1.0" "xz" "mpfr-" "mpfr-" -DEFINE "MUSL" "1.2.1" "gz" "musl-" "musl-" -DEFINE "M4" "1.4.18" "xz" "m4-" "m4-" -DEFINE "NCURSES" "6.2" "gz" "ncurses-" "ncurses-" -DEFINE "PATCH" "2.7.6" "xz" "patch-" "patch-" -DEFINE "SED" "4.8" "xz" "sed-" "sed-" -DEFINE "TAR" "1.32" "xz" "tar-" "tar-" -DEFINE "UBOOT" "2020.07" "bz2" "u-boot-" "u-boot-" -DEFINE "XZ" "5.2.5" "xz" "xz-" "xz-" -DEFINE "ZLIB" "1.2.11" "xz" "zlib-" "zlib-" - - -################################################################################ -### III) Preparation for the build ############################################# -################################################################################ -## Creating a FSH-compliant directory structure in CLFS_ROOT -mkdir -pv ${CLFS_ROOT}/{bin,boot,dev,etc,home,lib,media,mnt,opt,proc,root,run,sbin,srv,tmp} - -mkdir -pv ${CLFS_ROOT}/etc/{opt,} -mkdir -pv ${CLFS_ROOT}/lib/{modules,} -mkdir -pv ${CLFS_ROOT}/usr/{bin,include,lib,libexec,sbin,share,src} -mkdir -pv ${CLFS_ROOT}/usr/local/{bin,etc,games,include,lib,man,sbin,share,src} -mkdir -pv ${CLFS_ROOT}/usr/share/{man,misc} -mkdir -pv ${CLFS_ROOT}/var/{cache,lib,local,lock,log,mail,opt,spool,tmp} - -ln -fsv ../proc/mounts ${CLFS_ROOT}/etc/mtab -ln -fsv ../run ${CLFS_ROOT}/var/run -ln -fsv ../mail ${CLFS_ROOT}/var/spool/mail - -chmod 0750 ${CLFS_ROOT}/root -chmod 1777 ${CLFS_ROOT}/{var/,}tmp - - -## Ensuring that ${CLFS_SYSROOT}, ${CLFS_BOOT_ROOT}, and ${CLFS_CROSS_(SYS)ROOT} exist -mkdir -pv ${CLFS_SYSROOT} ${CLFS_BOOT_ROOT} ${CLFS_CROSS_SYSROOT} -#### this allows us to treat ${CLFS_CROSS_SYSROOT} and ${CLFS_CROSS_SYSROOT}/usr identically -ln -fsv . ${CLFS_CROSS_SYSROOT}/usr - - -## Creating the group,passwd, and lastlog files -cat > ${CLFS_ROOT}/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 - -cat > ${CLFS_ROOT}/etc/passwd << "EOF" -root::0:0:root:/root:/bin/ash -EOF - -touch ${CLFS_ROOT}/var/log/lastlog -chmod -v 664 ${CLFS_ROOT}/var/log/lastlog - - -cd ${CLFS_SOURCES} - -${CLFS_SCRIPTS}/build-cross-toolchain.sh - -source ~/.bashrc - -${CLFS_SCRIPTS}/build-test-packages.sh - -CLFS_USER_EOF diff --git a/md5sums.src b/md5sums.src @@ -1,6 +1,5 @@ fc8d55e2f6096de8ff8171173b6f5087 binutils-2.35.tar.xz 9576986f1a960da471d03b72a62f13c7 busybox-1.32.0.tar.bz2 -67e051268d0c475ea773822f7500d0e5 bzip2-1.0.8.tar.gz 63527580ca47706b70046f87bb9d14fe dropbear-2020.80.tar.bz2 e9fd9b1789155ad09bcf3ae747596b50 gcc-10.2.0.tar.xz a325e3f09e6d91e62101e59f9bda3ec1 gmp-6.2.0.tar.xz @@ -11,7 +10,4 @@ bdd3d5efba9c17da8d83a35ec552baef mpfr-4.1.0.tar.xz 2720bdbed739e94c4d7acdc91c0cd9d6 musl-1.2.1.tar.gz 1d6db99536bdf875ce441f2c0e45ebf2 netplug-1.2.9.2.tar.bz2 86e51eeccd15e658ad1df943a0edf622 u-boot-2020.07.tar.bz2 -e06c222e186f7cc013fd272d023710cb wireless_tools.29.tar.gz -aa1621ec7013a19abab52a8aff04fe5b xz-5.2.5.tar.xz 85adef240c5f370b308da8c938951a68 zlib-1.2.11.tar.xz -dd0b53631303b8f972dafa6fd34beb0c zstd-1.4.5.tar.gz -\ No newline at end of file diff --git a/md5sums.src.bak b/md5sums.src.bak @@ -1,17 +0,0 @@ -fc8d55e2f6096de8ff8171173b6f5087 binutils-2.35.tar.xz -9576986f1a960da471d03b72a62f13c7 busybox-1.32.0.tar.bz2 -67e051268d0c475ea773822f7500d0e5 bzip2-1.0.8.tar.gz -63527580ca47706b70046f87bb9d14fe dropbear-2020.80.tar.bz2 -e9fd9b1789155ad09bcf3ae747596b50 gcc-10.2.0.tar.xz -a325e3f09e6d91e62101e59f9bda3ec1 gmp-6.2.0.tar.xz -e7f09d1c59f429d259fe941d9de6b421 iana-etc-20200910.tar.gz -4d8b8af44c9d342624c036428da09ab6 linux-5.8.9.tar.xz -2f1ce56ac775f2be090863f364931a03 mpc-1.2.0.tar.gz -bdd3d5efba9c17da8d83a35ec552baef mpfr-4.1.0.tar.xz -2720bdbed739e94c4d7acdc91c0cd9d6 musl-1.2.1.tar.gz -1d6db99536bdf875ce441f2c0e45ebf2 netplug-1.2.9.2.tar.bz2 -86e51eeccd15e658ad1df943a0edf622 u-boot-2020.07.tar.bz2 -e06c222e186f7cc013fd272d023710cb wireless_tools.29.tar.gz -aa1621ec7013a19abab52a8aff04fe5b xz-5.2.5.tar.xz -85adef240c5f370b308da8c938951a68 zlib-1.2.11.tar.xz -dd0b53631303b8f972dafa6fd34beb0c zstd-1.4.5.tar.gz -\ No newline at end of file diff --git a/scripts/build-core-packages.sh b/scripts/build-core-packages.sh @@ -11,6 +11,7 @@ ### ---------------------------------------------------------------------------- ### - CLFS_ROOT : Root folder for cross-compiled system ### - CLFS_BOOT_ROOT : Root folder for boot-required binaries +### - CLFS_CROSS_NAME : Name of cross-toolchain root ### - CLFS_CROSS_ROOT : Root folder for cross-toolchain ### - CLFS_CROSS_SYSROOT : Sysroot for cross-toolchain ################################################################################ @@ -18,12 +19,14 @@ source ~/.bashrc ## Creating passwd, group, and lastlog files -ln -svf ../proc/mounts ${CLFS_ROOT}/etc/mtab +ln -fsv ../proc/mounts ${CLFS_ROOT}/etc/mtab + cat > ${CLFS_ROOT}/etc/passwd <<'EOF' root::0:0:root:/root:/bin/ash EOF + cat > ${CLFS_ROOT}/etc/group <<'EOF' root:x:0: bin:x:1: @@ -43,224 +46,154 @@ usb:x:14: cdrom:x:15: EOF + touch ${CLFS_ROOT}/var/log/lastlog chmod -v 664 ${CLFS_ROOT}/var/log/lastlog + ## Installing libgcc cp -v ${CLFS_CROSS_SYSROOT}/lib/libgcc_s.so.1 ${CLFS_ROOT}/usr/lib/ +ln -fsv ../usr/lib/libgcc_s.so.1 ${CLFS_ROOT}/lib/libgcc_s.so.1 ${CLFS_TARGET}-strip ${CLFS_ROOT}/lib/libgcc_s.so.1 -ln -sfv ../usr/lib/libgcc_s.so.1 ${CLFS_ROOT}/lib/libgcc_s.so.1 - -## Linux API Headers LINUX () { - make mrproper - - make ARCH=${CLFS_ARCH} headers_check - make ARCH=${CLFS_ARCH} headers - - find usr/include -name '.*' -delete - rm usr/include/Makefile - cp -r usr/include ${CLFS_ROOT}/usr + make mrproper + + make ARCH=${CLFS_ARCH} headers_check + make ARCH=${CLFS_ARCH} headers + + find usr/include -name '.*' -delete + rm usr/include/Makefile + cp -r usr/include ${CLFS_ROOT}/usr } EXTRACT "LINUX" LINUX "core-pkg-linux-headers" -## Musl libc MUSL () { - ./configure \ - CROSS_COMPILE=${CLFS_TARGET}- \ - --prefix=/usr \ - --build=${CLFS_HOST} \ - --host=${CLFS_TARGET} \ - --target=${CLFS_TARGET} \ - --enable-optimize \ - --enable-warnings \ - --disable-static - - make && make DESTDIR=${CLFS_ROOT} install - - ln -fsv ../usr/lib/libc.so ${CLFS_ROOT}/lib/ld-musl-*.so.1 + ./configure \ + CROSS_COMPILE=${CLFS_TARGET}- \ + --prefix=/usr \ + --build=${CLFS_HOST} \ + --host=${CLFS_TARGET} \ + --target=${CLFS_TARGET} \ + --enable-optimize \ + --enable-warnings \ + -disable-static + + make && make DESTDIR=${CLFS_ROOT} install + + ln -fsv ../usr/lib/libc.so ${CLFS_ROOT}/lib/ld-musl-*.so.1 } EXTRACT "MUSL" MUSL "core-pkg-musl-libc" -## Libstdc++ LIBSTDCXX () { - ln -s gthr-posix.h libgcc/gthr-default.h - - mkdir -v libstdcxx-build - cd libstdcxx-build - - ../libstdc++-v3/configure \ - CXXFLAGS="-g -O2 -D_GNU_SOURCE" \ - --prefix=/usr \ - --build=${CLFS_HOST} \ - --host=${CLFS_TARGET} \ - --target=${CLFS_TARGET} \ - --disable-multilib \ - --disable-nls \ - --disable-static - - make && make DESTDIR=${CLFS_ROOT} install + ln -s gthr-posix.h libgcc/gthr-default.h + + mkdir -v libstdcxx-build + cd libstdcxx-build + + ../libstdc++-v3/configure \ + CXXFLAGS="-g -O2 -D_GNU_SOURCE" \ + --prefix=/usr \ + --build=${CLFS_HOST} \ + --host=${CLFS_TARGET} \ + --target=${CLFS_TARGET} \ + --disable-multilib \ + --disable-nls \ + --disable-static + + make && make DESTDIR=${CLFS_ROOT} install } EXTRACT "GCC" LIBSTDCXX "core-pkg-libstdc++" -## Zlib ZLIB () { - ./configure \ - --prefix=/usr \ - --const \ - --shared + ./configure \ + --prefix=/usr \ + --const \ + --shared - make && make DESTDIR=${CLFS_ROOT} install + make && make DESTDIR=${CLFS_ROOT} install - rm -v ${CLFS_ROOT}/usr/lib/libz.a - mv -v ${CLFS_ROOT}/usr/lib/libz.so.* ${CLFS_ROOT}/lib - ln -sfv ../../lib/$(readlink ${CLFS_ROOT}/usr/lib/libz.so) ${CLFS_ROOT}/usr/lib/libz.so + rm -v ${CLFS_ROOT}/usr/lib/libz.a + mv -v ${CLFS_ROOT}/usr/lib/libz.so.* ${CLFS_ROOT}/lib + ln -sfv ../../lib/$(readlink ${CLFS_ROOT}/usr/lib/libz.so) ${CLFS_ROOT}/usr/lib/libz.so } EXTRACT "ZLIB" ZLIB "core-pkg-zlib" -## Bzpi2 -BZIP2 () { - sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile - sed -i "s@(PREFIX)/man@(PREFIX)/share/man@g" Makefile - - make -f Makefile-libbz2_so && make clean && \ - make && make PREFIX=${CLFS_ROOT}/usr install - - rm -v ${CLFS_ROOT}/usr/lib/libbz2.a - cp -v bzip2-shared ${CLFS_ROOT}/bin/bzip2 - cp -av libbz2.so* ${CLFS_ROOT}/lib - ln -fsv ../../lib/libbz2.so.1.0 ${CLFS_ROOT}/usr/lib/libbz2.so - rm -v ${CLFS_ROOT}/usr/bin/{bunzip2,bzcat,bzip2} - ln -sv bzip2 ${CLFS_ROOT}/bin/bunzip2 - ln -sv bzip2 ${CLFS_ROOT}/bin/bzcat -} -# EXTRACT "BZIP2" BZIP2 "core-pkg-bzip2" - - -## Xz -XZ () { - ./configure \ - --prefix=${CLFS_ROOT}/usr \ - --build=${CLFS_HOST} \ - --host=${CLFS_TARGET} \ - --disable-static \ - --docdir=${CLFS_ROOT}/usr/share/doc/xz-5.2.5 - - make && make install - - mv -v ${CLFS_ROOT}/usr/bin/{lzma,unlzma,lzcat,xz,unxz,xzcat} ${CLFS_ROOT}/bin - mv -v ${CLFS_ROOT}/usr/lib/liblzma.so.* ${CLFS_ROOT}/lib - ln -svf ../../lib/$(readlink ${CLFS_ROOT}/usr/lib/liblzma.so) ${CLFS_ROOT}/usr/lib/liblzma.so -} -# EXTRACT "XZ" XZ "core-pkg-xz" - - -## Zstd -ZSTD () { - make && make prefix=${CLFS_ROOT}/usr install - - rm -v ${CLFS_ROOT}/usr/lib/libzstd.a - mv -v ${CLFS_ROOT}/usr/lib/libzstd.so.* ${CLFS_ROOT}/lib - ln -sfv ../../lib/$(readlink ${CLFS_ROOT}/usr/lib/libzstd.so) ${CLFS_ROOT}/usr/lib/libzstd.so -} -# EXTRACT "ZSTD" ZSTD "core-pkg-zstd" - - -## Libressl -LIBRESSL () { - ./configure \ - --prefix=/usr \ - --build=${CLFS_HOST} \ - --host=${CLFS_TARGET} \ - --libdir=${CLFS_ROOT}/lib \ - --with-openssldir=/etc/ssl - - make && make DESTDIR=${CLFS_ROOT} install -} -# EXTRACT "LIBRESSL" LIBRESSL "core-pkg-libressl" - - -## Installing busybox BUSYBOX () { - make distclean + make distclean - make ARCH="${CLFS_ARCH}" defconfig + make ARCH="${CLFS_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_\)\(.*\)\(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_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 + sed -i 's/\(CONFIG_UDPSVD\)=y/# \1 is not set/' .config + sed -i 's/\(CONFIG_TCPSVD\)=y/# \1 is not set/' .config - make ARCH="${CLFS_ARCH}" CROSS_COMPILE="${CLFS_TARGET}-" && \ - make ARCH="${CLFS_ARCH}" CROSS_COMPILE="${CLFS_TARGET}-" CONFIG_PREFIX="${CLFS_ROOT}" install + make ARCH="${CLFS_ARCH}" CROSS_COMPILE="${CLFS_TARGET}-" && \ + make ARCH="${CLFS_ARCH}" CROSS_COMPILE="${CLFS_TARGET}-" CONFIG_PREFIX="${CLFS_ROOT}" install - #### For building the linux kernel with modules - cp -v examples/depmod.pl ${CLFS_ROOT}/bin - chmod -v 755 ${CLFS_ROOT}/bin/depmod.pl + #### For building the linux kernel with modules + cp -v examples/depmod.pl ${CLFS_ROOT}/bin + chmod -v 755 ${CLFS_ROOT}/bin/depmod.pl } EXTRACT "BUSYBOX" BUSYBOX "core-pkg-busybox" -## Installing iana-etc IANA_ETC () { - cp protocols services ${CLFS_ROOT}/etc + cp protocols services ${CLFS_ROOT}/etc } EXTRACT "IANA_ETC" IANA_ETC "core-pkg-iana-etc" ### Making the system bootable + ## /etc/fstab file cat > ${CLFS_ROOT}/etc/fstab <<'EOF' # file-system mount-point type options dump fsck EOF -## Linux kernel LINUX () { - make mrproper + make mrproper - cp ${CLFS_CONFIGS}/linux-kernel-config .config + cp ${CLFS_CONFIGS}/linux-kernel-config .config - make ARCH=${CLFS_ARCH} CROSS_COMPILE=${CLFS_TARGET}- && \ - make ARCH=${CLFS_ARCH} CROSS_COMPILE=${CLFS_TARGET}- INSTALL_MOD_PATH=${CLFS_ROOT} modules_install + make ARCH=${CLFS_ARCH} CROSS_COMPILE=${CLFS_TARGET}- && \ + make ARCH=${CLFS_ARCH} CROSS_COMPILE=${CLFS_TARGET}- INSTALL_MOD_PATH=${CLFS_ROOT} modules_install - cp arch/${CLFS_ARCH}/boot/zImage ${CLFS_BOOT_ROOT} - for DTS in ${CLFS_ARCH_DTS_LIST[@]} - do - cp arch/${CLFS_ARCH}/boot/dts/$DTS ${CLFS_BOOT_ROOT} - done + cp arch/${CLFS_ARCH}/boot/zImage ${CLFS_BOOT_ROOT} + for DTS in ${CLFS_ARCH_DTS_LIST[@]}; do + cp arch/${CLFS_ARCH}/boot/dts/$DTS ${CLFS_BOOT_ROOT} + done } EXTRACT "LINUX" LINUX "linux-kernel" -## Das U-Boot UBOOT () { - make distclean + make distclean - cp ${CLFS_CONFIGS}/uboot-config .config + cp ${CLFS_CONFIGS}/uboot-config .config - make ARCH=${CLFS_ARCH} CROSS_COMPILE=${CLFS_TARGET}- + make ARCH=${CLFS_ARCH} CROSS_COMPILE=${CLFS_TARGET}- - cp u-boot.bin ${CLFS_BOOT_ROOT} + cp u-boot.bin ${CLFS_BOOT_ROOT} } EXTRACT "UBOOT" UBOOT "uboot-bootloader" -## Bootscripts BOOTSCRIPTS () { - make DESTDIR=${CLFS_ROOT} install-bootscripts - make DESTDIR=${CLFS_ROOT} install-dropbear - make DESTDIR=${CLFS_ROOT} install-netplug + make DESTDIR=${CLFS_ROOT} install-bootscripts + make DESTDIR=${CLFS_ROOT} install-dropbear + make DESTDIR=${CLFS_ROOT} install-netplug } EXTRACT "BOOTSCRIPTS" BOOTSCRIPTS "core-pkg-bootscripts" @@ -374,6 +307,7 @@ hpilo!(.*) root:root 0660 =hpilo/%1 xvd[a-z] root:root 0660 */lib/mdev/xvd_links EOF + ## Creating /etc/profile cat > ${CLFS_ROOT}/etc/profile <<'EOF' # /etc/profile @@ -398,6 +332,7 @@ export EDITOR='/bin/vi' # End /etc/profile EOF + ## Creating /etc/inittab cat > ${CLFS_ROOT}/etc/inittab <<'EOF' # /etc/inittab @@ -420,8 +355,10 @@ tty6::respawn:/sbin/getty 38400 tty6 ::ctrlaltdel:/sbin/reboot EOF + ## Setting hostname -echo ${CLFS_HOSTNAME} > ${CLFS_ROOT}/etc/HOSTNAME +echo ${CLFS_HOSTNAME} > ${CLFS_ROOT}/etc/hostname + ## Customising /etc/hosts cat > ${CLFS_ROOT}/etc/hosts <<'EOF' @@ -432,6 +369,7 @@ cat > ${CLFS_ROOT}/etc/hosts <<'EOF' # End /etc/hosts (no network card version) EOF + ## Configuring the network script mkdir -pv ${CLFS_ROOT}/etc/network/if-{post-{up,down},pre-{up,down},up,down}.d mkdir -pv ${CLFS_ROOT}/usr/share/udhcpc @@ -483,3 +421,4 @@ exit 0 EOF chmod +x ${CLFS_ROOT}/usr/share/udhcpc/default.script + diff --git a/scripts/build-cross-toolchain.sh b/scripts/build-cross-toolchain.sh @@ -19,6 +19,23 @@ source ~/.bashrc +COMMON_BINUTILS_OPTS=(\ + --enable-deterministic-archives \ + --disable-separate-code \ +) + + +COMMON_GCC_OPTS=(\ + --enable-libstdcxx-time=rt \ + --disable-assembly \ + --disable-bootstrap \ + --disable-gnu-indirect-function \ + --disable-libmpx \ + --disable-libmudflap \ + --disable-libsanitizer \ +) + + BINUTILS_PASS1 () { mkdir -v binutils-build cd binutils-build @@ -29,10 +46,11 @@ BINUTILS_PASS1 () { --build=${CLFS_HOST} \ --host=${CLFS_HOST} \ --target=${CLFS_TARGET} \ + --disable-multilib \ --disable-nls \ --disable-shared \ - --disable-multilib \ - --disable-werror + --disable-werror \ + ${COMMON_BINUTILS_OPTS[@]} make && make install } @@ -56,24 +74,24 @@ GCC_PASS1 () { --build=${CLFS_HOST} \ --host=${CLFS_HOST} \ --target=${CLFS_TARGET} \ + --with-arch=${CLFS_GCC_ARCH} \ + --with-tune=${CLFS_GCC_TUNE} \ --with-newlib \ --without-headers \ --enable-initfini-array \ - --disable-nls \ - --disable-shared \ - --disable-multilib \ + --enable-languages=c,c++ \ --disable-decimal-float \ - --disable-threads \ --disable-libatomic \ --disable-libgomp \ --disable-libquadmath \ - --disable-libsanitizer \ --disable-libssp \ - --disable-libvtv \ --disable-libstdcxx \ - --enable-languages=c,c++ \ - --with-arch=${CLFS_ARM_ARCH} \ - --with-tune=${CLFS_GCC_TUNE} \ + --disable-libvtv \ + --disable-multilib \ + --disable-nls \ + --disable-shared \ + --disable-threads \ + ${COMMON_GCC_OPTS[@]} \ ${CLFS_GCC_FLOAT_OPT} ${CLFS_GCC_FPU_OPT} make all-gcc all-target-libgcc && make install-gcc install-target-libgcc @@ -101,14 +119,15 @@ EXTRACT "LINUX" LINUX "toolchain-linux-headers" MUSL () { ./configure \ CROSS_COMPILE=${CLFS_TARGET}- \ - --prefix=${CLFS_CROSS_SYSROOT} \ + --prefix=/ \ --build=${CLFS_HOST} \ --host=${CLFS_HOST} \ - --target=${CLFS_TARGET} \ - --syslibdir=${CLFS_CROSS_SYSROOT}/lib + --target=${CLFS_TARGET} make && make DESTDIR=${CLFS_CROSS_SYSROOT} install + ln -fsv libc.so ${CLFS_CROSS_SYSROOT}/lib/ld-musl-*.so.1 + ${CLFS_CROSS_ROOT}/libexec/gcc/${CLFS_TARGET}/${GCC_VER}/install-tools/mkheaders } EXTRACT "MUSL" MUSL "toolchain-musl-libc" @@ -119,215 +138,20 @@ LIBSTDCXX_PASS1 () { cd libstdcxx-build ../libstdc++-v3/configure \ - --prefix=${CLFS_CROSS_SYSROOT} \ + --prefix=/ \ --build=${CLFS_HOST} \ --host=${CLFS_HOST} \ --target=${CLFS_TARGET} \ - --disable-nls \ - --disable-multilib \ + --with-gxx-include-dir=${CLFS_CROSS_SYSROOT}/include/c++/${GCC_VER} \ --disable-libstdcxx-pch \ - --with-gxx-include-dir=${CLFS_CROSS_SYSROOT}/include/c++/${GCC_VER} + --disable-multilib \ + --disable-nls - make && make install + make && make DESTDIR=${CLFS_CROSS_SYSROOT} install } EXTRACT "GCC" LIBSTDCXX_PASS1 "toolchain-libstdc++-pass1" -M4 () { - sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c - echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h - - ./configure \ - --prefix=${CLFS_CROSS_ROOT} \ - --build=${CLFS_HOST} \ - --host=${CLFS_HOST} - - make && make install -} -#EXTRACT "M4" M4 "toolchain-m4" - - -NCURSES () { - sed -i s/mawk// configure - - mkdir ncurses-build - pushd ncurses-build > /dev/null - ../configure - make -C include - make -C progs tic - popd > /dev/null - - ./configure \ - --prefix=${CLFS_CROSS_ROOT} \ - --build=${CLFS_HOST} \ - --host=${CLFS_HOST} \ - --with-manpage-format=normal \ - --with-shared \ - --without-debuf \ - --without-ada \ - --without-normal \ - --with-widec - - make && make TIC_PATH=$(pwd)/ncurses-build/progs/tic install - echo "INPUT(-lncursesw)" > ${CLFS_CROSS_ROOT}/lib/libncurses.so - - ln -sfv ../lib/$(readlink ${CLFS_CROSS_ROOT}/lib/libncursesw.so) ${CLFS_CROSS_ROOT}/lib/libncursesw.so -} -#EXTRACT "NCURSES" NCURSES "toolchain-ncurses" - - -BASH () { - ./configure \ - --prefix=${CLFS_CROSS_ROOT} \ - --build=${CLFS_HOST} \ - --host=${CLFS_HOST} \ - --without-bash-malloc - - make && make install - - ln -fsv bash ${CLFS_CROSS_ROOT}/bin/sh -} -#EXTRACT "BASH" BASH "toolchain-bash" - - -COREUTILS () { - ./configure \ - --prefix=${CLFS_CROSS_ROOT} \ - --build=${CLFS_HOST} \ - --host=${CLFS_HOST} \ - --enable-install-program=hostname \ - --enable-no-install-program=kill,uptime - - make && make install - - mv -v ${CLFS_CROSS_ROOT}/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} ${CLFS_CROSS_ROOT}/bin - mv -v ${CLFS_CROSS_ROOT}/bin/{false,ln,ls,mkdir,mknod,mv,pwd,rm} ${CLFS_CROSS_ROOT}/bin - mv -v ${CLFS_CROSS_ROOT}/bin/{rmdir,stty,sync,true,uname} ${CLFS_CROSS_ROOT}/bin - mv -v ${CLFS_CROSS_ROOT}/bin/{head,nice,sleep,touch} ${CLFS_CROSS_ROOT}/bin - mv -v ${CLFS_CROSS_ROOT}/bin/chroot ${CLFS_CROSS_ROOT}/sbin - mkdir -pv ${CLFS_CROSS_ROOT}/share/man/man8 - mv -v ${CLFS_CROSS_ROOT}/share/man/man1/chroot.1 ${CLFS_CROSS_ROOT}/share/man/man8/chroot.8 - sed -i 's/"1"/"8"/' ${CLFS_CROSS_ROOT}/share/man/man8/chroot.8 -} -#EXTRACT "COREUTILS" COREUTILS "toolchain-coreutils" - - -DIFFUTILS () { - ./configure \ - --prefix=${CLFS_CROSS_ROOT} \ - --build=${CLFS_HOST} \ - --host=${CLFS_HOST} - - make && make install -} -#EXTRACT "DIFFUTILS" DIFFUTILS "toolchain-diffutils" - - -FILE () { - ./configure \ - --prefix=${CLFS_CROSS_ROOT} \ - --build=${CLFS_HOST} \ - --host=${CLFS_HOST} - - make && make install -} -#EXTRACT "FILE" FILE "toolchain-file" - - -FINDUTILS () { - ./configure \ - --prefix=${CLFS_CROSS_ROOT} \ - --build=${CLFS_HOST} \ - --host=${CLFS_HOST} - - make && make install - - sed -i 's|find:=${BINDIR}|find:=/${CLFS_CROSS_NAME}/bin|' ${CLFS_CROSS_ROOT}/bin/updatedb -} -#EXTRACT "FINDUTILS" FINDUTILS "toolchain-findutils" - - -GAWK () { - sed -i 's/extras//' Makefile.in - - ./configure \ - --prefix=${CLFS_CROSS_ROOT} \ - --build=${CLFS_HOST} \ - --host=${CLFS_HOST} - - make && make install -} -#EXTRACT "GAWK" GAWK "toolchain-gawk" - - -GZIP () { - ./configure \ - --prefix=${CLFS_CROSS_ROOT} \ - --build=${CLFS_HOST} \ - --host=${CLFS_HOST} - - make && make install -} -#EXTRACT "GZIP" GZIP "toolchain-gzip" - - -MAKE () { - ./configure \ - --prefix=${CLFS_CROSS_ROOT} \ - --build=${CLFS_HOST} \ - --host=${CLFS_HOST} \ - --without-guile - - make && make install -} -#EXTRACT "MAKE" MAKE "toolchain-make" - - -PATCH () { - ./configure \ - --prefix=${CLFS_CROSS_ROOT} \ - --build=${CLFS_HOST} \ - --host=${CLFS_HOST} - - make && make install -} -#EXTRACT "PATCH" PATCH "toolchain-patch" - - -SED () { - ./configure \ - --prefix=${CLFS_CROSS_ROOT} \ - --build=${CLFS_HOST} \ - --host=${CLFS_HOST} - - make && make install -} -#EXTRACT "SED" SED "toolchain-sed" - - -TAR () { - ./configure \ - --prefix=${CLFS_CROSS_ROOT} \ - --build=${CLFS_HOST} \ - --host=${CLFS_HOST} - - make && make install -} -#EXTRACT "TAR" TAR "toolchain-tar" - - -XZ () { - ./configure \ - --prefix=${CLFS_CROSS_ROOT} \ - --build=${CLFS_HOST} \ - --host=${CLFS_HOST} \ - --disable-static - - make && make install -} -#EXTRACT "XZ" XZ "toolchain-xz" - - BINUTILS_PASS2 () { mkdir -v binutils-build cd binutils-build @@ -339,10 +163,11 @@ BINUTILS_PASS2 () { --build=${CLFS_HOST} \ --host=${CLFS_HOST} \ --target=${CLFS_TARGET} \ - --disable-nls \ --enable-shared \ --disable-multilib \ - --disable-werror + --disable-nls \ + --disable-werror \ + ${COMMON_BINUTILS_OPTS[@]} make && make install } @@ -371,13 +196,15 @@ GCC_PASS2 () { --host=${CLFS_HOST} \ CC_FOR_TARGET=${CLFS_TARGET}-gcc \ --target=${CLFS_TARGET} \ + --with-arch=${CLFS_GCC_ARCH} \ + --with-tune=${CLFS_GCC_TUNE} \ --enable-initfini-array \ - --disable-nls \ - --disable-multilib \ - --disable-libsanitizer \ --enable-languages=c,c++ \ - --with-arch=${CLFS_ARM_ARCH} \ - --with-tune=${CLFS_GCC_TUNE} \ + --enable-shared \ + --enable-tls \ + --disable-multilib \ + --disable-nls \ + ${COMMON_GCC_OPTS[@]} \ ${CLFS_GCC_FLOAT_OPT} ${CLFS_GCC_FPU_OPT} make && make install @@ -394,3 +221,4 @@ echo export LD=\""${CLFS_TARGET}-ld\"" >> ~/.bashrc echo export RANLIB=\""${CLFS_TARGET}-ranlib\"" >> ~/.bashrc echo export READELF=\""${CLFS_TARGET}-readelf\"" >> ~/.bashrc echo export STRIP=\""${CLFS_TARGET}-strip\"" >> ~/.bashrc + diff --git a/scripts/build-extra-packages.sh b/scripts/build-extra-packages.sh @@ -11,45 +11,44 @@ ### ---------------------------------------------------------------------------- ### - CLFS_ROOT : Root folder for cross-compiled system ### - CLFS_BOOT_ROOT : Root folder for boot-required binaries +### - CLFS_CROSS_NAME : Name of cross-toolchain root ### - CLFS_CROSS_ROOT : Root folder for cross-toolchain ### - CLFS_CROSS_SYSROOT : Sysroot for cross-toolchain ################################################################################ source ~/.bashrc -## Netplug + NETPLUG () { - patch -Np1 -i ../netplug-1.2.9.2-fixes-1.patch + patch -Np1 -i ../netplug-1.2.9.2-fixes-1.patch - make && make DESTDIR=${CLFS_ROOT} install + make && make DESTDIR=${CLFS_ROOT} install } -#EXTRACT "NETPLUG" NETPLUG "extra-pkg-netplug" +EXTRACT "NETPLUG" NETPLUG "extra-pkg-netplug" -## Wireless Tools WIRELESS_TOOLS () { - sed -i s/gcc/\$\{CLFS\_TARGET\}\-gcc/g Makefile - sed -i s/\ ar/\ \$\{CLFS\_TARGET\}\-ar/g Makefile - sed -i s/ranlib/\$\{CLFS\_TARGET\}\-ranlib/g Makefile + sed -i s/gcc/\$\{CLFS\_TARGET\}\-gcc/g Makefile + sed -i s/\ ar/\ \$\{CLFS\_TARGET\}\-ar/g Makefile + sed -i s/ranlib/\$\{CLFS\_TARGET\}\-ranlib/g Makefile - make PREFIX=${CLFS_ROOT}/usr && make PREFIX=${CLFS_ROOT}/usr install + make PREFIX=${CLFS_ROOT}/usr && make PREFIX=${CLFS_ROOT}/usr install } -# EXTRACT "WIRELESS_TOOLS" WIRELESS_TOOLS "extra-pkg-wireless-tools" +EXTRACT "WIRELESS_TOOLS" WIRELESS_TOOLS "extra-pkg-wireless-tools" -## Dropbear DROPBEAR () { -# cp ${CLFS_CONFIGS}/dropbear_config.h localoptions.h + ./configure \ + --prefix=/usr \ + --build=${CLFS_HOST} \ + --host=${CLFS_TARGET} - ./configure \ - --prefix=/usr \ - --build=${CLFS_HOST} \ - --host=${CLFS_TARGET} + cp ${CLFS_CONFIGS}/dropbear_config.h localoptions.h - make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" && \ - make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" DESTDIR=${CLFS_ROOT} install + make MULTI=1 PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" && \ + make MULTI=1 PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" DESTDIR=${CLFS_ROOT} install - install -dv ${CLFS_ROOT}/etc/dropbear + install -dv ${CLFS_ROOT}/etc/dropbear } EXTRACT "DROPBEAR" DROPBEAR "extra-pkg-dropbear" diff --git a/scripts/build-test-packages.sh b/scripts/build-test-packages.sh @@ -1,116 +0,0 @@ -#!/bin/sh - -################################################################################ -### Defined Variables: -### - CLFS : Root folder for entire CLFS build -### - CLFS_BUILD : Final tarball output directory -### - CLFS_CONFIGS : Additional configuration files for CLFS packages -### - CLFS_LOGS : Package build log root -### - CLFS_SCRIPTS : Build script root -### - CLFS_SOURCES : Package source root -### ---------------------------------------------------------------------------- -### - CLFS_ROOT : Root folder for cross-compiled system -### - CLFS_BOOT_ROOT : Root folder for boot-required binaries -### - CLFS_CROSS_ROOT : Root folder for cross-toolchain -### - CLFS_CROSS_SYSROOT : Sysroot for cross-toolchain -################################################################################ - -source ~/.bashrc - -## Installing libgcc -cp -v ${CLFS_CROSS_SYSROOT}/lib/libgcc_s.so.1 ${CLFS_ROOT}/usr/lib/ -${CLFS_TARGET}-strip ${CLFS_ROOT}/lib/libgcc_s.so.1 - -ln -sfv ../usr/lib/libgcc_s.so.1 ${CLFS_ROOT}/lib/libgcc_s.so.1 - - -## Linux API Headers -LINUX () { - make mrproper - - make ARCH=${CLFS_ARCH} headers_check - make ARCH=${CLFS_ARCH} headers - - find usr/include -name '.*' -delete - rm usr/include/Makefile - cp -r usr/include ${CLFS_ROOT}/usr -} -EXTRACT "LINUX" LINUX "test-pkg-linux-headers" - - -## Musl libc -MUSL () { - ./configure \ - CROSS_COMPILE=${CLFS_TARGET}- \ - --prefix=${CLFS_ROOT}/usr \ - --build=${CLFS_HOST} \ - --host=${CLFS_TARGET} \ - --target=${CLFS_TARGET} \ - --syslibdir=${CLFS_ROOT}/lib \ - --enable-optimize \ - --enable-warnings \ - --disable-static - - make && make install - - ln -fsv ../usr/lib/libc.so ${CLFS_ROOT}/lib/ld-musl-*.so.1 -} -EXTRACT "MUSL" MUSL "test-pkg-musl-libc" - - -## Libstdc++ -LIBSTDCXX () { - ln -s gthr-posix.h libgcc/gthr-default.h - - mkdir -v libstdcxx-build - cd libstdcxx-build - - ../libstdc++-v3/configure \ - CXXFLAGS="-g -O2 -D_GNU_SOURCE" \ - --prefix=${CLFS_ROOT}/usr \ - --build=${CLFS_HOST} \ - --host=${CLFS_TARGET} \ - --target=${CLFS_TARGET} \ - --disable-nls \ - --disable-multilib \ - --disable-static - - make && make install -} -EXTRACT "GCC" LIBSTDCXX "test-pkg-libstdc++" - - -## Zlib -ZLIB () { - ./configure \ - --prefix=${CLFS_ROOT}/usr \ - --const \ - --shared - - make && make install - - rm -v ${CLFS_ROOT}/usr/lib/libz.a - mv -v ${CLFS_ROOT}/usr/lib/libz.so.* ${CLFS_ROOT}/lib - ln -sfv ../../lib/$(readlink ${CLFS_ROOT}/usr/lib/libz.so) ${CLFS_ROOT}/usr/lib/libz.so -} -EXTRACT "ZLIB" ZLIB "test-pkg-zlib" - - -## Dropbear -DROPBEAR () { - sed -i 's/.*mandir.*//g' Makefile.in - - ./configure \ - --prefix=${CLFS_ROOT}/usr \ - --build=${CLFS_HOST} \ - --host=${CLFS_TARGET} - - cp ${CLFS_CONFIGS}/dropbear_config.h localoptions.h - - make MULTI=1 PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" && \ - make MULTI=1 PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install - - install -dv ${CLFS_ROOT}/etc/dropbear -} -EXTRACT "DROPBEAR" DROPBEAR "test-pkg-dropbear" - diff --git a/scripts/host-check.sh b/scripts/host-check.sh @@ -23,4 +23,5 @@ sudo -V | head -n1 tar --version | head -n1 makeinfo --version | head -n1 -echo "Finished checking host system capabilities!" -\ No newline at end of file +echo "Finished checking host system capabilities!" + diff --git a/scripts/skeleton.sh b/scripts/skeleton.sh @@ -11,8 +11,10 @@ ### ---------------------------------------------------------------------------- ### - CLFS_ROOT : Root folder for cross-compiled system ### - CLFS_BOOT_ROOT : Root folder for boot-required binaries +### - CLFS_CROSS_NAME : Name of the cross-toolchain root ### - CLFS_CROSS_ROOT : Root folder for cross-toolchain ### - CLFS_CROSS_SYSROOT : Sysroot for cross-toolchain ################################################################################ source ~/.bashrc + diff --git a/wget-list.src b/wget-list.src @@ -1,29 +1,15 @@ -http://ftp.gnu.org/gnu/bash/bash-5.0.tar.gz http://ftp.gnu.org/gnu/binutils/binutils-2.35.tar.xz https://www.busybox.net/downloads/busybox-1.32.0.tar.bz2 -http://ftp.gnu.org/gnu/coreutils/coreutils-8.32.tar.xz https://matt.ucc.asn.au/dropbear/releases/dropbear-2020.80.tar.bz2 -http://ftp.gnu.org/gnu/diffutils/diffutils-3.7.tar.xz -ftp://ftp.astron.com/pub/file/file-5.39.tar.gz -http://ftp.gnu.org/gnu/findutils/findutils-4.7.0.tar.xz -http://ftp.gnu.org/gnu/gawk/gawk-5.1.0.tar.xz http://gcc.gnu.org/pub/gcc/releases/gcc-10.2.0/gcc-10.2.0.tar.xz http://ftp.gnu.org/gnu/gmp/gmp-6.2.0.tar.xz -http://ftp.gnu.org/gnu/grep/grep-3.4.tar.xz -http://ftp.gnu.org/gnu/gzip/gzip-1.10.tar.xz https://github.com/Mic92/iana-etc/releases/download/20200910/iana-etc-20200910.tar.gz -https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-3.2.1.tar.gz http://www.kernel.org/pub/linux/kernel/v5.x/linux-5.8.9.tar.xz -http://ftp.gnu.org/gnu/make/make-4.3.tar.gz https://github.com/cross-lfs/bootscripts-embedded/archive/master.tar.gz http://ftp.gnu.org/gnu/mpc/mpc-1.2.0.tar.gz http://ftp.gnu.org/gnu/mpfr/mpfr-4.1.0.tar.xz http://www.musl-libc.org/releases/musl-1.2.1.tar.gz -http://ftp.gnu.org/gnu/m4/m4-1.4.18.tar.xz -http://ftp.gnu.org/gnu/ncurses/ncurses-6.2.tar.gz -http://ftp.gnu.org/gnu/patch/patch-2.7.6.tar.xz -http://ftp.gnu.org/gnu/sed/sed-4.8.tar.xz -http://ftp.gnu.org/gnu/tar/tar-1.32.tar.xz +http://www.red-bean.com/~bos/netplug/netplug-1.2.9.2.tar.bz2 +http://patches.clfs.org/embedded-dev/netplug-1.2.9.2-fixes-1.patch https://ftp.denx.de/pub/u-boot/u-boot-2020.07.tar.bz2 -https://tukaani.org/xz/xz-5.2.5.tar.xz http://downloads.sourceforge.net/libpng/zlib-1.2.11.tar.xz diff --git a/wget-list.src.bak b/wget-list.src.bak @@ -1,21 +0,0 @@ -http://ftp.gnu.org/gnu/binutils/binutils-2.35.tar.xz -https://www.busybox.net/downloads/busybox-1.32.0.tar.bz2 -https://www.sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz -https://matt.ucc.asn.au/dropbear/releases/dropbear-2020.80.tar.bz2 -http://gcc.gnu.org/pub/gcc/releases/gcc-10.2.0/gcc-10.2.0.tar.xz -http://ftp.gnu.org/gnu/gmp/gmp-6.2.0.tar.xz -https://github.com/Mic92/iana-etc/releases/download/20200910/iana-etc-20200910.tar.gz -https://ftp.openbsd.org/pub/OpenBSD/LibreSSL/libressl-3.2.1.tar.gz -http://www.kernel.org/pub/linux/kernel/v5.x/linux-5.8.9.tar.xz -https://github.com/cross-lfs/bootscripts-embedded/archive/master.tar.gz -http://ftp.gnu.org/gnu/mpc/mpc-1.2.0.tar.gz -http://ftp.gnu.org/gnu/mpfr/mpfr-4.1.0.tar.xz -http://www.musl-libc.org/releases/musl-1.2.1.tar.gz -http://www.red-bean.com/~bos/netplug/netplug-1.2.9.2.tar.bz2 -http://patches.clfs.org/embedded-dev/netplug-1.2.9.2-fixes-1.patch -https://cloudflare.cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.3p1.tar.gz -https://ftp.denx.de/pub/u-boot/u-boot-2020.07.tar.bz2 -http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/wireless_tools.29.tar.gz -https://tukaani.org/xz/xz-5.2.5.tar.xz -http://downloads.sourceforge.net/libpng/zlib-1.2.11.tar.xz -https://github.com/facebook/zstd/releases/download/v1.4.5/zstd-1.4.5.tar.gz -\ No newline at end of file