Linux From Scratch ING(1)

参考资料: LFS-BOOK-6.3

准备资源:lfslivecd-86-6.3-r2160.iso


: 若引用本文为参考,请先阅读完整的文章,而不要跟进代码执行,运行环境不同,执行方式也不同。且本文是一个整个边学习边构建的过程,出错在所难免,很可能前面执行了一长段错误代码,之后的两句才是正确的。

      本文仅作为LFS制作过程的日志。


chapter 1 : 总介绍

chapter 2: 创建分区和文件系统

chapter 3 : 需要的包和更新

chapter 4 : 创建合适的工作环境

chapter 5 : 介绍在第六章所需要的开发工具链

chapter 6 : 构建完整的LFS系统

chapter 7 : 创建LFS的启动脚本

chapter 8 : 构建内核

chapter 9 : 构建bootloarder


Chapter 1 :

FAQ链接 : http:// www. linuxfromscratch.org/ faq/.


Chapter2 :

创建分区 : fdisk或者cfdisk

采用fdisk指令操作

# fdisk /dev/sda


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

-----------------我是分割线------------------------------------------------

Command (m for help): p

Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14        1230     9775552+  83  Linux LVM

因为在虚拟机上,所以操作就随意一点了…、

-----------------我是分割线------------------------------------------------

Command (m for help): d
Partition number (1-4): 2    //删除/dev/sda2

-----------------我是分割线------------------------------------------------

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

Command (m for help): p

Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14        3916    31350847+   5  Extended

创建一个拓展分区,包含剩余的全部空间

---------------我是分割线-------------------------------------------

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

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

Command (m for help): p
http://write.blog.csdn.net/postedit/8117166
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14        3916    31350847+   5  Extended
/dev/sda5              14        2689    21494938+  83  Linux
/dev/sda6            2690        3916     9855846   83  Linux
在拓展分区中,创建两个逻辑分区:20+GB10GB10GB作为要用来构建LFS的分区。


此处……未考虑若原来的分区转换为两个小的逻辑分区是否对硬盘文件的损坏……!!请勿轻易尝试。

Command (m for help): p
Command (m for help): w

.....

# reboot

呵呵、果然悲剧了…

嗯……还好、是虚拟机……

换个方式来、之前创建的这个虚拟机是直接分配了30GB的硬盘,想到之间用ubuntu那边的虚拟机的时候使用动态创建,会多出一个待挂载使用的盘。

所以重新创建一个动态分配大小,总25GB的RetHat虚拟机,一会再次尝试fdisk直接分配而不删除,若能够创建出新的空间,则继续往下。若不能…、好吧、尝试在宿主机RH上直接搭建LFS~。~!

、它直接分配给/dev/sda2 剩余的全部空间了、将其分区,再次出现相同的无法开机状况…

……

最新的尝试方法 :

创建好虚拟机后,先关闭虚拟机

在设置处应能找到存储设备,通过在存储设备给其添加一个新的硬盘。

进入虚拟机。


# fdisk -l

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14        1305    10377990   8e  Linux LVM

Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdb doesn't contain a valid partition table
已经发现一个没有分区的硬盘,接下来开始分区。

# fdisk /dev/sdb

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

Command (m for help): p

Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1044     8385898+  83  Linux

Command (m for help): w

The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
将其所有空间做成主分区

# mkdir /home/linx/LFS  //创建挂载目录
# mkfs.ext3 /dev/sdb1    //制作文件系统,格式ext3
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
1048576 inodes, 2096474 blocks
104823 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2147483648
64 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 22 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

# mount -t ext3 /dev/sdb1 /home/linx/LFS/    //挂载分区到LFS目录

-----------------我是分割线-------------------------------------------------------

# df -k
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                       7998912   3055648   4530388  41% /
/dev/sda1               101086     12089     83778  13% /boot
tmpfs                   517552         0    517552   0% /dev/shm
/dev/sdb1              8254240    149628   7685320   2% /home/linx/LFS
挂载成功了,同时也看出之前将/dev/sda2(即这里的/dev/mapper/VolGroup00-LogVol00)删除并制作成一个拓展分区+两个逻辑分区错误的端疑

可能的错误原因有二:

1、 分区后文件损坏

2、 分区后没有创建文件系统并挂载


有空再进行深一步的探究。

------------------我是分割线--------------------------------------------------------

# vi /etc/fstab 设置开机自动挂载 /dev/sdb
添加一行

/etc/sdb       /home/linx/LFS(挂载目录)          ext3(文件格式)         defaults       1      2(后面的数字表示开机是否检查)

# reboot 看下成果

# fdisk -l

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14        1305    10377990   8e  Linux LVM

Disk /dev/sdb: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1        1044     8385898+  83  Linux
# df -k
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
                       7998912   3072624   4513412  41% /
/dev/sda1               101086     12089     83778  13% /boot
tmpfs                   517552         0    517552   0% /dev/shm
/dev/sdb1              8254240    149628   7685320   2% /home/linx/LFS

终于ok了。



-----------------我是分割线-------------------------------------------

制作LFS的第一步就算完成了。

经过了解知道,这只是其中一种方法来创建新的硬盘空间,以上这种是基于操作系统下的。

而接下来,描述直接使用镜像光盘来制作LFS

想通过两种途径,双线来制作LFS

-----------------我是分割线-------------------------------------------

我使用的是virtualbox虚拟工具

创建的时候直接选择linux系统

而下面的版本选择other linux

创建好后直接摘入我已经下载好的lfslivecd-x86-6.3-r2160.iso文件。

now begin:

选择语言地区等信息……

进入系统

呵呵、不能拷贝了、那只打指令上来好了

# fdisk -l

有一个硬盘没有分区/dev/hda

#fdisk /dev/hda

然后和上面方法一样创建一个主分区就好。

很容易就创建好了。


Note :

有些系统使用的是定制特性的文件系统创建工具E2fsprogs,这可能使得LFS-install E2fsprogsE2fsprogs的时候出错,出错提示类似于“unsupported filesystem features, upgrade your e2fsprogs”...所以得检查自己系统上的E2fsprogs是否是定制版本的。

使用如下指令 :

debugfs -R /dev/XXX(你创建的分区

若出现了has_ journal, dir_ index, filetype, large_ file,resize_ inode, sparse_ super or needs_ recovery字样,说明你的系统是定制的增强版

请按下面的方法来重新编译E2fsprogs库,然后重新创建分区。

cd /tmp
tar -xjvf /path/to/sources/e2fsprogs-1.40.2.tar.bz2
cd e2fsprogs-1.40.2
mkdir -v build
cd build
../configure
make #note that we intentionally don't 'make install' here!
./misc/mke2fs -jv /dev/
cd /tmp
rm -rfv e2fsprogs-1.40.2


悲剧了、我的RH宿主系统和LFS安装光盘镜像的系统都是安装了定制的增强版。


好吧、一个一个来。

----------------------我是分割线--------------------------------

LFS安装镜像的系统:

……

执行./misc/mke2fs  -jv  /dev/hda1时会提示已挂载,故umount它再次执行

……

最后创建的分区

# debugfs -R feature /dev/hda1

显示文件特征为:has_hournal resize_inode dir_index filetype sparse_super large_file



若创建的分区是swap分区,那么则不用格式化它,直接用

mkswap /dev/hda1 就好


--------------------------我是分割线-------------------------------

创建分区挂载点

export LFS=/mnt/lfs

mkdir -pv $LFS
mount -v -t ext3 /dev/ $LFS

若为多分区则参照下面的挂载方式

……



至此,为LFS构建物理构架条件完成。

准备进入第三章的LFS构建。


你可能感兴趣的:(Linux From Scratch ING(1))