手动建立可登陆的迷你精简linux

         首先,你要了解linux的启动过程:大致如下:BIOS(CMOS)加电——引导启动设备选择启动顺序——找到MBR——由GRUB引导加载内核kernel(与initrd文件配合)——加载父进程init(配合inittab,rc.sysinit)——启动login界面。

所以在建立小linux时,我们只需要添加这些基本文件即可。

假设这里我们;已经对安装小linux的硬盘格式化。

1   模拟建立BOOT和根分区  将/dev/sdb1,2分别挂在至 /mnt/boot , ./mnt/sysroot下,并在sysroot 下建立根目录:mkdir root boot usr lib bin sbin proc sys  home 

2   安装GRUB;

    grub-install --root-directory=/mnt  /dev/sdb ,之后再拷贝所需的内核文件(这里使用原有系统的vmlinuz-2.6.18.el5), cp /boot/vmlinuz-2.6.18.el5   /mnt/boot/

配置initrd文件,这里不能同内核一样简单拷贝,需要修改之。

 

因为initrd-2.6.18.img是个gzip压缩文件,先 gzip -d   initrd-2.6.18.img  ,发现是CPIO归档文件,在用CPIO展开:cpio -id  <  initrd-2.6.18.img,发现这其实就是一个模拟的根文件系统。(其中包含init二进制文件),编辑这个init并保存,之后用CPIO归档:

find . | cpio -H newc -o   | gzip -9 -n  >  /tmp/  ——(使用find发现归档此目录下的所有文件并压缩存放至/tmp)

并在此grub目录下编辑grub.conf,如下:

      default=0

timeout=3

#splashp_w_picpath=(hd0,0)/grub/milan.xpm.gz

title Little Linux

        root (hd0,0)

        kernel /vmlinuz ro root=/dev/sda2 quiet

        initrd /initrd.gz

3  建立所需的init进程,并配置inittab文件。

即拷贝宿主的init即可,注意:很多二进制文件都有其依赖的库文件,也需要拷贝。

注:若想要在系统中添加一些简单命令,如 ls ,cat ,ping 等,也是按照这种方法,可以自己尝试。

 cp  /sbin/init  /mnt/sysroot/sbin/

ldd /bin/init  :查看init依赖的库文件,之后再拷贝这些库文件。PS:这些保存库文件原有的路径,如原来在 /lib/下,则拷至 /mnt/sysroot/lib/下。

 vim /mnt/sysroot/etc/inittab,如下:

        id:3:initdefault:

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

 

4    为系统装配基本的shell,实现简单交互

    cp /bin/bash   /mnt/sysroot/bin/  

    ldd    /bin/bash  

    拷贝bash依赖的库文件至制动目录

5    配置系统初始化脚本,即rc.sysinit文件:如下

echo "welcome to minilinux"

/bin/bash

 

 

至此,简单的傻瓜式迷你linux已经完成。

注意:需要执行 sync命令使这些更改立即同步至硬盘,可多执行几次。否则很可能造成操作失败。