====== 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