在vmware中以redhat系统为基础构建小型linux
在做这个小玩意之前,我们一起去看下这样一篇文章: Linux 操作系统启动流程以及trouble shooting。以及一篇比较易懂的文章:剖析Linux系统的启动过程。
1、 准备磁盘。
a) 关闭或者挂起vmware下的redhat系统在原有redhat系统上创建一个新的磁 盘,为了方便以后的使用,对与这个磁盘的存放方式我们采用单独的文件,存放到一个容易找到的地方比如在D:\vm\SingleDisk 大小: 10G
b) 启动vmware下的redhat系统。在此系统下对新添加的磁盘进行操作:
i. 在命令行下输入{fdisk -l}来查看磁盘信息,我们会看到多出一块大小为 10G 左右的硬盘。
ii. 为这个硬盘(sdb)添加第一个分区,不必太大, 100M 足以。这里我们使用传统的配置方式:1:fdisk /dev/sdb 你会看到这样的一句Command (m for help): 输入m,在出现的列表里面 n:add a new partition 表示添加一个新的分区,我们输入n之后会出现e extended (表示扩展分区); p primary partition (1-4)(表示主分区),其中(1-4)是主分区的分区号。为什么是1-4呢?因为在每个磁盘下最多能创建4个主分区。这个问题在这里不做深究。我们输入p ,接下来出现的是分区号的选择Partition number (1-4): 我们输入阿拉伯数字1,表示创建一个分区号为1的主分区。此时按下回车键,表示采用default value
而后输入 + 100M ,按下enter键。最后输入w (表示写入write)
iii. #partprobe à磁盘探测,不运行这个命令,在接下来,对新建的分区进行格式化#mkfs –t ext3/dev/sda2 的时候,你会发现 出现了这样的一句---Could not stat /dev/sda2 ---nosuch file or directory
iv. 接下来我们要对新建的分区进行格式化。采用命令mkfs -t ext3 /dev/sdb1 :mkfs(make file system),-t(type), ext3(这个是系统的文件类型), /dev/sdb1(我们在sdb上创建的第一个分区)。
2,、安装grub,并配置/boot/grub/grub.conf文件。
Grub是grub是GRand Unified Bootloader的缩写
它可以载入操作系统的内核和初始化操作系统
我们知道linux对硬件的管理是以文件的形式进行的,所以在grub的安装之前,我们还要进行磁盘挂载。否则grub是没办法安装到硬盘的第一个分区(sdb1)上去的我们执行:
#mkdir /mnt/boot
#mount /dev/sdb1 /mnt/boot
#grub-install --root-directory=/mnt /dev/sdb1
上述三条命令执行完毕后,我们cd(change directory)到/mnt/boot/目录下,然后执行ls(list),这时我们可以看到lost+found目录和grub目录。lost+found目录的出现表示我们建立的分区是正常的,grub目录的出现表示我们的grub安装是正常的。
我们在/mnt/boot/grub/目录下创建grub.conf文件
#vim grub.conf
default=0 à这个跟title相对应,title可以有多个,0表示第一个title
timeout=5 à超时时间,有多个title时给用户的选择时间
title MyLinux
root (hd0,0) à 根,表示grub所使用的根即将hd0,0设置访问系统启动文件的起始点
kernel /vmlinuz ro root=/dev/sda2 à指定内核文件和系统根目录。为什么能够直接访问/vmlinz文件,在文章开头我们说过grub的作用是载入操作系统的内核并初始化操作系统,所有我们有理由相信grub是可以直接 读取硬盘分区的
initrd /initrd.gz àLinux® 初始 RAM 磁盘(initrd)是在系统引导过程中挂载的一个临时根文件系统,用来支持两阶段的引导过程。initrd 文件中包含了各种可执行程序和驱动程序, 它们可以用来挂载实际的根文件系统,然后再将这个initrd RAM 磁盘卸载,并释放内存。如果你想对initrd文件有更进一步的了解请参看IBM对initrd文件的解释
#sync à同步磁盘数据
#cd /boot/ à切换到redhat系统的/boot目录下并察看目录下的内容 #ll –ls
一、复制内核文件到/mnt/boot目录下,重命名为vmlinz
#cp /boot/vmlinuz- 2.6.18 -164.el5 ./vmlinz
二、复制initrd文件到/mnt/boot目录下。
在使用这个文件之前,我们还需要对其做些小的修改
#cp initrd- 2.6.18 -164.el5.img /tmp à-2.6.18-164.el5这些跟版本号有关,我们可以不保留.
#cd /tmp
#mv initrd- 2.6.18 -164.el5.img initrd-2.6.18-164.el5.img.gz
#gzip -d initrd- 2.6.18 -164.el5.img.gz
#mkdir linux
#cp initrd- 2.6.18 -164.el5.img linux/
#cd linux
#cpio -id < initrd- 2.6.18 -164.el5.img à“-i”表示从哪里读入“<”表示输入重定向
#vim init
将倒数第7行改为
#mkrootdev –t ext3 –o defaults ,ro /dev/sda2 à这里出现了sda2,我们还没有建立这个分区
保存退出
#rm initrd- 2.6.18 -164.el5.img
在/tmp/linux目录下进行封装:
#find . | cpio –o –H newc –quiet | gzip -9 > /mnt/boot/initrd.gz à找到/tmp/linux目录下所有的文件,用cpio进行打包后进行gzip 然后输出重定向为/mnt/boot目录下的initrd.gz文件。
现在我们创建第二个分区并将其挂载到/mnt/sysroot目录
#echo '
>n
>P
>2
>
>+ 512M
>w ' | fdisk /dev/sdb &> /dev/null
#partprobe à磁盘探测
#mkfs –t ext3 /dev/sdb2 à对sdb2进行格式化
#mkdir /mnt/sysroot à在/mnt目录下创建sysroot目录
#mount /dev/sdb2 /mnt/sysroot à将/dev/sdb2 挂载到目录/mnt/sysroot目录下
接下来我们对系统运行所必需的文件进行简单的配置:
#cd /mnt/sysroot à我们切换到/mnt下的sysroot目录下进行下面将要进行的操作!
#cp /sbin/init sbin/ àinit的运行需要inittab所以我们在/mnt/sysroot下mkdir etc
#mkdir etc然后创建inittab文件
#vim etc/inittab à这是在/mnt/sysroot 目录下进行的
添加如下内容:
id:3initdefault:
si::susinit:/etc/rc.d/rc.sysinit
保存退出
在这里我们看到了一个PATH :/etc/rc.d/rc.sysinit 在这里我们从名称上对rc.sysinit进行解读rc à run command ; sysinit à系统初始化 所以我们可以得到的信息是,这可能是一个系统初始化脚本,他的确是一个system initialize run command简称rc.sysinit。
我们的小系统还没有这个脚本,所以我们要自己制作一个。
制作/etc/rc.d/rc.sysinit脚本
#mkdir etc/rc.d
vim etc/rc.d/rc.sysinit
添加如下内容:
#!bin/bash
echo –e “\tMyLinux” 如果系统可以成功启动,你可以看到MyLinux这几个字
/bin/bash
保存退出!
#chmod +x etc/rc.d/rc.sysinit à添加执行权限
因为系统内核是没有bash的执行条件的,所以我们要自己建立bash的运行环境。
复制/bin/bash到/mnt/sysroot目录下
#mkdir bin
#cp /bin/bash bin/
#ldd /bin/bash à查看bash程序运行所需要的库文件
#mkdir lib à同样也是/mnt/sysroot/目录下的操作,lib:library的简称
#cp /lib/libtermcap.so.2 lib/
#cp /lib/libdl.so.2 lib/
#cp /lib/libc.so.6 lib/
#cp /lib/ld-linux.so.2 lib/
#ldd /sbin/init à察看init运行所要的库文件
#cp /lib/libsepol.so.1 lib/
#cp /lib/libselinux.so.1 lib/
到此为止,我们的准备工作已经完成了,下面我们在虚拟机上新建一个系统,需要注意的地方是
1、install from 我们选择最后那个,I will install the operating system later
2、内存的选择。不要太大, 512M 吧
3、磁盘的选择 Use an existing virtual disk 接下来就是选择开始时创建的第二块硬盘,我们的位于D:\vm\SingleDisk目录下
注意:
在你启动新建系统前,需要挂起或者关闭宿主机,也就是前面我们操作的那台机器,因为一个正在被使用的硬盘是无法再另一个系统下被使用的。
附加:
#grub-md5-crypt
创建md5加密的密码 当你需要加密的时候用的着的。