重走LFS之路:(三) 磁盘初始化与源码准备

2015-04-04 10:24


当硬件部分都准备就绪,就可以开始动手来准备软件了。不过在开始编译之前需要先做一件事,就像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

检测无误,分区和源码准备完成。