2.2. 创建一个新的分区
像大多数其他操作系统一样,LFS通常安装在一个新的专用分区上。如果你有充足的磁盘空间,推荐将LFS系统构建在一个新的空白磁盘分区上。当然,LFS系统(也可以是多个LFS系统)也可以安装在现存的某个操作系统所在的分区上,它们完全可以和平共处。这个文档: /hints/downloads/files/lfs_next_to_ 解释了怎样实现上面的目标。但是本书只讨论如何在一个新的空白分区上构建LFS系统。
建立一个最小的系统需要 1.3GB 左右的分区,这样才能有足够的空间存储并编译所有的源码包。当然,如果您打算把 LFS 作为您首要的 Linux 系统,您可能会在上面安装其它软件,那么您就需要更大的空间(2~3GB)。LFS 系统本身并不占用这么多空间,所需的空间大部分用来为软件编译提供足够的临时空间,编译软件包的时候需要使用大量的磁盘空间,软件包装好之后这些临时用的空间可以回收。
因为编译过程中内存并不总是够用的,所以最好是使用一个小的硬盘分区作为交换空间。内核使用交换空间来存放很少用到的数据,以便为正在运行的进程腾出内存空间。LFS 系统使用的交换分区与宿主系统使用的交换分区可以是同一个,因此当宿主系统已经有交换分区的
时候就不必为 LFS 系统再创建一个了。
启动一个磁盘分区程序,例如 cfdisk 或 fdisk,用即将在上面创建新分区的硬盘名字作为命令行选项,比如主IDE硬盘名字就是 /dev/hda 。创建一个Linux本地分区,需要的话,您还要创建一个交换分区。如果您还不知道如何使用这两个工具的话,请参考 cfdisk(8) 或 fdisk(8) 手册页。
请记住新分区的名称(比如hda5),本书称其为 LFS 分区,交换分区的名称也要记住,这些分区的名称以后将在 /etc/fstab文件中用到。
2.3. 在分区上创建文件系统
空白分区建立之后,现在可以在上面创建文件系统了。在 Linux 世界使用的最广泛的是 ext2 文件系统,但是随着新的大容量硬盘的出现,日志文件系统开始逐渐流行。这里我们创建的是 ext2 文件系统,您可以在 /blfs/view/svn/postlfs/filesystems.html到创建其它文件系统的指导。
在 LFS 分区上创建 ext2 文件系统,请运行下面的命令:
mke2fs /dev/[xxx]
用您创建的 LFS 分区的名称替换 [xxx] (我们上面的例子里是hda5)。
注意
有些宿主系统在文件系统创建工具(e2fsprogs)中使用了自定义的特性。这可能会导致你在第9章重启进入新的LFS系统时出现问题。因为这些特性并不被LFS安装的e2fsprogs支持,你将会得到一个类似于 “unsupported filesystem features, upgrade your e2fsprogs”的错误。你可以使用下面的命令来检查你的宿主系统是否使用了自定义的增强特性:
debugfs -R feature /dev/[xxx]
如果输出的特性不同于:dir_index; filetype; large_file; resize_inode; sparse_super 那么就说明你的宿主系统使用了自定义的增强特性。在这种情况下,为了避免后面的问题,重新编译e2fsprogs包,然后用这个重现编译过的工具来创建你将要用来安装LFS系统的文件系统:
cd /tmp
tar xjf /path/to/sources/e2fsprogs-1.37.tar.bz2
cd e2fsprogs-1.37
mkdir build
cd build
../configure
make #note that we intentionally don't 'make install' here!
./misc/mke2fs /dev/[xxx]
cd /tmp
rm -rf e2fsprogs-1.37
如果创建了交换分区,那么还需要用下面的命令进行格式化,如果您使用已有的交换分区,那么就不需要格式化了。
mkswap /dev/[yyy]
用您创建的交换分区的名称替换 [yyy]
2.4. 挂载新的分区
创建文件系统之后,要让分区可以存取,需要把分区挂载到一个选定的挂载点上。考虑在本书的目的,我们假定文件系统挂载到 /mnt/lfs,但是您也可以选择别的目录。
选定一个挂载点,并指定给 LFS环境变量,请运行命令:
export LFS=/mnt/lfs
下一步,创建这个挂载点,并挂载 LFS 文件系统,请运行命令:
mkdir -p $LFS
mount /dev/[xxx] $LFS
用您创建的 LFS 分区名称替换[xxx]
如果 LFS 装在多个分区上(比如一个分区用于/ 目录,另一个分区用于 /usr 目录),用下面的命令挂载它们:
mkdir -p $LFS
mount /dev/[xxx] $LFS
mkdir $LFS/usr
mount /dev/[yyy] $LFS/usr
用相应的分区名称替换 [xxx] 和 [yyy]
请确认挂载新分区的时候没有使用太多的限制选项(如 nosuid、nodev 或者 noatime 选项)。运行不带参数的 mount命令看看挂载的 LFS 分区都设置了什么选项,如果出现了 nosuid, nodev, noatime 之一,您就需要重新挂载这个分区。
现在工作的空间已经建立好了,接下来要下载所需的软件包。
3. 软件包和补丁
3.1. 简介
本章包含了一个构建基本的 Linux 系统需要下载的软件包清单,列出的版本号是已知可以正常工作的版本,本书就是建立在这些软件包基础上的。我们强烈建议您不要使用新的版本,因为用于一个版本的编译安装命令可能并不适用于新的版本。最新版本的软件包也许需要一个与旧版本不同的工作环境,如果这里并没有配置这样的工作环境,那么软件包就可能会出现问题。
下载位置可能并不总是有效的,如果在本书发布之后,某个软件的下载位置有了变动,Google (le/) 可以搜索到大多数的软件包。如果 Google 也搜索不到,请尝试 /lfs/packages.html上的其它下载手段。
下载的软件包和补丁需要放到一个构建过程中方便访问的地方,还需要一个工作目录来解压缩和编译源码包。$LFS/sources既可以用来存储软件包及其补丁,也可以作为工作目录。
使用这个目录的好处是,所需要的部件都在 LFS 分区上,构建过程中的所有步骤都可以访问到。
要创建这个目录,在开始下载之前用 root用户登录,运行下面的命令:
mkdir $LFS/sources
把目录设置为可写和 sticky 模式,这里 “Sticky” 的意思是某个目录可以有多个用户有写入的权限,但这个目录中,只有文件的所有者才能删除该文件。请运行下面的命令使目录可写,并设置 sticky 模式:
chmod a+wt $LFS/sources
3.2. 全部软件包
下载或者用别的方式获得下列软件包:
Autoconf (2.59) - 908 kilobytes (KB):
    /gnu/autoconf/
Automake (1.9.5) - 748 KB:
    /gnu/automake/
Bash (3.0) - 1,824 KB:
    /gnu/bash/
Binutils (2.15.94.0.2.2) - 11,056 KB:
    /pub/linux/devel/binutils/
Bison (2.0) - 916 KB:
    /gnu/bison/
Bzip2 (1.0.3) - 596 KB:
    /
Coreutils (5.2.1) - 4,184 KB:
    /gnu/coreutils/
flex软件DejaGNU (1.4.4) - 852 KB:
    /gnu/dejagnu/
Diffutils (2.8.1) - 648 KB:
    /gnu/diffutils/
E2fsprogs (1.37) - 3,100 KB:
    prdownloads.sourceforge/e2fsprogs/
Expect (5.43.0) - 416 KB:
    v/src/
File (4.13) - 324 KB:
    ftp://ftp.gw/mirrors/pub/unix/file/ 
    4.13版本的 File 软件包在所列的位置可能下载不到,主下载站点的管理员有时候会在新版本发布之后,删除旧的版本。替代的下载位置是 ftp:///pub/lfs/,这里可以下载到所需的版本。
Findutils (4.2.23) - 784 KB:
    /gnu/findutils/
Flex (2.5.31) - 672 KB:
    prdownloads.sourceforge/lex/
Gawk (3.1.4) - 1,696 KB:
    /gnu/gawk/
GCC (3.4.3) - 26,816 KB:
    /gnu/gcc/