首先要把 CDlinux 的内容从 ISO 镜像里展出来,先挂载它:
# mount -o loop CDlinux-x.x.x.iso /some/where
这样 CDlinux 里的具体内容就都在 /some/where 目录下了。假设你已经把其它要刻到盘上的软件都放到了 /mycd 目录下,现在把 CDlinux 也拷到那个目录里:
# cp -p -r /some/where/* /mycd
接下来 cd /mycd,打开 mkisofs.sh 文件,根据你自己的具体情况进行必要的修改,存盘退出。最后,执行:
# ./mkisofs.sh
生成新的光盘镜像,缺省情况下新镜像是 /tmp/1.iso。现在就可以它刻录出来了。
注意,通过以上步骤做出的光盘启动时会直接进入 CDlinux,启动效果和原来的 ISO 镜像是一样的。如果你想制作带菜单的多启动光盘,还需要用到 ISOlinux (SYSlinux 的一个组件) 等其它工具,至于如何使用它们,请参见它们各自的文档。
用 Windows 的方法
这个我不太熟,不过我想也不会太麻烦。只要注意以下几点就行了:
- 可以用 WinRAR 来提取光盘镜像里 CDlinux 的内容;
- CDlinux 是通过 boot/CDlinux/CDlinux.img 这个 2.88M 软盘镜像来启动的;
- 请保持 CDlinux 的目录结构,不要改动;
- 不要改变文件/目录名的大小写。
在以下的说明中,我们假设你的 Windows 的“C: 盘”是 FAT16 或者 FAT32 格式的,并且它对应 Linux 下的 /dev/hda1。我们将把 CDlinux 安装到“C: 盘”上。
用 Linux 的方法 (以下操作可以在 CDlinux 也可以在一般的 Linux 系统中进行)
首先,挂上 CDlinux 的 ISO 镜像和 C: 盘:
# mount -o loop CDlinux-x.x.x.iso /mnt/cdrom
# mount /dev/hda1 /mnt/win
(如果你不想装到 C: 盘上,或者你的 C: 盘不是 /dev/hda1,请对上述命令做相应的修改)
然后把 extra/ 目录下的内容拷贝到 C: 上:
# mkdir /mnt/win/CDlinux
# cp -r /mnt/cdrom/boot/CDlinux/extra /mnt/win/CDlinux
接下来,把内核和 initrd 也拷到 C: 盘:
# mount -o loop /mnt/cdrom/boot/CDlinux/CDlinux.img /mnt/floppy
# cp /mnt/floppy/bzImage /mnt/floppy/CDlinux.gz /mnt/win/CDlinux
最后,下载 loadlin (~10k) 并把它展到 C: 盘上:
# tar -C /mnt/win/CDlinux -zxf loadlin.tgz
(这步把“loadlin.exe”和一个“autoboot.bat”批处理文件拷贝到 /mnt/win/CDlinux 目录里。请检查“autoboot.bat”文件,并根据你自己的具体情况做相应的修改。)
现在,可以重启到纯 DOS 环境,用以下命令来启动 CDlinux 了:
C:
CD CDlinux
AutoBoot
在以下的说明中,我们假设你的 USB 盘(U 盘或 USB 移动硬盘)被设定为硬盘模式。上面的第一个分区是 FAT12、FAT16、或者 FAT32 格式的,并且并且它对应 /dev/sda1。
用 Linux 的方法 (以下操作可以在 CDlinux 也可以在一般的 Linux 系统中进行)
首先,在 USB 盘上安装 syslinux:
# syslinux /dev/sda1
挂载 CDlinux 的 ISO 镜像和 USB 盘:
# mount -o loop CDlinux-x.x.x.iso /mnt/cdrom
# mount /dev/sda1 /mnt/win (如果你的 USB 盘不是 /dev/sda1,请做相应的修改)
然后,把 extra/ 目录下的内容拷贝到 USB 盘上:
# mkdir /mnt/win/CDlinux
# cp -r /mnt/cdrom/boot/CDlinux/extra /mnt/win/CDlinux
接下来,把内核和 initrd 以及配置文件也拷过去:
# mount -o loop /mnt/cdrom/boot/CDlinux/CDlinux.img /mnt/img
# cp /mnt/img/* /mnt/win
这一步将把“syslinux.cfg”和一些显示信息等文件拷贝到 /mnt/win 目录下。查一下“syslinux.cfg”,并根据你自己的具体情况做相应的修改。
CDL_DEV=:
告诉 CDlinux 在哪个设备上可以找到附加的“包”和“模块”
缺省值:/dev/cdrom
例子: CDL_DEV=/dev/hda1
CDL_DIR=:
extra/ 目录在 CDL_DEV 的文件系统的那个目录下?
缺省值:boot/CDlinux, CDlinux, zxh/CDlinux
例子: CDL_DIR=APPs/CDlinux
CDL_LOOP:
是否强制以“loop”方式加载“模块”?
缺省值:否,尽量把“模块”挂载到内存里。
例子: CDL_LOOP
以上这三个参数都是可选的,正常从光盘启动时可以一个也不加,使用缺省值即可。如果模块太多或者太大,CDlinux 会自动以“loop”方式加载它们。不过这样一来,在 CDlinux 运行时就不能把光盘拿出来了。
简介:CDlinux 的结构
1. “基本”部分:一张 2.88M 软盘镜像,CDlinux.img
2. “附加”部分:其它附加的“包”和“模块”
“基本”部分就是一张 VFAT 格式的 2.88M 软盘镜像。上面包含了内核和一些最基本的软件,包括:bash (1.14.7)、bftpd (一个小 ftp 服务器)、busybox、bzip2、e2fsprogs、file、find、gawk、grep、gzip、midnight commander (4.1.35)、portmap、sed、tar 和 vim (5.8) 等。如果只是需要一个最基本的 Linux 环境,你可以把 CDlinux 的其它内容统统删掉,只保留这一个文件,一样跑得不错。
- CDlinux 是用 gcc-2.95.3 编译的,链接的是 glibc-2.2.5。你添加的软件最好也是编译、链接自同样的环境;
- 如果你加的软件需要其它的,CDlinux 没有提供的库,请把这些库也一起添加进来。
- “包”的文件名必须是“xxx-cdl.tgz”,否则将被忽略,不会被安装;
- 如果愿意,你还可以为你的包加上一个简短的说明,并把它存为 zxh/SPEC。启动时 CDlinux 会自动把它集成到 /var/log/packages 里。关于 SPEC 的格式,请参照已有的“xxx-cdl.tgz”文件;
- zxh/ 目录里除了 SPEC 以外的所有其它内容都将被忽略,不被安装;
- CDlinux 是在一个小 RAM 磁盘里运行的,所以请尽量把包做得小一点。像 man 和 docs 等文档都可以放到 zxh/ 目录下,这样它们就不会被安装,你以后要查阅起来也比较方便。
制作模块时的的注意事项
- “模块”的文件名必须是“xxx-cdl.md”,否则将被忽略,不会被安装;
- 必须为模块指定一个挂载点。方法是把挂载点写到一个叫“.mount_point”的文件里,并把该文件放到 cramfs 的根目录下。“.mount_point”文件的具体格式可以参考 extra/ 下已有的“xxx-cdl.md”文件;
- 如果该软件需要执行一些初始化操作,可以把初始化程序或脚本命名为“.init”放到 cramfs 的根目录下,并将起属性设置为可执行。启动时 CDlinux 会自动找到并执行 .init;
- 缺省情况下,CDlinux 会尽量把“模块”都加载到内存中,内存不足时才以“loop”方式加载“模块”。如果你想省出更多内存来运行程序,可以在内核命令行里加上 “CDL_LOOP”参数,来强迫 CDlinux 以“loop”方式加载所有模块;
- cramfs 是一种只读文件系统,并且不记录文件的时间信息。
修改 CDlinux 原来的 /etc/profile 文件中带“PS1=”的哪些行,把修改后的结果保存到 system-extra-cdl.tgz 里,仍叫 /etc/profile。
编辑 /etc/inputrc,加上“set +o vi”,把新文件存到 system-extra-cdl.tgz 里,仍叫 /etc/inputrc。
让 CDlinux 自动挂载 C: 盘
编辑 /etc/fstab,把新文件存到 system-extra-cdl.tgz 里。
让 CDlinux 自动加载 AMD PCNET32 网卡的驱动
新建一个脚本,在里面加上“modprobe pcnet32”,然后把它存为 system-extra-cdl.tgz 里的 /etc/rc.d/rc.local。
另外,CDlinux 里自带的那些软件包如果不合你的胃口,也可以改:
把 zhcon 的缺省输入法由拼音改为五笔
# mkdir temp ; cd temp
# tar zxpf /some/where/CDlinux/extra/zhcon-x.x-cdl.tgz
# mv -f zxh/wb/* usr/lib/zhcon
# tar zcpf /some/where/CDlinux/extra/zhcon-x.x-cdl.tgz *
# cd .. ; rm -rf temp
(CDlinux 里带的这个 zhcon 只支持简体中文(GB2312),如果你不需要简体中文支持,可以把它删掉,自己另编译一个支持繁体中文的加上)
让 mkisofs 支持更多的 joliet 代码页(codepage)
CDlinux 里缺省带的 mkisofs 只支持 cp437、cp936(简体中文)、iso8859-1 和 utf8 的 joliet 代码页,如果想换成支持更多代码页(包括 CJK)的版本,可以执行如下操作:
# mkdir temp ; cd temp
# tar zxpf /some/where/CDlinux/extra/cdrtools-x-x.x-cdl.tgz
# mv -f zxh/removed/usr/bin/mkisofs usr/bin
# tar zcpf /some/where/CDlinux/extra/cdrtools-x-x.x-cdl.tgz *
# cd .. ; rm -rf temp
如果不知道驱动是那个模块,可以先“lspci”,在输出结果里找带“Ethernet controller:”字样的行,然后到 /lib/modules/x.x.xx/kernel/drivers/net,参照那些模块的名字,看能不能“蒙”出来到底是哪个模块。要加载比如说名为“xxx.o”模块,可以执行“modprobe xxx”。
一但你的网卡被正确识别了,你可以用如下命令来配置 IP、DNS 等:
# net-config
(如果你用的是 USB-link 线,可以先“modprobe usbnet”,然后当 net-config 问要配置哪个网络接口时输入 usb0。)
或者,如果你所在的网络里有 DHCP 服务器,可以执行:
# dhcpcd start
设置代理服务器可以用:
# proxy-config
修改网卡的 MAC 地址:
# mac-fake
# modprobe aha1542
# modprobe raid0
# mdadm -A /dev/md0 /dev/sda1 /dev/sdb1
好了,现在你可以通过 /dev/md0 来访问这个 RAID0 设备了。
缺省状态下 nfs 服务器没有启动,你需要先编辑、修改一下 /etc/exports,指定 export 哪些目录,和 export 的方式,然后执行:
# nfsd start
CDlinux 里还带了 nfs 和 samba 的客户端。要挂载 nfs 资源:
# mount -t nfs xx.xx.xx.xx:/exported/resource /some/where
挂载 samba 资源:
# ms-sys -2 /dev/hda1
关于 ms-sys 的具体用法,请参见它的文档。
# nukent
然后按提示操作。