当硬件部分都准备就绪,就可以开始动手来准备软件了。不过在开始编译之前需要先做一件事,就像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
建立文件系统后,就可以挂载,然后使用这块空间了。不过在此之前为了方便,我们来加个环境变量
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
现在我们就可以进入$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
此时我们可以看到,文件已经在下载了。
关于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
检测无误,分区和源码准备完成。