+ -
当前位置:首页 → 问答吧 → 零起点构建自己的Linux ( LFS-6.2-5 + BLFS-6.2.0 )

零起点构建自己的Linux ( LFS-6.2-5 + BLFS-6.2.0 )

时间:2007-05-17

来源:互联网

零起点构建自己的Linux( LFS-6.2-5 + BLFS-6.2.0 )


适合人群:会使用键盘和鼠标,能耐心看完本文并且反复练习的人。

准备工作:计算机一台,lfslivecd-6.2-5的CD光盘一张。
最低硬件配置:中央处理器一颗,1GB硬盘,20M内存,CD或DVD光驱一台。
推荐硬件配置:CPU (600MHZ以上) ,4GB或者更大的硬盘空间,128M以上的内存。8倍速以上的CD光驱。

LFS的全称: linux from scratch
用google语言工具翻译一下,意思是: linux系统从零开始

推荐资源:
论坛
http://www.linuxsir.org/bbs
Linux 发行版 LFS 讨论区

LFS网站首页以及网站推荐的lfslivecd下载站点
http://www.linuxfromscratch.org/
http://www.linuxfromscratch.org/livecd/download.html

参考资料
LFS-6.2中文手册  http://www.linuxsir.org/bbs/showthread.php?t=268557
金步国作品列表 http://lamp.linux.gov.cn/jinbuguo_florilegium.html
豹老师的博客 http://youbest.cublog.cn
linuxsir论坛LFS版块讨论版以及精华区  

在线翻译
http://www.dict.cn
http://www.google.com (语言工具)

本文在linuxsir论坛的链接 http://www.linuxsir.org/bbs/showthread.php?t=302685
我的博客 huohuliaisili.cublog.cn
博文地址 http://blog.chinaunix.net/u/25309/showart_302261.html
备份/恢复MBR和分区表以及无备份修复MBR和分区表错误,浅谈引导故障和分区方案。

LFS BLFS CLFS CBLFS 相关资料:
http://www.linuxfromscratch.org/

LFS镜像站点:
http://mirror.lupaworld.com

CLFS 镜像信息: http://trac.cross-lfs.org/wiki/mirrors/ftp
LiveCD (正式版) http://www.linuxfromscratch.org/livecd/download.html
LiveCD (测试版) http://ums.usu.ru/~patrakov/test/

BLFS-6.2在线手册
http://www.linuxfromscratch.org/blfs/view/stable/
http://www.linuxfromscratch.org/blfs/view/svn/

CLFS在线手册
http://cross-lfs.org/view/clfs-embedded/
http://cross-lfs.org/view

LFS / CLFS 开发版本:
http://www.linuxfromscratch.org/lfs/view
http://www.linuxfromscratch.org/lfs/view/development/
http://www.linuxfromscratch.org/clfs/view/

CBLFS 在线手册
http://cblfs.cross-lfs.org/index.php/Main_Page

kernel
http://www.kernel.org/pub/linux/kernel/v2.6/

详解 Linux 的 fdisk
--------------------------------------------------------------------------------------
  Linux中的fdisk是我目前发现的最专业的分区工具。它不做多的事情,它只对分区表进行操作,不去管其它任何与分区表无关的事情。

  如果你对分区不了解,不知道如何分区,如何备份/恢复分区表,不会解决一些分区表引起的故障,你应该先了解这些内容。如果你能够十分熟练的解决常见的分区表错误和引导故障,那么就可以大胆的使用真实环境做LFS了。

  实验阶段使用Linux的fdisk工具对硬盘分区表进行操作,这里强烈要求使用vmware虚拟机环境进行。windows用户使用windows版的vmware虚拟机,Linux用户使用Linux版的vmware虚拟机。

  对一块新硬盘进行分区。
  对分区的认识是第一步,也是最关健的一步。如果你对分区操作很熟的可以跳过此部分。
  安装好vmware workstation虚拟机软件之后,Ctrl + N 新建虚拟机,并创建一个IDE虚拟硬盘大小为8GB。创建好虚拟机之后按 Ctrl + D 在设置中选择 CD / DVD ,将 lfslivecd-6.2-5.iso 挂为光盘。

  vmware workstation虚拟机的基本操作过程不用我来说了。如果不会的,可以百度或者goolge搜索一下 图解虚拟机 。

  这里有一块8GB的新硬盘。我们现在将它分成三个主分区,一个扩展分区,然后在扩展下建两个逻辑分区。
  先 fdisk -l  ( 如果是SCSI或者SATA硬盘就 fdisk -l /dev/sda ,这里a表示第一个设备 )


代码:
# fdisk -l

Disk /dev/hda: 8589 MB, 8589934592 bytes
15 heads, 63 sectors/track, 17753 cylinders
Units = cylinders of 945 * 512 = 483840 bytes

Disk /dev/hda doesn't contain a valid partition table
  " Disk /dev/hda: 8589MB,8589934592 bytes " 这一段是说整块 /dev/hda 硬盘的大小。
  " 15 heads, 63 sectors/track, 17753 cylinders " 这段说的是这块硬盘有 15磁头,63磁道,17753扇区。
  " Units = cylinders of 945 * 512 = 483840 bytes " 这里描述的是每个柱面的大小。(磁头数 * 磁道数 = 每柱面的扇区个数,所以这里的945就是用 15 * 63 得到的值; 一个扇区的大小是 512 bytes (字节),这里就得出了每个柱面的大小为 483840 bytes )
  补充说明一下,不同的硬盘的 CHS 是不一样的。每柱面大小也不尽相同的。 ( CHS 就是上面说到的磁道、磁头、扇区 )

  现在来熟悉一下这个分区工具
  使用 Linux fdisk 对 /dev/hda 这块硬盘进行分区操作
  fdisk /dev/hda
  在接下来出现的提示符后敲入 m 并按 Enter 键;或者直接按回车键 ( Enter ):


代码:
# fdisk /dev/hda
(省去fdisk工具自述信息)

Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition's system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)

Command (m for help):

  a toggle a bootable flag      标识/取消 引导分区
  d delete a partition         删除一个已有分区
  l list known partition types     列出已知的分区类型
  m print this menu          在屏幕上打印出fdisk分区工具的帮助信息
  n add a new partition        创建一个分区
  p print the partition table      打印分区表
  q quit without saving changes    退出不保存已做过的修改
  t change a partition's system id   改变一个分区的系统id
  u change display/entry units     改变显示单位 (可以以扇区为单位来显示)
  v verify the partition table     校验分区表 (建议不要使用这个)
  w write table to disk and exit   把分区表写到硬盘并退出(保存并退出)

  现在创建第一个主分区:
  在对硬盘进行分区时操作时,先按 p 并回车,打印一下分区信息。现在这块硬盘是一块新硬盘,没有任何分区信息。接下来按 n 并回车,屏幕上提示 e 表示创建扩展分区, p 表示创建主分区,现在按 p 并回车。屏幕上出现提示,给这个分区设置编号 ( Partition number ) ,现在输入 1 并回车。屏幕上出现了设置这个分区的首柱面(起始柱面),默认是1 ,直接敲回车键或者先敲入 1 再按回车键。然后,再设置这个分区的尾柱面(终止柱面),这里设为 1000 然后敲回车。在进行了创建分区的操作后,应该按 p 然后回车,再次打印分区表。
  如果需要再次打印帮助,可以按 m 并按回车键或者直接按回车键。

代码:
Command (m for help): p

Disk /dev/hda: 8589 MB, 8589934592 bytes
15 heads, 63 sectors/track, 17753 cylinders
Units = cylinders of 945 * 512 = 483840 bytes

Device Boot Start End Blocks Id System

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-17753, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-17753, default 17753): 1000

Command (m for help): p

Disk /dev/hda: 8589 MB, 8589934592 bytes
15 heads, 63 sectors/track, 17753 cylinders
Units = cylinders of 945 * 512 = 483840 bytes

Device Boot Start End Blocks Id System
/dev/hda1 1 1000 472468+ 83 Linux

Command (m for help):
  现在我们可以看到,已新建了一个主分区 /dev/hda1 ,它的首柱面( Start )为 1 ,尾柱面( End )为 1000 。这个分区我们为它分配了 1000 个柱面。分区标识( Id ) 为83,分区系统类型( System )为Linux 。

  现在开始创建第二个主分区:
  如同前面的方法,创建一个2000个柱面的分区。由于前面已经将 1 ~ 1000 柱面分配给了第一个主分区,所以在创建第二个分区的时候,默认首柱面是从1001开始。按照默认的提示设置首柱面,尾柱面 1000+2000也就是到了3000柱面上。从 1001 柱面到 3000 柱面都分配给第二主分区。操作步骤如下:

代码:
Command (m for help): p

Disk /dev/hda: 8589 MB, 8589934592 bytes
15 heads, 63 sectors/track, 17753 cylinders
Units = cylinders of 945 * 512 = 483840 bytes

Device Boot Start End Blocks Id System
/dev/hda1 1 1000 472468+ 83 Linux

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (1001-17753, default 1001): 1001
Last cylinder or +size or +sizeM or +sizeK (1001-17753, default 17753): 3000

Command (m for help): p

Disk /dev/hda: 8589 MB, 8589934592 bytes
15 heads, 63 sectors/track, 17753 cylinders
Units = cylinders of 945 * 512 = 483840 bytes

Device Boot Start End Blocks Id System
/dev/hda1 1 1000 472468+ 83 Linux
/dev/hda2 1001 3000 945000 83 Linux

Command (m for help):
  现在我们来创建第三个主分区:
  在进行操作之前,先敲入 p 并按回车键,打印分区信息。然后敲入 n 再按回车键,敲入 p 并按回车键创建主分区。屏幕上提示设置首柱面,默认从3001开始,直接按回车键使用默认的。然后屏幕上提示设置尾柱面,这里为这个分区分配3000个柱面,因为前面一个分区的尾柱面是3000,而且现在的这个分区首柱面是3001,那么在这里就是 3001 - 1 + 3000 = 6000 ;在这里设置尾柱面为 6000 .

代码:
Command (m for help): p

Disk /dev/hda: 8589 MB, 8589934592 bytes
15 heads, 63 sectors/track, 17753 cylinders
Units = cylinders of 945 * 512 = 483840 bytes

Device Boot Start End Blocks Id System
/dev/hda1 1 1000 472468+ 83 Linux
/dev/hda2 1001 3000 945000 83 Linux

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 3
First cylinder (3001-17753, default 3001):
Using default value 3001
Last cylinder or +size or +sizeM or +sizeK (3001-17753, default 17753): 6000

Command (m for help): p

Disk /dev/hda: 8589 MB, 8589934592 bytes
15 heads, 63 sectors/track, 17753 cylinders
Units = cylinders of 945 * 512 = 483840 bytes

Device Boot Start End Blocks Id System
/dev/hda1 1 1000 472468+ 83 Linux
/dev/hda2 1001 3000 945000 83 Linux
/dev/hda3 3001 6000 1417500 83 Linux

Command (m for help):

  现在创建第四分区,分区类型为扩展分区。
  将所有的剩余空间都分配给这个分区。

代码:
Command (m for help): p

Disk /dev/hda: 8589 MB, 8589934592 bytes
15 heads, 63 sectors/track, 17753 cylinders
Units = cylinders of 945 * 512 = 483840 bytes

Device Boot Start End Blocks Id System
/dev/hda1 1 1000 472468+ 83 Linux
/dev/hda2 1001 3000 945000 83 Linux
/dev/hda3 3001 6000 1417500 83 Linux

Command (m for help): n
Command action
e extended
p primary partition (1-4)
e
Selected partition 4
First cylinder (6001-17753, default 6001):
Using default value 6001
Last cylinder or +size or +sizeM or +sizeK (6001-17753, default 17753):
Using default value 17753

Command (m for help): p

Disk /dev/hda: 8589 MB, 8589934592 bytes
15 heads, 63 sectors/track, 17753 cylinders
Units = cylinders of 945 * 512 = 483840 bytes

Device Boot Start End Blocks Id System
/dev/hda1 1 1000 472468+ 83 Linux
/dev/hda2 1001 3000 945000 83 Linux
/dev/hda3 3001 6000 1417500 83 Linux
/dev/hda4 6001 17753 5553292+ 5 Extended

Command (m for help):

  创建了扩展分区之后,就可以在扩展下创建逻辑分区了:
  现在来创建两个逻辑分区:
  现在在扩展下先建一个逻辑分区,为它分配4000个柱面。扩展分区的首柱面是6001,尾柱面为整块硬盘的最后一个柱面。
  仍然是先敲入 p 并按回车键,打印分区信息。按 n 并回车,现在默认的首柱面是6001 ,直接敲回车键就可以了。设置尾柱面为 10000 ,然后敲回车。最后,仍然是敲 p 并按回车,打印分区信息。
  然后创建最后一个分区,并且为这个最后的一个分区分配所有的剩余空间。详细步骤如下:


代码:
Command (m for help): p

Disk /dev/hda: 8589 MB, 8589934592 bytes
15 heads, 63 sectors/track, 17753 cylinders
Units = cylinders of 945 * 512 = 483840 bytes

Device Boot Start End Blocks Id System
/dev/hda1 1 1000 472468+ 83 Linux
/dev/hda2 1001 3000 945000 83 Linux
/dev/hda3 3001 6000 1417500 83 Linux
/dev/hda4 6001 17753 5553292+ 5 Extended

Command (m for help): n
First cylinder (6001-17753, default 6001):
Using default value 6001
Last cylinder or +size or +sizeM or +sizeK (6001-17753, default 17753): 10000

Command (m for help): p

Disk /dev/hda: 8589 MB, 8589934592 bytes
15 heads, 63 sectors/track, 17753 cylinders
Units = cylinders of 945 * 512 = 483840 bytes

Device Boot Start End Blocks Id System
/dev/hda1 1 1000 472468+ 83 Linux
/dev/hda2 1001 3000 945000 83 Linux
/dev/hda3 3001 6000 1417500 83 Linux
/dev/hda4 6001 17753 5553292+ 5 Extended
/dev/hda5 6001 10000 1889968+ 83 Linux

Command (m for help): n
First cylinder (10001-17753, default 10001):
Using default value 10001
Last cylinder or +size or +sizeM or +sizeK (10001-17753, default 17753):
Using default value 17753

Command (m for help): p

Disk /dev/hda: 8589 MB, 8589934592 bytes
15 heads, 63 sectors/track, 17753 cylinders
Units = cylinders of 945 * 512 = 483840 bytes

Device Boot Start End Blocks Id System
/dev/hda1 1 1000 472468+ 83 Linux
/dev/hda2 1001 3000 945000 83 Linux
/dev/hda3 3001 6000 1417500 83 Linux
/dev/hda4 6001 17753 5553292+ 5 Extended
/dev/hda5 6001 10000 1889968+ 83 Linux
/dev/hda6 10001 17753 3663261 83 Linux

Command (m for help):

  到现在为止,就为这块硬盘模拟的就划分了三个主分区和一个扩展分区,扩展下分了两个逻辑分区。分区类型都是Linux的分区,分区标识id都是83  。如果现在想保存分区操作,只需要在 Linux 的 fdisk 分区操作提示符后面敲入 w 并按回车。如果不保存并退出分区工具,可以敲入 q 并按回车键;当然也可以按 Ctrl + C 这两个键的组合。但是,我们现在暂时不这么做。
  现在,来用一下 Linux 的 fdisk 分区工具的其它命令。
  我们现在将第一个分区的分区类型改为swap。
  在分区操作中,敲入 t 并按回车键,敲入 1 按回车键选择对第1分区进行修改分区标识。接下来的提示说敲入 L 并回车,列出已知的分区类型和对应的id标识码。在其中找出 swap 对应的 82 ,然后输入 82 并按回车。这样,这个分区就改为swap的了。


代码:
Command (m for help): t
Partition number (1-6): 1
Hex code (type L to list codes): L

(由于字数的限制,此处省略了fdisk支持的分区系统类型及对应的标识id 。)

Hex code (type L to list codes): 82
Changed system type of partition 1 to 82 (Linux swap / Solaris)

Command (m for help): p

Disk /dev/hda: 8589 MB, 8589934592 bytes
15 heads, 63 sectors/track, 17753 cylinders
Units = cylinders of 945 * 512 = 483840 bytes

Device Boot Start End Blocks Id System
/dev/hda1 1 1000 472468+ 82 Linux swap / Solaris
/dev/hda2 1001 3000 945000 83 Linux
/dev/hda3 3001 6000 1417500 83 Linux
/dev/hda4 6001 17753 5553292+ 5 Extended
/dev/hda5 6001 10000 1889968+ 83 Linux
/dev/hda6 10001 17753 3663261 83 Linux

Command (m for help):
  好了,现在热身过程也差不多了,敲入 w 并回车,将所做的修改保存并退出。

代码:
Command (m for help): p

Disk /dev/hda: 8589 MB, 8589934592 bytes
15 heads, 63 sectors/track, 17753 cylinders
Units = cylinders of 945 * 512 = 483840 bytes

Device Boot Start End Blocks Id System
/dev/hda1 1 1000 472468+ 82 Linux swap / Solaris
/dev/hda2 1001 3000 945000 83 Linux
/dev/hda3 3001 6000 1417500 83 Linux
/dev/hda4 6001 17753 5553292+ 5 Extended
/dev/hda5 6001 10000 1889968+ 83 Linux
/dev/hda6 10001 17753 3663261 83 Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

  现在来做一个小实验
引用:
  u change display/entry units 改变显示单位 (可以以扇区为单位来显示)
  fdisk /dev/hda 然后 p 打印分区表,接下来 u 改变显示单位,再 p 打印分区表。这里对照两次的分区表显示单位,发现第一主分区 /dev/hda1 是从整块硬盘的第63个扇区开始到第944999个扇区, Blocks为472468+ 。这里的Blocks以1KB为单位,一个扇区是512字节,两个扇区的大小才是1KB。那么[944999-(63- 1)]/2=472468.5,所以 fdisk 中表示这个分区的大小为 472468+ ,用 + 来标记一个单数扇区,用一个正整数来表示Blocks 。
  再来对比看一下,/dev/hda4 和 /dev/hda5 它们的起始扇区相差了63 个( 5670063 - 5670000 ),很明显和 /dev/hda1 的起始扇区一样,也保留了63个扇区。
  现在比较一下,/dev/hda5的尾扇区和/dev/hda6的首扇区。/dev/hda5的尾扇区为9449999,照理说,接下来的分区应该是从第9450000个扇区开始,但这里 /dev/hda6 是从 9450063 开始的。这其中也是保留了63个扇区。

代码:
# fdisk /dev/hda

The number of cylinders for this disk is set to 17753.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): p

Disk /dev/hda: 8589 MB, 8589934592 bytes
15 heads, 63 sectors/track, 17753 cylinders
Units = cylinders of 945 * 512 = 483840 bytes

Device Boot Start End Blocks Id System
/dev/hda1 1 1000 472468+ 82 Linux swap / Solaris
/dev/hda2 1001 3000 945000 83 Linux
/dev/hda3 3001 6000 1417500 83 Linux
/dev/hda4 6001 17753 5553292+ 5 Extended
/dev/hda5 6001 10000 1889968+ 83 Linux
/dev/hda6 10001 17753 3663261 83 Linux

Command (m for help): u
Changing display/entry units to sectors

Command (m for help): p

Disk /dev/hda: 8589 MB, 8589934592 bytes
15 heads, 63 sectors/track, 17753 cylinders, total 16777216 sectors
Units = sectors of 1 * 512 = 512 bytes

Device Boot Start End Blocks Id System
/dev/hda1 63 944999 472468+ 82 Linux swap / Solaris
/dev/hda2 945000 2834999 945000 83 Linux
/dev/hda3 2835000 5669999 1417500 83 Linux
/dev/hda4 5670000 16776584 5553292+ 5 Extended
/dev/hda5 5670063 9449999 1889968+ 83 Linux
/dev/hda6 9450063 16776584 3663261 83 Linux

Command (m for help):

  对一个已经分好区的硬盘进行分区表操作
  首先,在对一个已有数据的硬盘进行分区操作时,需要先做分区表备份和MBR主引导扇区的备份。
  通常分区都是以柱面方式进行分配分区大小的,所以要备份一个分区表,只需要将 fdisk -l 这条命令所返回的信息保存下来就可以了。这里我们使用 fdisk -l > parttion.txt 将分区表信息重定向到一个文本文件。然后通过电子邮件发送保存到邮箱,这里有必要多发几个邮箱,并且查收邮件内容。如果要以扇区为单位打印分区表信息就是 fdisk -ul /dev/hda ,重定向保存为文件就是 fdisk -ul /dev/hda > parttion_hda-u.txt 。
  备份MBR: dd if=/dev/hda of=/MBR_hda bs=512 count=1
  关于分区和引导的问题可以参考一下这篇文章:备份/恢复MBR和分区表以及无备份修复MBR和分区表错误,浅谈引导故障和分区方案。
  做好了备份的工作之后才可以进行修改的操作。

  题目:现在有一块160GB的硬盘,分区情况是一个主分区 /dev/sda1 大小为10GB,一个扩展分区(含所有剩余的空间),扩展下有五个逻辑分区,分别是windows系统的DEFGH这几个盘符。现在想把20GB的E盘分成两个区,其中一个分大小为4GB左右的Linux分区用来做LFS和BLFS实现自己的Linux 。
  我们要修改的只是位于E盘的这部分。这部分已经有重要数据,需要先将其转移,先把文件复制到硬盘的某个分区上。做完备份文件的工作之后,就可以对这部分进行重新分配了。
  备份意识:我们现在因为要对硬盘上的某个分区进行重分配,为保险起见,我们先备份分区表。 fdisk -l /dev/sda > parttion_sda.txt ,分区表备份文件发送到邮箱。如果想以扇区为单位就使用 fdisk -ul /dev/sda > parttion_sda.txt 。多块古硬盘的情况需要注意 fdisk -l 后不加设备名是列出所有硬盘的分区表,两块同样的硬盘要清楚哪个是主那个是次,哪个是a哪个是b。如果怕弄错,就在关机状态下卸下其中的一块硬盘,只对一块硬盘进行操作。在可能将要对硬盘的分区或引导进行操作之前,都应该先备份分区表和MBR ,要养成备份的好习惯。
  分区管理的知识:分区信息只是记录硬盘上的某个部分的起始位置、分区类型、分区标识id(分区的系统类型),以及最多可能的四个主分区中哪个分区被设为启动分区。最先创建的第一个分区,物理位置位于硬盘最前面的部分,可能让它在分区表中记录的是第2分区。我们可以实现这样的的操作,但为了方便管理,为了看起来一目了然,我们不去那么做。物理位置位于第一的,我们就让它在分区表中记录的是第一分区;物理位置是第6个的,我们就让它在分区表中是第6分区。
  好了。现在开始对这块160GB的分区上的20GB大小的原先为windows系统的E盘进行操作。

  这里仍然还是使用虚拟机来进行练习。如果你有十足的把握,你也可以不看分区这部分的操作。
  再新建一台虚拟机,创建一个SCSI的硬盘并且将虚拟机硬盘大小设为160GB 。同样的,设置 lfslivecd-6.2-5.iso 作为虚拟机的光盘。

  操作过程
  由于现在是实验环境,我们先创建一个符合题目要求的硬盘分区表。
  在一块160GB的硬盘上进行创建分区的操作。
由于字数限制的原因,此处漏掉了一些。是这样的,论坛这次维护后,每帖字数只能发到以前的三分之一可能还不到。所以这部分发附件,第一帖和第二帖的内容,看附件吧。编码 zh_CN.UTF-8 。如果显示不正常,可以去掉后缀.txt,尝试用网页浏览器打开文件。
上传的附件
02-详解linux的fdisk工具.txt (45.3 KB, 56 次查看)

作者: huohuliaisili   发布时间: 2007-05-17

  列出分区表信息:
  fdisk -l
  这块硬盘设备名称为 /dev/sda 。容量171.7GB(以1000计算),171798691840 bytes
  255 磁头 heads, 63 磁道 sectors/track, 20886 扇区 cylinders

代码:
# fdisk -l

Disk /dev/sda: 171.7 GB, 171798691840 bytes
255 heads, 63 sectors/track, 20886 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 1250 10040593+ 7 HPFS/NTFS
/dev/sda2 1251 20886 157726170 5 Extended
/dev/sda5 1251 2500 10040593+ 7 HPFS/NTFS
/dev/sda6 2501 5000 20081218+ 7 HPFS/NTFS
/dev/sda7 5001 7500 20081218+ 7 HPFS/NTFS
/dev/sda8 7501 10000 20081218+ b W95 FAT32
/dev/sda9 10001 20886 87441763+ 7 HPFS/NTFS
  
  
  把上面列出的分区信息发送到邮箱,必要时用备份进行恢复。上面的可以用输出重定向保存到分区表备份文件partition_tab.txt 。
代码:
 fdisk -l > partition_tab.txt
  因为需要修改的 /dev/sda6 ( 对应windows中的E盘 )这个分区上的数据已经完全的复制到另外的分区了,所以现在可以大胆的对这个分区进行重新分配。
  一种方法:使用分区表工具将 /dev/sda6 这个分区删除,这时,原先的/dev/sda7变成了/dev/sda6 , 原先的 /dev/sda8 变成了 /dev/sda7 ,原先的 /dev/sda9 变成了 /dev/sda8 ...
  如何解决这种混乱?
  方法是:在修改过原先的 /dev/sda6 之后,将紧靠其后的一个分区删除,接着重建,首柱面和尾柱面按照默认。原理是,默认的首柱面和默认的尾柱面和原先是相同的。然后改它的分区系统标识id为原先的。这样一个一个的改。
  先记住要修改的 /dev/sda6 这个分区的首柱面和尾柱面。(这里 start 首柱面是 2501 ,End 尾柱面是 5000 )。好现在先将 原先的E盘 /dev/sda6 这个分区删掉。
  操作过程如下:

代码:
# fdisk /dev/sda

The number of cylinders for this disk is set to 20886.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): p

Disk /dev/sda: 171.7 GB, 171798691840 bytes
255 heads, 63 sectors/track, 20886 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 1250 10040593+ 7 HPFS/NTFS
/dev/sda2 1251 20886 157726170 5 Extended
/dev/sda5 1251 2500 10040593+ 7 HPFS/NTFS
/dev/sda6 2501 5000 20081218+ 7 HPFS/NTFS
/dev/sda7 5001 7500 20081218+ 7 HPFS/NTFS
/dev/sda8 7501 10000 20081218+ b W95 FAT32
/dev/sda9 10001 20886 87441763+ 7 HPFS/NTFS

Command (m for help): d
Partition number (1-9): 6

Command (m for help): p

Disk /dev/sda: 171.7 GB, 171798691840 bytes
255 heads, 63 sectors/track, 20886 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 1250 10040593+ 7 HPFS/NTFS
/dev/sda2 1251 20886 157726170 5 Extended
/dev/sda5 1251 2500 10040593+ 7 HPFS/NTFS
/dev/sda6 5001 7500 20081218+ 7 HPFS/NTFS
/dev/sda7 7501 10000 20081218+ b W95 FAT32
/dev/sda8 10001 20886 87441763+ 7 HPFS/NTFS
  上面可以看到删掉了原先的/dev/sda6这个分区记录之后,现在的 /dev/sda5 的尾柱面是2500. 而 现在的 /dev/sda6 的首柱面是 5001 。很显然,从2501柱面到5000柱面是未分配的,不在分区记录之中的。

  接下来,我们将把 2501 ~ 5000 柱面这块硬盘空间进行重分配。这2500个柱面,准备分配4GB作为LFS / BLFS 也就是我们将要做的自己的Linux系统;分配物理内存2倍大小的空间作为swap (非必须,但建议有一个);分配一个适量的空间作为Linux用来存放数据分区,也就算做是备份区(非必须,但建议要有一个)。
  新建一个500个柱面的分区(由于这块大硬盘的每柱面容量为8M左右,500柱面正好4GB)。默认的首柱面是2501,那么尾柱面就是3000 。 
  创建一个1GB的swap,首柱面为 3001(默认) ,尾柱面为 3125 。 共计 125 个柱面 乘上 8M/柱面,就是1GB 。建好分区之后,用 t 命令来修改分区的系统标识id为swap对应的82 。
  将剩余空间分划为一个分区,这个分区用来作Linux的备份区。首柱面 3126 (默认),尾柱面 5000(默认)。
  过程如下:

代码:
Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l
First cylinder (2501-20886, default 2501):
Using default value 2501
Last cylinder or +size or +sizeM or +sizeK (2501-5000, default 5000): 3000

Command (m for help): p

Disk /dev/sda: 171.7 GB, 171798691840 bytes
255 heads, 63 sectors/track, 20886 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 1250 10040593+ 7 HPFS/NTFS
/dev/sda2 1251 20886 157726170 5 Extended
/dev/sda5 1251 2500 10040593+ 7 HPFS/NTFS
/dev/sda6 5001 7500 20081218+ 7 HPFS/NTFS
/dev/sda7 7501 10000 20081218+ b W95 FAT32
/dev/sda8 10001 20886 87441763+ 7 HPFS/NTFS
/dev/sda9 2501 3000 4016218+ 83 Linux

Partition table entries are not in disk order

Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l
First cylinder (3001-20886, default 3001):
Using default value 3001
Last cylinder or +size or +sizeM or +sizeK (3001-5000, default 5000): 3125

Command (m for help): t
Partition number (1-11): 10
Hex code (type L to list codes): L

0 Empty 1e Hidden W95 FAT1 80 Old Minix be Solaris boot
1 FAT12 24 NEC DOS 81 Minix / old Lin bf Solaris
2 XENIX root 39 Plan 9 82 Linux swap / So c1 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 83 Linux c4 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 84 OS/2 hidden C: c6 DRDOS/sec (FAT-
5 Extended 41 PPC PReP Boot 85 Linux extended c7 Syrinx
6 FAT16 42 SFS 86 NTFS volume set da Non-FS data
7 HPFS/NTFS 4d QNX4.x 87 NTFS volume set db CP/M / CTOS / .
8 AIX 4e QNX4.x 2nd part 88 Linux plaintext de Dell Utility
9 AIX bootable 4f QNX4.x 3rd part 8e Linux LVM df BootIt
a OS/2 Boot Manag 50 OnTrack DM 93 Amoeba e1 DOS access
b W95 FAT32 51 OnTrack DM6 Aux 94 Amoeba BBT e3 DOS R/O
c W95 FAT32 (LBA) 52 CP/M 9f BSD/OS e4 SpeedStor
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a0 IBM Thinkpad hi eb BeOS fs
f W95 Ext'd (LBA) 54 OnTrackDM6 a5 FreeBSD ee EFI GPT
10 OPUS 55 EZ-Drive a6 OpenBSD ef EFI (FAT-12/16/
11 Hidden FAT12 56 Golden Bow a7 NeXTSTEP f0 Linux/PA-RISC b
12 Compaq diagnost 5c Priam Edisk a8 Darwin UFS f1 SpeedStor
14 Hidden FAT16 <3 61 SpeedStor a9 NetBSD f4 SpeedStor
16 Hidden FAT16 63 GNU HURD or Sys ab Darwin boot f2 DOS secondary
17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fd Linux raid auto
18 AST SmartSleep 65 Novell Netware b8 BSDI swap fe LANstep
1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid ff BBT
1c Hidden W95 FAT3 75 PC/IX
Hex code (type L to list codes): 82
Changed system type of partition 10 to 82 (Linux swap / Solaris)

Command (m for help): p

Disk /dev/sda: 171.7 GB, 171798691840 bytes
255 heads, 63 sectors/track, 20886 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 1250 10040593+ 7 HPFS/NTFS
/dev/sda2 1251 20886 157726170 5 Extended
/dev/sda5 1251 2500 10040593+ 7 HPFS/NTFS
/dev/sda6 5001 7500 20081218+ 7 HPFS/NTFS
/dev/sda7 7501 10000 20081218+ b W95 FAT32
/dev/sda8 10001 20886 87441763+ 7 HPFS/NTFS
/dev/sda9 2501 3000 4016218+ 83 Linux
/dev/sda10 3001 3125 1004031 83
Linux swap / Solaris
Partition table entries are not in disk order

Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l
First cylinder (3126-20886, default 3126):
Using default value 3126
Last cylinder or +size or +sizeM or +sizeK (3126-5000, default 5000):
Using default value 5000

Command (m for help): p

Disk /dev/sda: 171.7 GB, 171798691840 bytes
255 heads, 63 sectors/track, 20886 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 1250 10040593+ 7 HPFS/NTFS
/dev/sda2 1251 20886 157726170 5 Extended
/dev/sda5 1251 2500 10040593+ 7 HPFS/NTFS
/dev/sda6 5001 7500 20081218+ 7 HPFS/NTFS
/dev/sda7 7501 10000 20081218+ b W95 FAT32
/dev/sda8 10001 20886 87441763+ 7 HPFS/NTFS
/dev/sda9 2501 3000 4016218+ 83 Linux
/dev/sda10 3001 3125 1004031 83 Linux swap / Solaris
/dev/sda11 3126 5000 15060906 83 Linux

Partition table entries are not in disk order

Command (m for help):
  到这里,就已经将原先的windows的E盘(2501到5000柱面),那个 /dev/sda6分成了三个区。现在如果保存分区操作后,再使用格式化工具创建文件系统后,原先的 2501到5000柱面上的数据将丢失。当然,我们不必担心,因为事先已经将文件复制到了其它的地方了。
  注意:现在有一个问题,看上面 /dev/sda11 的尾柱面是 5000 ,而 /dev/sda6的首柱面是5001 。 一直到 /dev/sda8 的首柱面都位于 /dev/sda11的尾柱面之后。也就是说它们的物理位置在后面,但分区编号在前面。为改变这一状况,有一个简易的方法。就是先删紧靠 5000柱面之后的一个分区,然后立即按默认(与原先相同的)首柱面和尾柱面进行分配,在重建分区表的时候注意把分区的系统标识也改也原先的(因为 Linux的fdisk中默认的新建的分区系统标识为id为83。

代码:
Command (m for help): d
Partition number (1-11): 6

Command (m for help): n
Command action
l logical (5 or over)
p primary partition (1-4)
l
First cylinder (5001-20886, default 5001):
Using default value 5001
Last cylinder or +size or +sizeM or +sizeK (5001-7500, default 7500):
Using default value 7500

Command (m for help): p

Disk /dev/sda: 171.7 GB, 171798691840 bytes
255 heads, 63 sectors/track, 20886 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 1250 10040593+ 7 HPFS/NTFS
/dev/sda2 1251 20886 157726170 5 Extended
/dev/sda5 1251 2500 10040593+ 7 HPFS/NTFS
/dev/sda6 7501 10000 20081218+ b W95 FAT32
/dev/sda7 10001 20886 87441763+ 7 HPFS/NTFS
/dev/sda8 2501 3000 4016218+ 83 Linux
/dev/sda9 3001 3125 1004031 82 Linux swap / Solaris
/dev/sda10 3126 5000 15060906 83 Linux
/dev/sda11 5001 7500 20081218+ 83 Linux

Partition table entries are not in disk order

Command (m for help): t
Partition number (1-11): 11
Hex code (type L to list codes): 7
Changed system type of partition 11 to 7 (HPFS/NTFS)

Command (m for help): p

Disk /dev/sda: 171.7 GB, 171798691840 bytes
255 heads, 63 sectors/track, 20886 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 1250 10040593+ 7 HPFS/NTFS
/dev/sda2 1251 20886 157726170 5 Extended
/dev/sda5 1251 2500 10040593+ 7 HPFS/NTFS
/dev/sda6 7501 10000 20081218+ c W95 FAT32 (LBA)
/dev/sda7 10001 20886 87441763+ 7 HPFS/NTFS
/dev/sda8 2501 3000 4016218+ 83 Linux
/dev/sda9 3001 3125 1004031 82 Linux swap / Solaris
/dev/sda10 3126 5000 15060906 83 Linux
/dev/sda11 5001 7500 20081218+ 7 HPFS/NTFS

Partition table entries are not in disk order

Command (m for help):

  如上面的操作,已经将首柱面为5001,尾柱面为7500的这个分区进行了按原首尾柱面和原系统标识id的重建。

  然后使用同样的方法,对接下来的分区进行类似的操作(数值大于7500柱面的分区)。这样的操作一直做到硬盘上首柱面和尾柱面数值最大的分区,也就是物理位置为硬盘最后面的分区。
  全改过之后,从邮箱里调出备份的分区表,和现在的修改的分区表进行对照。对照它们的分区编号,起始柱面位置,分区的系统标识id,启动分区标识。如果有不如意的地方,可以进行修改。常用的fdisk命令就是前面讲到的那几个,不会就 m 看帮助。直到满意后,才输入w并按回车键,保存退出。


  强化训练:
  先备份一个已有分区的硬盘分区表备份发送到多个邮箱或者网络硬盘,然后再将这个已有分区的硬盘的分区表尽数删去,再按照从邮箱调出分区表备份,按照备份上的进行恢复分区表。

  特殊训练:
  这里给大家出个题目:一块160GB的硬盘,有主分区也有扩展分区。其中硬盘的前32GB是主分区,其余空间为扩展分区。扩展分区下是逻辑分区,每个逻辑分区中都有重要的资料。现在,想把硬盘的前32GB,也就是物理位置位于扩展分区前的空间分成三份。其中第一份用来安装windows,第二份用来安装Linux,第三份用来安装solaris 。硬盘的前32GB的数据已经被转移,现在请给出分区方案。

  使用Linux的fdisk工具创建硬盘分区表。内容如下:

分区表一:
代码:
# fdisk -l

Disk /dev/hda: 171.7 GB, 171798691840 bytes
255 heads, 63 sectors/track, 20886 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

 Device Boot Start End Blocks Id System
/dev/hda1 * 1 4000 32129968+ 7 HPFS/NTFS
/dev/hda2 4001 20886 135636795 5 Extended
/dev/hda5 4001 4500 4016218+ 7 HPFS/NTFS
/dev/hda6 4501 6000 12048718+ b W95 FAT32
/dev/hda7 6001 8500 20081218+ 7 HPFS/NTFS
/dev/hda8 8501 9750 10040593+ 83 Linux
/dev/hda9 9751 11000 10040593+ 83 Linux
/dev/hda10 11001 11125 1004031 82 Linux swap / Solaris
/dev/hda11 11126 20886 78405201 83 Linux

  把上面创建的分区表改成分区表二的相同的内容

分区表二:

代码:
# fdisk /dev/hda -l

Disk /dev/hda: 171.7 GB, 171798691840 bytes
255 heads, 63 sectors/track, 20886 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

 Device Boot Start End Blocks Id System

/dev/hda1 1 1250 10040593+ 7 HPFS/NTFS
/dev/hda2 1251 2500 10040625 83 Linux
/dev/hda3 * 2501 4000 12048750 bf Solaris
/dev/hda4 4001 20886 135636795 5 Extended
/dev/hda5 4001 4500 4016218+ 7 HPFS/NTFS
/dev/hda6 4501 6000 12048718+ b W95 FAT32
/dev/hda7 6001 8500 20081218+ 7 HPFS/NTFS
/dev/hda8 8501 9750 10040593+ 83 Linux
/dev/hda9 9751 11000 10040593+ 83 Linux
/dev/hda10 11001 11125 1004031 82 Linux swap / Solaris
/dev/hda11 11126 20886 78405201 83 Linux
  上面有两个例子,都是对已有数据的分区进行修改的。共同的地方是修改的地方都是位于硬盘上的某柱面到某柱面的连续空间。这些空间里的重要数据都是已经拷贝到其它地方了的。上面的两个例子一个是动了主分区,一个是动了扩展下的逻辑分区。这里要补充说明一下的是,不要去修改扩展分区,除非已经安全的备份了数据。如果扩展分区的起始位置变化了,逻辑分区中的数据就无法被操作系统识别了。分区表好比一本书的目录,数据好比书中的内容。操作系统通过读分区表(目录)然后才能知道分区的起始位置以及分区类型是否被识别,然后才是文件系统是否能够识别,识别了文件系统之后才能通过文件索引找到文件位于磁盘上的位置。如果分区记录的起始位置、分区类型,与实际硬盘上的不符合,这样就会出现故障。MBR中的主分区表尤其关健,如果出错可能就无法正常引导操作系统或者无法读取硬盘数据。逻辑分区表位于扩展分区之中,对于扩展技术不了解,有知道的帮我补充一下。

  通过过了上面的分区的的训练之后,才可以进行接下来的 LFS / BLFS 。
  这里不用其它分区工具,包括不使用一些图形化的分区工具的原因是为了更多的去了解分区的实际操作过程。
  我不用一些可以任意修改分区大小的分区工具。理由很简单,因为不知道什么时候一不小心就停电了。这样做的风险太大,效率不高,对操作者的动手能力及经验的提升太小。

  对物理硬盘进行操作:

  当上面的这些操作都很熟练之后,就可以对物理硬盘的分区表进行操作。(这里,强烈要求使用默认不挂载硬盘分区的LiveCD进行此操作。用 lfslivecd 就很好)
  先将硬盘分区进行备份,然后使用fdisk将物理硬盘分区表记录删除。然后从备份恢复。
  备份 fdisk -l 的信息,或者 fdisk -ul 。多块硬盘的分清主从以及 hda 或 sda 。备份/恢复分区表还可以用sfdisk工具:

代码:
  sfdisk备份/恢复 分区表
  用实际的设备名称替换掉 /dev/hdx
  # sfdisk -d /dev/hdx > /mnt/backup/partab-hdx.sfdisk (备份)
  # sfdisk /dev/hdx < /mnt/backup/partab-hdx.sfdisk (恢复)
  最好这两种方法都要会。这里的重点是 fdisk 手工备份/恢复。备份之后,再将原先硬盘分区表用fdisk工具一个一个的删掉,再从邮箱中找出 fdisk -l 的分区表信息,按照备份重建分区表。之后再挂载分区,会发现数据都还原封不动的放在那里。(如果在linux启动后硬盘上有分区先被挂载过,使用 fdisk 修改分区后需要重启机器才能生效。要特别注意!! )
  只要分区表中的信息与硬盘上实际的分区是吻合的,而且文件系统未受到破坏,操作系统就可以识别硬盘中的数据。
  关于分区和引导的问题可以看这里: 备份/恢复MBR和分区表以及无备份修复MBR和分区表错误,浅谈引导故障和分区方案。
  http://www.linuxsir.org/bbs/showthread.php?t=303559

补充说明:
  在Linux系统中,使用fdisk工具对已挂载的分区进行修改,需要重启之后才能生效。这是Linux中fdisk的特点。
  当然我们这里是使用的lfslivecd ,从这张LiveCD启动后默认是不挂载硬盘分区的。所以上面的这些操作不受此限。



现在我们来了解一下这个 lfslivecd-6.2-5 的 LiveCD .
LiveCD是什么?
说直白点就是从光盘启动的Linux .把这样的光盘放入光驱中,然后改BIOS设置从光盘启动.或者按主板热键改默认启动项,华硕主板的是F8键,微星主板的是F11键.
现在选择从光盘启动(使用vmware虚拟机的朋友,也可以改vmware虚拟机的BIOS设置从光盘启动) .


现在屏幕上有提示说按 Enter 键启动,或者按 F1 键显示可选项.现在我们按 F1 键,查看一下可选项.
这里说了,如果要设置字符环境下的分辨率,可以加 vga=xxx 这样的选项.比如在 boot 提示符后输入 linux vga=791 .这里我们先不去设置,如果有使用默认显示不正常的情况,重启后再修改不迟.
第三说如果要使用64位的内核做CLFS,可以在这里输入 linux64 .
至于CLFS ,可以看下这里. ( CLFS不是本文要讲的内容 )
http://cross-lfs.org/
http://cross-lfs.org/view/

然后的几段英文我不懂.如果你想知道,可以使用一下 http://www.google.com 右侧有个语言工具,用这个翻译一下.

好了,现在我们输入 linux 后按 Enter 键,或者直接按Enter键,使用默认启动系统.

系统启动后,会出现让我们选择区域时间的对话.这里我们选择 亚洲-上海 ,重庆的朋友看下有没有Asia/Chongqi .

然后,选择使用本地时间. Localtime ..

接下来屏幕上会出现一些说明文字。我的英文很差,如果你能看懂就看一下。这里介绍了两个重要目录:/lfs-sources 目录下有我们构建LFS系统所需要的所有的源码包,不需要到处去找软件了。 /usr/share/LFS-BOOK-6.2-HTML 目录下是6.2-5这个版本的手册,手册一些网页形式的。首页的文件名就是index.html 。手册是英文版的,如果你有6.2手册的中文版,可以对照着看。但是,以光盘上的英文手册为准。

现在敲Enter键,出现字符控制台。可以看到前面出现了一个 # ,现在我们使用的就是root用户。Linux有七个控制台,在字符环境下可以按Ctrl + F2 (从F1到F7)切换控制台。其中F7这个控制台是专为Xwindow准备的。现在运行 startx 命令可以启动 xwindow 图形化界面。图形下按 Ctrl 加 Alt 加 ( F1 到 F6 )切换到另一个控制台。如果现在图形界面下按Ctrl+Alt+F1键到刚才运行startx这条命令的控制台下,可以看到屏幕上显示的正是F7这个控制台的图形窗口界面后台运行的一些信息。如果这时按Ctrl键和C的组合键,会将刚才执行的startx这条命令这个进程中止掉,自然也就停止了图形化界面的运行。关闭图形后,如果想再次启动图形界面,只需要再次执行 startx 就可以了。

如果,你有足够的内存,如果你的物理内存在512以上,你完全可以在图形化界面下工作。但,如果内存很小,就不必启图形了。

现在,先 cat /etc/issue 可以看到一些版本的信息,这些内容我们刚才已经见过了。

现在,如果你需要使用网络,可以运行 net-setup 进行网络设置。

如果,需要使用另一台机器登录到现在的这个开发环境中的机器,可以使用ssh 。要开启ssh服务,只需要执行 /etc/rc.d/init.d/sshd start 。 然后 passwd root ,给root用户设置密码。之后就可以在另一台机器上通过ssh协议来远程控制这台机器了。
上传的图像
000.gif (6.8 KB, 84 次查看)
002.gif (9.6 KB, 69 次查看)
003.gif (9.8 KB, 53 次查看)
004.gif (7.6 KB, 54 次查看)
017.gif (7.8 KB, 47 次查看)

作者: huohuliaisili   发布时间: 2007-05-17

  这里,我们最好还是使用真实环境来做LFS。如果你还不能够十分有把握的使用真实环境,你应该先回到第一帖,研究一下关于分区表和系统引导的知识。

  (再次强调一下:本文仅作参考,应当以手册为准。另外,文中的软件都不是最新,如果喜欢使用较新软件,请看SVN版手册。当然,也可以尝试CLFS 。)

对主系统的要求(细节看LFS-6.2-5手册)
我们使用的是lfslivecd-6.2-5,光盘上的系统是满足开发环境需要的
代码:
cat > version-check.sh << "EOF"
#!/bin/bash

# Simple script to list version numbers of critical development tools

bash --version | head -n1 | cut -d" " -f2-4
echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-4
bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-
echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
diff --version | head -n1
find --version | head -n1
gawk --version | head -n1
gcc --version | head -n1
/lib/libc.so.6 | head -n1 | cut -d" " -f1-7
grep --version | head -n1
gzip --version | head -n1
cat /proc/version | head -n1 | cut -d" " -f1-3,5-7
make --version | head -n1
patch --version | head -n1
sed --version | head -n1
tar --version | head -n1

EOF


bash version-check.sh

下面的这部分是需要按照实际情况进行修改的地方
##### 00-root/00-root 由root用户来决定所有的准备工作。这部分要求手工输入,防止出错。 #####
# 如果物理内存很少,可以先启用swap.这里,我们使用一个硬盘分区作为swap 。
#用实际的分区替换下面的 /dev/<xxx>。比如 /dev/hda7 。
#如果物理内存在512以上,并且只在字符环境下操作,在构建LFS系统的过程中就可以不需要启用swap。 #
代码:
mkswap /dev/<xxx>
swapon /dev/<xxx>
#创建一个ext3文件系统,这里 /dev/<xxx>用实际的硬盘分区设备名称替换掉,比如 /dev/hda6 。当然也可以使用其它的Linux的文件系统。#
代码:
mkfs.ext3 /dev/<xxx>
# Linux只需要一个分区作为根文件系统就可以了。swap不是必须的。但是我们最好还是单独的为swap创建一个分区。上面已经创建了swap和一个满足Linux需要的系统分区。如果想创建更多分区的可以使用类似的方法。 #


##### 准备工作 #####
#定义LFS环境变量
代码:
export LFS=/mnt/lfs
#挂载目标文件系统,我们将在这个文件系统上构建LFS。用实际的分区替换下面的 /dev/<xxx>
代码:
mkdir -pv $LFS
mount -v -t ext3 /dev/<xxx> $LFS
#这里,如果为系统分配了再多的分区,可以一并挂载。用实际的分区替换下面的 /dev/<yyy>
代码:
#mkdir -pv $LFS/usr
#mount -v -t ext3 /dev/<yyy> $LFS/usr
# 创建 $LFS/sources 目录
代码:
mkdir -v $LFS/sources
chmod -v a+wt $LFS/sources
# 检查LFS环境变量
代码:
echo $LFS
# 如果上面的命令输出结果不正确,用这条命令进行设置:
代码:
export LFS=/mnt/lfs
# 创建$LFS/tools目录
代码:
mkdir -v $LFS/tools
ln -sv $LFS/tools /
# 添加lfs用户,在构建临时的编译环境的时候用lfs用户来做这些事情
代码:
groupadd lfs
useradd -s /bin/bash -g lfs -m -k /dev/null lfs
# 为lfs用户设置密码。(如果是使用中文的图形界面终端来做,可能会看到提示说密码未更改,不必理会,这是翻译出错。实际上密码已经修改了。)
代码:
passwd lfs
# 将 $LFS/tools (工具目录) 和 $LFS/sources (原码编译目录)的属主改为 lfs 用户。让lfs用户具有对这两个目录的完全访问权限。
代码:
chown -v lfs $LFS/tools
chown -v lfs $LFS/sources
# 以lfs用户身分登录。
代码:
su - lfs

代码:
##### 01-lfs-path/00-lfs.sh #####
# 设置工作环境
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
代码:
##### 构建临时的编译环境 #####
##
# 5.3. Binutils-2.16.1 - 第一遍
cd $LFS/sources
tar xvf /lfs-sources/binutils-2.16.1.tar.bz2
cd binutils-2.16.1
mkdir -v ../binutils-build
cd ../binutils-build
../binutils-2.16.1/configure --prefix=/tools --disable-nls
make
make install
make -C ld clean
make -C ld LIB_PATH=/tools/lib
cp -v ld/ld-new /tools/bin
cd $LFS/sources

# 5.4. GCC-4.0.3 - 第一遍
cd $LFS/sources
tar xvf /lfs-sources/gcc-4.0.3.tar.bz2
cd gcc-4.0.3
mkdir -v ../gcc-build
cd ../gcc-build
../gcc-4.0.3/configure --prefix=/tools \
 --with-local-prefix=/tools --disable-nls --enable-shared \
 --enable-languages=c
make bootstrap
make install
ln -vs gcc /tools/bin/cc
cd $LFS/sources


# 5.5. Linux-Libc-Headers-2.6.12.0
cd $LFS/sources
tar xvf /lfs-sources/linux-libc-headers-2.6.12.0.tar.bz2
cd linux-libc-headers-2.6.12.0
cp -Rv include/asm-i386 /tools/include/asm
cp -Rv include/linux /tools/include
cd $LFS/sources

# 5.6. Glibc-2.3.6
cd $LFS/sources
tar xvf /lfs-sources/glibc-2.3.6.tar.bz2
cd glibc-2.3.6
mkdir -v ../glibc-build
cd ../glibc-build
../glibc-2.3.6/configure --prefix=/tools \
 --disable-profile --enable-add-ons \
 --enable-kernel=2.6.0 --with-binutils=/tools/bin \
 --without-gd --with-headers=/tools/include \
 --without-selinux
make
mkdir -v /tools/etc
touch /tools/etc/ld.so.conf
make install
cd $LFS/sources

# 5.7. 调整工具链
mv -v /tools/bin/{ld,ld-old}
mv -v /tools/$(gcc -dumpmachine)/bin/{ld,ld-old}
mv -v /tools/bin/{ld-new,ld}
ln -sv /tools/bin/ld /tools/$(gcc -dumpmachine)/bin/ld

SPECFILE=`dirname $(gcc -print-libgcc-file-name)`/specs &&
gcc -dumpspecs > $SPECFILE &&
sed 's@^/lib/ld-linux.so.2@/tools&@g' $SPECFILE > tempspecfile &&
mv -vf tempspecfile $SPECFILE &&
unset SPECFILE

GCC_INCLUDEDIR=`dirname $(gcc -print-libgcc-file-name)`/include &&
find ${GCC_INCLUDEDIR}/* -maxdepth 0 -xtype d -exec rm -rvf '{}' \; &&
rm -vf `grep -l "DO NOT EDIT THIS FILE" ${GCC_INCLUDEDIR}/*` &&
unset GCC_INCLUDEDIR

echo 'main(){}' > dummy.c
cc dummy.c
readelf -l a.out | grep ': /tools'

rm -v dummy.c a.out

# 
# 5.8. Tcl-8.4.13
cd $LFS/sources
tar xvf /lfs-sources/tcl8.4.13-src.tar.gz
cd tcl8.4.13
cd unix
./configure --prefix=/tools
make
make install
make install-private-headers
ln -sv tclsh8.4 /tools/bin/tclsh
cd $LFS/sources

# 5.9. Expect-5.43.0
cd $LFS/sources
tar xvf /lfs-sources/expect-5.43.0.tar.gz
cd expect-5.43
patch -Np1 -i /lfs-sources/expect-5.43.0-spawn-1.patch
./configure --prefix=/tools --with-tcl=/tools/lib \
 --with-tclinclude=/tools/include --with-x=no
make
make SCRIPTS="" install
cd $LFS/sources


# 5.10. DejaGNU-1.4.4
cd $LFS/sources
tar xvf /lfs-sources/dejagnu-1.4.4.tar.gz
cd dejagnu-1.4.4
./configure --prefix=/tools
make install
cd $LFS/sources

# 5.11. GCC-4.0.3 - 第二遍
cd $LFS/sources
rm -rf $LFS/sources/*
tar xvf /lfs-sources/gcc-4.0.3.tar.bz2
cd gcc-4.0.3
expect -c "spawn ls"
cp -v gcc/Makefile.in{,.orig} &&
sed 's@\./fixinc\.sh@-c true@' gcc/Makefile.in.orig > gcc/Makefile.in
cp -v gcc/Makefile.in{,.tmp} &&
sed 's/^XCFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in.tmp \
 > gcc/Makefile.in
patch -Np1 -i /lfs-sources/gcc-4.0.3-specs-1.patch
mkdir -v ../gcc-build
cd ../gcc-build
../gcc-4.0.3/configure --prefix=/tools \
 --with-local-prefix=/tools --enable-clocale=gnu \
 --enable-shared --enable-threads=posix \
 --enable-__cxa_atexit --enable-languages=c,c++ \
 --disable-libstdcxx-pch
make
make install
echo 'main(){}' > dummy.c
cc dummy.c
readelf -l a.out | grep ': /tools'
rm -v dummy.c a.out
cd $LFS/sources

#5.12. Binutils-2.16.1 - 第二遍
cd $LFS/sources
rm -rf $LFS/sources/*
tar xvf /lfs-sources/binutils-2.16.1.tar.bz2
cd binutils-2.16.1
mkdir -v ../binutils-build
cd ../binutils-build
../binutils-2.16.1/configure --prefix=/tools \
 --disable-nls --with-lib-path=/tools/lib
make
make install
make -C ld clean
make -C ld LIB_PATH=/usr/lib:/lib
cp -v ld/ld-new /tools/bin
cd $LFS/sources

# 5.13. Ncurses-5.5
cd $LFS/sources
tar xvf /lfs-sources/ncurses-5.5.tar.gz
cd ncurses-5.5
./configure --prefix=/tools --with-shared \
 --without-debug --without-ada --enable-overwrite
make
make install
cd $LFS/sources

# 5.14. Bash-3.1
cd $LFS/sources
tar xvf /lfs-sources/bash-3.1.tar.gz
cd bash-3.1
patch -Np1 -i /lfs-sources/bash-3.1-fixes-8.patch
./configure --prefix=/tools --without-bash-malloc
make
make install
ln -vs bash /tools/bin/sh
cd $LFS/sources

# 5.15. Bzip2-1.0.3
cd $LFS/sources
tar xvf /lfs-sources/bzip2-1.0.3.tar.gz
cd bzip2-1.0.3
make
make PREFIX=/tools install
cd $LFS/sources

# 5.16. Coreutils-5.96
cd $LFS/sources
tar xvf /lfs-sources/coreutils-5.96.tar.bz2
cd coreutils-5.96
./configure --prefix=/tools
make
make install
cd $LFS/sources


# 5.17. Diffutils-2.8.1
cd $LFS/sources
tar xvf /lfs-sources/diffutils-2.8.1.tar.gz
cd diffutils-2.8.1
./configure --prefix=/tools
make
make install
cd $LFS/sources


# 5.18. Findutils-4.2.27
cd $LFS/sources
tar xvf /lfs-sources/findutils-4.2.27.tar.gz
cd findutils-4.2.27
./configure --prefix=/tools
make
make install
cd $LFS/sources

# 5.19. Gawk-3.1.5
cd $LFS/sources
tar xvf /lfs-sources/gawk-3.1.5.tar.bz2
cd gawk-3.1.5
./configure --prefix=/tools
cat >>config.h <<"EOF"
#define HAVE_LANGINFO_CODESET 1
#define HAVE_LC_MESSAGES 1
EOF
make
make install
cd $LFS/sources

# 5.20. Gettext-0.14.5
cd $LFS/sources
tar xvf /lfs-sources/gettext-0.14.5.tar.gz
cd gettext-0.14.5
cd gettext-tools
./configure --prefix=/tools --disable-shared
make -C lib
make -C src msgfmt
cp -v src/msgfmt /tools/bin
cd $LFS/sources

# 5.21. Grep-2.5.1a
cd $LFS/sources
tar xvf /lfs-sources/grep-2.5.1a.tar.bz2
cd grep-2.5.1a
./configure --prefix=/tools \
 --disable-perl-regexp
make
make install
cd $LFS/sources

# 5.22. Gzip-1.3.5
cd $LFS/sources
tar xvf /lfs-sources/gzip-1.3.5.tar.gz
cd gzip-1.3.5
./configure --prefix=/tools
make
make install
cd $LFS/sources

# 5.23. M4-1.4.4
cd $LFS/sources
tar xvf /lfs-sources/m4-1.4.4.tar.gz
cd m4-1.4.4
./configure --prefix=/tools
make
make install
cd $LFS/sources

# 5.24. Make-3.80
cd $LFS/sources
tar xvf /lfs-sources/make-3.80.tar.bz2
cd make-3.80
./configure --prefix=/tools
make
make install
cd $LFS/sources

# 5.25. Patch-2.5.4
cd $LFS/sources
tar xvf /lfs-sources/patch-2.5.4.tar.gz
cd patch-2.5.4
./configure --prefix=/tools
make
make install
cd $LFS/sources

# 5.26. Perl-5.8.8
cd $LFS/sources
tar xvf /lfs-sources/perl-5.8.8.tar.bz2
cd perl-5.8.8
patch -Np1 -i /lfs-sources/perl-5.8.8-libc-2.patch
./configure.gnu --prefix=/tools -Dstatic_ext='Data/Dumper Fcntl IO POSIX'
make perl utilities
cp -v perl pod/pod2man /tools/bin
mkdir -pv /tools/lib/perl5/5.8.8
cp -Rv lib/* /tools/lib/perl5/5.8.8
cd $LFS/sources

# 5.27. Sed-4.1.5
cd $LFS/sources
tar xvf /lfs-sources/sed-4.1.5.tar.gz
cd sed-4.1.5
./configure --prefix=/tools
make
make install
cd $LFS/sources

# 5.28. Tar-1.15.1
cd $LFS/sources
tar xvf /lfs-sources/tar-1.15.1.tar.bz2
cd tar-1.15.1
patch -Np1 -i /lfs-sources/tar-1.15.1-gcc4_fix_tests-1.patch
./configure --prefix=/tools
make
make install
cd $LFS/sources

# 5.29. Texinfo-4.8
cd $LFS/sources
tar xvf /lfs-sources/texinfo-4.8.tar.bz2
cd texinfo-4.8
./configure --prefix=/tools
make
make install
cd $LFS/sources

# 5.30. Util-linux-2.12r
cd $LFS/sources
tar xvf /lfs-sources/util-linux-2.12r.tar.bz2
cd util-linux-2.12r
sed -i 's@/usr/include@/tools/include@g' configure
./configure
make -C lib
make -C mount mount umount
make -C text-utils more
cp mount/{,u}mount text-utils/more /tools/bin
cd $LFS/sources
rm -rf $LFS/sources/*
##### 5.31. 清理系统 #####
这部分被省略掉了,详情看手册。

代码:
##### 03-chown-and-mount/00-mount_lfs-sources #####
#####
mkdir /mnt/lfs/lfs-sources
mount --bind /lfs-sources /mnt/lfs/lfs-sources
代码:
###### 03-chown-and-mount/01-chroot #####

chown -R root:root $LFS/tools

mkdir -pv $LFS/{dev,proc,sys}
mknod -m 600 $LFS/dev/console c 5 1
mknod -m 666 $LFS/dev/null c 1 3
mount --bind /dev $LFS/dev
mount -vt devpts devpts $LFS/dev/pts
mount -vt tmpfs shm $LFS/dev/shm
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys

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
代码:
###### 03-chown-and-mount/02_mkdir #####

mkdir -pv /{bin,boot,etc/opt,home,lib,mnt,opt}
mkdir -pv /{media/{floppy,cdrom},sbin,srv,var}
install -dv -m 0750 /root
install -dv -m 1777 /tmp /var/tmp
mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src}
mkdir -pv /usr/{,local/}share/{doc,info,locale,man}
mkdir -v /usr/{,local/}share/{misc,terminfo,zoneinfo}
mkdir -pv /usr/{,local/}share/man/man{1..8}
for dir in /usr /usr/local; do
 ln -sv share/{man,doc,info} $dir
done
mkdir -v /var/{lock,log,mail,run,spool}
mkdir -pv /var/{opt,cache,lib/{misc,locate},local}

ln -sv /tools/bin/{bash,cat,grep,pwd,stty} /bin
ln -sv /tools/bin/perl /usr/bin
ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib
ln -sv bash /bin/sh

touch /etc/mtab

cat > /etc/passwd << "EOF"
root:x:0:0:root:/root:/bin/bash
EOF

cat > /etc/group << "EOF"
root:x:0:
bin:x:1:
sys:x:2:
kmem:x:3:
tty:x:4:
tape:x:5:
daemon:x:6:
floppy:x:7:
disk:x:8:
lp:x:9:
dialout:x:10:
audio:x:11:
video:x:12:
utmp:x:13:
usb:x:14:
cdrom:x:15:
EOF

exec /tools/bin/bash --login +h
代码:
###### 03-chown-and-mount/03_login+h #####
touch /var/run/utmp /var/log/{btmp,lastlog,wtmp}
chgrp -v utmp /var/run/utmp /var/log/lastlog
chmod -v 664 /var/run/utmp /var/log/lastlog
代码:
###### 04-chroot-sh/ #####
# 6.7. Linux-Libc-Headers-2.6.12.0
cd /sources
tar xvf /lfs-sources/linux-libc-headers-2.6.12.0.tar.bz2
cd linux-libc-headers-2.6.12.0
patch -Np1 -i /lfs-sources/linux-libc-headers-2.6.12.0-inotify-3.patch
install -dv /usr/include/asm
cp -Rv include/asm-i386/* /usr/include/asm
cp -Rv include/linux /usr/include
chown -Rv root:root /usr/include/{asm,linux}
find /usr/include/{asm,linux} -type d -exec chmod -v 755 {} \;
find /usr/include/{asm,linux} -type f -exec chmod -v 644 {} \;
cd /sources

# 6.8. Man-pages-2.34
cd /sources
tar xvf /lfs-sources/man-pages-2.34.tar.bz2
cd man-pages-2.34
make install
cd /sources

# 6.9. Glibc-2.3.6
cd /sources
tar xvf /lfs-sources/glibc-2.3.6.tar.bz2
cd glibc-2.3.6
tar -xf /lfs-sources/glibc-libidn-2.3.6.tar.bz2
patch -Np1 -i /lfs-sources/glibc-2.3.6-linux_types-1.patch
patch -Np1 -i /lfs-sources/glibc-2.3.6-inotify-1.patch
sed -i '/vi_VN.TCVN/d' localedata/SUPPORTED
sed -i \
's|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=/lib/ld-linux.so.2 -o|' \
 scripts/test-installation.pl
mkdir -v ../glibc-build
cd ../glibc-build
../glibc-2.3.6/configure --prefix=/usr \
 --disable-profile --enable-add-ons \
 --enable-kernel=2.6.0 --libexecdir=/usr/lib/glibc
make
make -k check 2>&1 | tee glibc-check-log
grep Error glibc-check-log
touch /etc/ld.so.conf
make install
cp -v ../glibc-2.3.6/sysdeps/unix/sysv/linux/inotify.h \
 /usr/include/sys
make localedata/install-locales

cat > /etc/nsswitch.conf << "EOF"
# Begin /etc/nsswitch.conf

passwd: files
group: files
shadow: files

hosts: files dns
networks: files

protocols: files
services: files
ethers: files
rpc: files

# End /etc/nsswitch.conf
EOF

tzselect
cp -v --remove-destination /usr/share/zoneinfo/Asia/Shanghai \
 /etc/localtime

cat > /etc/ld.so.conf << "EOF"
# Begin /etc/ld.so.conf

/usr/local/lib
/opt/lib

# End /etc/ld.so.conf
EOF

cd /sources

# 6.10. 再次调整工具链
mv -v /tools/bin/{ld,ld-old}
mv -v /tools/$(gcc -dumpmachine)/bin/{ld,ld-old}
mv -v /tools/bin/{ld-new,ld}
ln -sv /tools/bin/ld /tools/$(gcc -dumpmachine)/bin/ld

gcc -dumpspecs | \
perl -p -e 's@/tools/lib/ld-linux.so.2@/lib/ld-linux.so.2@g;' \
 -e 's@\*startfile_prefix_spec:\n@$_/usr/lib/ @g;' > \
 `dirname $(gcc --print-libgcc-file-name)`/specs

echo 'main(){}' > dummy.c
cc dummy.c -Wl,--verbose &> dummy.log
readelf -l a.out | grep ': /lib'

grep -o '/usr/lib.*/crt[1in].* .*' dummy.log

grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'

grep "/lib/libc.so.6 " dummy.log
grep found dummy.log
rm -v dummy.c a.out dummy.log


# 6.11. Binutils-2.16.1
cd /sources
tar xvf /lfs-sources/binutils-2.16.1.tar.bz2
cd binutils-2.16.1
expect -c "spawn ls"
mkdir -v ../binutils-build
cd ../binutils-build
../binutils-2.16.1/configure --prefix=/usr \
 --enable-shared
make tooldir=/usr
make check
make tooldir=/usr install
cp -v ../binutils-2.16.1/include/libiberty.h /usr/include
cd /sources


# 6.12. GCC-4.0.3
cd /sources
tar xvf /lfs-sources/gcc-4.0.3.tar.bz2
cd gcc-4.0.3
sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
sed -i 's/^XCFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in
sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
sed -i 's/@have_mktemp_command@/yes/' gcc/gccbug.in
mkdir -v ../gcc-build
cd ../gcc-build
../gcc-4.0.3/configure --prefix=/usr \
 --libexecdir=/usr/lib --enable-shared \
 --enable-threads=posix --enable-__cxa_atexit \
 --enable-clocale=gnu --enable-languages=c,c++
make

../gcc-4.0.3/contrib/test_summary
make install
ln -sv ../usr/bin/cpp /lib
ln -sv gcc /usr/bin/cc
echo 'main(){}' > dummy.c
cc dummy.c -Wl,--verbose &> dummy.log
readelf -l a.out | grep ': /lib'
grep -o '/usr/lib.*/crt[1in].* .*' dummy.log
grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'
grep "/lib/libc.so.6 " dummy.log
grep found dummy.log
rm -v dummy.c a.out dummy.log
cd /sources

# 6.13. Berkeley DB-4.4.20
cd /sources
tar xvf /lfs-sources/db-4.4.20.tar.gz
cd db-4.4.20
patch -Np1 -i /lfs-sources/db-4.4.20-fixes-1.patch
cd build_unix &&
../dist/configure --prefix=/usr --enable-compat185 --enable-cxx
make
make docdir=/usr/share/doc/db-4.4.20 install
chown -v root:root /usr/bin/db_* \
 /usr/lib/libdb* /usr/include/db* &&
chown -Rv root:root /usr/share/doc/db-4.4.20
cd /sources

# 6.14. Coreutils-5.96
cd /sources
tar xvf /lfs-sources/coreutils-5.96.tar.bz2
cd coreutils-5.96
patch -Np1 -i /lfs-sources/coreutils-5.96-uname-1.patch
patch -Np1 -i /lfs-sources/coreutils-5.96-suppress_uptime_kill_su-1.patch
patch -Np1 -i /lfs-sources/coreutils-5.96-i18n-1.patch
chmod +x tests/sort/sort-mb-tests
sed -i 's/_LEN 6/_LEN 20/' src/who.c
./configure --prefix=/usr
make
echo "dummy1:x:1000:" >> /etc/group
echo "dummy2:x:1001:dummy" >> /etc/group
echo "dummy:x:1000:1000::/root:/bin/bash" >> /etc/passwd
make NON_ROOT_USERNAME=dummy check-root
src/su dummy -c "make RUN_EXPENSIVE_TESTS=yes check"
sed -i '/dummy/d' /etc/passwd /etc/group
make install
mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin
mv -v /usr/bin/{false,hostname,ln,ls,mkdir,mknod,mv,pwd,rm} /bin
mv -v /usr/bin/{rmdir,stty,sync,true,uname} /bin
mv -v /usr/bin/chroot /usr/sbin
mv -v /usr/bin/{head,sleep,nice} /bin

cd /sources

# 6.15. Iana-Etc-2.10
cd /sources
tar xvf /lfs-sources/iana-etc-2.10.tar.bz2
cd iana-etc-2.10
make
make install
cd /sources

# 6.16. M4-1.4.4
cd /sources
tar xvf /lfs-sources/m4-1.4.4.tar.gz
cd m4-1.4.4
./configure --prefix=/usr
make
make install
cd /sources

# 6.17. Bison-2.2
cd /sources
tar xvf /lfs-sources/bison-2.2.tar.bz2
cd bison-2.2
./configure --prefix=/usr
echo '#define YYENABLE_NLS 1' >> config.h
make
make install
cd /sources

# 6.18. Ncurses-5.5
cd /sources
tar xvf /lfs-sources/ncurses-5.5.tar.gz
cd ncurses-5.5
patch -Np1 -i /lfs-sources/ncurses-5.5-fixes-1.patch
./configure --prefix=/usr --with-shared --without-debug --enable-widec
make
make install
chmod -v 755 /usr/lib/*.5.5
chmod -v 644 /usr/lib/libncurses++w.a
mv -v /usr/lib/libncursesw.so.5* /lib
ln -sfv ../../lib/libncursesw.so.5 /usr/lib/libncursesw.so
for lib in curses ncurses form panel menu ; do \
 rm -vf /usr/lib/lib${lib}.so ; \
 echo "INPUT(-l${lib}w)" >/usr/lib/lib${lib}.so ; \
 ln -sfv lib${lib}w.a /usr/lib/lib${lib}.a ; \
done &&
ln -sfv libncurses++w.a /usr/lib/libncurses++.a
echo "INPUT(-lncursesw)" >/usr/lib/libcursesw.so &&
ln -sfv libncurses.so /usr/lib/libcurses.so &&
ln -sfv libncursesw.a /usr/lib/libcursesw.a &&
ln -sfv libncurses.a /usr/lib/libcurses.a
cd /sources

# 6.19. Procps-3.2.6
cd /sources
tar xvf /lfs-sources/procps-3.2.6.tar.gz
cd procps-3.2.6
make
make install
cd /sources

# 6.20. Sed-4.1.5
cd /sources
tar xvf /lfs-sources/sed-4.1.5.tar.gz
cd sed-4.1.5
./configure --prefix=/usr --bindir=/bin --enable-html
make
make install
cd /sources

# 6.21. Libtool-1.5.22
cd /sources
tar xvf /lfs-sources/libtool-1.5.22.tar.gz
cd libtool-1.5.22
./configure --prefix=/usr
make
make install
cd /sources

# 6.22. Perl-5.8.8
cd /sources
tar xvf /lfs-sources/perl-5.8.8.tar.bz2
cd perl-5.8.8
echo "127.0.0.1 localhost $(hostname)" > /etc/hosts
./configure.gnu --prefix=/usr \
 -Dman1dir=/usr/share/man/man1 \
 -Dman3dir=/usr/share/man/man3 \
 -Dpager="/usr/bin/less -isR"
make
make install
cd /sources

# 6.23. Readline-5.1
cd /sources
tar xvf /lfs-sources/readline-5.1.tar.gz
cd readline-5.1
patch -Np1 -i /lfs-sources/readline-5.1-fixes-3.patch
sed -i '/MV.*old/d' Makefile.in
sed -i '/{OLDSUFF}/c:' support/shlib-install
./configure --prefix=/usr --libdir=/lib
make SHLIB_LIBS=-lncurses
make install
chmod -v 755 /lib/lib{readline,history}.so*
mv -v /lib/lib{readline,history}.a /usr/lib
rm -v /lib/lib{readline,history}.so
ln -sfv ../../lib/libreadline.so.5 /usr/lib/libreadline.so
ln -sfv ../../lib/libhistory.so.5 /usr/lib/libhistory.so
cd /sources

# 6.24. Zlib-1.2.3
cd /sources
tar xvf /lfs-sources/zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure --prefix=/usr --shared --libdir=/lib
make
make install
rm -v /lib/libz.so
ln -sfv ../../lib/libz.so.1.2.3 /usr/lib/libz.so
make clean
./configure --prefix=/usr
make
make install
chmod -v 644 /usr/lib/libz.a
cd /sources

# 6.25. Autoconf-2.59
cd /sources
tar xvf /lfs-sources/autoconf-2.59.tar.bz2
cd autoconf-2.59
./configure --prefix=/usr
make
make install
cd /sources

# 6.26. Automake-1.9.6
cd /sources
tar xvf /lfs-sources/automake-1.9.6.tar.bz2
cd automake-1.9.6
./configure --prefix=/usr
make
make install
cd /sources

# 6.27. Bash-3.1
cd /sources
tar xvf /lfs-sources/bash-3.1.tar.gz
cd bash-3.1
tar -xvf /lfs-sources/bash-doc-3.1.tar.gz &&
sed -i "s|htmldir = @htmldir@|htmldir = /usr/share/doc/bash-3.1|" \
 Makefile.in
patch -Np1 -i /lfs-sources/bash-3.1-fixes-8.patch
./configure --prefix=/usr --bindir=/bin \
 --without-bash-malloc --with-installed-readline
make
make install
cd /sources

# 运行新编译的 bash 程序来替换正在执行的这个/tools/bin/bash
exec /bin/bash --login +h

代码:
# 6.28. Bzip2-1.0.3
cd /sources
tar xvf /lfs-sources/bzip2-1.0.3.tar.gz
cd bzip2-1.0.3
patch -Np1 -i /lfs-sources/bzip2-1.0.3-install_docs-1.patch
patch -Np1 -i /lfs-sources/bzip2-1.0.3-bzgrep_security-1.patch
sed -i 's@tempfile -d /tmp -p bz@mktemp -p /tmp@' bzdiff
make -f Makefile-libbz2_so
make clean
make
make install
cp -v bzip2-shared /bin/bzip2
cp -av libbz2.so* /lib
ln -sv ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so
rm -v /usr/bin/{bunzip2,bzcat,bzip2}
ln -sv bzip2 /bin/bunzip2
ln -sv bzip2 /bin/bzcat
cd /sources

# 6.29. Diffutils-2.8.1
cd /sources
tar xvf /lfs-sources/diffutils-2.8.1.tar.gz
cd diffutils-2.8.1
patch -Np1 -i /lfs-sources/diffutils-2.8.1-i18n-1.patch
touch man/diff.1
./configure --prefix=/usr
make
make install
cd /sources

# 6.30. E2fsprogs-1.39
cd /sources
tar xvf /lfs-sources/e2fsprogs-1.39.tar.gz
cd e2fsprogs-1.39
mkdir -v build
cd build
../configure --prefix=/usr --with-root-prefix="" \
 --enable-elf-shlibs --disable-evms
make
make install
make install-libs
cd /sources

# 6.31. File-4.17
cd /sources
tar xvf /lfs-sources/file-4.17.tar.gz
cd file-4.17
./configure --prefix=/usr
make
make install
cd /sources

# 6.32. Findutils-4.2.27
cd /sources
tar xvf /lfs-sources/findutils-4.2.27.tar.gz
cd findutils-4.2.27
./configure --prefix=/usr --libexecdir=/usr/lib/findutils \
 --localstatedir=/var/lib/locate
make
make install
mv -v /usr/bin/find /bin
sed -i -e 's/find:=${BINDIR}/find:=\/bin/' /usr/bin/updatedb
cd /sources

# 6.33. Flex-2.5.33
cd /sources
tar xvf /lfs-sources/flex-2.5.33.tar.bz2
cd flex-2.5.33
./configure --prefix=/usr
make
make install
ln -sv libfl.a /usr/lib/libl.a
cat > /usr/bin/lex << "EOF"
#!/bin/sh
# Begin /usr/bin/lex

exec /usr/bin/flex -l "$@"

# End /usr/bin/lex
EOF
chmod -v 755 /usr/bin/lex
cd /sources

# 6.34. GRUB-0.97
cd /sources
tar xvf /lfs-sources/grub-0.97.tar.gz
cd grub-0.97
patch -Np1 -i /lfs-sources/grub-0.97-disk_geometry-1.patch
./configure --prefix=/usr
make
make install
mkdir -v /boot/grub

##cp -v /usr/lib/grub/i386-pc/stage{1,2} /boot/grub
##### 上面的是手册上的方法,这里改成下面的。 #####
cp -v /usr/lib/grub/i386-pc/* /boot/grub
cd /sources

# 6.35. Gawk-3.1.5
cd /sources
tar xvf /lfs-sources/gawk-3.1.5.tar.bz2
cd gawk-3.1.5
patch -Np1 -i /lfs-sources/gawk-3.1.5-segfault_fix-1.patch
./configure --prefix=/usr --libexecdir=/usr/lib
cat >>config.h <<"EOF"
#define HAVE_LANGINFO_CODESET 1
#define HAVE_LC_MESSAGES 1
EOF
make
make install
cd /sources

# 6.36. Gettext-0.14.5
cd /sources
tar xvf /lfs-sources/gettext-0.14.5.tar.gz
cd gettext-0.14.5
./configure --prefix=/usr
make
make install
cd /sources

# 6.37. Grep-2.5.1a
cd /sources
tar xvf /lfs-sources/grep-2.5.1a.tar.bz2
cd grep-2.5.1a
patch -Np1 -i /lfs-sources/grep-2.5.1a-redhat_fixes-2.patch
chmod +x tests/fmbtest.sh
./configure --prefix=/usr --bindir=/bin
make
make install
cd /sources

# 6.38. Groff-1.18.1.1
cd /sources
tar xvf /lfs-sources/groff-1.18.1.1.tar.gz
cd groff-1.18.1.1
patch -Np1 -i /lfs-sources/groff-1.18.1.1-debian_fixes-1.patch
sed -i -e 's/2010/002D/' -e 's/2212/002D/' \
 -e 's/2018/0060/' -e 's/2019/0027/' font/devutf8/R.proto
PAGE=A4 ./configure --prefix=/usr --enable-multibyte
make
make install
ln -sv eqn /usr/bin/geqn
ln -sv tbl /usr/bin/gtbl
cd /sources


# 6.39. Gzip-1.3.5
cd /sources
tar xvf /lfs-sources/gzip-1.3.5.tar.gz
cd gzip-1.3.5
patch -Np1 -i /lfs-sources/gzip-1.3.5-security_fixes-1.patch
./configure --prefix=/usr
sed -i 's@"BINDIR"@/bin@g' gzexe.in
make
make install
mv -v /usr/bin/gzip /bin
rm -v /usr/bin/{gunzip,zcat}
ln -sv gzip /bin/gunzip
ln -sv gzip /bin/zcat
ln -sv gzip /bin/compress
ln -sv gunzip /bin/uncompress
cd /sources

# 6.40. Inetutils-1.4.2
cd /sources
tar xvf /lfs-sources/inetutils-1.4.2.tar.gz
cd inetutils-1.4.2
patch -Np1 -i /lfs-sources/inetutils-1.4.2-gcc4_fixes-3.patch
patch -Np1 -i /lfs-sources/inetutils-1.4.2-no_server_man_pages-1.patch
./configure --prefix=/usr --libexecdir=/usr/sbin \
 --sysconfdir=/etc --localstatedir=/var \
 --disable-logger --disable-syslogd \
 --disable-whois --disable-servers
make
make install
mv -v /usr/bin/ping /bin
cd /sources

# 6.41. IPRoute2-2.6.16-060323
cd /sources
tar xvf /lfs-sources/iproute2-2.6.16-060323.tar.gz
cd iproute2-2.6.16-060323
make SBINDIR=/sbin
make SBINDIR=/sbin install
mv -v /sbin/arpd /usr/sbin
cd /sources

# 6.42. Kbd-1.12
cd /sources
tar xvf /lfs-sources/kbd-1.12.tar.bz2
cd kbd-1.12
patch -Np1 -i /lfs-sources/kbd-1.12-backspace-1.patch
patch -Np1 -i /lfs-sources/kbd-1.12-gcc4_fixes-1.patch
./configure --datadir=/lib/kbd
make
make install
mv -v /usr/bin/{kbd_mode,openvt,setfont} /bin
cd /sources

# 6.43. Less-394
cd /sources
tar xvf /lfs-sources/less-394.tar.gz
cd less-394
./configure --prefix=/usr --sysconfdir=/etc
make
make install
cd /sources

# 6.44. Make-3.80
cd /sources
tar xvf /lfs-sources/make-3.80.tar.bz2
cd make-3.80
./configure --prefix=/usr
make
make install
cd /sources


# 6.45. Man-DB-2.4.3
cd /sources
tar xvf /lfs-sources/man-db-2.4.3.tar.gz
cd man-db-2.4.3
mv man/de{_DE.88591,} &&
mv man/es{_ES.88591,} &&
mv man/it{_IT.88591,} &&
mv man/ja{_JP.eucJP,} &&
sed -i 's,\*_\*,??,' man/Makefile.in
sed -i '/\t\/usr\/man/d' src/man_db.conf.in
cat >>include/manconfig.h.in <<"EOF"
#define WEB_BROWSER "exec /usr/bin/lynx"
#define COL "/usr/bin/col"
#define VGRIND "/usr/bin/vgrind"
#define GRAP "/usr/bin/grap"
EOF
./configure --prefix=/usr --enable-mb-groff --disable-setuid
make
make install
cat >>convert-mans <<"EOF"
#!/bin/sh -e
FROM="$1"
TO="$2"
shift ; shift
while [ $# -gt 0 ]
do
 FILE="$1"
 shift
 iconv -f "$FROM" -t "$TO" "$FILE" >.tmp.iconv
 mv .tmp.iconv "$FILE"
done
EOF
install -m755 convert-mans /usr/bin

# 6.46. Mktemp-1.5
cd /sources
tar xvf /lfs-sources/mktemp-1.5.tar.gz
cd mktemp-1.5
patch -Np1 -i /lfs-sources/mktemp-1.5-add_tempfile-3.patch
./configure --prefix=/usr --with-libc
make
make install
make install-tempfile
cd /sources

# 6.47. Module-Init-Tools-3.2.2
cd /sources
tar xvf /lfs-sources/module-init-tools-3.2.2.tar.bz2
cd module-init-tools-3.2.2
patch -Np1 -i /lfs-sources/module-init-tools-3.2.2-modprobe-1.patch
./configure &&
make check &&
make distclean
./configure --prefix=/ --enable-zlib
make
make INSTALL=install install
cd /sources

# 6.48. Patch-2.5.4
cd /sources
tar xvf /lfs-sources/patch-2.5.4.tar.gz
cd patch-2.5.4
./configure --prefix=/usr
make
make install
cd /sources

# 6.49. Psmisc-22.2
cd /sources
tar xvf /lfs-sources/psmisc-22.2.tar.gz
cd psmisc-22.2
./configure --prefix=/usr --exec-prefix=""
make
make install
mv -v /bin/pstree* /usr/bin
ln -sv killall /bin/pidof
cd /sources

# 6.50. Shadow-4.0.15
cd /sources
tar xvf /lfs-sources/shadow-4.0.15.tar.bz2
cd shadow-4.0.15
./configure --libdir=/lib --enable-shared --without-selinux
sed -i 's/groups$(EXEEXT) //' src/Makefile
find man -name Makefile -exec sed -i '/groups/d' {} \;
sed -i -e 's/ ko//' -e 's/ zh_CN zh_TW//' man/Makefile
 for i in de es fi fr id it pt_BR; do
 convert-mans UTF-8 ISO-8859-1 man/${i}/*.?
done

for i in cs hu pl; do
 convert-mans UTF-8 ISO-8859-2 man/${i}/*.?
done

convert-mans UTF-8 EUC-JP man/ja/*.?
convert-mans UTF-8 KOI8-R man/ru/*.?
convert-mans UTF-8 ISO-8859-9 man/tr/*.?
make
make install
cp -v etc/{limits,login.access} /etc
sed -e's@#MD5_CRYPT_ENAB.no@MD5_CRYPT_ENAB yes@' \
 -e 's@/var/spool/mail@/var/mail@' \
 etc/login.defs > /etc/login.defs

# sed -i 's@DICTPATH.*@DICTPATH\t/lib/cracklib/pw_dict@' \
# /etc/login.defs

mv -v /usr/bin/passwd /bin
mv -v /lib/libshadow.*a /usr/lib
rm -v /lib/libshadow.so
ln -sfv ../../lib/libshadow.so.0 /usr/lib/libshadow.so
mkdir -v /etc/default
pwconv
grpconv
passwd root
cd /sources

# 6.51. Sysklogd-1.4.1
cd /sources
tar xvf /lfs-sources/sysklogd-1.4.1.tar.gz
cd sysklogd-1.4.1
patch -Np1 -i /lfs-sources/sysklogd-1.4.1-fixes-1.patch
patch -Np1 -i /lfs-sources/sysklogd-1.4.1-8bit-1.patch
make
make install
cat > /etc/syslog.conf << "EOF"
# Begin /etc/syslog.conf

auth,authpriv.* -/var/log/auth.log
*.*;auth,authpriv.none -/var/log/sys.log
daemon.* -/var/log/daemon.log
kern.* -/var/log/kern.log
mail.* -/var/log/mail.log
user.* -/var/log/user.log
*.emerg *

# End /etc/syslog.conf
EOF
cd /sources

# 6.52. Sysvinit-2.86
cd /sources
tar xvf /lfs-sources/sysvinit-2.86.tar.gz
cd sysvinit-2.86
sed -i 's@Sending processes@& started by init@g' \
 src/init.c
make -C src
make -C src install
cat > /etc/inittab << "EOF"
# Begin /etc/inittab

id:3:initdefault:

si::sysinit:/etc/rc.d/init.d/rc sysinit

l0:0:wait:/etc/rc.d/init.d/rc 0
l1:S1:wait:/etc/rc.d/init.d/rc 1
l2:2:wait:/etc/rc.d/init.d/rc 2
l3:3:wait:/etc/rc.d/init.d/rc 3
l4:4:wait:/etc/rc.d/init.d/rc 4
l5:5:wait:/etc/rc.d/init.d/rc 5
l6:6:wait:/etc/rc.d/init.d/rc 6

ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

su:S016:once:/sbin/sulogin

1:2345:respawn:/sbin/agetty tty1 9600
2:2345:respawn:/sbin/agetty tty2 9600
3:2345:respawn:/sbin/agetty tty3 9600
4:2345:respawn:/sbin/agetty tty4 9600
5:2345:respawn:/sbin/agetty tty5 9600
6:2345:respawn:/sbin/agetty tty6 9600

# End /etc/inittab
EOF
cd /sources

# 6.53. Tar-1.15.1
cd /sources
tar xvf /lfs-sources/tar-1.15.1.tar.bz2
cd tar-1.15.1
patch -Np1 -i /lfs-sources/tar-1.15.1-gcc4_fix_tests-1.patch
patch -Np1 -i /lfs-sources/tar-1.15.1-sparse_fix-1.patch
patch -Np1 -i /lfs-sources/tar-1.15.1-security_fixes-1.patch
./configure --prefix=/usr --bindir=/bin --libexecdir=/usr/sbin
make
make install
cd /sources

# 6.54. Texinfo-4.8
cd /sources
tar xvf /lfs-sources/texinfo-4.8.tar.bz2
cd texinfo-4.8
patch -Np1 -i /lfs-sources/texinfo-4.8-multibyte-1.patch
patch -Np1 -i /lfs-sources/texinfo-4.8-tempfile_fix-2.patch
./configure --prefix=/usr
make
make install
make TEXMF=/usr/share/texmf install-tex
cd /usr/share/info
rm dir
for f in *
do install-info $f dir 2>/dev/null
done
cd /sources

# 6.55. Udev-096
cd /sources
tar xvf /lfs-sources/udev-096.tar.bz2
cd udev-096
tar xf /lfs-sources/udev-config-6.2.tar.bz2
install -dv /lib/{firmware,udev/devices/{pts,shm}}
mknod -m0666 /lib/udev/devices/null c 1 3
ln -sv /proc/self/fd /lib/udev/devices/fd
ln -sv /proc/self/fd/0 /lib/udev/devices/stdin
ln -sv /proc/self/fd/1 /lib/udev/devices/stdout
ln -sv /proc/self/fd/2 /lib/udev/devices/stderr
ln -sv /proc/kcore /lib/udev/devices/core
make EXTRAS="extras/ata_id extras/cdrom_id extras/edd_id \
 extras/firmware extras/floppy extras/path_id \
 extras/scsi_id extras/usb_id extras/volume_id"
make DESTDIR=/ \
 EXTRAS="extras/ata_id extras/cdrom_id extras/edd_id \
 extras/firmware extras/floppy extras/path_id \
 extras/scsi_id extras/usb_id extras/volume_id" install
cp -v udev-config-6.2/[0-9]* /etc/udev/rules.d/
install -m644 -D -v docs/writing_udev_rules/index.html \
 /usr/share/doc/udev-096/index.html
cd /sources

# 6.56. Util-linux-2.12r
cd /sources
tar xvf /lfs-sources/util-linux-2.12r.tar.bz2
cd util-linux-2.12r
sed -i 's@etc/adjtime@var/lib/hwclock/adjtime@g' \
 hwclock/hwclock.c
mkdir -p /var/lib/hwclock
patch -Np1 -i /lfs-sources/util-linux-2.12r-cramfs-1.patch
./configure
make HAVE_KILL=yes HAVE_SLN=yes
make HAVE_KILL=yes HAVE_SLN=yes install
cd /sources

# 6.57. Vim-7.0
cd /sources
tar xvf /lfs-sources/vim-7.0.tar.bz2
cd vim70
patch -Np1 -i /lfs-sources/vim-7.0-fixes-7.patch
patch -Np1 -i /lfs-sources/vim-7.0-mandir-1.patch
patch -Np1 -i /lfs-sources/vim-7.0-spellfile-1.patch
echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h
./configure --prefix=/usr --enable-multibyte
make
make install
rm -f /usr/share/vim/vim70/tutor/tutor.{gr,pl,ru,sk}
rm -f /usr/share/vim/vim70/tutor/tutor.??.*
ln -sv vim /usr/bin/vi
for L in "" fr it pl ru; do
 ln -sv vim.1 /usr/share/man/$L/man1/vi.1
done
ln -sv ../vim/vim70/doc /usr/share/doc/vim-7.0
cat > /etc/vimrc << "EOF"
" Begin /etc/vimrc

set nocompatible
set backspace=2
syntax on
if (&term == "iterm") || (&term == "putty")
 set background=dark
endif

" End /etc/vimrc
EOF
vim -c ':options'

# To use these spell files, some configuration in /etc/vimrc is needed, e.g.:
# set spelllang=en,ru
# set spell

cd /sources
rm -rf /sources/*

##### 第七章 配置系统启动脚本 #####

cd /sources
tar xvf /lfs-sources/lfs-bootscripts-6.2.tar.bz2
cd lfs-bootscripts-6.2
make install
cd /sources
rm -rf /sources/*


引用:
# 手册的 第七章 配置启动脚本 到 第八章 8.2. 创建 /etc/fstab 文件 这部分可以放在一起来做。这里可能会遗漏了一些,欲知详情的还是看下手册。所以这里是需要根据具体情况进行修改的。
########## 7.5. Configuring the setclock Script ##########

cat > /etc/sysconfig/clock << "EOF"
# Begin /etc/sysconfig/clock

UTC=0

# End /etc/sysconfig/clock
EOF

########## 7.8. Creating the /etc/inputrc File ##########
# /etc/inputrc File

cat > /etc/inputrc << "EOF"
# Begin /etc/inputrc
# Modified by Chris Lynn <[email protected]>

# Allow the command prompt to wrap to the next line
set horizontal-scroll-mode Off

# Enable 8bit input
set meta-flag On
set input-meta On

# Turns off 8th bit stripping
set convert-meta Off

# Keep the 8th bit for display
set output-meta On

# none, visible or audible
set bell-style none

# All of the following map the escape sequence of the
# value contained inside the 1st argument to the
# readline specific functions

"\eOd": backward-word
"\eOc": forward-word

# for linux console
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[3~": delete-char
"\e[2~": quoted-insert

# for xterm
"\eOH": beginning-of-line
"\eOF": end-of-line

# for Konsole
"\e[H": beginning-of-line
"\e[F": end-of-line

# End /etc/inputrc
EOF

########## 7.9. The Bash Shell Startup Files ##########
locale -a

LC_ALL=en_GB.iso88591 locale charmap

LC_ALL=en_GB.ISO-8859-1 locale language
LC_ALL=en_GB.ISO-8859-1 locale charmap
LC_ALL=en_GB.ISO-8859-1 locale int_curr_symbol
LC_ALL=en_GB.ISO-8859-1 locale int_prefix

cat > /etc/profile << "EOF"
# Begin /etc/profile

#export LANG=POSIX
export LANG=en_GB.ISO-8859-1
export INPUTRC=/etc/inputrc

# End /etc/profile
EOF


echo "HOSTNAME=LFS6.25" > /etc/sysconfig/network

########## 7.11. Customizing the /etc/hosts File ##########
cat > /etc/hosts << "EOF"
# Begin /etc/hosts (network card version)

127.0.0.1 localhost
192.168.1.2 localhost LFS6.25
#192.168.1.2 HOSTNAME.example.org [alias1] [alias2 ...]

# End /etc/hosts (network card version)
EOF


########## 7.12. Creating custom symlinks to devices ##########
# 运行下面的命令得出 /dev/hdd 或者 /dev/hdc 这两个IDE接口的光驱设备的序号。详见手册。
# cd /sys/block/hdd
# udevtest /block/hdd

# cd /sys/block/hdc
# udevtest /block/hdc


cat >/etc/udev/rules.d/82-cdrom.rules << EOF

# Custom CD-ROM symlinks
SUBSYSTEM=="block", ENV{ID_TYPE}=="cd", ENV{ID_PATH}=="pci-0000:00:0f.1-ide-1:0", SYMLINK+="cdrom"
SUBSYSTEM=="block", ENV{ID_TYPE}=="cd", ENV{ID_PATH}=="pci-0000:00:0f.1-ide-1:1", SYMLINK+="dvdrw"

EOF

########## 7.13. Configuring the network Script ##########
## 运行下面的这条命令得出网卡的MAC地址,然后通过创建的 /etc/udev/rules.d/26-network.rules 这个文件将MAC地址和网络接口名称对应。
# grep -H . /sys/class/net/*/address

cat > /etc/udev/rules.d/26-network.rules << EOF
ACTION=="add", SUBSYSTEM=="net", SYSFS{address}=="00:11:09:d0:00:6f", NAME="eth0"
ACTION=="add", SUBSYSTEM=="net", SYSFS{address}=="00:00:00:00:00:00", NAME="lo"
EOF


########## 7.13.2 Creating Network Interface Configuration Files ##########
##### 配置 eth0 ,如果有多块网卡可以用类似的方法再建一个类似的文件 #####

cd /etc/sysconfig/network-devices &&
mkdir -v ifconfig.eth0 &&
cat > ifconfig.eth0/ipv4 << "EOF"
ONBOOT=yes
SERVICE=ipv4-static
IP=192.168.1.30
GATEWAY=192.168.1.1
PREFIX=24
BROADCAST=192.168.1.255
EOF

########## 7.13.3. Creating the /etc/resolv.conf File ##########
########## 通过下面这个修改文件来指定DNS ##########
cat > /etc/resolv.conf << "EOF"
# Begin /etc/resolv.conf

domain localhost
nameserver 218.104.78.3
nameserver 218.104.78.2

# End /etc/resolv.conf
EOF

########## 8. Making the LFS System Bootable ##########
########## 创建 /etc/fstab 文件,此文件如果出错,系统将无法正常启动 ##########
cat > /etc/fstab << "EOF"
# Begin /etc/fstab

# file system mount-point type options dump fsck
# order

/dev/sda2 / xfs defaults 1 1
#/dev/hda3 swap swap pri=1 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
devpts /dev/pts devpts gid=4,mode=620 0 0
shm /dev/shm tmpfs defaults 0 0
# End /etc/fstab
EOF

代码:
###### 编译内核 #####
# 8.3. Linux-2.6.16.38

cd /sources
tar xvf /lfs-sources/linux-2.6.16.38.tar.bz2
cd linux-2.6.16.38
patch -Np1 -i /lfs-sources/linux-2.6.16.27-utf8_input-1.patch
make mrproper
make menuconfig
make
make modules_install
cp -v arch/i386/boot/bzImage /boot/lfskernel-2.6.16.38
cp -v System.map /boot/System.map-2.6.16.38
cp -v .config /boot/config-2.6.16.38
install -d /usr/share/doc/linux-2.6.16.38 &&
cp -r Documentation/* /usr/share/doc/linux-2.6.16.38
cd /sources
  在编译内核的时候,注意要在filesystem这项中加上需要支持的文件系统。暂时不必做多少选择,只加入文件系统的支持就可以了。因为,不会一次就做得那么好,以后重编译内核是肯定要做的事情。备份.config文件..
引用:
cp /boot/config-2.6.16.38 /boot/.config_old
引用:
####### 8.4. Making the LFS System Bootable #######
##        GRUB 引导装载程序        ##
########## floppy (没有软驱,此处可忽略)##########
# dd if=/boot/grub/stage1 of=/dev/fd0 bs=512 count=1
# dd if=/boot/grub/stage2 of=/dev/fd0 bs=512 seek=1
grub
# 下面这两段按具体的配置来写。不论什么硬盘,grub这里只认hd0为第一硬盘,(hd0,0)就是表示第一硬盘第一分区。多块硬盘的需要注意一下。
#root (hd0,2)
# 这里的 setup (hd0) 表示把引导代码写到hd0这整块硬盘的最前面的一个扇区MBR的前446字节。当然也可以写到系统分区的第一扇区。只要你要办法让它启动就可以了。
#setup (hd0)
#quit

cat > /boot/grub/menu.lst << "EOF"
# Begin /boot/grub/menu.lst

# By default boot the first menu entry.
default 0

# Allow 30 seconds before booting the default.
timeout 30

# Use prettier colors.
color green/black light-green/black

# The first entry is for LFS.
title LFS 6.2
root (hd0,1)
kernel /boot/lfskernel-2.6.16.38 root=/dev/sda2
EOF

mkdir -v /etc/grub &&
ln -sv /boot/grub/menu.lst /etc/grub

echo 6.2-5 > /etc/lfs-release

退出chroot环境
引用:
#手工的敲命令退出chroot环境
exit
#使用这条命令来确定已经退出了chroot环境。回到了主系统中。
cat /etc/issue

  缷载临时挂载的文件系统。

#缷载从主系统挂载到LFS系统中的 /lfs-sources 并删除$LFS/lfs-source 空目录。
代码:
umount $LFS/lfs-sources
rmdir $LFS/lfs-sources
代码:
umount -v $LFS/dev/pts
umount -v $LFS/dev/shm
umount -v $LFS/dev
umount -v $LFS/proc
umount -v $LFS/sys
umount -v $LFS

  重启机器,尝试启动LFS系统。如果不能正常启动,从上面提到的几个地方。比如配置文件,或者编译内核。

  LFS手册上有说/tools目录是在构建LFS系统的过程中构建的临时的编译环境,在LFS完成之后这个工具目录可以删除。但是很多人都还保留它。如果你还想用它来编译系统,也可以留着。用做LFS同样的方法, mount -vo bind /tools ${LFS}/tools 挂载到目标系统就可以了。

作者: huohuliaisili   发布时间: 2007-05-17

BLFS
http://www.linuxfromscratch.org/blfs
http://www.linuxfromscratch.org/blfs/download.html

青铜镜大哥的帖子 (懒人的BLFS)朝着KDE前进…… http://www.linuxsir.org/bbs/showthread.php?t=298338


  按照手册完成了LFS之后,我们已经有了一个基本的系统。这个系统是命令行的,字符的。如果需要使用下载软件,这里需要安装。如果需要配服务器,也需要安装相关的服务器软件。总之,要进一步的完善其功能,就需要继续安装软件继续进行配置。这里,我们就需要继续BLFS的内容了。
  就我的理解,BLFS就是为了继续完善扩充以及定制Linux系统。所以BLFS不等于图形化界面。
  我的英语很差,差到极点。只能够认识26个英文字母大小写。曾经我认为BLFS难就难在了英文上了。
  青铜镜大哥的两篇关于实现Linux桌面系统的帖子,给了我不小的兴趣。照着青铜镜大哥的方法我很快的先后用上了XFce和KDE。之后也出现过很多问题,然后自己一次次的摸索,一次次的看BLFS手册。
  BLFS手册不再像LFS手册那样,不再是头到尾做一次就可以了的。BLFS有更多的选择性,它更像一个综合市场。你可以决定买什么,不买什么。LFS的做法可能有很多种,但是目前我只会按照手册上做的这一种。所以我还没有能够体会到LFS是如何完全定制Linux的。学习本身就是一个反复的过程,可能不久之后,我会再继续发掘LFS,再找出新的方法 。
  BLFS中感觉最多的就是依赖性问题。安装一个软件包,必须先安装什么包或者好几个包。而且这些依赖的包可能又要依赖另外的软件包。这样的手册看起来就十分的头疼。但,同时,这本手册也很无敌。目前我在做BLFS的时候遇到的问题几乎还没有发现不能在手册中找到答案的。这样头疼的英文手册渐渐的我也能看懂一些,不会的地方我就查在线词典或者全文翻译的网站。编译过程中的提示信息或者提示错误信息十分重要。要学会分析如何解决这些问题。

  中文图形桌面KDE篇

  在BLFS-6.2.0手册中查找KDE
  从 " 28. KDE Core Packages " 这里开始看手册.
  首先,讲到的是关于KDE的安装目录的问题..手册上讲了两种选择,一种方法是将KDE安装到 /usr 目录下, 这样在以后如果想安装其它版本的KDE的时候会比较麻烦..另一种方法是把KDE安装到 /opt/kde-xxx 目录下. 这里我们使用的是KDE3.5.6 . 所以我们将所有的 KDE软件都安装到 /opt/kde-3.5.6 这个目录下..如果以后有什么变动,只需要将此目录删除,然后修改相关的配置文件就可以了..大家应该都知道KDE4已经出来的,所以在这里我们将KDE软件安装在/opt/kde-3.5.6这个目录下 . 这里讲一下/opt 目录,其实/opt 这个目录也没有太多要说. 出于一种习惯我们都喜欢把一些非正式的,或者说把一些不太确定是否一直不再有变动的软件安装到这里..当然,变是永恒的,不变是暂时的.. Linux系统中专门为我们安装一些大型软件或者临时软件而准备了这个/opt目录..其实也就是为了方便我们更好的管理软件..当然,通常我们的软件都会以一个目录的方式存放在/opt/ 下. .这样,看到这个目录就知道它是存放了什么软件,看上去就一目了然.
  在安装所有KDE软件的时候,我们可以把这些KDE软件包的安装目录规定为 /opt/kde-3.5.6
  手册上给我们的方法是用下面的这个命令定义这些KDE软件包的安装目录.
  export KDE_PREFIX=/opt/kde-3.5.6
  用export 定义安装目录,有个坏处..它只在当前控制台下生效.在其它控制台的时候就需要重新定义..而且,当退出(用户登出)之后,就需要重新定义..我曾经就有一次忘了定义KDE的安装目录,白费了两小时的编译,又花了近三个小时的时间查错.之后又重编译安装KDE的软件包..所以我们换个方法。
接着,将安装KDE软件包的依赖性问题解决好,下载需要使用到的软件,这样就可以开始安装KDE了.


首先是研究手册:
#KDE Core Packages
#KDE的几个核心的软件包

#aRts-1.5.6
  #必須依赖Qt-3.3.7和GLib-2.10.3 。所以需要先要安装这两个。

#Kdelibs-3.5.6
  #对上面的aRts有依赖。所以要先安装aRts-1.5.6

#Kdebase-3.5.6
  #对上面的kdelibs-3.5.6有依赖。所以先安装kdelibs-3.5.6

--------------------------------------------------------------------------

#由于KDE-3.5.6的核心软件包对Qt-3.3.7和Glib-2.10.3有依赖。所以现在先解决这两个依赖的软件包


Qt-3.3.7
  #依赖" X Window System "


Glib-2.10.3
  #依赖 pkg-config-0.20
#这里pkg-config-0.20没有必须的依赖性需要。
-------------------------------------------------------------------------

#现在先解决Qt-3.3.7对X Windows System的依赖。
#关于X window System手册上给了两个选择。一种是Xorg-6.9.0 ,另一种是XFree86-4.6.0 。我们选择Xorg-6.9.0

# 确定选择了Xorg-6.9.0之后,我们再来看这个软件包有什么依赖关系需要解决。
  # 必须的依赖 libpng-1.2.12 和 Fontconfig-2.3.2
#libpng-1.2.12没有必须的依赖性问题 。
#Fontconfig-2.3.2
  # 依赖FreeType-2.1.10和expat-2.0.0
#FreeType-2.1.10没有必須的依赖性问题
#expat-2.0.0没有必须的依赖性问题
增加一个可选的软件包
Linux-PAM-0.99.4.0


  从上面的分析可以看出,现在我们曾先要解决的是安装 X window System 。我们选择了Xorg6.9.0 。

  这里,我们需要下载安装过程中需要的软件。详情请看BLFS-6.2.0手册。
我们下载的软件因为以后可能还会用到,所以把它放在一个非系统分区上比较好。也就是我们的存储区。然后我们可以在LFS系统的/etc/fstab文件中指定系统启动时就挂载这个存储区。然后在LFS系统根目录下创建一个指向下载软件的链接。举个例子:比如我们的的存储区是/dev/hda5这个分区(最好是Linux支持读写的),我们在这个分区的根目录下建一个名称为BLFS的目录。然后设置挂载这个分区,并创建一个链接。过程如下:

  mkdir /media/hda5 && mount /dev/hda5 /media/hda5
  mkdir /media/hda5/BLFS
  # 将BLFS原码包目录链接到根目录下
  ln -sv /media/hda5/BLFS /

  (如果你下载到linux系统分区,可以只需要在根目录下建一个/BLFS目录)
  解压缩软件包,仍然延用LFS阶段时的 /sources 目录。所以希望你还没有删除这个目录,如果已经删除最好还是先建一个。

  2007-05-21下午四点半左右正式获得青铜镜大哥的帮助和允许,现在将青铜镜大哥的帖子引用一段,并作一些修改。
  以下内容照抄一段青铜镜大哥的帖子 (懒人的BLFS)朝着KDE前进…… http://www.linuxsir.org/bbs/showthread.php?t=298338 

代码:
01-Xwindow
-----------------------------------
  01-libpng
***********************************
cd /sources
tar xvf /BLFS/libpng-1.2.12.tar.bz2
cd libpng-1.2.12
./configure --prefix=/usr &&
make
make install &&
install -v -m755 -d /usr/share/doc/libpng-1.2.12 &&
install -v -m644 README libpng.txt /usr/share/doc/libpng-1.2.12
cd /sources
rm -rf libpng-1.2.12
***********************************
  02-expat
***********************************
cd /sources
tar xvf /BLFS/expat-2.0.0.tar.gz
cd expat-2.0.0
./configure --prefix=/usr &&
make
make install &&
install -v -m755 -d /usr/share/doc/expat-2.0.0 &&
install -v -m644 doc/*.{html,png,css} /usr/share/doc/expat-2.0.0
cd /sources
rm -rf expat-2.0.0
***********************************
  03-freetype
***********************************
cd /sources
tar xvf /BLFS/freetype-2.1.10.tar.bz2
cd freetype-2.1.10
tar xf /BLFS/freetype-doc-2.1.10.tar.bz2 \
 --strip-components=2 -C docs
sed -i -r 's:.*(#.*BYTE.*) .*:\1:' \
 include/freetype/config/ftoption.h &&
./configure --prefix=/usr &&
make
make install &&
install -v -m755 -d /usr/share/doc/freetype-2.1.10 &&
cp -v -R docs/* /usr/share/doc/freetype-2.1.10
cd /sources
rm -rf freetype-2.1.10
***********************************
  04-fontconfig
***********************************
cd /sources
tar xvf /BLFS/fontconfig-2.3.2.tar.gz
cd fontconfig-2.3.2
./configure --prefix=/usr --sysconfdir=/etc \
 --disable-docs --without-add-fonts \
 --with-docdir=/usr/share/doc/fontconfig-2.3.2 &&
make install &&
install -v -m644 doc/*.3 /usr/share/man/man3 &&
install -v -m644 doc/*.5 /usr/share/man/man5 &&
install -v -m755 \
 -d /usr/share/doc/fontconfig-2.3.2/fontconfig-devel &&
install -v -m644 doc/*.{html,pdf,txt} \
 /usr/share/doc/fontconfig-2.3.2 &&
install -v -m644 doc/fontconfig-devel/* \
 /usr/share/doc/fontconfig-2.3.2/fontconfig-devel
cd /sources
rm -rf fontconfig-2.3.2

***********************************
  05-linux-pam
***********************************
cd /sources
tar xvf /BLFS/Linux-PAM-0.99.4.0.tar.bz2
cd Linux-PAM-0.99.4.0
tar -xf /BLFS/Linux-PAM-0.99.4.0-docs.tar.bz2 -C doc
./configure --libdir=/usr/lib \
 --sbindir=/lib/security \
 --enable-securedir=/lib/security \
 --enable-docdir=/usr/share/doc/Linux-PAM-0.99.4.0 \
 --enable-read-both-confs &&
make
make install &&
chmod -v 4755 /lib/security/unix_chkpwd &&
mv -v /lib/security/pam_tally /sbin &&
mv -v /usr/lib/libpam*.so.0* /lib &&
ln -v -sf ../../lib/libpam.so.0.81.3 /usr/lib/libpam.so &&
ln -v -sf ../../lib/libpamc.so.0.81.0 /usr/lib/libpamc.so &&
ln -v -sf ../../lib/libpam_misc.so.0.81.2 /usr/lib/libpam_misc.so
for DOCTYPE in html pdf ps txts
do
 cp -v -R doc/$DOCTYPE /usr/share/doc/Linux-PAM-0.99.4.0
done
cd /sources
rm -rf Linux-PAM-0.99.4.0

***********************************
  06-Xorg-6.9.0_1
***********************************
cd /sources
tar xvf /BLFS/X11R6.9.0-src.tar.bz2
cd xc
patch -Np1 -i /BLFS/xorg-6.9.0-luit_race-1.patch &&
patch -Np1 -i /BLFS/xorg-6.9.0-security-4.patch
sed -i 's@/usr/X11R6@</usr>@' programs/luit/parser.h
sed -i '/^SUBDIRS =/s/ etc$//' programs/Xserver/Xprint/Imakefile
pushd config/util &&
make -f Makefile.ini lndir
popd
mkdir ../xcbuild &&
cd ../xcbuild &&
../xc/config/util/lndir ../xc

cat > config/cf/host.def << "EOF"
/* Begin Xorg host.def file */

/* System Related Information. If you read and configure only one
 * section then it should be this one. The Intel architecture defaults
 * are set for a i686 and higher. Axp is for the Alpha architecture
 * and Ppc is for the Power PC. AMD64 is for the Opteron processor.
 * Note that there have been reports that the Ppc optimization line
 * causes segmentation faults during build. If that happens, try
 * building without the DefaultGcc2PpcOpt line. ***********/

/* #define DefaultGcc2i386Opt -O2 -fno-strength-reduce \
 -fno-strict-aliasing -march=i686 */
/* #define DefaultGcc2AMD64Opt -O2 -fno-strength-reduce \
 -fno-strict-aliasing */
/* #define DefaultGcc2AxpOpt -O2 -mcpu=ev6 */
/* #define DefaultGcc2PpcOpt -O2 -mcpu=750 */

#define HasFreetype2 YES
#define HasFontconfig YES
#define HasExpat YES
#define HasLibpng YES
#define HasZlib YES

/* Uncomment the following define if you'd like
 * xdm to use Linux-PAM
#define HasPam YES
 */

/*
 * Which drivers to build. When building a static server, each of
 * these will be included in it. When building the loadable server
 * each of these modules will be built.
 *
#define XF86CardDrivers mga glint nv tga s3virge sis rendition \
 neomagic i740 tdfx savage \
 cirrus vmware tseng trident chips apm \
 GlideDriver fbdev i128 \
 ati DevelDrivers ark \
 cyrix siliconmotion vesa vga \
 XF86OSCardDrivers XF86ExtraCardDrivers
*/

/*
 * Select the XInput devices you want by uncommenting this.
 *
#define XInputDrivers mouse keyboard acecad calcomp citron \
 digitaledge dmc dynapro elographics \
 microtouch mutouch penmount spaceorb \
 summa wacom void magictouch aiptek
 */

/* Most installs will only need this */

#define XInputDrivers mouse keyboard

/* Xterm is no longer built by default */
#define BuildXterm YES

/* Disable building Xprint server and clients until we get them figured
 * out but build Xprint libraries to allow precompiled binaries such as
 * Acrobat Reader to run.
 */

#define XprtServer NO
#define BuildXprintClients NO

/* Uncomment the following define if you would prefer to install X into
 * /usr or change it to any other location that you prefer.
 * The GL related defines disable compatibility symlinks (the links
 * are not needed when X is installed in /usr).
#define ProjectRoot /usr
#define LinkGLToUsrInclude NO
#define LinkGLToUsrLib NO
 */

/* End Xorg host.def file */
EOF

sed -i -e "s@^#include <linux/config.h>@/* & */@" \
 `grep -lr linux/config.h *` &&
( make World 2>&1 | tee xorg-compile.log && exit $PIPESTATUS )

make install &&
make install.man
ln -v -s ../X11R6/bin /usr/bin/X11 &&
ln -v -s ../X11R6/lib/X11 /usr/lib/X11 &&
ln -v -s ../X11R6/include/X11 /usr/include/X11
install -v -d -m755 /usr/share/fonts &&
ln -svn /usr/X11R6/lib/X11/fonts/TTF /usr/share/fonts/X11-TTF

cat >> /etc/ld.so.conf << "EOF" 
/usr/X11R6/lib
EOF
ldconfig &&
cat >> /etc/profile << "EOF" 
export PATH=$PATH:/usr/X11R6/bin
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/X11R6/lib/pkgconfig
EOF
/sbin/ldconfig &&
cd ~ &&
/usr/X11R6/bin/Xorg -configure

***********************************
  07-test-text
***********************************
/usr/X11R6/bin/X -config ~/xorg.conf.new

# Ctrl+Alt+backspace #
# 按 Ctrl+Alt+backspace 退出X
***********************************
  08-Xorg-6.9.0_2
***********************************
install -v -m755 -D ~/xorg.conf.new /etc/X11/xorg.conf
cat > ~/.xinitrc << "EOF" &&
# Begin .xinitrc file
xterm -g 80x40+0+0 &
xclock -g 100x100-0+0 &
twm
EOF
cat >> /etc/sysconfig/createfiles << "EOF"
/tmp/.ICE-unix dir 1777 root root
EOF
exit

***********************************
  09-test-test
***********************************
startx
xcalc &

***********************************
代码:
02-qt
----------------------------------
  10-libjpeg
***********************************
cd /sources
tar xvf /BLFS/jpegsrc.v6b.tar.gz
cd jpeg-6b
./configure --prefix=/usr --enable-static --enable-shared &&
make
make install
cd /sources
rm -rf jpeg-6b
exit

***********************************
  11-little_cms
***********************************
cd /sources
tar xvf /BLFS/lcms-1.15.tar.gz
cd lcms-1.15
./configure --prefix=/usr &&
make
make install &&
install -v -m755 -d /usr/share/doc/lcms-1.15 &&
install -v -m644 README.1ST doc/* /usr/share/doc/lcms-1.15
cd /sources
rm -rf lcms-1.15
cd /sources
exit

***********************************
  12-libmng
***********************************
cd /sources
tar xvf /BLFS/libmng-1.0.9.tar.gz
cd libmng-1.0.9
cp makefiles/makefile.linux Makefile &&
make
make prefix=/usr install &&
install -v -m644 doc/man/*.3 /usr/share/man/man3 &&
install -v -m644 doc/man/*.5 /usr/share/man/man5 &&
install -v -m755 -d /usr/share/doc/libmng-1.0.9 &&
install -v -m644 doc/*.{png,txt} /usr/share/doc/libmng-1.0.9
cd /sources
rm -rf libmng-1.0.9

***********************************
  13-blfs-bootscripts
***********************************
tar xvf /BLFS/blfs-bootscripts-20060910.tar.bz2
***********************************
  14-nas
***********************************
cd /sources
tar xvf /BLFS/nas-1.7.src.tar.gz
cd nas-1.7
patch -Np1 -i /BLFS/nas-1.7-gcc4-1.patch &&
xmkmf &&
make World
make install install.man &&
install -v -m755 -d /usr/share/doc/nas-1.7/pdf &&
install -v -m644 doc/pdf/* /usr/share/doc/nas-1.7/pdf &&
install -v -m644 doc/{README,actions,*.{ps,txt}} \
 /usr/share/doc/nas-1.7
install -v -m644 /etc/nas/nasd.conf.eg /etc/nas/nasd.conf
cd /sources
rm -rf nas-1.7

***********************************
  15-nas
***********************************
cd /sources
cd blfs-bootscripts-20060910
make install-nas
cd /sources

***********************************
  17-qt
***********************************
cat > ~/.login << "EOF"
export QTDIR=/opt/qt
export PATH=$QTDIR/bin:$PATH
export MANPATH=$QTDIR/man:$MANPATH
export LD_LIBRARY_PATH=$QTDIR/lib/libqt-mt.so:$LD_LIBRARY_PATH
EOF

cat > ~/.profile << "EOF"
export QTDIR=/opt/qt
export PATH=$QTDIR/bin:$PATH
export MANPATH=$QTDIR/man:$MANPATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
EOF

cp /BLFS/qt-x11-free-3.3.7.tar.bz2 /opt
cd /opt
tar xvf qt-x11-free-3.3.7.tar.bz2
mv qt-x11-free-3.3.7 qt
cd qt

export QTDIR=/opt/qt-3.3.7 &&
export LD_LIBRARY_PATH=/opt/qt-3.3.7/lib:$LD_LIBRARY_PATH &&
export PATH=/opt/qt-3.3.7/bin:$PATH &&

cd /opt

***********************************
代码:
03-qt-test
(qt-测试)
----------------------------------
  18-qt
***********************************
# 如果这一部分是编成脚本来做,需要将脚本拷贝到/opt/qt 目录中再运行。

cd /opt/qt
./configure -prefix /opt/qt-3.3.7 \
-sysconfdir /etc/qt \
-qt-gif \
-system-zlib \
-system-libpng \
-system-libjpeg \
-system-libmng \
-plugin-imgfmt-png \
-plugin-imgfmt-jpeg \
-plugin-imgfmt-mng \
-no-exceptions \
-thread \
-tablet &&

make sub-tools &&

make install &&
ln -v -sfn qt-3.3.7 /opt/qt &&
ln -v -s libqt-mt.so /opt/qt/lib/libqt.so &&
cp -v -r doc/man /opt/qt/doc &&
cp -v -r examples /opt/qt/doc

export QTDIR=/opt/qt

cat >> /etc/ld.so.conf << "EOF" &&
# Begin qt addition to /etc/ld.so.conf

/opt/qt/lib

# End qt addition
EOF
ldconfig &&
cat >> /etc/man_db.conf << "EOF"
# Begin qt addition to man_db.conf

MANDATORY_MANPATH /opt/qt/doc/man

# End qt addition to man_db.conf
EOF

cat >> /etc/profile << "EOF"
export PARH=$PATH:/opt/qt-3.3.7/bin
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/qt-3.3.7/lib/pkgconfig
EOF
cd ..

***********************************
  19-test-test
***********************************
qmake
designer &
assistant &

***********************************
代码:
04-support_library
(支持库)
---------------------------------
  20-pkg-config
***********************************
cd /sources
tar xvf /BLFS/pkg-config-0.20.tar.gz
cd pkg-config-0.20
./configure --prefix=/usr &&
make
make install
cd /sources
rm -rf pkg-config-0.20

***********************************
  21-glib
***********************************
cd /sources
tar xvf /BLFS/glib-2.10.3.tar.bz2
cd glib-2.10.3
./configure --prefix=/usr &&
make
make install
cd /sources
rm -rf glib-2.10.3

***********************************
  22-atk
***********************************
cd /sources
tar xvf /BLFS/atk-1.11.4.tar.bz2
cd atk-1.11.4
./configure --prefix=/usr &&
make
make install
cd /sources
rm -rf atk-1.11.4

***********************************
  23-libtiff
***********************************
cd /sources
tar xvf /BLFS/tiff-3.8.2.tar.gz
cd tiff-3.8.2
./configure --prefix=/usr &&
make
make install
cd /sources
rm -rf tiff-3.8.2

***********************************
  24-cairo
***********************************
cd /sources
tar xvf /BLFS/cairo-1.2.4.tar.gz
cd cairo-1.2.4
./configure --prefix=/usr &&
make
make install
cd /sources
rm -rf cairo-1.2.4

***********************************
  25-pango
***********************************
cd /sources
tar xvf /BLFS/pango-1.12.3.tar.bz2
cd pango-1.12.3
./configure --prefix=/usr --sysconfdir=/etc &&
make
make install
cd /sources
rm -rf pango-1.12.3

***********************************
  26-gtk+
***********************************
cd /sources
tar xvf /BLFS/gtk+-2.8.20.tar.bz2
cd gtk+-2.8.20
./configure --prefix=/usr --sysconfdir=/etc &&
make
make install &&
install -v -m755 -d /usr/share/doc/gtk+-2.8.20/{faq,tutorial} &&
cp -v -R docs/faq/html/* /usr/share/doc/gtk+-2.8.20/faq &&
cp -v -R docs/tutorial/html/* /usr/share/doc/gtk+-2.8.20/tutorial
cd /sources
rm -rf gtk+-2.8.20

***********************************
代码:
05-recommend

(推荐安装的包)
---------------------------------
  40-libogg
***********************************
cd /sources
tar xvf /BLFS/libogg-1.1.3.tar.gz
cd libogg-1.1.3
./configure --prefix=/usr &&
make
make install
cd /sources
rm -rf liboog-1.1.3

***********************************
  41-libvorbis
***********************************
cd /sources
tar xvf /BLFS/libvorbis-1.1.2.tar.gz
cd libvorbis-1.1.2
./configure --prefix=/usr &&
make
sed -i.bak -e 's/-mno-ieee-fp//' lib/Makefile
make install &&
install -v -m644 doc/Vorbis* /usr/share/doc/libvorbis-1.1.2
cd /sources
rm -rf libvorbis-1.1.2

***********************************
  42-audiofile
***********************************
cd /sources
tar xvf /BLFS/audiofile-0.2.6.tar.gz
cd audiofile-0.2.6
./configure --prefix=/usr &&
make
make install
cd /sources
rm -rf audiofile-0.2.6

***********************************
  43-esound
***********************************
cd /sources
tar xvf /BLFS/esound-0.2.36.tar.bz2
cd esound-0.2.36
sed -i 's@doc/esound@&-0.2.36@' configure &&
./configure --prefix=/usr --sysconfdir=/etc &&
make
make install
cp -v -R docs/html /usr/share/doc/esound-0.2.36
cd /sources
rm -rf esound-0.2.36

***********************************
  44-lame
***********************************
cd /sources
tar xvf /BLFS/lame-3.96.1.tar.gz
cd lame-3.96.1
./configure --prefix=/usr --enable-mp3rtp &&
make
make install
cd /sources
rm -rf lame-3.96.1

***********************************
  45-ffmpeg
***********************************
cd /sources
tar xvf /BLFS/ffmpeg-0.4.9-pre1.tar.gz
cd ffmpeg-0.4.9-pre1
patch -Np1 -i /BLFS/ffmpeg-0.4.9-pre1-gcc4-1.patch &&
patch -Np1 -i /BLFS/ffmpeg-0.4.9-pre1-amr_fixes-1.patch &&
sed -i "s/static uint64/const uint64/" \
 libavcodec/liba52/resample_mmx.c &&
./configure --prefix=/usr --enable-shared \
 --enable-pthreads --disable-ffplay &&
make
make -C doc ff{mpeg,play,server}.1
make install
install -v -m755 -d /usr/share/doc/ffmpeg-0.4.9-pre1 &&
install -v -m644 doc/* /usr/share/doc/ffmpeg-0.4.9-pre1
cd /sources
rm -rf ffmpeg-0.4.9-pre1

***********************************
  46-doxyen
***********************************
cd /sources
tar xvf /BLFS/doxygen-1.4.6.src.tar.gz
cd doxygen-1.4.6
rm src/unistd.h &&
./configure --prefix /usr --docdir /usr/share/doc &&
make
make install
cd /sources
rm -rf doxygen-1.4.6

***********************************
  47-libmad
***********************************
cd /sources
tar xvf /BLFS/libmad-0.15.1b.tar.gz
cd libmad-0.15.1b
./configure --prefix=/usr &&
make
make install
cat > /usr/lib/pkgconfig/mad.pc << "EOF"
prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: mad
Description: MPEG audio decoder
Requires:
Version: 0.15.1b
Libs: -L${libdir} -lmad
Cflags: -I${includedir}
EOF
cd /sources
rm -rf libmad-0.15.1b

***********************************
代码:
06-asla
----------------------------------
  51-alsa-lib
***********************************
cd /sources
tar xvf /BLFS/alsa-lib-1.0.13.tar.bz2
cd alsa-lib-1.0.13
./configure --enable-static &&
make
make install &&
install -v -m644 -D doc/asoundrc.txt \
/usr/share/doc/alsa-lib-1.0.13/asoundrc.txt
make doc
install -v -d -m755 /usr/share/doc/alsa-1.0.13/html &&
install -v -m644 doc/doxygen/html/* /usr/share/doc/alsa-1.0.13/html
cd /sources
rm -rf alsa-lib-1.0.13

***********************************
  52-alsa-plugins
***********************************
cd /sources
tar xvf /BLFS/alsa-plugins-1.0.13.tar.bz2
cd alsa-plugins-1.0.13
./configure &&
make
make install &&
install -v -m755 -d /usr/share/doc/alsa-plugins-1.0.13 &&
install -v -m644 doc/{README*,*.txt} \
/usr/share/doc/alsa-plugins-1.0.13
cd /sources
rm -rf alsa-plugins-1.0.13

***********************************
  53-alsa-utils
***********************************
cd /sources
tar xvf /BLFS/alsa-utils-1.0.13.tar.bz2
cd alsa-utils-1.0.13
./configure &&
make
make install

cd ../blfs-bootscripts-20060910
make install-alsa

cd ../alsa-utils-1.0.13
touch /etc/asound.state &&
alsactl store
cat > /etc/udev/rules.d/40-alsa.rules << "EOF"
# /etc/udev/rules.d/40-alsa.rules

# When a sound device is detected, restore the volume settings
KERNEL=="controlC[0-9]*", ACTION=="add", RUN+="/usr/sbin/alsactl restore %n"
EOF
chmod -v 644 /etc/udev/rules.d/40-alsa.rules
cd /sources
rm -rf alsa-utils-1.0.13

***********************************
代码:
07-KDE
----------------------------------
  60-conf-txt
***********************************
cat >> /etc/profile << "EOF"
# 直接将KDE安装目录加入全局变量。需要变动时再行修改。
export KDE_PREFIX=/opt/kde-3.5.6
export PATH=$PATH:/opt/kde-3.5.6/bin
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/kde-3.5.6/lib/pkgconfig
EOF

cat >> /etc/ld.so.conf << "EOF"
# Begin kde addition to /etc/ld.so.conf

/opt/kde-3.5.6/lib

# End kde addition
EOF

cat >> /etc/man_db.conf << "EOF"
# Begin kde addition to man_db.conf

MANDATORY_MANPATH /opt/kde-3.5.6/man

# End kde addition to man_db.conf
EOF

ln -v -sf kde-3.5.6 /opt/kde

#重登录一次。
init 1 && init 3

***********************************
  61-aRts
***********************************
cd /sources
tar xvf /BLFS/arts-1.5.6.tar.bz2
cd arts-1.5.6
./configure --prefix=$KDE_PREFIX --disable-debug \
 --disable-dependency-tracking &&
make
make install
cd /sources
rm -rf arts-1.5.6
***********************************
  62-PCRE
***********************************
cd /sources
tar xvf /BLFS/pcre-6.7.tar.bz2
cd pcre-6.7
./configure --prefix=/usr --enable-utf8 &&
make
make install &&
install -v -m755 -d /usr/share/doc/pcre-6.7/html &&
install -v -m644 doc/html/* /usr/share/doc/pcre-6.7/html &&
install -v -m644 doc/{Tech.Notes,*.txt} /usr/share/doc/pcre-6.7
mv -v /usr/lib/libpcre.so.* /lib/ &&
ln -v -sf ../../lib/libpcre.so.0 /usr/lib/libpcre.so
cd /sources
rm -rf pcre-6.7

***********************************
  63-kdelibs-3.5.6
***********************************
cd /sources
tar xvf /BLFS/kdelibs-3.5.6.tar.bz2
cd kdelibs-3.5.6
./configure --prefix=$KDE_PREFIX \
 --sysconfdir=/etc/kde \
 --disable-debug \
 --disable-dependency-tracking &&
make
make install
cd /sources
rm -rf kdelibs-3.5.6

***********************************
  65-Kdebase-3.5.6
***********************************
cd /sources
tar xvf /BLFS/kdebase-3.5.6.tar.bz2
cd kdebase-3.5.6
./configure --prefix=$KDE_PREFIX --sysconfdir=/etc/kde \
 --disable-debug --disable-dependency-tracking &&
make
make install
cd /sources
rm -rf kdebase-3.5.6

***********************************
  66-config_cor-kde-gackages
***********************************
echo "exec startkde" > ~/.xinitrc
echo "exec dbus-launch --exit-with-session startkde" >> ~/.xinitrc
update-desktop-database
update-desktop-database
startx

***********************************
备份root目录
cp -Rav /root /root_bak

代码:
***********************************
67-Kdeadmin-3.5.6
***********************************
cd /sources
tar xvf /BLFS/kdeadmin-3.5.6.tar.bz2
cd kdeadmin-3.5.6
./configure --prefix=$KDE_PREFIX --disable-debug \
 --disable-dependency-tracking &&
make
make install
cd /sources
rm -rf kdeadmin-3.5.6
***********************************
68-Kdenetwork-3.5.6
***********************************
cd /sources
tar xvf /BLFS/kdenetwork-3.5.6.tar.bz2
cd kdenetwork-3.5.6
./configure --prefix=$KDE_PREFIX --disable-debug \
 --disable-dependency-tracking &&
make
make install
cd /sources
rm -rf kdenetwork-3.5.6
cd blfs-bootscripts-20060910
make install-lisa

***********************************
69-Kdemultimedia-3.5.6
***********************************
cd /sources
#tar xvf /BLFS/30375-akode-2.0.2.tar.bz2
#cd *akode*
#./configure --prefix=$KDE_PREFIX \
# --disable-debug --disable-dependency-tracking &&
#make
#make install
#cd ..

tar xvf /BLFS/kdemultimedia-3.5.6.tar.bz2
cd kdemultimedia-3.5.6
./configure --prefix=$KDE_PREFIX --sysconfdir=/etc/kde \
 --disable-debug --disable-dependency-tracking &&
make
make install
cd /sources
rm -rf kdemultimedia-3.5.6
***********************************
代码:
  70-kde-i18n-zh_CN(使用繁体中文的朋友下载相应的软件包)
***********************************
cd /sources
tar xvf /BLFS/kde-i18n-zh_CN-3.5.6.tar.bz2
cd kde-i18n-zh_CN-3.5.6
./configure --prefix=$KDE_PREFIX &&
make
make install
cd /sources

***********************************
07-KDE/02-kde-additional-packges
代码:
0705-KdeMultimedia
************************************
cd /sources
tar xvf /CBLFS/kdemultimedia-3.5.7.tar.bz2
cd kdemultimedia-3.5.7
#patch -Np1 -i /CBLFS/kdemultimedia-3.5.7-libtunepimp_0.5.x-1.patch 
./configure --prefix=$KDE_PREFIX --sysconfdir=/etc/kde \
 --disable-debug --disable-dependency-tracking &&
make
make install
cd /sources
rm -rf kdemultimedia-3.5.7
这个时候,如果可以上网,最好是找个Opera浏览器。.tar.bz2或者.tar.gz的那种。这个浏览器的好处是下次打开时可以看到先前未关闭的标签页。很多时候,这样的功能是很管用的。
在线输入法:
原文地址 http://blog.donews.com/windrose/arch...08/580555.aspx

Linux中屏幕偏移的问题:
引用:
0、首先备份/etc/X11/xorg.conf文件
1、在终端运行xvidtune
2、鼠标点击Left或Right按钮
3、点击Test按钮
4、如果test感觉屏幕显示好了,点击Show按钮,这是在终端会记录下一行,内容如下:
"1024x768" 94.50 1024 1096 1192 1376 768 769 772 808 +hsync +vsync
把上面这一行记录下来(复制、笔记)。如果效果还是不好,返回第2步。
5、在/etc/X11/xorg.conf的Section "Monitor"中添加下面一行(当然改成你的第4步记录下来的内容):
Modeline "1024x768" 94.50 1024 1096 1192 1376 768 769 772 808 +hsync +vsync
这句话建议放到对应的EndSection之前一句。如果已经有这句话,在原来的那一句前面添加#符号注释掉。最好先备份一行xorg.conf,以后如果安装新的NV驱动,就需要,因为NV驱动内部已经修正该偏移问题。
6、保存xorg.conf;重新启动Xwindow就可以了。
中文字体

方法一
(推荐)

文泉驿
http://wqy.sourceforge.net/cgi-bin/index.cgi

开源服务
[文泉驿字体下载] http://sourceforge.net/project/downl...se_mirror=nchc
找到 wqy-bitmapfont-pkgsrc 这样的字样 ,带 src 字样的就是了。这是 .tar.gz 的包 ..
cd /sources
tar xvf /BLFS/wqy-bitmapfont-bdf-all-cvs20070506.tar.gz
cd wqy-bitmapfont-all
# 查看安装说明
more INSTALL

# 用opera网页浏览器打开解包的文泉驿字体目录下的 INSTALL.zh.gb2312 (注意设置浏览器的编译为 gb2312 )和 INSTALL 。里面安装说明。我的英文太差,所以我只能一半英文,一半中文的照着看。必要时用一下在线翻译。


方法二

引用 SlackwareV11的字体美化攻略 http://www.linuxsir.org/bbs/showthread.php?t=274779
这里,在找不到中文字体的情况下,我拷贝了几个windows系统中的字体。

到/etc/fonts/fonts.conf中找:

<dir>/usr/X11R6/lib/X11/fonts</dir>
在它之后加入:
<dir>/usr/X11R6/lib/X11/fonts/misc</dir>

拷贝Windows XP下的simsun.ttc到/usr/share/fonts到/usr/share/fonts/ttf目录:
代码:
mkdir -p /usr/share/fonts/ttf
cp /mnt/c/WINDOWS/Fonts/simsun.ttc /usr/share/fonts/ttf/ -v
运行:
代码:
fc-cache -v
退出图形界面

命令行下临时改locale,设置LANG值为zh_CN.UTF-8 。
export LANG=zh_CN.UTF-8
startx
K菜单--> 控制中心 --> 改语言环境为中国

再次退出图形界面,然后startx启动KDE 。此时应该可以正常显示中文的文件名。


locale设置

调节音量:
K菜单--> K多媒体 --> KMix混响器

安装输入法:
fcitx 小企鹅输入法。
因为我们做的这个系统全是用源码包手工编译的,所以我们尽量的在安装软件的过程中使用源码包或者预编译的软件包。比如.bin 或 .bin.tar.bz2 或 .tar.bz2 和 .tar.gz 之类的包。
如果是预编译包,解包后到目录下运行fcitx.install就可以了。
如果是源码包,需要手工编译。
代码:
cd /sources
tar xvf /CBLFS/fcitx-3.4.2.tar.bz2
cd fcotx-3.4.2
./configure --prefix=/usr
make
make install

mkdir -pv /etc/X11/xinit/xinput.d
cat > /etc/X11/xinit/xinput.d/zh_CN << "EOF"
XIM=fcitx
XIM_PROGRAM=fcitx
GTK_IM_MODULE=fcitx
gnome-im-settings-daemon >/dev/null
EOF

安装Mplayer
代码:
# cd /CBLFS
# wget -c http://www.mplayerhq.hu/MPlayer/releases/MPlayer-1.0rc1.tar.bz2
# wget -c http://www.mplayerhq.hu/MPlayer/releases/codecs/essential-20061022.tar.bz2
# wget -c http://www.mplayerhq.hu/MPlayer/releases/codecs/all-20061022.tar.bz2
# lynx http://www.mplayerhq.hu/MPlayer/releases/codecs/
# wget -c http://www.mplayerhq.hu/MPlayer/skins/Blue-1.7.tar.bz2
# lynx http://www1.mplayerhq.hu/MPlayer/skins/
# http://www1.mplayerhq.hu/MPlayer/releases/fonts/font-arial-iso-8859-1.tar.bz2

cd /sources
tar xvf /CBLFS/MPlayer-1.0rc1.tar.bz2
cd MPlayer-1.0rc1

# Install Additinal Codecs:
install -v -d -m755 /usr/lib/mplayer/codecs &&
#tar -xvf /CBLFS/essential-20061022.tar.bz2 -C /usr/lib/mplayer/codecs --strip-components=1 &&
tar -jxvpf /CBLFS/all-20061022.tar.bz2 -C /usr/lib/mplayer/codecs --strip-components=1
chown -v -R root:root /usr/lib/mplayer/codecs

# Install GUI:
install -v -d -m755 /usr/share/mplayer/Skin &&
tar -xvf /CBLFS/Blue-1.7.tar.bz2 -C /usr/share/mplayer/Skin &&
chown -v -R root:root /usr/share/mplayer/Skin/Blue &&
chmod -v 755 /usr/share/mplayer/Skin/Blue{,/icons} &&
ln -sfv Blue /usr/share/mplayer/Skin/default

# Configure and compile the package:
./configure --prefix=/usr --confdir=/etc/mplayer --enable-gui --with-codecsdir=/usr/lib/mplayer/codecs \
 --with-win32libdir=/usr/lib/mplayer/codecs --with-reallibdir=/usr/lib/mplayer/codecs \
 --with-xanimlibdir=/usr/lib/mplayer/codecs --language=zh_CN
make

# Install the package:
make install
# http://www.mplayerhq.hu/design7/dload.html 

install -v -m755 -d /usr/share/doc/mplayer-1.0pre7try2 &&
cp -v -R DOCS/* /usr/share/doc/mplayer-1.0pre7try2
ln -v -s libdha.so.1.0 /usr/lib/libdha.so
install -m644 etc/codecs.conf /etc/mplayer
install -m644 etc/*.conf /etc/mplayer
echo "dev.rtc.max-user-freq=1024" >> /etc/sysctl.conf

# Install the fonts:
tar -xvf /CBLFS/font-arial-iso-8859-1.tar.bz2 -C /usr/share/mplayer/font &&
chown -v -R root:root /usr/share/mplayer/font &&
cd /usr/share/mplayer/font &&
#ln -v -sf font-arial-iso-8859-1/font-arial-FONT_SIZE-iso-8859-1/* .
ln -v -sf font-arial-iso-8859-1/font-arial-14-iso-8859-1/* .
cd /sources
再次备份 /root 为默认配置
cp -Rav /root /default_home
tar -jcvf /default_home.tar.bz2 /root
创建普通用户 , 使用默认用户主目录作为普通用户主目录。
useradd linux
id linux
uid=1001(linux) gid=1001(linux) groups=1001(linux)
cp -Rav /default_home /home/linux
chown -R linux:linux /home/linux/

<以普通用户登录>


选择安装的软件
EVA
firefox
gimp
Openoffice





上传的图像
Default.jpg (93.9 KB, 55 次查看)
Desktop.jpg (149.7 KB, 493 次查看)

作者: huohuliaisili   发布时间: 2007-05-17

精神可嘉,呵呵。

作者: JianLee   发布时间: 2007-05-17

遇到了一些问题,在论坛上找了一些答案出来:

作者: huohuliaisili   发布时间: 2007-05-17

等待继续

作者: youbest   发布时间: 2007-05-17

好帖啊!!
顶之!

作者: neilengineer   发布时间: 2007-05-18

没想到 lfs 现在的安装画面这么漂亮?竟还有图片?
以前好像都没有吧

作者: freesu   发布时间: 2007-05-18

又出现了一位狂人 致敬!!
我要把这个帖子打印出来,一步步做。

疑问:看了安装grub的步骤,好像没有添加其他的操作系统到启动菜单中,grub是不是会自动进行这个操作呀?

另外,你的博客为什么要搞那么宽呢,左右拉来拉去好费力呀!

作者: guo333806   发布时间: 2007-05-19

引用:
作者: guo333806
又出现了一位狂人 致敬!!
我要把这个帖子打印出来,一步步做。

疑问:看了安装grub的步骤,好像没有添加其他的操作系统到启动菜单中,grub是不是会自动进行这个操作呀?

另外,你的博客为什么要搞那么宽呢,左右拉来拉去好费力呀!
最近一两天的时间会对帖子进行频繁的修改。
而且,论坛上所显示的有很多地方不正常。比如把一些字符变成了表情。
当然,完全没有必要打印出来。浪费钱嘛。
直接在电脑上执行下,多省心?就是想修改也很方便,为什么要打印呢?
帖子中还有很多地方没有讲明白的方。所以这需要我再反复的检查几次。
如果有需要,我会上传 .tar.bz2 的压缩包。其中会有详细说明。写这篇帖子也就完全是手册上的内容,只是简单的梳理一下。只是想为初学者引个路,从此LFS不再高不可攀。
关于GRUB的问题,已经写过了,可能你没看到。一会,我再加一下中文注释。
由我使用的是Linux中的firefox浏览器,还有opera浏览器,我看到的我的博客中显示是正常的。看来我得改一改。

作者: huohuliaisili   发布时间: 2007-05-19

你要是把压缩包上传上来的话那就更好了,免得我又要在word里面编辑。
你是用lfs6.2.5Livecd做的,我的电脑上也是这个版本,这样我只要傻瓜式的敲入就可以了,连文件版本号都不需要改。
用livecd编译,我上不了网,因为我们学校要搞个什么认证才行,反正很麻烦。所以就打印啦,算了一下,36页,也才六七块钱。
这样应该能成功了

作者: guo333806   发布时间: 2007-05-19

引用:
作者: guo333806
你要是把压缩包上传上来的话那就更好了,免得我又要在word里面编辑。
你是用lfs6.2.5Livecd做的,我的电脑上也是这个版本,这样我只要傻瓜式的敲入就可以了,连文件版本号都不需要改。
用livecd编译,我上不了网,因为我们学校要搞个什么认证才行,反正很麻烦。所以就打印啦,算了一下,36页,也才六七块钱。
这样应该能成功了
已经传上来了。在第三帖未尾。
等一会,我还会再测试一下。部分地方会加图解说明。
附件大小12.9KB解压后43KB的文本文件,打印它做啥?
如果你有U盘,可以拷贝下来。拿到电脑上用。
现在好多手机也有U盘、mp3什么的,带数据线就可以用。好像打印也是需要先拷贝文件的,一般学校机房或者网吧不提供打印服务的。
如果做完LFS后出现了引导故障,可以到本帖来找答案。
要使用LFS和BLFS的方法定做一个符合自己需要的Linux系统,不能不承认这是一个浩大的工程。或许三、五天,或许几个月。有的时候一个小问题也可能会郁闷上好几天。
我只希望有这个想法但却还迟迟没有动手的朋友们,看了这些之后能够少一些麻烦多一些信心。

作者: huohuliaisili   发布时间: 2007-05-19

你不用怀疑了!!!这篇帖子是绝对的有意义,至少对于我们新手来说,相信很多人也受益非浅。对于你的辛勤劳动和汗水,我们只能说一句:辛苦了!

作者: guo333806   发布时间: 2007-05-19

这段时间做了三遍LFS,前两次都是一个字符一个字符地敲,而且都因为一些意外而郁闷失败,好不容易在第三次的时候Ctrl+C && Ctrl+V终于做好能基本运行,不过已经看到这些代码就头皮发麻,觉得如果用脚本的话一定惬意很多。没想到就有人实现出来了~敬仰中...

期待后面几篇啊~

作者: hersk   发布时间: 2007-05-19

我看了你的脚本,在目录install_LFS/02-lfs-sh/中,依序号来看,28过了应该是29,为什么没有29就直接有了30呢,是不是这里少了一个呀?(只是怀疑而已).
另外,我发现在install_LFS/00-root-sh/01-root.sh脚本中,sda2的文件系统为ext3,但是在/install_LFS/05-End/94-conf脚本中sda2的文件系统变成了xfs,这里是不是也应该写成ext3呀?

作者: guo333806   发布时间: 2007-05-19

引用:
作者: guo333806
我看了你的脚本,在目录install_LFS/02-lfs-sh/中,依序号来看,28过了应该是29,为什么没有29就直接有了30呢,是不是这里少了一个呀?(只是怀疑而已).
另外,我发现在install_LFS/00-root-sh/01-root.sh脚本中,sda2的文件系统为ext3,但是在/install_LFS/05-End/94-conf脚本中sda2的文件系统变成了xfs,这里是不是也应该写成ext3呀?
因为29正是手册上清理系统。我把它省掉了。还有一次的清理系统也让我省略了。
那几个配置文件是肯定需要手工修改的。

作者: huohuliaisili   发布时间: 2007-05-20

在执行sh /tmp/install_LFS/01-lfs-sh-path/00-lfs.sh后,按照你的帖子,然后执行命令"cd /sources",但是我执行这条命令的时候却出现“/sources不是目录也不是文件“的错误,于是我就cd /lfs-sources(就是光盘上的那个放软件包的目录),继续进行下面的步骤了。不知道这里是不是你写错了。
现在我正在执行第四个目录下的脚本,但目前我一次都没清理系统,清理系统可不可以在安装完成以后再来清理?如果不清理,会不会出现什么问题?

作者: guo333806   发布时间: 2007-05-20

I'm sorry

cd $LFS/sources

作者: huohuliaisili   发布时间: 2007-05-20

清理系统好像不是必须的,手册也是指南性说明,不要太过相信。有时候,上网也可以查阅到相关资料,可能会有惊喜哦。觉得还是可以玩很多东西呢。

作者: SCys   发布时间: 2007-05-20

实在对不起,这个的确是我写错了。
手误,手误。
由于没有转到工作目录,照理说接下来徒劳。但是没有关系,脚本中已经做已经有cd $LFS/sources 了。 chroot 之后的就是 cd /sources ..
但发现有个别脚本中没有加转到编译软件包的目录。所以脚本我修改下。
脚本是没有问题的,只需要自己修改几个配置文件就可以了,一般情况配置文件会影响编译过程,但修改一下比较好(最好是对照册修改)。我一直就这样做的。

作者: huohuliaisili   发布时间: 2007-05-20

引用:
作者: huohuliaisili
I'm sorry

cd $LFS/sources
坏了,我输入的是cd /lfs-sources,第二个目录下的脚本已经执行完了,现在正在执行第四个目录下的脚本,目前还没有出现大的错误.难道换成cd /lfs-sources也能顺利完成?

作者: guo333806   发布时间: 2007-05-20

引用:
作者: guo333806
坏了,我输入的是cd /lfs-sources,第二个目录下的脚本已经执行完了,现在正在执行第四个目录下的脚本,目前还没有出现大的错误.难道换成cd /lfs-sources也能顺利完成?
原先的脚本中有一个 gcc 第一遍没有加上 cd $LFS/sources 所以,可能在这个地方就已经出错。
但是,我想了一下,既然只有gcc 第一遍没有 cd $LFS/sources . 也就是说,只有这一个脚本将在 /home/lfs 解包,编译。没有关系。
还不至于因为这个问题而出错。

作者: huohuliaisili   发布时间: 2007-05-20

应该说,在那里编译是没有问题的吧?可是LFS推荐在$LFS/source里面,统一起来会比较有说明性的话,LZ的脚本,可以把解压缩统一起来,这样会比较快点~,一边解压一边进行编译哦~我一直都是这样做,快多了。(嘻嘻,比较会偷懒)

作者: SCys   发布时间: 2007-05-20

现在时间是0:41,我已经把步骤全部执行完了,重启以后没有看见grub,还是以前的lilo。
在执行目录05-END中的脚本时,由于我是第一次编译内核,所以不太会搞,结果步骤意外终止了,我看了下95-Linux-2.6.16.38这个脚本中的命令,手工输入命令运行后,我想内核应该是安装成功了。
但在手工执行sh 96-make-boottable这个脚本时,出现了“grub>”这样的提示符,我一下子愣了,不知该如何是好,按Ctrl+C强行终止了,后来看了一下,发现/boot/grub/menu.lst和/etc/menu.lst都有内容,我就没管那么多,执行reboot命令,出现什么“运行级别未定义,不能软重启”之类的错误提示,所以我就按了主机上的重启扭。结果重启以后没有出现grub。

我应该怎么办?
问题1 在重新运行96-make-boottable脚本之前应该做那些设置?
问题2 96-make-boottable脚本需不需要修改? 由于我把LFS安装在sda4分区上,所以在运行这个脚本之前我已经把脚本中的sda2换成了sda4,把root(hd0,1)换成了root(hd0,3),这样修改到底对不对? (脚本最前面的那个"grub"是不是多余的?)

作者: guo333806   发布时间: 2007-05-20

启动Livecd安装grub,我想应该没有lilo中安装grub的原理吧,可是能够在其他Linux下,或是LiveCD中安装grub
详细的安装步骤可是查阅LFS的指南。或是man grub

下面举例下吧,比如我打算安装在/dev/sda的主启动扇区下。
可以用:
grub-install /dev/sda
或是:
>grub
grub> root (hd0,0) 《==这个是我们boot分区所在。
grub>setup (hd0) <<===启动主扇区
grub>quit
>reboot

作者: SCys   发布时间: 2007-05-20

感谢楼上的回复。
这是我的错。我以为这个grub的时候,都能看明白。前天的帖子中没有加中文注解,但在昨天已经加上了,我想楼主可能会到这篇帖子中能够找到答案的。

作者: huohuliaisili   发布时间: 2007-05-20

现在可以先备份原先的引导区。
然后再做GRUB引导的安装。
LiveCD启动。
下面的 /dev/xxx 表示 LFS 的根分区。
mkdir /mnt/lfs && mount /dev/xxx /mnt/lfs
mount -t proc proc /mnt/lfs/proc
mount -o bind /dev /mnt/lfs/dev
chroot /mnt/lfs
grub
# 进入GRUB安装命令模式。
# 下面的 (hdn,m) 表示你的根分区。n和m用数字替换掉,GRUB用数字0表示第一个设备。 (hd0,2)表示第一硬盘第三分区。GRUB中可以使用Tab键补全。
root (hdn,m)

# 将grub引导装载程序安装到第一硬盘的MBR。
setup (hd0)

# 退出grub
quit

作者: huohuliaisili   发布时间: 2007-05-20

按照你说的弄了,重启后grub出现了,按Enter启动LFS6.2,屏幕上出现"VFS:Cannot open root device,'sda4' or unknow block,please append a correct "root=".
我是把LFS安装在sda4分区上,在menu.lst文件中"root=sda4",在安装grub时运行命令是root (hd0,3) ;setup(hd0)命令,问题出在哪呀?(看了一下你的发帖时间,发现你两点还没睡,佩服!!!)

作者: guo333806   发布时间: 2007-05-20

把配置文件帖上来。

作者: huohuliaisili   发布时间: 2007-05-20

以下内容为menu.lst文件
# Begin /boot/grub/menu.lst

# By default boot the first menu entry.
default 0

# Allow 30 seconds before booting the default.
timeout 30

# Use prettier colors.
color green/black light-green/black

# The first entry is for LFS.
title LFS 6.2
root (hd0,3)
kernel /boot/lfskernel-2.6.16.38 root=/dev/sda4


以下内容为94-conf脚本,
########## 7.5. Configuring the setclock Script ##########

cat > /etc/sysconfig/clock << "EOF"
# Begin /etc/sysconfig/clock

UTC=0

# End /etc/sysconfig/clock
EOF

########## 7.8. Creating the /etc/inputrc File ##########
# /etc/inputrc File

cat > /etc/inputrc << "EOF"
# Begin /etc/inputrc
# Modified by Chris Lynn <[email protected]>

# Allow the command prompt to wrap to the next line
set horizontal-scroll-mode Off

# Enable 8bit input
set meta-flag On
set input-meta On

# Turns off 8th bit stripping
set convert-meta Off

# Keep the 8th bit for display
set output-meta On

# none, visible or audible
set bell-style none

# All of the following map the escape sequence of the
# value contained inside the 1st argument to the
# readline specific functions

"\eOd": backward-word
"\eOc": forward-word

# for linux console
"\e[1~": beginning-of-line
"\e[4~": end-of-line
"\e[5~": beginning-of-history
"\e[6~": end-of-history
"\e[3~": delete-char
"\e[2~": quoted-insert

# for xterm
"\eOH": beginning-of-line
"\eOF": end-of-line

# for Konsole
"\e[H": beginning-of-line
"\e[F": end-of-line

# End /etc/inputrc
EOF

########## 7.9. The Bash Shell Startup Files ##########
locale -a

LC_ALL=en_GB.iso88591 locale charmap

LC_ALL=en_GB.ISO-8859-1 locale language
LC_ALL=en_GB.ISO-8859-1 locale charmap
LC_ALL=en_GB.ISO-8859-1 locale int_curr_symbol
LC_ALL=en_GB.ISO-8859-1 locale int_prefix

cat > /etc/profile << "EOF"
# Begin /etc/profile

#export LANG=POSIX
export LANG=en_GB.ISO-8859-1
export INPUTRC=/etc/inputrc

# End /etc/profile
EOF


echo "HOSTNAME=LFS6.25" > /etc/sysconfig/network

########## 7.11. Customizing the /etc/hosts File ##########
cat > /etc/hosts << "EOF"
# Begin /etc/hosts (network card version)

127.0.0.1 localhost
192.168.1.2 localhost LFS6.25
#192.168.1.2 HOSTNAME.example.org [alias1] [alias2 ...]

# End /etc/hosts (network card version)
EOF


########## 7.12. Creating custom symlinks to devices ##########
# cd /sys/block/hdd
# udevtest /block/hdd

# cd /sys/block/hdc
# udevtest /block/hdc


cat >/etc/udev/rules.d/82-cdrom.rules << EOF

# Custom CD-ROM symlinks
SUBSYSTEM=="block", ENV{ID_TYPE}=="cd", ENV{ID_PATH}=="pci-0000:00:0f.1-ide-1:0", SYMLINK+="cdrom"
SUBSYSTEM=="block", ENV{ID_TYPE}=="cd", ENV{ID_PATH}=="pci-0000:00:0f.1-ide-1:1", SYMLINK+="cdrom1 dvd"

EOF

########## 7.13. Configuring the network Script ##########
# grep -H . /sys/class/net/*/address

cat > /etc/udev/rules.d/26-network.rules << EOF
ACTION=="add", SUBSYSTEM=="net", SYSFS{address}=="00:11:09:d0:00:6f", NAME="eth0"
ACTION=="add", SUBSYSTEM=="net", SYSFS{address}=="00:00:00:00:00:00", NAME="lo"
EOF


########## 7.13.2 Creating Network Interface Configuration Files ##########

cd /etc/sysconfig/network-devices &&
mkdir -v ifconfig.eth0 &&
cat > ifconfig.eth0/ipv4 << "EOF"
ONBOOT=yes
SERVICE=ipv4-static
IP=10.62.13.25
GATEWAY=10.62.13.254
PREFIX=24
BROADCAST=10.62.13.255
EOF

########## 7.13.3. Creating the /etc/resolv.conf File ##########
cat > /etc/resolv.conf << "EOF"
# Begin /etc/resolv.conf

domain localhost
nameserver 202.114.200.254
#nameserver 218.104.78.2

# End /etc/resolv.conf
EOF

########### 8. Making the LFS System Bootable ##########
cat > /etc/fstab << "EOF"
# Begin /etc/fstab

# file system mount-point type options dump fsck
# order

/dev/sda4 / ext3 defaults 1 1
#/dev/hda3 swap swap pri=1 0 0
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
devpts /dev/pts devpts gid=4,mode=620 0 0
shm /dev/shm tmpfs defaults 0 0
# End /etc/fstab
EOF

涉及到系统启动的脚本有哪几个,会不会是前面出了问题?

作者: guo333806   发布时间: 2007-05-20

编译内核的时候,应该加上文件系统支持。如果确认是没有加入对文件系统的支持,应该在这里加上。
关于编译内核,看这里:
金国步作品列表 http://lamp.linux.gov.cn/jinbuguo_florilegium.html
# Linux 2.6.19.x 内核编译配置选项简介 http://lamp.linux.gov.cn/Linux/kernel_options.html

还是挂LiveCD进去。

export LFS=/mnt/lfs
mkdir -v $LFS
mount /dev/xxx $LFS
## 挂载虚拟文件系统 ##
mount --bind /dev $LFS/dev
mount -vt devpts devpts $LFS/dev/pts
mount -vt tmpfs shm $LFS/dev/shm
mount -vt proc proc $LFS/proc
mount -vt sysfs sysfs $LFS/sys

chroot $LFS
然后重编译内核,加入对文件系统的支持。编译内核后,记得备份一次 .config 文件。 .config 文件是一个隐藏文件,在你完成编译内核后会在内核原码包的目录下产生。把它拷贝到其它地方,或者重命名。

作者: huohuliaisili   发布时间: 2007-05-20

我查看了第一次编译时产生的.config文件,含有File system的那一部分内容如下:
# File systems
#
CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
CONFIG_EXT3_FS=y
CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
CONFIG_JBD=y
# CONFIG_JBD_DEBUG is not set
CONFIG_FS_MBCACHE=y
CONFIG_REISERFS_FS=m
# CONFIG_REISERFS_CHECK is not set
# CONFIG_REISERFS_PROC_INFO is not set
# CONFIG_REISERFS_FS_XATTR is not set
# CONFIG_JFS_FS is not set
CONFIG_FS_POSIX_ACL=y
CONFIG_XFS_FS=m
# CONFIG_XFS_QUOTA is not set
# CONFIG_XFS_SECURITY is not set
# CONFIG_XFS_POSIX_ACL is not set
这样看来,编译内核时已经加入了对ext3文件系统的才持呀,

作者: guo333806   发布时间: 2007-05-20

开机时,出现GRUB引导菜单的时候,按C键,到命令模式下。

kernel (hd        按 Tab 键
kernel (hdn,       n用一个数字替换掉,如果只有一块硬盘,这里为0 。
kernel (hdn,m)/      找出你的Linux系统根分区,按Tab键1次或者2次。看看此分区根目录下有什么?有没有 boot 目录?
kernel (hdn,m)/boot/   还是按Tab键,看有没有一些文件,找出你认为是kernel的那个文件。
kernel (hdn,m)/boot/lfskernel-2.6.16.38 root=/dev/sda4
如果上面的能够找出,把GRUB中显示的分区 (hdn,m) 记下来,看它与实际是否相符?
如果想再尝试是否能启动,在这个地方就可以敲回车了。
然后
boot
引导系统。
如果仍然无法启动系统,把屏幕上的提示抄下来。

作者: huohuliaisili   发布时间: 2007-05-20

还是出错,出错信息为:
using IPI shortcut mode
VFS: cannot open root device "sda4" or unknown-block(0,0)
please append a correct "root=" boot option.
kernel panic -not syncing :VFS : unable to mount root fs on unknow-block(0,0)
感觉像是编译内核时没有加进对硬盘的支持.

作者: guo333806   发布时间: 2007-05-20

引用:
作者: guo333806
还是出错,出错信息为:
using IPI shortcut mode
VFS: cannot open root device "sda4" or unknown-block(0,0)
please append a correct "root=" boot option.
kernel panic -not syncing :VFS : unable to mount root fs on unknow-block(0,0)
感觉像是编译内核时没有加进对硬盘的支持.
如果确定不是配置文件的问题,那就是编译内核问题了。
这段话应该就说明了编译内核有问题.

作者: huohuliaisili   发布时间: 2007-05-20

编译时除了选择对ext3的支持,其余的都默认.应该就可以了吧

作者: guo333806   发布时间: 2007-05-20

引用:
作者: guo333806
编译时除了选择对ext3的支持,其余的都默认.应该就可以了吧
Linux 2.6.19.x 内核编译配置选项简介
http://lamp.linux.gov.cn/Linux/kernel_options.html

作者: huohuliaisili   发布时间: 2007-05-20

重新编译了一遍内核,按金步国的帖子,把所有必选的选项抄了下来,费了好长时间才把那些选项找到.重启以后,又出现错误,错误与以前不一样,错误提示为:
uncompressing linux ...... ok,
boot the kernel,
BIOS provided physical RAM
502MB LOWMEM avialable
found SMP MP-table at
到这里屏幕就不动了,按键盘什么键也没反应了.
你是怎么配置这么多繁杂的选项的?我已经按照那个帖子把所有必选的选项都选了,结果.......
不知是怎么回事了,估计还是内核的问题.

作者: guo333806   发布时间: 2007-05-21

引用:
作者: guo333806
重新编译了一遍内核,按金步国的帖子,把所有必选的选项抄了下来,费了好长时间才把那些选项找到.重启以后,又出现错误,错误与以前不一样,错误提示为:
uncompressing linux ...... ok,
boot the kernel,
BIOS provided physical RAM
502MB LOWMEM avialable
found SMP MP-table at
到这里屏幕就不动了,按键盘什么键也没反应了.
你是怎么配置这么多繁杂的选项的?我已经按照那个帖子把所有必选的选项都选了,结果.......
不知是怎么回事了,估计还是内核的问题.
那没办法,只有再重编译内核。

作者: huohuliaisili   发布时间: 2007-05-21

在linux-2.6.16.38文件夹中,有一个.config.old配置文件,用这个怎么样? 要么把你的.config文件传给我,我实在是没辙了,也不知道是不是前面就已经搞错了,

作者: guo333806   发布时间: 2007-05-21

引用:
作者: guo333806
在linux-2.6.16.38文件夹中,有一个.config.old配置文件,用这个怎么样? 要么把你的.config文件传给我,我实在是没辙了,也不知道是不是前面就已经搞错了,
我的不一定适合的。我还在改。

作者: huohuliaisili   发布时间: 2007-05-21

good,增加了我们这些菜鸟们的信心!

作者: runningman   发布时间: 2007-05-21

我实在没办法,就把slackware 的.config配置文件拿来编译内核。结果编译时间比以前长了一倍,但是系统可以成功启动了。终于是搞成功了呀!谢谢huohuliaisili兄!!!谢谢你对我不厌其烦的指导!!!

作者: guo333806   发布时间: 2007-05-21

引用:
作者: guo333806
我实在没办法,就把slackware 的.config配置文件拿来编译内核。结果编译时间比以前长了一倍,但是系统可以成功启动了。终于是搞成功了呀!谢谢huohuliaisili兄!!!谢谢你对我不厌其烦的指导!!!
你把那 kernel 拷贝一份.
必要时,在你重编译内核造成无法启动系统的时候,可以用拷贝的副本恢复.

作者: huohuliaisili   发布时间: 2007-05-21

热门下载

更多