====== Linux From Scratch ====== http://fr.linuxfromscratch.org/view/lfs-9.1-systemd-fr/index.html Fonctionnement général: à partir d'un système existant, on construit LFS sur une partition à côté du système existant. On pourra ensuite booter sur LFS situé sur la nouvelle partition. Dans une machine virtuelle avec 80 Go de stockage et 2 Go de RAM, installer une Debian Stable, en partitionnant comme suit: * 20 Go pour le système hôte, type ext4, monté sur / avec l'indicateur d'amorçage * 55 Go pour LFS, type ext4, non monté * le reste pour le swap ==== Prérequis du système hôte ==== Exécuter le script fournit [[http://fr.linuxfromscratch.org/view/lfs-systemd-stable/chapter02/hostreqs.html#__do_not_save__|ici]]. Correction à apporter: * faire pointer ''/bin/sh'' vers ''bash'' au lieu de ''dash'' ([[https://askubuntu.com/questions/328364/bin-sh-is-a-symbolic-link-that-doesnt-point-to-bin-bash#comment1744192_328368|Source]]): sudo dpkg-reconfigure dash * installer les paquets ''build-essential bison gawk m4 texinfo'' ==== Définir la variable $LFS ==== export LFS=/mnt/lfs ==== Monter la nouvelle partition ==== sudo mkdir -pv $LFS sudo mount -v -t ext4 /dev/ $LFS ==== Téléchargement des sources ==== sudo mkdir -v $LFS/sources sudo chmod -v a+wt $LFS/sources wget http://fr.linuxfromscratch.org/view/lfs-9.1-systemd-fr/wget-list sudo wget --input-file=wget-list --continue --directory-prefix=$LFS/sources ==== Créer le répertoire $LFS/tools ==== Passer root, c'est bien plus simple (ne pas oublier de définir ''$LFS'' !). mkdir -v $LFS/tools ln -sv $LFS/tools / # '/tools' -> '/mnt/lfs/tools' ==== Ajouter l'utilisateur LFS ==== groupadd lfs useradd -s /bin/bash -g lfs -m -k /dev/null lfs passwd lfs chown -v lfs $LFS/tools chown -v lfs $LFS/sources Se connecter avec l'utilisateur ''lfs''. ==== Configurer l'environnement ==== exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash set +h umask 022 LFS=/mnt/lfs LC_ALL=POSIX LFS_TGT=$(uname -m)-lfs-linux-gnu PATH=/tools/bin:/bin:/usr/bin export LFS LC_ALL LFS_TGT PATH source ~/.bash_profile Si on redémarre la machine maintenant, il faut monter la partition dans ''$LFS'' et se connecter avec l'utilisateur ''lfs'', tout est déjà défini. ==== Binutils-2.34 — Passe 1 ==== cd $LFS/sources/ tar fxv binutils-2.34.tar.xz cd binutils-2.34 mkdir build cd build ../configure --prefix=/tools --with-sysroot=$LFS --with-lib-path=/tools/lib --target=$LFS_TGT --disable-nls --disable-werror make mkdir -v /tools/lib && ln -sv lib /tools/lib64 make install ==== GCC-9.2.0 — Passe 1 ==== cd $LFS/sources/ tar xfv gcc-9.2.0.tar.xz cd gcc-9.2.0 tar -xf ../mpfr-4.0.2.tar.xz mv -v mpfr-4.0.2 mpfr tar -xf ../gmp-6.2.0.tar.xz mv -v gmp-6.2.0 gmp tar -xf ../mpc-1.1.0.tar.gz mv -v mpc-1.1.0 mpc for file in gcc/config/{linux,i386/linux{,64}}.h do cp -uv $file{,.orig} sed -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \ -e 's@/usr@/tools@g' $file.orig > $file echo ' #undef STANDARD_STARTFILE_PREFIX_1 #undef STANDARD_STARTFILE_PREFIX_2 #define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/" #define STANDARD_STARTFILE_PREFIX_2 ""' >> $file touch $file.orig done sed -e '/m64=/s/lib64/lib/' \ -i.orig gcc/config/i386/t-linux64 mkdir build cd build ../configure \ --target=$LFS_TGT \ --prefix=/tools \ --with-glibc-version=2.11 \ --with-sysroot=$LFS \ --with-newlib \ --without-headers \ --with-local-prefix=/tools \ --with-native-system-header-dir=/tools/include \ --disable-nls \ --disable-shared \ --disable-multilib \ --disable-decimal-float \ --disable-threads \ --disable-libatomic \ --disable-libgomp \ --disable-libquadmath \ --disable-libssp \ --disable-libvtv \ --disable-libstdcxx \ --enable-languages=c,c++ make make install ==== Linux-5.5.3 API Headers ==== cd $LFS/sources/ tar xfv linux-5.5.3.tar.xz cd linux-5.5.3 make mrproper make headers cp -rv usr/include/* /tools/include ==== Glibc-2.31 ==== cd $LFS/sources/ tar xfv glibc-2.31.tar.xz cd glib-2.31 mkdir build cd build ../configure \ --prefix=/tools \ --host=$LFS_TGT \ --build=$(../scripts/config.guess) \ --enable-kernel=3.2 \ --with-headers=/tools/include make make install echo 'int main(){}' > dummy.c $LFS_TGT-gcc dummy.c readelf -l a.out | grep ': /tools' # doit retourner [Requesting program interpreter: /tools/lib64/ld-linux-x86-64.so.2] rm dummy.c a.out ==== Libstdc++ de GCC-9.2.0 ==== cd $LFS/sources/gcc-9.2.0/build ../libstdc++-v3/configure \ --host=$LFS_TGT \ --prefix=/tools \ --disable-multilib \ --disable-nls \ --disable-libstdcxx-threads \ --disable-libstdcxx-pch \ --with-gxx-include-dir=/tools/$LFS_TGT/include/c++/9.2.0 make make install ==== Binutils-2.34 — Passe 2 ==== cd $LFS/srouces/binutils-2.34/build rm -rf * CC=$LFS_TGT-gcc \ AR=$LFS_TGT-ar \ RANLIB=$LFS_TGT-ranlib \ ../configure \ --prefix=/tools \ --disable-nls \ --disable-werror \ --with-lib-path=/tools/lib \ --with-sysroot make make install make -C ld clean make -C ld LIB_PATH=/usr/lib:/lib cp -v ld/ld-new /tools/bin ==== GCC-9.2.0 — Passe 2 ==== cd $LFS/sources/gcc-9.2.0 cat gcc/limitx.h gcc/glimits.h gcc/limity.h > `dirname \ $($LFS_TGT-gcc -print-libgcc-file-name)`/include-fixed/limits.h for file in gcc/config/{linux,i386/linux{,64}}.h do cp -uv $file{,.orig} sed -e 's@/lib\(64\)\?\(32\)\?/ld@/tools&@g' \ -e 's@/usr@/tools@g' $file.orig > $file echo ' #undef STANDARD_STARTFILE_PREFIX_1 #undef STANDARD_STARTFILE_PREFIX_2 #define STANDARD_STARTFILE_PREFIX_1 "/tools/lib/" #define STANDARD_STARTFILE_PREFIX_2 ""' >> $file touch $file.orig done sed -e '/m64=/s/lib64/lib/' \ -i.orig gcc/config/i386/t-linux64 sed -e '1161 s|^|//|' \ -i libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc cd build rm -rf * CC=$LFS_TGT-gcc \ CXX=$LFS_TGT-g++ \ AR=$LFS_TGT-ar \ RANLIB=$LFS_TGT-ranlib \ ../configure \ --prefix=/tools \ --with-local-prefix=/tools \ --with-native-system-header-dir=/tools/include \ --enable-languages=c,c++ \ --disable-libstdcxx-pch \ --disable-multilib \ --disable-bootstrap \ --disable-libgomp make make install ln -sv gcc /tools/bin/cc echo 'int main(){}' > dummy.c cc dummy.c readelf -l a.out | grep ': /tools' # doit retourner [Requesting program interpreter: /tools/lib64/ld-linux-x86-64.so.2] rm -v dummy.c a.out ==== Tcl-8.6.10 ==== cd $LFS/sources/ tar xfv tcl8.6.10-src.tar.gz cd tcl8.6.10/unix ./configure --prefix=/tools make TZ=UTC make test make install chmod -v u+w /tools/lib/libtcl8.6.so make install-private-headers ln -sv tclsh8.6 /tools/bin/tclsh ==== Expect-5.45.4 ==== cd $LFS/sources/ tar xfv expect5.45.4.tar.gz cd expect5.45.4 cp -v configure{,.orig} sed 's:/usr/local/bin:/bin:' configure.orig > configure ./configure --prefix=/tools \ --with-tcl=/tools/lib \ --with-tclinclude=/tools/include make make test make SCRIPTS="" install ==== DejaGNU-1.6.2 ==== cd $LFS/sources/ tar xfv dejagnu-1.6.2.tar.gz cd dejagnu-1.6.2 ./configure --prefix=/tools make install make check ==== M4-1.4.18 ==== cd $LFS/sources/ tar xfv m4-1.4.18.tar.xz cd m4-1.4.18 sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h ./configure --prefix=/tools make make check make install ==== Ncurses-6.2 ==== cd $LFS/sources/ tar xfv ncurses-6.2.tar.gz cd ncurses-6.2 sed -i s/mawk// configure ./configure --prefix=/tools \ --with-shared \ --without-debug \ --without-ada \ --enable-widec \ --enable-overwrite make make install ln -s libncursesw.so /tools/lib/libncurses.so ==== Bash-5.0 ==== cd $LFS/sources/ tar xfv bash-5.0.tar.gz cd bash-5.0 ./configure --prefix=/tools --without-bash-malloc make make tests make install ln -sv bash /tools/bin/sh ==== Bison-3.5.2 ==== cd $LFS/sources/ tar xfv bison-3.5.2.tar.xz cd bison-3.5.2 ./configure --prefix=/tools make make check make install ==== Bzip2-1.0.8 ==== cd $LFS/sources/ tar xfv bzip2-1.0.8.tar.gz cd bzip2-1.0.8 make -f Makefile-libbz2_so make clean make make PREFIX=/tools install cp -v bzip2-shared /tools/bin/bzip2 cp -av libbz2.so* /tools/lib ln -sv libbz2.so.1.0 /tools/lib/libbz2.so ==== Coreutils-8.31 ==== cd $LFS/sources/ tar xfv coreutils-8.31.tar.xz cd coreutils-8.31 ./configure --prefix=/tools --enable-install-program=hostname make make install ==== Diffutils-3.7 ==== cd $LFS/sources/ tar xfv diffutils-3.7.tar.xz cd diffutils-3.7 ./configure --prefix=/tools make make install ==== File-5.38 ==== cd $LFS/sources/ tar xfv file-5.38.tar.gz cd file-5.38 make make install ==== Findutils-4.7.0 ==== cd $LFS/sources/ tar xfv findutils-4.7.0.tar.xz cd findutils-4.7.0 ./configure --prefix=/tools make make install ==== Gawk-5.0.1 ==== cd $LFS/sources/ tar xfv gawk-5.0.1.tar.xz cd gawk-5.0.1 ./configure --prefix=/tools make make install ==== Gettext-0.20.1 ==== cd $LFS/sources/ tar xfv gettext-0.20.1.tar.xz cd gettext-0.20.1 make cp -v gettext-tools/src/{msgfmt,msgmerge,xgettext} /tools/bin ==== Grep-3.4 ==== cd $LFS/sources/ tar xfv grep-3.4.tar.xz cd grep-3.4 ./configure --prefix=/tools make make install ==== Gzip-1.10 ==== cd $LFS/sources/ tar xfv gzip-1.10.tar.xz cd gzip-1.10 ./configure --prefix=/tools make make install ==== Make-4.3 ==== cd $LFS/sources/ tar xfv make-4.3.tar.gz cd make-4.3 ./configure --prefix=/tools --without-guile make make install ==== Patch-2.7.6 ==== cd $LFS/sources/ tar xfv patch-2.7.6.tar.xz cd patch-2.7.6 ./configure --prefix=/tools make make install ==== Perl-5.30.1 ==== cd $LFS/sources/ tar xfv perl-5.30.1.tar.xz cd perl-5.30.1 sh Configure -des -Dprefix=/tools -Dlibs=-lm -Uloclibpth -Ulocincpth make cp -v perl cpan/podlators/scripts/pod2man /tools/bin mkdir -pv /tools/lib/perl5/5.30.1 cp -Rv lib/* /tools/lib/perl5/5.30.1 ==== Python-3.8.1 ==== cd $LFS/sources/ tar xfv Python-3.8.1.tar.xz cd Python-3.8.1 sed -i '/def add_multiarch_paths/a \ return' setup.py ./configure --prefix=/tools --without-ensurepip make make install ==== Sed-4.8 ==== cd $LFS/sources/ tar xfv sed-4.8.tar.xz cd sed-4.8 ./configure --prefix=/tools make make install ==== Tar-1.32 ==== cd $LFS/sources/ tar xfv tar-1.32.tar.xz cd tar-1.32 ./configure --prefix=/tools make make install ==== Texinfo-6.7 ==== cd $LFS/sources/ tar xfv texinfo-6.7.tar.xz cd texinfo-6.7 ./configure --prefix=/tools make make install ==== Util-linux-2.35.1 ==== cd $LFS/sources/ tar xfv util-linux-2.35.1.tar.xz cd util-linux-2.35.1 ./configure --prefix=/tools \ --without-python \ --disable-makeinstall-chown \ --without-systemdsystemunitdir \ --without-ncurses \ PKG_CONFIG="" make make install ==== Xz-5.2.4 ==== cd $LFS/sources/ tar xfv xz-5.2.4.tar.xz cd xz-5.2.4 ./configure --prefix=/tools make make install ==== Supprimer les symboles des fichiers objets ==== strip --strip-debug /tools/lib/* /usr/bin/strip --strip-unneeded /tools/{,s}bin/* ==== Changer de propriétaire ==== En tant que root (ne pas oublie ''$LFS'' !) chown -R root:root $LFS/tools ==== Préparer les systèmes de fichiers virtuels du noyau ==== En tant que root: mkdir -pv $LFS/{dev,proc,sys,run} mknod -m 600 $LFS/dev/console c 5 1 mknod -m 666 $LFS/dev/null c 1 3 mount -v --bind /dev $LFS/dev mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620 mount -vt proc proc $LFS/proc mount -vt sysfs sysfs $LFS/sys mount -vt tmpfs tmpfs $LFS/run ==== Entrer dans l'environnement chroot ==== chroot "$LFS" /tools/bin/env -i \ HOME=/root \ TERM="$TERM" \ PS1='(lfs chroot) \u:\w\$ ' \ PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \ /tools/bin/bash --login +h ==== Créer les répertoires ==== mkdir -pv /{bin,boot,etc/{opt,sysconfig},home,lib/firmware,mnt,opt} mkdir -pv /{media/{floppy,cdrom},sbin,srv,var} install -dv -m 0750 /root install -dv -m 1777 /tmp /var/tmp mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src} mkdir -pv /usr/{,local/}share/{color,dict,doc,info,locale,man} mkdir -v /usr/{,local/}share/{misc,terminfo,zoneinfo} mkdir -v /usr/libexec mkdir -pv /usr/{,local/}share/man/man{1..8} mkdir -v /usr/lib/pkgconfig case $(uname -m) in x86_64) mkdir -v /lib64 ;; esac mkdir -v /var/{log,mail,spool} ln -sv /run /var/run ln -sv /run/lock /var/lock mkdir -pv /var/{opt,cache,lib/{color,misc,locate},local} ==== Créer les fichiers et les liens symboliques essentiels ==== ln -sv /tools/bin/{bash,cat,chmod,dd,echo,ln,mkdir,pwd,rm,stty,touch} /bin ln -sv /tools/bin/{env,install,perl,printf} /usr/bin ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib ln -sv /tools/lib/libstdc++.{a,so{,.6}} /usr/lib ln -sv bash /bin/sh ln -sv /proc/self/mounts /etc/mtab cat > /etc/passwd << "EOF" root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/dev/null:/bin/false daemon:x:6:6:Daemon User:/dev/null:/bin/false messagebus:x:18:18:D-Bus Message Daemon User:/var/run/dbus:/bin/false systemd-bus-proxy:x:72:72:systemd Bus Proxy:/:/bin/false systemd-journal-gateway:x:73:73:systemd Journal Gateway:/:/bin/false systemd-journal-remote:x:74:74:systemd Journal Remote:/:/bin/false systemd-journal-upload:x:75:75:systemd Journal Upload:/:/bin/false systemd-network:x:76:76:systemd Network Management:/:/bin/false systemd-resolve:x:77:77:systemd Resolver:/:/bin/false systemd-timesync:x:78:78:systemd Time Synchronization:/:/bin/false systemd-coredump:x:79:79:systemd Core Dumper:/:/bin/false nobody:x:99:99:Unprivileged User:/dev/null:/bin/false EOF cat > /etc/group << "EOF" root:x:0: bin:x:1:daemon sys:x:2: kmem:x:3: tape:x:4: tty: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: adm:x:16: messagebus:x:18: systemd-journal:x:23: input:x:24: mail:x:34: kvm:x:61: systemd-bus-proxy:x:72: systemd-journal-gateway:x:73: systemd-journal-remote:x:74: systemd-journal-upload:x:75: systemd-network:x:76: systemd-resolve:x:77: systemd-timesync:x:78: systemd-coredump:x:79: wheel:x:97: nogroup:x:99: users:x:999: EOF exec /tools/bin/bash --login +h touch /var/log/{btmp,lastlog,faillog,wtmp} chgrp -v utmp /var/log/lastlog chmod -v 664 /var/log/lastlog chmod -v 600 /var/log/btmp ==== Linux-5.5.3 API Headers ==== cd /sources/linux-5.5.3 make mrproper make headers find usr/include -name '.*' -delete rm usr/include/Makefile cp -rv usr/include/* /usr/include ==== Man-pages-5.05 ==== cd /sources/ tar xfv man-pages-5.05.tar.xz cd man-pages-5.05 make install ==== Glibc-2.31 ==== cd /sources/glibc-2.31/ patch -Np1 -i ../glibc-2.31-fhs-1.patch ln -sfv ../lib/ld-linux-x86-64.so.2 /lib64 ln -sfv ../lib/ld-linux-x86-64.so.2 /lib64/ld-lsb-x86-64.so.3 cd build rm -rf * CC="gcc -ffile-prefix-map=/tools=/usr" \ ../configure --prefix=/usr \ --disable-werror \ --enable-kernel=3.2 \ --enable-stack-protector=strong \ --with-headers=/usr/include \ libc_cv_slibdir=/lib make ln -sfnv $PWD/elf/ld-linux-x86-64.so.2 /lib make check touch /etc/ld.so.conf sed '/test-installation/s@$(PERL)@echo not running@' -i ../Makefile make install cp -v ../nscd/nscd.conf /etc/nscd.conf mkdir -pv /var/cache/nscd install -v -Dm644 ../nscd/nscd.tmpfiles /usr/lib/tmpfiles.d/nscd.conf install -v -Dm644 ../nscd/nscd.service /lib/systemd/system/nscd.service mkdir -pv /usr/lib/locale localedef -i POSIX -f UTF-8 C.UTF-8 2> /dev/null || true localedef -i cs_CZ -f UTF-8 cs_CZ.UTF-8 localedef -i de_DE -f ISO-8859-1 de_DE localedef -i de_DE@euro -f ISO-8859-15 de_DE@euro localedef -i de_DE -f UTF-8 de_DE.UTF-8 localedef -i el_GR -f ISO-8859-7 el_GR localedef -i en_GB -f UTF-8 en_GB.UTF-8 localedef -i en_HK -f ISO-8859-1 en_HK localedef -i en_PH -f ISO-8859-1 en_PH localedef -i en_US -f ISO-8859-1 en_US localedef -i en_US -f UTF-8 en_US.UTF-8 localedef -i es_MX -f ISO-8859-1 es_MX localedef -i fa_IR -f UTF-8 fa_IR localedef -i fr_FR -f ISO-8859-1 fr_FR localedef -i fr_FR@euro -f ISO-8859-15 fr_FR@euro localedef -i fr_FR -f UTF-8 fr_FR.UTF-8 localedef -i it_IT -f ISO-8859-1 it_IT localedef -i it_IT -f UTF-8 it_IT.UTF-8 localedef -i ja_JP -f EUC-JP ja_JP localedef -i ja_JP -f SHIFT_JIS ja_JP.SIJS 2> /dev/null || true localedef -i ja_JP -f UTF-8 ja_JP.UTF-8 localedef -i ru_RU -f KOI8-R ru_RU.KOI8-R localedef -i ru_RU -f UTF-8 ru_RU.UTF-8 localedef -i tr_TR -f UTF-8 tr_TR.UTF-8 localedef -i zh_CN -f GB18030 zh_CN.GB18030 localedef -i zh_HK -f BIG5-HKSCS zh_HK.BIG5-HKSCS cat > /etc/nsswitch.conf << "EOF" # Begin /etc/nsswitch.conf passwd: files group: files shadow: files hosts: files dns networks: files protocols: files services: files ethers: files rpc: files # End /etc/nsswitch.conf EOF tar -xf ../../tzdata2019c.tar.gz ZONEINFO=/usr/share/zoneinfo mkdir -pv $ZONEINFO/{posix,right} for tz in etcetera southamerica northamerica europe africa antarctica \ asia australasia backward pacificnew systemv; do zic -L /dev/null -d $ZONEINFO ${tz} zic -L /dev/null -d $ZONEINFO/posix ${tz} zic -L leapseconds -d $ZONEINFO/right ${tz} done cp -v zone.tab zone1970.tab iso3166.tab $ZONEINFO zic -d $ZONEINFO -p America/New_York unset ZONEINFO tzselect ln -sfv /usr/share/zoneinfo/Europe/Paris /etc/localtime cat > /etc/ld.so.conf << "EOF" # Début de /etc/ld.so.conf /usr/local/lib /opt/lib EOF cat >> /etc/ld.so.conf << "EOF" # Ajout d'un répertoire include include /etc/ld.so.conf.d/*.conf EOF mkdir -pv /etc/ld.so.conf.d ==== Ajustement de la chaîne d'outils ==== mv -v /tools/bin/{ld,ld-old} mv -v /tools/$(uname -m)-pc-linux-gnu/bin/{ld,ld-old} mv -v /tools/bin/{ld-new,ld} ln -sv /tools/bin/ld /tools/$(uname -m)-pc-linux-gnu/bin/ld gcc -dumpspecs | sed -e 's@/tools@@g' \ -e '/\*startfile_prefix_spec:/{n;s@.*@/usr/lib/ @}' \ -e '/\*cpp:/{n;s@$@ -isystem /usr/include@}' > \ `dirname $(gcc --print-libgcc-file-name)`/specs Faire certaines vérifications, cf le manuel. ==== Zlib-1.2.11 ==== cd /sources/ tar xfv zlib-1.2.11.tar.xz cd zlib-1.2.11 ./configure --prefix=/usr make make install mv -v /usr/lib/libz.so.* /lib ln -sfv ../../lib/$(readlink /usr/lib/libz.so) /usr/lib/libz.so ==== Bzip2-1.0.8 ==== cd /sources/bzip2-1.0.8/ patch -Np1 -i ../bzip2-1.0.8-install_docs-1.patch sed -i 's@\(ln -s -f \)$(PREFIX)/bin/@\1@' Makefile sed -i "s@(PREFIX)/man@(PREFIX)/share/man@g" Makefile make clean make -f Makefile-libbz2_so make clean make make PREFIX=/usr install cp -v bzip2-shared /bin/bzip2 cp -av libbz2.so* /lib ln -sv ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so rm -v /usr/bin/{bunzip2,bzcat,bzip2} ln -sv bzip2 /bin/bunzip2 ln -sv bzip2 /bin/bzcat ==== Xz-5.2.4 ==== cd /sources/xz-5.2.4 ./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/xz-5.2.4 make make check make install mv -v /usr/bin/{lzma,unlzma,lzcat,xz,unxz,xzcat} /bin mv -v /usr/lib/liblzma.so.* /lib ln -svf ../../lib/$(readlink /usr/lib/liblzma.so) /usr/lib/liblzma.so ==== File-5.38 ==== cd /sources/file-5.38 ./configure --prefix=/usr make make check make install ==== Readline-8.0 ==== cd /sources/ tar xfv readline-8.0.tar.gz cd readline-8.0 sed -i '/MV.*old/d' Makefile.in sed -i '/{OLDSUFF}/c:' support/shlib-install ./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/readline-8.0 make SHLIB_LIBS="-L/tools/lib -lncursesw" make SHLIB_LIBS="-L/tools/lib -lncursesw" install mv -v /usr/lib/lib{readline,history}.so.* /lib chmod -v u+w /lib/lib{readline,history}.so.* ln -sfv ../../lib/$(readlink /usr/lib/libreadline.so) /usr/lib/libreadline.so ln -sfv ../../lib/$(readlink /usr/lib/libhistory.so ) /usr/lib/libhistory.so ==== M4-1.4.18 ==== cd /sources/m4-1.4.18/ sed -i 's/IO_ftrylockfile/IO_EOF_SEEN/' lib/*.c echo "#define _IO_IN_BACKUP 0x100" >> lib/stdio-impl.h ./configure --prefix=/usr make make check make install ==== Bc-2.5.3 ==== cd /sources tar xfv bc-2.5.3.tar.gz cd bc-2.5.3 PREFIX=/usr CC=gcc CFLAGS="-std=c99" ./configure.sh -G -O3 make make test make install ==== Binutils-2.34 ==== cd /sources/binutils-2.34 sed -i '/@\tincremental_copy/d' gold/testsuite/Makefile.in cd build/ rm -rf * ../configure --prefix=/usr \ --enable-gold \ --enable-ld=default \ --enable-plugins \ --enable-shared \ --disable-werror \ --enable-64-bit-bfd \ --with-system-zlib make tooldir=/usr make -k check make tooldir=/usr install ==== GMP-6.2.0 ==== cd /sources/ tar xfv gmp-6.2.0.tar.gz cd gmp-6.2.0 ./configure --prefix=/usr \ --enable-cxx \ --disable-static \ --docdir=/usr/share/doc/gmp-6.2.0 make make check 2>&1 | tee gmp-check-log awk '/# PASS:/{total+=$3} ; END{print total}' gmp-check-log # >= 197 make install ==== MPFR-4.0.2 ==== cd /sources/ tar xfv mpfr-4.0.2.tar.gz cd mpfr-4.0.2 ./configure --prefix=/usr \ --disable-static \ --enable-thread-safe \ --docdir=/usr/share/doc/mpfr-4.0.2 make make check make install ==== MPC-1.1.0 ==== cd /sources/ tar xfv mpc-1.1.0.tar.gz cd mpc-1.1.0 ./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/mpc-1.1.0 make make check make install ==== Attr-2.4.48 ==== cd /sources/ tar xfv attr-2.4.48.tar.gz cd attre-2.4.48 ./configure --prefix=/usr \ --disable-static \ --sysconfdir=/etc \ --docdir=/usr/share/doc/attr-2.4.48 make make check make install mv -v /usr/lib/libattr.so.* /lib ln -sfv ../../lib/$(readlink /usr/lib/libattr.so) /usr/lib/libattr.so ==== Acl-2.2.53 ==== cd /sources/ tar xfv acl-2.2.53.tar.gz cd acl-2.2.53 ./configure --prefix=/usr \ --disable-static \ --libexecdir=/usr/lib \ --docdir=/usr/share/doc/acl-2.2.53 make make install ==== Shadow-4.8.1 ==== cd /sources/ tar xfv shadow-4.8.1.tar.gz cd shadow-4.8.1 sed -i 's/groups$(EXEEXT) //' src/Makefile.in find man -name Makefile.in -exec sed -i 's/groups\.1 / /' {} \; find man -name Makefile.in -exec sed -i 's/getspnam\.3 / /' {} \; find man -name Makefile.in -exec sed -i 's/passwd\.5 / /' {} \; sed -i -e 's@#ENCRYPT_METHOD DES@ENCRYPT_METHOD SHA512@' \ -e 's@/var/spool/mail@/var/mail@' etc/login.defs sed -i 's/1000/999/' etc/useradd ./configure --sysconfdir=/etc --with-group-name-max-length=32 make make install pwconv grpconv passwd root ==== GCC-9.2.0 ==== cd /sources/gcc-9.2.0 sed -e '/m64=/s/lib64/lib/' -i.orig gcc/config/i386/t-linux64 sed -e '1161 s|^|//|' -i libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc cd build rm -rf * SED=sed \ ../configure --prefix=/usr \ --enable-languages=c,c++ \ --disable-multilib \ --disable-bootstrap \ --with-system-zlib make ulimit -s 32768 chown -Rv nobody . su nobody -s /bin/bash -c "PATH=$PATH make -k check" # très très très long (plus de 4h), voir la doc pour interpréter le résultat make install rm -rf /usr/lib/gcc/$(gcc -dumpmachine)/9.2.0/include-fixed/bits/ chown -v -R root:root /usr/lib/gcc/*linux-gnu/9.2.0/include{,-fixed} ln -sv ../usr/bin/cpp /lib ln -sv gcc /usr/bin/cc install -v -dm755 /usr/lib/bfd-plugins ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/9.2.0/liblto_plugin.so /usr/lib/bfd-plugins/ # vérifications, cf le manuel, j'ai eu besoin de faire: gcc -dumpspecs > `dirname $(gcc --print-libgcc-file-name)`/specs # et supprimer tous les '/tools' pour que l'interpréteur soit le bon mkdir -pv /usr/share/gdb/auto-load/usr/lib mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib ==== Pkg-config-0.29.2 ==== cd /sources tar xfv pkg-config-0.29.2.tar.gz cd pkg-config-0.29.2 ./configure --prefix=/usr \ --with-internal-glib \ --disable-host-tool \ --docdir=/usr/share/doc/pkg-config-0.29.2 make make check make install ==== Ncurses-6.2 ==== cd /sources/ncurses-6.2/ sed -i '/LIBTOOL_INSTALL/d' c++/Makefile.in ./configure --prefix=/usr \ --mandir=/usr/share/man \ --with-shared \ --without-debug \ --without-normal \ --enable-pc-files \ --enable-widec make make install mv -v /usr/lib/libncursesw.so.6* /lib ln -sfv ../../lib/$(readlink /usr/lib/libncursesw.so) /usr/lib/libncursesw.so for lib in ncurses form panel menu ; do rm -vf /usr/lib/lib${lib}.so echo "INPUT(-l${lib}w)" > /usr/lib/lib${lib}.so ln -sfv ${lib}w.pc /usr/lib/pkgconfig/${lib}.pc done rm -vf /usr/lib/libcursesw.so echo "INPUT(-lncursesw)" > /usr/lib/libcursesw.so ln -sfv libncurses.so /usr/lib/libcurses.so ==== Libcap-2.31 ==== cd /sources/ tar xfv libcap-2.31.tar.gz cd libcap-2.31 sed -i '/install.*STA...LIBNAME/d' libcap/Makefile make lib=lib make test make lib=lib install chmod -v 755 /lib/libcap.so.2.31 ==== Sed-4.8 ==== cd /sources/sed-4.8 sed -i 's/usr/tools/' build-aux/help2man sed -i 's/testsuite.panic-tests.sh//' Makefile.in ./configure --prefix=/usr --bindir=/bin make make check make install install -d -m755 /usr/share/doc/sed-4.8 ==== Psmisc-23.2 ==== cd /sources tar xfv psmisc-23.2.tar.xz cd psmisc-23.2 ./configure --prefix=/usr make make install mv -v /usr/bin/fuser /bin mv -v /usr/bin/killall /bin ==== Iana-Etc-2.30 ==== cd /sources/ tar xfv iana-etc-2.30.tar.bz2 cd iana-etc-2.30/ make make install ==== Bison-3.5.2 ==== cd /sources/bison-3.5.2 ./configure --prefix=/usr --docdir=/usr/share/doc/bison-3.5.2 make make install ==== Flex-2.6.4 ==== cd /sources/ tar xfv flex-2.6.4.tar.gz cd flex-2.6.4/ sed -i "/math.h/a #include " src/flexdef.h HELP2MAN=/tools/bin/true \ ./configure --prefix=/usr --docdir=/usr/share/doc/flex-2.6.4 make make check make install ln -s flex /usr/bin/lex ==== Grep-3.4 ==== cd /sources/grep-3.4 ./configure --prefix=/usr --bindir=/bin make make check make install ==== Bash-5.0 ==== cd /sources/bash-5.0 patch -Np1 -i ../bash-5.0-upstream_fixes-1.patch ./configure --prefix=/usr \ --docdir=/usr/share/doc/bash-5.0 \ --without-bash-malloc \ --with-installed-readline make make install mv -vf /usr/bin/bash /bin exec /bin/bash --login +h ==== Libtool-2.4.6 ==== cd /sources/ tar xfv libtool-2.4.6.tar.xz cd libtool-2.4.6/ ./configure --prefix=/usr make make install ==== GDBM-1.18.1 ==== cd /sources/ tar xfv gdbm-1.18.1.tar.xz cd gdbm-1.18.1/ ./configure --prefix=/usr \ --disable-static \ --enable-libgdbm-compat make make check make install ==== Gperf-3.1 ==== cd /sources tar xfv gperf-3.1.tar.gz cd gperf-3.1 ./configure --prefix=/usr --docdir=/usr/share/doc/gperf-3.1 make make -j1 check make install ==== Expat-2.2.9 ==== cd /sources/ tar xfv expat-2.2.9.tar.xz cd expat-2.2.9/ sed -i 's|usr/bin/env |bin/|' run.sh.in ./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/expat-2.2.9 make make check make install ==== Inetutils-1.9.4 ==== cd /sources tar xfv inetutils-1.9.4.tar.xz cd inetutils-1.9.4/ ./configure --prefix=/usr \ --localstatedir=/var \ --disable-logger \ --disable-whois \ --disable-rcp \ --disable-rexec \ --disable-rlogin \ --disable-rsh \ --disable-servers make make install mv -v /usr/bin/{hostname,ping,ping6,traceroute} /bin mv -v /usr/bin/ifconfig /sbin ==== Perl-5.30.1 ==== cd /sources/ rm -rf perl-5.30.1 tar xfv perl-5.30.1.tar.xz cd perl-5.30.1 echo "127.0.0.1 localhost $(hostname)" > /etc/hosts export BUILD_ZLIB=False export BUILD_BZIP2=0 sh Configure -des -Dprefix=/usr \ -Dvendorprefix=/usr \ -Dman1dir=/usr/share/man/man1 \ -Dman3dir=/usr/share/man/man3 \ -Dpager="/usr/bin/less -isR" \ -Duseshrplib \ -Dusethreads make make install unset BUILD_ZLIB BUILD_BZIP2 ==== XML::Parser-2.46 ==== cd /sources/ tar xfv XML-Parser-2.46.tar.gz cd XML-Parser-2.46 perl Makefile.PL make make test make install ==== Intltool-0.51.0 ==== cd /sources tar xfv intltool-0.51.0.tar.gz cd intltool-0.51.0 sed -i 's:\\\${:\\\$\\{:' intltool-update.in ./configure --prefix=/usr make make check make install install -v -Dm644 doc/I18N-HOWTO /usr/share/doc/intltool-0.51.0/I18N-HOWTO ==== Autoconf-2.69 ==== cd /sources tar xfv autoconf-2.69.tar.xz cd autoconf-2.69 sed '361 s/{/\\{/' -i bin/autoscan.in ./configure --prefix=/usr make make install ==== Automake-1.16.1 ==== cd /sources tar xfv automake-1.16.1.tar.xz cd automake-1.16.1 ./configure --prefix=/usr --docdir=/usr/share/doc/automake-1.16.1 make make install ==== Kmod-26 ==== cd /sources tar xfv kmod-26.tar.xz cd kmod-26 ./configure --prefix=/usr \ --bindir=/bin \ --sysconfdir=/etc \ --with-rootlibdir=/lib \ --with-xz \ --with-zlib make make install for target in depmod insmod lsmod modinfo modprobe rmmod; do ln -sfv ../bin/kmod /sbin/$target done ln -sfv kmod /bin/lsmod ==== Gettext-0.20.1 ==== cd /sources/gettext-0.20.1 ./configure --prefix=/usr \ --disable-static \ --docdir=/usr/share/doc/gettext-0.20.1 make make install chmod -v 0755 /usr/lib/preloadable_libintl.so ==== Libelf de Elfutils-0.178 ==== cd /sources tar xfv elfutils-0.178.tar.bz2 cd elfutils-0.178 ./configure --prefix=/usr --disable-debuginfod make make -C libelf install install -vm644 config/libelf.pc /usr/lib/pkgconfig rm /usr/lib/libelf.a ==== Libffi-3.3 ==== cd /sources tar xfv libffi-3.3.tar.gz cd libffi-3.3 ./configure --prefix=/usr --disable-static --with-gcc-arch=native make make install ==== OpenSSL-1.1.1d ==== cd /sources tar xfv openssl-1.1.1.tar.gz cd openssl-1.1.1d ./config --prefix=/usr \ --openssldir=/etc/ssl \ --libdir=lib \ shared \ zlib-dynamic make sed -i '/INSTALL_LIBS/s/libcrypto.a libssl.a//' Makefile make MANSUFFIX=ssl install ==== Python-3.8.1 ==== cd /sources/Python-3.8.1 ./configure --prefix=/usr \ --enable-shared \ --with-system-expat \ --with-system-ffi \ --with-ensurepip=yes make make install chmod -v 755 /usr/lib/libpython3.8.so chmod -v 755 /usr/lib/libpython3.so ln -sfv pip3.8 /usr/bin/pip3 ==== Ninja-1.10.0 ==== cd /sources tar xfv ninja-1.10.0.tar.gz cd ninja-1.10.0 python3 configure.py --bootstrap install -vm755 ninja /usr/bin/ install -vDm644 misc/bash-completion /usr/share/bash-completion/completions/ninja install -vDm644 misc/zsh-completion /usr/share/zsh/site-functions/_ninja ==== Meson-0.53.1 ==== cd /sources/ tar xfv meson-0.53.1.tar.gz cd meson-0.53.1 python3 setup.py build python3 setup.py install --root=dest cp -rv dest/* / ==== Coreutils-8.31 ==== cd /sources/coreutils-8.31/ patch -Np1 -i ../coreutils-8.31-i18n-1.patch sed -i '/test.lock/s/^/#/' gnulib-tests/gnulib.mk autoreconf -fiv FORCE_UNSAFE_CONFIGURE=1 ./configure \ --prefix=/usr \ --enable-no-install-program=kill,uptime make make install mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin mv -v /usr/bin/{false,ln,ls,mkdir,mknod,mv,pwd,rm} /bin mv -v /usr/bin/{rmdir,stty,sync,true,uname} /bin mv -v /usr/bin/chroot /usr/sbin mv -v /usr/share/man/man1/chroot.1 /usr/share/man/man8/chroot.8 sed -i s/\"1\"/\"8\"/1 /usr/share/man/man8/chroot.8 mv -v /usr/bin/{head,nice,sleep,touch} /bin ==== Check-0.14.0 ==== cd /sources/ tar xfv check-0.14.0.tar.gz cd check-0.14.0 ./configure --prefix=/usr make make docdir=/usr/share/doc/check-0.14.0 install && sed -i '1 s/tools/usr/' /usr/bin/checkmk ==== Diffutils-3.7 ==== cd /sources/diffutils-3.7 ./configure --prefix=/usr make make check make install ==== Gawk-5.0.1 ==== cd /sources/gawk-5.0.1 sed -i 's/extras//' Makefile.in ./configure --prefix=/usr make make check make install ==== Findutils-4.7.0 ==== cd /sources/findutils-4.7.0 ./configure --prefix=/usr --localstatedir=/var/lib/locate make make install mv -v /usr/bin/find /bin sed -i 's|find:=${BINDIR}|find:=/bin|' /usr/bin/updatedb ==== Groff-1.22.4 ==== cd /sources tar xfv groff-1.22.4.tar.gz cd groff-1.22.4 PAGE=A4 ./configure --prefix=/usr make -j1 make install ==== GRUB-2.04 ==== cd /sources tar xfv grub-2.04.tar.xz cd grub-2.04 ./configure --prefix=/usr \ --sbindir=/sbin \ --sysconfdir=/etc \ --disable-efiemu \ --disable-werror make make install mv -v /etc/bash_completion.d/grub /usr/share/bash-completion/completions ==== Less-551 ==== cd /sources tar xfv less-551.tar.gz cd less-551 ./configure --prefix=/usr --sysconfdir=/etc make make install ==== Gzip-1.10 ==== cd /sources/gzip-1.10 ./configure --prefix=/usr make make install mv -v /usr/bin/gzip /bin ==== Zstd-1.4.4 ==== cd /sources tar xfv zstd-1.4.4.tar.gz cd zstd-1.4.4 make make prefix=/usr install rm -v /usr/lib/libzstd.a mv -v /usr/lib/libzstd.so.* /lib ln -sfv ../../lib/$(readlink /usr/lib/libzstd.so) /usr/lib/libzstd.so ==== IPRoute2-5.5.0 ==== cd /sources tar xfv iproute2-5.5.0.tar.xz cd iproute2-5.5.0 sed -i /ARPD/d Makefile rm -fv man/man8/arpd.8 sed -i 's/.m_ipt.o//' tc/Makefile make make DOCDIR=/usr/share/doc/iproute2-5.5.0 install ==== Kbd-2.2.0 ==== cd /sources/ tar xfv kbd-2.2.0.tar.xz cd kbd-2.2.0 patch -Np1 -i ../kbd-2.2.0-backspace-1.patch sed -i 's/\(RESIZECONS_PROGS=\)yes/\1no/g' configure sed -i 's/resizecons.8 //' docs/man/man8/Makefile.in PKG_CONFIG_PATH=/tools/lib/pkgconfig ./configure --prefix=/usr --disable-vlock make make install ==== Libpipeline-1.5.2 ==== cd /sources tar xfv libpipeline-1.5.2.tar.gz cd libpipeline-1.5.2 ./configure --prefix=/usr make make install ==== Make-4.3 ==== cd /sources/make-4.3/ ./configure --prefix=/usr make make install ==== Patch-2.7.6 ==== cd /sources/patch-2.7.6 ./configure --prefix=/usr make make install ==== Man-DB-2.9.0 ==== cd /sources/ tar xfv man-db-2.9.0.tar.xz cd man-db-2.9.0 sed -i '/find/s@/usr@@' init/systemd/man-db.service.in ./configure --prefix=/usr \ --docdir=/usr/share/doc/man-db-2.9.0 \ --sysconfdir=/etc \ --disable-setuid \ --enable-cache-owner=bin \ --with-browser=/usr/bin/lynx \ --with-vgrind=/usr/bin/vgrind \ --with-grap=/usr/bin/grap make make install ==== Tar-1.32 ==== cd /sources/tar-1.32 FORCE_UNSAFE_CONFIGURE=1 \ ./configure --prefix=/usr \ --bindir=/bin make make install ==== Texinfo-6.7 ==== cd /sources/texinfo-6.7 ./configure --prefix=/usr --disable-static make make install ==== Vim-8.2.0190 ==== cd /sources tar xfv vim-8.2.0190.tar.gz cd vim-8.2.0190 echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h ./configure --prefix=/usr make make install ln -sv vim /usr/bin/vi for L in /usr/share/man/{,*/}man1/vim.1; do ln -sv vim.1 $(dirname $L)/vi.1 done ln -sv ../vim/vim82/doc /usr/share/doc/vim-8.2.0190 cat > /etc/vimrc << "EOF" " Begin /etc/vimrc " Ensure defaults are set before customizing settings, not after source $VIMRUNTIME/defaults.vim let skip_defaults_vim=1 set nocompatible set backspace=2 set mouse= syntax on if (&term == "xterm") || (&term == "putty") set background=dark endif " End /etc/vimrc EOF ==== Systemd-244 ==== cd /sources tar xfv systemd-244.tar.gz cd systemd-244 ln -sf /tools/bin/true /usr/bin/xsltproc for file in /tools/lib/lib{blkid,mount,uuid}.so*; do ln -sf $file /usr/lib/ done tar -xf ../systemd-man-pages-244.tar.xz sed '177,$ d' -i src/resolve/meson.build sed -i 's/GROUP="render", //' rules.d/50-udev-default.rules.in mkdir -p build cd build PKG_CONFIG_PATH="/usr/lib/pkgconfig:/tools/lib/pkgconfig" \ LANG=en_US.UTF-8 \ meson --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ -Dblkid=true \ -Dbuildtype=release \ -Ddefault-dnssec=no \ -Dfirstboot=false \ -Dinstall-tests=false \ -Dkmod-path=/bin/kmod \ -Dldconfig=false \ -Dmount-path=/bin/mount \ -Drootprefix= \ -Drootlibdir=/lib \ -Dsplit-usr=true \ -Dsulogin-path=/sbin/sulogin \ -Dsysusers=false \ -Dumount-path=/bin/umount \ -Db_lto=false \ -Drpmmacrosdir=no \ .. LANG=en_US.UTF-8 ninja LANG=en_US.UTF-8 ninja install rm -f /usr/bin/xsltproc systemd-machine-id-setup systemctl preset-all systemctl disable systemd-time-wait-sync.service rm -fv /usr/lib/lib{blkid,uuid,mount}.so* ==== D-Bus-1.12.16 ==== cd /sources tar xfv dbus-1.12.16.tar.gz cd dbus-1.12.16 ./configure --prefix=/usr \ --sysconfdir=/etc \ --localstatedir=/var \ --disable-static \ --disable-doxygen-docs \ --disable-xml-docs \ --docdir=/usr/share/doc/dbus-1.12.16 \ --with-console-auth-dir=/run/console make make install mv -v /usr/lib/libdbus-1.so.* /lib ln -sfv ../../lib/$(readlink /usr/lib/libdbus-1.so) /usr/lib/libdbus-1.so ln -sv /etc/machine-id /var/lib/dbus ==== Procps-3.3.15 ==== cd /sources/ tar xfv procps-ng-3.3.15.tar.xz cd procps-ng-3.3.15 ./configure --prefix=/usr \ --exec-prefix= \ --libdir=/usr/lib \ --docdir=/usr/share/doc/procps-ng-3.3.15 \ --disable-static \ --disable-kill \ --with-systemd make make install mv -v /usr/lib/libprocps.so.* /lib ln -sfv ../../lib/$(readlink /usr/lib/libprocps.so) /usr/lib/libprocps.so ==== Util-linux-2.35.1 ==== cd /sources/util-linux-2.35.1 mkdir -pv /var/lib/hwclock rm -vf /usr/include/{blkid,libmount,uuid} ./configure ADJTIME_PATH=/var/lib/hwclock/adjtime \ --docdir=/usr/share/doc/util-linux-2.35.1 \ --disable-chfn-chsh \ --disable-login \ --disable-nologin \ --disable-su \ --disable-setpriv \ --disable-runuser \ --disable-pylibmount \ --disable-static \ --without-python make make install ==== E2fsprogs-1.45.5 ==== cd /sources/ tar xfv e2fsprogs-1.45.5.tar.gz cd e2fsprogs-1.45.5 mkdir -v build cd build ../configure --prefix=/usr \ --bindir=/bin \ --with-root-prefix="" \ --enable-elf-shlibs \ --disable-libblkid \ --disable-libuuid \ --disable-uuidd \ --disable-fsck make make install chmod -v u+w /usr/lib/{libcom_err,libe2p,libext2fs,libss}.a gunzip -v /usr/share/info/libext2fs.info.gz install-info --dir-file=/usr/share/info/dir /usr/share/info/libext2fs.info ==== Nettoyer ==== rm -rf /tmp/* logout chroot "$LFS" /usr/bin/env -i \ HOME=/root TERM="$TERM" \ PS1='(lfs chroot) \u:\w\$ ' \ PATH=/bin:/usr/bin:/sbin:/usr/sbin \ /bin/bash --login rm -f /usr/lib/lib{bfd,opcodes}.a rm -f /usr/lib/libbz2.a rm -f /usr/lib/lib{com_err,e2p,ext2fs,ss}.a rm -f /usr/lib/libltdl.a rm -f /usr/lib/libfl.a rm -f /usr/lib/libz.a find /usr/lib /usr/libexec -name \*.la -delete ==== Configuration générale du réseau ==== Pour utiliser un DHCP: cat > /etc/systemd/network/10-eth-dhcp.network << "EOF" [Match] Name= [Network] DHCP=ipv4 [DHCP] UseDomains=true EOF cat > /etc/resolv.conf << "EOF" nameserver EOF echo "VIRTUAL-LFS" > /etc/hostname cat > /etc/hosts << "EOF" 127.0.0.1 localhost 127.0.1.1 VIRUTAL-LFS ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters EOF ==== Configurer la Console Linux ==== cat > /etc/vconsole.conf << "EOF" KEYMAP=fr EOF ==== Configuration des paramètres régionaux du système ==== cat > /etc/locale.conf << "EOF" LANG=fr_FR.ISO-8859-1 EOF ==== Créer le fichier /etc/inputrc ==== cat > /etc/inputrc << "EOF" # Début de /etc/inputrc # Modifié par Chris Lynn # Permettre à l'invite de commande d'aller à la ligne set horizontal-scroll-mode Off # Activer l'entrée sur 8 bits set meta-flag On set input-meta On # Ne pas supprimer le 8ème bit set convert-meta Off # Conserver le 8ème bit à l'affichage set output-meta On # none, visible ou audible set bell-style none # Toutes les indications qui suivent font correspondre la séquence # d'échappement contenue dans le 1er argument à la fonction # spécifique de readline "\eOd": backward-word "\eOc": forward-word # Pour la console linux "\e[1~": beginning-of-line "\e[4~": end-of-line "\e[5~": beginning-of-history "\e[6~": end-of-history "\e[3~": delete-char "\e[2~": quoted-insert # pour xterm "\eOH": beginning-of-line "\eOF": end-of-line # pour Konsole "\e[H": beginning-of-line "\e[F": end-of-line # Fin de /etc/inputrc EOF ==== Créaction du fichier /etc/shells ==== cat > /etc/shells << "EOF" # Begin /etc/shells /bin/sh /bin/bash # End /etc/shells EOF ==== Utilisation et configuration de Systemd ==== mkdir -pv /etc/systemd/system/getty@tty1.service.d cat > /etc/systemd/system/getty@tty1.service.d/noclear.conf << EOF [Service] TTYVTDisallocate=no EOF ==== Créer le fichier /etc/fstab ==== cat > /etc/fstab << "EOF" # Begin /etc/fstab # file system mount-point type options dump fsck # order /dev/sda2 / ext4 defaults 1 1 /dev/sda3 swap swap pri=1 0 0 # End /etc/fstab EOF ==== Linux-5.5.3 ==== cd /sources/ rm -rf linux-5.5.3 tar xfv linux-5.5.3.tar.xz cd linux-5.5.3 make mrproper make defconfig make menuconfig # voir la doc pour les options à activer ou désactiver make make modules_install cp -iv arch/x86_64/boot/bzImage /boot/vmlinuz-5.5.3-lfs-9.1-systemd cp -iv System.map /boot/System.map-5.5.3 cp -iv .config /boot/config-5.5.3 install -v -m755 -d /etc/modprobe.d cat > /etc/modprobe.d/usb.conf << "EOF" # Début de /etc/modprobe.d/usb.conf install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true # Fin de /etc/modprobe.d/usb.conf EOF ==== Utiliser GRUB pour paramétrer le processus de démarrage ==== Ajouter, sur le système hôte, dans ''/boot/grub/grub.cfg'': menuentry "GNU/Linux, Linux 5.5.3-lfs-9.1-systemd" { insmod ext2 set root=(hd0,2) # pour sda2 linux /boot/vmlinuz-5.5.3-lfs-9.1-systemd root=/dev/sda2 ro } ==== Fin ==== echo 9.1-systemd > /etc/lfs-release cat > /etc/lsb-release << "EOF" DISTRIB_ID="Linux From Scratch" DISTRIB_RELEASE="9.1-systemd" DISTRIB_CODENAME="" DISTRIB_DESCRIPTION="Linux From Scratch" EOF cat > /etc/os-release << "EOF" NAME="Linux From Scratch" VERSION="9.1-systemd" ID=lfs PRETTY_NAME="Linux From Scratch 9.1-systemd" VERSION_CODENAME="" EOF ==== Redémarrer le système ==== logout reboot