我能通过清单构建一个Ubuntu镜像吗?

1个回答

文件系统清单是通过以下命令生成的:
dpkg-query -W --showformat='${Package} ${Version}\n' > casper/filesystem.manifest

语法如下:包名 版本号,例如:
 xserver-xorg-video-nouveau  1:0.0.16+git20110411+8378443-1
dpkg --get-selections 的格式稍有不同,是 package_name install
示例:
xserver-xorg-video-nouveau  install 

所以你可以以多种方式使用这个文件。
apt-get install -y $(awk '{print $1}' filesystem.manifest)

说实话,经过多年的自定义iso制作,对其工作原理有一定的学习曲线。一旦你了解了一些基本知识,就不会太难,只是所需的知识相对较多,并且没有一个单一、最新的信息来源。
你需要使用两个构建目录。
~/custom - build directory for the iso
~/rootfs - build directory for the root file system.

自定义 - 这个目录包含所有将放入最终iso的文件。它包含根文件系统、内核、initramfs和isolinux。

rootfs - 这个目录包含Live CD文件系统,您可以使用mksquashfs压缩此目录,并将其包含在CD中。您可以使用debootstrap构建它(从头开始创建Live D),或者从ubuntu-desktop.iso中提取文件系统(定制一个Live CD)。有关详细信息,请参阅下面的Ubuntu Wiki链接。

关键要点

1) 理解mksquashfs - 您可以使用mksquashfs将根文件系统压缩为casper/filesystem.squashfs

sudo mksquashfs /home/bodhi/rootfs custom/casper/filesystem.squashfs

2) 理解isolinux - 这使得iso文件可引导,以及您的CD(引导)菜单。请参考Arch Linux Wiki syslinux
您可以使用grub2作为isolinux的替代方案,但是您需要理解grub2的工作原理;)。大多数Live CD仍在使用isolinux。
3) 如何制作initramfs。initramfs是第二个文件系统,用于引导。通常当您遇到问题(自定义引导映像无法工作,内核模块无法加载),并且通过查看根文件系统无法理解原因时,答案很可能在initramfs中。
#extract to a working_directory , I use ~/initrd
cd ~/initrd
lzma -dc -S .lz ../initrd.lz | cpio -imvd --no-absolute-filenames

# Make your edits / adjustments
# Package
cd ~/initrd
find . | cpio --quiet --dereference -o -H newc | lzma -7 > ../custom.initrd.lz

然后将您的新initrd.lz移动到自定义构建目录custom/casper/initrd.lz

4) casper。Casper和casper脚本位于3个位置,并且所有3个位置都可以发挥作用。它们都是bash脚本,某个时候您几乎肯定会想要查看它们。

A. 主机 - /usr/share/initramfs-tools/scripts/casper

B. 根文件系统 - custom/usr/share/initramfs-tools/scripts/casper

C. 在initramfs中 - 请参见/scripts目录。

请参见Ubuntu man casper

5) 您可以在/usr/share/usr/share/gnome*等位置对用户界面/应用程序进行自定义,具体位置因版本而异,/usr/share/gnome-background-properties/ubuntu-wallpapers.xml是一个经典的例子,在各个版本中都相当标准。

6) 如果您无法在 /usr/share/ 进行自定义设置,可以使用 /etc/skel ,这里的 /etc/skel/.bashrc 是一个经典示例,该文件会被复制到 ~/.bashrc 。您可以将各种配置文件放在那里,例如针对 Firefox 或 Gnome 等等,但如果可能的话,/usr/share 是更好的选择(根据设置而异)。
7) 使用 mkisofs 将构建目录转换为 ISO 文件。
cd ~/custom
sudo mkisofs -D -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../ubuntu-12.04-custom.iso .

8) 坚持不懈。您可以使用坚持不懈的方式来使用许多Live CD,包括ubuntu-desktop CD和自定义CD,这是通过casper实现的。

A. root - casper将一个标记为casper-rw的分区或文件挂载为/上的cow叠加层。如果您安装了一个软件包或修改了配置文件,这些更改将在重新启动后保留。

请谨慎使用此功能。如果更新所有软件包,将占用大量空间。我还发现这种方法有时会出现错误。

B. Home - casper将一个标记为home-rw的分区或文件挂载为/home上的cow叠加层。

我更喜欢这种方式,因为我的Firefox书签和私人数据将在重启后得以保留,并且我认为它更可靠。

持久化Home(将其更改为casper-rw以实现持久化/)

# this is a 1 Gb file, increase or decrease the count to make it larger or smaller
dd if=/dev/zero of=home-rw bs=1M count=1000

# make a file system
mkfs.ext4 home-rw
mke2fs 1.41.14 (22-Dec-2010)
home-rw is not a block special device.
Proceed anyway? (y,n) y <-- ANSWER 'y' here

#tune the file system to remove reserved blocks and label it 'home-rw'
tune2fs -m 0 -L home-rw home-rw

home-rw放置在/(分区的根目录)或闪存驱动器上(不要放在子目录中)。
当您启动Live CD时,请按F6键,然后按Esc键,在“--”前面的引导参数中添加选项persistent
quiet splash persistent --

然后,Casper引导脚本将自动找到并挂载它。

参见Ubuntu wiki Persistence - Ubuntu维基页面仅讨论了casper-rw,但是home-rw在casper脚本中被引用,并且以相同的方式工作,只是名称已更改。

参见这篇帖子在Ubuntu论坛上进行屏幕截图演示(尽管选项不同)。

C. 您可以使用几个图形工具启用持久性,例如unetbootin。据我所知,图形工具使用casper-rw

好了,现在一旦您理解了所有这些,这两个页面将变得更加有意义

Ubuntu wiki从头开始制作live cd

Ubuntu wiki定制live CD

Google

你需要使用谷歌搜索。你会在互联网上找到各种建议的片段。
例如:如何更改Live CD启动画面

Debian Live

现在你已经理解了所有这些,使用Debian Live脚本。不要被名字所迷惑,这些脚本在任何.deb系统上都可以正常工作,包括Mint和Ubuntu。
安装方法:
sudo apt-get install live-build

有一个图形界面
sudo apt-get install live-magic

live-magic

明白,就像remastersys和其他图形界面一样,live-magic图形界面可能会失败。在这种情况下,您可以回退到live-build脚本(live-magic将生成一个构建目录)。
学习live-build脚本和目录布局/结构需要一些时间。
请参阅Debian Live Manuel。是的,它很长,但只需逐个iso文件进行操作即可。
了解了live CD的组成部分后,使用live-build脚本的优势在于自动化了90%以上的构建过程,并且进行更改只需简单编辑配置文件(通常如此),有时需要构建initramfs。
太长了
如果对您来说太长了,请深呼吸,放松一下,逐部分阅读信息。我保证它会开始变得有些意义,并且您会发现投入的时间是非常值得的。
如果您先使用其他工具集,再回到这套工具集并制作几个iso文件,您会对这套说明感激不尽的;)
我的自定义12.04版本,它支持gma500,开箱即用的2D(没有3D)(将在接下来的几天内向gma 500用户公开提供ISO镜像)。

gma 500


1哦天啊。这个回答太棒了。我知道我今晚要做什么了。 - jrg
好的。如果这个不能得到40票,那么其他人也不应该得到它们 ;) - Rinzwind
对于任何感兴趣的人,我提供了一个重新制作的版本,详细信息和下载请参阅我的博客(也在Ubuntu Planet上)。http://blog.bodhizazen.net/linux/ubuntu-gma500-live-cd/ - Panther