CentOS 6.6 系统剪裁
一:前言 本文主要通过裁剪现有Linux系统,打造一个属于自己的Linux小系统,让其能够装载网卡驱动,并配置IP地址,实现网络功能。 二:原理: linux系统的启动流程: 1、首先Linux要通过POST自检,检查硬件设备有没有故障 2、如果有多块启动盘的话,需要在BIOS中选择启动磁盘 3、启动MBR中的bootloader引导程序 4、加载内核文件 5、执行所有进程的父进程init 6、打印欢迎界面 在Linux的启动流程中,加载内核文件时还需要借助别外两个文件: 1)initrd,是CentOS5上用内存模拟的磁盘设备 2)initramfs,是CentOS6上用内存模拟的文件系统 在启程的流程中,init主要是用来做哪些操作的呢? init通过调用/etc/inittab这个配置文件,然后再去执行/etc/rc.d/rc.sysinit的系统初始化脚本 三:操作步骤: 1:目标磁盘分区: 在系统中添加一个硬盘,并命名为test,进行分区/dev/sdb1为100M来做引导程序,/dev/sdb2为1G用来装根文件系统,把这两个分区用mke2fs 进行格式化,然后进行如下操作,把/dev/sdb1挂载到/mnt/boot下,把/dev/dsb2挂载到/mnt/sysroot下: [root@localhost ~]# mkdir /mnt/{boot,sysroot} [root@localhost ~]# mount /dev/sdb1 /mnt/boot/ [root@localhost ~]# mount /dev/sdb2 /mnt/sysroot/ 2、安装grub到目标磁盘 一个系统能启动,就需要引导,所以我们首先要安装一个grub引导程序到我们的新磁盘上,安装grub引导程序主要有两个命令,一个是grub-install,另一个是setup,这里最好使用grub-install来安装。因为:
[root@localhost ~]# ls /mnt/boot/ grub lost+found [root@localhost ~]# ls /mnt/boot/grub/ device.map iso9660_stage1_5 stage1 xfs_stage1_5 e2fs_stage1_5 jfs_stage1_5 stage2 fat_stage1_5 minix_stage1_5 ufs2_stage1_5 ffs_stage1_5 reiserfs_stage1_5 vstafs_stage1_5 [root@localhost ~]# 安装好了grub会发现grub.conf这个文件不在,后面再补 3、 将内核文件和initrd文件复制到/dev/sdb下的boot目录中
[root@localhost ~]# cp /boot/vmlinuz-2.6.32-504.el6.x86_64 /mnt/boot/vmlinux [root@localhost ~]# cp /boot/initramfs-2.6.32-504.el6.x86_64.img /mnt/boot/initramfs.img [root@localhost ~]# 4、创建目标主机根文件系统 [root@localhost ~]# mkdir -p /mnt/sysroot/{bin,lib,media,proc,selinux,tmp,boot,etc/rc.d,lib64,misc,net,root,srv,usr,dev,home,mnt,opt,sbin,sys,var} [root@localhost ~]# bash a1.sh 请输入一个命令:bash [root@localhost ~]# bash a1.sh 请输入一个命令:ls [root@localhost ~]# bash a1.sh 请输入一个命令:cat [root@localhost ~]# bash a1.sh 请输入一个命令:ifconfig [root@localhost ~]# bash a1.sh [root@localhost ~]# ls /mnt/sysroot/ bin dev home lib64 media mnt opt root selinux sys usr boot etc lib lost+found misc net proc sbin srv tmp var [root@localhost ~]# cd /mnt/sysroot/bin/ [root@localhost bin]# ln -sv bash sh "sh" -> "bash" [root@localhost bin]# ls -l 总用量 1116 -rwxr-xr-x. 1 root root 904872 8月 27 01:57 bash -rwxr-xr-x. 1 root root 45224 8月 27 01:57 cat -rwxr-xr-x. 1 root root 109208 8月 27 01:57 ls -rwxr-xr-x. 1 root root 77336 8月 27 01:58 mount lrwxrwxrwx. 1 root root 4 8月 27 01:59 sh -> bash 附:命令移植脚本 #! /bin/bash # j="/mnt/sysroot" read -p "请输入一个命令:" i if which $i &> /dev/null;then a=`which $i` else echo " 命令有错" fi b=`dirname $a` [ -d ${j}${b} ] || mkdir -p ${j}${b} [ -f ${j}${a} ] || cp $a ${j}${b} for c in `ldd $a | grep -o "/[^[:space:]]{1,}"`;do z=`dirname $c` [ -d ${j}${z} ] || mkdir -p ${j}${z} [ -f ${j}${c} ] || cp $c ${j}${z} done 5、为grub提供配置文件grub.conf [root@localhost ~]# vi /mnt/boot/grub/grub.conf default=0 timeout=5 title CentOS root (hd0,0) kernen /vmlinux ro root=/dev/sda2 selinux=0 init=/bin/bash initrd /initramfs.img ~ [root@localhost ~]# sync (同步) 6、启动测试 特别提醒: 四:装载模块,实现网络功能 1、查看网卡信息:
[root@localhost ~]# lsmod | grep e1000 e1000 160643 0 2、查看网卡详细信息: [root@localhost ~]# modinfo e1000 filename: /lib/modules/2.6.32-504.el6.x86_64/kernel/drivers/net/e1000/e1000.ko version: 7.3.21-k8-NAPI license: GPL description: Intel(R) PRO/1000 Network Driver author: Intel Corporation,<linux.nics@intel.com> srcversion: 22ED5F24EA9709C19DA8084 alias: pci:v00008086d00002E6Esv*sd*bc*sc*i* 这里查询到了网卡模块的路径,把它复制到/dev/sdb的库文件下: [root@localhost ~]# mkdir /mnt/sysroot/modules [root@localhost ~]# cp /lib/modules/2.6.32-504.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/sysroot/modules/ 3,init程序: [root@localhost ~]# vi /mnt/sysroot/lib/init #! /bin/bash echo -e "t 33[31m CentOS 6.6 33[0m" mount -n -t proc proc /proc mount -n -t sysfs sysfs /sys insmod /modules/e1000.ko [ $? -eq 0 ] && echo -e "t 33[33m e1000 33[0m" ifconfig eth0 192.168.10.10/24 ifconfig lo 127.0.0.0/8 mount -n -o remount,rw /dev/sda2 / /bin/bash (编辑:台州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |