图解制作Mini Linux系统当然是先看图:
说明1:在一个Linux宿主机系统上,通过以上步骤,可以制作一个微小的Linux系统(可以放置在U盘中等),然后在其它的主机(虚拟机或者物理机)上运行,以实现最小化定制系统的目的。
说明2:上图中黑色部分是主要流程,蓝色部分是详细流程,棕色部分是注释说明等
对于上图中几点细节的详解:
阶段 | 说明 |
目标磁盘分区格式化挂载 | 目标磁盘是/dev/sdb,大小为1G,分区sdb1:100M,sdb2:500M即可 |
安装grub至目标磁盘 | 无 |
复制内核和initrd文件 | VERSION是内核版本,如2.6.32-358.el6.x86_64 |
创建目标主机的根文件系统 | 无 |
移植常用命令 |
移植常用命令的脚本可参考http://www.linuxidc.com/Linux/2014-03/97861p2.htm 在移植后的bash程序所在的目录下创建sh软链接 |
为grub提供配置文件 | grub配置文件详细说明见“图解Linux系统启动流程” http://www.linuxidc.com/Linux/2014-03/97862.htm |
创建sbin/init脚本 | init脚本可参考 http://www.linuxidc.com/Linux/2014-03/97861p3.htm |
#!/bin/bash
# Author : Jason.Yu
# Description : copy some cmds and releated .so files to special directory(/mnt/sysroot).
# CTime : 2014.03.01
MkDirs_CpFiles (){
Dirname=$(dirname $1)
[ -d “${Target}${Dirname}” ] || mkdir -pv ${Target}${Dirname} &>/dev/null
[ -f “${Target}$1” ] || cp $1 ${Target}${Dirname}
}
Copy_Cmds_Files(){
Target=”/mnt/sysroot”
CMDS=(grep df cat cp mv ls echo mount ifconfig insmod rmmod bash init cd vi mkdir shutdown reboot pwd lsmod)
for cmd in ${CMDS[@]};do
if which $cmd &>/dev/null;then
cmd_full=`which –skip-alias $cmd`
MkDirs_CpFiles $cmd_full
for file in $(ldd $cmd_full|egrep -o “/lib[^[:space:]]+”);do
MkDirs_CpFiles $file
done
[ $? -eq 0 ] && echo -e “\033[32mAll files copy done.\033[0m”
else
echo -e “The command \033[31m\$cmd033[0m is not existed.”
fi
done
}
main(){
Copy_Cmds_Files
}
main
#!/bin/bash
# Author : Jason.Yu
# Description : make a init script to do somrthing
# CTime : 2014.03.01
echo -e “\tWelcome to \033[34m Jason.Yu Minix Linux\033[0m.”
mount -n -t proc proc /proc
mount -n -t sysfs sysfs /sys
insmod /lib/modules/e1000.ko
modprobe e1000
ifconfig lo 127.0.0.1/8
ifconfig eth0 172.16.10.99/16
mount -n -o remount,rw /dev/sda2 /
/bin/bash