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下:

wKiom1fALk7x1wvsAACDhQR_jwM020.png-wh_50

[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來安裝。因爲:

  1. ①grub-install會安裝grub引導第二階段的文件 

  2. ②setup不會安裝第二階段的引導程序,是安裝引導信息到MBR 

  3. 第二個需要注意的地方就是--root-directory=後面接的路徑應該是boot目錄所在的地方,而不是/mnt/boot,因爲boot目錄在mnt下;目標磁盤是/dev/sdb 

  1. [root@localhost ~]# grub-install  --root-directory=/mnt /dev/sdb

   [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、啓動測試


特別提醒:

wKioL1fAOrTjpnzdAACJ8NfJ6EM139.png-wh_50

wKioL1fAOrXiW43tAAA3UzKNCt8109.png-wh_50



wKiom1fAPbGT4GoAAABRp4QgqTI712.png-wh_50



四:裝載模塊,實現網絡功能

 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, <[email protected]>

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 \033[31m CentOS 6.6 \033[0m"

mount -n -t proc proc /proc

mount -n -t sysfs sysfs /sys

insmod /modules/e1000.ko

[ $? -eq 0 ] && echo -e "\t \033[33m e1000 \033[0m"

ifconfig eth0 192.168.10.10/24

ifconfig lo 127.0.0.0/8

mount -n -o remount,rw /dev/sda2 /

/bin/bash


[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=/lib/init

  initrd /initramfs.img

wKioL1fAQunjNYQMAABjW6ajOUg932.png-wh_50

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章