Ubuntu 安装程序自定义细节指南

Ubuntu 安装程序自定义细节指南

我尝试阅读指南预种定制,但我不明白如何以及在何处修改哪些选项。我只能通过实际的例子来轻松地学习,为此我提出了这个问题。

我正在研究预先植入和定制解决方案以执行一些特定任务:

  • 完全重写默认安装的软件包,非常类似于最小安装并带有--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 插入虚拟机进行测试。您需要cpiogenisoimage(即软件包和可执行文件的名称)。

以下是 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

这实际上取决于您的专有驱动程序安装程序如何工作。

相关内容