Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1044798
  • 博文数量: 326
  • 博客积分: 10135
  • 博客等级: 上将
  • 技术积分: 2490
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-22 23:53
文章分类

全部博文(326)

文章存档

2014年(1)

2012年(4)

2011年(1)

2010年(4)

2009年(41)

2008年(44)

2007年(63)

2006年(168)

我的朋友

分类: LINUX

2007-04-23 14:20:53

从现在开始一直到第六章的Udev-056完成之前,这个阶段如果你关机或重新启动,那么重新开机后回到工作状态的步骤是:
  1.重新启动计算机,并从LiveCD启动
  2.加载分区
  export LFS=/mnt/lfs
  mkdir -pv $LFS
  mount /dev/sda2 $LFS
  3.加载交换分区(如果不想用交换分区或者没有交换分区可跳过此步骤)
  swapon /dev/sda1
  4.加载必要的文件系统
  mount -vt proc proc $LFS/proc
  mount -vt sysfs sysfs $LFS/sys
  5.Chroot到目标系统下
  chroot "$LFS" /tools/bin/env -i \
  HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
   PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
  /bin/bash --login +h
  6.创建/dev下的设备文件
  mount -nvt tmpfs none /dev
  mknod -m 622 /dev/console c 5 1
  mknod -m 666 /dev/null c 1 3
  mknod -m 666 /dev/zero c 1 5
  mknod -m 666 /dev/ptmx c 5 2
  mknod -m 666 /dev/tty c 5 0
  mknod -m 444 /dev/random c 1 8
  mknod -m 444 /dev/urandom c 1 9
  chown -v root:tty /dev/{console,ptmx,tty}
  ln -sv /proc/self/fd /dev/fd
  ln -sv /proc/self/fd/0 /dev/stdin
  ln -sv /proc/self/fd/1 /dev/stdout
  ln -sv /proc/self/fd/2 /dev/stderr
  ln -sv /proc/kcore /dev/core
  mkdir -v /dev/pts
  mkdir -v /dev/shm
  mount -vt devpts -o gid=4,mode=620 none /dev/pts
  mount -vt tmpfs none /dev/shm
  6.进入编译目录
  cd /sources
  export LFS=/sources

File-4.13
代码:
tar xvf $LFS/file-4.13.tar.bz2 cd file-4.13 ./configure --prefix=/usr make make install cd .. rm -rf file-4.13

Libtool-1.5.14
代码:
tar xvf $LFS/libtool-1.5.14.tar.bz2 cd libtool-1.5.14 ./configure --prefix=/usr make
测试:
代码:
make check
这里check不会有错
代码:
make install cd .. rm -rf libtool-1.5.14

Bzip2-1.0.3
代码:
tar xvf $LFS/bzip2-1.0.3.tar.bz2 cd bzip2-1.0.3 patch -Np1 -i $LFS/bzip2-1.0.3-install_docs-1.patch patch -Np1 -i $LFS/bzip2-1.0.3-bzgrep_security-1.patch 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 .. rm -rf bzip2-1.0.3

Diffutils-2.8.1
代码:
tar xvf $LFS/diffutils-2.8.1.tar.bz2 cd diffutils-2.8.1 ./configure --prefix=/usr make make install cd .. rm -rf diffutils-2.8.1

Kbd-1.12
代码:
tar xvf $LFS/kbd-1.12.tar.bz2 cd kbd-1.12 ./configure make make install cd .. rm -rf kbd-1.12

E2fsprogs-1.37
代码:
tar xvf $LFS/e2fsprogs-1.37.tar.bz2 cd e2fsprogs-1.37 sed -i -e 's/-DTEST/$(ALL_CFLAGS) &/' lib/e2p/Makefile.in mkdir -v build cd build ../configure --prefix=/usr --with-root-prefix="" \ --enable-elf-shlibs --disable-evms make
测试:
代码:
make check
这里check不会有错
代码:
make install make install-libs cd ../.. rm -rf e2fsprogs-1.37

Grep-2.5.1a
代码:
tar xvf $LFS/grep-2.5.1a.tar.bz2 cd grep-2.5.1a ./configure --prefix=/usr --bindir=/bin make
测试:
代码:
make check
这里check不会有错
代码:
make install cd .. rm -rf grep-2.5.1a

GRUB-0.96
代码:
tar xvf $LFS/grub-0.96.tar.bz2 cd grub-0.96 ./configure --prefix=/usr make
测试:
代码:
make check
这里check会报告“ufs2_stage1_5 is too big”这个错误,不用理会继续吧。
代码:
make install mkdir -v /boot/grub cp -v /usr/lib/grub/i386-pc/stage{1,2} /boot/grub cd .. rm -rf grub-0.96

Gzip-1.3.5
代码:
tar xvf $LFS/gzip-1.3.5.tar.bz2 cd gzip-1.3.5 patch -Np1 -i $LFS/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 .. rm -rf gzip-1.3.5

Hotplug-2004_09_23
代码:
tar xvf $LFS/hotplug-2004_09_23.tar.bz2 cd hotplug-2004_09_23 make install cp -v etc/hotplug/pnp.distmap /etc/hotplug rm -rfv /etc/init.d rm -fv /etc/hotplug/net.agent mkdir -v /lib/firmware cd .. rm -rf hotplug-2004_09_23

Man-1.5p
代码:
tar xvf $LFS/man-1.5p.tar.bz2 cd man-1.5p sed -i 's@-is@&R@g' configure sed -i 's@MANPATH./usr/man@#&@g' src/man.conf.in ./configure -confdir=/etc make make install cd .. rm -rf man-1.5p

Make-3.80
代码:
tar xvf $LFS/make-3.80.tar.bz2 cd make-3.80 ./configure --prefix=/usr make
测试:
代码:
make check
这里check不会有错
代码:
make install cd .. rm -rf make-3.80

Module-Init-Tools-3.1
代码:
tar xvf $LFS/module-init-tools-3.1.tar.bz2 tar xvf $LFS/module-init-tools-testsuite-3.1.tar.bz2 cd module-init-tools-3.1 touch modprobe.conf.5 ./configure make check make distclean ./configure --prefix="" --enable-zlib make make install cd .. rm -rf module-init-tools-3.1

Patch-2.5.4
代码:
tar xvf $LFS/patch-2.5.4.tar.bz2 cd patch-2.5.4 CPPFLAGS=-D_GNU_SOURCE ./configure --prefix=/usr make make install cd .. rm -rf patch-2.5.4

Procps-3.2.5
代码:
tar xvf $LFS/procps-3.2.5.tar.bz2 cd procps-3.2.5 make make install cd .. rm -rf procps-3.2.5

Psmisc-21.6
代码:
tar xvf $LFS/psmisc-21.6.tar.bz2 cd psmisc-21.6 ./configure --prefix=/usr --exec-prefix="" make make install mv -v /bin/pstree* /usr/bin ln -sv killall /bin/pidof cd .. rm -rf psmisc-21.6

Shadow-4.0.9
代码:
tar xvf $LFS/shadow-4.0.9.tar.bz2 cd shadow-4.0.9 ./configure --libdir=/lib --enable-shared sed -i 's/groups$(EXEEXT) //' src/Makefile sed -i '/groups/d' man/Makefile 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.linux > /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
一定要设置root的密码,否则重新启动后无法登陆。
代码:
cd .. rm -rf shadow-4.0.9

Sysklogd-1.4.1
代码:
tar xvf $LFS/sysklogd-1.4.1.tar.bz2 cd sysklogd-1.4.1 patch -Np1 -i $LFS/sysklogd-1.4.1-fixes-1.patch make make install
设置syslog的配置文件
代码:
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 * # log the bootscript output: local2.* -/var/log/boot.log # End /etc/syslog.conf EOF
代码:
cd .. rm -rf sysklogd-1.4.1

Sysvinit-2.86
代码:
tar xvf $LFS/sysvinit-2.86.tar.bz2 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 -I '\033(K' tty1 9600 2:2345:respawn:/sbin/agetty -I '\033(K' tty2 9600 3:2345:respawn:/sbin/agetty -I '\033(K' tty3 9600 4:2345:respawn:/sbin/agetty -I '\033(K' tty4 9600 5:2345:respawn:/sbin/agetty -I '\033(K' tty5 9600 6:2345:respawn:/sbin/agetty -I '\033(K' tty6 9600 # End /etc/inittab EOF
代码:
cd .. rm -rf sysvinit-2.86

Tar-1.15.1
代码:
tar xvf $LFS/tar-1.15.1.tar.bz2 cd tar-1.15.1 patch -Np1 -i $LFS/tar-1.15.1-sparse_fix-1.patch ./configure --prefix=/usr --bindir=/bin --libexecdir=/usr/sbin make
测试:
代码:
make check
这里check应能通过
代码:
make install cd .. rm -rf tar-1.15.1

Udev-056
代码:
tar xvf $LFS/udev-056.tar.bz2 cd udev-056 make udevdir=/dev
测试:
代码:
make test
这里test可能有错误,不必理会。
代码:
make DESTDIR=/ udevdir=/dev install cp -v $LFS/udev-config-4.rules /etc/udev/rules.d/25-lfs.rules /sbin/udevstart cd .. rm -rf udev-056


从现在开始一直到第六章的Stripping Again之前,这个阶段如果你关机或重新启动,那么重新开机后回到工作状态的步骤是:
  1.重新启动计算机,并从LiveCD启动
  2.加载分区
  export LFS=/mnt/lfs
  mkdir -pv $LFS
  mount /dev/sda2 $LFS
  3.加载交换分区(如果不想用交换分区或者没有交换分区可跳过此步骤)
  swapon /dev/sda1
  4.加载必要的文件系统
  mount -vt proc proc $LFS/proc
  mount -vt sysfs sysfs $LFS/sys
  5.Chroot到目标系统下
  chroot "$LFS" /tools/bin/env -i \
  HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
   PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
  /bin/bash --login +h
  6.创建/dev下的设备文件
  mount -nvt tmpfs none /dev
  /sbin/udevstart
  mkdir -v /dev/pts
  mkdir -v /dev/shm
  mount -vt devpts -o gid=4,mode=620 none /dev/pts
  mount -vt tmpfs none /dev/shm
  6.进入编译目录
  cd /sources
  export LFS=/sources

Util-linux-2.12q
代码:
tar xvf $LFS/util-linux-2.12q.tar.bz2 cd util-linux-2.12q sed -i 's@etc/adjtime@var/lib/hwclock/adjtime@g' \ hwclock/hwclock.c mkdir -p /var/lib/hwclock patch -Np1 -i $LFS/util-linux-2.12q-cramfs-1.patch patch -Np1 -i $LFS/util-linux-2.12q-umount_fix-1.patch ./configure make HAVE_KILL=yes HAVE_SLN=yes make HAVE_KILL=yes HAVE_SLN=yes install mv /usr/bin/logger /bin cd .. rm -rf util-linux-2.12q
相关知识点:
  util-linux-2.12q如果在GCC4下编译会有一个Bug,需要打补丁,建议使用util-linux-2.12r。


退出chroot环境:
代码:
logout

为Strip而进入chroot环境:
代码:
chroot $LFS /tools/bin/env -i \ HOME=/root TERM=$TERM PS1='\u:\w\$ ' \ PATH=/bin:/usr/bin:/sbin:/usr/sbin \ /tools/bin/bash --login

如果现在重新启动,那么重新开机后回到工作状态的步骤是:
  1.重新启动计算机,并从LiveCD启动
  2.加载分区
  export LFS=/mnt/lfs
  mkdir -pv $LFS
  mount /dev/sda2 $LFS
  3.加载交换分区(如果不想用交换分区或者没有交换分区可跳过此步骤)
  swapon /dev/sda1
  4.加载必要的文件系统
  mount -vt proc proc $LFS/proc
  mount -vt sysfs sysfs $LFS/sys
  5.Chroot到目标系统下
  chroot $LFS /tools/bin/env -i \
  HOME=/root TERM=$TERM PS1='\u:\w\$ ' \
  PATH=/bin:/usr/bin:/sbin:/usr/sbin \
  /tools/bin/bash --login
  6.创建/dev下的设备文件
  mount -nvt tmpfs none /dev
  /sbin/udevstart
  mkdir -v /dev/pts
  mkdir -v /dev/shm
  mount -vt devpts -o gid=4,mode=620 none /dev/pts
  mount -vt tmpfs none /dev/shm
  6.进入编译目录
  cd /sources
  export LFS=/sources

Strip
代码:
/tools/bin/find /{,usr/}{bin,lib,sbin} -type f \ -exec /tools/bin/strip --strip-debug '{}' ';'

退出chroot环境
代码:
logout

为最后的设置进入chroot环境
代码:
chroot "$LFS" /usr/bin/env -i \ HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \ PATH=/bin:/usr/bin:/sbin:/usr/sbin \ /bin/bash --login

从现在开始一直到制作结束,重新开机后回到工作状态的步骤是:
  1.重新启动计算机,并从LiveCD启动
  2.加载分区
  export LFS=/mnt/lfs
  mkdir -pv $LFS
  mount /dev/sda2 $LFS
  3.加载交换分区(如果不想用交换分区或者没有交换分区可跳过此步骤)
  swapon /dev/sda1
  4.加载必要的文件系统
  mount -vt proc proc $LFS/proc
  mount -vt sysfs sysfs $LFS/sys
  5.Chroot到目标系统下
  chroot "$LFS" /usr/bin/env -i \
  HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
   PATH=/bin:/usr/bin:/sbin:/usr/sbin \
  /bin/bash --login
  6.创建/dev下的设备文件
  mount -nvt tmpfs none /dev
  /sbin/udevstart
  mkdir -v /dev/pts
  mkdir -v /dev/shm
  mount -vt devpts -o gid=4,mode=620 none /dev/pts
  mount -vt tmpfs none /dev/shm
  6.进入编译目录
  cd /sources
  export LFS=/sources

LFS-Bootscripts-3.2.1
代码:
tar xvf lfs-bootscripts-3.2.1.tar.bz2 cd lfs-bootscripts-3.2.1 make install cd .. rm -rf lfs-bootscripts-3.2.1

时间设置(Configuring the setclock Script)
代码:
cat > /etc/sysconfig/clock << "EOF" # Begin /etc/sysconfig/clock UTC=1 # End /etc/sysconfig/clock EOF

设置bash下的键盘功能键设置
代码:
cat > /etc/inputrc << "EOF" set horizontal-scroll-mode Off set meta-flag On set input-meta On set convert-meta Off set output-meta On set bell-style none "\eOd": backward-word "\eOc": forward-word "\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 "\eOH": beginning-of-line "\eOF": end-of-line "\e[H": beginning-of-line "\e[F": end-of-line EOF

设置Bash Shell启动文件(The Bash Shell Startup Files)
代码:
cat > /etc/profile << "EOF" # Begin /etc/profile export LANG=zh_CN.GB18030 export INPUTRC=/etc/inputrc # End /etc/profile EOF

设置本地网络名
代码:
echo "HOSTNAME=mylinux" > /etc/sysconfig/network

设置hosts文件
代码:
cat > /etc/hosts << "EOF" # Begin /etc/hosts (no network card version) 127.0.0.1 mylinux localhost # End /etc/hosts (no network card version) EOF

设置网络的静态地址
代码:
cd /etc/sysconfig/network-devices && mkdir -v ifconfig.eth0 && cat > ifconfig.eth0/ipv4 << "EOF" ONBOOT=yes SERVICE=ipv4-static IP=192.168.1.1 GATEWAY=192.168.1.2 PREFIX=24 BROADCAST=192.168.1.255 EOF
注意:IP、GATEWAY、BROADCAST的地址根据自己的实际情况设置。

设置DNS

代码:
cat > /etc/resolv.conf << "EOF" # Begin /etc/resolv.conf nameserver 你的首个DNS的地址 nameserver 你的第二DNS的地址 # End /etc/resolv.conf EOF

建立fstab文件
代码:
cat > /etc/fstab << "EOF" # Begin /etc/fstab # file system mount-point type options dump fsck # order /dev/sda2 / xfs defaults 1 1 /dev/sda1 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
注意:这里的磁盘名以及文件系统名需要根据实际情况修改。

安装内核Linux-2.6.11.12

代码:
cd /sources tar xvf linux-2.6.11.12.tar.bz2 cd linux-2.6.11.12 make mrproper make menuconfig
根据你的机器实际情况配置内核选项,这里为了说明方便,以VMWare5.0为基础虚拟的硬件来配置内核如果你想支持loop设备,那么应在Device Drivers->Block devices加入Loopback device support和Cryptoloop Support的支持

如果在建立虚拟机的时候是选择的SCSI的磁盘,那么应该在Device Drivers->SCSI device support->SCSI low-level drivers下加入BusLogic SCSI support的支持,可以采用编译到内核来避免未用initrd脚本来加载模块而导致启动失败

如果想支持网络则应该在Device Drivers->Networking support->Ethernet (10 or 100Mbit)加入AMD PCnet32 PCI support的支持,可以采用编译到内核也可以编译成模块的方式

如果想支持声卡则应该在Device Drivers->Sound->Advanced Linux Sound Architecture->PCI devices加入(Creative) Ensoniq AudioPCI 1371/1373的支持,编译成模块即可
文件系统的支持,需要根据之前将目标系统分区格式化的情况而定,使用了什么文件系统就需要加入该文件系统的支持,因之前采用的是Xfs文件系统,因此在File Systems->XFS support加入XFS的支持,可以采用编译到内核来避免未用initrd脚本来加载模块而导致启动失败

可以保存退出了
代码:
make make modules_install cp -v arch/i386/boot/bzImage /boot/lfskernel-2.6.11.12 cp -v System.map /boot/System.map-2.6.11.12 cp -v .config /boot/config-2.6.11.12

安装Grub,使系统能启动,这里设置需要根据情况而修改,这里以之前介绍的分区设置为例:
代码:
grub
输入root (hd0,1)
输入setup (hd0)
quit

设置grub启动菜单
代码:
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.1.1 root (hd0,1) kernel /boot/lfskernel-2.6.11.12 root=/dev/sda2 EOF
注意:这里root后面的磁盘分区需要根据实际情况调整。

将menu.lst连接到/etc目录下

代码:
mkdir -v /etc/grub ln -sv /boot/grub/menu.lst /etc/grub

退出制作环境:
代码:
logout

现在已经完成了lfs的安装,可以重新启动来运行我们自己的系统咯!

Grub启动界面

启动完成




(转载请保持文章的完整性,请注明作者和出处)


                               作者:冲天飞豹(youbest)
                               Email:youbest@sina.com
                               2006年2月25日


更新日志:
2006年3月14日:
开始工具链的制作

tar xvf /lfs-sources/binutils-2.15.94.0.2.2.tar.bz2
命令之前加一条命令:
代码:
cd $LFS/sources
由linuxsir上的aiai报告。

第六章的Readline-5.0
漏掉一条命令
代码:
mv -v /lib/lib{readline,history}.a /usr/lib
由linuxsir上的Abull发现并报告。

2006年3月17日:
为方便阅读、避免造成看错命令,修改部分命令表达方式

代码:
SPECFILE=`gcc --print-file specs`
改为
代码:
SPECFILE=$(gcc --print-file specs)


代码:
export TCLPATH=`pwd`
改为
代码:
export TCLPATH=$(pwd)


代码:
perl -pi -e 's@ /tools/lib/ld-linux.so.2@ /lib/ld-linux.so.2@g;' \ -e 's@\*startfile_prefix_spec:\n@$_/usr/lib/ @g;' \ `gcc --print-file specs`
改为
代码:
perl -pi -e 's@ /tools/lib/ld-linux.so.2@ /lib/ld-linux.so.2@g;' \ -e 's@\*startfile_prefix_spec:\n@$_/usr/lib/ @g;' \ $(gcc --print-file specs)
由linuxsir上的终极幻想建议。

2006年3月20日:
输入上的错误
将linux-Lib-Headers-2.6.11.2修正为linux-lib-headers-2.6.11.2
由cublog上的ops805@gmail.com发现并报告

2006年3月27日:
将bash-doc-3.0.tar.bz2误写为bash-doc-3.0.tar.gz
已改正过来
由linuxsir上的yoshubom发现并报告

2006年8月11日:
在弥补删除binutils的方法中漏掉一条命令
../binutils-2.15.94.0.2.2/configure --prefix=/tools --disable-nls \
--enable-shared --with-lib-path=/tools/lib
已增加
由linuxsir上的diyself发现并报告

2006年9月11日:
localedef -i zh_TW -f EUC_TW zh_CN
改为
localedef -i zh_TW -f EUC-TW zh_CN
由linuxsir上的stonebreaker发现并报告

2006年9月11日:
在制作工具链开始处增加了对tar xvf命令的解释。
阅读(2436) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~