手把手教你你制作自己的ttylinux

 前期准备工作
          1、一个作为宿主机的Linux;本文使用的是Redhat Enterprise Linux 5.4;
          2、在宿主机上提供一块额外的硬盘作为新系统的存储盘,为了降低复杂度,这里添加使用一块SCSI接口的新硬盘;
          3、本文使用内核的是宿主机的linux-2.6.18.164.el5。
   一、在宿主机上创建磁盘分区和格式化文件系统
       分析:ttylinux的分区:/boot 100M   /root  512M  swap  32M
       分区:fdisk /dev/sdb <<EOF &> /dev/null
            >n
            >p
            >1
            >1
            >+100M
            >n
            >p
            >2
            >
            >+512M
            >n
            >p
            >3
            >
            >+32M
            >t
            >3
            >82
            >w
            >EOF
       检查分区情况
            fdisk -l /dev/sdb
       格式化分区
           mke2fs -j /dev/sdb1 && mke2fs -j /dev/sdb2 && mkswap /dev/sdb3
  二、移植内核和一些测试的内核模块  编辑配置文件
        前提 :先创建一些临时工作目录
              mkdir /mnt/root /mnt/sysroot 
              mkdir initrd
             
       流程:
           1 移植内核的initrd
             cd /initrd
             cp cp /boot/initrd-2.6.18-164.el5.img  ./
             mv initrd-2.6.18-164.el5.img initrd-2.6.18-164.el5.img.gz
             gzip -d initrd-2.6.18-164.el5.img.gz
             cpio -id  < initrd-2.6.18-164.el5.img
             rm  -i initrd-2.6.18-164.el5.img
             此时目录下应该是:
              [root@server70 initrd]# ls
              bin  dev  etc  init  lib  proc  sbin  sys  sysroot
             修改一些文件 init
                +99 行 mkrootdev -t ext3 -o defaults,ro /dev/vol0/root
                 改为    mkrootdev -t ext3 -o defaults,ro sda2(目标主机硬盘根目录)
             封装initrd
                 find . | cpio -H newc -o --quiet | gzip -9 -n > /tmp/initrd.gz
           2 挂载目标主机的硬盘,移植内核和模块
             mount /dev/sdc1 /mnt/boot/  && mount /dev/sdc2 /mnt/sysroot/
             创建硬盘grub引导目录
            grub-install --root-directory=/mnt /dev/sdc
  显示如下:
Probing devices to guess BIOS drives. This may take a long time.
Installation finished. No error reported.
This is the contents of the device map /mnt/boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(fd0) /dev/fd0
(hd0) /dev/sda
(hd1) /dev/sdb
(hd2) /dev/sdc   
          /mnt/boot/ 应该显示如下
          [root@server70 ~]# ls /mnt/boot/
           grub  lost+found
          复制copy 制作的initrd.gz和vmlinuz
            cp /tmp/initrd.gz /mnt/boot/
            cp /boot/vmlinuz-2.6.18-164.el5 ./vmilinuz
          创建根目录下必须的目录和文件
           mkdir etc bin sbin boot var lib tmp proc sys root home usr
           cp /sbin/init sbin/(cp init文件)
           cp 依赖得库文件
              查找依赖文件  ldd /sbin/init
                cp 依赖文件 到/lib
                cp -d /lib/libdl.so.2  /lib/libdl-2.5.so /lib/libsepol.so.1 lib/
                cp -d /lib/libc.so.6  /lib/libc-2.5.so lib/
                cp -d /lib/ld-linux.so.2  /lib/ld-2.5.so lib/
                cp -d /lib/libselinux.so.1 lib/
             查询结果:
[root@server70 sysroot]# ls lib
ld-2.5.so      libc-2.5.so  libdl-2.5.so  libselinux.so.1
ld-linux.so.2  libc.so.6    libdl.so.2    libsepol.so.1
           创建/etc/inittab配置文件
            目录为/mnt/sysroot
             cat etc/inittab <<EOF
             >#inittab
             >id:3:initdefault:
             >si::sysinit:/etc/rc.d/rc.sysinit
             >EOF
           编辑etc/rc.d/rc.sysinit文件
             cat etc/rc.d/rc.sysinit <<EOF
             >#!/bin/bash
             >#
             >echo -e "\tWelcome to \033[34mtty\033[0m linux."
             >/bin/bash
             >EOF
             chmod +x etc/rc.d/rc.sysinit
           复制cp /bin/bash和库文件
             cp /bin/bash bin/
             cp /lib/libtermcap.so.2 /lib/libtermcap.so.2.0.8  lib/
          编辑grub.conf文件(目录/mnt/boot/)
             cat grub.conf <<EOF
             >default=0
             > timeout=5
             >title tty linux(2.6.18)
             >root (hd0,0)
             >kernel /vmlinuz ro root=/dev/sda2
             >initrd /initrd.gz
             >EOF
             链接文件  ln -s grub.conf menu.lst
    至此完成,可以新建一个虚拟机启动这个ttylinux.