在时间的工作过程中,基于实际的工作环境,我们一个功能比较少的,简易的linux系统。

出于这样的考虑我们来打造一个简易的linux系统

首先了解linux的启动过程

1.加载bios的硬件信息以及进行自我检测  并根据设置取得第一个启动的设备

2.若以硬盘方式引导  读取并执行引导扇区 MBR(MBR包括三个部分, 第一boot loder 实际上是引导程序的第一段  linux引导程序有grublilo  由于grub菜单比较大 分为两部分 所以将grub菜单的一部分写在512字节之中  占446B  64B分区表  几个分区 起始柱面结束柱面 剩下的就是标示码)

3.加载grub(引导程序)启动菜单(/\)

4.+加载内核(以只读方式进行挂载)

5.挂载根目录系统  启动init进程(所有进程的鼻祖)

6.读取/etc/inittab配置文件

7.执行/etc/rc.d/rc.sysint脚本

8.根据/etc/initab文件下的启动级别执行/etc/rc.d/rc下的脚本

9.执行/etc/rc.d/rc.local (开机脚本  期望开机自动执行的指令可以放在这个脚本里)

9.执行/etc/rc.d/rc.local (开机脚本  期望开机自动执行的指令可以放在这个脚本里)

打造一个简易的linux需要的东西:A.内核B.常用的驱动C.Inittab文件D.常用的指令E.库文件F.简单的应用

实验环境:一台宿主机  一个空白硬盘  

第一步:对新的硬盘进行分区、格式化等相关操作

A、对新的硬盘进行分区

[root@localhost ~]# fdisk  /dev/sdb

181051592.png

B、对新硬盘的分区进行格式化操作

[root@localhost ~]# mkfs  -t ext3 /dev/sdb1

[root@localhost ~]# mkfs  -t ext3 /dev/sdb2

181124261.png

181251235.png

C、建立挂载点将第二块分区挂载上

[root@localhost ~]# mkdir  /mnt/root

[root@localhost ~]# mkdir  /mnt/sysroot

[root@localhost ~]# mount  /dev/sdb1  /mnt/root  #新硬盘的引导分区

[root@localhost ~]# mount  /dev/sdb2  /mnt/sysroot#新硬盘的根分区

181336514.png

181402616.png

181424917.png

第二步:在第二块硬盘的引导分区建立grub引导菜单

A、建立grub引导菜单

[root@localhost ~]# grub-install  --root-directory=/mnt/   /dev/sdb#--root-directory #会试图在致命的目录下找到boot目录,在boot目录建grub

181438177.png

[root@localhost ~]# cd /mnt/boot

181454830.png

[root@localhost boot]# cd  grub

181630434.png

B、Grub引导菜单已经建立  建立MBR

[root@localhost grub]# grub

181647870.png

181718436.png

C、内核和驱动的操作

内核的拷贝:

[root@localhost grub]# cp  /boot/vmlinuz-2.6.18-164.el5   /mnt/boot/

驱动的编辑:

[root@localhost ~]# zcat  /boot/initrd-2.6.18-164.el5.img | cpio -id

#查看旧的驱动并解压缩

181734140.png

重新打包驱动文件:

[root@localhost abc]# find . |cpio -o -H newc --quiet |gzip -9 -n >/mnt/boot/initrd.gz

D、编辑grub.conf

[root@localhost boot]# vim  /mnt/boot/grub/grub.conf

181738309.png

第三步:init进程的阶段

A.首先建立一些需要的文件夹

/mnt/sysroot下边建立和宿主机根目录下相同的文件夹

181759751.png

[root@localhost sysroot]# mkdir  usr/bin

[root@localhost sysroot]# mkdir  usr/sbin

[root@localhost sysroot]# mkdir  etc/rc.d

181818199.png

B.将宿主机下的init拷贝到新硬盘相对应的文件夹下以及相应一些命令的拷贝

[root@localhost sysroot]# cp /sbin/init  /mnt/sysroot/sbin/

由于手动拷贝库文件是很麻烦的  所以使用脚本拷贝  编辑一个脚本

#!/bin/bash

 while [ true ];do

 read  -p "A  COMMAND "  COMMAND

 COMMANDSTRING=`which $COMMAND`

 cp  -f  $COMMANDSTRING  /mnt/sysroot$COMMANDSTRING

 /usr/bin/ldd $COMMANDSTRING > /root/1.txt

     while  read line ; do

   if [  grep /lib $line &>/dev/null ];then

  LIBSTRING=`echo $i |awk '{print $(( NF -1 ))}'`

 #LINBANME=${LIBSTRING##*/}

 #LIBPATH=${LIBSTRING%/*}

 /bin/cp  -f  $LIBSTRING  /mnt/sysroot$LIBSTRING

  fi

done </root/1.txt

done

181821373.png

运行脚本拷贝一些相应的指令

C创建inittab

[root@localhost ~]# cd  /mnt/sysroot/etc

182907314.png

[root@localhost etc]# vim  inittab

182930748.png

根据inittab知道系统在进入任何级别都需要执行/etc/rc.d/rc.sysinit

建立rc.sysinit

[root@localhost etc]# vim rc.d/rc.sysinit

182922398.png

[root@localhost rc.d]# chmod  a+x rc.sysinit

第四步、测试:在另外一台虚拟上测试

181828379.png

181837603.png

181844907.png