ln -sv bash /bin/sh touch /etc/mtab
创建root及nobody用户和必要的组 代码:
cat > /etc/passwd << \root:x:0:0:root:/root:/bin/bash nobody:x:99:99:Unprivileged User:/dev/null:/bin/false EOF cat > /etc/group << \root:x:0: bin:x:1: sys:x:2: kmem:x:3: tty:x:4: tape: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: mail:x:34: nogroup:x:99: EOF - 31 -
重新加载bash,以使root用户起效,这样前面的提示符就不会是“I have no name!” 代码:
exec /tools/bin/bash --login +h
创建和设置几个临时文件和日志文件。 代码:
touch /var/run/utmp /var/log/{btmp,lastlog,wtmp} chgrp -v utmp /var/run/utmp /var/log/lastlog chmod -v 664 /var/run/utmp /var/log/lastlog
到目前为止,创建目标系统的准备工作以基本完成,下面就要开始目标系统的软件包安装了。
首先进入到源码目录下。 代码:
cd /sources (此前已经将LFS需要的源码包加载到了/cdrom下,因此后面的命令将从/cdrom/lfs-sources目录下解出,如果你将源码包直接复制到了sources目录下或别的什么目录下,则要相应的修改下面的命令) export LFS=/cdrom/lfs-sources
如果之前是将所有源码包复制到sources下的,则执行 代码:
export LFS=/sources
从现在开始一直到第六章的Stripping Again之前,这个阶段如果你关机或重新启动,那么重新开机后回到工作状态的步骤是:
1.重新启动计算机,并从LiveCD启动 2.加载分区
export LFS=/mnt/lfs
- 32 -
mkdir -pv $LFS mount /dev/hda2 $LFS
3.加载交换分区(如果不想用交换分区或者没有交换分区可跳过此步骤) swapon /dev/hda1 4.加载必要的文件系统
mount -v --bind /dev $LFS/dev mount -vt devpts devpts $LFS/dev/pts mount -vt tmpfs shm $LFS/dev/shm mount -vt proc proc $LFS/proc mount -vt sysfs sysfs $LFS/sys 5.Chroot到目标系统下
chroot \
HOME=/root TERM=\ PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \\ /bin/bash --login +h 6.进入编译目录 cd /sources
export LFS=/sources
Linux-2.6.22.5 代码:
tar xvf $LFS/linux-2.6.22.5.tar.bz2 cd linux-2.6.22.5 sed -i '/scsi/d' include/Kbuild make mrproper make headers_check make INSTALL_HDR_PATH=dest headers_install cp -rv dest/include/* /usr/include - 33 -
cd .. rm -rf linux-2.6.22.5 Man-pages-2.63 代码:
tar xvf $LFS/man-pages-2.63.tar.bz2 cd man-pages-2.63 make install cd .. rm -rf man-pages-2.63 man-pages的版本可以使用更新的版本。
Glibc-2.5.1
在进行之前请检查一下是否glibc-2.5.1和glibc-build这两个目录已经被删除,如果没有删除请删除后在继续。 代码:
tar xvf $LFS/glibc-2.5.1.tar.bz2 cd glibc-2.5.1 tar -xvf $LFS/glibc-libidn-2.5.1.tar.gz mv glibc-libidn-2.5.1 libidn sed -i '/vi_VN.TCVN/d' localedata/SUPPORTED sed -i \\ 's|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=/lib/ld-linux.so.2 -o|' \\ scripts/test-installation.pl sed -i 's|@BASH@|/bin/bash|' elf/ldd.bash.in mkdir -v ../glibc-build cd ../glibc-build ../glibc-2.5.1/configure --prefix=/usr \\ - 34 -
--disable-profile --enable-add-ons \\ --enable-kernel=2.6.0 --libexecdir=/usr/lib/glibc make make -k check 2>&1 | tee glibc-check-log grep Error glibc-check-log touch /etc/ld.so.conf make install make localedata/install-locales make localedata/install-locales将安装全部的locale,如果你不想装这么多locale的话就用localedef命令来安装,LFS手册上有例子,如果仅想加入中文的locale,就用 mkdir -pv /usr/lib/locale
localedef -i zh_CN -f GB18030 zh_CN localedef -i zh_CN -f GBK zh_CN localedef -i zh_CN -f UTF-8 zh_CN localedef -i zh_CN -f GB2312 zh_CN localedef -i zh_HK -f UTF-8 zh_CN localedef -i zh_HK -f BIG5-HKSCS zh_CN localedef -i zh_TW -f EUC-TW zh_CN localedef -i zh_TW -f UTF-8 zh_CN localedef -i zh_TW -f BIG5 zh_CN 建立几个重要文件: 代码:
cat > /etc/nsswitch.conf << \# Begin /etc/nsswitch.conf passwd: files group: files shadow: files hosts: files dns networks: files - 35 -