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.
但是并没有涉及到内核编译,编译内容敬请期待
求指导,共同成长。