lfs-7.7学习笔记(4)系统配置

五、基本系统配置

到这一步,基本系统就已经编译好了,只需要配置即可,原来的tools已经目录没用了,sources目录还后面编译内核时还要用到,暂时要保留,不想保留拷贝一份linux-3.19.tar.xz出来也可以。

重新进入chroot环境,先logout,在进入:

chroot "$LFS" /usr/bin/env -i \
 HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
 PATH=/bin:/usr/bin:/sbin:/usr/sbin \
 /bin/bash --login

干掉ools目录:

rm -rf  /tools

如果宿主系统有重启过,或卸载过虚拟内核文件系统,进入chroot前需要重新挂载:

mount -v --bind /dev $LFS/dev
mount -vt devpts devpts $LFS/dev/pts -o gid=5,mode=620
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
mount -vt tmpfs tmpfs $LFS/run

5.1 通用网络配置

5.1.1 配置网卡

默认情况下网卡的名字不是eth0,需要使用udev绑定,绑定方法:
查看网卡的mac地址:

ip link

假设物理网卡的地址是A0:48:1C:9A:01:5C,新建udev配置文件:

touch /etc/udev/rules.d/70-persistent-net.rules

内容为:

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="A0:48:1C:9A:01:5C", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

这样在启动时udev就会将物理网卡绑定到eth0,可以使用eth0配置网络

配置DHCP还是静态IP,按个人情况,二选一,配置静态ip:

cat > /etc/systemd/network/10-static-eth0.network << "EOF"
[Match]
Name=eth0
[Network]
Address=192.168.0.2/24
Gateway=192.168.0.1
DNS=192.168.0.1
EOF

配置DHCP:

cat > /etc/systemd/network/10-dhcp-eth0.network << "EOF"
[Match]
Name=eth0
[Network]
DHCP=yes
EOF

5.1.2 创建 /etc/resolv.conf

resolv.conf是静态dns的配置文件
cat > /etc/resolv.conf << "EOF"
# Begin /etc/resolv.conf
domain
nameserver
nameserver

# End /etc/resolv.conf
EOF

创建标准的符号链接:

ln -sfv /run/systemd/resolve/resolv.conf /etc/resolv.conf

5.1.3 创建主机名

echo "LFS" > /etc/hostname

5.1.4 创建hosts文件

在4.5.35 安装 Perl中已经创建了 hosts文件,这里省略,需要注意的是主机名应该在hosts中
如:

cat /etc/hosts
127.0.0.1 localhost LFS

5.2 配置系统时间

system的会读取/etc/adjtime的时间配置,所以创建/etc/adjtime:

cat > /etc/adjtime << "EOF"
0.0 0 0.0
0
LOCAL
EOF

5.3 设置系统区域

查看 Glibc 支持的本地字符集:

locale -a

按照之前编译glibc时的配置,系统中是有zh_CN.gb18030,没有zh_CN.utf8,安装:

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

创建 /etc/locale.conf:

cat > /etc/locale.conf << "EOF"
LANG=zh_CN.UTF8
EOF

5.4 配置键盘布局

创建 /etc/inputrc 文件:

cat > /etc/inputrc << "EOF"
# Begin /etc/inputrc
# Modified by Chris Lynn <roryo@roryo.dynup.net>
# Allow the command prompt to wrap to the next line
set horizontal-scroll-mode Off
# Enable 8bit input
set meta-flag On
set input-meta On
# Turns off 8th bit stripping
set convert-meta Off
# Keep the 8th bit for display
set output-meta On
# none, visible or audible
set bell-style none
# All of the following map the escape sequence of the value
# contained in the 1st argument to the readline specific functions
"\eOd": backward-word
"\eOc": forward-word
# for linux console
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[3~": delete-char
"\e[2~": quoted-insert
# for xterm
"\eOH": beginning-of-line
"\eOF": end-of-line
# for Konsole
"\e[H": beginning-of-line
"\e[F": end-of-line
# End /etc/inputrc
EOF

5.5 配置shell

创建/etc/shells 文件:

cat > /etc/shells << "EOF"
# Begin /etc/shells
/bin/sh
/bin/bash   
# End /etc/shells
EOF

5.6 配置systemd

禁止 /tmp 使用 tmpfs:

ln -sfv /dev/null /etc/systemd/system/tmp.mount

六、 LFS 系统引导配置

6.1 创建 /etc/fstab 文件

cat > /etc/fstab << "EOF"
# Begin /etc/fstab
# 文件系统 挂载点 文件类型 挂载选项 dump fsck
# order
/dev/sdb1 /  defaults 1 1
# End /etc/fstab
EOF

6.2 编译内核

令准备编译:

make mrproper

生成内核配置文件:

make defconfig

会根据机器架构生成一份配置,保存在内核源码目录下.config文件中,确保以下内容是打开的:

CONFIG_FHANDLE=y
CONFIG_CGROUPS=y
CONFIG_SECCOMP=y
CONFIG_IPV6=y
CONFIG_DEVTMPFS=y
CONFIG_DMIID=y
ONFIG_INOTIFY_USER=y
CONFIG_AUTOFS4_FS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y

如果宿主机是vmware,还需要如下配置:

CONFIG_FUSION=y
CONFIG_FUSION_SPI=y
CONFIG_FUSION_SAS=y
CONFIG_FUSION_MAX_SGE=y
CONFIG_FUSION_CTL=y
CONFIG_FUSION_LOGGING=y

CONFIG_VMWARE_BALLOON=y
CONFIG_VMWARE_PVSCSI=y

CONFIG_HYPERVISOR_GUEST=Y

不添加这些配置,LFS启动时会报类似"kernel panic"或者"VFS: unable to mount root fs"的错误

或者通过下面命令,使用命令行下的图形界面设置:

make LANG=zh_CN.UTF8 LC_ALL= menuconfig

编译:

make

安装模块:

make modules_install

根据必要的文件到/boot下:

cp -v arch/x86_64/boot/bzImage /boot/vmlinuz-3.19-lfs-7.7-systemd
cp -v System.map /boot/System.map-3.19

安装 Linux 内核文档:

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

6.3 设置启动过程

安装Grub:

grub-install /dev/sdb

创建 GRUB 配置文件:

cat > /boot/grub/grub.cfg << "EOF"
# Begin /boot/grub/grub.cfg
set default=0
set timeout=5
insmod ext2
set root=(hd0,1)   
menuentry "GNU/Linux, Linux 3.19-lfs-7.7-systemd" {
 linux /boot/vmlinuz-3.19-lfs-7.7-systemd root=/dev/sda1 ro
}
EOF

grub配置文件中root=/dev/sda1 ro是磁盘挂载为只读,测试启动成功后可以改成rw

6.4 创建/etc/os-release文件

cat > /etc/os-release << "EOF"
NAME="Linux From Scratch"
VERSION="7.7-systemd"
ID=lfs
PRETTY_NAME="Linux From Scratch 7.7-systemd"
EOF

到这里新系统就大功告成了,虽然好还有好多软件要配置,但可以开机启动,体验自己编译好的新系统了
最后可以去官方注册为LFS用户: http://www.linuxfromscratch.org/cgi-bin/lfscounter.php

lfs-7.7学习笔记(1)准备篇
lfs-7.7学习笔记(2)构建临时系统
lfs-7.7学习笔记(3)构建 LFS 系统
lfs-7.7学习笔记(4)系统配置