對(duì)于做過一兩次LFS的朋友,想必對(duì)LFS的漫長(zhǎng)制作時(shí)間影象深刻,特別是對(duì)機(jī)器不太好的朋友,有時(shí)候LFS的制作時(shí)間真是“可怕”,有時(shí)候不得以必須關(guān)機(jī)然后重新啟動(dòng)并恢復(fù)到工作狀態(tài),但對(duì)一些不太清楚LFS的工作原理的朋友,可能一時(shí)無(wú)法正確的恢復(fù)到工作狀態(tài),因此為了能成功的完成LFS,有的會(huì)開個(gè)一兩天的機(jī)器不關(guān),本人特別針對(duì)這個(gè)問題寫了一些自己的經(jīng)驗(yàn),以下的過程全部經(jīng)過測(cè)試,應(yīng)該是正確的,希望能給還在LFS制作中的朋友減輕一些“痛苦”。
為了說(shuō)明方便,例子采用VMWare5.0的環(huán)境下開始的,但也同樣適合使用真實(shí)機(jī)器的情況,只是用真實(shí)的機(jī)器需要在相應(yīng)的磁盤設(shè)備名上修改成實(shí)際的設(shè)備名。(用VMWare只是為了說(shuō)明方便,VMware本身就具有暫停的功能,所以不必計(jì)較這個(gè)問題)
文章使用VMWare5.0虛擬的SCSI設(shè)備,并使用sda設(shè)備名,sda1用于swap,而sda2用于目標(biāo)系統(tǒng)的根目錄。
以下是按照LFS6.1.1-3里面的章節(jié)數(shù)寫的,如果你使用的LFS-Book與下面的章節(jié)數(shù)有出入,以章節(jié)數(shù)后面的標(biāo)題為準(zhǔn)。
開始~4.4. Setting Up the Environment
從頭開始好了,沒什么好可惜的。
4.5. About SBUs~5.33. Stripping
從現(xiàn)在開始一直到第五章結(jié)束,也就是完成Stripping中間的步驟中如果重新啟動(dòng)的恢復(fù)步驟:
1.重新啟動(dòng)計(jì)算機(jī),并從LiveCD啟動(dòng)
2.加載分區(qū)
export LFS=/mnt/lfs
mkdir -pv $LFS
mount /dev/sda2 $LFS
3.加載交換分區(qū)(如果不想用交換分區(qū)或者沒有交換分區(qū)可跳過此步驟)
swapon /dev/sda1
4.建立工具鏈的鏈接
ln -sv $LFS/tools /
5.創(chuàng)建lfs用戶
groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs
passwd lfs
chown -v lfs $LFS/tools
chown -v lfs $LFS/sources
su - lfs
6.建立lfs用戶的環(huán)境
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
7.檢查一下
export命令查看輸出,應(yīng)該是
declare -x HOME="/home/lfs"
declare -x LC_ALL="POSIX"
declare -x LFS="/mnt/lfs"
declare -x OLDPWD
declare -x PATH="/tools/bin:/bin:/usr/bin"
declare -x PS1="\u:\w\$ "
declare -x PWD="/home/lfs"
declare -x SHLVL="1"
declare -x TERM="linux"
基本上就恢復(fù)工作狀態(tài)了。
6.1. Introduction
這個(gè)時(shí)候也許你想睡覺關(guān)機(jī)了,那么重新開機(jī)后回到工作狀態(tài)的步驟是:
1.重新啟動(dòng)計(jì)算機(jī),并從LiveCD啟動(dòng)
2.加載分區(qū)
export LFS=/mnt/lfs
mkdir -pv $LFS
mount /dev/sda2 $LFS
3.加載交換分區(qū)(如果不想用交換分區(qū)或者沒有交換分區(qū)可跳過此步驟)
swapon /dev/sda1
相關(guān)知識(shí)點(diǎn):
這時(shí)候已經(jīng)制作好了工具鏈,因此可以不需要建立根目錄下的tools鏈接了。
6.2. Mounting Virtual Kernel File Systems~6.8. Populating /dev
這個(gè)時(shí)候如果你關(guān)機(jī)或重新啟動(dòng),那么重新開機(jī)后回到工作狀態(tài)的步驟是:
1.重新啟動(dòng)計(jì)算機(jī),并從LiveCD啟動(dòng)
2.加載分區(qū)
export LFS=/mnt/lfs
mkdir -pv $LFS
mount /dev/sda2 $LFS
3.加載交換分區(qū)(如果不想用交換分區(qū)或者沒有交換分區(qū)可跳過此步驟)
swapon /dev/sda1
4.加載必要的文件系統(tǒng)
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
5.Chroot到目標(biāo)系統(tǒng)下
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
6.9. Linux-Libc-Headers-2.6.11.2~6.37. Bash-3.0
從現(xiàn)在開始一直到第六章的File-4.13之前,也就是Bash-3.0結(jié)束后,這個(gè)階段如果你關(guān)機(jī)或重新啟動(dòng),那么重新開機(jī)后回到工作狀態(tài)的步驟是:
1.重新啟動(dòng)計(jì)算機(jī),并從LiveCD啟動(dòng)
2.加載分區(qū)
export LFS=/mnt/lfs
mkdir -pv $LFS
mount /dev/sda2 $LFS
3.加載交換分區(qū)(如果不想用交換分區(qū)或者沒有交換分區(qū)可跳過此步驟)
swapon /dev/sda1
4.加載必要的文件系統(tǒng)
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
5.Chroot到目標(biāo)系統(tǒng)下
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
6.創(chuàng)建/dev下的設(shè)備文件
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.進(jìn)入編譯目錄
cd /sources
6.38. File-4.13~6.58. Udev-056
從現(xiàn)在開始一直到第六章的Udev-056完成之前,這個(gè)階段如果你關(guān)機(jī)或重新啟動(dòng),那么重新開機(jī)后回到工作狀態(tài)的步驟是:
1.重新啟動(dòng)計(jì)算機(jī),并從LiveCD啟動(dòng)
2.加載分區(qū)
export LFS=/mnt/lfs
mkdir -pv $LFS
mount /dev/sda2 $LFS
3.加載交換分區(qū)(如果不想用交換分區(qū)或者沒有交換分區(qū)可跳過此步驟)
swapon /dev/sda1
4.加載必要的文件系統(tǒng)
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
5.Chroot到目標(biāo)系統(tǒng)下
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.創(chuàng)建/dev下的設(shè)備文件
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.進(jìn)入編譯目錄
cd /sources
6.59. Util-linux-2.12q~6.60. About Debugging Symbols
從現(xiàn)在開始一直到第六章的Stripping Again之前,這個(gè)階段如果你關(guān)機(jī)或重新啟動(dòng),那么重新開機(jī)后回到工作狀態(tài)的步驟是:
1.重新啟動(dòng)計(jì)算機(jī),并從LiveCD啟動(dòng)
2.加載分區(qū)
export LFS=/mnt/lfs
mkdir -pv $LFS
mount /dev/sda2 $LFS
3.加載交換分區(qū)(如果不想用交換分區(qū)或者沒有交換分區(qū)可跳過此步驟)
swapon /dev/sda1
4.加載必要的文件系統(tǒng)
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
5.Chroot到目標(biāo)系統(tǒng)下
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.創(chuàng)建/dev下的設(shè)備文件
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.進(jìn)入編譯目錄
cd /sources
6.61. Stripping Again
如果現(xiàn)在重新啟動(dòng),那么重新開機(jī)后回到工作狀態(tài)的步驟是:
1.重新啟動(dòng)計(jì)算機(jī),并從LiveCD啟動(dòng)
2.加載分區(qū)
export LFS=/mnt/lfs
mkdir -pv $LFS
mount /dev/sda2 $LFS
3.加載交換分區(qū)(如果不想用交換分區(qū)或者沒有交換分區(qū)可跳過此步驟)
swapon /dev/sda1
4.加載必要的文件系統(tǒng)
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
5.Chroot到目標(biāo)系統(tǒng)下
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.創(chuàng)建/dev下的設(shè)備文件
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.進(jìn)入編譯目錄
cd /sources
6.62. Cleaning Up~結(jié)束
從現(xiàn)在開始一直到制作結(jié)束,重新開機(jī)后回到工作狀態(tài)的步驟是:
1.重新啟動(dòng)計(jì)算機(jī),并從LiveCD啟動(dòng)
2.加載分區(qū)
export LFS=/mnt/lfs
mkdir -pv $LFS
mount /dev/sda2 $LFS
3.加載交換分區(qū)(如果不想用交換分區(qū)或者沒有交換分區(qū)可跳過此步驟)
swapon /dev/sda1
4.加載必要的文件系統(tǒng)
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys
5.Chroot到目標(biāo)系統(tǒng)下
chroot "$LFS" /usr/bin/env -i
HOME=/root TERM="$TERM" PS1='u:w$ '
PATH=/bin:/usr/bin:/sbin:/usr/sbin
/bin/bash --login
6.創(chuàng)建/dev下的設(shè)備文件
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.進(jìn)入編譯目錄
cd /sources