码迷,mamicode.com
首页 > 系统相关 > 详细

Linux学习笔记<十九>——系统裁剪之一

时间:2015-08-14 19:41:26      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:linux学习 系统裁剪

grub-->kernel-->initrd-->ROOTFS(/sbin/init, /bin/bash)

自行在一块新硬盘上组建一个简单的Linux系统,具有/sbin/init初始化,能够使用/bin/bash

1.磁盘分区:只创建boot分区mount到/mnt/boot和根分区mount到/mnt/sysroot

2.cp /boot/vmlinuz-`uname -r` /mnt/boot/vmlinuz

3.grub-install --root-directory=/mnt /dev/hda (假设hda为新硬盘)

4. mkinitrd initrd文件路径 内核版本号 创建initrd

 mkinitrd /boot/initrd-`uname -r`.img `uname -r`

5.展开initrd镜像

①mv initrd*.img initrd*.img.gz

 gzip -d initrd*.img.gz

 cpio -id < /path/to/initrd*.img 在当前目录下展开initrd*.img

②zcat /boot/initrd*.img | cpio -id 在当前目录下直接展开initrd*.img

6.在展开的文件中vim init

 找到mkrootdev -t ext3 -o defaults,ro /path/to/rootfs_mount_dev(例如/dev/sda1)

 将/path/to/rootfs_mount_dev改为新硬盘根文件系统的挂载设备

7.find . | cpio -H newc --quiet -o | gzip -9 > /mnt/boot/initrd.gz

8.vim /mnt/boot/grub/grub.conf

 default=0

 timeout=5

title Test Linux

    root (hd0,0)

    kernel /vmlinuz

    initrd /initrd.gz

:wq

9.创建目录,在根目录/mnt/sysroot下 mkdir proc sys dev etc etc/rc.d lib sbin boot home                            var/log usr/{bin,sbin} root tmp

10.将/sbin/init和/bin/bash和对应的库文件cp到/mnt/sysroot/下的对应目录,使用ldd 查找进程所依   赖的库文件

11.vim /etc/inittab

 id:3:initdefault:

 si::sysinit:etc/rc.d/rc.sysinit

:wq

12.vim /etc/rc.d/rc.sysinit

#!/bin/bash

echo  -e "\tWelcome to \033[31m CQY‘s Linux.\033[0m"

/bin/bash

:wq

chmod +x /etc/rc.d/rc.sysint


为了方便添加程序,创建了/root/cpso.sh脚本,功能是复制指定程序和程序依赖的库文件到新系统的相应路径,脚本代码如下:

#!/bin/bash

#

DEST=/mnt/sysroot

libcp() {

  LIBPATH=${1%/*}

  [ ! -d $DEST$LIBPATH ] && mkdir -p $DEST$LIBPATH

  [ ! -e $DEST${1} ] && cp $1 $DEST$LIBPATH && echo "copy lib $1 finished."

}


bincp() {

  CMDPATH=${1%/*}

  [ ! -d $DEST$CMDPATH ] && mkdir -p $DEST$CMDPATH

  [ ! -e $DEST${1} ] && cp $1 $DEST$CMDPATH


  for LIB in  `ldd $1 | grep -o "/.*lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`; do

    libcp $LIB

  done

}


read -p "Your command: " CMD

until [ $CMD == ‘q‘ ]; do

   ! which $CMD &> /dev/null && echo "Wrong command" && read -p "Input again:" CMD && \ continue

  COMMAND=` which $CMD | grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"`

  bincp $COMMAND

  echo "copy $COMMAND finished."

  read -p "Continue: " CMD

done


Linux学习笔记<十九>——系统裁剪之一

标签:linux学习 系统裁剪

原文地址:http://chenqiyi.blog.51cto.com/8125763/1684535

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!