使用linux内核打造属于自己的linux
首先要了解Linux的开机过程,如图
开机自检(BIOS)这个跟硬件相关,不需要我们做,我们要做的有“MBR引导——GRUB菜单——加载内核(kernel)——运行INIT进程——inittab配置文件——rc.sysinit脚本”,做完后一个非常简单的裸系统linux就成型了,但此时的系统什么功能都没有,如果要使用某些功能,比如ftp服务,vim命令等,需要添加配置文件
制作方法:在原有linux系统(宿主机)下添加一块硬盘,把添加的硬盘做成linux系统,做好后移植到其他地方当做新的linux系统,就可以使用了
1,添加硬盘:
2,分区
按照宿主机的模式分区,共分根,boot,swap三个分区
分区保存后会有如下提示
‘新盘将在重启后才能使用’,除了重启还有另一种方法,使用命令
partprobe /deb/sdb命令完成后就可以直接使用了
3,建立光盘挂载点
[root@localhost ~]# mkdir /mnt/boot(相当于boot)
[root@localhost ~]# mkdir /mnt/sysroot(相当于/)
[root@localhost ~]# mount /dev/sdb1 /mnt/boot/
[root@localhost ~]# mount /dev/sdb2 /mnt/sysroot/
4,构建grub
[root@localhost ~]# grub-install --root-directory=/mnt/ /dev/sdb
编写grub.conf前要把内核和驱动镜像拷入/mnt/boot/下
[root@localhost boot]# cp /boot/vmlinuz-2.6.18-164.el5 ./
[root@localhost boot]# cp /boot/initrd-2.6.18-164.el5.img ./
但是驱动镜像需要更改一下,不然很有可能系统启动不起来
首先创建临时目录
把驱动镜像移动过去,并展开在当前目录下
[root@localhost boot]# mkdir /mnt/boot/tmp
[root@localhost boot]# mv initrd-2.6.18-164.el5.imgtmp/
[root@localhost boot]# zcat tmp/initrd-2.6.18-164.el5.img | cpio -id(不加管道后面的命令会出现乱码,cpio程序可以使其正常显示,-id参数选项意思为如果有目录的话建立相应的目录)
展开后如图
打开init文件并修改
在87行首加个#禁掉此行就OK了
修改完后,删掉原文件initrd-2.6.18-164.el5.img,重新打包
[root@localhost tmp]# find . |cpio -o(表示输入) -H(格式) newc --quiet (静默模式)|gzip -9 >initrd.gz
打包后复制到/mnt/boot/目录下
[root@localhost tmp]# cp initrd.gz /mnt/boot/
最后编辑grub.conf
并修改权限使其可执行
此时已经做到了第四步加载内核,下面移植INIT进程
5,创建跟分区所需要的目录
[root@localhost sysroot]# ldd /sbin/init(查看init依赖于哪些库,并拷贝到硬盘2上)
linux-gate.so.1 => (0x005aa000)
libsepol.so.1 => /lib/libsepol.so.1 (0x006fc000)
libselinux.so.1 => /lib/libselinux.so.1 (0x00854000)
libc.so.6 => /lib/libc.so.6 (0x001c0000)
libdl.so.2 => /lib/libdl.so.2 (0x0065c000)
/lib/ld-linux.so.2 (0x004f0000)
一个一个复制太麻烦,所以就制作一个脚本,针对某个命令会复制所有的库文件
脚本文件如图
在/mnt/sysroot/etc/下编辑inittab配置文件
并修改为可执行文件
查询bash指令的库文件,并复制,使用刚才编写的复制脚本复制
做完后基本已经完成了
同步配置,准备移植新系统
6,下面开始准备启动盘
打开一个新的linux系统,把原有的硬盘删除,挂载新的硬盘(刚才所制作的硬盘)
添加硬盘
添加刚才创建的磁盘文件
然后打开此虚拟机
显示如图说明一个简易的linux已经打造成功
优化:添加开机背景图片(由于新的系统不支持一些命令,所以首先在宿主机上做好图片,然后再复制到新的linux系统中使用)
添加图片,使用xshell上传
[root@localhost ~]# convert -resize 640x480! 1.jpg 1.jpg(忽略图片的原有比例,不然有可能铺满全屏)
[root@localhost ~]# convert 1.jpg -colors 14 -geometry 640x480 splash.xpm(转换图片的像素大小,格式)
[root@localhost ~]# gzip splash.xpm (压缩文件)
[root@localhost ~]# cp splash.xpm.gz /mnt/boot/grub/(复制到新的linux系统中)
应用到配置文件/boot/grub/grub.conf中
效果图如图