Ubuntu LFS:进入Chroot并构建临时工具

server 投稿 2500 0 评论

写在前面

本章将完成临时系统构建的最后缺失部分和各种包构建所需的工具。

解决了所有循环依赖关系后,就可以使用与主机操作系统完全隔离的“chroot”环境进行构建。

注意:接下来的指令,需要切换回root权限下执行

改变所有者

我们需要将$LFS下文件的所有者设置为root,命令如下

chown -R root:root $LFS/{usr,lib,var,etc,bin,sbin,tools}case $(uname -m) in
 x86_64) chown -R root:root $LFS/lib64 ;;esac

随后,我们需要创建即将用来挂在文件系统的目录,命令如下

mkdir -pv $LFS/{dev,proc,sys,run}

安装和填充/dev

我们需要将宿主系统中的/dev挂载到$LFS下的dev中,命令如下

mount -v --bind /dev $LFS/dev

执行后会获得如下输出:

Ubuntu LFS:进入Chroot并构建临时工具

挂载虚拟内核文件系统

挂载剩下的虚拟内核文件系统

mount -v --bind /dev/pts $LFS/dev/ptsmount -vt proc proc $LFS/procmount -vt sysfs sysfs $LFS/sysmount -vt tmpfs tmpfs $LFS/run

在某些主机系统中,/dev/shm是到/run/shm的符号链接。上面挂载了/run tmpfs,在本例中需要创建shm目录,命令如下

if [ -h $LFS/dev/shm ]; then
 mkdir -pv $LFS/$(readlink $LFS/dev/shm)fi

进入Chroot环境

现在,构建其余所需工具所需的所有包都已在系统中,是时候进入chroot环境来完成其余临时工具的安装了。

我们切换到chroot环境下正式构建LFS系统了,运行以下命令进入当前仅使用临时工具的环境

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

输入后,我们可以看到以下开头信息:

Ubuntu LFS:进入Chroot并构建临时工具

警告:在这之后的处理中,都是在chroot下进行的,如果出现机器重启的情况,需要重新“挂载和激活/dev” 和“挂载虚拟文件系统”以及“创建shm目录”

建立文件夹

我们创建一些根目录集

mkdir -pv /{boot,home,mnt,opt,srv}

通过以下命令在根级别以下创建所需的子目录集

mkdir -pv /etc/{opt,sysconfig}mkdir -pv /lib/firmwaremkdir -pv /media/{floppy,cdrom}mkdir -pv /usr/{,local/}{include,src}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/runln -sfv /run/lock /var/lockinstall -dv -m 0750 /rootinstall -dv -m 1777 /tmp /var/tmp

第一个install确保了不是所有人都可以进入/根目录

第二个install确保任何用户都可以写入/tmp和/var/ tmp目录,但不能从其中删除其他用户的文件

创建符号连接

创建符号连接的命令如下

ln -sv /proc/self/mounts /etc/mtab

我们创建/ect/hosts文件,命令如下

cat > /etc/hosts << EOF127.0.0.1 localhost $(hostname)
::1 localhost
EOF

为了让root用户能够登录并识别“root”名称,在/etc/passwd和/etc/group文件中必须有相关的条目

创建/etc/passwd文件,命令如下

cat > /etc/passwd << "EOF"root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/dev/null:/usr/bin/falsedaemon:x:6:6:Daemon User:/dev/null:/usr/bin/falsemessagebus:x:18:18:D-Bus Message Daemon User:/run/dbus:/usr/bin/falseuuidd:x:80:80:UUID Generation Daemon User:/dev/null:/usr/bin/falsenobody:x:65534:65534:Unprivileged User:/dev/null:/usr/bin/falseEOF

创建/etc/group文件

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:
usb:x:14:
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

我们添加一个用户tester,并在第8章删除该账号,添加命令如下

echo "tester:x:101:101::/home/tester:/bin/bash" >> /etc/passwdecho "tester:x:101:" >> /etc/groupinstall -o tester -d /home/tester

我们发现,有一句I have no name的提示,如图所示:

Ubuntu LFS:进入Chroot并构建临时工具

由于我们已经创建了/etc/passwd和/etc/group,因此,我们新建一个

编程学习分享 » Ubuntu LFS:进入Chroot并构建临时工具

赞 (0) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽

高效,专业,符合SEO

联系我们