|

楼主 |
发表于 2007-5-17 03:24:33
|
显示全部楼层
零起点构建自己的Linux ( 按照LFS-6.2-5手册的方法构建基本系统 )
这里,我们最好还是使用真实环境来做LFS。如果你还不能够十分有把握的使用真实环境,你应该先回到第一帖,研究一下关于分区表和系统引导的知识。
(再次强调一下:本文仅作参考,应当以手册为准。另外,文中的软件都不是最新,如果喜欢使用较新软件,请看SVN版手册。当然,也可以尝试CLFS 。)
对主系统的要求(细节看LFS-6.2-5手册)
我们使用的是lfslivecd-6.2-5,光盘上的系统是满足开发环境需要的- cat > version-check.sh << "EOF"
- #!/bin/bash
- # Simple script to list version numbers of critical development tools
- bash --version | head -n1 | cut -d" " -f2-4
- echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-4
- bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-
- echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
- diff --version | head -n1
- find --version | head -n1
- gawk --version | head -n1
- gcc --version | head -n1
- /lib/libc.so.6 | head -n1 | cut -d" " -f1-7
- grep --version | head -n1
- gzip --version | head -n1
- cat /proc/version | head -n1 | cut -d" " -f1-3,5-7
- make --version | head -n1
- patch --version | head -n1
- sed --version | head -n1
- tar --version | head -n1
- EOF
- bash version-check.sh
复制代码
下面的这部分是需要按照实际情况进行修改的地方
##### 00-root/00-root 由root用户来决定所有的准备工作。这部分要求手工输入,防止出错。 #####
# 如果物理内存很少,可以先启用swap.这里,我们使用一个硬盘分区作为swap 。
#用实际的分区替换下面的 /dev/<xxx>。比如 /dev/hda7 。
#如果物理内存在512以上,并且只在字符环境下操作,在构建LFS系统的过程中就可以不需要启用swap。 #- mkswap /dev/<xxx>
- swapon /dev/<xxx>
复制代码
#创建一个ext3文件系统,这里 /dev/<xxx>用实际的硬盘分区设备名称替换掉,比如 /dev/hda6 。当然也可以使用其它的Linux的文件系统。## Linux只需要一个分区作为根文件系统就可以了。swap不是必须的。但是我们最好还是单独的为swap创建一个分区。上面已经创建了swap和一个满足Linux需要的系统分区。如果想创建更多分区的可以使用类似的方法。 #
##### 准备工作 #####
#定义LFS环境变量
#挂载目标文件系统,我们将在这个文件系统上构建LFS。用实际的分区替换下面的 /dev/<xxx>- mkdir -pv $LFS
- mount -v -t ext3 /dev/<xxx> $LFS
复制代码
#这里,如果为系统分配了再多的分区,可以一并挂载。用实际的分区替换下面的 /dev/<yyy>- #mkdir -pv $LFS/usr
- #mount -v -t ext3 /dev/<yyy> $LFS/usr
复制代码
# 创建 $LFS/sources 目录- mkdir -v $LFS/sources
- chmod -v a+wt $LFS/sources
复制代码
# 检查LFS环境变量
# 如果上面的命令输出结果不正确,用这条命令进行设置:
# 创建$LFS/tools目录- mkdir -v $LFS/tools
- ln -sv $LFS/tools /
复制代码
# 添加lfs用户,在构建临时的编译环境的时候用lfs用户来做这些事情- groupadd lfs
- useradd -s /bin/bash -g lfs -m -k /dev/null lfs
复制代码
# 为lfs用户设置密码。(如果是使用中文的图形界面终端来做,可能会看到提示说密码未更改,不必理会,这是翻译出错。实际上密码已经修改了。)
# 将 $LFS/tools (工具目录) 和 $LFS/sources (原码编译目录)的属主改为 lfs 用户。让lfs用户具有对这两个目录的完全访问权限。- chown -v lfs $LFS/tools
- chown -v lfs $LFS/sources
复制代码
# 以lfs用户身分登录。
- ##### 01-lfs-path/00-lfs.sh #####
- # 设置工作环境
- cat > ~/.bash_profile << "EOF"
- exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
- EOF
- cat > ~/.bashrc << "EOF"
- set +h
- umask 022
- LFS=/mnt/lfs
- LC_ALL=POSIX
- PATH=/tools/bin:/bin:/usr/bin
- export LFS LC_ALL PATH
- EOF
- source ~/.bash_profile
复制代码
##### 5.31. 清理系统 #####
这部分被省略掉了,详情看手册。
- ##### 03-chown-and-mount/00-mount_lfs-sources #####
- #####
- mkdir /mnt/lfs/lfs-sources
- mount --bind /lfs-sources /mnt/lfs/lfs-sources
复制代码- ###### 03-chown-and-mount/01-chroot #####
- chown -R root:root $LFS/tools
- mkdir -pv $LFS/{dev,proc,sys}
- mknod -m 600 $LFS/dev/console c 5 1
- mknod -m 666 $LFS/dev/null c 1 3
- mount --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
- chroot "$LFS" /tools/bin/env -i \
- HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
- PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
- /tools/bin/bash --login +h
复制代码- ###### 03-chown-and-mount/02_mkdir #####
- mkdir -pv /{bin,boot,etc/opt,home,lib,mnt,opt}
- mkdir -pv /{media/{floppy,cdrom},sbin,srv,var}
- install -dv -m 0750 /root
- install -dv -m 1777 /tmp /var/tmp
- mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src}
- mkdir -pv /usr/{,local/}share/{doc,info,locale,man}
- mkdir -v /usr/{,local/}share/{misc,terminfo,zoneinfo}
- mkdir -pv /usr/{,local/}share/man/man{1..8}
- for dir in /usr /usr/local; do
- ln -sv share/{man,doc,info} $dir
- done
- mkdir -v /var/{lock,log,mail,run,spool}
- mkdir -pv /var/{opt,cache,lib/{misc,locate},local}
- ln -sv /tools/bin/{bash,cat,grep,pwd,stty} /bin
- ln -sv /tools/bin/perl /usr/bin
- ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib
- ln -sv bash /bin/sh
- touch /etc/mtab
- cat > /etc/passwd << "EOF"
- root:x:0:0:root:/root:/bin/bash
- EOF
- cat > /etc/group << "EOF"
- 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:
- EOF
- exec /tools/bin/bash --login +h
复制代码- ###### 03-chown-and-mount/03_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
复制代码- ###### 04-chroot-sh/ #####
- # 6.7. Linux-Libc-Headers-2.6.12.0
- cd /sources
- tar xvf /lfs-sources/linux-libc-headers-2.6.12.0.tar.bz2
- cd linux-libc-headers-2.6.12.0
- patch -Np1 -i /lfs-sources/linux-libc-headers-2.6.12.0-inotify-3.patch
- install -dv /usr/include/asm
- cp -Rv include/asm-i386/* /usr/include/asm
- cp -Rv include/linux /usr/include
- chown -Rv root:root /usr/include/{asm,linux}
- find /usr/include/{asm,linux} -type d -exec chmod -v 755 {} \;
- find /usr/include/{asm,linux} -type f -exec chmod -v 644 {} \;
- cd /sources
- # 6.8. Man-pages-2.34
- cd /sources
- tar xvf /lfs-sources/man-pages-2.34.tar.bz2
- cd man-pages-2.34
- make install
- cd /sources
- # 6.9. Glibc-2.3.6
- cd /sources
- tar xvf /lfs-sources/glibc-2.3.6.tar.bz2
- cd glibc-2.3.6
- tar -xf /lfs-sources/glibc-libidn-2.3.6.tar.bz2
- patch -Np1 -i /lfs-sources/glibc-2.3.6-linux_types-1.patch
- patch -Np1 -i /lfs-sources/glibc-2.3.6-inotify-1.patch
- 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
- mkdir -v ../glibc-build
- cd ../glibc-build
- ../glibc-2.3.6/configure --prefix=/usr \
- --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
- cp -v ../glibc-2.3.6/sysdeps/unix/sysv/linux/inotify.h \
- /usr/include/sys
- make localedata/install-locales
- cat > /etc/nsswitch.conf << "EOF"
- # Begin /etc/nsswitch.conf
- passwd: files
- group: files
- shadow: files
- hosts: files dns
- networks: files
- protocols: files
- services: files
- ethers: files
- rpc: files
- # End /etc/nsswitch.conf
- EOF
- tzselect
- cp -v --remove-destination /usr/share/zoneinfo/Asia/Shanghai \
- /etc/localtime
- cat > /etc/ld.so.conf << "EOF"
- # Begin /etc/ld.so.conf
- /usr/local/lib
- /opt/lib
- # End /etc/ld.so.conf
- EOF
- cd /sources
- # 6.10. 再次调整工具链
- mv -v /tools/bin/{ld,ld-old}
- mv -v /tools/$(gcc -dumpmachine)/bin/{ld,ld-old}
- mv -v /tools/bin/{ld-new,ld}
- ln -sv /tools/bin/ld /tools/$(gcc -dumpmachine)/bin/ld
- gcc -dumpspecs | \
- perl -p -e 's@/tools/lib/ld-linux.so.2@/lib/ld-linux.so.2@g;' \
- -e 's@\*startfile_prefix_spec:\n@$_/usr/lib/ @g;' > \
- `dirname $(gcc --print-libgcc-file-name)`/specs
- echo 'main(){}' > dummy.c
- cc dummy.c -Wl,--verbose &> dummy.log
- readelf -l a.out | grep ': /lib'
- grep -o '/usr/lib.*/crt[1in].* .*' dummy.log
- grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'
- grep "/lib/libc.so.6 " dummy.log
- grep found dummy.log
- rm -v dummy.c a.out dummy.log
- # 6.11. Binutils-2.16.1
- cd /sources
- tar xvf /lfs-sources/binutils-2.16.1.tar.bz2
- cd binutils-2.16.1
- expect -c "spawn ls"
- mkdir -v ../binutils-build
- cd ../binutils-build
- ../binutils-2.16.1/configure --prefix=/usr \
- --enable-shared
- make tooldir=/usr
- make check
- make tooldir=/usr install
- cp -v ../binutils-2.16.1/include/libiberty.h /usr/include
- cd /sources
- # 6.12. GCC-4.0.3
- cd /sources
- tar xvf /lfs-sources/gcc-4.0.3.tar.bz2
- cd gcc-4.0.3
- sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
- sed -i 's/^XCFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in
- sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
- sed -i 's/@have_mktemp_command@/yes/' gcc/gccbug.in
- mkdir -v ../gcc-build
- cd ../gcc-build
- ../gcc-4.0.3/configure --prefix=/usr \
- --libexecdir=/usr/lib --enable-shared \
- --enable-threads=posix --enable-__cxa_atexit \
- --enable-clocale=gnu --enable-languages=c,c++
- make
- ../gcc-4.0.3/contrib/test_summary
- make install
- ln -sv ../usr/bin/cpp /lib
- ln -sv gcc /usr/bin/cc
- echo 'main(){}' > dummy.c
- cc dummy.c -Wl,--verbose &> dummy.log
- readelf -l a.out | grep ': /lib'
- grep -o '/usr/lib.*/crt[1in].* .*' dummy.log
- grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'
- grep "/lib/libc.so.6 " dummy.log
- grep found dummy.log
- rm -v dummy.c a.out dummy.log
- cd /sources
- # 6.13. Berkeley DB-4.4.20
- cd /sources
- tar xvf /lfs-sources/db-4.4.20.tar.gz
- cd db-4.4.20
- patch -Np1 -i /lfs-sources/db-4.4.20-fixes-1.patch
- cd build_unix &&
- ../dist/configure --prefix=/usr --enable-compat185 --enable-cxx
- make
- make docdir=/usr/share/doc/db-4.4.20 install
- chown -v root:root /usr/bin/db_* \
- /usr/lib/libdb* /usr/include/db* &&
- chown -Rv root:root /usr/share/doc/db-4.4.20
- cd /sources
- # 6.14. Coreutils-5.96
- cd /sources
- tar xvf /lfs-sources/coreutils-5.96.tar.bz2
- cd coreutils-5.96
- patch -Np1 -i /lfs-sources/coreutils-5.96-uname-1.patch
- patch -Np1 -i /lfs-sources/coreutils-5.96-suppress_uptime_kill_su-1.patch
- patch -Np1 -i /lfs-sources/coreutils-5.96-i18n-1.patch
- chmod +x tests/sort/sort-mb-tests
- sed -i 's/_LEN 6/_LEN 20/' src/who.c
- ./configure --prefix=/usr
- make
- echo "dummy1:x:1000:" >> /etc/group
- echo "dummy2:x:1001:dummy" >> /etc/group
- echo "dummy:x:1000:1000::/root:/bin/bash" >> /etc/passwd
- make NON_ROOT_USERNAME=dummy check-root
- src/su dummy -c "make RUN_EXPENSIVE_TESTS=yes check"
- sed -i '/dummy/d' /etc/passwd /etc/group
- make install
- mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin
- mv -v /usr/bin/{false,hostname,ln,ls,mkdir,mknod,mv,pwd,rm} /bin
- mv -v /usr/bin/{rmdir,stty,sync,true,uname} /bin
- mv -v /usr/bin/chroot /usr/sbin
- mv -v /usr/bin/{head,sleep,nice} /bin
- cd /sources
- # 6.15. Iana-Etc-2.10
- cd /sources
- tar xvf /lfs-sources/iana-etc-2.10.tar.bz2
- cd iana-etc-2.10
- make
- make install
- cd /sources
- # 6.16. M4-1.4.4
- cd /sources
- tar xvf /lfs-sources/m4-1.4.4.tar.gz
- cd m4-1.4.4
- ./configure --prefix=/usr
- make
- make install
- cd /sources
- # 6.17. Bison-2.2
- cd /sources
- tar xvf /lfs-sources/bison-2.2.tar.bz2
- cd bison-2.2
- ./configure --prefix=/usr
- echo '#define YYENABLE_NLS 1' >> config.h
- make
- make install
- cd /sources
- # 6.18. Ncurses-5.5
- cd /sources
- tar xvf /lfs-sources/ncurses-5.5.tar.gz
- cd ncurses-5.5
- patch -Np1 -i /lfs-sources/ncurses-5.5-fixes-1.patch
- ./configure --prefix=/usr --with-shared --without-debug --enable-widec
- make
- make install
- chmod -v 755 /usr/lib/*.5.5
- chmod -v 644 /usr/lib/libncurses++w.a
- mv -v /usr/lib/libncursesw.so.5* /lib
- ln -sfv ../../lib/libncursesw.so.5 /usr/lib/libncursesw.so
- for lib in curses ncurses form panel menu ; do \
- rm -vf /usr/lib/lib${lib}.so ; \
- echo "INPUT(-l${lib}w)" >/usr/lib/lib${lib}.so ; \
- ln -sfv lib${lib}w.a /usr/lib/lib${lib}.a ; \
- done &&
- ln -sfv libncurses++w.a /usr/lib/libncurses++.a
- echo "INPUT(-lncursesw)" >/usr/lib/libcursesw.so &&
- ln -sfv libncurses.so /usr/lib/libcurses.so &&
- ln -sfv libncursesw.a /usr/lib/libcursesw.a &&
- ln -sfv libncurses.a /usr/lib/libcurses.a
- cd /sources
- # 6.19. Procps-3.2.6
- cd /sources
- tar xvf /lfs-sources/procps-3.2.6.tar.gz
- cd procps-3.2.6
- make
- make install
- cd /sources
- # 6.20. Sed-4.1.5
- cd /sources
- tar xvf /lfs-sources/sed-4.1.5.tar.gz
- cd sed-4.1.5
- ./configure --prefix=/usr --bindir=/bin --enable-html
- make
- make install
- cd /sources
- # 6.21. Libtool-1.5.22
- cd /sources
- tar xvf /lfs-sources/libtool-1.5.22.tar.gz
- cd libtool-1.5.22
- ./configure --prefix=/usr
- make
- make install
- cd /sources
- # 6.22. Perl-5.8.8
- cd /sources
- tar xvf /lfs-sources/perl-5.8.8.tar.bz2
- cd perl-5.8.8
- echo "127.0.0.1 localhost $(hostname)" > /etc/hosts
- ./configure.gnu --prefix=/usr \
- -Dman1dir=/usr/share/man/man1 \
- -Dman3dir=/usr/share/man/man3 \
- -Dpager="/usr/bin/less -isR"
- make
- make install
- cd /sources
- # 6.23. Readline-5.1
- cd /sources
- tar xvf /lfs-sources/readline-5.1.tar.gz
- cd readline-5.1
- patch -Np1 -i /lfs-sources/readline-5.1-fixes-3.patch
- sed -i '/MV.*old/d' Makefile.in
- sed -i '/{OLDSUFF}/c:' support/shlib-install
- ./configure --prefix=/usr --libdir=/lib
- make SHLIB_LIBS=-lncurses
- make install
- chmod -v 755 /lib/lib{readline,history}.so*
- mv -v /lib/lib{readline,history}.a /usr/lib
- rm -v /lib/lib{readline,history}.so
- ln -sfv ../../lib/libreadline.so.5 /usr/lib/libreadline.so
- ln -sfv ../../lib/libhistory.so.5 /usr/lib/libhistory.so
- cd /sources
- # 6.24. Zlib-1.2.3
- cd /sources
- tar xvf /lfs-sources/zlib-1.2.3.tar.gz
- cd zlib-1.2.3
- ./configure --prefix=/usr --shared --libdir=/lib
- make
- make install
- rm -v /lib/libz.so
- ln -sfv ../../lib/libz.so.1.2.3 /usr/lib/libz.so
- make clean
- ./configure --prefix=/usr
- make
- make install
- chmod -v 644 /usr/lib/libz.a
- cd /sources
- # 6.25. Autoconf-2.59
- cd /sources
- tar xvf /lfs-sources/autoconf-2.59.tar.bz2
- cd autoconf-2.59
- ./configure --prefix=/usr
- make
- make install
- cd /sources
- # 6.26. Automake-1.9.6
- cd /sources
- tar xvf /lfs-sources/automake-1.9.6.tar.bz2
- cd automake-1.9.6
- ./configure --prefix=/usr
- make
- make install
- cd /sources
- # 6.27. Bash-3.1
- cd /sources
- tar xvf /lfs-sources/bash-3.1.tar.gz
- cd bash-3.1
- tar -xvf /lfs-sources/bash-doc-3.1.tar.gz &&
- sed -i "s|htmldir = @htmldir@|htmldir = /usr/share/doc/bash-3.1|" \
- Makefile.in
- patch -Np1 -i /lfs-sources/bash-3.1-fixes-8.patch
- ./configure --prefix=/usr --bindir=/bin \
- --without-bash-malloc --with-installed-readline
- make
- make install
- cd /sources
- # 运行新编译的 bash 程序来替换正在执行的这个/tools/bin/bash
- exec /bin/bash --login +h
复制代码
- # 6.28. Bzip2-1.0.3
- cd /sources
- tar xvf /lfs-sources/bzip2-1.0.3.tar.gz
- cd bzip2-1.0.3
- patch -Np1 -i /lfs-sources/bzip2-1.0.3-install_docs-1.patch
- patch -Np1 -i /lfs-sources/bzip2-1.0.3-bzgrep_security-1.patch
- sed -i 's@tempfile -d /tmp -p bz@mktemp -p /tmp@' bzdiff
- make -f Makefile-libbz2_so
- make clean
- make
- make install
- cp -v bzip2-shared /bin/bzip2
- cp -av libbz2.so* /lib
- ln -sv ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so
- rm -v /usr/bin/{bunzip2,bzcat,bzip2}
- ln -sv bzip2 /bin/bunzip2
- ln -sv bzip2 /bin/bzcat
- cd /sources
- # 6.29. Diffutils-2.8.1
- cd /sources
- tar xvf /lfs-sources/diffutils-2.8.1.tar.gz
- cd diffutils-2.8.1
- patch -Np1 -i /lfs-sources/diffutils-2.8.1-i18n-1.patch
- touch man/diff.1
- ./configure --prefix=/usr
- make
- make install
- cd /sources
- # 6.30. E2fsprogs-1.39
- cd /sources
- tar xvf /lfs-sources/e2fsprogs-1.39.tar.gz
- cd e2fsprogs-1.39
- mkdir -v build
- cd build
- ../configure --prefix=/usr --with-root-prefix="" \
- --enable-elf-shlibs --disable-evms
- make
- make install
- make install-libs
- cd /sources
- # 6.31. File-4.17
- cd /sources
- tar xvf /lfs-sources/file-4.17.tar.gz
- cd file-4.17
- ./configure --prefix=/usr
- make
- make install
- cd /sources
- # 6.32. Findutils-4.2.27
- cd /sources
- tar xvf /lfs-sources/findutils-4.2.27.tar.gz
- cd findutils-4.2.27
- ./configure --prefix=/usr --libexecdir=/usr/lib/findutils \
- --localstatedir=/var/lib/locate
- make
- make install
- mv -v /usr/bin/find /bin
- sed -i -e 's/find:=${BINDIR}/find:=\/bin/' /usr/bin/updatedb
- cd /sources
- # 6.33. Flex-2.5.33
- cd /sources
- tar xvf /lfs-sources/flex-2.5.33.tar.bz2
- cd flex-2.5.33
- ./configure --prefix=/usr
- make
- make install
- ln -sv libfl.a /usr/lib/libl.a
- cat > /usr/bin/lex << "EOF"
- #!/bin/sh
- # Begin /usr/bin/lex
- exec /usr/bin/flex -l "$@"
- # End /usr/bin/lex
- EOF
- chmod -v 755 /usr/bin/lex
- cd /sources
- # 6.34. GRUB-0.97
- cd /sources
- tar xvf /lfs-sources/grub-0.97.tar.gz
- cd grub-0.97
- patch -Np1 -i /lfs-sources/grub-0.97-disk_geometry-1.patch
- ./configure --prefix=/usr
- make
- make install
- mkdir -v /boot/grub
- ##cp -v /usr/lib/grub/i386-pc/stage{1,2} /boot/grub
- ##### 上面的是手册上的方法,这里改成下面的。 #####
- cp -v /usr/lib/grub/i386-pc/* /boot/grub
- cd /sources
- # 6.35. Gawk-3.1.5
- cd /sources
- tar xvf /lfs-sources/gawk-3.1.5.tar.bz2
- cd gawk-3.1.5
- patch -Np1 -i /lfs-sources/gawk-3.1.5-segfault_fix-1.patch
- ./configure --prefix=/usr --libexecdir=/usr/lib
- cat >>config.h <<"EOF"
- #define HAVE_LANGINFO_CODESET 1
- #define HAVE_LC_MESSAGES 1
- EOF
- make
- make install
- cd /sources
- # 6.36. Gettext-0.14.5
- cd /sources
- tar xvf /lfs-sources/gettext-0.14.5.tar.gz
- cd gettext-0.14.5
- ./configure --prefix=/usr
- make
- make install
- cd /sources
- # 6.37. Grep-2.5.1a
- cd /sources
- tar xvf /lfs-sources/grep-2.5.1a.tar.bz2
- cd grep-2.5.1a
- patch -Np1 -i /lfs-sources/grep-2.5.1a-redhat_fixes-2.patch
- chmod +x tests/fmbtest.sh
- ./configure --prefix=/usr --bindir=/bin
- make
- make install
- cd /sources
- # 6.38. Groff-1.18.1.1
- cd /sources
- tar xvf /lfs-sources/groff-1.18.1.1.tar.gz
- cd groff-1.18.1.1
- patch -Np1 -i /lfs-sources/groff-1.18.1.1-debian_fixes-1.patch
- sed -i -e 's/2010/002D/' -e 's/2212/002D/' \
- -e 's/2018/0060/' -e 's/2019/0027/' font/devutf8/R.proto
- PAGE=A4 ./configure --prefix=/usr --enable-multibyte
- make
- make install
- ln -sv eqn /usr/bin/geqn
- ln -sv tbl /usr/bin/gtbl
- cd /sources
- # 6.39. Gzip-1.3.5
- cd /sources
- tar xvf /lfs-sources/gzip-1.3.5.tar.gz
- cd gzip-1.3.5
- patch -Np1 -i /lfs-sources/gzip-1.3.5-security_fixes-1.patch
- ./configure --prefix=/usr
- sed -i 's@"BINDIR"@/bin@g' gzexe.in
- make
- make install
- mv -v /usr/bin/gzip /bin
- rm -v /usr/bin/{gunzip,zcat}
- ln -sv gzip /bin/gunzip
- ln -sv gzip /bin/zcat
- ln -sv gzip /bin/compress
- ln -sv gunzip /bin/uncompress
- cd /sources
- # 6.40. Inetutils-1.4.2
- cd /sources
- tar xvf /lfs-sources/inetutils-1.4.2.tar.gz
- cd inetutils-1.4.2
- patch -Np1 -i /lfs-sources/inetutils-1.4.2-gcc4_fixes-3.patch
- patch -Np1 -i /lfs-sources/inetutils-1.4.2-no_server_man_pages-1.patch
- ./configure --prefix=/usr --libexecdir=/usr/sbin \
- --sysconfdir=/etc --localstatedir=/var \
- --disable-logger --disable-syslogd \
- --disable-whois --disable-servers
- make
- make install
- mv -v /usr/bin/ping /bin
- cd /sources
- # 6.41. IPRoute2-2.6.16-060323
- cd /sources
- tar xvf /lfs-sources/iproute2-2.6.16-060323.tar.gz
- cd iproute2-2.6.16-060323
- make SBINDIR=/sbin
- make SBINDIR=/sbin install
- mv -v /sbin/arpd /usr/sbin
- cd /sources
- # 6.42. Kbd-1.12
- cd /sources
- tar xvf /lfs-sources/kbd-1.12.tar.bz2
- cd kbd-1.12
- patch -Np1 -i /lfs-sources/kbd-1.12-backspace-1.patch
- patch -Np1 -i /lfs-sources/kbd-1.12-gcc4_fixes-1.patch
- ./configure --datadir=/lib/kbd
- make
- make install
- mv -v /usr/bin/{kbd_mode,openvt,setfont} /bin
- cd /sources
- # 6.43. Less-394
- cd /sources
- tar xvf /lfs-sources/less-394.tar.gz
- cd less-394
- ./configure --prefix=/usr --sysconfdir=/etc
- make
- make install
- cd /sources
- # 6.44. Make-3.80
- cd /sources
- tar xvf /lfs-sources/make-3.80.tar.bz2
- cd make-3.80
- ./configure --prefix=/usr
- make
- make install
- cd /sources
- # 6.45. Man-DB-2.4.3
- cd /sources
- tar xvf /lfs-sources/man-db-2.4.3.tar.gz
- cd man-db-2.4.3
- mv man/de{_DE.88591,} &&
- mv man/es{_ES.88591,} &&
- mv man/it{_IT.88591,} &&
- mv man/ja{_JP.eucJP,} &&
- sed -i 's,\*_\*,??,' man/Makefile.in
- sed -i '/\t\/usr\/man/d' src/man_db.conf.in
- cat >>include/manconfig.h.in <<"EOF"
- #define WEB_BROWSER "exec /usr/bin/lynx"
- #define COL "/usr/bin/col"
- #define VGRIND "/usr/bin/vgrind"
- #define GRAP "/usr/bin/grap"
- EOF
- ./configure --prefix=/usr --enable-mb-groff --disable-setuid
- make
- make install
- cat >>convert-mans <<"EOF"
- #!/bin/sh -e
- FROM="$1"
- TO="$2"
- shift ; shift
- while [ $# -gt 0 ]
- do
- FILE="$1"
- shift
- iconv -f "$FROM" -t "$TO" "$FILE" >.tmp.iconv
- mv .tmp.iconv "$FILE"
- done
- EOF
- install -m755 convert-mans /usr/bin
- # 6.46. Mktemp-1.5
- cd /sources
- tar xvf /lfs-sources/mktemp-1.5.tar.gz
- cd mktemp-1.5
- patch -Np1 -i /lfs-sources/mktemp-1.5-add_tempfile-3.patch
- ./configure --prefix=/usr --with-libc
- make
- make install
- make install-tempfile
- cd /sources
- # 6.47. Module-Init-Tools-3.2.2
- cd /sources
- tar xvf /lfs-sources/module-init-tools-3.2.2.tar.bz2
- cd module-init-tools-3.2.2
- patch -Np1 -i /lfs-sources/module-init-tools-3.2.2-modprobe-1.patch
- ./configure &&
- make check &&
- make distclean
- ./configure --prefix=/ --enable-zlib
- make
- make INSTALL=install install
- cd /sources
- # 6.48. Patch-2.5.4
- cd /sources
- tar xvf /lfs-sources/patch-2.5.4.tar.gz
- cd patch-2.5.4
- ./configure --prefix=/usr
- make
- make install
- cd /sources
- # 6.49. Psmisc-22.2
- cd /sources
- tar xvf /lfs-sources/psmisc-22.2.tar.gz
- cd psmisc-22.2
- ./configure --prefix=/usr --exec-prefix=""
- make
- make install
- mv -v /bin/pstree* /usr/bin
- ln -sv killall /bin/pidof
- cd /sources
- # 6.50. Shadow-4.0.15
- cd /sources
- tar xvf /lfs-sources/shadow-4.0.15.tar.bz2
- cd shadow-4.0.15
- ./configure --libdir=/lib --enable-shared --without-selinux
- sed -i 's/groups$(EXEEXT) //' src/Makefile
- find man -name Makefile -exec sed -i '/groups/d' {} \;
- sed -i -e 's/ ko//' -e 's/ zh_CN zh_TW//' man/Makefile
- for i in de es fi fr id it pt_BR; do
- convert-mans UTF-8 ISO-8859-1 man/${i}/*.?
- done
- for i in cs hu pl; do
- convert-mans UTF-8 ISO-8859-2 man/${i}/*.?
- done
- convert-mans UTF-8 EUC-JP man/ja/*.?
- convert-mans UTF-8 KOI8-R man/ru/*.?
- convert-mans UTF-8 ISO-8859-9 man/tr/*.?
- make
- make install
- cp -v etc/{limits,login.access} /etc
- sed -e's@#MD5_CRYPT_ENAB.no@MD5_CRYPT_ENAB yes@' \
- -e 's@/var/spool/mail@/var/mail@' \
- etc/login.defs > /etc/login.defs
- # sed -i 's@DICTPATH.*@DICTPATH\t/lib/cracklib/pw_dict@' \
- # /etc/login.defs
- mv -v /usr/bin/passwd /bin
- mv -v /lib/libshadow.*a /usr/lib
- rm -v /lib/libshadow.so
- ln -sfv ../../lib/libshadow.so.0 /usr/lib/libshadow.so
- mkdir -v /etc/default
- pwconv
- grpconv
- passwd root
- cd /sources
- # 6.51. Sysklogd-1.4.1
- cd /sources
- tar xvf /lfs-sources/sysklogd-1.4.1.tar.gz
- cd sysklogd-1.4.1
- patch -Np1 -i /lfs-sources/sysklogd-1.4.1-fixes-1.patch
- patch -Np1 -i /lfs-sources/sysklogd-1.4.1-8bit-1.patch
- make
- make install
- cat > /etc/syslog.conf << "EOF"
- # Begin /etc/syslog.conf
- auth,authpriv.* -/var/log/auth.log
- *.*;auth,authpriv.none -/var/log/sys.log
- daemon.* -/var/log/daemon.log
- kern.* -/var/log/kern.log
- mail.* -/var/log/mail.log
- user.* -/var/log/user.log
- *.emerg *
- # End /etc/syslog.conf
- EOF
- cd /sources
- # 6.52. Sysvinit-2.86
- cd /sources
- tar xvf /lfs-sources/sysvinit-2.86.tar.gz
- cd sysvinit-2.86
- sed -i 's@Sending processes@& started by init@g' \
- src/init.c
- make -C src
- make -C src install
- cat > /etc/inittab << "EOF"
- # Begin /etc/inittab
- id:3:initdefault:
- si::sysinit:/etc/rc.d/init.d/rc sysinit
- l0:0:wait:/etc/rc.d/init.d/rc 0
- l1:S1:wait:/etc/rc.d/init.d/rc 1
- l2:2:wait:/etc/rc.d/init.d/rc 2
- l3:3:wait:/etc/rc.d/init.d/rc 3
- l4:4:wait:/etc/rc.d/init.d/rc 4
- l5:5:wait:/etc/rc.d/init.d/rc 5
- l6:6:wait:/etc/rc.d/init.d/rc 6
- ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
- su:S016:once:/sbin/sulogin
- 1:2345:respawn:/sbin/agetty tty1 9600
- 2:2345:respawn:/sbin/agetty tty2 9600
- 3:2345:respawn:/sbin/agetty tty3 9600
- 4:2345:respawn:/sbin/agetty tty4 9600
- 5:2345:respawn:/sbin/agetty tty5 9600
- 6:2345:respawn:/sbin/agetty tty6 9600
- # End /etc/inittab
- EOF
- cd /sources
- # 6.53. Tar-1.15.1
- cd /sources
- tar xvf /lfs-sources/tar-1.15.1.tar.bz2
- cd tar-1.15.1
- patch -Np1 -i /lfs-sources/tar-1.15.1-gcc4_fix_tests-1.patch
- patch -Np1 -i /lfs-sources/tar-1.15.1-sparse_fix-1.patch
- patch -Np1 -i /lfs-sources/tar-1.15.1-security_fixes-1.patch
- ./configure --prefix=/usr --bindir=/bin --libexecdir=/usr/sbin
- make
- make install
- cd /sources
- # 6.54. Texinfo-4.8
- cd /sources
- tar xvf /lfs-sources/texinfo-4.8.tar.bz2
- cd texinfo-4.8
- patch -Np1 -i /lfs-sources/texinfo-4.8-multibyte-1.patch
- patch -Np1 -i /lfs-sources/texinfo-4.8-tempfile_fix-2.patch
- ./configure --prefix=/usr
- make
- make install
- make TEXMF=/usr/share/texmf install-tex
- cd /usr/share/info
- rm dir
- for f in *
- do install-info $f dir 2>/dev/null
- done
- cd /sources
- # 6.55. Udev-096
- cd /sources
- tar xvf /lfs-sources/udev-096.tar.bz2
- cd udev-096
- tar xf /lfs-sources/udev-config-6.2.tar.bz2
- install -dv /lib/{firmware,udev/devices/{pts,shm}}
- mknod -m0666 /lib/udev/devices/null c 1 3
- ln -sv /proc/self/fd /lib/udev/devices/fd
- ln -sv /proc/self/fd/0 /lib/udev/devices/stdin
- ln -sv /proc/self/fd/1 /lib/udev/devices/stdout
- ln -sv /proc/self/fd/2 /lib/udev/devices/stderr
- ln -sv /proc/kcore /lib/udev/devices/core
- make EXTRAS="extras/ata_id extras/cdrom_id extras/edd_id \
- extras/firmware extras/floppy extras/path_id \
- extras/scsi_id extras/usb_id extras/volume_id"
- make DESTDIR=/ \
- EXTRAS="extras/ata_id extras/cdrom_id extras/edd_id \
- extras/firmware extras/floppy extras/path_id \
- extras/scsi_id extras/usb_id extras/volume_id" install
- cp -v udev-config-6.2/[0-9]* /etc/udev/rules.d/
- install -m644 -D -v docs/writing_udev_rules/index.html \
- /usr/share/doc/udev-096/index.html
- cd /sources
- # 6.56. Util-linux-2.12r
- cd /sources
- tar xvf /lfs-sources/util-linux-2.12r.tar.bz2
- cd util-linux-2.12r
- sed -i 's@etc/adjtime@var/lib/hwclock/adjtime@g' \
- hwclock/hwclock.c
- mkdir -p /var/lib/hwclock
- patch -Np1 -i /lfs-sources/util-linux-2.12r-cramfs-1.patch
- ./configure
- make HAVE_KILL=yes HAVE_SLN=yes
- make HAVE_KILL=yes HAVE_SLN=yes install
- cd /sources
- # 6.57. Vim-7.0
- cd /sources
- tar xvf /lfs-sources/vim-7.0.tar.bz2
- cd vim70
- patch -Np1 -i /lfs-sources/vim-7.0-fixes-7.patch
- patch -Np1 -i /lfs-sources/vim-7.0-mandir-1.patch
- patch -Np1 -i /lfs-sources/vim-7.0-spellfile-1.patch
- echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h
- ./configure --prefix=/usr --enable-multibyte
- make
- make install
- rm -f /usr/share/vim/vim70/tutor/tutor.{gr,pl,ru,sk}
- rm -f /usr/share/vim/vim70/tutor/tutor.??.*
- ln -sv vim /usr/bin/vi
- for L in "" fr it pl ru; do
- ln -sv vim.1 /usr/share/man/$L/man1/vi.1
- done
- ln -sv ../vim/vim70/doc /usr/share/doc/vim-7.0
- cat > /etc/vimrc << "EOF"
- " Begin /etc/vimrc
- set nocompatible
- set backspace=2
- syntax on
- if (&term == "iterm") || (&term == "putty")
- set background=dark
- endif
- " End /etc/vimrc
- EOF
- vim -c ':options'
- # To use these spell files, some configuration in /etc/vimrc is needed, e.g.:
- # set spelllang=en,ru
- # set spell
- cd /sources
- rm -rf /sources/*
- ##### 第七章 配置系统启动脚本 #####
- cd /sources
- tar xvf /lfs-sources/lfs-bootscripts-6.2.tar.bz2
- cd lfs-bootscripts-6.2
- make install
- cd /sources
- rm -rf /sources/*
复制代码
# 手册的 第七章 配置启动脚本 到 第八章 8.2. 创建 /etc/fstab 文件 这部分可以放在一起来做。这里可能会遗漏了一些,欲知详情的还是看下手册。所以这里是需要根据具体情况进行修改的。
########## 7.5. Configuring the setclock Script ##########
cat > /etc/sysconfig/clock << "EOF"
# Begin /etc/sysconfig/clock
UTC=0
# End /etc/sysconfig/clock
EOF
########## 7.8. Creating the /etc/inputrc File ##########
# /etc/inputrc File
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 inside 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
########## 7.9. The Bash Shell Startup Files ##########
locale -a
LC_ALL=en_GB.iso88591 locale charmap
LC_ALL=en_GB.ISO-8859-1 locale language
LC_ALL=en_GB.ISO-8859-1 locale charmap
LC_ALL=en_GB.ISO-8859-1 locale int_curr_symbol
LC_ALL=en_GB.ISO-8859-1 locale int_prefix
cat > /etc/profile << "EOF"
# Begin /etc/profile
#export LANG=POSIX
export LANG=en_GB.ISO-8859-1
export INPUTRC=/etc/inputrc
# End /etc/profile
EOF
echo "HOSTNAME=LFS6.25" > /etc/sysconfig/network
########## 7.11. Customizing the /etc/hosts File ##########
cat > /etc/hosts << "EOF"
# Begin /etc/hosts (network card version)
127.0.0.1 localhost
192.168.1.2 localhost LFS6.25
#192.168.1.2 HOSTNAME.example.org [alias1] [alias2 ...]
# End /etc/hosts (network card version)
EOF
########## 7.12. Creating custom symlinks to devices ##########
# 运行下面的命令得出 /dev/hdd 或者 /dev/hdc 这两个IDE接口的光驱设备的序号。详见手册。
# cd /sys/block/hdd
# udevtest /block/hdd
# cd /sys/block/hdc
# udevtest /block/hdc
cat >/etc/udev/rules.d/82-cdrom.rules << EOF
# Custom CD-ROM symlinks
SUBSYSTEM=="block", ENV{ID_TYPE}=="cd", ENV{ID_PATH}=="pci-0000:00:0f.1-ide-1:0", SYMLINK+="cdrom"
SUBSYSTEM=="block", ENV{ID_TYPE}=="cd", ENV{ID_PATH}=="pci-0000:00:0f.1-ide-1:1", SYMLINK+="dvdrw"
EOF
########## 7.13. Configuring the network Script ##########
## 运行下面的这条命令得出网卡的MAC地址,然后通过创建的 /etc/udev/rules.d/26-network.rules 这个文件将MAC地址和网络接口名称对应。
# grep -H . /sys/class/net/*/address
cat > /etc/udev/rules.d/26-network.rules << EOF
ACTION=="add", SUBSYSTEM=="net", SYSFS{address}=="00:11:09:d0:00:6f", NAME="eth0"
ACTION=="add", SUBSYSTEM=="net", SYSFS{address}=="00:00:00:00:00:00", NAME="lo"
EOF
########## 7.13.2 Creating Network Interface Configuration Files ##########
##### 配置 eth0 ,如果有多块网卡可以用类似的方法再建一个类似的文件 #####
cd /etc/sysconfig/network-devices &&
mkdir -v ifconfig.eth0 &&
cat > ifconfig.eth0/ipv4 << "EOF"
ONBOOT=yes
SERVICE=ipv4-static
IP=192.168.1.30
GATEWAY=192.168.1.1
PREFIX=24
BROADCAST=192.168.1.255
EOF
########## 7.13.3. Creating the /etc/resolv.conf File ##########
########## 通过下面这个修改文件来指定DNS ##########
cat > /etc/resolv.conf << "EOF"
# Begin /etc/resolv.conf
domain localhost
nameserver 218.104.78.3
nameserver 218.104.78.2
# End /etc/resolv.conf
EOF
########## 8. Making the LFS System Bootable ##########
########## 创建 /etc/fstab 文件,此文件如果出错,系统将无法正常启动 ##########
cat > /etc/fstab << "EOF"
# Begin /etc/fstab
# file system mount-point type options dump fsck
# order
/dev/sda2 / xfs defaults 1 1
#/dev/hda3 swap swap pri=1 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
devpts /dev/pts devpts gid=4,mode=620 0 0
shm /dev/shm tmpfs defaults 0 0
# End /etc/fstab
EOF
- ###### 编译内核 #####
- # 8.3. Linux-2.6.16.38
- cd /sources
- tar xvf /lfs-sources/linux-2.6.16.38.tar.bz2
- cd linux-2.6.16.38
- patch -Np1 -i /lfs-sources/linux-2.6.16.27-utf8_input-1.patch
- make mrproper
- make menuconfig
- make
- make modules_install
- cp -v arch/i386/boot/bzImage /boot/lfskernel-2.6.16.38
- cp -v System.map /boot/System.map-2.6.16.38
- cp -v .config /boot/config-2.6.16.38
- install -d /usr/share/doc/linux-2.6.16.38 &&
- cp -r Documentation/* /usr/share/doc/linux-2.6.16.38
- cd /sources
复制代码
在编译内核的时候,注意要在filesystem这项中加上需要支持的文件系统。暂时不必做多少选择,只加入文件系统的支持就可以了。因为,不会一次就做得那么好,以后重编译内核是肯定要做的事情。备份.config文件..cp /boot/config-2.6.16.38 /boot/.config_old ####### 8.4. Making the LFS System Bootable #######
## GRUB 引导装载程序 ##
########## floppy (没有软驱,此处可忽略)##########
# dd if=/boot/grub/stage1 of=/dev/fd0 bs=512 count=1
# dd if=/boot/grub/stage2 of=/dev/fd0 bs=512 seek=1
grub
# 下面这两段按具体的配置来写。不论什么硬盘,grub这里只认hd0为第一硬盘,(hd0,0)就是表示第一硬盘第一分区。多块硬盘的需要注意一下。
#root (hd0,2)
# 这里的 setup (hd0) 表示把引导代码写到hd0这整块硬盘的最前面的一个扇区MBR的前446字节。当然也可以写到系统分区的第一扇区。只要你要办法让它启动就可以了。
#setup (hd0)
#quit
cat > /boot/grub/menu.lst << "EOF"
# Begin /boot/grub/menu.lst
# By default boot the first menu entry.
default 0
# Allow 30 seconds before booting the default.
timeout 30
# Use prettier colors.
color green/black light-green/black
# The first entry is for LFS.
title LFS 6.2
root (hd0,1)
kernel /boot/lfskernel-2.6.16.38 root=/dev/sda2
EOF
mkdir -v /etc/grub &&
ln -sv /boot/grub/menu.lst /etc/grub
echo 6.2-5 > /etc/lfs-release
退出chroot环境#手工的敲命令退出chroot环境
exit
#使用这条命令来确定已经退出了chroot环境。回到了主系统中。
cat /etc/issue
缷载临时挂载的文件系统。
#缷载从主系统挂载到LFS系统中的 /lfs-sources 并删除$LFS/lfs-source 空目录。- umount $LFS/lfs-sources
- rmdir $LFS/lfs-sources
复制代码- umount -v $LFS/dev/pts
- umount -v $LFS/dev/shm
- umount -v $LFS/dev
- umount -v $LFS/proc
- umount -v $LFS/sys
- umount -v $LFS
复制代码
重启机器,尝试启动LFS系统。如果不能正常启动,从上面提到的几个地方。比如配置文件,或者编译内核。
LFS手册上有说/tools目录是在构建LFS系统的过程中构建的临时的编译环境,在LFS完成之后这个工具目录可以删除。但是很多人都还保留它。如果你还想用它来编译系统,也可以留着。用做LFS同样的方法, mount -vo bind /tools ${LFS}/tools 挂载到目标系统就可以了。 |
|