前期准备工作
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.