制作一个grub引导的5M大小的ttylinux

一. ttylinux简介:

i.ttylinux 是一个基于2.6版内核、体积非常之小(5M左右的LiveCD)的Linux。它运行于i486以上平台的PC机上,安装之后,ttylinux的文件系统也只有8M大小,但却提供了一个完整的shell环境,并且可用来访问Internet;

ii.ttylinux可以为嵌入式应用提供一个实用的平台,也可以将其安装于U盘等移动存储上以提供一个便携的Linux系统。你甚至还可以将其安装在硬盘.

二.环境:

bootcd-i486-9-RC1.iso镜像 # http://linux.yosh.se/ttylinux/

[root@redhat iso]# uname -a

Linux redhat.domain.com 2.6.9-67.EL #1 Wed Nov 7 13:41:13 EST 2007 i686 i686 i386 GNU/Linux

三.详细过程:

A.制作一个基于grub引导的 ttylinux LiveCD.

1创建iso目录作为制作LiveCD的根的目录,并在其中创建grub所需的目录

# mkdir -pv iso/{ttylinux,boot/grub}

2复制grub可引导的光盘所需的引导程序

# cp /usr/share/grub/i386-redhat/stage2_eltorito iso/boot/grub

######若要实现硬盘安装##########

# cp -rv /usr/share/grub/i386-redhat/* iso/boot/grub

3将下载到的ttylinux iso镜像文件/root,并拷贝其文件

# mount -o loop /root/bootcd-i486-9-RC1.iso /media/cdrom

# cp -rv /media/cdrom/boot/* iso/ttylinux/

4grub建立配置文件

# vim /root/iso/boot/grub/grub.conf

编辑内容如下:

default 0

timeout 10

color light-green/black light-magenta/black

title My ttylinux(ttylinux-9-2)

root (cd)

kernel /ttylinux/vmlinuz load_ramdisk=1 prompt_ramdisk=0 ramdisk_size=8192 ro

root=/dev/ram0 #内存硬盘

initrd /ttylinux/filesys.gz

5执行如下命令,创建iso镜像:

# mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-

table -o ttylinux.iso iso

6.iso文件架构

# tree iso

iso

|-- boot

| `-- grub

| |-- e2fs_stage1_5

| |-- fat_stage1_5

| |-- ffs_stage1_5

| |-- grub.conf

| |-- iso9660_stage1_5

| |-- jfs_stage1_5

| |-- minix_stage1_5

| |-- myttylinux.iso

| |-- reiserfs_stage1_5

| |-- stage1

| |-- stage2

| |-- stage2_eltorito

| |-- ufs2_stage1_5

| |-- vstafs_stage1_5

| `-- xfs_stage1_5

`-- ttylinux

|-- filesys.gz

|-- isolinux

| |-- boot.cat

| |-- boot.msg

| |-- help.msg

| |-- isolinux.bin

| `-- isolinux.cfg

`-- vmlinuz

4 directories, 22 files

到此为止一个grub引导的ttylinux LiveCD已经制作完成了。您可以使用虚拟机,或刻录成

光盘来引导您的系统了。

B.安装 ttylinux至硬盘

==================================》》要用 IDE 硬盘,负责不能发现硬盘。 我这里用的是VM 7.1版本,其他版本没有试过。

说明:此种方式的实现,须以步骤1中制作完成的LiveCD为基础进行。准备好一台主机,并以制作好的LiveCD启动之。

1、启动此系统,进行基于LiveCD的ttylinux,而后对硬盘进行分区。这里新建了两个主分区 /dev/hda1(100M)和/dev/hda2(5G)并分别挂载于/mnt/hda1和/mnt/hda2中。

分区步骤此处略去……

# mkdir -pv /mnt/hda{1,2}

# mount /dev/hda1 /mnt/hda1

# mount /dev/hda2 /mnt/hda2

2、挂载LiveCD至当前系统,并复制所需文件

# mount /dev/hdc /mnt/cdrom

# cp -r /mnt/cdrom/boot/grub/ /mnt/hda1/

# cp /mnt/cdrom/ttylinux/{vmlinuz,filesys.gz} /mnt/hda1/

3、复制ttylinux系统文件至/dev/hda2

# cp -r /{etc,bin,sbin,var,lib,home,root,usr,dev,tmp} /mnt/hda2

# mkdir /mnt/hda2/{boot,proc,sys,mnt/cdrom}

4、编辑/mnt /hda1/grub/grub.conf,确保其为以下内容:

default 0

timeout 10

color light-green/black light-magenta/black

title My ttylinux(ttylinux-9-RC1 on Harddisk Final)

root (hd0,0)

kernel /vmlinuz ro root=/dev/hda2

initrd /filesys.gz

5、重新启动系统,安装grub至硬盘MBR

在grub的启动界面按"c"键进行grub的命令行模式,而后执行如下命令:

grub> root (hd0,0)

grub> setup (hd0)

6、退出LiveCD光盘,重新启动系统即可从硬盘启动ttylinux

下面为补充设置:

7、启动网络功能

# vi /etc/sysconfig/network-scripts/ifcfg-eth0

ENABLE=no

修改为

ENABLE=yes

而后使用下面命令启动激活网卡:

# ifup eth0

8、设置root用户的环境,增加环境变量PS1

# vi /root/.bash_profile

添加如下行:

export PS1=’[\u@\h \W]’\#

而后重新读取该文件

# source /root/.bash_profile

9、修改主机名

# vi /etc/HOSTNAME

修改里面的字符串为您所希望的主机名即可。

10、修改/etc/fstab,使用其开机能正常挂载所需文件系统

/dev/hda2 / ext3 defaults 1 1

/dev/hda1 /boot ext3 defaults 1 2

tmpfs /dev tmpfs noauto 0 0

devpts /dev/pts devpts gid=5,mode=0620 0 0

tmpfs /dev/shm tmpfs rw,noexec,nosuid,size=24k 0 0

proc /proc proc noauto 0 0

sysfs /sys sysfs noauto 0 0

错误总结:

最容易也是最经常出现的错误就是如法找到kernel文件,但是我们的配置文件中又什么都有,看不出来错误,这里如果是虚拟机的话,建议认真再做一次,如果是真实机的话,可以再编译一次。

grub> root (hd0,0)
Filesystem type is xfs, partition type 0x83
grub> setup (hd0)
Checking if "/boot/grub/stage1" exists... no
Checking if "/grub/stage1" exists... no
Error 15: File not found

该错误在找不到指定的文件时出现, 但是此时像磁盘或分区信息这样的其他配置都没问题(只是找得到相应的分区或磁盘, 至于对不对它可不管). 一般来说没找到的文件以kernel居多. 首先需要确认一下在你的/boot里的那个kernel, 如果需要存在于你/boot里那个kenel的完整的文件名, 使用livecd, rescue盘或其他安装在硬盘上的linux系统引导成功后挂载那时在配置Grub时候指定的/分区和/boot(需要的话), 然后使用chroot进入那时的根分区, 使用下面的命令进行查找.

 

代码:

# cd /usr/src/linux/
# make menuconfig
# make
完成之后拷贝进/boot:
# cp /usr/src/linux/arch/i386/boot/bzImage /boot

重命名一下 kernel, 和你在grub.conf中指定的一样就可以了. 顺便再检查一下grub.conf中kernel那行引用的分区是否正确.
除 了kernel的丢失或损坏, BIOS无法识别存放Grub的stages和kernel的硬盘分区也会出现相同的Missing 错误.同时存放Grub的stages和kernel的分区不应该是使用software RAID-5(或者是使用其他优化存储技术的分区, 比如LVM或LVM2)的.

ttylinux更详细内容请看http://minimalinux.org/ttylinux/