感谢大家!
分类: LINUX
2008-02-12 23:58:45
mkdir -pv /opt/iso/{boot,modules} cd /opt/iso
cd / mksquashfs bin lib sbin usr SYSTEM
mv /SYSTEM /opt/iso
cd /opt/iso/boot mkdir initrd dd if=/dev/zero of=initrd.img bs=1M count=8 mkfs.ext2 initrd.img mount -o loop initrd.img initrd
export INITRD=/opt/iso/boot/initrd cd ${INITRD} mkdir bin boot dev etc lib proc sbin sys
cp -a /bin/bash ${INITRD}/bin
mv /opt/iso/modules ${INITRD}/lib
cp -a /lib/udev ${INITRD}/lib
cp -a /lib/firmware ${INITRD}/lib
cp -a /dev/{console,null} ${INITRD}/dev
cp -a /etc/udev ${INITRD}/etc
cat > ${INITRD}/linuxrc << "EOF" #!/bin/bash mount -t proc proc /proc mount -t sysfs sysfs /sys # 如果你将loop模块化,那么需要加入 /sbin/modprobe loop # 建立/dev设备目录,并使用udev来创建各种设备文件 mount -n -t tmpfs -o mode=0755 udev /dev cp --preserve=all --recursive --remove-destination /lib/udev/devices/* /dev chmod 1777 /dev/shm echo "" > /sys/kernel/uevent_helper echo "Starting Udev..." /sbin/udevd --daemon mkdir -p /dev/.udev/queue /sbin/udevtrigger /sbin/udevsettle # 创建用户使用环境 # 在/SYSTEM中准备目录结构 export SYSTEM=/SYSTEM mkdir -p ${SYSTEM} mount -t tmpfs tmpfs ${SYSTEM} mkdir -p ${SYSTEM}/{system,cdrom,dev,proc,sys,tmp,mnt,initrd,home,root} chmod 0777 ${SYSTEM}/tmp chmod 0700 ${SYSTEM}/root # 搜索LiveCD所在的设备 for i in /proc/ide/hd* do if test `cat $i/media` = "cdrom" ; then mount -t iso9660 /dev/`basename $i` ${SYSTEM}/cdrom 2>/dev/null if test $? = 0 ; then if [ -f ${SYSTEM}/cdrom/LABEL ] ; then if grep -q "Sunhaiyong's LiveCD" ${SYSTEM}/cdrom/LABEL ; then break; fi fi umount ${SYSTEM}/cdrom fi fi done # 加载squashfs压缩的主文件系统 mount -o loop -t squashfs ${SYSTEM}/cdrom/SYSTEM ${SYSTEM}/system ln -s /system/bin ${SYSTEM} ln -s /system/sbin ${SYSTEM} ln -s /system/lib ${SYSTEM} ln -s /system/usr ${SYSTEM} # 将根目录从initrd转换到主系统 killall /sbin/udevd echo 0x0100 > /proc/sys/kernel/real-root-dev pivot_root ${SYSTEM} ${SYSTEM}/initrd cd / # 解压缩一些必要的目录和文件 tar xf /cdrom/etc.tar.bz2 -C / #转移内核文件系统 mount --move /initrd/dev /dev mount --move /initrd/proc /proc mount --move /initrd/sys /sys mkdir -p /var/{run,log,lock} touch /var/run/utmp /var/log/{btmp,lastlog,wtmp} chgrp utmp /var/run/utmp /var/log/lastlog chmod 664 /var/run/utmp /var/log/lastlog #结束 EOF
cp -a /bin/{bash,bunzip,bzcat,bzip2,killall,chmod,cp,grep,mount,tar,ln,cat,mkdir} ${INITRD}/bin cp -a /usr/bin/basename ${INITRD}/bin cp -a /sbin/pivot_root ${INITRD}/sbin cp -a /sbin/{udevd,udevsettle,udevtrigger,modprobe} ${INITRD}/sbin
cp -a /lib/ld-* ${INITRD}/lib/ cp -a /lib/libc-2.5.1.so ${INITRD}/lib/ cp -a /lib/libc.so.6 ${INITRD}/lib/ cp -a /lib/lib{dl,pthread,rt}-* ${INITRD}/lib/ cp -a /lib/lib{readline,history,ncursesw,dl,bz2,blkid,uuid,rt,pthread}.so* ${INITRD}/lib/
touch ${INITRD}/etc/fstab
echo "Sunhaiyong's LiveCD" > /opt/iso/LABEL
cd /opt/iso/boot umount initrd gzip -9 initrd.img
cd /opt/iso cp -a /etc ./
tar -cjf etc.tar.bz2 etc rm -r etc
cd /opt/iso mkdir -p boot/grub cp -a /usr/lib/grub/i386-pc/stage2_eltorito boot/grub
cd /opt/iso/boot/grub cat > menu.lst << "EOF" default 0 timeout 3 color green/black light-green/black title MyLiveCD 1.0 root (cd) kernel /boot/kernel initrd /boot/initrd.img.gz
cd /opt mkisofs -R -b boot/grub/stage2_eltorito -no-emul-boot -boot-load-size 4 -boot-info-table -o mylivecd.iso iso
chinaunix网友2011-02-11 19:06:19
豹哥辛苦,辛苦。小弟才看到你的文章目前再学习“建立自己的linux系统6.3-r2145”这块,非常感谢你为我这样的菜菜鸟指明,再次感谢~
chinaunix网友2011-02-10 19:06:29
我在LFS基础上装cdrtools的 编译的时候出现这种错误 网上搜索了n久也没有找到原因
请问高人 这怎么解决
../RULES/r-gmake.dep:76: OBJ/
chinaunix网友2011-02-10 15:13:38
回“Enrique”:你可以看看Fedora的安装程序,这个我没有什么研究,但我做过一个终端方式的安装程序用在我自己设计的Olive上,是使用bash脚本和dialog程序来实现的。
chinaunix网友2011-02-10 14:53:08
豹哥你好 我现在在做一个linux发行版本的安装程序,您看看我这启动过程对吗?我觉得linux发行版本的安装程序的启动过程和LIVECD的启动过程应该差不多! 1.光盘引导程序(isolinux) 2.装入内核,同时装入RAMDISK 3.内核进入initrd中的linuxrc 4.进入根文件系统中的/sbin/init 5.进入根文件系统中的/etc/inittab 6.启动安装程序 7.安装linux 其中第6步骤启动安装程序 我在网上找相关的资料一直没什么收获 你有没有相关的资料或者一些相关的开源项目
chinaunix网友2010-12-10 20:29:35
回“wxynothing”:你可以到网上去看看Grub设置方面的文章,要做好还是有许多工作要做,本文也只是针对LiveCD的制作进行探讨,还有很多深入的东西需要大家来挖掘。