我尝试阅读指南预种和定制,但我不明白如何以及在何处修改哪些选项。我只能通过实际的例子来轻松地学习,为此我提出了这个问题。
我正在研究预先植入和定制解决方案以执行一些特定任务:
- 完全重写默认安装的软件包,非常类似于最小安装并带有
--no-install-recommends
标志apt-get
。 - 将一些专有应用程序添加到默认安装列表中
- 在安装和实时会话中自动安装和挂载专有驱动程序
- 编辑默认安装的应用程序的默认配置文件
- 指定分区以及权限
- 修改安装程序介质(CD/DVD/USB)中的软件包池,最好使用类似于
apt-get
和的命令行工具aptitude
。
谁能告诉我如何配置预置选项以仅执行上述操作?
注意:我不明白在池中添加/删除包后的 GPG 部分。
附言第三点尤为重要。
答案1
对于参考预置,您可能希望参考安装指南 - i386,其中包含以下示例预置:
/usr/share/doc/installation-guide-i386/example-preseed.txt.gz
- 完全重写默认安装的软件包,就像最小安装一样
- 将一些专有应用程序添加到默认安装列表中
要提供您想要安装的软件包列表,您可能需要查找以下行:
tasksel tasksel/first multiselect ubuntu-desktop
其中“ubuntu-desktop”可以更改为任意数量的包或元包。
- 在安装和实时会话中自动安装和挂载专有驱动程序
除了指定所需的软件包(用于专有驱动程序)之外,我不确定如何实现这一点。顺便提一下,您“安装”了一个分区,您“加载”了一个内核模块/驱动程序。
- 编辑默认安装的应用程序的默认配置文件
为了进行此类脚本更改,您可能需要研究:
d-i preseed/late_command string ...
其中“...”可以被任意命令替换,例如 sed -i。
- 指定分区以及权限
上面提到的示例预置中有一个分区部分。
无处不在的预置
Casper 支持预置,ubiquity 可以预置许多值。以下是一些可以预置的与 ubiquity 相关的变量:
ubiquity countrychooser/shortlist select US
ubiquity languagechooser/language-name select English
ubiquity localechooser/supported-locales multiselect en_US.UTF-8
ubiquity ubiquity/summary note
ubiquity ubiquity/reboot boolean true
ubiquity ubiquity/poweroff boolean true
ubiquity ubiquity/success_command string ...
其中“...”包含与上面提到的 late_command 相同的内容,success_command 由 ubiquity 读取,而 late_command 由 di 读取。
答案2
下面创建一个修改过的启动映像。将其刻录到 CD 上,或将 ISO 插入虚拟机进行测试。您需要cpio
和genisoimage
(即软件包和可执行文件的名称)。
以下是 Makefile 的形式,但可以交互输入。${IN_ISO}
指的是原始 ISO 映像(我使用了该-alternative
版本,建议您也这样做),${OUT_ISO}
指的是所需的 ISO 名称。
# Extract the ISO image to mount/ and copy it to cdroot/
cdroot:
mkdir -p mount
sudo mount -o loop ${IN_ISO} mount
mkdir cdroot
cd cdroot && tar cf - ../mount --transform 's,^mount/,,' | tar xf -
sudo umount mount && rm -r mount
chmod -R a+rw cdroot
# Copy new files to the disk. Content of those files is posted below
prepare: cdroot
cp isolinux.cfg cdroot/isolinux/isolinux.cfg
test -e ./initrd.orig.gz || cp cdroot/install/initrd.gz ./initrd.orig.gz
mkdir -p initrd
cd initrd && gunzip <../initrd.orig.gz | sudo cpio -i && cd ..
cp preseed.cfg initrd/preseed.cfg
cd initrd && find . | cpio -o --format=newc | gzip -9 > ../cdroot/install/initrd.gz && cd ..
sudo rm -rf initrd
# Create the ISO image. Make sure to use extensions for lower-case filenames
iso: cdroot prepare
genisoimage -o ${OUT_ISO} \
-force-rr -J \
-b isolinux/isolinux.bin -c isolinux/boot.cat \
-no-emul-boot -boot-load-size 4 -boot-info-table \
cdroot
您需要一些额外的文件:
isolinux.cfg
配置引导加载程序。您希望它只是启动,并自动完成安装过程。它应该看起来像这样:
default install
label install
menu label ^Install my custom Ubuntu
kernel /install/vmlinuz
append auto initrd=/install/initrd.gz --
# Leave 2 seconds to abort or debug
prompt 1
timeout 20
这就是我们在实际配置安装之前需要的所有准备工作。下载预置示例并将其命名为 preseed.cfg。浏览并编辑您想要的任何内容。重要选项包括:
# Locale
d-i debian-installer/locale string en_US
d-i time/zone string US/Eastern
# Partitioning. The following settings WILL OVERWRITE ANYTHING
# Don't insert the CD into your boss' computer ...
d-i partman-auto/method string regular
d-i partman/confirm_write_new_label boolean true
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
# To create a normal user account.
d-i passwd/user-fullname string Ubuntu User
d-i passwd/username string ubuntu
d-i passwd/user-password password insecure
d-i passwd/user-password-again password insecure
d-i user-setup/allow-password-weak boolean true
# Package selection. Don't include ubuntu-desktop to significantly reduce the content
tasksel tasksel/first multiselect standard
#d-i preseed/early_command string driver installation commands (stuff needed to boot)
#d-i preseed/late_command string driver installation commands, custom software, etc.
但我建议您不要使用上面的内容作为示例,而是下载 Ubuntu 的示例并根据您的需要进行配置late_command
,您可以从 shell 执行任何操作,包括下载和执行安装和配置自定义软件的脚本。例如,将其用作late_command
:
d-i preseed/late_command string in-target sh -c 'wget https://example.com/my/install.sh && sh install.sh'
或者,你可以将install.sh
其放入上面的 initrd 中并直接执行。其内容可能如下所示:
#!/bin/sh
aptitude install -y x11-apps any-package-you-want-installed
wget http://proprietary.com/drivers/for/ubuntu.tar.gz -O- | tar xf - && sh drivers/instal.sh
这实际上取决于您的专有驱动程序安装程序如何工作。