LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 21674|回复: 81

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

[复制链接]
发表于 2007-5-17 03:21:29 | 显示全部楼层 |阅读模式
零起点构建自己的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.cn/bbs
Linux 发行版 LFS 讨论区

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

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

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

本文在linuxsir论坛的链接 http://www.linuxsir.cn/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表示第一个设备 )

  1. # fdisk -l
  2. Disk /dev/hda: 8589 MB, 8589934592 bytes
  3. 15 heads, 63 sectors/track, 17753 cylinders
  4. Units = cylinders of 945 * 512 = 483840 bytes
  5. 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 ):

  1. # fdisk /dev/hda
  2. (省去fdisk工具自述信息)
  3. Command (m for help): m
  4. Command action
  5. a toggle a bootable flag
  6. b edit bsd disklabel
  7. c toggle the dos compatibility flag
  8. d delete a partition
  9. l list known partition types
  10. m print this menu
  11. n add a new partition
  12. o create a new empty DOS partition table
  13. p print the partition table
  14. q quit without saving changes
  15. s create a new empty Sun disklabel
  16. t change a partition's system id
  17. u change display/entry units
  18. v verify the partition table
  19. w write table to disk and exit
  20. x extra functionality (experts only)
  21. 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 并按回车键或者直接按回车键。
  1. Command (m for help): p
  2. Disk /dev/hda: 8589 MB, 8589934592 bytes
  3. 15 heads, 63 sectors/track, 17753 cylinders
  4. Units = cylinders of 945 * 512 = 483840 bytes
  5. Device Boot Start End Blocks Id System
  6. Command (m for help): n
  7. Command action
  8. e extended
  9. p primary partition (1-4)
  10. p
  11. Partition number (1-4): 1
  12. First cylinder (1-17753, default 1): 1
  13. Last cylinder or +size or +sizeM or +sizeK (1-17753, default 17753): 1000
  14. Command (m for help): p
  15. Disk /dev/hda: 8589 MB, 8589934592 bytes
  16. 15 heads, 63 sectors/track, 17753 cylinders
  17. Units = cylinders of 945 * 512 = 483840 bytes
  18. Device Boot Start End Blocks Id System
  19. /dev/hda1 1 1000 472468+ 83 Linux
  20. Command (m for help):
复制代码

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

  现在开始创建第二个主分区:
  如同前面的方法,创建一个2000个柱面的分区。由于前面已经将 1 ~ 1000 柱面分配给了第一个主分区,所以在创建第二个分区的时候,默认首柱面是从1001开始。按照默认的提示设置首柱面,尾柱面 1000+2000也就是到了3000柱面上。从 1001 柱面到 3000 柱面都分配给第二主分区。操作步骤如下:
  1. Command (m for help): p
  2. Disk /dev/hda: 8589 MB, 8589934592 bytes
  3. 15 heads, 63 sectors/track, 17753 cylinders
  4. Units = cylinders of 945 * 512 = 483840 bytes
  5. Device Boot Start End Blocks Id System
  6. /dev/hda1 1 1000 472468+ 83 Linux
  7. Command (m for help): n
  8. Command action
  9. e extended
  10. p primary partition (1-4)
  11. p
  12. Partition number (1-4): 2
  13. First cylinder (1001-17753, default 1001): 1001
  14. Last cylinder or +size or +sizeM or +sizeK (1001-17753, default 17753): 3000
  15. Command (m for help): p
  16. Disk /dev/hda: 8589 MB, 8589934592 bytes
  17. 15 heads, 63 sectors/track, 17753 cylinders
  18. Units = cylinders of 945 * 512 = 483840 bytes
  19. Device Boot Start End Blocks Id System
  20. /dev/hda1 1 1000 472468+ 83 Linux
  21. /dev/hda2 1001 3000 945000 83 Linux
  22. Command (m for help):
复制代码

  现在我们来创建第三个主分区:
  在进行操作之前,先敲入 p 并按回车键,打印分区信息。然后敲入 n 再按回车键,敲入 p 并按回车键创建主分区。屏幕上提示设置首柱面,默认从3001开始,直接按回车键使用默认的。然后屏幕上提示设置尾柱面,这里为这个分区分配3000个柱面,因为前面一个分区的尾柱面是3000,而且现在的这个分区首柱面是3001,那么在这里就是 3001 - 1 + 3000 = 6000 ;在这里设置尾柱面为 6000 .
  1. Command (m for help): p
  2. Disk /dev/hda: 8589 MB, 8589934592 bytes
  3. 15 heads, 63 sectors/track, 17753 cylinders
  4. Units = cylinders of 945 * 512 = 483840 bytes
  5. Device Boot Start End Blocks Id System
  6. /dev/hda1 1 1000 472468+ 83 Linux
  7. /dev/hda2 1001 3000 945000 83 Linux
  8. Command (m for help): n
  9. Command action
  10. e extended
  11. p primary partition (1-4)
  12. p
  13. Partition number (1-4): 3
  14. First cylinder (3001-17753, default 3001):
  15. Using default value 3001
  16. Last cylinder or +size or +sizeM or +sizeK (3001-17753, default 17753): 6000
  17. Command (m for help): p
  18. Disk /dev/hda: 8589 MB, 8589934592 bytes
  19. 15 heads, 63 sectors/track, 17753 cylinders
  20. Units = cylinders of 945 * 512 = 483840 bytes
  21. Device Boot Start End Blocks Id System
  22. /dev/hda1 1 1000 472468+ 83 Linux
  23. /dev/hda2 1001 3000 945000 83 Linux
  24. /dev/hda3 3001 6000 1417500 83 Linux
  25. Command (m for help):
复制代码


  现在创建第四分区,分区类型为扩展分区。
  将所有的剩余空间都分配给这个分区。
  1. Command (m for help): p
  2. Disk /dev/hda: 8589 MB, 8589934592 bytes
  3. 15 heads, 63 sectors/track, 17753 cylinders
  4. Units = cylinders of 945 * 512 = 483840 bytes
  5. Device Boot Start End Blocks Id System
  6. /dev/hda1 1 1000 472468+ 83 Linux
  7. /dev/hda2 1001 3000 945000 83 Linux
  8. /dev/hda3 3001 6000 1417500 83 Linux
  9. Command (m for help): n
  10. Command action
  11. e extended
  12. p primary partition (1-4)
  13. e
  14. Selected partition 4
  15. First cylinder (6001-17753, default 6001):
  16. Using default value 6001
  17. Last cylinder or +size or +sizeM or +sizeK (6001-17753, default 17753):
  18. Using default value 17753
  19. Command (m for help): p
  20. Disk /dev/hda: 8589 MB, 8589934592 bytes
  21. 15 heads, 63 sectors/track, 17753 cylinders
  22. Units = cylinders of 945 * 512 = 483840 bytes
  23. Device Boot Start End Blocks Id System
  24. /dev/hda1 1 1000 472468+ 83 Linux
  25. /dev/hda2 1001 3000 945000 83 Linux
  26. /dev/hda3 3001 6000 1417500 83 Linux
  27. /dev/hda4 6001 17753 5553292+ 5 Extended
  28. Command (m for help):
复制代码


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

  1. Command (m for help): p
  2. Disk /dev/hda: 8589 MB, 8589934592 bytes
  3. 15 heads, 63 sectors/track, 17753 cylinders
  4. Units = cylinders of 945 * 512 = 483840 bytes
  5. Device Boot Start End Blocks Id System
  6. /dev/hda1 1 1000 472468+ 83 Linux
  7. /dev/hda2 1001 3000 945000 83 Linux
  8. /dev/hda3 3001 6000 1417500 83 Linux
  9. /dev/hda4 6001 17753 5553292+ 5 Extended
  10. Command (m for help): n
  11. First cylinder (6001-17753, default 6001):
  12. Using default value 6001
  13. Last cylinder or +size or +sizeM or +sizeK (6001-17753, default 17753): 10000
  14. Command (m for help): p
  15. Disk /dev/hda: 8589 MB, 8589934592 bytes
  16. 15 heads, 63 sectors/track, 17753 cylinders
  17. Units = cylinders of 945 * 512 = 483840 bytes
  18. Device Boot Start End Blocks Id System
  19. /dev/hda1 1 1000 472468+ 83 Linux
  20. /dev/hda2 1001 3000 945000 83 Linux
  21. /dev/hda3 3001 6000 1417500 83 Linux
  22. /dev/hda4 6001 17753 5553292+ 5 Extended
  23. /dev/hda5 6001 10000 1889968+ 83 Linux
  24. Command (m for help): n
  25. First cylinder (10001-17753, default 10001):
  26. Using default value 10001
  27. Last cylinder or +size or +sizeM or +sizeK (10001-17753, default 17753):
  28. Using default value 17753
  29. Command (m for help): p
  30. Disk /dev/hda: 8589 MB, 8589934592 bytes
  31. 15 heads, 63 sectors/track, 17753 cylinders
  32. Units = cylinders of 945 * 512 = 483840 bytes
  33. Device Boot Start End Blocks Id System
  34. /dev/hda1 1 1000 472468+ 83 Linux
  35. /dev/hda2 1001 3000 945000 83 Linux
  36. /dev/hda3 3001 6000 1417500 83 Linux
  37. /dev/hda4 6001 17753 5553292+ 5 Extended
  38. /dev/hda5 6001 10000 1889968+ 83 Linux
  39. /dev/hda6 10001 17753 3663261 83 Linux
  40. 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的了。

  1. Command (m for help): t
  2. Partition number (1-6): 1
  3. Hex code (type L to list codes): L
  4. (由于字数的限制,此处省略了fdisk支持的分区系统类型及对应的标识id 。)
  5. Hex code (type L to list codes): 82
  6. Changed system type of partition 1 to 82 (Linux swap / Solaris)
  7. Command (m for help): p
  8. Disk /dev/hda: 8589 MB, 8589934592 bytes
  9. 15 heads, 63 sectors/track, 17753 cylinders
  10. Units = cylinders of 945 * 512 = 483840 bytes
  11. Device Boot Start End Blocks Id System
  12. /dev/hda1 1 1000 472468+ 82 Linux swap / Solaris
  13. /dev/hda2 1001 3000 945000 83 Linux
  14. /dev/hda3 3001 6000 1417500 83 Linux
  15. /dev/hda4 6001 17753 5553292+ 5 Extended
  16. /dev/hda5 6001 10000 1889968+ 83 Linux
  17. /dev/hda6 10001 17753 3663261 83 Linux
  18. Command (m for help):
复制代码

  好了,现在热身过程也差不多了,敲入 w 并回车,将所做的修改保存并退出。
  1. Command (m for help): p
  2. Disk /dev/hda: 8589 MB, 8589934592 bytes
  3. 15 heads, 63 sectors/track, 17753 cylinders
  4. Units = cylinders of 945 * 512 = 483840 bytes
  5. Device Boot Start End Blocks Id System
  6. /dev/hda1 1 1000 472468+ 82 Linux swap / Solaris
  7. /dev/hda2 1001 3000 945000 83 Linux
  8. /dev/hda3 3001 6000 1417500 83 Linux
  9. /dev/hda4 6001 17753 5553292+ 5 Extended
  10. /dev/hda5 6001 10000 1889968+ 83 Linux
  11. /dev/hda6 10001 17753 3663261 83 Linux
  12. Command (m for help): w
  13. The partition table has been altered!
  14. Calling ioctl() to re-read partition table.
  15. 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个扇区。
  1. # fdisk /dev/hda
  2. The number of cylinders for this disk is set to 17753.
  3. There is nothing wrong with that, but this is larger than 1024,
  4. and could in certain setups cause problems with:
  5. 1) software that runs at boot time (e.g., old versions of LILO)
  6. 2) booting and partitioning software from other OSs
  7. (e.g., DOS FDISK, OS/2 FDISK)
  8. Command (m for help): p
  9. Disk /dev/hda: 8589 MB, 8589934592 bytes
  10. 15 heads, 63 sectors/track, 17753 cylinders
  11. Units = cylinders of 945 * 512 = 483840 bytes
  12. Device Boot Start End Blocks Id System
  13. /dev/hda1 1 1000 472468+ 82 Linux swap / Solaris
  14. /dev/hda2 1001 3000 945000 83 Linux
  15. /dev/hda3 3001 6000 1417500 83 Linux
  16. /dev/hda4 6001 17753 5553292+ 5 Extended
  17. /dev/hda5 6001 10000 1889968+ 83 Linux
  18. /dev/hda6 10001 17753 3663261 83 Linux
  19. Command (m for help): u
  20. Changing display/entry units to sectors
  21. Command (m for help): p
  22. Disk /dev/hda: 8589 MB, 8589934592 bytes
  23. 15 heads, 63 sectors/track, 17753 cylinders, total 16777216 sectors
  24. Units = sectors of 1 * 512 = 512 bytes
  25. Device Boot Start End Blocks Id System
  26. /dev/hda1 63 944999 472468+ 82 Linux swap / Solaris
  27. /dev/hda2 945000 2834999 945000 83 Linux
  28. /dev/hda3 2835000 5669999 1417500 83 Linux
  29. /dev/hda4 5670000 16776584 5553292+ 5 Extended
  30. /dev/hda5 5670063 9449999 1889968+ 83 Linux
  31. /dev/hda6 9450063 16776584 3663261 83 Linux
  32. 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,尝试用网页浏览器打开文件。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2007-5-17 03:23:02 | 显示全部楼层
  列出分区表信息:
  fdisk -l
  这块硬盘设备名称为 /dev/sda 。容量171.7GB(以1000计算),171798691840 bytes
  255 磁头 heads, 63 磁道 sectors/track, 20886 扇区 cylinders


  1. # fdisk -l

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

  5. Device Boot Start End Blocks Id System
  6. /dev/sda1 * 1 1250 10040593+ 7 HPFS/NTFS
  7. /dev/sda2 1251 20886 157726170 5 Extended
  8. /dev/sda5 1251 2500 10040593+ 7 HPFS/NTFS
  9. /dev/sda6 2501 5000 20081218+ 7 HPFS/NTFS
  10. /dev/sda7 5001 7500 20081218+ 7 HPFS/NTFS
  11. /dev/sda8 7501 10000 20081218+ b W95 FAT32
  12. /dev/sda9 10001 20886 87441763+ 7 HPFS/NTFS
复制代码
  
  
  把上面列出的分区信息发送到邮箱,必要时用备份进行恢复。上面的可以用输出重定向保存到分区表备份文件partition_tab.txt 。
  1. 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 这个分区删掉。
  操作过程如下:


  1. # fdisk /dev/sda

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

  8. Command (m for help): p

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

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

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

  22. Command (m for help): p

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

  26. Device Boot Start End Blocks Id System
  27. /dev/sda1 * 1 1250 10040593+ 7 HPFS/NTFS
  28. /dev/sda2 1251 20886 157726170 5 Extended
  29. /dev/sda5 1251 2500 10040593+ 7 HPFS/NTFS
  30. /dev/sda6 5001 7500 20081218+ 7 HPFS/NTFS
  31. /dev/sda7 7501 10000 20081218+ b W95 FAT32
  32. /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(默认)。
  过程如下:


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

  9. Command (m for help): p

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

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

  21. Partition table entries are not in disk order

  22. Command (m for help): n
  23. Command action
  24. l logical (5 or over)
  25. p primary partition (1-4)
  26. l
  27. First cylinder (3001-20886, default 3001):
  28. Using default value 3001
  29. Last cylinder or +size or +sizeM or +sizeK (3001-5000, default 5000): 3125

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

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

  59. Command (m for help): p

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

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

  74. Command (m for help): n
  75. Command action
  76. l logical (5 or over)
  77. p primary partition (1-4)
  78. l
  79. First cylinder (3126-20886, default 3126):
  80. Using default value 3126
  81. Last cylinder or +size or +sizeM or +sizeK (3126-5000, default 5000):
  82. Using default value 5000

  83. Command (m for help): p

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

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

  97. Partition table entries are not in disk order

  98. 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。


  1. Command (m for help): d
  2. Partition number (1-11): 6

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

  12. Command (m for help): p

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

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

  26. Partition table entries are not in disk order

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

  31. Command (m for help): p

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

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

  45. Partition table entries are not in disk order

  46. Command (m for help):
复制代码



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

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


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

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

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

分区表一:

  1. # fdisk  -l

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

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



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

分区表二:


  1. # fdisk /dev/hda -l

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

  5.    Device Boot      Start         End      Blocks   Id  System

  6. /dev/hda1               1        1250    10040593+   7  HPFS/NTFS
  7. /dev/hda2            1251        2500    10040625   83  Linux
  8. /dev/hda3   *        2501        4000    12048750   bf  Solaris
  9. /dev/hda4            4001       20886   135636795    5  Extended
  10. /dev/hda5            4001        4500     4016218+   7  HPFS/NTFS
  11. /dev/hda6            4501        6000    12048718+   b  W95 FAT32
  12. /dev/hda7            6001        8500    20081218+   7  HPFS/NTFS
  13. /dev/hda8            8501        9750    10040593+  83  Linux
  14. /dev/hda9            9751       11000    10040593+  83  Linux
  15. /dev/hda10          11001       11125     1004031   82  Linux swap / Solaris
  16. /dev/hda11          11126       20886    78405201   83  Linux
复制代码


  上面有两个例子,都是对已有数据的分区进行修改的。共同的地方是修改的地方都是位于硬盘上的某柱面到某柱面的连续空间。这些空间里的重要数据都是已经拷贝到其它地方了的。上面的两个例子一个是动了主分区,一个是动了扩展下的逻辑分区。这里要补充说明一下的是,不要去修改扩展分区,除非已经安全的备份了数据。如果扩展分区的起始位置变化了,逻辑分区中的数据就无法被操作系统识别了。分区表好比一本书的目录,数据好比书中的内容。操作系统通过读分区表(目录)然后才能知道分区的起始位置以及分区类型是否被识别,然后才是文件系统是否能够识别,识别了文件系统之后才能通过文件索引找到文件位于磁盘上的位置。如果分区记录的起始位置、分区类型,与实际硬盘上的不符合,这样就会出现故障。MBR中的主分区表尤其关健,如果出错可能就无法正常引导操作系统或者无法读取硬盘数据。逻辑分区表位于扩展分区之中,对于扩展技术不了解,有知道的帮我补充一下。

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

  对物理硬盘进行操作:

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


  1.   sfdisk备份/恢复 分区表
  2.   用实际的设备名称替换掉 /dev/hdx
  3.   # sfdisk -d /dev/hdx > /mnt/backup/partab-hdx.sfdisk (备份)
  4.   # sfdisk /dev/hdx < /mnt/backup/partab-hdx.sfdisk (恢复)
复制代码


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

然后的几段英文我不懂.如果你想知道,可以使用一下 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协议来远程控制这台机器了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-17 03:24:33 | 显示全部楼层

零起点构建自己的Linux ( 按照LFS-6.2-5手册的方法构建基本系统 )

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

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

对主系统的要求(细节看LFS-6.2-5手册)
我们使用的是lfslivecd-6.2-5,光盘上的系统是满足开发环境需要的
  1. cat > version-check.sh << "EOF"
  2. #!/bin/bash
  3. # Simple script to list version numbers of critical development tools
  4. bash --version | head -n1 | cut -d" " -f2-4
  5. echo -n "Binutils: "; ld --version | head -n1 | cut -d" " -f3-4
  6. bzip2 --version 2>&1 < /dev/null | head -n1 | cut -d" " -f1,6-
  7. echo -n "Coreutils: "; chown --version | head -n1 | cut -d")" -f2
  8. diff --version | head -n1
  9. find --version | head -n1
  10. gawk --version | head -n1
  11. gcc --version | head -n1
  12. /lib/libc.so.6 | head -n1 | cut -d" " -f1-7
  13. grep --version | head -n1
  14. gzip --version | head -n1
  15. cat /proc/version | head -n1 | cut -d" " -f1-3,5-7
  16. make --version | head -n1
  17. patch --version | head -n1
  18. sed --version | head -n1
  19. tar --version | head -n1
  20. EOF
  21. bash version-check.sh
复制代码


下面的这部分是需要按照实际情况进行修改的地方
##### 00-root/00-root 由root用户来决定所有的准备工作。这部分要求手工输入,防止出错。 #####
# 如果物理内存很少,可以先启用swap.这里,我们使用一个硬盘分区作为swap 。
#用实际的分区替换下面的 /dev/<xxx>。比如 /dev/hda7 。
#如果物理内存在512以上,并且只在字符环境下操作,在构建LFS系统的过程中就可以不需要启用swap。 #
  1. mkswap /dev/<xxx>
  2. swapon /dev/<xxx>
复制代码

#创建一个ext3文件系统,这里 /dev/<xxx>用实际的硬盘分区设备名称替换掉,比如 /dev/hda6 。当然也可以使用其它的Linux的文件系统。#
  1. mkfs.ext3 /dev/<xxx>
复制代码
# Linux只需要一个分区作为根文件系统就可以了。swap不是必须的。但是我们最好还是单独的为swap创建一个分区。上面已经创建了swap和一个满足Linux需要的系统分区。如果想创建更多分区的可以使用类似的方法。 #


##### 准备工作 #####
#定义LFS环境变量
  1. export LFS=/mnt/lfs
复制代码

#挂载目标文件系统,我们将在这个文件系统上构建LFS。用实际的分区替换下面的 /dev/<xxx>
  1. mkdir -pv $LFS
  2. mount -v -t ext3 /dev/<xxx> $LFS
复制代码

#这里,如果为系统分配了再多的分区,可以一并挂载。用实际的分区替换下面的 /dev/<yyy>
  1. #mkdir -pv $LFS/usr
  2. #mount -v -t ext3 /dev/<yyy> $LFS/usr
复制代码

# 创建 $LFS/sources 目录
  1. mkdir -v $LFS/sources
  2. chmod -v a+wt $LFS/sources
复制代码

# 检查LFS环境变量
  1. echo $LFS
复制代码

# 如果上面的命令输出结果不正确,用这条命令进行设置:
  1. export LFS=/mnt/lfs
复制代码

# 创建$LFS/tools目录
  1. mkdir -v $LFS/tools
  2. ln -sv $LFS/tools /
复制代码

# 添加lfs用户,在构建临时的编译环境的时候用lfs用户来做这些事情
  1. groupadd lfs
  2. useradd -s /bin/bash -g lfs -m -k /dev/null lfs
复制代码

# 为lfs用户设置密码。(如果是使用中文的图形界面终端来做,可能会看到提示说密码未更改,不必理会,这是翻译出错。实际上密码已经修改了。)
  1. passwd lfs
复制代码

# 将 $LFS/tools (工具目录) 和 $LFS/sources (原码编译目录)的属主改为 lfs 用户。让lfs用户具有对这两个目录的完全访问权限。
  1. chown -v lfs $LFS/tools
  2. chown -v lfs $LFS/sources
复制代码

# 以lfs用户身分登录。
  1. su - lfs
复制代码

  1. ##### 01-lfs-path/00-lfs.sh #####
  2. # 设置工作环境
  3. cat > ~/.bash_profile << "EOF"
  4. exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash
  5. EOF
  6. cat > ~/.bashrc << "EOF"
  7. set +h
  8. umask 022
  9. LFS=/mnt/lfs
  10. LC_ALL=POSIX
  11. PATH=/tools/bin:/bin:/usr/bin
  12. export LFS LC_ALL PATH
  13. EOF
  14. source ~/.bash_profile
复制代码
  1. ##### 构建临时的编译环境 #####
  2. ##
  3. # 5.3. Binutils-2.16.1 - 第一遍
  4. cd $LFS/sources
  5. tar xvf /lfs-sources/binutils-2.16.1.tar.bz2
  6. cd binutils-2.16.1
  7. mkdir -v ../binutils-build
  8. cd ../binutils-build
  9. ../binutils-2.16.1/configure --prefix=/tools --disable-nls
  10. make
  11. make install
  12. make -C ld clean
  13. make -C ld LIB_PATH=/tools/lib
  14. cp -v ld/ld-new /tools/bin
  15. cd $LFS/sources
  16. # 5.4. GCC-4.0.3 - 第一遍
  17. cd $LFS/sources
  18. tar xvf /lfs-sources/gcc-4.0.3.tar.bz2
  19. cd gcc-4.0.3
  20. mkdir -v ../gcc-build
  21. cd ../gcc-build
  22. ../gcc-4.0.3/configure --prefix=/tools \
  23.     --with-local-prefix=/tools --disable-nls --enable-shared \
  24.     --enable-languages=c
  25. make bootstrap
  26. make install
  27. ln -vs gcc /tools/bin/cc
  28. cd $LFS/sources
  29. # 5.5. Linux-Libc-Headers-2.6.12.0
  30. cd $LFS/sources
  31. tar xvf /lfs-sources/linux-libc-headers-2.6.12.0.tar.bz2
  32. cd linux-libc-headers-2.6.12.0
  33. cp -Rv include/asm-i386 /tools/include/asm
  34. cp -Rv include/linux /tools/include
  35. cd $LFS/sources
  36. # 5.6. Glibc-2.3.6
  37. cd $LFS/sources
  38. tar xvf /lfs-sources/glibc-2.3.6.tar.bz2
  39. cd glibc-2.3.6
  40. mkdir -v ../glibc-build
  41. cd ../glibc-build
  42. ../glibc-2.3.6/configure --prefix=/tools \
  43.     --disable-profile --enable-add-ons \
  44.     --enable-kernel=2.6.0 --with-binutils=/tools/bin \
  45.     --without-gd --with-headers=/tools/include \
  46.     --without-selinux
  47. make
  48. mkdir -v /tools/etc
  49. touch /tools/etc/ld.so.conf
  50. make install
  51. cd $LFS/sources
  52. # 5.7. 调整工具链
  53. mv -v /tools/bin/{ld,ld-old}
  54. mv -v /tools/$(gcc -dumpmachine)/bin/{ld,ld-old}
  55. mv -v /tools/bin/{ld-new,ld}
  56. ln -sv /tools/bin/ld /tools/$(gcc -dumpmachine)/bin/ld
  57. SPECFILE=`dirname $(gcc -print-libgcc-file-name)`/specs &&
  58. gcc -dumpspecs > $SPECFILE &&
  59. sed 's@^/lib/ld-linux.so.2@/tools&@g' $SPECFILE > tempspecfile &&
  60. mv -vf tempspecfile $SPECFILE &&
  61. unset SPECFILE
  62. GCC_INCLUDEDIR=`dirname $(gcc -print-libgcc-file-name)`/include &&
  63. find ${GCC_INCLUDEDIR}/* -maxdepth 0 -xtype d -exec rm -rvf '{}' \; &&
  64. rm -vf `grep -l "DO NOT EDIT THIS FILE" ${GCC_INCLUDEDIR}/*` &&
  65. unset GCC_INCLUDEDIR
  66. echo 'main(){}' > dummy.c
  67. cc dummy.c
  68. readelf -l a.out | grep ': /tools'
  69. rm -v dummy.c a.out
  70. #
  71. # 5.8. Tcl-8.4.13
  72. cd $LFS/sources
  73. tar xvf /lfs-sources/tcl8.4.13-src.tar.gz
  74. cd tcl8.4.13
  75. cd unix
  76. ./configure --prefix=/tools
  77. make
  78. make install
  79. make install-private-headers
  80. ln -sv tclsh8.4 /tools/bin/tclsh
  81. cd $LFS/sources
  82. # 5.9. Expect-5.43.0
  83. cd $LFS/sources
  84. tar xvf /lfs-sources/expect-5.43.0.tar.gz
  85. cd expect-5.43
  86. patch -Np1 -i /lfs-sources/expect-5.43.0-spawn-1.patch
  87. ./configure --prefix=/tools --with-tcl=/tools/lib \
  88.   --with-tclinclude=/tools/include --with-x=no
  89. make
  90. make SCRIPTS="" install
  91. cd $LFS/sources
  92. # 5.10. DejaGNU-1.4.4
  93. cd $LFS/sources
  94. tar xvf /lfs-sources/dejagnu-1.4.4.tar.gz
  95. cd dejagnu-1.4.4
  96. ./configure --prefix=/tools
  97. make install
  98. cd $LFS/sources
  99. # 5.11. GCC-4.0.3 - 第二遍
  100. cd $LFS/sources
  101. rm -rf $LFS/sources/*
  102. tar xvf /lfs-sources/gcc-4.0.3.tar.bz2
  103. cd gcc-4.0.3
  104. expect -c "spawn ls"
  105. cp -v gcc/Makefile.in{,.orig} &&
  106. sed 's@\./fixinc\.sh@-c true@' gcc/Makefile.in.orig > gcc/Makefile.in
  107. cp -v gcc/Makefile.in{,.tmp} &&
  108. sed 's/^XCFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in.tmp \
  109.   > gcc/Makefile.in
  110. patch -Np1 -i /lfs-sources/gcc-4.0.3-specs-1.patch
  111. mkdir -v ../gcc-build
  112. cd ../gcc-build
  113. ../gcc-4.0.3/configure --prefix=/tools \
  114.     --with-local-prefix=/tools --enable-clocale=gnu \
  115.     --enable-shared --enable-threads=posix \
  116.     --enable-__cxa_atexit --enable-languages=c,c++ \
  117.     --disable-libstdcxx-pch
  118. make
  119. make install
  120. echo 'main(){}' > dummy.c
  121. cc dummy.c
  122. readelf -l a.out | grep ': /tools'
  123. rm -v dummy.c a.out
  124. cd $LFS/sources
  125. #5.12. Binutils-2.16.1 - 第二遍
  126. cd $LFS/sources
  127. rm -rf $LFS/sources/*
  128. tar xvf /lfs-sources/binutils-2.16.1.tar.bz2
  129. cd binutils-2.16.1
  130. mkdir -v ../binutils-build
  131. cd ../binutils-build
  132. ../binutils-2.16.1/configure --prefix=/tools \
  133.     --disable-nls --with-lib-path=/tools/lib
  134. make
  135. make install
  136. make -C ld clean
  137. make -C ld LIB_PATH=/usr/lib:/lib
  138. cp -v ld/ld-new /tools/bin
  139. cd $LFS/sources
  140. # 5.13. Ncurses-5.5
  141. cd $LFS/sources
  142. tar xvf /lfs-sources/ncurses-5.5.tar.gz
  143. cd ncurses-5.5
  144. ./configure --prefix=/tools --with-shared \
  145.     --without-debug --without-ada --enable-overwrite
  146. make
  147. make install
  148. cd $LFS/sources
  149. # 5.14. Bash-3.1
  150. cd $LFS/sources
  151. tar xvf /lfs-sources/bash-3.1.tar.gz
  152. cd bash-3.1
  153. patch -Np1 -i /lfs-sources/bash-3.1-fixes-8.patch
  154. ./configure --prefix=/tools --without-bash-malloc
  155. make
  156. make install
  157. ln -vs bash /tools/bin/sh
  158. cd $LFS/sources
  159. # 5.15. Bzip2-1.0.3
  160. cd $LFS/sources
  161. tar xvf /lfs-sources/bzip2-1.0.3.tar.gz
  162. cd bzip2-1.0.3
  163. make
  164. make PREFIX=/tools install
  165. cd $LFS/sources
  166. # 5.16. Coreutils-5.96
  167. cd $LFS/sources
  168. tar xvf /lfs-sources/coreutils-5.96.tar.bz2
  169. cd coreutils-5.96
  170. ./configure --prefix=/tools
  171. make
  172. make install
  173. cd $LFS/sources
  174. # 5.17. Diffutils-2.8.1
  175. cd $LFS/sources
  176. tar xvf /lfs-sources/diffutils-2.8.1.tar.gz
  177. cd diffutils-2.8.1
  178. ./configure --prefix=/tools
  179. make
  180. make install
  181. cd $LFS/sources
  182. # 5.18. Findutils-4.2.27
  183. cd $LFS/sources
  184. tar xvf /lfs-sources/findutils-4.2.27.tar.gz
  185. cd findutils-4.2.27
  186. ./configure --prefix=/tools
  187. make
  188. make install
  189. cd $LFS/sources
  190. # 5.19. Gawk-3.1.5
  191. cd $LFS/sources
  192. tar xvf /lfs-sources/gawk-3.1.5.tar.bz2
  193. cd gawk-3.1.5
  194. ./configure --prefix=/tools
  195. cat >>config.h <<"EOF"
  196. #define HAVE_LANGINFO_CODESET 1
  197. #define HAVE_LC_MESSAGES 1
  198. EOF
  199. make
  200. make install
  201. cd $LFS/sources
  202. # 5.20. Gettext-0.14.5
  203. cd $LFS/sources
  204. tar xvf /lfs-sources/gettext-0.14.5.tar.gz
  205. cd gettext-0.14.5
  206. cd gettext-tools
  207. ./configure --prefix=/tools --disable-shared
  208. make -C lib
  209. make -C src msgfmt
  210. cp -v src/msgfmt /tools/bin
  211. cd $LFS/sources
  212. # 5.21. Grep-2.5.1a
  213. cd $LFS/sources
  214. tar xvf /lfs-sources/grep-2.5.1a.tar.bz2
  215. cd grep-2.5.1a
  216. ./configure --prefix=/tools \
  217.     --disable-perl-regexp
  218. make
  219. make install
  220. cd $LFS/sources
  221. # 5.22. Gzip-1.3.5
  222. cd $LFS/sources
  223. tar xvf /lfs-sources/gzip-1.3.5.tar.gz
  224. cd gzip-1.3.5
  225. ./configure --prefix=/tools
  226. make
  227. make install
  228. cd $LFS/sources
  229. # 5.23. M4-1.4.4
  230. cd $LFS/sources
  231. tar xvf /lfs-sources/m4-1.4.4.tar.gz
  232. cd m4-1.4.4
  233. ./configure --prefix=/tools
  234. make
  235. make install
  236. cd $LFS/sources
  237. # 5.24. Make-3.80
  238. cd $LFS/sources
  239. tar xvf /lfs-sources/make-3.80.tar.bz2
  240. cd make-3.80
  241. ./configure --prefix=/tools
  242. make
  243. make install
  244. cd $LFS/sources
  245. # 5.25. Patch-2.5.4
  246. cd $LFS/sources
  247. tar xvf /lfs-sources/patch-2.5.4.tar.gz
  248. cd patch-2.5.4
  249. ./configure --prefix=/tools
  250. make
  251. make install
  252. cd $LFS/sources
  253. # 5.26. Perl-5.8.8
  254. cd $LFS/sources
  255. tar xvf /lfs-sources/perl-5.8.8.tar.bz2
  256. cd perl-5.8.8
  257. patch -Np1 -i /lfs-sources/perl-5.8.8-libc-2.patch
  258. ./configure.gnu --prefix=/tools -Dstatic_ext='Data/Dumper Fcntl IO POSIX'
  259. make perl utilities
  260. cp -v perl pod/pod2man /tools/bin
  261. mkdir -pv /tools/lib/perl5/5.8.8
  262. cp -Rv lib/* /tools/lib/perl5/5.8.8
  263. cd $LFS/sources
  264. # 5.27. Sed-4.1.5
  265. cd $LFS/sources
  266. tar xvf /lfs-sources/sed-4.1.5.tar.gz
  267. cd sed-4.1.5
  268. ./configure --prefix=/tools
  269. make
  270. make install
  271. cd $LFS/sources
  272. # 5.28. Tar-1.15.1
  273. cd $LFS/sources
  274. tar xvf /lfs-sources/tar-1.15.1.tar.bz2
  275. cd tar-1.15.1
  276. patch -Np1 -i /lfs-sources/tar-1.15.1-gcc4_fix_tests-1.patch
  277. ./configure --prefix=/tools
  278. make
  279. make install
  280. cd $LFS/sources
  281. # 5.29. Texinfo-4.8
  282. cd $LFS/sources
  283. tar xvf /lfs-sources/texinfo-4.8.tar.bz2
  284. cd texinfo-4.8
  285. ./configure --prefix=/tools
  286. make
  287. make install
  288. cd $LFS/sources
  289. # 5.30. Util-linux-2.12r
  290. cd $LFS/sources
  291. tar xvf /lfs-sources/util-linux-2.12r.tar.bz2
  292. cd util-linux-2.12r
  293. sed -i 's@/usr/include@/tools/include@g' configure
  294. ./configure
  295. make -C lib
  296. make -C mount mount umount
  297. make -C text-utils more
  298. cp mount/{,u}mount text-utils/more /tools/bin
  299. cd $LFS/sources
  300. rm -rf $LFS/sources/*
复制代码

##### 5.31. 清理系统 #####
这部分被省略掉了,详情看手册。
  1. ##### 03-chown-and-mount/00-mount_lfs-sources #####
  2. #####
  3. mkdir /mnt/lfs/lfs-sources
  4. mount --bind /lfs-sources /mnt/lfs/lfs-sources
复制代码
  1. ###### 03-chown-and-mount/01-chroot #####
  2. chown -R root:root $LFS/tools
  3. mkdir -pv $LFS/{dev,proc,sys}
  4. mknod -m 600 $LFS/dev/console c 5 1
  5. mknod -m 666 $LFS/dev/null c 1 3
  6. mount --bind /dev $LFS/dev
  7. mount -vt devpts devpts $LFS/dev/pts
  8. mount -vt tmpfs shm $LFS/dev/shm
  9. mount -vt proc proc $LFS/proc
  10. mount -vt sysfs sysfs $LFS/sys
  11. chroot "$LFS" /tools/bin/env -i \
  12.     HOME=/root TERM="$TERM" PS1='\u:\w\$ ' \
  13.     PATH=/bin:/usr/bin:/sbin:/usr/sbin:/tools/bin \
  14.     /tools/bin/bash --login +h
复制代码
  1. ###### 03-chown-and-mount/02_mkdir #####
  2. mkdir -pv /{bin,boot,etc/opt,home,lib,mnt,opt}
  3. mkdir -pv /{media/{floppy,cdrom},sbin,srv,var}
  4. install -dv -m 0750 /root
  5. install -dv -m 1777 /tmp /var/tmp
  6. mkdir -pv /usr/{,local/}{bin,include,lib,sbin,src}
  7. mkdir -pv /usr/{,local/}share/{doc,info,locale,man}
  8. mkdir -v  /usr/{,local/}share/{misc,terminfo,zoneinfo}
  9. mkdir -pv /usr/{,local/}share/man/man{1..8}
  10. for dir in /usr /usr/local; do
  11.   ln -sv share/{man,doc,info} $dir
  12. done
  13. mkdir -v /var/{lock,log,mail,run,spool}
  14. mkdir -pv /var/{opt,cache,lib/{misc,locate},local}
  15. ln -sv /tools/bin/{bash,cat,grep,pwd,stty} /bin
  16. ln -sv /tools/bin/perl /usr/bin
  17. ln -sv /tools/lib/libgcc_s.so{,.1} /usr/lib
  18. ln -sv bash /bin/sh
  19. touch /etc/mtab
  20. cat > /etc/passwd << "EOF"
  21. root:x:0:0:root:/root:/bin/bash
  22. EOF
  23. cat > /etc/group << "EOF"
  24. root:x:0:
  25. bin:x:1:
  26. sys:x:2:
  27. kmem:x:3:
  28. tty:x:4:
  29. tape:x:5:
  30. daemon:x:6:
  31. floppy:x:7:
  32. disk:x:8:
  33. lp:x:9:
  34. dialout:x:10:
  35. audio:x:11:
  36. video:x:12:
  37. utmp:x:13:
  38. usb:x:14:
  39. cdrom:x:15:
  40. EOF
  41. exec /tools/bin/bash --login +h
复制代码
  1. ###### 03-chown-and-mount/03_login+h #####
  2. touch /var/run/utmp /var/log/{btmp,lastlog,wtmp}
  3. chgrp -v utmp /var/run/utmp /var/log/lastlog
  4. chmod -v 664 /var/run/utmp /var/log/lastlog
复制代码
  1. ###### 04-chroot-sh/ #####
  2. # 6.7. Linux-Libc-Headers-2.6.12.0
  3. cd /sources
  4. tar xvf /lfs-sources/linux-libc-headers-2.6.12.0.tar.bz2
  5. cd linux-libc-headers-2.6.12.0
  6. patch -Np1 -i /lfs-sources/linux-libc-headers-2.6.12.0-inotify-3.patch
  7. install -dv /usr/include/asm
  8. cp -Rv include/asm-i386/* /usr/include/asm
  9. cp -Rv include/linux /usr/include
  10. chown -Rv root:root /usr/include/{asm,linux}
  11. find /usr/include/{asm,linux} -type d -exec chmod -v 755 {} \;
  12. find /usr/include/{asm,linux} -type f -exec chmod -v 644 {} \;
  13. cd /sources
  14. # 6.8. Man-pages-2.34
  15. cd /sources
  16. tar xvf /lfs-sources/man-pages-2.34.tar.bz2
  17. cd man-pages-2.34
  18. make install
  19. cd /sources
  20. # 6.9. Glibc-2.3.6
  21. cd /sources
  22. tar xvf /lfs-sources/glibc-2.3.6.tar.bz2
  23. cd glibc-2.3.6
  24. tar -xf /lfs-sources/glibc-libidn-2.3.6.tar.bz2
  25. patch -Np1 -i /lfs-sources/glibc-2.3.6-linux_types-1.patch
  26. patch -Np1 -i /lfs-sources/glibc-2.3.6-inotify-1.patch
  27. sed -i '/vi_VN.TCVN/d' localedata/SUPPORTED
  28. sed -i \
  29. 's|libs -o|libs -L/usr/lib -Wl,-dynamic-linker=/lib/ld-linux.so.2 -o|' \
  30.         scripts/test-installation.pl
  31. mkdir -v ../glibc-build
  32. cd ../glibc-build
  33. ../glibc-2.3.6/configure --prefix=/usr \
  34.     --disable-profile --enable-add-ons \
  35.     --enable-kernel=2.6.0 --libexecdir=/usr/lib/glibc
  36. make
  37. make -k check 2>&1 | tee glibc-check-log
  38. grep Error glibc-check-log
  39. touch /etc/ld.so.conf
  40. make install
  41. cp -v ../glibc-2.3.6/sysdeps/unix/sysv/linux/inotify.h \
  42.     /usr/include/sys
  43. make localedata/install-locales
  44. cat > /etc/nsswitch.conf << "EOF"
  45. # Begin /etc/nsswitch.conf
  46. passwd: files
  47. group: files
  48. shadow: files
  49. hosts: files dns
  50. networks: files
  51. protocols: files
  52. services: files
  53. ethers: files
  54. rpc: files
  55. # End /etc/nsswitch.conf
  56. EOF
  57. tzselect
  58. cp -v --remove-destination /usr/share/zoneinfo/Asia/Shanghai \
  59.     /etc/localtime
  60. cat > /etc/ld.so.conf << "EOF"
  61. # Begin /etc/ld.so.conf
  62. /usr/local/lib
  63. /opt/lib
  64. # End /etc/ld.so.conf
  65. EOF
  66. cd /sources
  67. # 6.10. 再次调整工具链
  68. mv -v /tools/bin/{ld,ld-old}
  69. mv -v /tools/$(gcc -dumpmachine)/bin/{ld,ld-old}
  70. mv -v /tools/bin/{ld-new,ld}
  71. ln -sv /tools/bin/ld /tools/$(gcc -dumpmachine)/bin/ld
  72. gcc -dumpspecs | \
  73. perl -p -e 's@/tools/lib/ld-linux.so.2@/lib/ld-linux.so.2@g;' \
  74.     -e 's@\*startfile_prefix_spec:\n@$_/usr/lib/ @g;' > \
  75.     `dirname $(gcc --print-libgcc-file-name)`/specs
  76. echo 'main(){}' > dummy.c
  77. cc dummy.c -Wl,--verbose &> dummy.log
  78. readelf -l a.out | grep ': /lib'
  79. grep -o '/usr/lib.*/crt[1in].* .*' dummy.log
  80. grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'
  81. grep "/lib/libc.so.6 " dummy.log
  82. grep found dummy.log
  83. rm -v dummy.c a.out dummy.log
  84. # 6.11. Binutils-2.16.1
  85. cd /sources
  86. tar xvf /lfs-sources/binutils-2.16.1.tar.bz2
  87. cd binutils-2.16.1
  88. expect -c "spawn ls"
  89. mkdir -v ../binutils-build
  90. cd ../binutils-build
  91. ../binutils-2.16.1/configure --prefix=/usr \
  92.     --enable-shared
  93. make tooldir=/usr
  94. make check
  95. make tooldir=/usr install
  96. cp -v ../binutils-2.16.1/include/libiberty.h /usr/include
  97. cd /sources
  98. # 6.12. GCC-4.0.3
  99. cd /sources
  100. tar xvf /lfs-sources/gcc-4.0.3.tar.bz2
  101. cd gcc-4.0.3
  102. sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
  103. sed -i 's/^XCFLAGS =$/& -fomit-frame-pointer/' gcc/Makefile.in
  104. sed -i 's@\./fixinc\.sh@-c true@' gcc/Makefile.in
  105. sed -i 's/@have_mktemp_command@/yes/' gcc/gccbug.in
  106. mkdir -v ../gcc-build
  107. cd ../gcc-build
  108. ../gcc-4.0.3/configure --prefix=/usr \
  109.     --libexecdir=/usr/lib --enable-shared \
  110.     --enable-threads=posix --enable-__cxa_atexit \
  111.     --enable-clocale=gnu --enable-languages=c,c++
  112. make
  113. ../gcc-4.0.3/contrib/test_summary
  114. make install
  115. ln -sv ../usr/bin/cpp /lib
  116. ln -sv gcc /usr/bin/cc
  117. echo 'main(){}' > dummy.c
  118. cc dummy.c -Wl,--verbose &> dummy.log
  119. readelf -l a.out | grep ': /lib'
  120. grep -o '/usr/lib.*/crt[1in].* .*' dummy.log
  121. grep 'SEARCH.*/usr/lib' dummy.log |sed 's|; |\n|g'
  122. grep "/lib/libc.so.6 " dummy.log
  123. grep found dummy.log
  124. rm -v dummy.c a.out dummy.log
  125. cd /sources
  126. # 6.13. Berkeley DB-4.4.20
  127. cd /sources
  128. tar xvf /lfs-sources/db-4.4.20.tar.gz
  129. cd db-4.4.20
  130. patch -Np1 -i /lfs-sources/db-4.4.20-fixes-1.patch
  131. cd build_unix &&
  132. ../dist/configure --prefix=/usr --enable-compat185 --enable-cxx
  133. make
  134. make docdir=/usr/share/doc/db-4.4.20 install
  135. chown -v root:root /usr/bin/db_* \
  136.     /usr/lib/libdb* /usr/include/db* &&
  137. chown -Rv root:root /usr/share/doc/db-4.4.20
  138. cd /sources
  139. # 6.14. Coreutils-5.96
  140. cd /sources
  141. tar xvf /lfs-sources/coreutils-5.96.tar.bz2
  142. cd coreutils-5.96
  143. patch -Np1 -i /lfs-sources/coreutils-5.96-uname-1.patch
  144. patch -Np1 -i /lfs-sources/coreutils-5.96-suppress_uptime_kill_su-1.patch
  145. patch -Np1 -i /lfs-sources/coreutils-5.96-i18n-1.patch
  146. chmod +x tests/sort/sort-mb-tests
  147. sed -i 's/_LEN 6/_LEN 20/' src/who.c
  148. ./configure --prefix=/usr
  149. make
  150. echo "dummy1:x:1000:" >> /etc/group
  151. echo "dummy2:x:1001:dummy" >> /etc/group
  152. echo "dummy:x:1000:1000::/root:/bin/bash" >> /etc/passwd
  153. make NON_ROOT_USERNAME=dummy check-root
  154. src/su dummy -c "make RUN_EXPENSIVE_TESTS=yes check"
  155. sed -i '/dummy/d' /etc/passwd /etc/group
  156. make install
  157. mv -v /usr/bin/{cat,chgrp,chmod,chown,cp,date,dd,df,echo} /bin
  158. mv -v /usr/bin/{false,hostname,ln,ls,mkdir,mknod,mv,pwd,rm} /bin
  159. mv -v /usr/bin/{rmdir,stty,sync,true,uname} /bin
  160. mv -v /usr/bin/chroot /usr/sbin
  161. mv -v /usr/bin/{head,sleep,nice} /bin
  162. cd /sources
  163. # 6.15. Iana-Etc-2.10
  164. cd /sources
  165. tar xvf /lfs-sources/iana-etc-2.10.tar.bz2
  166. cd iana-etc-2.10
  167. make
  168. make install
  169. cd /sources
  170. # 6.16. M4-1.4.4
  171. cd /sources
  172. tar xvf /lfs-sources/m4-1.4.4.tar.gz
  173. cd m4-1.4.4
  174. ./configure --prefix=/usr
  175. make
  176. make install
  177. cd /sources
  178. # 6.17. Bison-2.2
  179. cd /sources
  180. tar xvf /lfs-sources/bison-2.2.tar.bz2
  181. cd bison-2.2
  182. ./configure --prefix=/usr
  183. echo '#define YYENABLE_NLS 1' >> config.h
  184. make
  185. make install
  186. cd /sources
  187. # 6.18. Ncurses-5.5
  188. cd /sources
  189. tar xvf /lfs-sources/ncurses-5.5.tar.gz
  190. cd ncurses-5.5
  191. patch -Np1 -i /lfs-sources/ncurses-5.5-fixes-1.patch
  192. ./configure --prefix=/usr --with-shared --without-debug --enable-widec
  193. make
  194. make install
  195. chmod -v 755 /usr/lib/*.5.5
  196. chmod -v 644 /usr/lib/libncurses++w.a
  197. mv -v /usr/lib/libncursesw.so.5* /lib
  198. ln -sfv ../../lib/libncursesw.so.5 /usr/lib/libncursesw.so
  199. for lib in curses ncurses form panel menu ; do \
  200.     rm -vf /usr/lib/lib${lib}.so ; \
  201.     echo "INPUT(-l${lib}w)" >/usr/lib/lib${lib}.so ; \
  202.     ln -sfv lib${lib}w.a /usr/lib/lib${lib}.a ; \
  203. done &&
  204. ln -sfv libncurses++w.a /usr/lib/libncurses++.a
  205. echo "INPUT(-lncursesw)" >/usr/lib/libcursesw.so &&
  206. ln -sfv libncurses.so /usr/lib/libcurses.so &&
  207. ln -sfv libncursesw.a /usr/lib/libcursesw.a &&
  208. ln -sfv libncurses.a /usr/lib/libcurses.a
  209. cd /sources
  210. # 6.19. Procps-3.2.6
  211. cd /sources
  212. tar xvf /lfs-sources/procps-3.2.6.tar.gz
  213. cd procps-3.2.6
  214. make
  215. make install
  216. cd /sources
  217. # 6.20. Sed-4.1.5
  218. cd /sources
  219. tar xvf /lfs-sources/sed-4.1.5.tar.gz
  220. cd sed-4.1.5
  221. ./configure --prefix=/usr --bindir=/bin --enable-html
  222. make
  223. make install
  224. cd /sources
  225. # 6.21. Libtool-1.5.22
  226. cd /sources
  227. tar xvf /lfs-sources/libtool-1.5.22.tar.gz
  228. cd libtool-1.5.22
  229. ./configure --prefix=/usr
  230. make
  231. make install
  232. cd /sources
  233. # 6.22. Perl-5.8.8
  234. cd /sources
  235. tar xvf /lfs-sources/perl-5.8.8.tar.bz2
  236. cd perl-5.8.8
  237. echo "127.0.0.1 localhost $(hostname)" > /etc/hosts
  238. ./configure.gnu --prefix=/usr \
  239.     -Dman1dir=/usr/share/man/man1 \
  240.     -Dman3dir=/usr/share/man/man3 \
  241.     -Dpager="/usr/bin/less -isR"
  242. make
  243. make install
  244. cd /sources
  245. # 6.23. Readline-5.1
  246. cd /sources
  247. tar xvf /lfs-sources/readline-5.1.tar.gz
  248. cd readline-5.1
  249. patch -Np1 -i /lfs-sources/readline-5.1-fixes-3.patch
  250. sed -i '/MV.*old/d' Makefile.in
  251. sed -i '/{OLDSUFF}/c:' support/shlib-install
  252. ./configure --prefix=/usr --libdir=/lib
  253. make SHLIB_LIBS=-lncurses
  254. make install
  255. chmod -v 755 /lib/lib{readline,history}.so*
  256. mv -v /lib/lib{readline,history}.a /usr/lib
  257. rm -v /lib/lib{readline,history}.so
  258. ln -sfv ../../lib/libreadline.so.5 /usr/lib/libreadline.so
  259. ln -sfv ../../lib/libhistory.so.5 /usr/lib/libhistory.so
  260. cd /sources
  261. # 6.24. Zlib-1.2.3
  262. cd /sources
  263. tar xvf /lfs-sources/zlib-1.2.3.tar.gz
  264. cd zlib-1.2.3
  265. ./configure --prefix=/usr --shared --libdir=/lib
  266. make
  267. make install
  268. rm -v /lib/libz.so
  269. ln -sfv ../../lib/libz.so.1.2.3 /usr/lib/libz.so
  270. make clean
  271. ./configure --prefix=/usr
  272. make
  273. make install
  274. chmod -v 644 /usr/lib/libz.a
  275. cd /sources
  276. # 6.25. Autoconf-2.59
  277. cd /sources
  278. tar xvf /lfs-sources/autoconf-2.59.tar.bz2
  279. cd autoconf-2.59
  280. ./configure --prefix=/usr
  281. make
  282. make install
  283. cd /sources
  284. # 6.26. Automake-1.9.6
  285. cd /sources
  286. tar xvf /lfs-sources/automake-1.9.6.tar.bz2
  287. cd automake-1.9.6
  288. ./configure --prefix=/usr
  289. make
  290. make install
  291. cd /sources
  292. # 6.27. Bash-3.1
  293. cd /sources
  294. tar xvf /lfs-sources/bash-3.1.tar.gz
  295. cd bash-3.1
  296. tar -xvf /lfs-sources/bash-doc-3.1.tar.gz &&
  297. sed -i "s|htmldir = @htmldir@|htmldir = /usr/share/doc/bash-3.1|" \
  298.     Makefile.in
  299. patch -Np1 -i /lfs-sources/bash-3.1-fixes-8.patch
  300. ./configure --prefix=/usr --bindir=/bin \
  301.     --without-bash-malloc --with-installed-readline
  302. make
  303. make install
  304. cd /sources
  305. # 运行新编译的 bash 程序来替换正在执行的这个/tools/bin/bash
  306. exec /bin/bash --login +h
复制代码

  1. # 6.28. Bzip2-1.0.3
  2. cd /sources
  3. tar xvf /lfs-sources/bzip2-1.0.3.tar.gz
  4. cd bzip2-1.0.3
  5. patch -Np1 -i /lfs-sources/bzip2-1.0.3-install_docs-1.patch
  6. patch -Np1 -i /lfs-sources/bzip2-1.0.3-bzgrep_security-1.patch
  7. sed -i 's@tempfile -d /tmp -p bz@mktemp -p /tmp@' bzdiff
  8. make -f Makefile-libbz2_so
  9. make clean
  10. make
  11. make install
  12. cp -v bzip2-shared /bin/bzip2
  13. cp -av libbz2.so* /lib
  14. ln -sv ../../lib/libbz2.so.1.0 /usr/lib/libbz2.so
  15. rm -v /usr/bin/{bunzip2,bzcat,bzip2}
  16. ln -sv bzip2 /bin/bunzip2
  17. ln -sv bzip2 /bin/bzcat
  18. cd /sources
  19. # 6.29. Diffutils-2.8.1
  20. cd /sources
  21. tar xvf /lfs-sources/diffutils-2.8.1.tar.gz
  22. cd diffutils-2.8.1
  23. patch -Np1 -i /lfs-sources/diffutils-2.8.1-i18n-1.patch
  24. touch man/diff.1
  25. ./configure --prefix=/usr
  26. make
  27. make install
  28. cd /sources
  29. # 6.30. E2fsprogs-1.39
  30. cd /sources
  31. tar xvf /lfs-sources/e2fsprogs-1.39.tar.gz
  32. cd e2fsprogs-1.39
  33. mkdir -v build
  34. cd build
  35. ../configure --prefix=/usr --with-root-prefix="" \
  36.     --enable-elf-shlibs --disable-evms
  37. make
  38. make install
  39. make install-libs
  40. cd /sources
  41. # 6.31. File-4.17
  42. cd /sources
  43. tar xvf /lfs-sources/file-4.17.tar.gz
  44. cd file-4.17
  45. ./configure --prefix=/usr
  46. make
  47. make install
  48. cd /sources
  49. # 6.32. Findutils-4.2.27
  50. cd /sources
  51. tar xvf /lfs-sources/findutils-4.2.27.tar.gz
  52. cd findutils-4.2.27
  53. ./configure --prefix=/usr --libexecdir=/usr/lib/findutils \
  54.     --localstatedir=/var/lib/locate
  55. make
  56. make install
  57. mv -v /usr/bin/find /bin
  58. sed -i -e 's/find:=${BINDIR}/find:=\/bin/' /usr/bin/updatedb
  59. cd /sources
  60. # 6.33. Flex-2.5.33
  61. cd /sources
  62. tar xvf /lfs-sources/flex-2.5.33.tar.bz2
  63. cd flex-2.5.33
  64. ./configure --prefix=/usr
  65. make
  66. make install
  67. ln -sv libfl.a /usr/lib/libl.a
  68. cat > /usr/bin/lex << "EOF"
  69. #!/bin/sh
  70. # Begin /usr/bin/lex
  71. exec /usr/bin/flex -l "$@"
  72. # End /usr/bin/lex
  73. EOF
  74. chmod -v 755 /usr/bin/lex
  75. cd /sources
  76. # 6.34. GRUB-0.97
  77. cd /sources
  78. tar xvf /lfs-sources/grub-0.97.tar.gz
  79. cd grub-0.97
  80. patch -Np1 -i /lfs-sources/grub-0.97-disk_geometry-1.patch
  81. ./configure --prefix=/usr
  82. make
  83. make install
  84. mkdir -v /boot/grub
  85. ##cp -v /usr/lib/grub/i386-pc/stage{1,2} /boot/grub
  86. ##### 上面的是手册上的方法,这里改成下面的。 #####
  87. cp -v /usr/lib/grub/i386-pc/* /boot/grub
  88. cd /sources
  89. # 6.35. Gawk-3.1.5
  90. cd /sources
  91. tar xvf /lfs-sources/gawk-3.1.5.tar.bz2
  92. cd gawk-3.1.5
  93. patch -Np1 -i /lfs-sources/gawk-3.1.5-segfault_fix-1.patch
  94. ./configure --prefix=/usr --libexecdir=/usr/lib
  95. cat >>config.h <<"EOF"
  96. #define HAVE_LANGINFO_CODESET 1
  97. #define HAVE_LC_MESSAGES 1
  98. EOF
  99. make
  100. make install
  101. cd /sources
  102. # 6.36. Gettext-0.14.5
  103. cd /sources
  104. tar xvf /lfs-sources/gettext-0.14.5.tar.gz
  105. cd gettext-0.14.5
  106. ./configure --prefix=/usr
  107. make
  108. make install
  109. cd /sources
  110. # 6.37. Grep-2.5.1a
  111. cd /sources
  112. tar xvf /lfs-sources/grep-2.5.1a.tar.bz2
  113. cd grep-2.5.1a
  114. patch -Np1 -i /lfs-sources/grep-2.5.1a-redhat_fixes-2.patch
  115. chmod +x tests/fmbtest.sh
  116. ./configure --prefix=/usr --bindir=/bin
  117. make
  118. make install
  119. cd /sources
  120. # 6.38. Groff-1.18.1.1
  121. cd /sources
  122. tar xvf /lfs-sources/groff-1.18.1.1.tar.gz
  123. cd groff-1.18.1.1
  124. patch -Np1 -i /lfs-sources/groff-1.18.1.1-debian_fixes-1.patch
  125. sed -i -e 's/2010/002D/' -e 's/2212/002D/' \
  126.     -e 's/2018/0060/' -e 's/2019/0027/' font/devutf8/R.proto
  127. PAGE=A4 ./configure --prefix=/usr --enable-multibyte
  128. make
  129. make install
  130. ln -sv eqn /usr/bin/geqn
  131. ln -sv tbl /usr/bin/gtbl
  132. cd /sources
  133. # 6.39. Gzip-1.3.5
  134. cd /sources
  135. tar xvf /lfs-sources/gzip-1.3.5.tar.gz
  136. cd gzip-1.3.5
  137. patch -Np1 -i /lfs-sources/gzip-1.3.5-security_fixes-1.patch
  138. ./configure --prefix=/usr
  139. sed -i 's@"BINDIR"@/bin@g' gzexe.in
  140. make
  141. make install
  142. mv -v /usr/bin/gzip /bin
  143. rm -v /usr/bin/{gunzip,zcat}
  144. ln -sv gzip /bin/gunzip
  145. ln -sv gzip /bin/zcat
  146. ln -sv gzip /bin/compress
  147. ln -sv gunzip /bin/uncompress
  148. cd /sources
  149. # 6.40. Inetutils-1.4.2
  150. cd /sources
  151. tar xvf /lfs-sources/inetutils-1.4.2.tar.gz
  152. cd inetutils-1.4.2
  153. patch -Np1 -i /lfs-sources/inetutils-1.4.2-gcc4_fixes-3.patch
  154. patch -Np1 -i /lfs-sources/inetutils-1.4.2-no_server_man_pages-1.patch
  155. ./configure --prefix=/usr --libexecdir=/usr/sbin \
  156.     --sysconfdir=/etc --localstatedir=/var \
  157.     --disable-logger --disable-syslogd \
  158.     --disable-whois --disable-servers
  159. make
  160. make install
  161. mv -v /usr/bin/ping /bin
  162. cd /sources
  163. # 6.41. IPRoute2-2.6.16-060323
  164. cd /sources
  165. tar xvf /lfs-sources/iproute2-2.6.16-060323.tar.gz
  166. cd iproute2-2.6.16-060323
  167. make SBINDIR=/sbin
  168. make SBINDIR=/sbin install
  169. mv -v /sbin/arpd /usr/sbin
  170. cd /sources
  171. # 6.42. Kbd-1.12
  172. cd /sources
  173. tar xvf /lfs-sources/kbd-1.12.tar.bz2
  174. cd kbd-1.12
  175. patch -Np1 -i /lfs-sources/kbd-1.12-backspace-1.patch
  176. patch -Np1 -i /lfs-sources/kbd-1.12-gcc4_fixes-1.patch
  177. ./configure --datadir=/lib/kbd
  178. make
  179. make install
  180. mv -v /usr/bin/{kbd_mode,openvt,setfont} /bin
  181. cd /sources
  182. # 6.43. Less-394
  183. cd /sources
  184. tar xvf /lfs-sources/less-394.tar.gz
  185. cd less-394
  186. ./configure --prefix=/usr --sysconfdir=/etc
  187. make
  188. make install
  189. cd /sources
  190. # 6.44. Make-3.80
  191. cd /sources
  192. tar xvf /lfs-sources/make-3.80.tar.bz2
  193. cd make-3.80
  194. ./configure --prefix=/usr
  195. make
  196. make install
  197. cd /sources
  198. # 6.45. Man-DB-2.4.3
  199. cd /sources
  200. tar xvf /lfs-sources/man-db-2.4.3.tar.gz
  201. cd man-db-2.4.3
  202. mv man/de{_DE.88591,} &&
  203. mv man/es{_ES.88591,} &&
  204. mv man/it{_IT.88591,} &&
  205. mv man/ja{_JP.eucJP,} &&
  206. sed -i 's,\*_\*,??,' man/Makefile.in
  207. sed -i '/\t\/usr\/man/d' src/man_db.conf.in
  208. cat >>include/manconfig.h.in <<"EOF"
  209. #define WEB_BROWSER "exec /usr/bin/lynx"
  210. #define COL "/usr/bin/col"
  211. #define VGRIND "/usr/bin/vgrind"
  212. #define GRAP "/usr/bin/grap"
  213. EOF
  214. ./configure --prefix=/usr --enable-mb-groff --disable-setuid
  215. make
  216. make install
  217. cat >>convert-mans <<"EOF"
  218. #!/bin/sh -e
  219. FROM="$1"
  220. TO="$2"
  221. shift ; shift
  222. while [ $# -gt 0 ]
  223. do
  224.         FILE="$1"
  225.         shift
  226.         iconv -f "$FROM" -t "$TO" "$FILE" >.tmp.iconv
  227.         mv .tmp.iconv "$FILE"
  228. done
  229. EOF
  230. install -m755 convert-mans  /usr/bin
  231. # 6.46. Mktemp-1.5
  232. cd /sources
  233. tar xvf /lfs-sources/mktemp-1.5.tar.gz
  234. cd mktemp-1.5
  235. patch -Np1 -i /lfs-sources/mktemp-1.5-add_tempfile-3.patch
  236. ./configure --prefix=/usr --with-libc
  237. make
  238. make install
  239. make install-tempfile
  240. cd /sources
  241. # 6.47. Module-Init-Tools-3.2.2
  242. cd /sources
  243. tar xvf /lfs-sources/module-init-tools-3.2.2.tar.bz2
  244. cd module-init-tools-3.2.2
  245. patch -Np1 -i /lfs-sources/module-init-tools-3.2.2-modprobe-1.patch
  246. ./configure &&
  247. make check &&
  248. make distclean
  249. ./configure --prefix=/ --enable-zlib
  250. make
  251. make INSTALL=install install
  252. cd /sources
  253. # 6.48. Patch-2.5.4
  254. cd /sources
  255. tar xvf /lfs-sources/patch-2.5.4.tar.gz
  256. cd patch-2.5.4
  257. ./configure --prefix=/usr
  258. make
  259. make install
  260. cd /sources
  261. # 6.49. Psmisc-22.2
  262. cd /sources
  263. tar xvf /lfs-sources/psmisc-22.2.tar.gz
  264. cd psmisc-22.2
  265. ./configure --prefix=/usr --exec-prefix=""
  266. make
  267. make install
  268. mv -v /bin/pstree* /usr/bin
  269. ln -sv killall /bin/pidof
  270. cd /sources
  271. # 6.50. Shadow-4.0.15
  272. cd /sources
  273. tar xvf /lfs-sources/shadow-4.0.15.tar.bz2
  274. cd shadow-4.0.15
  275. ./configure --libdir=/lib --enable-shared --without-selinux
  276. sed -i 's/groups$(EXEEXT) //' src/Makefile
  277. find man -name Makefile -exec sed -i '/groups/d' {} \;
  278. sed -i -e 's/ ko//' -e 's/ zh_CN zh_TW//' man/Makefile
  279. for i in de es fi fr id it pt_BR; do
  280.     convert-mans UTF-8 ISO-8859-1 man/${i}/*.?
  281. done
  282. for i in cs hu pl; do
  283.     convert-mans UTF-8 ISO-8859-2 man/${i}/*.?
  284. done
  285. convert-mans UTF-8 EUC-JP man/ja/*.?
  286. convert-mans UTF-8 KOI8-R man/ru/*.?
  287. convert-mans UTF-8 ISO-8859-9 man/tr/*.?
  288. make
  289. make install
  290. cp -v etc/{limits,login.access} /etc
  291. sed -e's@#MD5_CRYPT_ENAB.no@MD5_CRYPT_ENAB yes@' \
  292.     -e 's@/var/spool/mail@/var/mail@' \
  293.     etc/login.defs > /etc/login.defs
  294. #    sed -i 's@DICTPATH.*@DICTPATH\t/lib/cracklib/pw_dict@' \
  295. #        /etc/login.defs
  296. mv -v /usr/bin/passwd /bin
  297. mv -v /lib/libshadow.*a /usr/lib
  298. rm -v /lib/libshadow.so
  299. ln -sfv ../../lib/libshadow.so.0 /usr/lib/libshadow.so
  300. mkdir -v /etc/default
  301. pwconv
  302. grpconv
  303. passwd root
  304. cd /sources
  305. # 6.51. Sysklogd-1.4.1
  306. cd /sources
  307. tar xvf /lfs-sources/sysklogd-1.4.1.tar.gz
  308. cd sysklogd-1.4.1
  309. patch -Np1 -i /lfs-sources/sysklogd-1.4.1-fixes-1.patch
  310. patch -Np1 -i /lfs-sources/sysklogd-1.4.1-8bit-1.patch
  311. make
  312. make install
  313. cat > /etc/syslog.conf << "EOF"
  314. # Begin /etc/syslog.conf
  315. auth,authpriv.* -/var/log/auth.log
  316. *.*;auth,authpriv.none -/var/log/sys.log
  317. daemon.* -/var/log/daemon.log
  318. kern.* -/var/log/kern.log
  319. mail.* -/var/log/mail.log
  320. user.* -/var/log/user.log
  321. *.emerg *
  322. # End /etc/syslog.conf
  323. EOF
  324. cd /sources
  325. # 6.52. Sysvinit-2.86
  326. cd /sources
  327. tar xvf /lfs-sources/sysvinit-2.86.tar.gz
  328. cd sysvinit-2.86
  329. sed -i 's@Sending processes@& started by init@g' \
  330.     src/init.c
  331. make -C src
  332. make -C src install
  333. cat > /etc/inittab << "EOF"
  334. # Begin /etc/inittab
  335. id:3:initdefault:
  336. si::sysinit:/etc/rc.d/init.d/rc sysinit
  337. l0:0:wait:/etc/rc.d/init.d/rc 0
  338. l1:S1:wait:/etc/rc.d/init.d/rc 1
  339. l2:2:wait:/etc/rc.d/init.d/rc 2
  340. l3:3:wait:/etc/rc.d/init.d/rc 3
  341. l4:4:wait:/etc/rc.d/init.d/rc 4
  342. l5:5:wait:/etc/rc.d/init.d/rc 5
  343. l6:6:wait:/etc/rc.d/init.d/rc 6
  344. ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now
  345. su:S016:once:/sbin/sulogin
  346. 1:2345:respawn:/sbin/agetty tty1 9600
  347. 2:2345:respawn:/sbin/agetty tty2 9600
  348. 3:2345:respawn:/sbin/agetty tty3 9600
  349. 4:2345:respawn:/sbin/agetty tty4 9600
  350. 5:2345:respawn:/sbin/agetty tty5 9600
  351. 6:2345:respawn:/sbin/agetty tty6 9600
  352. # End /etc/inittab
  353. EOF
  354. cd /sources
  355. # 6.53. Tar-1.15.1
  356. cd /sources
  357. tar xvf /lfs-sources/tar-1.15.1.tar.bz2
  358. cd tar-1.15.1
  359. patch -Np1 -i /lfs-sources/tar-1.15.1-gcc4_fix_tests-1.patch
  360. patch -Np1 -i /lfs-sources/tar-1.15.1-sparse_fix-1.patch
  361. patch -Np1 -i /lfs-sources/tar-1.15.1-security_fixes-1.patch
  362. ./configure --prefix=/usr --bindir=/bin --libexecdir=/usr/sbin
  363. make
  364. make install
  365. cd /sources
  366. # 6.54. Texinfo-4.8
  367. cd /sources
  368. tar xvf /lfs-sources/texinfo-4.8.tar.bz2
  369. cd texinfo-4.8
  370. patch -Np1 -i /lfs-sources/texinfo-4.8-multibyte-1.patch
  371. patch -Np1 -i /lfs-sources/texinfo-4.8-tempfile_fix-2.patch
  372. ./configure --prefix=/usr
  373. make
  374. make install
  375. make TEXMF=/usr/share/texmf install-tex
  376. cd /usr/share/info
  377. rm dir
  378. for f in *
  379. do install-info $f dir 2>/dev/null
  380. done
  381. cd /sources
  382. # 6.55. Udev-096
  383. cd /sources
  384. tar xvf /lfs-sources/udev-096.tar.bz2
  385. cd udev-096
  386. tar xf /lfs-sources/udev-config-6.2.tar.bz2
  387. install -dv /lib/{firmware,udev/devices/{pts,shm}}
  388. mknod -m0666 /lib/udev/devices/null c 1 3
  389. ln -sv /proc/self/fd /lib/udev/devices/fd
  390. ln -sv /proc/self/fd/0 /lib/udev/devices/stdin
  391. ln -sv /proc/self/fd/1 /lib/udev/devices/stdout
  392. ln -sv /proc/self/fd/2 /lib/udev/devices/stderr
  393. ln -sv /proc/kcore /lib/udev/devices/core
  394. make EXTRAS="extras/ata_id extras/cdrom_id extras/edd_id \
  395.             extras/firmware extras/floppy extras/path_id \
  396.             extras/scsi_id extras/usb_id extras/volume_id"
  397. make DESTDIR=/ \
  398.     EXTRAS="extras/ata_id extras/cdrom_id extras/edd_id \
  399.             extras/firmware extras/floppy extras/path_id \
  400.             extras/scsi_id extras/usb_id extras/volume_id" install
  401. cp -v udev-config-6.2/[0-9]* /etc/udev/rules.d/
  402. install -m644 -D -v docs/writing_udev_rules/index.html \
  403.     /usr/share/doc/udev-096/index.html
  404. cd /sources
  405. # 6.56. Util-linux-2.12r
  406. cd /sources
  407. tar xvf /lfs-sources/util-linux-2.12r.tar.bz2
  408. cd util-linux-2.12r
  409. sed -i 's@etc/adjtime@var/lib/hwclock/adjtime@g' \
  410.     hwclock/hwclock.c
  411. mkdir -p /var/lib/hwclock
  412. patch -Np1 -i /lfs-sources/util-linux-2.12r-cramfs-1.patch
  413. ./configure
  414. make HAVE_KILL=yes HAVE_SLN=yes
  415. make HAVE_KILL=yes HAVE_SLN=yes install
  416. cd /sources
  417. # 6.57. Vim-7.0
  418. cd /sources
  419. tar xvf /lfs-sources/vim-7.0.tar.bz2
  420. cd vim70
  421. patch -Np1 -i /lfs-sources/vim-7.0-fixes-7.patch
  422. patch -Np1 -i /lfs-sources/vim-7.0-mandir-1.patch
  423. patch -Np1 -i /lfs-sources/vim-7.0-spellfile-1.patch
  424. echo '#define SYS_VIMRC_FILE "/etc/vimrc"' >> src/feature.h
  425. ./configure --prefix=/usr --enable-multibyte
  426. make
  427. make install
  428. rm -f /usr/share/vim/vim70/tutor/tutor.{gr,pl,ru,sk}
  429. rm -f /usr/share/vim/vim70/tutor/tutor.??.*
  430. ln -sv vim /usr/bin/vi
  431. for L in "" fr it pl ru; do
  432.     ln -sv vim.1 /usr/share/man/$L/man1/vi.1
  433. done
  434. ln -sv ../vim/vim70/doc /usr/share/doc/vim-7.0
  435. cat > /etc/vimrc << "EOF"
  436. " Begin /etc/vimrc
  437. set nocompatible
  438. set backspace=2
  439. syntax on
  440. if (&term == "iterm") || (&term == "putty")
  441.   set background=dark
  442. endif
  443. " End /etc/vimrc
  444. EOF
  445. vim -c ':options'
  446. #    To use these spell files, some configuration in /etc/vimrc is needed, e.g.:
  447. #    set spelllang=en,ru
  448. #    set spell
  449. cd /sources
  450. rm -rf /sources/*
  451. ##### 第七章 配置系统启动脚本 #####
  452. cd /sources
  453. tar xvf /lfs-sources/lfs-bootscripts-6.2.tar.bz2
  454. cd lfs-bootscripts-6.2
  455. make install
  456. cd /sources
  457. 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 <roryo@roryo.dynup.net>

# 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

  1. ###### 编译内核 #####
  2. # 8.3. Linux-2.6.16.38
  3. cd /sources
  4. tar xvf /lfs-sources/linux-2.6.16.38.tar.bz2
  5. cd linux-2.6.16.38
  6. patch -Np1 -i /lfs-sources/linux-2.6.16.27-utf8_input-1.patch
  7. make mrproper
  8. make menuconfig
  9. make
  10. make modules_install
  11. cp -v arch/i386/boot/bzImage /boot/lfskernel-2.6.16.38
  12. cp -v System.map /boot/System.map-2.6.16.38
  13. cp -v .config /boot/config-2.6.16.38
  14. install -d /usr/share/doc/linux-2.6.16.38 &&
  15. cp -r Documentation/* /usr/share/doc/linux-2.6.16.38
  16. 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 空目录。
  1. umount $LFS/lfs-sources
  2. rmdir $LFS/lfs-sources
复制代码
  1. umount -v $LFS/dev/pts
  2. umount -v $LFS/dev/shm
  3. umount -v $LFS/dev
  4. umount -v $LFS/proc
  5. umount -v $LFS/sys
  6. umount -v $LFS
复制代码


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

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

使用道具 举报

 楼主| 发表于 2007-5-17 03:26:22 | 显示全部楼层

零起点构建自己的Linux ( 实现中文图形桌面 KDE篇 )

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

青铜镜大哥的帖子 (懒人的BLFS)朝着KDE前进…… http://www.linuxsir.cn/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.cn/bbs/showthread.php?t=298338 
  1. 01-Xwindow
  2. -----------------------------------
  3.   01-libpng
  4. ***********************************
  5. cd /sources
  6. tar xvf  /BLFS/libpng-1.2.12.tar.bz2
  7. cd libpng-1.2.12
  8. ./configure --prefix=/usr &&
  9. make
  10. make install &&
  11. install -v -m755 -d /usr/share/doc/libpng-1.2.12 &&
  12. install -v -m644 README libpng.txt /usr/share/doc/libpng-1.2.12
  13. cd /sources
  14. rm -rf libpng-1.2.12
  15. ***********************************
  16.   02-expat
  17. ***********************************
  18. cd /sources
  19. tar xvf /BLFS/expat-2.0.0.tar.gz
  20. cd expat-2.0.0
  21. ./configure --prefix=/usr &&
  22. make
  23. make install &&
  24. install -v -m755 -d /usr/share/doc/expat-2.0.0 &&
  25. install -v -m644 doc/*.{html,png,css} /usr/share/doc/expat-2.0.0
  26. cd /sources
  27. rm -rf expat-2.0.0
  28. ***********************************
  29.   03-freetype
  30. ***********************************
  31. cd /sources
  32. tar xvf /BLFS/freetype-2.1.10.tar.bz2
  33. cd freetype-2.1.10
  34. tar xf /BLFS/freetype-doc-2.1.10.tar.bz2 \
  35.     --strip-components=2 -C docs
  36. sed -i -r 's:.*(#.*BYTE.*) .*:\1:' \
  37.      include/freetype/config/ftoption.h &&
  38. ./configure --prefix=/usr &&
  39. make
  40. make install &&
  41. install -v -m755 -d /usr/share/doc/freetype-2.1.10 &&
  42. cp -v -R docs/* /usr/share/doc/freetype-2.1.10
  43. cd /sources
  44. rm -rf freetype-2.1.10
  45. ***********************************
  46.   04-fontconfig
  47. ***********************************
  48. cd /sources
  49. tar xvf /BLFS/fontconfig-2.3.2.tar.gz
  50. cd fontconfig-2.3.2
  51. ./configure --prefix=/usr --sysconfdir=/etc \
  52.     --disable-docs --without-add-fonts \
  53.     --with-docdir=/usr/share/doc/fontconfig-2.3.2 &&
  54. make install &&
  55. install -v -m644 doc/*.3 /usr/share/man/man3 &&
  56. install -v -m644 doc/*.5 /usr/share/man/man5 &&
  57. install -v -m755 \
  58.         -d /usr/share/doc/fontconfig-2.3.2/fontconfig-devel &&
  59. install -v -m644 doc/*.{html,pdf,txt} \
  60.         /usr/share/doc/fontconfig-2.3.2 &&
  61. install -v -m644 doc/fontconfig-devel/* \
  62.         /usr/share/doc/fontconfig-2.3.2/fontconfig-devel
  63. cd /sources
  64. rm -rf fontconfig-2.3.2
  65. ***********************************
  66.   05-linux-pam
  67. ***********************************
  68. cd /sources
  69. tar xvf /BLFS/Linux-PAM-0.99.4.0.tar.bz2
  70. cd Linux-PAM-0.99.4.0
  71. tar -xf /BLFS/Linux-PAM-0.99.4.0-docs.tar.bz2 -C doc
  72. ./configure --libdir=/usr/lib \
  73.             --sbindir=/lib/security \
  74.             --enable-securedir=/lib/security \
  75.             --enable-docdir=/usr/share/doc/Linux-PAM-0.99.4.0 \
  76.             --enable-read-both-confs &&
  77. make
  78. make install &&
  79. chmod -v 4755 /lib/security/unix_chkpwd &&
  80. mv -v /lib/security/pam_tally /sbin &&
  81. mv -v /usr/lib/libpam*.so.0* /lib &&
  82. ln -v -sf ../../lib/libpam.so.0.81.3 /usr/lib/libpam.so &&
  83. ln -v -sf ../../lib/libpamc.so.0.81.0 /usr/lib/libpamc.so &&
  84. ln -v -sf ../../lib/libpam_misc.so.0.81.2 /usr/lib/libpam_misc.so
  85. for DOCTYPE in html pdf ps txts
  86. do
  87.     cp -v -R doc/$DOCTYPE /usr/share/doc/Linux-PAM-0.99.4.0
  88. done
  89. cd /sources
  90. rm -rf Linux-PAM-0.99.4.0
  91. ***********************************
  92.   06-Xorg-6.9.0_1
  93. ***********************************
  94. cd /sources
  95. tar xvf /BLFS/X11R6.9.0-src.tar.bz2
  96. cd xc
  97. patch -Np1 -i /BLFS/xorg-6.9.0-luit_race-1.patch &&
  98. patch -Np1 -i /BLFS/xorg-6.9.0-security-4.patch
  99. sed -i 's@/usr/X11R6@</usr>@' programs/luit/parser.h
  100. sed -i '/^SUBDIRS =/s/ etc$//' programs/Xserver/Xprint/Imakefile
  101. pushd config/util &&
  102. make -f Makefile.ini lndir
  103. popd
  104. mkdir ../xcbuild &&
  105. cd ../xcbuild &&
  106. ../xc/config/util/lndir ../xc
  107. cat > config/cf/host.def << "EOF"
  108. /* Begin Xorg host.def file */
  109. /* System Related Information.  If you read and configure only one
  110. * section then it should be this one.  The Intel architecture defaults
  111. * are set for a i686 and higher.  Axp is for the Alpha architecture
  112. * and Ppc is for the Power PC.  AMD64 is for the Opteron processor.
  113. * Note that there have been reports that the Ppc optimization line
  114. * causes segmentation faults during build.  If that happens, try
  115. * building without the DefaultGcc2PpcOpt line.  ***********/
  116. /* #define DefaultGcc2i386Opt  -O2 -fno-strength-reduce \
  117.                                -fno-strict-aliasing -march=i686 */
  118. /* #define DefaultGcc2AMD64Opt -O2 -fno-strength-reduce \
  119.                                -fno-strict-aliasing */
  120. /* #define DefaultGcc2AxpOpt   -O2 -mcpu=ev6 */
  121. /* #define DefaultGcc2PpcOpt   -O2 -mcpu=750 */
  122. #define HasFreetype2            YES
  123. #define HasFontconfig           YES
  124. #define HasExpat                YES
  125. #define HasLibpng               YES
  126. #define HasZlib                 YES
  127. /* Uncomment the following define if you'd like
  128. * xdm to use Linux-PAM
  129. #define HasPam                  YES
  130. */
  131. /*
  132. * Which drivers to build.  When building a static server, each of
  133. * these will be included in it.  When building the loadable server
  134. * each of these modules will be built.
  135. *
  136. #define XF86CardDrivers         mga glint nv tga s3virge sis rendition \
  137.                                 neomagic i740 tdfx savage \
  138.                                 cirrus vmware tseng trident chips apm \
  139.                                 GlideDriver fbdev i128 \
  140.                                 ati DevelDrivers ark \
  141.                                 cyrix siliconmotion vesa vga \
  142.                                 XF86OSCardDrivers XF86ExtraCardDrivers
  143. */
  144. /*
  145. * Select the XInput devices you want by uncommenting this.
  146. *
  147. #define XInputDrivers           mouse keyboard acecad calcomp citron \
  148.                                 digitaledge dmc dynapro elographics \
  149.                                 microtouch mutouch penmount spaceorb \
  150.                                 summa wacom void magictouch aiptek
  151. */
  152. /* Most installs will only need this */
  153. #define XInputDrivers           mouse keyboard
  154. /* Xterm is no longer built by default */
  155. #define BuildXterm              YES
  156. /* Disable building Xprint server and clients until we get them figured
  157. * out but build Xprint libraries to allow precompiled binaries such as
  158. * Acrobat Reader to run.
  159. */
  160. #define XprtServer              NO
  161. #define BuildXprintClients      NO
  162. /* Uncomment the following define if you would prefer to install X into
  163. * /usr or change it to any other location that you prefer.
  164. * The GL related defines disable compatibility symlinks (the links
  165. * are not needed when X is installed in /usr).
  166. #define ProjectRoot             /usr
  167. #define LinkGLToUsrInclude      NO
  168. #define LinkGLToUsrLib          NO
  169. */
  170. /* End Xorg host.def file */
  171. EOF
  172. sed -i -e "s@^#include <linux/config.h>@/* & */@" \
  173.     `grep -lr linux/config.h *` &&
  174. ( make World 2>&1 | tee xorg-compile.log && exit $PIPESTATUS )
  175. make install &&
  176. make install.man
  177. ln -v -s ../X11R6/bin /usr/bin/X11 &&
  178. ln -v -s ../X11R6/lib/X11 /usr/lib/X11 &&
  179. ln -v -s ../X11R6/include/X11 /usr/include/X11
  180. install -v -d -m755 /usr/share/fonts &&
  181. ln -svn /usr/X11R6/lib/X11/fonts/TTF /usr/share/fonts/X11-TTF
  182. cat >> /etc/ld.so.conf << "EOF"
  183. /usr/X11R6/lib
  184. EOF
  185. ldconfig &&
  186. cat >> /etc/profile << "EOF"
  187. export PATH=$PATH:/usr/X11R6/bin
  188. export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/X11R6/lib/pkgconfig
  189. EOF
  190. /sbin/ldconfig &&
  191. cd ~ &&
  192. /usr/X11R6/bin/Xorg -configure
  193. ***********************************
  194.   07-test-text
  195. ***********************************
  196. /usr/X11R6/bin/X -config ~/xorg.conf.new
  197. # Ctrl+Alt+backspace #
  198. # 按 Ctrl+Alt+backspace 退出X
  199. ***********************************
  200.   08-Xorg-6.9.0_2
  201. ***********************************
  202. install -v -m755 -D ~/xorg.conf.new /etc/X11/xorg.conf
  203. cat > ~/.xinitrc << "EOF" &&
  204. # Begin .xinitrc file
  205. xterm -g 80x40+0+0 &
  206. xclock -g 100x100-0+0 &
  207. twm
  208. EOF
  209. cat >> /etc/sysconfig/createfiles << "EOF"
  210. /tmp/.ICE-unix dir 1777 root root
  211. EOF
  212. exit
  213. ***********************************
  214.   09-test-test
  215. ***********************************
  216. startx
  217. xcalc &
  218. ***********************************
复制代码
  1. 02-qt
  2. ----------------------------------
  3.   10-libjpeg
  4. ***********************************
  5. cd /sources
  6. tar xvf /BLFS/jpegsrc.v6b.tar.gz
  7. cd jpeg-6b
  8. ./configure --prefix=/usr --enable-static --enable-shared &&
  9. make
  10. make install
  11. cd /sources
  12. rm -rf jpeg-6b
  13. exit
  14. ***********************************
  15.   11-little_cms
  16. ***********************************
  17. cd /sources
  18. tar xvf /BLFS/lcms-1.15.tar.gz
  19. cd lcms-1.15
  20. ./configure --prefix=/usr &&
  21. make
  22. make install &&
  23. install -v -m755 -d /usr/share/doc/lcms-1.15 &&
  24. install -v -m644 README.1ST doc/* /usr/share/doc/lcms-1.15
  25. cd /sources
  26. rm -rf lcms-1.15
  27. cd /sources
  28. exit
  29. ***********************************
  30.   12-libmng
  31. ***********************************
  32. cd /sources
  33. tar xvf /BLFS/libmng-1.0.9.tar.gz
  34. cd libmng-1.0.9
  35. cp makefiles/makefile.linux Makefile &&
  36. make
  37. make prefix=/usr install &&
  38. install -v -m644 doc/man/*.3 /usr/share/man/man3 &&
  39. install -v -m644 doc/man/*.5 /usr/share/man/man5 &&
  40. install -v -m755 -d /usr/share/doc/libmng-1.0.9 &&
  41. install -v -m644 doc/*.{png,txt} /usr/share/doc/libmng-1.0.9
  42. cd /sources
  43. rm -rf libmng-1.0.9
  44. ***********************************
  45.   13-blfs-bootscripts
  46. ***********************************
  47. tar xvf /BLFS/blfs-bootscripts-20060910.tar.bz2
  48. ***********************************
  49.   14-nas
  50. ***********************************
  51. cd /sources
  52. tar xvf /BLFS/nas-1.7.src.tar.gz
  53. cd nas-1.7
  54. patch -Np1 -i /BLFS/nas-1.7-gcc4-1.patch &&
  55. xmkmf &&
  56. make World
  57. make install install.man &&
  58. install -v -m755 -d /usr/share/doc/nas-1.7/pdf &&
  59. install -v -m644 doc/pdf/* /usr/share/doc/nas-1.7/pdf &&
  60. install -v -m644 doc/{README,actions,*.{ps,txt}} \
  61.     /usr/share/doc/nas-1.7
  62. install -v -m644 /etc/nas/nasd.conf.eg /etc/nas/nasd.conf
  63. cd /sources
  64. rm -rf nas-1.7
  65. ***********************************
  66.   15-nas
  67. ***********************************
  68. cd /sources
  69. cd blfs-bootscripts-20060910
  70. make install-nas
  71. cd /sources
  72. ***********************************
  73.   17-qt
  74. ***********************************
  75. cat > ~/.login << "EOF"
  76. export QTDIR=/opt/qt
  77. export PATH=$QTDIR/bin:$PATH
  78. export MANPATH=$QTDIR/man:$MANPATH
  79. export LD_LIBRARY_PATH=$QTDIR/lib/libqt-mt.so:$LD_LIBRARY_PATH
  80. EOF
  81. cat > ~/.profile << "EOF"
  82. export QTDIR=/opt/qt
  83. export PATH=$QTDIR/bin:$PATH
  84. export MANPATH=$QTDIR/man:$MANPATH
  85. export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
  86. EOF
  87. cp /BLFS/qt-x11-free-3.3.7.tar.bz2 /opt
  88. cd /opt
  89. tar xvf qt-x11-free-3.3.7.tar.bz2
  90. mv qt-x11-free-3.3.7 qt
  91. cd qt
  92. export QTDIR=/opt/qt-3.3.7 &&
  93. export LD_LIBRARY_PATH=/opt/qt-3.3.7/lib:$LD_LIBRARY_PATH &&
  94. export PATH=/opt/qt-3.3.7/bin:$PATH &&
  95. cd /opt
  96. ***********************************
复制代码
  1. 03-qt-test
  2. (qt-测试)
  3. ----------------------------------
  4.   18-qt
  5. ***********************************
  6. # 如果这一部分是编成脚本来做,需要将脚本拷贝到/opt/qt 目录中再运行。
  7. cd /opt/qt
  8. ./configure -prefix /opt/qt-3.3.7 \
  9. -sysconfdir /etc/qt \
  10. -qt-gif \
  11. -system-zlib \
  12. -system-libpng \
  13. -system-libjpeg \
  14. -system-libmng \
  15. -plugin-imgfmt-png \
  16. -plugin-imgfmt-jpeg \
  17. -plugin-imgfmt-mng \
  18. -no-exceptions \
  19. -thread \
  20. -tablet &&
  21. make sub-tools &&
  22. make install &&
  23. ln -v -sfn qt-3.3.7 /opt/qt &&
  24. ln -v -s libqt-mt.so /opt/qt/lib/libqt.so &&
  25. cp -v -r doc/man /opt/qt/doc &&
  26. cp -v -r examples /opt/qt/doc
  27. export QTDIR=/opt/qt
  28. cat >> /etc/ld.so.conf << "EOF" &&
  29. # Begin qt addition to /etc/ld.so.conf
  30. /opt/qt/lib
  31. # End qt addition
  32. EOF
  33. ldconfig &&
  34. cat >> /etc/man_db.conf << "EOF"
  35. # Begin qt addition to man_db.conf
  36. MANDATORY_MANPATH /opt/qt/doc/man
  37. # End qt addition to man_db.conf
  38. EOF
  39. cat >> /etc/profile << "EOF"
  40. export PARH=$PATH:/opt/qt-3.3.7/bin
  41. export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/qt-3.3.7/lib/pkgconfig
  42. EOF
  43. cd ..
  44. ***********************************
  45.   19-test-test
  46. ***********************************
  47. qmake
  48. designer &
  49. assistant &
  50. ***********************************
复制代码
  1. 04-support_library
  2. (支持库)
  3. ---------------------------------
  4.   20-pkg-config
  5. ***********************************
  6. cd /sources
  7. tar xvf /BLFS/pkg-config-0.20.tar.gz
  8. cd pkg-config-0.20
  9. ./configure --prefix=/usr &&
  10. make
  11. make install
  12. cd /sources
  13. rm -rf pkg-config-0.20
  14. ***********************************
  15.   21-glib
  16. ***********************************
  17. cd /sources
  18. tar xvf /BLFS/glib-2.10.3.tar.bz2
  19. cd glib-2.10.3
  20. ./configure --prefix=/usr &&
  21. make
  22. make install
  23. cd /sources
  24. rm -rf glib-2.10.3
  25. ***********************************
  26.   22-atk
  27. ***********************************
  28. cd /sources
  29. tar xvf /BLFS/atk-1.11.4.tar.bz2
  30. cd atk-1.11.4
  31. ./configure --prefix=/usr &&
  32. make
  33. make install
  34. cd /sources
  35. rm -rf atk-1.11.4
  36. ***********************************
  37.   23-libtiff
  38. ***********************************
  39. cd /sources
  40. tar xvf /BLFS/tiff-3.8.2.tar.gz
  41. cd tiff-3.8.2
  42. ./configure --prefix=/usr &&
  43. make
  44. make install
  45. cd /sources
  46. rm -rf tiff-3.8.2
  47. ***********************************
  48.   24-cairo
  49. ***********************************
  50. cd /sources
  51. tar xvf /BLFS/cairo-1.2.4.tar.gz
  52. cd cairo-1.2.4
  53. ./configure --prefix=/usr &&
  54. make
  55. make install
  56. cd /sources
  57. rm -rf cairo-1.2.4
  58. ***********************************
  59.   25-pango
  60. ***********************************
  61. cd /sources
  62. tar xvf /BLFS/pango-1.12.3.tar.bz2
  63. cd pango-1.12.3
  64. ./configure --prefix=/usr --sysconfdir=/etc &&
  65. make
  66. make install
  67. cd /sources
  68. rm -rf pango-1.12.3
  69. ***********************************
  70.   26-gtk+
  71. ***********************************
  72. cd /sources
  73. tar xvf /BLFS/gtk+-2.8.20.tar.bz2
  74. cd gtk+-2.8.20
  75. ./configure --prefix=/usr --sysconfdir=/etc &&
  76. make
  77. make install &&
  78. install -v -m755 -d /usr/share/doc/gtk+-2.8.20/{faq,tutorial} &&
  79. cp -v -R docs/faq/html/* /usr/share/doc/gtk+-2.8.20/faq &&
  80. cp -v -R docs/tutorial/html/* /usr/share/doc/gtk+-2.8.20/tutorial
  81. cd /sources
  82. rm -rf gtk+-2.8.20
  83. ***********************************
复制代码
  1. 05-recommend
  2. (推荐安装的包)
  3. ---------------------------------
  4.   40-libogg
  5. ***********************************
  6. cd /sources
  7. tar xvf /BLFS/libogg-1.1.3.tar.gz
  8. cd libogg-1.1.3
  9. ./configure --prefix=/usr &&
  10. make
  11. make install
  12. cd /sources
  13. rm -rf liboog-1.1.3
  14. ***********************************
  15.   41-libvorbis
  16. ***********************************
  17. cd /sources
  18. tar xvf /BLFS/libvorbis-1.1.2.tar.gz
  19. cd libvorbis-1.1.2
  20. ./configure --prefix=/usr &&
  21. make
  22. sed -i.bak -e 's/-mno-ieee-fp//' lib/Makefile
  23. make install &&
  24. install -v -m644 doc/Vorbis* /usr/share/doc/libvorbis-1.1.2
  25. cd /sources
  26. rm -rf libvorbis-1.1.2
  27. ***********************************
  28.   42-audiofile
  29. ***********************************
  30. cd /sources
  31. tar xvf /BLFS/audiofile-0.2.6.tar.gz
  32. cd audiofile-0.2.6
  33. ./configure --prefix=/usr &&
  34. make
  35. make install
  36. cd /sources
  37. rm -rf audiofile-0.2.6
  38. ***********************************
  39.   43-esound
  40. ***********************************
  41. cd /sources
  42. tar xvf /BLFS/esound-0.2.36.tar.bz2
  43. cd esound-0.2.36
  44. sed -i 's@doc/esound@&-0.2.36@' configure &&
  45. ./configure --prefix=/usr --sysconfdir=/etc &&
  46. make
  47. make install
  48. cp -v -R docs/html /usr/share/doc/esound-0.2.36
  49. cd /sources
  50. rm -rf esound-0.2.36
  51. ***********************************
  52.   44-lame
  53. ***********************************
  54. cd /sources
  55. tar xvf /BLFS/lame-3.96.1.tar.gz
  56. cd lame-3.96.1
  57. ./configure --prefix=/usr --enable-mp3rtp &&
  58. make
  59. make install
  60. cd /sources
  61. rm -rf lame-3.96.1
  62. ***********************************
  63.   45-ffmpeg
  64. ***********************************
  65. cd /sources
  66. tar xvf /BLFS/ffmpeg-0.4.9-pre1.tar.gz
  67. cd ffmpeg-0.4.9-pre1
  68. patch -Np1 -i /BLFS/ffmpeg-0.4.9-pre1-gcc4-1.patch &&
  69. patch -Np1 -i /BLFS/ffmpeg-0.4.9-pre1-amr_fixes-1.patch &&
  70. sed -i "s/static uint64/const uint64/" \
  71.     libavcodec/liba52/resample_mmx.c &&
  72. ./configure --prefix=/usr --enable-shared \
  73.     --enable-pthreads --disable-ffplay &&
  74. make
  75. make -C doc ff{mpeg,play,server}.1
  76. make install
  77. install -v -m755 -d /usr/share/doc/ffmpeg-0.4.9-pre1 &&
  78. install -v -m644 doc/* /usr/share/doc/ffmpeg-0.4.9-pre1
  79. cd /sources
  80. rm -rf ffmpeg-0.4.9-pre1
  81. ***********************************
  82.   46-doxyen
  83. ***********************************
  84. cd /sources
  85. tar xvf /BLFS/doxygen-1.4.6.src.tar.gz
  86. cd doxygen-1.4.6
  87. rm src/unistd.h &&
  88. ./configure --prefix /usr --docdir /usr/share/doc &&
  89. make
  90. make install
  91. cd /sources
  92. rm -rf doxygen-1.4.6
  93. ***********************************
  94.   47-libmad
  95. ***********************************
  96. cd /sources
  97. tar xvf /BLFS/libmad-0.15.1b.tar.gz
  98. cd libmad-0.15.1b
  99. ./configure --prefix=/usr &&
  100. make
  101. make install
  102. cat > /usr/lib/pkgconfig/mad.pc << "EOF"
  103. prefix=/usr
  104. exec_prefix=${prefix}
  105. libdir=${exec_prefix}/lib
  106. includedir=${prefix}/include
  107. Name: mad
  108. Description: MPEG audio decoder
  109. Requires:
  110. Version: 0.15.1b
  111. Libs: -L${libdir} -lmad
  112. Cflags: -I${includedir}
  113. EOF
  114. cd /sources
  115. rm -rf libmad-0.15.1b
  116. ***********************************
复制代码
  1. 06-asla
  2. ----------------------------------
  3.   51-alsa-lib
  4. ***********************************
  5. cd /sources
  6. tar xvf /BLFS/alsa-lib-1.0.13.tar.bz2
  7. cd alsa-lib-1.0.13
  8. ./configure --enable-static &&
  9. make
  10. make install &&
  11. install -v -m644 -D doc/asoundrc.txt \
  12. /usr/share/doc/alsa-lib-1.0.13/asoundrc.txt
  13. make doc
  14. install -v -d -m755 /usr/share/doc/alsa-1.0.13/html &&
  15. install -v -m644 doc/doxygen/html/* /usr/share/doc/alsa-1.0.13/html
  16. cd /sources
  17. rm -rf alsa-lib-1.0.13
  18. ***********************************
  19.   52-alsa-plugins
  20. ***********************************
  21. cd /sources
  22. tar xvf /BLFS/alsa-plugins-1.0.13.tar.bz2
  23. cd alsa-plugins-1.0.13
  24. ./configure &&
  25. make
  26. make install &&
  27. install -v -m755 -d /usr/share/doc/alsa-plugins-1.0.13 &&
  28. install -v -m644 doc/{README*,*.txt} \
  29. /usr/share/doc/alsa-plugins-1.0.13
  30. cd /sources
  31. rm -rf alsa-plugins-1.0.13
  32. ***********************************
  33.   53-alsa-utils
  34. ***********************************
  35. cd /sources
  36. tar xvf /BLFS/alsa-utils-1.0.13.tar.bz2
  37. cd alsa-utils-1.0.13
  38. ./configure &&
  39. make
  40. make install
  41. cd ../blfs-bootscripts-20060910
  42. make install-alsa
  43. cd ../alsa-utils-1.0.13
  44. touch /etc/asound.state &&
  45. alsactl store
  46. cat > /etc/udev/rules.d/40-alsa.rules << "EOF"
  47. # /etc/udev/rules.d/40-alsa.rules
  48. # When a sound device is detected, restore the volume settings
  49. KERNEL=="controlC[0-9]*", ACTION=="add", RUN+="/usr/sbin/alsactl restore %n"
  50. EOF
  51. chmod -v 644 /etc/udev/rules.d/40-alsa.rules
  52. cd /sources
  53. rm -rf alsa-utils-1.0.13
  54. ***********************************
复制代码
  1. 07-KDE
  2. ----------------------------------
  3.   60-conf-txt
  4. ***********************************
  5. cat >> /etc/profile << "EOF"
  6. # 直接将KDE安装目录加入全局变量。需要变动时再行修改。
  7. export KDE_PREFIX=/opt/kde-3.5.6
  8. export PATH=$PATH:/opt/kde-3.5.6/bin
  9. export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/kde-3.5.6/lib/pkgconfig
  10. EOF
  11. cat >> /etc/ld.so.conf << "EOF"
  12. # Begin kde addition to /etc/ld.so.conf
  13. /opt/kde-3.5.6/lib
  14. # End kde addition
  15. EOF
  16. cat >> /etc/man_db.conf << "EOF"
  17. # Begin kde addition to man_db.conf
  18. MANDATORY_MANPATH /opt/kde-3.5.6/man
  19. # End kde addition to man_db.conf
  20. EOF
  21. ln -v -sf kde-3.5.6 /opt/kde
  22. #重登录一次。
  23. init 1 && init 3
  24. ***********************************
  25.   61-aRts
  26. ***********************************
  27. cd /sources
  28. tar xvf /BLFS/arts-1.5.6.tar.bz2
  29. cd arts-1.5.6
  30. ./configure --prefix=$KDE_PREFIX --disable-debug \
  31.     --disable-dependency-tracking &&
  32. make
  33. make install
  34. cd /sources
  35. rm -rf arts-1.5.6
  36. ***********************************
  37.   62-PCRE
  38. ***********************************
  39. cd /sources
  40. tar xvf /BLFS/pcre-6.7.tar.bz2
  41. cd pcre-6.7
  42. ./configure --prefix=/usr --enable-utf8 &&
  43. make
  44. make install &&
  45. install -v -m755 -d /usr/share/doc/pcre-6.7/html &&
  46. install -v -m644 doc/html/* /usr/share/doc/pcre-6.7/html &&
  47. install -v -m644 doc/{Tech.Notes,*.txt} /usr/share/doc/pcre-6.7
  48. mv -v /usr/lib/libpcre.so.* /lib/ &&
  49. ln -v -sf ../../lib/libpcre.so.0 /usr/lib/libpcre.so
  50. cd /sources
  51. rm -rf pcre-6.7
  52. ***********************************
  53.   63-kdelibs-3.5.6
  54. ***********************************
  55. cd /sources
  56. tar xvf /BLFS/kdelibs-3.5.6.tar.bz2
  57. cd kdelibs-3.5.6
  58. ./configure --prefix=$KDE_PREFIX \
  59.             --sysconfdir=/etc/kde \
  60.             --disable-debug \
  61.             --disable-dependency-tracking &&
  62. make
  63. make install
  64. cd /sources
  65. rm -rf kdelibs-3.5.6
  66. ***********************************
  67.   65-Kdebase-3.5.6
  68. ***********************************
  69. cd /sources
  70. tar xvf /BLFS/kdebase-3.5.6.tar.bz2
  71. cd kdebase-3.5.6
  72. ./configure --prefix=$KDE_PREFIX --sysconfdir=/etc/kde \
  73.     --disable-debug --disable-dependency-tracking &&
  74. make
  75. make install
  76. cd /sources
  77. rm -rf kdebase-3.5.6
  78. ***********************************
  79.   66-config_cor-kde-gackages
  80. ***********************************
  81. echo "exec startkde" > ~/.xinitrc
  82. echo "exec dbus-launch --exit-with-session startkde" >> ~/.xinitrc
  83. update-desktop-database
  84. update-desktop-database
  85. startx
  86. ***********************************
复制代码

备份root目录
cp -Rav /root /root_bak
  1. ***********************************
  2. 67-Kdeadmin-3.5.6
  3. ***********************************
  4. cd /sources
  5. tar xvf /BLFS/kdeadmin-3.5.6.tar.bz2
  6. cd kdeadmin-3.5.6
  7. ./configure --prefix=$KDE_PREFIX --disable-debug \
  8.     --disable-dependency-tracking &&
  9. make
  10. make install
  11. cd /sources
  12. rm -rf kdeadmin-3.5.6
  13. ***********************************
  14. 68-Kdenetwork-3.5.6
  15. ***********************************
  16. cd /sources
  17. tar xvf /BLFS/kdenetwork-3.5.6.tar.bz2
  18. cd kdenetwork-3.5.6
  19. ./configure --prefix=$KDE_PREFIX --disable-debug \
  20.     --disable-dependency-tracking &&
  21. make
  22. make install
  23. cd /sources
  24. rm -rf kdenetwork-3.5.6
  25. cd blfs-bootscripts-20060910
  26. make install-lisa
  27. ***********************************
  28. 69-Kdemultimedia-3.5.6
  29. ***********************************
  30. cd /sources
  31. #tar xvf /BLFS/30375-akode-2.0.2.tar.bz2
  32. #cd *akode*
  33. #./configure --prefix=$KDE_PREFIX \
  34. #    --disable-debug --disable-dependency-tracking &&
  35. #make
  36. #make install
  37. #cd ..
  38. tar xvf /BLFS/kdemultimedia-3.5.6.tar.bz2
  39. cd kdemultimedia-3.5.6
  40. ./configure --prefix=$KDE_PREFIX --sysconfdir=/etc/kde \
  41.     --disable-debug --disable-dependency-tracking &&
  42. make
  43. make install
  44. cd /sources
  45. rm -rf kdemultimedia-3.5.6
  46. ***********************************
复制代码
  1.   70-kde-i18n-zh_CN(使用繁体中文的朋友下载相应的软件包)
  2. ***********************************
  3. cd /sources
  4. tar xvf /BLFS/kde-i18n-zh_CN-3.5.6.tar.bz2
  5. cd kde-i18n-zh_CN-3.5.6
  6. ./configure --prefix=$KDE_PREFIX &&
  7. make
  8. make install
  9. cd /sources
  10. ***********************************
复制代码

07-KDE/02-kde-additional-packges
  1. 0705-KdeMultimedia
  2. ************************************
  3. cd /sources
  4. tar xvf /CBLFS/kdemultimedia-3.5.7.tar.bz2
  5. cd kdemultimedia-3.5.7
  6. #patch -Np1 -i /CBLFS/kdemultimedia-3.5.7-libtunepimp_0.5.x-1.patch
  7. ./configure --prefix=$KDE_PREFIX --sysconfdir=/etc/kde \
  8.     --disable-debug --disable-dependency-tracking &&
  9. make
  10. make install
  11. cd /sources
  12. rm -rf kdemultimedia-3.5.7
复制代码

这个时候,如果可以上网,最好是找个Opera浏览器。.tar.bz2或者.tar.gz的那种。这个浏览器的好处是下次打开时可以看到先前未关闭的标签页。很多时候,这样的功能是很管用的。
在线输入法:
原文地址 http://blog.donews.com/windrose/archive/2005/10/08/580555.aspx
  1. [/code]
  2. Linux中屏幕偏移的问题:
  3. [quote]
  4. 0、首先备份/etc/X11/xorg.conf文件
  5. 1、在终端运行xvidtune
  6. 2、鼠标点击Left或Right按钮
  7. 3、点击Test按钮
  8. 4、如果test感觉屏幕显示好了,点击Show按钮,这是在终端会记录下一行,内容如下:
  9. "1024x768"     94.50   1024 1096 1192 1376    768  769  772  808 +hsync +vsync
  10. 把上面这一行记录下来(复制、笔记)。如果效果还是不好,返回第2步。
  11. 5、在/etc/X11/xorg.conf的Section "Monitor"中添加下面一行(当然改成你的第4步记录下来的内容):
  12. Modeline "1024x768"     94.50   1024 1096 1192 1376    768  769  772  808 +hsync +vsync
  13. 这句话建议放到对应的EndSection之前一句。如果已经有这句话,在原来的那一句前面添加#符号注释掉。最好先备份一行xorg.conf,以后如果安装新的NV驱动,就需要,因为NV驱动内部已经修正该偏移问题。
  14. 6、保存xorg.conf;重新启动Xwindow就可以了。
  15. [/quote]
  16. 中文字体
  17. 方法一
  18. (推荐)
  19. 文泉驿
  20. [url]http://wqy.sourceforge.net/cgi-bin/index.cgi[/url]
  21. 开源服务
  22. [文泉驿字体下载]  [url]http://sourceforge.net/project/downloading.php?groupname=wqy&filename=wqy-bitmapfont-ttf-0.7.0-4.tar.gz&use_mirror=nchc[/url]
  23. 找到  wqy-bitmapfont-pkgsrc 这样的字样 ,带 src 字样的就是了。这是 .tar.gz 的包 ..
  24. cd /sources
  25. tar xvf /BLFS/wqy-bitmapfont-bdf-all-cvs20070506.tar.gz
  26. cd wqy-bitmapfont-all
  27. # 查看安装说明
  28. more INSTALL
  29. # 用opera网页浏览器打开解包的文泉驿字体目录下的 INSTALL.zh.gb2312  (注意设置浏览器的编译为 gb2312 )和 INSTALL 。里面安装说明。我的英文太差,所以我只能一半英文,一半中文的照着看。必要时用一下在线翻译。
  30. 方法二
  31. 引用 SlackwareV11的字体美化攻略 [url]http://www.linuxsir.cn/bbs/showthread.php?t=274779[/url]
  32. 这里,在找不到中文字体的情况下,我拷贝了几个windows系统中的字体。
  33. 到/etc/fonts/fonts.conf中找:
  34. <dir>/usr/X11R6/lib/X11/fonts</dir>
  35. 在它之后加入:
  36. <dir>/usr/X11R6/lib/X11/fonts/misc</dir>
  37. 拷贝Windows XP下的simsun.ttc到/usr/share/fonts到/usr/share/fonts/ttf目录:
  38. [code]
  39. mkdir -p /usr/share/fonts/ttf
  40. cp /mnt/c/WINDOWS/Fonts/simsun.ttc /usr/share/fonts/ttf/ -v
复制代码

运行:
  1. 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就可以了。
如果是源码包,需要手工编译。
  1. cd /sources
  2. tar xvf /CBLFS/fcitx-3.4.2.tar.bz2
  3. cd fcotx-3.4.2
  4. ./configure --prefix=/usr
  5. make
  6. make install
  7. mkdir -pv /etc/X11/xinit/xinput.d
  8. cat > /etc/X11/xinit/xinput.d/zh_CN << "EOF"
  9. XIM=fcitx
  10. XIM_PROGRAM=fcitx
  11. GTK_IM_MODULE=fcitx
  12. gnome-im-settings-daemon >/dev/null
  13. EOF
复制代码


安装Mplayer
  1. # cd /CBLFS
  2. # wget -c http://www.mplayerhq.hu/MPlayer/releases/MPlayer-1.0rc1.tar.bz2
  3. # wget -c http://www.mplayerhq.hu/MPlayer/releases/codecs/essential-20061022.tar.bz2
  4. # wget -c http://www.mplayerhq.hu/MPlayer/releases/codecs/all-20061022.tar.bz2
  5. # lynx http://www.mplayerhq.hu/MPlayer/releases/codecs/
  6. # wget -c http://www.mplayerhq.hu/MPlayer/skins/Blue-1.7.tar.bz2
  7. # lynx http://www1.mplayerhq.hu/MPlayer/skins/
  8. # http://www1.mplayerhq.hu/MPlayer/releases/fonts/font-arial-iso-8859-1.tar.bz2
  9. cd /sources
  10. tar xvf /CBLFS/MPlayer-1.0rc1.tar.bz2
  11. cd MPlayer-1.0rc1
  12. # Install Additinal Codecs:
  13. install -v -d -m755 /usr/lib/mplayer/codecs &&
  14. #tar -xvf /CBLFS/essential-20061022.tar.bz2 -C /usr/lib/mplayer/codecs --strip-components=1 &&
  15. tar -jxvpf /CBLFS/all-20061022.tar.bz2 -C /usr/lib/mplayer/codecs  --strip-components=1
  16. chown -v -R root:root /usr/lib/mplayer/codecs
  17. # Install GUI:
  18. install -v -d -m755 /usr/share/mplayer/Skin &&
  19. tar -xvf /CBLFS/Blue-1.7.tar.bz2 -C /usr/share/mplayer/Skin &&
  20. chown -v -R root:root /usr/share/mplayer/Skin/Blue &&
  21. chmod -v 755 /usr/share/mplayer/Skin/Blue{,/icons} &&
  22. ln -sfv Blue /usr/share/mplayer/Skin/default
  23. # Configure and compile the package:
  24. ./configure  --prefix=/usr --confdir=/etc/mplayer   --enable-gui --with-codecsdir=/usr/lib/mplayer/codecs  \
  25.      --with-win32libdir=/usr/lib/mplayer/codecs  --with-reallibdir=/usr/lib/mplayer/codecs \
  26.      --with-xanimlibdir=/usr/lib/mplayer/codecs  --language=zh_CN
  27. make
  28. # Install the package:
  29. make install
  30. # http://www.mplayerhq.hu/design7/dload.html
  31. install -v -m755 -d /usr/share/doc/mplayer-1.0pre7try2 &&
  32. cp -v -R DOCS/*     /usr/share/doc/mplayer-1.0pre7try2
  33. ln -v -s libdha.so.1.0 /usr/lib/libdha.so
  34. install -m644 etc/codecs.conf /etc/mplayer
  35. install -m644 etc/*.conf /etc/mplayer
  36. echo "dev.rtc.max-user-freq=1024" >> /etc/sysctl.conf
  37. # Install the fonts:
  38. tar -xvf /CBLFS/font-arial-iso-8859-1.tar.bz2 -C /usr/share/mplayer/font &&
  39. chown -v -R root:root /usr/share/mplayer/font &&
  40. cd /usr/share/mplayer/font &&
  41. #ln -v -sf font-arial-iso-8859-1/font-arial-FONT_SIZE-iso-8859-1/* .
  42. ln -v -sf font-arial-iso-8859-1/font-arial-14-iso-8859-1/* .
  43. 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





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2007-5-17 09:01:01 | 显示全部楼层
精神可嘉,呵呵。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-5-17 11:37:13 | 显示全部楼层

零起点构建自己的Linux ( 一些遗留问题的解决 )

遇到了一些问题,在论坛上找了一些答案出来:
回复 支持 反对

使用道具 举报

发表于 2007-5-17 12:42:41 | 显示全部楼层
等待继续
回复 支持 反对

使用道具 举报

发表于 2007-5-18 09:48:55 | 显示全部楼层
好帖啊!!   
顶之!
回复 支持 反对

使用道具 举报

发表于 2007-5-18 09:50:46 | 显示全部楼层
没想到 lfs 现在的安装画面这么漂亮?竟还有图片?
以前好像都没有吧
回复 支持 反对

使用道具 举报

发表于 2007-5-18 20:48:02 | 显示全部楼层
又出现了一位狂人   致敬!!
我要把这个帖子打印出来,一步步做。

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

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

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表