[马哥学习笔记]Linux系统裁剪之制作带网络功能的可启动linux


知识基础:

系统启动流程:POST-->BIOS(boot sequence)-->GRUB(bootloder(stage1:MBR;stage2:grub目录中))-->kernel(initrd)-->SHELL

制作步骤:

1、给目标磁盘分区

  两个:

    宿主机:/dev/sdb1 /dev/sdb2

  将/dev/sdb1挂载至/mnt/boot,/dev/sdb2挂载至/mnt/sysroot

mount /dev/sdb1 /mnt/boot
mount /dev/sdb2 /mnt/sysroot

2、安装grub至目标磁盘

grub-install --root-directory=/mnt /dev/sdb

3、复制内核和initrd文件

cp /boot/vmlinuz-2.6.32-279.el6.i686 /mnt/boot/vmlinuz
cp /boot/initramfs-2.6.32-279.el6.i686.img /mnt/boot/initramfs.img

4、创建目标文件的根系统文件

 mkdir -pv /mnt/sysroot/{/etc/rc.d,usr,var,media,home,root,src,sys,boot,tmp,lib,lib64,dev,proc,bin,sbin}

  利用bincp脚本移植bash,ls等至目标根系统文件

  bincp.sh如下: 

 1 #!/bin/bash
 2 #
 3 DEST=/mnt/sysroot
 4 libcp(){
 5   LIBPATH=${1%/*}
 6   [ ! -d $DEST$LIBPATH ] && mkdir -p $DEST$LIBPATH
 7   [ ! -e $DEST${1} ] && cp $1 $DEST$LIBPATH && echo "copy lib $1 finished"
 8 }
 9 bincp(){
10   CMDPATH=${1%/*}
11   [ ! -d $DEST$CMDPATH ] && mkdir -p $DEST$CMDPATH
12   [ ! -e $DEST${1} ] && cp $1 $DEST$CMDPATH 
13   
14   for LIB in `ldd $1 | grep -o "/.*lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`;do
15     libcp $LIB
16   done
17 }
18 read -p "Your Command: " CMD
19 until [ $CMD == 'q' ]; do
20   ! which $CMD &> /dev/null && echo "Wrong command" && read -p "Input again: " CMD && continue
21   COMMAND=`which $CMD | grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"`
22   bincp $COMMAND
23   echo "copy $COMMAND finished."
24   read -p "Continues: " CMD
25 done
View Code

5、编写/mnt/sysroot/sbin/init文件

 1 #!/bin/bash
 2 #
 3 echo -e  "Welcome to \033[34m LiuJie's\033[0m Linux"
 4 mount -n -t proc proc /proc
 5 mount -n -t sysfs sysfs /sys
 6 insmod /lib/modules/e1000.ko
 7 [ $? -eq 0 ] && echo -e "Load e1000 modules succeed                                   [ \033[32mOK\033[0m ]"
 8 ifocnfig lo 127.0.0.1/8
 9 ifconfig eth0 192.168.0.225/16
10 mount -n -o remount,rw /dev/sda2 /
11 /bin/bash
View Code

6、为grub提供配置文件

1 default=0
2 timeout=5
3 title Test Linux
4     root (hd0,0)
5     kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/sbin/init
6     initrd /initramfs.img
View Code
优质内容筛选与推荐>>
1、对CAP定理的理解
2、Good Bye 2014 D. New Year Santa Network 图的邻接表存储不用vector,dfs,概率,期望,想法
3、判断列表中是否存在一个元素
4、CentOS 6.6 Oracle 安装
5、jenkins无法连接到git原因


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号





    联系我们

    欢迎来到TinyMind。

    关于TinyMind的内容或商务合作、网站建议,举报不良信息等均可联系我们。

    TinyMind客服邮箱:support@tinymind.net.cn