# Linux Kernel Dev Blog 7 - Linux From Scratch (LFS) Sources ## 4/7/2020 Starting back up --- ## making source staging dir Make a working directory to save the source files But before I do this I am going to try and not have to do everything as root so I will change the perms to doomguy on the mount Make the dir and make it writeable by others but not deletable with the "sticky" `t` flag (new stuff for me) ```shell $ mkdir $LFS/sources ``` before is `drwxrwxr-x 2 doomguy doomguy 4096 Apr 7 07:26 sources` ```shell $ chmod -v a+wt $LFS/sources # all + write "t" for sticky mode of '/mnt/lfs/sources' changed from 0775 (rwxrwxr-x) to 1777 (rwxrwxrwt) ``` after is `drwxrwxrwt 2 doomguy doomguy 4096 Apr 7 07:26 sources` ## downloading stuff ### sources Their guide uses `wget list` to pull down a full list of packages from `http://www.linuxfromscratch.org/lfs/view/stable/wget-list` ```shell $ wget --input-file=wget-list --continue --directory-prefix=$LFS/sources ``` With the input file being: ``` http://download.savannah.gnu.org/releases/acl/acl-2.2.53.tar.gz http://download.savannah.gnu.org/releases/attr/attr-2.4.48.tar.gz http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.xz http://ftp.gnu.org/gnu/automake/automake-1.16.1.tar.xz http://ftp.gnu.org/gnu/bash/bash-5.0.tar.gz https://github.com/gavinhoward/bc/archive/2.5.3/bc-2.5.3.tar.gz http://ftp.gnu.org/gnu/binutils/binutils-2.34.tar.xz http://ftp.gnu.org/gnu/bison/bison-3.5.2.tar.xz https://www.sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz https://github.com/libcheck/check/releases/download/0.14.0/check-0.14.0.tar.gz http://ftp.gnu.org/gnu/coreutils/coreutils-8.31.tar.xz https://dbus.freedesktop.org/releases/dbus/dbus-1.12.16.tar.gz http://ftp.gnu.org/gnu/dejagnu/dejagnu-1.6.2.tar.gz http://ftp.gnu.org/gnu/diffutils/diffutils-3.7.tar.xz https://downloads.sourceforge.net/project/e2fsprogs/e2fsprogs/v1.45.5/e2fsprogs-1.45.5.tar.gz https://sourceware.org/ftp/elfutils/0.178/elfutils-0.178.tar.bz2 https://dev.gentoo.org/~blueness/eudev/eudev-3.2.9.tar.gz https://prdownloads.sourceforge.net/expat/expat-2.2.9.tar.xz https://prdownloads.sourceforge.net/expect/expect5.45.4.tar.gz ftp://ftp.astron.com/pub/file/file-5.38.tar.gz http://ftp.gnu.org/gnu/findutils/findutils-4.7.0.tar.xz https://github.com/westes/flex/releases/download/v2.6.4/flex-2.6.4.tar.gz http://ftp.gnu.org/gnu/gawk/gawk-5.0.1.tar.xz http://ftp.gnu.org/gnu/gcc/gcc-9.2.0/gcc-9.2.0.tar.xz http://ftp.gnu.org/gnu/gdbm/gdbm-1.18.1.tar.gz http://ftp.gnu.org/gnu/gettext/gettext-0.20.1.tar.xz http://ftp.gnu.org/gnu/glibc/glibc-2.31.tar.xz http://ftp.gnu.org/gnu/gmp/gmp-6.2.0.tar.xz http://ftp.gnu.org/gnu/gperf/gperf-3.1.tar.gz http://ftp.gnu.org/gnu/grep/grep-3.4.tar.xz http://ftp.gnu.org/gnu/groff/groff-1.22.4.tar.gz https://ftp.gnu.org/gnu/grub/grub-2.04.tar.xz http://ftp.gnu.org/gnu/gzip/gzip-1.10.tar.xz http://anduin.linuxfromscratch.org/LFS/iana-etc-2.30.tar.bz2 http://ftp.gnu.org/gnu/inetutils/inetutils-1.9.4.tar.xz https://launchpad.net/intltool/trunk/0.51.0/+download/intltool-0.51.0.tar.gz https://www.kernel.org/pub/linux/utils/net/iproute2/iproute2-5.5.0.tar.xz https://www.kernel.org/pub/linux/utils/kbd/kbd-2.2.0.tar.xz https://www.kernel.org/pub/linux/utils/kernel/kmod/kmod-26.tar.xz http://www.greenwoodsoftware.com/less/less-551.tar.gz http://www.linuxfromscratch.org/lfs/downloads/9.1/lfs-bootscripts-20191031.tar.xz https://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2/libcap-2.31.tar.xz ftp://sourceware.org/pub/libffi/libffi-3.3.tar.gz http://download.savannah.gnu.org/releases/libpipeline/libpipeline-1.5.2.tar.gz http://ftp.gnu.org/gnu/libtool/libtool-2.4.6.tar.xz https://www.kernel.org/pub/linux/kernel/v5.x/linux-5.5.3.tar.xz http://ftp.gnu.org/gnu/m4/m4-1.4.18.tar.xz http://ftp.gnu.org/gnu/make/make-4.3.tar.gz http://download.savannah.gnu.org/releases/man-db/man-db-2.9.0.tar.xz https://www.kernel.org/pub/linux/docs/man-pages/man-pages-5.05.tar.xz https://github.com/mesonbuild/meson/releases/download/0.53.1/meson-0.53.1.tar.gz https://ftp.gnu.org/gnu/mpc/mpc-1.1.0.tar.gz http://www.mpfr.org/mpfr-4.0.2/mpfr-4.0.2.tar.xz https://github.com/ninja-build/ninja/archive/v1.10.0/ninja-1.10.0.tar.gz http://ftp.gnu.org/gnu/ncurses/ncurses-6.2.tar.gz https://www.openssl.org/source/openssl-1.1.1d.tar.gz http://ftp.gnu.org/gnu/patch/patch-2.7.6.tar.xz https://www.cpan.org/src/5.0/perl-5.30.1.tar.xz https://pkg-config.freedesktop.org/releases/pkg-config-0.29.2.tar.gz https://sourceforge.net/projects/procps-ng/files/Production/procps-ng-3.3.15.tar.xz https://sourceforge.net/projects/psmisc/files/psmisc/psmisc-23.2.tar.xz https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tar.xz https://www.python.org/ftp/python/doc/3.8.1/python-3.8.1-docs-html.tar.bz2 http://ftp.gnu.org/gnu/readline/readline-8.0.tar.gz http://ftp.gnu.org/gnu/sed/sed-4.8.tar.xz https://github.com/shadow-maint/shadow/releases/download/4.8.1/shadow-4.8.1.tar.xz http://www.infodrom.org/projects/sysklogd/download/sysklogd-1.5.1.tar.gz https://github.com/systemd/systemd/archive/v244/systemd-244.tar.gz http://anduin.linuxfromscratch.org/LFS/systemd-man-pages-244.tar.xz http://download.savannah.gnu.org/releases/sysvinit/sysvinit-2.96.tar.xz http://ftp.gnu.org/gnu/tar/tar-1.32.tar.xz https://downloads.sourceforge.net/tcl/tcl8.6.10-src.tar.gz http://ftp.gnu.org/gnu/texinfo/texinfo-6.7.tar.xz https://www.iana.org/time-zones/repository/releases/tzdata2019c.tar.gz http://anduin.linuxfromscratch.org/LFS/udev-lfs-20171102.tar.xz https://www.kernel.org/pub/linux/utils/util-linux/v2.35/util-linux-2.35.1.tar.xz http://anduin.linuxfromscratch.org/LFS/vim-8.2.0190.tar.gz https://cpan.metacpan.org/authors/id/T/TO/TODDR/XML-Parser-2.46.tar.gz https://tukaani.org/xz/xz-5.2.4.tar.xz https://zlib.net/zlib-1.2.11.tar.xz https://github.com/facebook/zstd/releases/download/v1.4.4/zstd-1.4.4.tar.gz http://www.linuxfromscratch.org/patches/lfs/9.1/bash-5.0-upstream_fixes-1.patch http://www.linuxfromscratch.org/patches/lfs/9.1/bzip2-1.0.8-install_docs-1.patch http://www.linuxfromscratch.org/patches/lfs/9.1/coreutils-8.31-i18n-1.patch http://www.linuxfromscratch.org/patches/lfs/9.1/glibc-2.31-fhs-1.patch http://www.linuxfromscratch.org/patches/lfs/9.1/kbd-2.2.0-backspace-1.patch http://www.linuxfromscratch.org/patches/lfs/9.1/sysvinit-2.96-consolidated-1.patch ``` So gonna download those... which holy seemed to work and all be available We can checksum them with md5sum using their predefined sum file to make sure they are legit from `http://www.linuxfromscratch.org/lfs/view/stable/md5sums` ```shell $ md5sum ``` ``` 007aabf1dbb550bcddde52a244cd1070 acl-2.2.53.tar.gz bc1e5cb5c96d99b24886f1f527d3bb3d attr-2.4.48.tar.gz 50f97f4159805e374639a73e2636f22e autoconf-2.69.tar.xz 53f38e7591fa57c3d2cee682be668e5b automake-1.16.1.tar.xz 2b44b47b905be16f45709648f671820b bash-5.0.tar.gz 6582c6fbbae943fbfb8fe14a34feab57 bc-2.5.3.tar.gz 664ec3a2df7805ed3464639aaae332d6 binutils-2.34.tar.xz 49fc2cf23e31e697d5072835e1662a97 bison-3.5.2.tar.xz 67e051268d0c475ea773822f7500d0e5 bzip2-1.0.8.tar.gz 270e82a445be6026040267a5e11cc94b check-0.14.0.tar.gz 0009a224d8e288e8ec406ef0161f9293 coreutils-8.31.tar.xz e1b07516533f351b3aba3423fafeffd6 dejagnu-1.6.2.tar.gz 4824adc0e95dbbf11dfbdfaad6a1e461 diffutils-3.7.tar.xz 6d35428e4ce960cb7e875afe5849c0f3 e2fsprogs-1.45.5.tar.gz 5480d0b7174446aba13a6adde107287f elfutils-0.178.tar.bz2 dedfb1964f6098fe9320de827957331f eudev-3.2.9.tar.gz d2384fa607223447e713e1b9bd272376 expat-2.2.9.tar.xz 00fce8de158422f5ccd2666512329bd2 expect5.45.4.tar.gz 3217633ed09c7cd35ed8d04191675574 file-5.38.tar.gz 731356dec4b1109b812fecfddfead6b2 findutils-4.7.0.tar.xz 2882e3179748cc9f9c23ec593d6adc8d flex-2.6.4.tar.gz f9db3f6715207c6f13719713abc9c707 gawk-5.0.1.tar.xz 3818ad8600447f05349098232c2ddc78 gcc-9.2.0.tar.xz 988dc82182121c7570e0cb8b4fcd5415 gdbm-1.18.1.tar.gz 9ed9e26ab613b668e0026222a9c23639 gettext-0.20.1.tar.xz 78a720f17412f3c3282be5a6f3363ec6 glibc-2.31.tar.xz a325e3f09e6d91e62101e59f9bda3ec1 gmp-6.2.0.tar.xz 9e251c0a618ad0824b51117d5d9db87e gperf-3.1.tar.gz 111b117d22d6a7d049d6ae7505e9c4d2 grep-3.4.tar.xz 08fb04335e2f5e73f23ea4c3adbf0c5f groff-1.22.4.tar.gz 5aaca6713b47ca2456d8324a58755ac7 grub-2.04.tar.xz 691b1221694c3394f1c537df4eee39d3 gzip-1.10.tar.xz 3ba3afb1d1b261383d247f46cb135ee8 iana-etc-2.30.tar.bz2 87fef1fa3f603aef11c41dcc097af75e inetutils-1.9.4.tar.xz 12e517cac2b57a0121cda351570f1e63 intltool-0.51.0.tar.gz ee8e2cdb416d4a8ef39525d39ab7c2d0 iproute2-5.5.0.tar.xz d1d7ae0b5fb875dc082731e09cd0c8bc kbd-2.2.0.tar.xz 1129c243199bdd7db01b55a61aa19601 kmod-26.tar.xz 4ad4408b06d7a6626a055cb453f36819 less-551.tar.gz e9249541960df505e4dfac0c32369372 lfs-bootscripts-20191031.tar.xz 52120c05dc797b01f5a7ae70f4335e96 libcap-2.31.tar.xz 6313289e32f1d38a9df4770b014a2ca7 libffi-3.3.tar.gz 169de4cc1f6f7f7d430a5bed858b2fd3 libpipeline-1.5.2.tar.gz 1bfb9b923f2c1339b4d2ce1807064aa5 libtool-2.4.6.tar.xz 3ea50025d8c679a327cf2fc225d81a46 linux-5.5.3.tar.xz 730bb15d96fffe47e148d1e09235af82 m4-1.4.18.tar.xz fc7a67ea86ace13195b0bce683fd4469 make-4.3.tar.gz 897576a19ecbef376a916485608cd790 man-db-2.9.0.tar.xz da25a4f8dfed0a34453c90153b98752d man-pages-5.05.tar.xz 9bf73f7b5a2426a7c8674a809bb8cae2 meson-0.53.1.tar.gz 4125404e41e482ec68282a2e687f6c73 mpc-1.1.0.tar.gz 320fbc4463d4c8cb1e566929d8adc4f8 mpfr-4.0.2.tar.xz cf1d964113a171da42a8940e7607e71a ninja-1.10.0.tar.gz e812da327b1c2214ac1aed440ea3ae8d ncurses-6.2.tar.gz 3be209000dbc7e1b95bcdf47980a3baa openssl-1.1.1d.tar.gz 78ad9937e4caadcba1526ef1853730d5 patch-2.7.6.tar.xz f399f3aaee90ddcff5eadd3bccdaacc0 perl-5.30.1.tar.xz f6e931e319531b736fadc017f470e68a pkg-config-0.29.2.tar.gz 2b0717a7cb474b3d6dfdeedfbad2eccc procps-ng-3.3.15.tar.xz 0524258861f00be1a02d27d39d8e5e62 psmisc-23.2.tar.xz b3fb85fd479c0bf950c626ef80cacb57 Python-3.8.1.tar.xz edc8c97f9680373fcc1dd952f0ea7fcc python-3.8.1-docs-html.tar.bz2 7e6c1f16aee3244a69aba6e438295ca3 readline-8.0.tar.gz 6d906edfdb3202304059233f51f9a71d sed-4.8.tar.xz 4b05eff8a427cf50e615bda324b5bc45 shadow-4.8.1.tar.xz c70599ab0d037fde724f7210c2c8d7f8 sysklogd-1.5.1.tar.gz 48cebffebf2a96ab09bec14bf9976016 sysvinit-2.96.tar.xz 83e38700a80a26e30b2df054e69956e5 tar-1.32.tar.xz 97c55573f8520bcab74e21bfd8d0aadc tcl8.6.10-src.tar.gz d4c5d8cc84438c5993ec5163a59522a6 texinfo-6.7.tar.xz f6987e6dfdb2eb83a1b5076a50b80894 tzdata2019c.tar.gz 27cd82f9a61422e186b9d6759ddf1634 udev-lfs-20171102.tar.xz 7f64882f631225f0295ca05080cee1bf util-linux-2.35.1.tar.xz f5337b1170df90e644a636539a0313a3 vim-8.2.0190.tar.gz 80bb18a8e6240fcf7ec2f7b57601c170 XML-Parser-2.46.tar.gz 003e4d0b1b1899fc6e3000b24feddf7c xz-5.2.4.tar.xz 85adef240c5f370b308da8c938951a68 zlib-1.2.11.tar.xz 487f7ee1562dee7c1c8adf85e2a63df9 zstd-1.4.4.tar.gz c1545da2ad7d78574b52c465ec077ed9 bash-5.0-upstream_fixes-1.patch 6a5ac7e89b791aae556de0f745916f7f bzip2-1.0.8-install_docs-1.patch a9404fb575dfd5514f3c8f4120f9ca7d coreutils-8.31-i18n-1.patch 9a5997c3452909b1769918c759eff8a2 glibc-2.31-fhs-1.patch f75cca16a38da6caa7d52151f7136895 kbd-2.2.0-backspace-1.patch 4900322141d493e74020c9cf437b2cdc sysvinit-2.96-consolidated-1.patch ``` Some new commands are `pushd` and `popd` which basically are doing `cd` on a virtual stack You `pushd [dir]` to cd into that dir then can `popd` to cd back to the dir you were in before ```shell pushd $LFS/sources md5sum -c md5sums popd ``` Showed we had some missing packages, namely openssl which was no longer 1.1.1d and was 1.1.1d They had their "d" release on Github so i got it ehre: https://github.com/openssl/openssl/archive/OpenSSL_1_1_1d.tar.gz then reneamed it to openssl-1.1.1d.tar.gz but it failed checksum test... So I looked into the openssl site and found the old release at https://www.openssl.org/source/old/1.1.1/openssl-1.1.1d.tar.gz ALL GOOD at that point `\ o /` ### patches I also downloaded the patches it required: ``` http://www.linuxfromscratch.org/patches/lfs/9.1/bash-5.0-upstream_fixes-1.patch http://www.linuxfromscratch.org/patches/lfs/9.1/bzip2-1.0.8-install_docs-1.patch http://www.linuxfromscratch.org/patches/lfs/9.1/coreutils-8.31-i18n-1.patch http://www.linuxfromscratch.org/patches/lfs/9.1/glibc-2.31-fhs-1.patch http://www.linuxfromscratch.org/patches/lfs/9.1/kbd-2.2.0-backspace-1.patch http://www.linuxfromscratch.org/patches/lfs/9.1/sysvinit-2.96-consolidated-1.patch ``` I built my own md5 sums and it worked ``` c1545da2ad7d78574b52c465ec077ed9 bash-5.0-upstream_fixes-1.patch 6a5ac7e89b791aae556de0f745916f7f bzip2-1.0.8-install_docs-1.patch a9404fb575dfd5514f3c8f4120f9ca7d coreutils-8.31-i18n-1.patch 9a5997c3452909b1769918c759eff8a2 glibc-2.31-fhs-1.patch f75cca16a38da6caa7d52151f7136895 kbd-2.2.0-backspace-1.patch 4900322141d493e74020c9cf437b2cdc sysvinit-2.96-consolidated-1.patch ``` Other helpful patches from the community can be found here: http://www.linuxfromscratch.org/patches/downloads/ ### tools dir created `/mnt/lfs/tools` and symlinked it as sudo to `/tools` > The created symlink enables the toolchain to be compiled so that it always refers to /tools, meaning that the compiler, assembler, and linker will work both in Chapter 5 ## LFS User We are going to build packages as a unprivileged user to be safe `lfs:lfs` ```shell $ sudo groupadd lfs # bash as default shell, in group lfs, with [m] a home dir [-k null] as empty $ sudo useradd -s /bin/bash -g lfs -m -k /dev/null lfs # give the user a password $ sudo passwd lfs # made it "lfs" # give this user ownership of of source and tools $ sudo chown -v lfs $LFS/tools $ sudo chown -v lfs $LFS/sources # switch into a login shell for lfs user $ su - lfs ``` Setup user so he has safe and clean environment as `lfs` user ```shell $ cat > ~/.bash_profile << "EOF" exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash EOF $ cat > ~/.bashrc << "EOF" # disable remembering paths already found for commands set +h # new files are writable by us, read and exec by others umask 022 # again lfs mount point LFS=/mnt/lfs # languages to default LC_ALL=POSIX # compiler technical thingy LFS_TGT=$(uname -m)-lfs-linux-gnu # put tool bin in front of normal bin and with hashing off it wont get wonked on wrong bin tools for this user PATH=/tools/bin:/bin:/usr/bin export LFS LC_ALL LFS_TGT PATH EOF ```