Linux就是个尤物


制作微型linux系统流程


1  当前的虚拟机添加10G硬盘,作为单个文件存储命名为mini.vmdk 方便查找

   查看当前宿主机硬盘信息制作mini Linux系统_第1张图片


2 添加一块硬盘到该虚拟机 sdb,并分区格式化 结果如图

 制作mini Linux系统_第2张图片

 

创建目标主机的根分区目录和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到目标主机的分区

制作mini Linux系统_第3张图片


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系统选择界面

制作mini Linux系统_第4张图片

欢迎界面

制作mini Linux系统_第5张图片

 

网卡启动正常,可ping通外网

制作mini Linux系统_第6张图片



以上微Linux系统的制作在宿主机与目标之间实现,使用了宿主机的原内核文件,自己定制了模块。从而可以打造适合自己的mini Linux.

但是并没有涉及到内核编译,编译内容敬请期待




求指导,共同成长。