Khởi động hệ thống LFS
Trong tài liệu LFS, phương pháp khởi động được đề cập là gắn phân vùng BOOT của máy chủ vào vị trí BOOT của LFS. Mặc dù cách này có thể hoạt động, nhưng tôi không muốn sử dụng phương pháp này, điều này khiến quá trình khởi động trở nên phức tạp. Các thách thức chính bao gồm:
- Ghi lại bộ ghi dẫn MBR.
- Tạo tệp hệ thống rootfs cho initramfs.
- Cấu tệp grub.cfg.
Lưu ý: Dù đã liệt kê các vấn đề trên, thứ tự thực hiện các thao tác cũng rất quan trọng.
1. Ghi lại bộ ghi dẫn MBR
Đầu tiên, chúng ta cần biết rằng LFS hiện tại được gắn vào /dev/sdb hoặc /dev/hdb, với ổ đĩa máy chủ chiếm vị trí đĩa đầu tiên. Để hệ thống có thể khởi động trên các nền tảng mới, chúng ta có thể sử dụng DVD để triển khai bộ ghi dẫn MBR. Đầu tiên, tạo một máy ảo mới, nhập đĩa ảo vào máy ảo này, sau đó sử dụng chế độ cứu hộ khẩn cấp từ đĩa DVD CentOS để hoàn thành thao tác.
Mở nguồn và vào firmware, sau đó di chuyển CD-ROM Drive lên vị trí đầu tiên trong Boot. Lưu và khởi động lại. Chọn Troubleshooting, sau đó chọn Rescue a CentOS system để kích hoạt chế độ cứu hộ khẩn cấp. Chờ hệ thống tải xong, sau đó bỏ qua và vào giao diện shell.
mount /dev/sda2 /mnt/sysimage
mount /dev/sda1 /mnt/sysimage/boot
mount -vt proc proc /mnt/sysimage/proc
mount -vt sysfs sysfs /mnt/sysimage/sys
mount -v -o bind /dev /mnt/sysimage/dev
chroot /mnt/sysimage
source /etc/profile
Bằng cách này, chúng ta sử dụng hệ thống từ CDROM để vào LFS và thực hiện các thao tác:
grub-install /dev/sda
2. Tạo tệp initramfs
Tại đây, tôi sẽ sử dụng phần mềm dracut để tạo tệp initramfs. Tất nhiên, initramfs cũng có thể được tạo thủ công, nhưng điều này khá phức tạp. Đầu tiên, tải xuống cài đặt:
./configure --prefix=/opt && make && make install
Quá trình cài đặt sẽ gặp lỗi do các phụ thuộc. Các phụ thuộc tôi gặp phải là:
- dracut → asciidoc → python2
- dracut → libxslt → libxml2
Tôi nhận thấy rằng sau khi báo lỗi make, hai phần mềm dracut-install và skipcpio đã được biên dịch sẵn. Các phần mềm asciidoc và libxslt đều được sử dụng để tạo tài liệu trợ giúp, mà tôi không cần, vì vậy tôi quyết định cài đặt chúng thủ công:
mkdir /usr/lib/dracut/
cp -r dracut.conf.d /usr/lib/dracut/
cp -r modules.d /usr/lib/dracut/
cp install/dracut-install /usr/lib/dracut/
cp skipcpio/skipcpio /usr/lib/dracut/
cp *.sh /usr/lib/dracut/
chmod +x /usr/lib/dracut/*.sh
Bắt đầu tạo tệp initramfs.img:
cd /usr/lib/dracut
./dracut.sh initramfs.img 4.18.1
cp initramfs.img /boot/
Để kiểm tra tệp đã tạo đầy đủ chưa:
/usr/lib/dracut/lsinitrd.sh initramfs.img
3. Cấu hình tệp grub.cfg
grub-mkconfig -o /boot/grub/grub.cfg
Lệnh này sẽ tự động nhận diện hệ thống tệp và kernel, sau đó bạn có thể khởi động lại hệ thống.