Linux就是个尤物
制作微型linux系统流程
1 当前的虚拟机添加10G硬盘,作为单个文件存储命名为mini.vmdk 方便查找
查看当前宿主机硬盘信息
2 添加一块硬盘到该虚拟机 sdb,并分区格式化 结果如图创建目标主机的根分区目录和boot分区目录
mkdir -p /mnt/{sysroot,mnt}
3 挂载sdb1和sdb2到/mnt/boot和/mnt/sysroot下,并以rw(读写的权限)挂载
mount -t ext4 -o /dev/sdb1 /mnt/boot
mount -t ext4 -o /dev/sdb2 /mnt/sysroot
4 安装grub到目标主机的分区
5 复制宿主机/boot目录下的内核文件和initramfs文件到目标主机响应的目录下
#cp /boot/vmlinuz-2.6.32-431.el6.x86_64 /mnt/boot/vmlinz
#cp /boot/initramfs-2.6.32-431.el6.x86_64.img /mnt/boot/initramfs
6 在目标主机/mnt/sysroot 下创建常用系统目录
mkdir /mnt/sysroot/{etc/rc.d,bin,sbin,lib,lib64,,root,dev,mnt,proc,sys}
7 将宿主机上常用的二进制文件及对应的库文件拷贝到目标主机上,××× (ifconfig,ping,ls,cat,shutdown)我们使用脚本来完成此次拷贝动作
scripts:
#!/bin/bash
#
lib(){
for i in $*;do
dirName=`dirname $i`
[ -d /mnt/sysroot$dirName ] || mkdir -p /mnt/sysroot$dirName
cp $i /mnt/sysroot$dirName/
echo "the lib are copied to the it's dir"
done
}
read -p "input a exec commond: " Commond
lib `which $Commond`
path=`which $Commond`
lib `ldd $path |grep -o "/[[:graph:]]"`
8 接下来为目标主机创建grub.conf文件
#vim /mnt/boot/grub/grub.conf
default=0
timeout=5
title jungege Mini Linux
root (hd0,0)
kernel /vnlinuz ro root=/dev/sda2 selinux=0 init=/sbin/init
initrd /initramfs.img
同时需要创建/bin/bash的软连接,防止内核不能被加载时出现"内核恐慌 Caught Single"
ln -sv /bin/bash sh
9 配置/mnt/sysroot/sbin/init 以实现开机加载网卡模块
已配置eth0接口ip地址,route条目
#!/bin/sh
echo -e "Welcome to \033[32mjungege\033[0m Linux"
mount -n -t proc /proc proc
mount -n -t sysfs sysfs /sys
insmod /lib/modules/e1000.ko
ifconfig lo 127.0.0.1/8
ifconfig eth0 192.168.1.155/24
route add -net 0.0.0.0 gw 192.168.1.253
/bin/bash
10 停止宿主机,新建虚拟机,选择"使用先现有有的虚拟磁盘" 从而选择1中的mini.vmdk
开机启动
mini Linux系统选择界面
欢迎界面
网卡启动正常,可ping通外网
以上微Linux系统的制作在宿主机与目标之间实现,使用了宿主机的原内核文件,自己定制了模块。从而可以打造适合自己的mini Linux.
但是并没有涉及到内核编译,编译内容敬请期待