Centos6中自制linux系统

首先在自制系统之前我们应事先在虚拟机中添加一块新的硬盘,硬盘的大小为20G即可,安装位置放在一个便于我们随时能找到的地方,最好是安装在桌面上。接下来就是正式实施过程。

第一步:对硬盘进行分区并创建文件系统

这时应注意的是我们新加的硬盘在虚拟机中有可能显示不出来,需要我们手动激活;ehco '- - - ' > /sys/class/scsi_host/host0/scan 激活之后使用"lsblk"查看一下是否激活成功,如果没有激活成功只需把刚才命令中的host0改为host2:ehco '- - - ' > /sys/class/scsi_host/host0/scan.(友情提示:echo 后面的三个“- - -”中间一定要加空格)

1,(创建分区)fdisk /dev/sdb

   最好是分两个必要的分区;sdb1和sdb2;

                /dev/sdb1 对应的是/boot

                /dev/sdb2 对应的是根 /

2,(格式化磁盘分区)mkfs.ext4 /dev/sdbX

          mkfs.ext4 /dev/sdbX


第二步:挂载boot

1,首先应创建一个mnt目录其子目录必须为boot:

mkdir /mnt/boot

2,挂载boot

mount /dev/sdb1 /mnt/boot

3,查看一下挂载好的boot下的内容

ls /mnt/boot/ 


第三步:安装grub

1,grub-install --root-directory=/mnt/boot /dev/sdb

2,ls /mnt/boot/grub/ 查看一下文件是否生成

3,hexdump -C /dev/sdb -n 512 -v 使用二进制查看一下是否成功


第四步:拷贝内核和initramfs文件到/mnt/boot

cp /boot/vmlinuz-`uname -r` /mnt/boot/

cp /boot/initramfs-`uname -r`.img `uname -r` /mnt/boot/


第五步:创建一个grub.conf文件

1,vim /mnt/boot/grub/grub.conf

    default=0

    (开机自启动)

      timeout=3

    (进入系统等待时间)

    title Linux

    (系统名)

    kernel(内核) /vmlinuz-`uname -r` root=/dev/sda2(建议使用UUID:blkid /dev/sdb2)               selinux=0 init=/bin/bash

    initrd /initramfs-`uname -r`.img `uname -r` 

2,cat /mnt/boot/grub/grub.conf 

  blkid /dev/sdb2

对比一下两个命令下的UUID是否一致


第六步:挂载根目录

1,mkdir /system(创建一个目录用来挂载根)

2,mount /dev/sdb2 /system


第七步:复制bash及其相关spacer.gif库文件

    复制常用的名令及其相关库文件

1,运行复制的脚本

bash /root/copycmd.sh

2,在脚本中复制常用命令:ls 、mount、 ping、 ifconfig 、ip、 cd、 cp、cat、insmod、vim、reboot等

3,使用tree命令:查看是否成功

4,在根system下创建常见目录:var root lib64 home bin etc usr dev tmp sys proc boot等

(关于复制的脚本会在下面进行详细列出)

#!/bin/bash

#===============================================================

#作者:XXX

#文件名:copycmd.sh

#版本:

#作用: 

#===============================================================

cjlu () {

        if [ -f $2 ];then

                echo " $1   已存在 "

        else

                mulu $1 $2

        fi

}

mulu () {

        mdmulu=$(echo $2 |sed -r "s/(.*\/)[^\/]*$/\1/")

        if [ -d $mdmulu ];then

                cp $1 $2 

        else

                mkdir -p $mdmulu

                cp $1 $2

        fi

}

i=0;sys=/system

while [ $i == 0 ];do

        while [ $i == 0 ];do

                read -p "请输入一个命令: " cmd

                which $cmd &>/dev/null

                pd=$(echo $?)

                if [ $pd -ne 0 ];then 

                        echo "你输入的是内部命令或不是命令。"

                        read -p "输入no退出不退出回车: " b

                        if [[ $b =~ n ]];then

                                exit

                        fi

                else

                        let i+=1

                fi

        done

        cmdlj=$(which $cmd |tail -1 |grep -o "[^[:space:]]\+")

        cjlu $cmdlj $sys$cmdlj

        for i in $(ldd $cmdlj |sed -nr "s/.*[[:space:]](\/.*) .*/\1/p");do

                cjlu $i $sys$i

        done

        i=0

done

第八步:复制一个网络模块

1,查看网络模块

locate e1000

2,复制到/system/lib64/

cp /lib/modules/2.6.32-696.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /system/lib64/


此时准备工作已经做好了现在只需要检验一下我们制作的linux系统:

1,移出我们的硬盘安装到一个新的虚拟机上

2,启动虚拟机

3,成功进入以后,手动安装一个网络模块:

insmod /lib64/e1000.ko

4,此时网卡没有ip地址并且处于DOWN状态,需要我们手动配置ip地址并启用网卡

ifconfig eth0 192.168.18.113/34 up

5,使用ping测试ping成功表示linux系统自制成功

应注意的是:如果在自制的系统中ping测试不能成功,则在其他虚拟机中ping本地址也能测验是否成功。


自制linux系统常见的问题;

1,无法进入系统:可能是缺少bash进程启动:重启一下进入单用户模式加上一句:init=/bin/bash

2,启动系统后进入grub> 模式:代表系统在启动时有配置文件被损坏,启动内核镜像无法找到所导致的;在"grub>"中重新配置一下内核和initrd即可:具体操作如下:

        grub>kernel /vmlinuz-`uname -r` root=/dev/sda2 selinux=0

        grub>initrd /initramfs-`uname -r`.img `uname -r`

        grub>boot

(其中“uname -r”代表内核号。每台机器的内核号不同,只需填写自己的本机的内核号即可)