安装Debian(服务器)后如何自动将某些文件放在某些路径中?

安装Debian(服务器)后如何自动将某些文件放在某些路径中?

我被要求为 Debian 服务器制作安装 ISO,以便:

  1. 需要预先安装某些软件包。
  2. 某些文件(主要是 Python 模块)需要自动位于某些目录中。

ISO 已提供给客户,这些条件是为了消除他们在安装后执行任何其他操作的需要。

目前,我已经通过使用实现了第一个条件简单CDD;然而,对于第二个,我不知道如何实现它。 (Simple-CDD HOWTO 页面中提到的一件事是所需的文件可以在 profile/NAME.extra 中列出这样它们就会被添加到 ISO 文件中的 /simple-cdd 中,但安装后我需要 Debian 本身的文件系统中的这些文件)。

答案1

对于问题#2,您可以创建一个*.deb包并将其包含在 Simple-CDD 中。如果您更喜欢这种方式,而不是简单地部署文件或使用脚本生成文件,因为这些文件由包“拥有”。这意味着您可以dpkg -S $file并理解它们为何存在。

注意:考虑使用有关如何将*.deb包添加到 Simple-CDD 的说明来更新此答案

设置此功能的本机方法是使用dh_make,但我发现cpack对于像这样的简单文件部署这样的琐碎情况更容易。

  1. 收集您想要部署到目录中的文件。我建议保留目录结构。我将完成所有与此相关的操作,.因此如果您想部署/etc/myconfig,请将其复制到./etc/myconfig.

  2. ./CMakeLists.txt使用以下内容创建:

cmake_minimum_required(VERSION 3.7)
project(foo)

# Repeat this for each directory or file you want to install
install(DIRECTORY etc 
  DESTINATION /
  USE_SOURCE_PERMISSIONS
  COMPONENT default
)

set(CPACK_GENERATOR "DEB")
set(CPACK_PACKAGE_NAME foo)
set(CPACK_PACKAGE_DESCRIPTION "Long description of what this package is"
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Short description")
set(CPACK_PACKAGE_VENDOR "The ones who installed your OS")
set(CPACK_PACKAGE_CONTACT "[email protected]")
set(CPACK_PACKAGE_VERSION "1.0")

set(CPACK_COMPONENT_ALL default)
set(CPACK_DEB_COMPONENT_INSTALL "ON")

include(CPack)

注意:在 Debian Stretch 及更早版本中,cpack有一个错误,它只会为组件安装生成 md5sum。这破坏了一些工具,例如debsums.这是我COMPONENT在这里使用的唯一原因。这个错误已在 Buster 中修复。如果您使用buster或更高版本,您可以删除COMPONENT其中的任何行。

  1. 构建你的包
$ mkdir build && cd build
$ cmake ..
$ cpack

*.deb您将在构建目录中找到一个文件。这就是您想要包含在 Simple-CDD 中的内容。

  1. 验证您的包裹

运行这个:

$ dpkg --contents *.deb

您应该会看到您想要包含的所有文件。尺寸也应该有意义。您还可以考虑安装它,然后dpkg -i *.deb查看目标位置以确保一切正常。

答案2

您确定了如何使用 Simple-CDD 在 CD 上传送额外的文件;现在您可以发送某种存档(甚至是适当的包)并将其解压到/target使用预置文件与一个安装后脚本将它们放在正确的位置。

您不需要预置每个选项,只需预置您想要从执行安装的用户那里获取的选项即可。

相关内容