alfs学习笔记-自动化构建lfs系统
一名linux愛好者,記錄構(gòu)建Linux From Scratch的過程
經(jīng)博客園-駿馬金龍前輩介紹,開始接觸學(xué)習(xí)lfs,用博客記錄學(xué)習(xí)筆記,如有寫的不恰當(dāng)?shù)牡胤?#xff0c;望多多指正。
筆記中只是記錄一些問題和書中表述不清晰的內(nèi)容的處理辦法以及我的解決思路,僅做參考。
要實際構(gòu)建lfs請結(jié)合lfs官方的書籍操作
一.lfs系列概述
1.lfs:Linux From Scratch(LFS)是一個項目,為您提供完全從源代碼構(gòu)建自己的自定義Linux系統(tǒng)的分步說明
2.blfs:Beyond?Linux From Scratch(BLFS)是一個繼續(xù)LFS書籍完成的項目。它通過提供在基本LFS系統(tǒng)之上安裝和配置各種軟件包的廣泛說明,幫助用戶根據(jù)需要開發(fā)系統(tǒng)。
3.alfs:Automated Linux From Scratch?(ALFS)是一個為可擴(kuò)展系統(tǒng)構(gòu)建器和程序包安裝程序創(chuàng)建通用框架的項目。(自動化創(chuàng)建LFS系統(tǒng)的過程)
4.clfs:Cross Linux From Scratch(CLFS)是一個使用其他架構(gòu)從源代碼構(gòu)建自己的定制Linux系統(tǒng)的分步說明
5.hlfs:Hardened Linux From Scratch (HLFS)是一個為您提供從源完全構(gòu)建您自己的定制和強(qiáng)化Linux系統(tǒng)的分步說明?;贚FS,該項目還將包含BLFS的部分內(nèi)容。與這些其他項目的主要區(qū)別在于處理安全配置問題的文本數(shù)量,以及修補或替換許多用于提高安全性的軟件包。
6.livecd:LFS LiveCD專門用于提供可靠的主機(jī)系統(tǒng),以便構(gòu)建Linux From Scratch。因此,它可能不是您想象的“完美”Linux系統(tǒng)。但是,它應(yīng)該為您提供足夠舒適的環(huán)境,以便您可以反過來建立自己的“完美”系統(tǒng)
二.lfs版本說明
1.lfs系列每本書籍都有兩個版本
一個版本是安裝并使用systemv的版本
另一個版本是安裝并使用systemd的版本
本篇筆記使用的是systemd版本書籍。
三.構(gòu)建過程中使用到的網(wǎng)站
1.lfs書籍原版(英文)下載鏈接:http://www.linuxfromscratch.org/lfs/downloads/stable-systemd/LFS-BOOK-8.4-systemd.tar.bz2
2.文件鏡像網(wǎng)站匯總:http://www.linuxfromscratch.org/mirrors.html
四.使用的機(jī)器信息,系統(tǒng)信息,書籍信息
1.使用的機(jī)器型號:Thinkpad-L450
2.使用過的主機(jī)操作系統(tǒng):deepin-15.9
3.使用lfs書籍版本lfs-book-8.4-systemd(官網(wǎng)英文版)
五.前期準(zhǔn)備工作
書中第2.2章節(jié)
1.具體操作:
將書中提供的命令復(fù)制到終端(命令行)運行測試,并把得出結(jié)果與2.2章節(jié)所提供的軟件版本鏈接類型進(jìn)行核對,核對無誤后可刪除創(chuàng)建的驗證文件。
2.所遇到過的問題與解決方案:
1.有部分軟件包未找到,按照錯誤提示的名字安裝對應(yīng)的軟件包
2.未檢測到/usr/bin/yacc是bison或執(zhí)行bison的小腳本的鏈接
解決辦法:
#ln -s /usr/bin/bison /usr/bin/yacc (建立鏈接)類似問題解決思路:檢查缺失鏈接的軟件包是否安裝,如果都已經(jīng)安裝,則手動建立軟鏈接:
3./bin/sh的鏈接不是bash而是dash
執(zhí)行如下命令并選擇否
#dpkg-reconfigure dash書中第2.3章節(jié)
注意:
如果不能做到在不關(guān)機(jī)的情況下一次性構(gòu)建完lfs,請仔細(xì)閱讀本節(jié)內(nèi)容
1.具體操作:
第1-4章節(jié)
每次重新啟動后創(chuàng)建環(huán)境變量:
第5章節(jié)
1.設(shè)置變量
2.掛載為lfs創(chuàng)建的所有分區(qū)
3.切換到lfs用戶,進(jìn)行下一步的操作。4.提示對軟件包編譯過程中出現(xiàn)解決不了的操作失誤,首先刪除所解壓的軟件包目錄,重新解壓軟件包,切入目錄,按該軟件包書籍頁操作說明重新進(jìn)行編譯。
第6-8章節(jié)
1.進(jìn)入root用戶
2.設(shè)置變量
3.掛載你為lfs創(chuàng)建的所有分區(qū)
4.逐步完成6.2.2與6.2.3章節(jié)內(nèi)容后
5.chroot進(jìn)入lfs分區(qū)繼續(xù)操作。
書中第2.4章節(jié)
1.本章節(jié)開始所有操作切換為root用戶,命令如下
su2.為lfs創(chuàng)建新的分區(qū),列出我的分區(qū)方案
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 465.8G 0 disk ├─sda9 8:9 0 100M 0 part /mnt/lfs/boot ├─sda10 8:10 0 50G 0 part /mnt/lfs ├─sda11 8:11 0 40G 0 part /mnt/lfs/home └─sda12 8:12 0 1G 0 part [SWAP]?3.注意事項:
1.分區(qū)使用的命令 cfdisk或fdisk
2.boot建議單獨分區(qū)。建議分100M。
3./分區(qū)必須創(chuàng)建,根據(jù)機(jī)器情況自行分配大小(官方建議最小分20G)。
4.home建議單獨分區(qū),大小按需分配即可。
5.swap可以與主機(jī)系統(tǒng)用同一個swap分區(qū),也可以單獨分區(qū)。
書中第2.5章節(jié)
1.創(chuàng)建文件系統(tǒng)(只介紹常用的ext4格式類型)
2.除了swap分區(qū)以外的分區(qū),使用如下命令格式化:
3.swap分區(qū)如果是新分區(qū)則使用如下命令格式化:
#mkswap /dev/<yyy>(替換<xxx>和<yyy>為分區(qū)的名稱)?書中第2.6章節(jié)
1.設(shè)置lfs變量,運行的命令及作用:
export LFS=/mnt/lfs(使用$LFS代替輸入/mnt/lfs目錄,每次關(guān)閉機(jī)器或終端都需要重新設(shè)置)? echo $LFS(輸出$LFS變量的內(nèi)容,確保輸出為:/mnt/lfs)2.本章節(jié)書籍中的下文內(nèi)容介紹如何設(shè)置開機(jī)運行變量,不建議此項設(shè)置。
3.變量設(shè)置在每次重啟機(jī)器或者重啟終端時都需要重新設(shè)置,詳細(xì)參考2.3章節(jié)的筆記
書中第2.7章節(jié)
掛載分區(qū)
使用的命令及作用:
書中本章節(jié)中的警告內(nèi)容為如何設(shè)置開機(jī)自動掛載lfs的分區(qū)(不建議)
六.下載所需資源
1.在任意目錄下創(chuàng)建alfs目錄
mkdir alfs2.下載所需的所有軟件包
wget https://mirror-hk.koddos.net/lfs/lfs-packages/lfs-packages-8.4.tar tar -xvf lfs-packages-8.4.tar3.下載所需書籍(需要主機(jī)安裝subversion)
svn co http://svn.linuxfromscratch.org/LFS/tags/8.4/4.下載alfs所需軟件包
svn co http://svn.linuxfromscratch.org/ALFS/jhalfs/trunk jhalfs-dev七.配置jhalfs-dev
1.進(jìn)入jhalfs目錄,并打開設(shè)置頁面
cd jhalfs-dev make這里會提示缺少一些依賴,因為每臺主機(jī)所缺少的依賴不同,所以不貼出依賴了,請自行按照依賴名字安裝所需依賴
2.設(shè)置第一步,選擇所使用的書籍
BOOK Settings ---> Use BOOK (Linux From Scratch systemd) ---> Use BOOK (Linux From Scratch systemd) ---> Release (Working Copy) ---> Loc of working copy (mandatory) (/8.4)(這里更改為你放置上文下載的書籍的絕對路徑) [ ] Add blfs-tool support (NEW) [ ] Add custom tools support (NEW)3.設(shè)置第二步,選擇所使用的軟件包,和安裝位置
General Settings --->Build Directory (/mnt/lfs) (修改為上文修改的安裝目錄建議使用官方的lfs目錄) [*] Retrieve source files Package Archive Directory (/ruanjianbaomulu)(修改為上文下載的軟件包的解壓目錄的絕對路徑) [ ] Retry on 'connection refused' failure (NEW) Number of retry attempts on download failures (20) (NEW) Download timeout (in seconds) (30) (NEW) FTP mirror (http://ftp.osuosl.org) (NEW) [ ] Run the makefile (NEW) [*] Rebuild files4.設(shè)置第三步,構(gòu)建設(shè)置
Build Settings --->[*] Run testsuites (NEW) Test settings ---> [ ] Package management (NEW) [*] Create a log of installed files for each package [*] Strip Installed Binaries/Libraries [*] Remove libtool .la files (NEW) [ ] DO NOT use/display progress_bar (NEW)5.設(shè)置第四步,系統(tǒng)服務(wù)設(shè)置
System configuration --->[ ] Use a custom fstab file (NEW) [ ] Build the kernel (NEW) [ ] Install vim-lang package (NEW) TimeZone (Asia/Shanghai) Language (en_US.UTF-8) [*] Install the full set of locales(如果會修改腳本,請取消這個選項,自行修改腳本安裝語言環(huán)境)Groff page size (A4) --->Hostname (see help) (ZHUJIMINGZI)Network configuration --->Console configuration --->
6.確定操作,創(chuàng)建構(gòu)建文件,修改構(gòu)建腳本
選擇exit后選擇yes后輸入yes,開始創(chuàng)建構(gòu)建文件
創(chuàng)建完后進(jìn)入構(gòu)建文件目錄按照自己的配置要求修改腳本(這一步如果懂腳本的自行修改,不懂的不要修改)
7.創(chuàng)建構(gòu)建用戶,并給sudo權(quán)限
useradd -m jhalfs_user passwd jhalfs_user visudo 再打開的文件內(nèi)加入jhalfs_user ALL=(ALL)ALL
su - ?jhalfs_user
8.開始安裝
make -C /mnt/build_dir/jhalfs(這個目錄修改為上文選擇的安裝目錄)安裝過程需要輸入三次密碼,分別是:開始構(gòu)建時,構(gòu)建完工具鏈后,構(gòu)建完所有軟件包后,
八.自動化構(gòu)建完后需要的配置
1.掛載并進(jìn)入系統(tǒng)
具體方法,參照我以前的筆記:https://www.cnblogs.com/renren-study-notes/p/10204516.html
2.設(shè)置root的密碼
passwd3.刪除本機(jī)創(chuàng)建的用戶
userdel -r jhalfs_user4.修改/etc/fstab文件
更改為lfs所創(chuàng)建的分區(qū)到相應(yīng)位置即可(這個文件是配置lfs開機(jī)自動掛載的分區(qū))cat > /etc/fstab << "EOF" # Begin /etc/fstab# file system mount-point type options dump fsck # order/dev/<xxx> / <fff> defaults 1 1 /dev/<yyy> swap swap pri=1 0 0# End /etc/fstabEOF5.引導(dǎo)時禁用屏幕清除
mkdir -pv /etc/systemd/system/getty@tty1.service.dcat > /etc/systemd/system/getty@tty1.service.d/noclear.conf << EOF [Service] TTYVTDisallocate=no EOF6.禁用/ tmp的tmpfs
ln -sfv /dev/null /etc/systemd/system/tmp.mount7.如果電腦上面是多系統(tǒng),并且有windows系統(tǒng),就不要使用系統(tǒng)硬件時間作為系統(tǒng)時間(會有時差)。如果沒有windows系統(tǒng)不需要更改。具體內(nèi)容參見:我的linux時間綜述筆記地址:https://www.cnblogs.com/renren-study-notes/p/10229743.html
硬件時間設(shè)置為本地時間
cat > /etc/adjtime << "EOF" 0.0 0 0.0 0 LOCAL EOF8.編譯安裝內(nèi)核
(1)首先進(jìn)入sources目錄
cd /sources(2)解壓內(nèi)核文件壓縮包
tar -xvf linux-4.18.5.tar.xz(3)進(jìn)入內(nèi)核包目錄
cd linux-4.18.5(4)準(zhǔn)備編譯
make mrproper(5)設(shè)置默認(rèn)內(nèi)核配置狀態(tài)
make defconfig(6)設(shè)置內(nèi)核也可以通過修改.config文件來進(jìn)行設(shè)置
make menuconfig(7)設(shè)置書中提供的以下選項
General setup -->[ ] Enable deprecated sysfs features to support old userspace tools [CONFIG_SYSFS_DEPRECATED][ ] Enable deprecated sysfs features by default [CONFIG_SYSFS_DEPRECATED_V2][*] open by fhandle syscalls [CONFIG_FHANDLE][ ] Auditing support [CONFIG_AUDIT][*] Control Group support [CONFIG_CGROUPS] Processor type and features --->[*] Enable seccomp to safely compute untrusted bytecode [CONFIG_SECCOMP] Networking support --->Networking options ---><*> The IPv6 protocol [CONFIG_IPV6] Device Drivers --->Generic Driver Options --->[ ] Support for uevent helper [CONFIG_UEVENT_HELPER][*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS][ ] Fallback user-helper invocation for firmware loading [CONFIG_FW_LOADER_USER_HELPER] Firmware Drivers --->[*] Export DMI identification via sysfs to userspace [CONFIG_DMIID] File systems --->[*] Inotify support for userspace [CONFIG_INOTIFY_USER]<*> Kernel automounter version 4 support (also supports v3) [CONFIG_AUTOFS4_FS]Pseudo filesystems --->[*] Tmpfs POSIX Access Control Lists [CONFIG_TMPFS_POSIX_ACL][*] Tmpfs extended attributes [CONFIG_TMPFS_XATTR] Kernel hacking --->Choose kernel unwinder (Frame pointer unwinder) ---> [CONFIG_UNWINDER_FRAME_POINTER](8)如果您的主機(jī)硬件使用UEFI,請自行添加此項設(shè)置
Processor type and features --->[*] EFI stub support [CONFIG_EFI_STUB](9)設(shè)置調(diào)整完保存退出即可
(10)編譯內(nèi)核映像和模塊
make -j8(11)安裝配置模塊
make modules_install(12)復(fù)制一些內(nèi)核的啟動文件到boot分區(qū)
cp -iv arch/x86/boot/bzImage /boot/vmlinuz-4.18.5-lfs-8.3-systemdcp -iv System.map /boot/System.map-4.18.5cp -iv .config /boot/config-4.18.5(13)安裝Linux內(nèi)核的文檔:
install -d /usr/share/doc/linux-4.18.5 cp -r Documentation/* /usr/share/doc/linux-4.18.5(14)配置linux模塊加載順序
install -v -m755 -d /etc/modprobe.d cat > /etc/modprobe.d/usb.conf << "EOF" # Begin /etc/modprobe.d/usb.confinstall 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# End /etc/modprobe.d/usb.conf EOF(15)返回sources目錄并刪除包目錄
cd $LFS/sourcesrm -rf linux-4.18.59.安裝配置grub引導(dǎo)
(1)安裝grub引導(dǎo)到MBR
grub-install /dev/sda(2)創(chuàng)建grub配置文件
cat > /boot/grub/grub.cfg << "EOF" # Begin /boot/grub/grub.cfg set default=0 set timeout=5insmod ext2 set root=(hd0,2) 括號里面更改為你所安裝lfs的分區(qū)或boot分區(qū) 例如/dev/sda2為(hd0,2)menuentry "GNU/Linux, Linux 4.18.5-lfs-8.3" {linux /boot/vmlinuz-4.18.5-lfs-8.3 root=/dev/sda2 ro(這里的/dev/sda2更改為你所安裝lfs的分區(qū)號 例如/dev/sda2) } (如果boot單獨分區(qū),則把這里的/boot刪除。) EOF多系統(tǒng)引導(dǎo)文件示例:
cat > /boot/grub/grub.cfg << "EOF" # Begin /boot/grub/grub.cfg set default=0 set timeout=5menuentry "GNU/Linux, Linux 4.18.5-lfs-8.3" {insmod ext2set root=(hd0,5)linux /vmlinuz-4.18.5-lfs-8.3 root=/dev/sda6 ro } menuentry 'Manjaro Linux'{insmod ext2set root='hd0,msdos9'linux /vmlinuz-4.19-x86_64 root=/dev/sda10 roinitrd /intel-ucode.img /initramfs-4.19-x86_64.img } menuentry 'Windows 7 (on /dev/sda1)'{insmod ntfsset root='hd0,msdos1'chainloader +1 } EOF10.設(shè)置系統(tǒng)版本及版本號
cat > /etc/os-release << "EOF" NAME="Linux From Scratch" VERSION="8.3-systemd" ID=lfs PRETTY_NAME="Linux From Scratch 8.3-systemd" VERSION_CODENAME="<your name here>"(括號里改為自己起的名字) EOF echo 8.3-systemd > /etc/lfs-release cat > /etc/lsb-release << "EOF" DISTRIB_ID="Linux From Scratch" DISTRIB_RELEASE="8.3-systemd" DISTRIB_CODENAME="<your name here>"(括號里改為自己起的名字) DISTRIB_DESCRIPTION="Linux From Scratch" EOF11.修改網(wǎng)絡(luò)配置
1.刪除靜態(tài)ip文件和/etc/resolv.conf文件
rm -rf /etc/resolv.conf rm -rf /etc/systemd/network/10-eth-static.network2.新建resolv.conf文件和hosts文件
cat > /etc/resolv.conf << "EOF" # Begin /etc/resolv.confdomain <Your Domain Name> nameserver 8.8.8.8 nameserver 8.8.4.4# End /etc/resolv.conf EOF cat > /etc/hosts << "EOF" # Begin /etc/hosts127.0.0.1 localhost 127.0.1.1 <FQDN> <HOSTNAME> ::1 localhost ip6-localhost ip6-loopback ff02::1 ip6-allnodes ff02::2 ip6-allrouters# End /etc/hosts EOF12.運行下面的命令,退出chroot,卸載lfs的分區(qū)
exitumount -v $LFS/dev/pts umount -v $LFS/dev umount -v $LFS/run umount -v $LFS/proc umount -v $LFS/sysumount -v $LFSumount -v $LFS/usr umount -v $LFS/home umount -v $LFS重啟進(jìn)入lfs系統(tǒng)
reboot附錄
如果需要本機(jī)的grub引導(dǎo)lfs則在root用戶下運行以下命令創(chuàng)建lfs的引導(dǎo)項
需要安裝os-prober軟件包,并掛載lfs的分區(qū),在運行下面命令,添加lfs的啟動項
grub-mkconfig -o /boot/grub/grub.cfg確定添加完lfs引導(dǎo)項后,重啟機(jī)器進(jìn)入lfs選項,即可進(jìn)入lfs操作系統(tǒng)。
轉(zhuǎn)載于:https://www.cnblogs.com/renren-study-notes/p/10508612.html
《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的alfs学习笔记-自动化构建lfs系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Codeforces 868F Yet
- 下一篇: servelet基础