lfs学习笔记(三)最终构建与配置

2019-01-02 14:13:56来源:cnblogs.com作者:仁人人点击

分享

lfs学习笔记(三)链接:https://www.cnblogs.com/renren-study-notes/p/10199381.html

一名linux爱好者,记录构建Linux From Scratch的过程

经博客园-骏马金龙前辈介绍,开始接触学习lfs,用博客记录学习笔记,如有写的不恰当的地方,望多多指正。
笔记中只是记录一些问题和书中表述不清晰的内容的处理办法以及我的解决思路,仅做参考。

要实际构建lfs请结合lfs官方的书籍操作。

Linux From Scratch(LFS)是一个项目书籍,提供完全从源代码构建自己的自定义Linux系统的分步说明。

构建过程中使用到的网站:
lfs书籍原版(英文)下载链接:http://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-8.3.tar.bz2
lfs(linux中国翻译版)下载链接:https://codeload.github.com/LCTT/LFS-BOOK/zip/8.3-translating
文件镜像网站汇总:http://www.linuxfromscratch.org/mirrors.html

使用的机器型号:Thinkpad-L450
使用主机操作系统:manjaro-xfce-18.0.1
使用lfs书籍版本lfs-book-8.3(官网英文版)

第6.7章

开始构建第一个包

第六章中构建的所有包必须进行测试。

软件构建过程:
以下以Linux API Headers包为例,其后的软件包构建过程大同小异,出现不同的选项会在后面补充,不完全贴出书中内容。
这时你的命令行或终端的环境应该是:

1.设置变量:
2.挂载你为lfs创建的所有分区
3.逐步完成6.2.2与6.2.3章节内容后

4.chroot进入lfs分区继续操作。

根据上一章节的构建要求,首先进入到/mnt/lfs/sources/sources目录

cd /sources


因为Linux API Headers在linux-4.18.5.tar.xz包中,所以解压包:

tar -xvf linux-4.18.5.tar.xz


进入解压完的软件:

cd  linux-4.18.5

 运行书中的编译说明

make mrpropermake INSTALL_HDR_PATH=dest headers_installfind dest/include /( -name .install -o -name ..install.cmd /) -deletecp -rv dest/include/* /usr/include

1.在软件包编译,测试,安装过程中出现的如下命令:

make make checkmake tests
make testmake install

在没有要求必须使用make -j1参数的情况下,make后面都可加 -j(N) 参数 提升速度

(-j [N], --jobs[=N]          同时允许 N 个任务;无参数表明允许无限个任务)
软件包编译安装完成后,书中会有一些相应的配置说明,完成这些操作说明。
运行完每书中每个软件包页最后一个命令后运行:

cd /mnt/lfs/sources(返回sources目录)rm -rf binutils-2.31.1(删除解压的软件包目录)

继续构建下一个软件包

第6.9章

glibc的配置

按照书籍安装步骤到(可以使用localedef程序安装单个语言环境)步骤

我们需要安装英文语言环境和中文语言环境

1.创建语言环境安装目录

mkdir -pv /usr/lib/locale

2.安装语言环境

localedef -i en_US -f UTF-8 en_US.UTF-8localedef -i zh_CN -f UTF-8 zh_CN.UTF-8

第6.9.22章

添加时区数据,这里我们添加亚洲/上海时区

1.安装和设置时区数据

tar -xf ../../tzdata2018e.tar.gzZONEINFO=/usr/share/zoneinfomkdir -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       -y "sh yearistype.sh" ${tz}    zic -L /dev/null   -d $ZONEINFO/posix -y "sh yearistype.sh" ${tz}    zic -L leapseconds -d $ZONEINFO/right -y "sh yearistype.sh" ${tz}donecp -v zone.tab zone1970.tab iso3166.tab $ZONEINFOzic -d $ZONEINFO -p America/New_Yorkunset ZONEINFO

2.确定时区

tzselect
Please identify a location so that time zone rules can be set correctly.Please select a continent, ocean, "coord", or "TZ". 1) Africa 2) Americas 3) Antarctica 4) Asia 5) Atlantic Ocean 6) Australia 7) Europe 8) Indian Ocean 9) Pacific Ocean10) coord - I want to use geographical coordinates.11) TZ - I want to specify the time zone using the Posix TZ format.

3.这里我们选择4亚洲

Please select a country whose clocks agree with yours. 1) Afghanistan          18) Israel            35) Palestine 2) Armenia          19) Japan            36) Philippines 3) Azerbaijan          20) Jordan            37) Qatar 4) Bahrain          21) Kazakhstan        38) Russia 5) Bangladesh          22) Korea (North)        39) Saudi Arabia 6) Bhutan          23) Korea (South)        40) Singapore 7) Brunei          24) Kuwait            41) Sri Lanka 8) Cambodia          25) Kyrgyzstan        42) Syria 9) China          26) Laos            43) Taiwan10) Cyprus          27) Lebanon            44) Tajikistan11) East Timor          28) Macau            45) Thailand12) Georgia          29) Malaysia            46) Turkmenistan13) Hong Kong          30) Mongolia            47) United Arab Emirates14) India          31) Myanmar (Burma)        48) Uzbekistan15) Indonesia          32) Nepal            49) Vietnam16) Iran          33) Oman            50) Yemen17) Iraq          34) Pakistan

4.这里我们选择9中国

Please select one of the following time zone regions.1) Beijing Time2) Xinjiang Time

5.这里我们选择1北京时间

The following information has been given:    China    Beijing TimeTherefore TZ='Asia/Shanghai' will be used.Selected time is now:    Sun Dec 30 18:00:59 CST 2018.Universal Time is now:    Sun Dec 30 10:00:59 UTC 2018.Is the above information OK?1) Yes2) No#? yesPlease enter a number in range.

6.是否选择以上信息?这里选择1

You can make this change permanent for yourself by appending the line    TZ='Asia/Shanghai'; export TZto the file '.profile' in your home directory; then log out and log in again.Here is that TZ value again, this time on standard output so that youcan use the /usr/bin/tzselect command in shell scripts:Asia/Shanghai

这句的意思是你可以将该配置文件添加到/usr/bin/tzselect使其生效

7.运行以下命令创建文件/etc/localtime

cp -v /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

 第6.31章  如果需要,在下一节中安装flex后,可以重建bison,并且可以通过make check来运行bison检查。(不推荐重建)

第6.48章 Libelf是elfutils-0.173包的一部分,所以需要解压elfutils-0.173软件包,进行编译

第6.61章 按书籍说明,第一条修改设置命令如下

PAGE=A4 ./configure --prefix=/usr

第6.62章 我使用manjaro安装的grub引导lfs所以在此处不安装grub,如果需要安装grub到lfs笔记后面,对应章节有配置说明。

 第6.72章 

LD_LIBRARY_PATH=/tools/lib udevadm hwdb --update

每次更新硬件信息时都需要运行此命令。

第6.79章 从二进制文件和库中删除调试符号 按照书籍中的命令操作即可(可选)建议执行此项操作。

第6.80章 

清理运行测试剩下的一些额外文件

rm -rf /tmp/*

退出

exit

挂载6.2.2和6.2.3章节内容

mount -v --bind /dev $LFS/dev
mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620mount -vt proc proc $LFS/procmount -vt sysfs sysfs $LFS/sysmount -vt tmpfs tmpfs $LFS/run
if [ -h $LFS/dev/shm ]; then  mkdir -pv $LFS/$(readlink $LFS/dev/shm)fi

chroot进入lfs系统目录

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

继续执行书中所给的其他命令

第7.2章节 

进入sources目录,解压lfs-bootscripts

进入lfs-bootscripts目录,并运行安装。

 第7.6章  

运行第7.6.2章节与第7.6.4章的命令即可

因为大多数使用的都是美国键盘,所以本章节其他内容可忽略

第7.7章节 

运行以下命令获取Glibc支持的所有语言环境的列表:

locale -a

结果:

Cen_US.utf8POSIXzh_CN.utf8

这里我们选择en_US.utf8

以下是对对所选择的语言的测试

LC_ALL=<locale name> locale charmapLC_ALL=<locale name> locale languageLC_ALL=<locale name> locale charmapLC_ALL=<locale name> locale int_curr_symbolLC_ALL=<locale name> locale int_prefix

确定正确的区域设置后,创建 /etc/profile文件:

cat > /etc/profile << "EOF"# Begin /etc/profileexport LANG=en_US.utf8  (这里替换为所选择的语言环境)# End /etc/profileEOF

第7.4章

找出分配给哪个网络设备的名称:

cat /etc/udev/rules.d/70-persistent-net.rules 记住这个命令输出的网络设备的名字,下一章要使用。

第7.5章

第7.5.1节

cd /etc/sysconfig/cat > ifconfig.eth0 << "EOF"   (这里的eth0修改为上一章节记录的网络设备的名字)ONBOOT=yesIFACE=eth0  (这里的eth0修改为上一章节记录的网络设备的名字)SERVICE=ipv4-staticIP=192.168.1.2GATEWAY=192.168.1.1PREFIX=24BROADCAST=192.168.1.255EOF

 第7.5.2章节

cat > /etc/resolv.conf << "EOF"# Begin /etc/resolv.confdomain <Your Domain Name>nameserver   8.8.8.8nameserver   8.8.4.4# End /etc/resolv.confEOF

这里我们使用谷歌的dns

第7.5.3章节

echo "<lfs>" > /etc/hostname这里的lfs替换为你所设置的主机名字

第7.8章 第7.9章运行书中所给命令即可

第8.2章

更改为lfs所创建的分区到相应位置即可(这个文件是配置lfs开机自动挂载的分区)

cat > /etc/fstab << "EOF"# Begin /etc/fstab# file system  mount-point  type     options             dump  fsck#                                                              order/dev/sda9     /boot             ext4    defaults            1     1/dev/sda10    /                   ext4    defaults            1     1/dev/sda11    /home           ext4    defaults            1     1/dev/sda12    swap             swap     pri=1               0     0proc           /proc        proc     nosuid,noexec,nodev 0     0sysfs          /sys         sysfs    nosuid,noexec,nodev 0     0devpts         /dev/pts     devpts   gid=5,mode=620      0     0tmpfs          /run         tmpfs    defaults            0     0devtmpfs       /dev         devtmpfs mode=0755,nosuid    0     0# End /etc/fstabEOF

第8.3章(相当重要)

配置编译安装linux内核

首先进入sources目录

cd   /sources

解压内核文件压缩包

tar  -xvf linux-4.18.5.tar.xz

进入内核包目录

cd linux-4.18.5

准备编译

make mrproper

设置默认内核配置状态

make defconfig

设置内核

make menuconfig

找到以下选项

Device Drivers  --->  Generic Driver Options  --->   [ ] Support for uevent helper [CONFIG_UEVENT_HELPER]   [*] Maintain a devtmpfs filesystem to mount at /dev [CONFIG_DEVTMPFS]Kernel hacking  --->       Choose kernel unwinder (Frame pointer unwinder)  ---> [CONFIG_UNWINDER_FRAME_POINTER]

上下键翻页找到Device Drivers --->回车进入

上下键翻页找到Generic Driver Options --->回车进入

按字母n键去掉Support for uevent helper对话框的×符号

按y键在Maintain a devtmpfs filesystem to mount at /dev对话框打上×符号

左右键找到exit,exit两次

上下键翻页找到Kernel hacking --->回车进入

上下键翻页找到Choose kernel unwinder--->回车进入

向下选择UNWINDER_FRAME_POINTER回车确定

左右键选择save,两次回车确定保存 选择两次exit退出到终端。

如果您的主机硬件使用UEFI,请自行添加此项设置

Processor type and features  --->   [*]   EFI stub support  [CONFIG_EFI_STUB]

编译内核映像和模块

make -j(n) n为可设置同时运行的任务数量,不设置参数默认为无限(不要轻易尝试)

本章节警告中的内容大意

如果为boot单独分了区,请挂载boot分区在进行下步操作

复制一些内核的启动文件到boot分区

cp -iv arch/x86/boot/bzImage /boot/vmlinuz-4.18.5-lfs-8.3cp -iv System.map /boot/System.map-4.18.5cp -iv .config /boot/config-4.18.5

安装Linux内核的文档:

install -d /usr/share/doc/linux-4.18.5cp -r Documentation/* /usr/share/doc/linux-4.18.5

配置linux模块加载顺序

install -v -m755 -d /etc/modprobe.dcat > /etc/modprobe.d/usb.conf << "EOF"# Begin /etc/modprobe.d/usb.confinstall ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; trueinstall uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true# End /etc/modprobe.d/usb.confEOF

第8.4章节

安装配置grub引导

我选择的是用manjaro安装的grub引导进入lfs系统所以未安装grub软件包

这里介绍给lfs安装配置grub引导的过程

在第6.62章节已经安装了grub软件

这里只介绍配置

1.安装grub引导到MBR

grub-install /dev/sda

2.创建grub配置文件

cat > /boot/grub/grub.cfg << "EOF"# Begin /boot/grub/grub.cfgset default=0set timeout=5insmod ext4(这里面更改为安装lfs的分区的格式例如ext4)set root=(hd0,2)  括号里面更改为你所安装lfs的分区号 例如/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的分区号 例如/dev/sda2)}EOF

第9.1章节

设置系统版本及版本号运行本章节命令即可

echo 8.3 > /etc/lfs-releasecat > /etc/lsb-release << "EOF"DISTRIB_ID="Linux From Scratch"DISTRIB_RELEASE="8.3"DISTRIB_CODENAME="<your name here>"(括号里改为自己起的名字)DISTRIB_DESCRIPTION="Linux From Scratch"EOF

第9.3章

本章节中的提及的软件包,将在其他笔记单独记录

运行下面的命令,退出chroot,卸载lfs的分区

exitumount -v $LFS/dev/ptsumount -v $LFS/devumount -v $LFS/runumount -v $LFS/procumount -v $LFS/sysumount -v $LFSumount -v $LFS/usrumount -v $LFS/homeumount -v $LFS

如果需要本机的grub引导lfs则在root用户下运行以下命令创建lfs的引导项

非manjaro系统需要安装os-prober软件包,并挂载lfs的分区,在运行下面命令,添加lfs的启动项

grub-mkconfig -o /boot/grub/grub.cfg

确定添加完lfs引导项后,重启机器进入lfs选项,即可进入lfs操作系统。

相关文章

    无相关信息

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台