标签: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学习 系统裁剪
原文地址:http://chenqiyi.blog.51cto.com/8125763/1684535