我们都知道linux系统具有无比强大的功能,但是有时候功能强大并不一定是我们想要的,有些情况下我们想要的恰恰就是一个简洁、消耗资源少、能运行一些基本的功能和基本指令的系统,这时候就需要我们手动来制作一个精简的linux系统。
如下图所示:我们有一台待安装的主机(主机B)和一台功能完备的主机(主机A),首先把待安装主机的硬盘拆下来放到主机A上,然后在主机A把内核、驱动、进程、库文件等一些系统必备的东西放到空的硬盘上做成系统硬盘,最后把做好的硬盘放到主机B上直接启动就行了。
下面我们在虚拟机上来模拟这个实验:
1、在宿主机上创建一个空的硬盘
2、打开主机A进行硬盘分区
(1)利用fdisk /dev/adb对空的硬盘进行分区,分区大小分别为主分区一(作为引导分区)100M、主分区二(作为根分区)1G(根分区不能太小)和主分区三(作为虚拟分区)500M
(2)对分区做标识
(3)分别对第一第二分区做格式化
(4)新建两个挂载点,把新硬盘的前两个分区分别挂载到两个挂载点上
3、为新硬盘创建grub引导程序引导的第一、第二阶段建
(1)创建grub引导程序引导的第二阶段,如下所示,参数DIR既是指/mnt /dev/adb
如下图所示在boot目录下生成了grub菜单,进入grub目录查看,除了grub.conf的配置文件没有外其他说明文件和描述文件都有,这里需要说明的是配置文件需要我们手动创建。
(2)创建grub引导第一阶段
首先输入grub,然后开始创建
4、拷贝内核
5、拷贝驱动
(1)在家目录下创建一个临时工作空间,在该目录下把主机A的驱动解压缩到该目录
在temp目录下有些比较重要的目录或文件,比如bin(放置库文件)、init(init程序调用的相关信息)。下面我们来查看一下init文件,如图所示,我们要根据实际情况做相应的调整。
(2)把temp目录下的文件重新打包成一个文件,并输送到新硬盘的引导分区下
6、切换到/mnt/boot/grub目录,创建grub.conf文件,文件内容如下
7、在新硬盘的根分区下建设文件系统(下面建设的是必要的目录,可根据实际情况设置哦)
8、拷贝可执行程序和其所依赖的库文件
(1)这里我们先拷贝init的可执行程序和所依赖的库
首先查看可执行文件的具体位置,再进行拷贝
然后进行查看库文件并拷贝
如上图所示,凡是带有/lib目录的都要拷贝
(2)根据上边的方法再分别把bash、ls、cat进行拷贝
9、配置inittab文件
(1)切换到/mnt/sysroot/etc目录下,建个inittab文件。
(2)打开/etc/inittab文件
(3)因为不需要太多的功能,在inittab文件里我们只留下0、6级别和初始化的文件,也就是上图中21、23和29行。
10、在/mnt/sysroot/rc.d目录下配置初始化文件rc.sysinit
11、然后运行多次sync命令,把设置的所有参数同步到要写入的新的磁盘上
12、在虚拟机上添加一个虚拟主机(也就是主机B),并把其中的硬盘卸下,把刚才我们建的那块硬盘添加到这台主机上
13、完成后暂停主机A,启动主机B,进入系统,我们试着去完成添加的几个可执行程序,ls可以完成,关机指令和重启指令却不能完成
(1)查看/mnt/sysroot/etc目录下inittab文件我们就不难发现,要进入0级别的话,依赖于名为rc的脚本,而rc的脚本又需要相应的指令,相应的指令又需要相应的库文件的支持。我们都把这些拷过来的话实在是太麻烦了,那应该怎样做呢,下面我们来做一下讲解。
(2)如下图所示,我们来为关机和重启分别做sysshutdown和sysreboot两个脚本
分别制作关机脚本和重启脚本,并把相应的可执行程序和库文件拷到对应的目录下
把脚本权限改为可执行
(3)进行同步后,暂停主机A,主机B,再进行相应的关机、重启命令就ok了
14、当然了,我们还想要有机器的主机名另外还要具备基本的网络功能,下面就来一一实现
(1)关闭主机B,启动主机A。分别把名为ping、hostonly以及ifconfig的可执行程序和所依赖的库文件拷到相应的目录下
(2)编辑初始化配置文件/mnt/sysroot/etc/rc.d/rc.sysinit
如上图所示,想要让脚本发挥作用,还需要一个名为network的文件,我们把主机A上的文件拷到主机B的硬盘上,然后做改动
(3)同步之后暂停主机A,开启主机B,测试一下
15、要实现网络功能的话首先需要内核的支持,但是内核中只有那些最常见的驱动,而其它的都被做成内核的模块,当然网卡也不例外。
(1)查看网卡参数
(2)查看PCnet的模块
(3)分别查看PCnet模块和mii模块的详细信息,从中可以看到模块的路径
(4)在主机B的硬盘上建一个存放驱动的目录,再把驱动拷进去
(5)加载驱动需要相应工具的支持,这里我们用insmod,在宿主机把相应的可执行程序和库文件拷到新硬盘相应的目录下
(6)为了在初始化的时候引用相应的模块,编辑初始化的文件/mnt/sysroot/etc/rc.d/rc.sysinit
(7)同步之后,暂停主机A并开启主机B,进行验证
至此,一个简易linux系统就制作成功了,当然我们可以根据需要随意添加应用和修改脚本