LFS: Masuk chroot
Sekarang setelah semua package penting untuk membangun tool yang dibutuhkan sudah terpasang di sistem, waktunya masuk ke chroot environment. Ini adalah langkah penting karena di sinilah kita akan benar-benar “hidup” di dalam sistem LFS yang baru—yang saat ini hanya berisi tool sementara hasil build sebelumnya. Tujuannya agar kita tidak lagi tergantung pada sistem host. Semua build selanjutnya—baik toolchain final, library, sampai aplikasi utama—akan dilakukan seolah-olah kita sedang menggunakan sistem LFS itu sendiri, bukan lagi sistem host.
chroot "$LFS" /usr/bin/env -i \
HOME=/root \
TERM="$TERM" \
PS1='(lfs chroot) \u:\w\$ ' \
PATH=/usr/bin:/usr/sbin \
MAKEFLAGS="-j$(nproc)" \
TESTSUITEFLAGS="-j$(nproc)" \
/bin/bash --login
Directories
Buat Root-level directories
mkdir -pv /{boot,home,mnt,opt,srv}
Root-level subdirectories
mkdir -pv /etc/{opt,sysconfig}
mkdir -pv /lib/firmware
mkdir -pv /media/{floppy,cdrom}
mkdir -pv /usr/{,local/}{include,src}
mkdir -pv /usr/lib/locale
mkdir -pv /usr/local/{bin,lib,sbin}
mkdir -pv /usr/{,local/}share/{color,dict,doc,info,locale,man}
mkdir -pv /usr/{,local/}share/{misc,terminfo,zoneinfo}
mkdir -pv /usr/{,local/}share/man/man{1..8}
mkdir -pv /var/{cache,local,log,mail,opt,spool}
mkdir -pv /var/lib/{color,misc,locate}
ln -sfv /run /var/run
ln -sfv /run/lock /var/lock
install -dv -m 0750 /root
install -dv -m 1777 /tmp /var/tmp
Essential Files & Symlinks
Zaman dulu, Linux menyimpan daftar file system yang lagi di-mount di file biasa: /etc/mtab.
Tapi sekarang, kernel Linux modern sudah lebih canggih — dia menyimpan info itu langsung di memori,
dan memberi aksesnya ke user lewat virtual file system /proc, tepatnya di /proc/self/mounts.
Masalahnya beberapa aplikasi atau utilitas lama masih mengira info mount itu ada di /etc/mtab.
Agar tidak menyebabkan error dan tetap kompatibel, kita perlu membuat symbolic link dari /etc/mtab ke /proc/self/mounts.
ln -sv /proc/self/mounts /etc/mtab
lalu buat /etc/hosts
cat > /etc/hosts << "EOF"
127.0.0.1 localhost
::1 localhost
EOF
agar root bisa login dan dikenali sistem, buat file /etc/passwd dan /etc/group
cat > /etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/dev/null:/usr/bin/false
daemon:x:6:6:Daemon User:/dev/null:/usr/bin/false
messagebus:x:18:18:D-Bus Message Daemon User:/run/dbus:/usr/bin/false
uuidd:x:80:80:UUID Generation Daemon User:/dev/null:/usr/bin/false
nobody:x:65534:65534:Unprivileged User:/dev/null:/usr/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:
cdrom:x:15:
adm:x:16:
messagebus:x:18:
input:x:24:
mail:x:34:
kvm:x:61:
uuidd:x:80:
wheel:x:97:
users:x:999:
nogroup:x:65534:
EOF
Grup-grup yang dibuat saat setup LFS tidak berasal dari standar resmi, melainkan hasil kompromi antara kebutuhan praktis dari konfigurasi seperti Udev (pengelola device nodes di /dev), dan kebiasaan umum dari banyak distro Linux. Sebagian test suite dan program juga kadang mengharapkan adanya grup atau user tertentu agar bisa berjalan dengan benar. Maka dibuatlah grup-grup seperti tty, audio, disk, nogroup, dan sebagainya. Meski begitu:
- Satu-satunya grup yang direkomendasikan oleh standar LSB (Linux Standard Base) adalah:
- root (GID: 0)
- bin (GID: 1)
- GID 5 banyak digunakan untuk grup tty dan juga digunakan dalam mounting devpts (yang dipakai untuk terminal virtual).
- GID 65534 (alias user ID dan group ID 65534) dipakai oleh kernel untuk user dan grup yang "tidak dikenal" secara lokal, terutama dalam konteks NFS atau user namespace. Di LFS, kita beri nama nobody/nogroup agar ID ini tidak menggantung tanpa identitas.
- Di sistem yang kompleks, GID dan UID yang tidak diberi nama bisa menyebabkan masalah seperti error permission yang sulit dilacak.
echo "tester:x:101:101::/home/tester:/bin/bash" >> /etc/passwd
echo "tester:x:101:" >> /etc/group
install -o tester -d /home/tester
untuk menghapus prompt 'I have no name!'
exec /usr/bin/bash --login
Beberapa program penting seperti login, agetty, dan init membutuhkan file log tertentu untuk mencatat aktivitas sistem, misalnya siapa yang login dan kapan login terjadi. File-file log ini tidak akan dibuat otomatis oleh program-program tersebut—jadi, harus diinisialisasi terlebih dahulu secara manual saat setup sistem baru seperti Linux From Scratch (LFS).
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
Temporary Tools
gettext-0.24
./configure --disable-shared
make
cp -v gettext-tools/src/{msgfmt,msgmerge,xgettext} /usr/bin
bison-3.8.2
./configure --prefix=/usr \
--docdir=/usr/share/doc/bison-3.8.2
make
make install
perl-5.40.2
sh Configure -des \
-D prefix=/usr \
-D vendorprefix=/usr \
-D useshrplib \
-D privlib=/usr/lib/perl5/5.40/core_perl \
-D archlib=/usr/lib/perl5/5.40/core_perl \
-D sitelib=/usr/lib/perl5/5.40/site_perl \
-D sitearch=/usr/lib/perl5/5.40/site_perl \
-D vendorlib=/usr/lib/perl5/5.40/vendor_perl \
-D vendorarch=/usr/lib/perl5/5.40/vendor_perl
make
make install
python-3.13.3
./configure --prefix=/usr \
--enable-shared \
--without-ensurepip
make
make install
texinfo-7.2
./configure --prefix=/usr
make
make install
util-linux-2.41
mkdir -pv /var/lib/hwclock
./configure --libdir=/usr/lib \
--runstatedir=/run \
--disable-chfn-chsh \
--disable-login \
--disable-nologin \
--disable-su \
--disable-setpriv \
--disable-runuser \
--disable-pylibmount \
--disable-static \
--disable-liblastlog2 \
--without-python \
ADJTIME_PATH=/var/lib/hwclock/adjtime \
--docdir=/usr/share/doc/util-linux-2.41
make
make install
Cleaning & Backup
Delete documentations files
rm -rf /usr/share/{info,man,doc}/*
Delete .la files. File ini tidak dibutuhkan di Linux modern
find /usr/{lib,libexec} -name \*.la -delete
delete folder /tools, folder ini sudah tidak dibutuhkan
rm -rf /tools
Backup
Pertama-tama keluar dulu dari chroot dengan command exit lalu buat lagi variable $LFS dengan export LFS=/mnt/lfs
Setelah itu unmnout virtual file systems
mountpoint -q $LFS/dev/shm && umount $LFS/dev/shm
umount $LFS/dev/pts
umount $LFS/{sys,proc,run,dev}
Buat Backup
cd $LFS
tar -cJpf $HOME/lfs-temp-tools-r12.3-36.tar.xz .
Restore
Kalau mau restore jika ada kesalahan pada tahap-tahap berikutnya. Ingat, jangan asal pakai rm -rf
cd $LFS
rm -rf ./*
tar -xpf $HOME/lfs-temp-tools-r12.3-36.tar.xz