如何在 cloud-init 腳本中下載和安裝正常 DPKG 包?
我正在使用 LXD/LXC 在 Linux 主機上建構輕量級容器。
這些容器的唯一目的是託管“Dotnet 和 Dotnet 核心應用程序”
有一段時間我一直在使用 Ansible,但最近我發現我實際上可以將一個 init 腳本嵌入到容器配置的使用者數據中,然後 cloud-init 會執行它。
這很棒,並且允許我設置一個給定的容器,其中包含它需要的包,除了一個問題。
微軟
(我知道,我知道……保存笑話和誹謗:-D)
與大多數第 3 方軟體包提供商不同,MS 將其全部添加的 deb 源和 GPG 密鑰打包在一個獨立的 dpkg 軟體封包件中,此軟體封包件未通過普通 repos 列出,因此基本上必須“wget”下載然後安裝使用正常的 dpkg 命令。
現在,這就是我做事的方式:
#cloud-config # apply updates using apt package_update: true package_upgrade: true # set hostname hostname: **** fqdn: **** manage_etc_hosts: true # Install 3rd party software repos # NOTE: This is done using run command due to the way microsoft distribute things using a raw dpkg runcmd: - [wget, "https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb", -O, /root/packages-microsoft-prod.deb] - dpkg -i /root/packages-microsoft-prod.deb - rm /root/packages-microsoft-prod.deb - apt update - apt-get install dotnet-sdk-3.1 -y - apt-get install dotnet-sdk-5.0 -y # Install standard packages packages: - apt-transport-https - python3 - python-is-python3 - mc - gnupg - nginx - git # Add users users: - name: **** ssh-authorized-keys: - ssh-rsa **** rsa-key-BLAH sudo: ['****'] groups: sudo shell: /bin/bash final_message: - "Container initialisation complete."
關鍵部分是“runcmd”部分。
因為我使用的是“runcmd”,所以它在其他所有內容之後執行,包括我放入所有需要使用的標準包的正常包安裝部分。
我最喜歡做的是安裝 dpkg 文件,然後只需將要安裝的包名稱添加到普通包部分,例如
# Something here to download and install the dpkg # Install standard packages packages: - apt-transport-https - python3 - python-is-python3 - mc - gnupg - nginx - git - dotnet-sdk-3.1 - dotnet-sdk-5.0
我確實嘗試只將那個位放在 runcmd 中,但因為它作為最後一步執行,它會導致包部分失敗,因為沒有安裝 dotnet 的 repo。
我還嘗試使用“Apt”模組,將“microsoft-prod.list”安裝到“/etc/apt/sources.list.d”中,但這也失敗了,因為 MS 沒有發布他們的 GPG 密鑰,另外由於它是不受信任的源,因此在執行 apt 更新時,源會導致失敗。
我已經搜尋了 cloud-init 的模組文件,但我找不到任何似乎表明可以下載和添加正常 dpkg 文件的內容,因此我在這裡問:-)
你目前正在做的方式似乎是最好的方式。目前沒有專門用於安裝單個 deb 的模組。
微軟在這裡發布了關於其 linux 儲存庫的資訊,這包括如何獲取他們的 gpg 密鑰。
以下配置應為 Ubuntu 20.04 添加 microsoft 儲存庫
apt: preserve_sources_list: true sources: microsoft: keyserver: https://packages.microsoft.com/keys/microsoft.asc keyid: BC52 8686 B50D 79E3 39D3 721C EB3E 94AD BE12 29CF source: 'deb https://packages.microsoft.com/ubuntu/20.04/prod focal main'focal main'