Chinaunix首页 | 论坛 | 博客
  • 博客访问: 201370
  • 博文数量: 62
  • 博客积分: 725
  • 博客等级: 上士
  • 技术积分: 746
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-09 17:07
个人简介

exyz

文章分类

全部博文(62)

分类: LINUX

2013-07-16 10:32:35


此处        确保 LFS 系统可以启动


  1. 目录表
  2. ====================
  3. 1.创建 fstab 文件
  4. 2.Linux-3.5.2(构造新的内核)
  5. 3.安装 GRUB 引导加载器
  6.   

  7.  内容
  8. ====================
  9.   
  10.  
  11. ===================================
  12. 1.创建 fstab 文件
  13. ===================================
  14. /etc/fstab 文件被一些程序使用来决定默认用哪个文件系统来挂载,以哪种顺序,同时检查 (完整性错误)先挂载哪个文件系统先。
  15. 创建一个这样的文件系统表:
  16. -----------------------------------------------------------------------
  17. cat > /etc/fstab << "EOF"
  18. # Begin /etc/fstab

  19. # file system mount-point type options dump fsck
  20. # order

  21. /dev/<xxx> / <fff> defaults 1 1
  22. /dev/<yyy> swap swap pri=1 0 0
  23. proc /proc proc nosuid,noexec,nodev 0 0
  24. sysfs /sys sysfs nosuid,noexec,nodev 0 0
  25. devpts /dev/pts devpts gid=5,mode=620 0 0
  26. tmpfs /run tmpfs defaults 0 0
  27. devtmpfs /dev devtmpfs mode=0755,nosuid 0 0

  28. # End /etc/fstab
  29. EOF
  30. -----------------------------------------------------------------------
  31.      <xxx>, <yyy>,<fff> 使用系统中合适的值替换,比如 hda2,hda5,和 ext3.关于这个文件中的六个值,使用 man 5 fstab 查看。
  32.  
  33. 我的内容:
  34. +++++++++++++++++++++++++++++++++++++
  35. cat > /etc/fstab << "EOF"
  36. # Begin /etc/fstab

  37. # file system mount-point type options dump fsck
  38. # order

  39. /dev/sdb3 / ext3 defaults 1 1
  40. /dev/sdb1 /boot ext3 defaults 1 2
  41. /dev/sdb2 swap swap pri=1 0 0
  42. proc /proc proc nosuid,noexec,nodev 0 0
  43. sysfs /sys sysfs nosuid,noexec,nodev 0 0
  44. devpts /dev/pts devpts gid=5,mode=620 0 0
  45. tmpfs /run tmpfs defaults 0 0
  46. devtmpfs /dev devtmpfs mode=0755,nosuid 0 0

  47. # End /etc/fstab
  48. EOF
  49.  +++++++++++++++++++++++++++++++++++++

  50. MS-DOS 或者 Windows 源文件系统 (比如:vfat,ntfs,smbfs,cifs,iso9660,udf) 需要 “iocharset”挂载选项为了能够正确的解释在文件名中的非 ASCII 字符。
  51. 这个选项值应该与所在区域的字符集保持一致,这种方式内核才能支持它为它做调整。
  52. 如果相关的字符集定义了 (可以在 File systems -> Native Language Support 中找到),编译进内核或者作为一个模块的话会很有效果。
  53. vfat 和 smbfs 文件系统也需要“codepage” 选项。它应该设置为你所处国家的在MS-DOS 的代码页。
  54. 比如,为挂载一个 USB 闪存驱动器,一个 ru_RU.KOI8-R 用户需要在 /etc/fstab 文件找你干它的挂载行选项:
  55. noauto,user,quiet,showexec,iocharset=koi8r,codepage=866

  56. 为 ru_RU.UTF-8 用户相应的选项片段是:
  57. noauto,user,quiet,showexec,iocharset=utf8,codepage=866

  58. 注意:在后面的情况下,内会发出这样的消息:
  59. FAT: utf8 is not a recommended IO charset for FAT filesystems,
  60.     filesystem will be case
  61.     这个否定的建议应该被忽略掉,因为所有“iocharset”选项的其它值会导致在UTF-8 的语言环境中显示错误的文件名。

  62. 在内核配置的时候可以为一些文件系统指定默认的 codepage 和 iocharset 值。
  63. 相关的参数命名是“默认 NLS 选项”(CONFIG_NLS_DEFAULT) ,“默认 Remote NLS 选项” (CONFIG_SMB_NLS_DEFAULT), “默认FAT 的 codepage” (CONFIG_FAT_DEFAULT_CODEPAGE),和 “默认 FAT 的 iocharset” (CONFIG_FAT_DEFAULT_IOCHARSET)
  64. 在内核编译的时候不能为这些 ntfs 文件系统指定这些设置。

  65. 它有可能使一些ext3文件系统硬盘类型在电源故障时可靠。实现这个,增加 barrier=1 挂载点到 /etc/fstab 中的相应的条目。
  66. 为检查这个磁盘驱动器是否支持这个选项,在适用的磁盘驱动器上运行 hdparm 。比如,如果:
  67. hdparm -I /dev/sda | grep NCQ
  68. 返回空的输出,那么表示这个选项是支持的。

  69. 注意:基于 LVM(逻辑物理卷管理)分区不能使用 barrier 选项。



  70. ============================================
  71. 2. Linux-3.5.2(构造新的内核)
  72. ============================================


  73. 步骤有:配置,编译,和安装。阅读内核源码树中的 README 文件查找这里配置内核的合适的方法。

  74. tar xvf linux-3.5.2.tar.xz
  75. cd linux-3.5.2
  76.     /* 准备编译: */
  77. make mrproper
  78.     ——这确保内核树是完全的干净的。内核团队推荐在内核编译的之前使用这个命令。不要依赖在解包之后源码树会被清除。

  79. 通过驱动菜单界面配置内核。内核配置的常规信息在 http://www.linuxfromscratch.org/hints/downloads/files/kernel-configuration.txt 中查看。
  80. BLFS 有一些在 LFS 之外的特殊的内核配置需求在 http://www.linuxfromscratch.org/hints/downloads/files/kernel-configuration.txt。

  81. 注意:由于最近 udev 中的改变,确保选择如下:
  82.     Device Drivers --->
  83.           Generic Driver Options --->
  84.                 Maintain a devtmpfs filesystem to mount at /dev

  85. make LANG=<host_LANG_value> LC_ALL= menuconfig
  86.     /* <host_LANG_value> 使用主机中环境变量 $LANG 的值替换!如果没有设置的话,使用 $LC_ALL 或 $LC_CTYPE 替代。我设置了 en_US */
  87. make LANG=en_US LC_ALL= menuconfig
  88. 此外,make oldconfig 也许在一些情况下更适合使用。查看 README 文件找更多信息。

  89. 如果需要的话,可以跳过内核配置而复制宿主机的内核配置文件 .config (如果这个文件存在的话)到 linux-3.5.2 解压目录。但这个不推荐。
  90.     /* 编译内核镜像和模块 */
  91. make
  92. 如果使用内核模块,可能需要在 /etc/modprobe.d 中的模块配置。关于内核配置的信息在 http://www.linuxfromscratch.org/lfs/view/7.2/chapter07/udev.html
  93. 内核文档在 linux-3.5.2/Documentation 目录中。也许,modprobe.conf(5) 也很有效。

  94.     /* 如果使用它们的内核配置,安装模块: */
  95. make mpdules_install

  96. 编译完成之后安装,需要将一些文件复制到 root 目录中。
  97. 内核镜像的路径会由于使用的平台不同而不同。下面的文件名为适合口味可以改变,但是 vmlinuz 的文件名前缀需要保留为了兼容自动启动设置过程。
  98.     /* 下面的命令假定为 x86 架构:*/
  99. cp -v arch/x86/boot/bzImage /boot/vmlinuz-3.5.2-lfs-7.2

  100. System.map 是内核的一个符号链接。它映射了内核 API中每个函数的函数入口点,就像运行着的内核中的内核数据机构的地址。
  101.     /* 它用作调查内核问题的一个资源。使用下面的命令安装这些映射文件:*/
  102. cp -v System.map /boot/System.map-3.5.2

  103. 由 make menuconfig 产生的 .config 内核配置文件含刚刚编译出的所有内核配置选项。

  104.     /* 建议保留这个文件做以后的参考: */
  105. cp -v .config /boot/config-3.5.2

  106.     /* 安装Linux 内核文档: */
  107. install -d /usr/share/doc/linux-3.5.2
  108. cp -r Documentation/* /usr/share/doc/linux-3.5.2

  109. 需要特别注意的是内核源码目录中的文件是不被 root 所拥有的。
  110. 无论包是否使用 root 身份(比如我们是在 chroot 环境中)解压的,文件拥有在安装包机子上的任何用户和组IDs。这对其它要安装的包不是问题,因为源码树在安装之后会被移除。
  111. 然后,Linux 源码树需要保持一段时间。因此,任何安装包的用户ID都有机会非配给机子上的其它用户。这个用户就有对内核源码的写权限。

  112. 如果内核树将继续保留,在 linux-3.5.2 目录中使用 chown -R 0:0 确保所有的文件为 root 用户所有。

  113. 警告:一些内核文档推荐创建一个 /usr/src/linux 符号链接指向内核源码目录。
  114.     这是在 2.6 系列以前的内核指定的,在 LFS 系统中不要创建,因为在基本的 LFS 系统完成之后它会对只构造一次的包引起问题。

  115. 警告:在系统 include 目录中的头文件应该一直是Glibc 编译的东西,也就是说,这是Linux 内核源码包干净的头文件。
  116.     

  117. 如果 USB 驱动器 (ehci_hcd, ohci_hcd 和 uhci_hcd)已经作为模块编译的话,需要创建 /etc/modprobe.d/usb.conf 文件,它们会以正确的顺序载入,ehci_hcd 需要在 ohci_hcd 和 uhci_hcd 之前载入以避免启动时的输出有警告消息。

  118. 创建一个新的 /etc/modprobe.d/usb.conf 文件:
  119. install -v -m755 -d /etc/modprobe.d
  120.  +++++++++++++++++++++++++++++++++++++
  121. cat > /etc/modprobe.d/usb.conf << "EOF"
  122. # Begin /etc/modprobe.d/usb.conf

  123. install ohci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i ohci_hcd ; true
  124. install uhci_hcd /sbin/modprobe ehci_hcd ; /sbin/modprobe -i uhci_hcd ; true

  125. # End /etc/modprobe.d/usb.conf
  126. EOF
  127.  +++++++++++++++++++++++++++++++++++++

  128. Linux 的内容
  129. 已安装的文件:config-3.5.2, vmlinux-3.5.2-lfs-7.2-3.5.2, 和 System.map-3.5.2
  130. 已安装的目录:/lib/modules, /usr/share/doc/linux-3.5.2
  131. 简短描述:
  132. config-3.5.2 含内核配置选项
  133. vmlinux-3.5.2-lfs-7.2 Linux 原生系统。当机子开启的时候,内核是操作系统首先载入的第一部分。
  134.         它检车和初始化机子的硬件组件,然后使这些组件作为文件树的软件同时将单个CPU转换成多任务的机器能够在看似相同的时间内运行多个程序。
  135. System.map-3.5.2 一串地址和符号链接;它对内核中所有函数和数据结构的切入点和地址进行映射


  136. 3.安装 GRUB 引导加载器

  137. 3,1    GRUB配置不正确会导致系统不能够从可移动设备如CD-ROM 启动。可以通过修改当前的引导加载器,比如Grub-Legacy, GRUB2, 或 LILO.
  138. 确保紧急引导设备能够在系统无法使用(无法启动)时拯救机子。
  139. 确保下面的创建一个可修复系统的设备过程能够工作,你需要提前跳到 BLFS 安装 从 http://www.linuxfromscratch.org/blfs/view/svn/multimedia/libisoburn.html 中 libisoburn 安装 xorriso 。
  140. cd /tmp &&
  141. grub-mkrescue --output=grub-img.iso &&
  142. xorriso -as cdrecord -v dev=/dev/cdrw blank=as_needed grub-img.iso

  143. 3,2    GRUB 命名约定
  144. GRUB有为驱动器和分区命令的结构 (hdn,m) ,n 是驱动器的编号,m 是分区的编码。
  145. 驱动器的号码从 0 开始,分区的号码从1开始为常规的分区,5 作为扩展分区,这与之前grub版本都是从 0 开始命名是不一样的。
  146. 比如,对于GRUB 分区 sda1 是 (hd0,1) , sdb3 是 (hd1,3) 。对于 Linux,GRUB 不认为 CD-ROM 驱动器是一个硬盘驱动器。
  147. 比如,如果在 hdb 上使用一个CD,在hdc 上使用第二个磁盘驱动器,第二个磁盘驱动器还是 (hd1).

  148. 可以用下面的命令决定GRUB 对磁盘驱动的命名:
  149. grub-mkdevicemap --device-map=device.map
  150. cat device.map

  151. 3,3    配置设置
  152. GRUB是通过将数据写入到第一块的硬盘的物理磁道上。这部分不是任何文件系统的一部分。程序访问GRUB引导分区模块。默认位置在 /boot/grub/ .

  153. 引导分区的位置是用户影响的选择,该选择会影响配置。一个建议是使用一个独立的分区( 建议100MB大小 ) 仅仅作为引导信息。
  154. 这种构造的方式,无论是 LFS 还是 分发系统都能过使用相同的引导文件,都能成为可引导的系统。
  155. 如果这样,需要挂载这个分区,移动当前所有在 /boot 目录(比如之前构造的linux 内核)中的文件到这个新的分区中。
  156. 然后需要将 /boot 分区卸载再重新挂载。如果真这样做了,确保更新 /etc/fstab .

  157. 使用当前的lfs 分区也可以工作,但是配置多系统有点麻烦。

  158. 使用上面的信息,为 根分区决定适当的标识 (或者引导分区,如果它使用了单独的分区的话)。下面的例子中假设根分区(或者独立的引导分区)是 sda2 .
  159. 安装GRUB 文件到 /boot/grub 然后设置引导轨道:
  160. /* 警告:下面的命令会重写当前引导加载器。如果这个不需要的话,不要运行该命令,比如使用了第三方的引导管理器来管理比如 MRB 。*/
  161. grub-install /dev/sda

  162. 3,4    创建配置文件


  163. 生成 /boot/grub/grub.cfg 文件:
  164. ---------------------------------------
  165. cat > /boot/grub/grub.cfg << "EOF"
  166. # Begin /boot/grub/grub.cfg
  167. set default=0
  168. set timeout=5

  169. insmod ext2
  170. set root=(hd0,2)

  171. menuentry "GNU/Linux, Linux 3.5.2-lfs-7.2" {
  172.         linux /boot/vmlinuz-3.5.2-lfs-7.2 root=/dev/sda2 ro
  173. }
  174. EOF
  175. ---------------------------------------
  176. 从GRUB的视角,使用的内核文件是相对于所用的分区。如果你使用一个独立的 /boot 分区,从上面的 linux 行移除 /boot 。同时需要改变 set root 指向到 boot 分区。
  177. GRUB是一个强大的程序,它对于各种各样的设备、操作系统、和分区类型 能提供很多的引导选项。
  178. 也有许多自定义的选项比如图形闪屏,播放声音,鼠标输入,等。这部分的细节超出了这部分的介绍范围。

  179. 注意:有个命令 ,grub-mkconfig ,能够自动写配置文件。它会使用在/etc/grub.d/ 中的脚本可能会摧毁自己定义的选项。
  180. 这些脚本最初的设计是为了非源分布,这对 LFS 是不推荐的。如果安装了一个商业版本的 Linux,那么这个程序很可能会运行。
  181. so,确保备份好 grub.cfg

  182. 使用的命令如下:
  183. grub-install /dev/sdb
  184.   +++++++++++++++++++++++++++++++++++++
  185. cat > /boot/grub/grub.cfg << "EOF"
  186. # Begin /boot/grub/grub.cfg
  187. set default=0
  188. set timeout=5

  189. insmod ext2
  190. set root=(hd1,1)

  191. menuentry "GNU/Linux, Linux 3.5.2-lfs-7.2" {
  192.       
  193. }
  194. EOF
  195.  +++++++++++++++++++++++++++++++++++++

  196. echo 7.2 > /etc/lfs-release
    cat > /etc/lsb-release << "EOF"
    DISTRIB_ID="Linux From Scratch"
    DISTRIB_RELEASE="7.2"
    DISTRIB_CODENAME=""
    DISTRIB_DESCRIPTION="Linux From Scratch"
    EOF

  197. logout
  198. umount -v $LFS/dev/pts
  199. umount -v $LFS/dev/shm
  200. umount -v $LFS/dev
  201. umount -v $LFS/proc
  202. umount -v $LFS/sys
  203. umount -v $LFS/boot
  204. umount -v $LFS
  205. shutdown -r now


阅读(1537) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~