重走LFS之路:(三) 磁碟初始化與原始碼準備

@郝平睿發表於2015-04-04

當硬體部分都準備就緒,就可以開始動手來準備軟體了。不過在開始編譯之前需要先做一件事,就像Windows中說的要格式化分割槽。雖然我真心不喜歡用Linux和Windows比,因為那樣著實像是在英語和漢語之間來回翻譯,想想就知道印歐語系和漢藏語系兩門語言跨語系表述是多彆扭的事。

(題圖來自: techradar.com)

在Linux中,我們把這個操作叫做建立檔案系統。Linux使用的檔案系統是ext系列和swap,其中swap只用作交換分割槽的格式,所謂交換分割槽可以理解為虛擬記憶體。

此時我們已經建立了三個分割槽/dev/sdb1 /dev/sdb2 /dev/sdb5,其中/dev/sdb1用作引導分割槽,我們將其檔案系統建立為ext2,雖然實測ext4也沒問題,但是可能是為了相容一些老的東西吧,習慣上引導分割槽還是用ext2。作為swap分割槽的/dev/sdb2單獨有分割槽格式,就叫做swap。剩下的/dev/sdb5使用ext4就好了。

sudo mkfs -v -t ext2 /dev/sdb1
sudo mkswap /dev/sdb2
sudo mkfs -v -t ext4 /dev/sdb5

1-mkfs&mkswap

建立檔案系統後,就可以掛載,然後使用這塊空間了。不過在此之前為了方便,我們來加個環境變數

export LFS=/mnt/lfs

從此以後,我們就以$LFS來作為lfs工程的儲存根目錄,只不過需要記得,每次宿主系統重啟之後,都需要重新export和mount,如果嫌這樣太麻煩,可以把環境變數定義和分割槽掛載寫入使用者配置檔案~/.bashrc

建立$LFS,用到p和v兩個選項,p是parents,如果父目錄不存在就一路新建,v會建立成功後回顯資訊。

sudo mkdir -pv $LFS

此時回顯了一條資訊

mkdir: created directory `/mnt/lfs’

當看到這條回顯資訊時證明已經新建成功,接下來我們把lfs工程的主要儲存分割槽/dev/sdb5掛載到這個目錄上

sudo mount -v -t ext4 /dev/sdb5 $LFS

其中-v選項依然是操作成功後回顯資訊,而值得注意的是-t選項,由它來指定需要掛載的是什麼檔案系統的分割槽,在稍微老一點的linux中掛載NTFS時候可能需要用到這個選項,保險起見我們還是顯式定義了這個引數。

/dev/sdb5 on /mnt/lfs type ext4 (rw)

當看到這條回顯資訊的時候,證明/dev/sdb5分割槽已經成功地以讀寫方式掛載到了/mnt/lfs目錄,接下來我們就可以像操作一個目錄一樣地操作這個分割槽。如果不太放心自己的$LFS定義的是否正確,可以用echo列印出來看看

echo $LFS

至此我們就可以在$LFS上面來下載和編譯我們所需的lfs元件了,不過在此之前為了方便,我們需要把$LFS目錄的屬主改為當前使用者,否則每次不危險的操作都加sudo得多彆扭。順便把等下要用到的儲存下載原始碼的路徑$LFS/src一起新建出來

sudo chown -R purehow.purehow $LFS
mkdir $LFS/src

2-mount&createsrc

現在我們就可以進入$LFS/src來下載所需的元件,此時我們手動一個一個下載可就太痛苦了,好在wget有一個–input-file選項可以指定下載列表。官方提供了下載列表,我們此時需要下載兩個檔案,一個是檔案下載列表wget-list,另一個是這個列表中每個檔案的md5sum值,這樣可以有效校驗我們下載的原始碼檔案是否完整正確。

cd $LFS/src
wget http://archive.linuxfromscratch.org/lfs-museum/stable/wget-list
wget http://archive.linuxfromscratch.org/lfs-museum/stable/md5sums

其中md5sum這個檔案等下下載完成我們才能用到,現在先下載這些檔案

wget –input-file=wget-list –continue –directory-prefix=$LFS/src

3-download

此時我們可以看到,檔案已經在下載了。

關於wget的引數:

–input-file是下載列表檔案,檔案格式就是每行一個連結。

–continue是斷點續傳,預防某種網路錯誤導致的下載中斷。

–directory-prefix下載儲存目錄

有些人總嫌直接下載慢,需要個快點的代理。現在的翻牆代理貌似還真的只有ssh還比較靠譜,但是ssh tunnel回來的是一個本地的socks5埠,不巧的是wget裡面壓根就沒法直接用socks5代理。這時候需要個小工具privoxy。

sudo aptitude install privoxy
sudo vi /etc/privoxy/config

從裡面能找到listen-address一行,它預設配的是localhost:8118,我是改成了127.0.0.1:8118,這行配置是指的轉成的http代理用哪個埠。再找一行叫做forward-socks5,本來是註釋的,我也沒開啟這個註釋,直接新加一行forward-socks5 127.0.0.1:1080,1080就是ssh tunnel回來的socks5埠。

listen-address 127.0.0.1:8118
forward-socks5 127.0.0.1:1080

此時的wget就可以使用-e引數來指定http_proxy,於是剛才的下載命令就變成了醬紫

wget –input-file=wget-list –continue –directory-prefix=$LFS/src -e “http_proxy=http://127.0.0.1:8118″

好吧~本站提供這堆東西的打包下載

http://www.haopingrui.cn/lfs.tar.gz 124e1eb0e52f176ab84c38118b4975e3

只要你的網速沒問題,北京聯通實測能夠穩定在300KBps左右,峰值曾經到1MBps以上。

下載完成後驗證md5sum無誤,就可以解壓lfs.tar.gz了,如果不是從本站下載的可以忽略這一步

之後將原始碼包目錄壓入目錄棧,並且使用剛才下載的md5sums檔案來驗證每個原始碼包和補丁是否下載正確,這一步非常重要。值得注意的是,pushd之後需要popd,否則會一直壓著。另外pushd之後當前目錄會改變為這個目錄,所以需要../md5sum。

#md5sum lfs.tar.gz
124e1eb0e52f176ab84c38118b4975e3  lfs.tar.gz
#tar zxvf lfs.tar.gz > /dev/null
#pushd $LFS/src/lfs
/mnt/lfs/src/lfs /mnt/lfs/src
#md5sum -c ../md5sums
acl-2.2.52.src.tar.gz: OK
attr-2.4.47.src.tar.gz: OK
autoconf-2.69.tar.xz: OK
automake-1.15.tar.xz: OK
bash-4.3.30.tar.gz: OK
bc-1.06.95.tar.bz2: OK
binutils-2.25.tar.bz2: OK
bison-3.0.4.tar.xz: OK
bzip2-1.0.6.tar.gz: OK
check-0.9.14.tar.gz: OK
coreutils-8.23.tar.xz: OK
dejagnu-1.5.2.tar.gz: OK
diffutils-3.3.tar.xz: OK
eudev-2.1.1.tar.gz: OK
eudev-2.1.1-manpages.tar.bz2: OK
e2fsprogs-1.42.12.tar.gz: OK
expat-2.1.0.tar.gz: OK
expect5.45.tar.gz: OK
file-5.22.tar.gz: OK
findutils-4.4.2.tar.gz: OK
flex-2.5.39.tar.bz2: OK
gawk-4.1.1.tar.xz: OK
gcc-4.9.2.tar.bz2: OK
gdbm-1.11.tar.gz: OK
gettext-0.19.4.tar.xz: OK
glibc-2.21.tar.xz: OK
gmp-6.0.0a.tar.xz: OK
gperf-3.0.4.tar.gz: OK
grep-2.21.tar.xz: OK
groff-1.22.3.tar.gz: OK
grub-2.02~beta2.tar.xz: OK
gzip-1.6.tar.xz: OK
iana-etc-2.30.tar.bz2: OK
inetutils-1.9.2.tar.gz: OK
intltool-0.50.2.tar.gz: OK
iproute2-3.19.0.tar.xz: OK
kbd-2.0.2.tar.gz: OK
kmod-19.tar.xz: OK
less-458.tar.gz: OK
lfs-bootscripts-20150222.tar.bz2: OK
libcap-2.24.tar.xz: OK
libpipeline-1.4.0.tar.gz: OK
libtool-2.4.6.tar.xz: OK
linux-3.19.tar.xz: OK
m4-1.4.17.tar.xz: OK
make-4.1.tar.bz2: OK
man-db-2.7.1.tar.xz: OK
man-pages-3.79.tar.xz: OK
mpc-1.0.2.tar.gz: OK
mpfr-3.1.2.tar.xz: OK
ncurses-5.9.tar.gz: OK
patch-2.7.4.tar.xz: OK
perl-5.20.2.tar.bz2: OK
pkg-config-0.28.tar.gz: OK
procps-ng-3.3.10.tar.xz: OK
psmisc-22.21.tar.gz: OK
readline-6.3.tar.gz: OK
sed-4.2.2.tar.bz2: OK
shadow-4.2.1.tar.xz: OK
sysklogd-1.5.1.tar.gz: OK
sysvinit-2.88dsf.tar.bz2: OK
tar-1.28.tar.xz: OK
tcl8.6.3-src.tar.gz: OK
texinfo-5.2.tar.xz: OK
tzdata2015a.tar.gz: OK
udev-lfs-20140408.tar.bz2: OK
util-linux-2.26.tar.xz: OK
vim-7.4.tar.bz2: OK
XML-Parser-2.44.tar.gz: OK
xz-5.2.0.tar.xz: OK
zlib-1.2.8.tar.xz: OK
bash-4.3.30-upstream_fixes-1.patch: OK
bc-1.06.95-memory_leak-1.patch: OK
bzip2-1.0.6-install_docs-1.patch: OK
coreutils-8.23-i18n-1.patch: OK
glibc-2.21-fhs-1.patch: OK
kbd-2.0.2-backspace-1.patch: OK
mpfr-3.1.2-upstream_fixes-3.patch: OK
readline-6.3-upstream_fixes-3.patch: OK
sysvinit-2.88dsf-consolidated-1.patch: OK

4-verifymd5sum15-verifymd5sum2

檢測無誤,分割槽和原始碼準備完成。

相關文章