我的initrd.img
时间:2008-02-01
来源:互联网
这是我的 initrd.img 文件列表,该有的都有了,大家可以以此做个 livecd,做出的 livecd 大概 4M
我用来做自己的 lfs 发行版
版本是 lfs 6.3
. ./lost+found ./bin ./bin/bash ./bin/tar ./bin/rm ./bin/mount ./bin/sh ./bin/cp ./bin/stty ./bin/mountpoint ./bin/grep ./bin/cat ./bin/echo ./bin/ls ./bin/bzip2 ./bin/umount ./dev ./dev/console ./dev/core ./dev/fd ./dev/null ./dev/pts ./dev/shm ./dev/stderr ./dev/stdin ./dev/stdout ./etc ./etc/udev ./etc/udev/rules.d ./etc/udev/rules.d/60-persistent-storage.rules ./etc/udev/rules.d/81-cdrom.rules ./etc/udev/rules.d/70-persistent-cd.rules ./etc/udev/rules.d/95-udev-late.rules ./etc/udev/rules.d/25-lfs.rules ./etc/udev/rules.d/60-cdrom_id.rules ./etc/udev/rules.d/26-modprobe.rules ./etc/udev/rules.d/75-cd-aliases-generator.rules ./etc/udev/rules.d/27-firmware.rules ./etc/udev/rules.d/60-persistent-input.rules ./etc/udev/rules.d/75-persistent-net-generator.rules ./etc/udev/rules.d/70-persistent-net.rules ./etc/udev/rules.d/05-udev-early.rules ./etc/udev/udev.conf ./etc/rc.d ./etc/rc.d/init.d ./etc/rc.d/init.d/functions ./etc/rc.d/init.d/mountfs ./etc/rc.d/init.d/mountkernfs ./etc/rc.d/init.d/rc ./etc/rc.d/init.d/udev ./etc/rc.d/init.d/udev_retry ./etc/rc.d/rcsysinit.d ./etc/rc.d/rcsysinit.d/S40mountfs ./etc/rc.d/rcsysinit.d/S45udev_retry ./etc/rc.d/rcsysinit.d/S00mountkernfs ./etc/rc.d/rcsysinit.d/S10udev ./etc/sysconfig ./etc/sysconfig/rc ./etc/fstab ./etc/vimrc ./lib ./lib/libc.so.6 ./lib/ld-linux.so.2 ./lib/librt.so.1 ./lib/libpthread.so.0 ./lib/libreadline.so.5 ./lib/libhistory.so.5 ./lib/libncursesw.so.5 ./lib/libdl.so.2 ./lib/libblkid.so.1 ./lib/libuuid.so.1 ./lib/udev ./lib/udev/devices ./lib/udev/devices/core ./lib/udev/devices/fd ./lib/udev/devices/null ./lib/udev/devices/pts ./lib/udev/devices/shm ./lib/udev/devices/stderr ./lib/udev/devices/stdin ./lib/udev/devices/stdout ./lib/libext2fs.so.2 ./lib/libcom_err.so.2 ./lib/libe2p.so.2 ./lib/libbz2.so.1.0 ./linuxrc ./mnt ./mnt/cdrom ./mnt/lfs ./proc ./sbin ./sbin/udevd ./sbin/udevsettle ./sbin/udevtrigger ./sbin/fdisk ./sbin/mkfs ./sbin/mkfs.ext2 ./sbin/mkfs.ext3 ./sbin/mkswap ./sbin/swapon ./sys ./usr ./usr/bin ./usr/bin/udevtest ./usr/bin/vi ./usr/sbin ./usr/sbin/chroot
#!/bin/bash /etc/rc.d/init.d/rc sysinit echo 'Hello, world!' bash exit
#!/usr/local/bin/php <?php $pre="/livecd"; $lddfile=$pre."/"."lddfiles.dat"; $filez=file($lddfile); print "lddfiles: \n"; foreach ($filez as $file) { exec("/usr/bin/ldd $file",$return); foreach($return as $items) { $itemz = explode(' ', $items); array_pop($itemz); $pop=array_pop($itemz); if($pop <> '') { $pop = ltrim($pop); $fnz[]=$pop; } } $src=rtrim($file); $dst=$pre."/initrd".$src; $dir = dirname($dst); # print "dirsrc: $dir \n"; if (!file_exists($dir)) { mkdir($dir); } print "$src => $dst\n"; exec("cp $src $dst"); } print "lib files: \n"; foreach ($fnz as $src) { # print "src: $src \n"; $dst=$pre."/initrd".$src; $dir = dirname($dst); # print "dirsrc: $dir \n"; if (!file_exists($dst)) { if (!file_exists($dir)) { mkdir($dir); } exec("cp $src $dst"); print "$src => $dst\n"; } } ?>
作者: ServerOnly 发布时间: 2008-02-01
1. 我不懂 php,上面说是用来抓库的,但是我该如何设置哪些库该抓呢?
2. linuxrc 里面只有 "Hello, world!",那麽库是怎样加载的呢?
3. 以上 php 脚本只是制作 initrd 时需要,并非完成後启动时所需的吧?
请 Server 兄解说一下,谢谢!
作者: d00m3d 发布时间: 2008-02-04
1. 我不懂 php,上面说是用来抓库的,但是我该如何设置哪些库该抓呢?
那要看你需要什么命令,然后运行 ldd xxxx 检查
2. linuxrc 里面只有 "Hello, world!",那麽库是怎样加载的呢?
Hello, world 需要运行 echo, 需要找到 echo 所依赖的库
3. 以上 php 脚本只是制作 initrd 时需要,并非完成後启动时所需的吧?
没错
我不知道哪些是你已经知道的,哪些是不知道的,我就详细说一下整个过程:
1. 首先这个 livecd 是一个全裸奔的系统,也就是说没有安装任何一个软件包,需要什么文件就从系统里 cp 什么文件
2. 我们知道安装 grub 并加载 kernel 后 linux 已经运行了。但此时还有很多工作要做
LFS 里是要运行 rc sysinit, 也就是说要运行 /etc/rc.d/rcsysinit.d/* (当然全是 /etc/rc.d/init.d/* 的链接)
于是我就首先 cp 了 /etc/sysconfig/rc, /etc/rc.d/rcsysinit.d/ 以及 /etc/rc.d/init.d/ 里我认为需要的东西:
./etc/rc.d/rcsysinit.d/S40mountfs
./etc/rc.d/rcsysinit.d/S45udev_retry
./etc/rc.d/rcsysinit.d/S00mountkernfs
./etc/rc.d/rcsysinit.d/S10udev
主要目的是加载设备
(当然不需要这么复杂,但我试了几次 udevd 不成功,于是干脆照搬 LFS 的启动脚本。这是一种偷懒的行为。在 linuxrc 里不运行 rc sysinit 而是直接 udevd --daemon 才是汉子)
3. 之后我们需要一些程序使这个 livecd 可用,经过反复试验,我觉得作为一个发行版所需要的命令应该有:
/usr/sbin/chroot /sbin/mkswap /bin/bzip2 /bin/cat /bin/echo /bin/tar /sbin/fdisk /bin/rm /bin/grep /bin/mountpoint /bin/stty /bin/bash /bin/ls /bin/mount /bin/umount /bin/cp /sbin/udevd /sbin/udevtrigger /sbin/udevsettle /sbin/mkfs /sbin/mkfs.ext2 /sbin/mkfs.ext3
并且需要这些命令所依赖的库
怎么知道需要什么库呢?需要运行:
ldd xxxx
比如 ldd /bin/bash 结果是这样:
root@lfs:/livecd# ldd /bin/bash linux-gate.so.1 => (0xffffe000) libreadline.so.5 => /lib/libreadline.so.5 (0xb7f85000) libhistory.so.5 => /lib/libhistory.so.5 (0xb7f7e000) libncursesw.so.5 => /lib/libncursesw.so.5 (0xb7f31000) libdl.so.2 => /lib/libdl.so.2 (0xb7f2d000) libc.so.6 => /lib/libc.so.6 (0xb7e02000) /lib/ld-linux.so.2 (0xb7fb6000) root@lfs:/livecd#
读取lddfiles.dat (里面放上你需要的命令), 找到 lddfiles.dat 里所有命令需要的库,cp 之。
4. 请注意,步骤2和步骤3是穿插进行的,因为那些 /etc/rc.d/init.d/* 也要执行命令
5. 于是这个全裸奔的系统具备了一切需要的东西:
kernel, 命令及其库 -- 这不就是一个 linux 系统的全部吗?
里面有 fdisk, mkfs, mount, tar, chroot (这也是大致的使用顺序) ,(vi, grub 等我看就不需要了. 我们有chroot :-) ),然后就可以把你的 lfs 打包放上去了。
不知道解释清楚没有
根本思路及原理: linux 是由命令以及命令所依赖的库组成的,找到它们,cp 之
这是运行我那个脚本的输出,效果是复制 => 左边的文件到 => 右边位置,目录不存在时自动创建:
lddfiles: /usr/sbin/chroot => /livecd/initrd/usr/sbin/chroot /sbin/mkswap => /livecd/initrd/sbin/mkswap /bin/bzip2 => /livecd/initrd/bin/bzip2 /bin/cat => /livecd/initrd/bin/cat /bin/echo => /livecd/initrd/bin/echo /bin/tar => /livecd/initrd/bin/tar /sbin/fdisk => /livecd/initrd/sbin/fdisk /bin/rm => /livecd/initrd/bin/rm /bin/grep => /livecd/initrd/bin/grep /bin/mountpoint => /livecd/initrd/bin/mountpoint /bin/stty => /livecd/initrd/bin/stty /bin/bash => /livecd/initrd/bin/bash /bin/ls => /livecd/initrd/bin/ls /bin/mount => /livecd/initrd/bin/mount /bin/umount => /livecd/initrd/bin/umount /bin/cp => /livecd/initrd/bin/cp /sbin/udevd => /livecd/initrd/sbin/udevd /sbin/udevtrigger => /livecd/initrd/sbin/udevtrigger /sbin/udevsettle => /livecd/initrd/sbin/udevsettle /sbin/mkfs => /livecd/initrd/sbin/mkfs /sbin/mkfs.ext2 => /livecd/initrd/sbin/mkfs.ext2 /sbin/mkfs.ext3 => /livecd/initrd/sbin/mkfs.ext3 lib files: /lib/libc.so.6 => /livecd/initrd/lib/libc.so.6 /lib/ld-linux.so.2 => /livecd/initrd/lib/ld-linux.so.2 /lib/libuuid.so.1 => /livecd/initrd/lib/libuuid.so.1 /lib/libbz2.so.1.0 => /livecd/initrd/lib/libbz2.so.1.0 /lib/librt.so.1 => /livecd/initrd/lib/librt.so.1 /lib/libpthread.so.0 => /livecd/initrd/lib/libpthread.so.0 /lib/libreadline.so.5 => /livecd/initrd/lib/libreadline.so.5 /lib/libhistory.so.5 => /livecd/initrd/lib/libhistory.so.5 /lib/libncursesw.so.5 => /livecd/initrd/lib/libncursesw.so.5 /lib/libdl.so.2 => /livecd/initrd/lib/libdl.so.2 /lib/libblkid.so.1 => /livecd/initrd/lib/libblkid.so.1 /lib/libext2fs.so.2 => /livecd/initrd/lib/libext2fs.so.2 /lib/libcom_err.so.2 => /livecd/initrd/lib/libcom_err.so.2 /lib/libe2p.so.2 => /livecd/initrd/lib/libe2p.so.2
整个制作过程是一个循环:
生成 iso 并尝试启动 发现缺少某个命令 调整 lddfiles.dat 运行 php 脚本
启动后就是附图样子
最后我认为此文应该加精,是精华贴 "LiveCD是这么产生的 " 的裸奔版(或scratch 版)
与其不同的是:他是编译安装需要的包,而我是直接从系统复制,所以我只需要4M
另外,加上 httpd 恐怕就是传说中 5M 的 apache 了(看了下httpd, 1.8M, 蛮大地说),有空我会试试
sc.jpg (111.8 KB, 61 次查看) |
作者: ServerOnly 发布时间: 2008-02-04
赞 !
作者: tfkdmwmqtr 发布时间: 2008-02-04
经 Server 兄解说现在明白了,既然兄弟们都认同了,也没必要吝啬,精上!
最後建议 Server 兄换个醒目一点的标题,方便日後兄弟们查找,谢谢分享
作者: d00m3d 发布时间: 2008-02-04
昨晚临时写的,比较仓促,有啥bug在这里说。@~@。
gld.pl.bz2 (1.1 KB, 17 次查看) |
作者: 晨想 发布时间: 2008-02-04
作者: ServerOnly 发布时间: 2008-02-04
另外,加上 httpd 恐怕就是传说中 5M 的 apache 了(看了下httpd, 1.8M, 蛮大地说),有空我会试试 |
我也有些心痒痒了。
作者: tfkdmwmqtr 发布时间: 2008-02-04
作者: 晨想
贡献一个 perl 的,代替那个 php 的。
昨晚临时写的,比较仓促,有啥bug在这里说。@~@。 |
作者: d00m3d 发布时间: 2008-02-04
作者: 晨想 发布时间: 2008-02-05
作者: ServerOnly 发布时间: 2008-02-05
至于 5M 的系统,估计你要重新设计了,比如 libc 用 ulibc 代替,shell 用 busybox 等,反正有主系统,想加什么都容易的。
作者: 晨想 发布时间: 2008-02-05
新的可以处理相对路径以及绝对路径的文件,命令行也可以指定多个文件名了。:)。
getldd.bz2 (1.2 KB, 18 次查看) |
作者: 晨想 发布时间: 2008-02-05
作者: d00m3d 发布时间: 2008-02-05
另外,大家怎么都不睡觉啊
作者: ServerOnly 发布时间: 2008-02-05
已经测试通过。
感谢晨想提供的 perl 脚本,比我那个 php 的强
livecd.bz2 (4.3 KB, 51 次查看) |
作者: ServerOnly 发布时间: 2008-02-05
作者: d00m3d 发布时间: 2008-02-05
作者: d00m3d
晨晨顺便解说一下脚本吧
|
作者: 晨想 发布时间: 2008-02-05
作者: d00m3d 发布时间: 2008-02-06
作者: 晨想 发布时间: 2008-02-10
我在尝试弄一个只在ram内存在的系统。谢谢lz的启发和df的脚本。呵呵。
作者: idisblueflash 发布时间: 2008-02-12
作者: idisblueflash 发布时间: 2008-02-12
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28