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及其相关

库文件
复制常用的名令及其相关库文件
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
mkdir -p $mdmulu
cp $1 $2
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
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”代表内核号。每台机器的内核号不同,只需填写自己的本机的内核号即可)