Debian

如何在安裝 Debian(伺服器)後自動將某些文件放在某些路徑中?

  • August 16, 2020

我被要求為 Debian 伺服器製作安裝 ISO,以便:

  1. 某些軟體包需要預先安裝。
  2. 某些文件(主要是 Python 模組)需要自動位於某些目錄中。

ISO 已提供給客戶,這些條件是為了在安裝後消除他們對任何其他操作的需要。

目前,我已經通過使用Simple-CDD實現了第一個條件;但是,對於第二個,我不知道如何實現它。(Simple-CDD HOWTO 頁面中提到的一件事是,可以在profiles/NAME.extra 中列出所需的文件,以便將它們添加到ISO 文件中的/simple-cdd 中,但我需要這些文件Debian 安裝後的文件系統)。

對於問題 #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 "yourname@yourorg.com")
set(CPACK_PACKAGE_VERSION "1.0")

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

include(CPack)

注意:在 Debian 伸展和更早版本中,cpack有一個錯誤,它只會為組件安裝生成 md5sums。這破壞了一些工具,例如debsums. 這是我在COMPONENT這裡使用的唯一原因。此錯誤已在 Buster 中修復。如果您使用的是 buster 或更高版本,則可以刪除其中的任何行COMPONENT

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

您會*.deb在建構目錄中找到一個文件。這就是您想要包含在 Simple-CDD 中的內容。

  1. 驗證您的包裹

執行這個:

$ dpkg --contents *.deb

您應該看到所有要包含的文件。大小也應該有意義。您還可以考慮安裝它,dpkg -i *.deb然後查看目標位置以確保一切正常。

引用自:https://unix.stackexchange.com/questions/604633