Table of Contents
Initram: LAB3 - construction d'un système de secours avec busybox
| Objet | Construction d'un INITRAM rescue |
|---|---|
| Niveau requis | débutant, avisé |
| Débutant, à savoir | |
| Suivi | :DONE: |
Préparation du rootfs
Construire l'environnement de build
export CLFS="/var/lfs/rescue-busybox"
mkdir -pv ${CLFS}/{rootfs,_src,_pkg}
Charger la structure de répertoire de rootfs
Charger la structure du répertoire rootfs avec l'image de base créée dans le LAB1.
cd ${CLFS}/rootfs
zcat /var/lfs/x86-busybox/rootfs.gz | cpio -idmv --no-absolute-filenames
Installation et système rescue
BusyBox regroupe des versions minuscules de nombreux utilitaires UNIX dans un seul et même petit exécutable, qui fournit des remplacements minimalistes pour la plupart des utilitaires que l'on trouve habituellement dans GNU coreutils, util-linux, etc. Cependant, pour les les options non incluses il faut installer leurs homologues GNU.
util-linux-2.24.1
Le paquet Util-linux contient divers utilitaires, notamment des utilitaires permettant de gérer les systèmes de fichiers, les consoles, les partitions et les messages.
cd ${CLFS}/_src
wget https://mirror.tochlab.net/pub/lfs/lfs-packages/7.5/util-linux-2.24.1.tar.xz
tar -xf util-linux-2.24.1.tar.xz
cd util-linux-2.24.1
./configure
make
make DESTDIR=$PWD/_pkg install
strip -v _pkg/sbin/raw
cp -av _pkg/sbin/raw ${CLFS}/rootfs
cd ${CLFS}
Coreutils-8.31
Le paquet Coreutils contient des outils pour afficher et configurer les caractéristiques basiques d'un système.
cd ${CLFS}/_src
wget http://ftp.gnu.org/gnu/coreutils/coreutils-8.31.tar.xz
wget http://www.linuxfromscratch.org/patches/lfs/9.0/coreutils-8.31-i18n-1.patch
tar -xvf coreutils-8.31.tar.xz
cd 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 DESTDIR=$PWD/_pkg install
strip -v _pkg/usr/bin/{chroot,dir,du,install}
cp -av _pkg/usr/bin/{chroot,dir,du,install} ${CLFS}/rootfs/usr/bin
cd ${CLFS}
LVM2.2.02.177
Le package LVM2 est un ensemble d’outils permettant de gérer les partitions logiques, qui permet d’étendre les systèmes de fichiers sur plusieurs disques physiques et partitions, et de faire croître ou réduire de manière dynamique les partitions logiques, la mise en miroir et les instantanés à faible encombrement de stockage.
cd ${CLFS}/_src
wget https://sourceware.org/ftp/lvm2/releases/LVM2.2.02.177.tgz
tar -xvzf LVM2.2.02.177.tgz
cd LVM2.2.02.177
./configure --prefix=/usr \
--exec-prefix= \
--with-confdir=/etc \
--enable-applib \
--enable-cmdlib \
--enable-pkgconfig
make
make DESTDIR=$PWD/_pkg install
strip -v _pkg/usr/lib/*
strip -v _pkg/sbin/*
strip -v _pkg/lib/*
cp -av _pkg/* ${CLFS}/rootfs
cd ${CLFS}
xfsprogs-5.2.1
Le paquet xfsprogs contient des outils d'administration et de débogage pour le système de fichier XFS.
cd ${CLFS}/_src
wget https://www.kernel.org/pub/linux/utils/fs/xfs/xfsprogs/xfsprogs-5.2.1.tar.xz
tar -xvf xfsprogs-5.2.1.tar.xz
cd xfsprogs-5.2.1
make DEBUG=-DNDEBUG \
INSTALL_USER=root \
INSTALL_GROUP=root \
LOCAL_CONFIGURE_OPTIONS="--enable-readline"
make PKG_DOC_DIR=/usr/share/doc/xfsprogs-5.2.1 DESTDIR=$PWD/_pkg install
make PKG_DOC_DIR=/usr/share/doc/xfsprogs-5.2.1 DESTDIR=$PWD/_pkg install-dev
rm -rfv _pkg/usr/lib64/libhandle.a
rm -rfv _pkg/lib64/libhandle.{a,la,so}
ln -sfv _pkg/lib64/libhandle.so.1 _pkg/usr/lib64/libhandle.so
sed -i "s@libdir='/lib@libdir='/usr/lib@" _pkg/usr/lib64/libhandle.la
strip -v _pkg/usr/sbin/*
strip -v _pkg/usr/lib/*
strip -v _pkg/usr/lib64/*
strip -v _pkg/lib64/*
cp -av _pkg/* ${CLFS}/rootfs
cd ${CLFS}
GRUB-2.04
Si, pour une raison quelconque, les 448 premiers octets sont écrasés, CentOS ou Red Hat Enterprise Linux ne peuvent être chargés que si on démarre en mode de secours et que l'on réinstalle le chargeur d'amorçage MBR GRUB.
cd ${CLFS}/_src
wget https://ftp.gnu.org/gnu/grub/grub-2.04.tar.xz
tar -xvf grub-2.04.tar.xz
cd grub-2.04
./configure --prefix=/usr \
--sbindir=/sbin \
--sysconfdir=/etc \
--disable-efiemu \
--disable-werror
make
make DESTDIR=$PWD/_pkg install
cp -av _pkg/* ${CLFS}/rootfs
cd ${CLFS}
cURL-7.66.0
Le package cURL contient un utilitaire et une bibliothèque utilisés pour transférer des fichiers avec la syntaxe URL vers l’un des protocoles suivants: FTP, FTPS, HTTP, HTTPS, SCP, SFTP, TFTP, TELNET, DICT, LDAP, LDAPS et FILE. Les fichiers téléchargés et téléchargés peuvent être incorporés dans d'autres programmes pour prendre en charge des fonctions telles que la diffusion multimédia en continu.
cd ${CLFS}/_src
wget https://curl.haxx.se/download/curl-7.66.0.tar.xz
tar -xvf curl-7.66.0.tar.xz
cd curl-7.66.0
./configure --prefix=/usr \
--disable-static \
--enable-threaded-resolver \
--with-ca-path=/etc/ssl/certs
make
make DESTDIR=$PWD/_pkg install
strip -v _pkg/usr/lib/*
strip -v _pkg/usr/bin/*
cp -av _pkg/* ${CLFS}/rootfs
cd ${CLFS}
Faire un ldd sur le binaire créé
ldd _pkg/usr/bin/curl linux-vdso.so.1 => (0x00007ffe82fb9000) libcurl.so.4 => /lib64/libcurl.so.4 (0x00007fea6a9f7000) libssl.so.10 => /lib64/libssl.so.10 (0x00007fea6a785000) libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00007fea6a322000) libz.so.1 => /lib64/libz.so.1 (0x00007fea6a10c000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fea69ef0000) libc.so.6 => /lib64/libc.so.6 (0x00007fea69b22000) libidn.so.11 => /lib64/libidn.so.11 (0x00007fea698ef000) libssh2.so.1 => /lib64/libssh2.so.1 (0x00007fea696c5000) libssl3.so => /lib64/libssl3.so (0x00007fea69472000) libsmime3.so => /lib64/libsmime3.so (0x00007fea6924b000) libnss3.so => /lib64/libnss3.so (0x00007fea68f1e000) libnssutil3.so => /lib64/libnssutil3.so (0x00007fea68ced000) libplds4.so => /lib64/libplds4.so (0x00007fea68ae9000) libplc4.so => /lib64/libplc4.so (0x00007fea688e4000) libnspr4.so => /lib64/libnspr4.so (0x00007fea686a5000) libdl.so.2 => /lib64/libdl.so.2 (0x00007fea684a1000) libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007fea68254000) libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007fea67f6a000) libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007fea67d37000) libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007fea67b33000) liblber-2.4.so.2 => /lib64/liblber-2.4.so.2 (0x00007fea67923000) libldap-2.4.so.2 => /lib64/libldap-2.4.so.2 (0x00007fea676d0000) /lib64/ld-linux-x86-64.so.2 (0x00007fea6ac73000) librt.so.1 => /lib64/librt.so.1 (0x00007fea674c7000) libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007fea672b7000) libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007fea670b3000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fea66e99000) libsasl2.so.3 => /lib64/libsasl2.so.3 (0x00007fea66c7c000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fea66a54000) libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007fea6681d000) libpcre.so.1 => /lib64/libpcre.so.1 (0x00007fea665bb000) libfreebl3.so => /lib64/libfreebl3.so (0x00007fea663b7000)
Copier les librairies si nécessaire
cp -anLf /lib64/{libcurl.so.4,libssl.so.10,libcrypto.so.10,libz.so.1,libpthread.so.0,libc.so.6,libidn.so.11,libssh2.so.1,libssl3.so,libsmime3.so,libnss3.so,libnssutil3.so,libplds4.so,libplc4.so,libnspr4.so,libdl.so.2,libgssapi_krb5.so.2,libkrb5.so.3,libk5crypto.so.3,libcom_err.so.2,liblber-2.4.so.2,libldap-2.4.so.2,ld-linux-x86-64.so.2,librt.so.1,libkrb5support.so.0,libkeyutils.so.1,libresolv.so.2,libsasl2.so.3,libselinux.so.1,libcrypt.so.1,libpcre.so.1,libfreebl3.so} ${CLFS}/rootfs/lib64/
