一,什么是系统裁剪?
个人理解是在一个完整的Linux系统功能上,进行一些功能的删除操作。适合自己的需求,够用即可!
二,实验环境介绍
vmware workstatin 10,CentOS6.5,64bit
三,具体操作步骤
1,用VMWare10,安装CentOS6.5,64bit系统。(不了解可以google一下,^_^)
2,安装完系统后,给系统增加一块20G的硬盘,新建2个硬盘分区,并进进行格式化,如下图
3,在根分区,新建目录mylinux,及子目录boot,sysroot,如下图命令:
4,分别挂载硬盘分区,/dev/sdc1,/dev/sdc2,至目录/mylinux/boot,/mylinux/sysroot,如下图
5,安装grub引导程序,如下图
6,复制内核文件及初始化文件系统文件到目录/mylinux/boot,如下图:
7,在目录/mylinux/boot/grub中创建文件grub.conf,并输入如下内容,设置系统的引导路径和启动软件等信息:
8,复制常用的命令,引导系统时使用,这里要用一个shell脚本,名称为:cmdCopy.sh,目的是:当你需要复制命令时,相对应的命令的库文件也会复制到相应的库文件目录中,脚本内容如下:
#!/bin/bash # #定义目标目录 target=/mylinux/sysroot #判断是否有此输入的命令,查看此命令的绝对路径,不包含昵称所定义的同名命令 clearCmd() { if which $cmd &> /dev/null; then cmdPath=`which --skip-alias $cmd` else echo "No such command" return 5 fi } #复制输入的命令到目标目录 cmdCopy() { cmdDir=`dirname $1` [ -d ${target}${cmdDir} ] || mkdir -p ${target}${cmdDir} [ -f ${target}${1} ] || cp $1 ${target}${cmdDir} } #复制输入的命令所依赖的库文件到目标目录 libCopy() { for lib in `ldd $1 | grep -o "/[^[:space:]]\{1,\}"`; do libDir=`dirname $lib` [ -d ${target}${libDir} ] || mkdir -p ${target}${libDir} [ -f ${target}${lib} ] || cp $lib ${target}${libDir} done } #判断输入命令的有效性 while true; do read -p "Enter a command: " cmd if [ "$cmd" == 'quit' ] ;then echo "quit" exit 0 fi clearCmd $cmd [ $? -eq 5 ] && continue #复制命令及对应的库文件到目标目录 cmdCopy $cmdPath libCopy $cmdPath done
注:增加此文件的可执行权限,chmow +x cmdCopy.sh
9,运行脚本./cmdCopy.sh 输入命令,ls,pwd,ping,ifconfig,mount,umount等,输入quit退出,如图:
注:命令复制完成后,记得使用命令:sync同步内存数据到硬盘
至此一个基于HOST宿主机的简易Linux系统环境启动硬盘已经完成了一大步,接下来新建一虚拟机,硬盘使用刚才新建的。
四,新建一虚拟机,选择刚才新建的硬盘。(过程不再详细描述)如下图所示:
注:新建虚拟机的系统类型要与宿主机的平台一致,引用新建的硬盘时,一定要保证HOST宿主机处于挂起的状态,为了避免同时读一块硬盘,出现错误,数据不一致的情况。
启动新虚拟机,如下图所示:
到此一个微小的Linux系统制作已经成功,系统功能是极其的简单,其中所具有的功能,也就是我们所复制的一些系统命令,比如,ls,pwd,等,但是ifconfig命令能使用么?不能,因为系统不具有识别网卡的能力且网卡的驱动也没有,接下来进行网卡驱动模块的加载与系统自动配置IP地址的功能
五,对裁减的小系统增加网卡驱动模块与IP
顺着这个思路,我们要查看一个宿主机HOST中网卡信息及配置
1,命令lsmod查找系统中加载的所有模块,找到e1000这个模块,如下图所示:
2,接着再看一下此模块所使用的模块文件及文件位置,使用命令:modinfo e1000,如下图所示:
3,复制上图所示文件至
/mylinux/sysroot/lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/e1000/e1000.ko
4,接着修改grub.conf文件,让Linux系统内核在启动时,自动加载初始化脚本,进行裁剪系统的目录(伪文件系统,如:proc,sys)挂载,及系统IP的自动设置等工作
修改grub.conf配置文件中init参数为:boot=/sbin/init,发下图所示:
在宿主机目录/mylinux/sysroot/sbin中,新建init文件,并给予可执行权限,文件内容如下图:
至此一个超级简单的Linux系统已经制作成功,可以进行简单的ping命令,设置主机IP等
六,后续
虽然看似简单的一个系统裁剪过程,里面却涉及到了许许多多系统启动过程中所涉及的内容,当然肯定也是似是而非(对于大多数计算机专业的学生),不要认为有些事儿很简单,自己动手做一下才知道,(后来连续做了不下十遍,这也是严格按照老师的思路走的),记住当你没有把握的时候,你只有跟着老师走!后续的内容是自己查找资料自己做个LFS,加油!