如何使用 preseed 删除软件包?

我正在设置一个自动化的“无需提问”的预置系统,并使用Dustin Kirkland的server preseed作为示例。
他使用以下行来安装三个软件包作为自动安装的一部分:
d-i pkgsel/include string byobu vim openssh-server 我正在寻找这个的反向,基本上是能够在自动安装的过程中删除软件包。
我已经查看了安装指南
我已经查看了这个示例preseed,但不清楚这是否是可用的每个选项的规范列表。
我认为我需要使用d-i preseed/late_command string apt-remove packagename来在安装完成后清理我不想要的东西,但我不确定。

绝对是我会采取的方式。虽然不太喜欢预装软件,但我会使用伪包并从基本安装开始,以确保没有任何我不需要的东西。 - RobotHumans
桌面团队或服务器团队中没有人看过这个问题吗? - Manish Sinha
我尝试了这种方法来移除软件包,但对我来说没有起作用 :(。https://gist.github.com/lmayorga1980/6d698a5d5425c676ecdd - Maverick
2个回答

在preseed配置脚本中,没有提供清除或删除软件包的选项,但是您可以使用以下命令...。 d-i preseed/late_command
This command is run just before the install finishes, but when there is
still a usable /target directory. You can chroot to /target and use it
directly, or use the apt-install and in-target commands to easily install
packages and run commands in the target system.
"in-target" means: chroot /target
d-i preseed/late_command string [in-target] foo

例子:
d-i preseed/late_command string \
            in-target apt-get remove packagename

你还可以运行一个脚本:
d-i preseed/late_command string \
        in-target wget http://........./postinst.sh -O /root/postinst.sh; \
        in-target /bin/bash /root/postinst.sh

或安装一组DEB文件:

d-i preseed/late_command               string \
    for deb in /hd-media/*.deb; do cp $deb /target/tmp; \
    chroot /target dpkg -i /tmp/$(basename $deb); done

只是一条评论:我不得不调用 apt-get -y remove packagename - yves Baumes

所提供的示例只是一个例子;它并不包含所有可能的d-i组合,只包含那些更常见的。

就个人而言,我从未尝试过从安装中删除软件包,所以我不确定是否有特定的d-i命令可以实现这一点;根据你的描述,d-i preseed late_command应该可以工作。在d-i文档中进行了快速搜索,但没有找到相关内容... 不过,当然,Colin会知道的;-)

另外,你也可以从基本服务器开始,然后添加任何你想要的内容:

tasksel tasksel/first   multiselect     Basic Ubuntu server
...
d-i preseed/late_command string apt-install whatever else