一、前言Linux操作系统自1991年10月5日诞生以来,就因其开源、自由而受到众多技术达人的青睐。它贡献了自己的力量,无论是在Linux内核还是开源软件上,都为我们后人提供了良好的学习和研究环境。作为一名Linuxer,感谢前辈们给我们提供了一个自由的空间,让我们在学习的同时也可以学习Linux。本文主要通过对现有的Linux系统进行剪裁,搭建一个属于自己的小型Linux系统,使其能够加载网卡驱动,配置IP地址,实现网络功能。二、原理启动过程介绍:在制作Linux小系统之前,我们有必要先了解一下Linux的启动过程:1、首先,Linux必须通过POST自检,检查硬件设备是否正常。故障。2、如果有多个启动盘,需要在BIOS中选择启动盘3、启动MBR中的bootloader引导程序4、加载内核文件5、执行所有进程的父进程,祖先init6,打印欢迎界面在Linux的启动过程中,还需要加载内核文件借助另外两个文件:1)initrd,这是CentOS5上内存模拟的磁盘设备2)initramfs,这是一个文件CentOS6上内存模拟的系统。在启动的过程中,init主要用来进行哪些操作呢?init调用配置文件/etc/inittab,然后执行/etc/rc.d/rc.sysinit的系统初始化脚本,激发Linux打印欢迎界面,表示系统启动成功。如果我们要做一个Linux的小系统,只需要将启动过程中用到的所有文件一起加载,就可以点亮自己的系统了,而且Linux是一个模块化的操作系统,很多多功能组件通过模块传递。由专门的工具实现,支持动态加载和卸载。如果我们要实现某个功能,只需要加载相应的模块,就可以实现我们的Linux操作系统。三、操作步骤1、在宿主机上为目标磁盘分区挂载一块新磁盘,命名为soft-Linux。这个磁盘是宿主机上的第二个磁盘,所以这里是/dev/sdb,然后挂载到目标主机上,因为那里只有一个磁盘,所以目标主机上的名字应该是/dev/sda,不能混淆。首先,我们需要将目标磁盘分成两个区域并进行格式化。第一个分区500M,用于安装引导程序;第二个分区为10G,用于安装根文件系统。然后进行挂载操作,将/dev/sdb1挂载到/mnt/boot,将/dev/sdb2挂载到/mnt/sysroot。[root@nmshuishui~]#mount/dev/sdb1/mnt/bootmount:mountpoint/mnt/bootdoesnotexist[root@nmshuishui~]#mkdir-p/mnt/boot/mnt/sysroot[root@nmshuishui~]#mount/dev/sdb1/mnt/boot[root@nmshuishui~]#mount/dev/sdb2/mnt/sysroot/[root@nmshuishui~]#2.将grub安装到目标磁盘。一旦系统可以启动,它就需要被引导,所以我们首先需要在我们的新磁盘上安装一个grub引导加载程序。安装grubbootloader主要有两个命令,一个是grub-install,另一个是setup。这里最好使用grub-install来安装。因为:①grub-install会安装grub第二阶段引导的文件②setup不会安装第二阶段引导程序,是将引导信息安装到MBR中。第二个要注意的是--root-directory=后面的路径应该是boot目录所在的地方,而不是/mnt/boot,因为boot目录在mnt下;目标磁盘是/dev/sdb[root@nmshuishui~]#grub-install--root-directory=/mnt/dev/sdbProbingdevicestoguessBIOSdrives.Thismaytakealongtime.Installationfinished.Noerrorreported.Thisisthecontentsofthedevicemap/mnt/boot/grub/device.map.Checkifthisiscorrectornot.Ifanyofthelinesisincorrect,fixitandre-runthescript`grub-install'.(fd0)/dev/fd0(hd0)/dev/sda(hd1)dev/sdb[root@nmshuishui~]#cd/mnt/boot/[root@nmshuishuiboot]#lsgrublost+found[root@nmshuishuiboot]#cdgrub/[root@nmshuishuigrub]#lsdevice.mape2fs_stage1_5fat_stage1_5ffs_stage1_5iso9660_stage1_5jfs_stage1_5minix_stage1_5reiserfs_stage1_5stage1stage2ufs2_stage1_5vstafs_stage1_5xfs_stage1_5[root@nmshuishuigrub]#安装完Aftergrub,enterthegrubdirectory,youwillfindthatthereisnogrub.confconfigurationfile,这样会导致我们的boot程序不能正常运行,所以我们需要手动在里面写一个配置文件,但是这个需要知道内核的版本等等,弄完内核版本再回来添加这个步。3、复制内核文件和initrd文件init是用来生成系统中所有其他进程的程序。它作为守护进程存在,它的进程号为1,而init是所有进程的父进程,祖先,所以不移植是不可能的。它调用配置文件/etc/inittab,然后执行/etc/rc.d/rc.sysinit的系统初始化脚本。将内核文件和initrd文件拷贝到/dev/sdb下的boot目录下。[root@nmshuishuigrub]#cp/boot/vmlinuz-2.6.32-358.el6.x86_64/mnt/boot/vmlinuz-soft[root@nmshuishuigrub]#cp/boot/initramfs-2.6.32-358.el6.x86_64.img/mnt/boot/initramfs-soft.img[root@nmshuishuigrub]#4、创建目标主机根文件系统①使用命令展开创建文件系统[root@nmshuiishuisysroot]#mkdir/etcm/s/rc.d,usr,var,proc,sys,dev,lib,lib64,bin,sbin,boot,srv,mnt,media,home,root}mkdir:createddirectory`/mnt/sysroot/etc'mkdir:createddirectory`/mnt/sysroot/etc/rc.d'mkdir:createddirectory`/mnt/sysroot/usr'mkdir:createddirectory`/mnt/sysroot/var'mkdir:createddirectory`/mnt/sysroot/proc'mkdir:createddirectory`/mnt/sysroot/sys'mkdir:createddirectory`/mnt/sysroot/dev'mkdir:createddirectory`/mnt/sysroot/lib'mkdir:createddirectory`/mnt/sysroot/lib64'mkdir:createddirectory`/mnt/sysroot/bin'mkdir:createddirectory`/mnt/sysroot/sbin'mkdir:createddirectory`/mnt/sysroot/boot'mkdir:createddirectory`/mnt/sysroot/srv'mkdir:createddirectory`/mnt/sysroot/mnt'mkdir:createddirectory`/mnt/系统根/媒体'mkdir:createddirectory`/mnt/sysroot/home'mkdir:createddirectory`/mnt/sysroot/root'[root@nmshuishuisysroot]#lsbinbootdevetchomeliblib64lost+foundmediamntprocrootsbinsrvsysusrvar[root@nmshuishuisysroot]#②移动bash命令文件到其他仓库root@nmshuishuimnt]#sh~/scripts/cporder.shEnteracommand:bashEnteracommand:shutdownEnteracommand:rebootEnteracommand:vimEnteracommand:touchEnteracommand:mkdirEnteracommand:rmEnteracommand:lsEnteracommand:catEnteracommand:lessEnteracommand:ifconfigEnteracommand:ipEnteracommand:routeEnteracommand:quitquit[root@nmshuishuimnt]#sync[root@nmshuishuimnt]#sync[root@nmshuishuimnt]#lsbootsysroot[root@nmshuishuimnt]#cdsysroot/[root@nmshuishuisysroot]#lsbinlib64sbinusr[root@nmshuishuisysroot]#cdbin/[root@nmshuishuibin]#lsbashcatlsmkdirrmtouch[root@binms]svbashsh`sh'->`bash'[root@nmshuiishuibin]#sync[root@nmshuishuibin]#附:指令移动植脚本#!/bin/bash#target=/mnt/sysrootclearCmd(){ifwhich$cmd&>/dev/空;然后cmdPath=`which--skip-alias$cmd`elseecho"Nosuchcommand"返回5fi}cmdCopy(){cmdDir=`dirname$1`[-d${target}${cmdDir}]||mkdir-p${target}${cmdDir}[-f${target}${1}]||cp$1${target}${cmdDir}}libCopy(){forlibin`ldd$1|grep-o"/[^[:space:]]\{1,\}"`;dolibDir=`dirname$lib`[-d${target}${libDir}]||mkdir-p${target}${libDir}[-f${target}${lib}]||cp$lib${target}${libDir}done}whiletrue;doread-p"Enteracommand:"cmdif["$cmd"=='quit'];thenecho"quit"exit0ficlearCmd$cmd[$?-eq5]&&continuecmdCopy$cmdPathlibCopy$cmdPathdone5.为grub提供配置文件移植内核后和initrd文件,我们可以根据内核版本和initrd版本编写grub.conf配置文件:[root@nmshuishuigrub]#vimgrub.confdefault=0timeout=5titlemshuishuisoft-Linuxroot(hd0,0)kernel/vmlinuz-softroroot=/dev/sda2quietselinux=0init=/bin/bashinitrd/initramfs-soft.img~quiet是静默安装,安装时不再显示很多信息,后面将selinux关掉,init需要使用/bin/bash,告诉内核不再寻找init程序。如果不指定这一步,启动过程中会报内核恐慌(kernelpanic),认为系统是唯一的,没有init进程,恐慌不会起作用。6.开始测试7.特别提醒,如果在vmvare上做这个实验,创建新虚拟机时一定要选择“Storevirtualdiskasasinglefile”,否则也会出现kernelpanic.四、加载模块实现网络功能1、查看宿主机网卡模块信息[root@nmshuiishuinet]#lsmod|grepe1000e10001706460[root@nmshuiishuinet]#2、查看网卡详细信息[root@nmshuishuinet]#modinfoe1000filename:/lib/modules/2.6.32-358.el6.x86_64/kernel/drivers/net/e1000/e1000.koversion:7.3.21-k8-NAPIlicense:GPLdescription:Intel(R)PRO/1000NetworkDriver作者:IntelCorporation,
