Как загрузить и установить обычный пакет DPKG в облачном-скрипте инициализации?

. Я раскручивал легкие контейнеры на хосте Linux, используя LXD/LXC.

Единственной целью этих контейнеров является размещение «основных приложений Dotnet и Dotnet».

Некоторое время я использовал Ansible, но недавно обнаружил, что на самом деле могу встроить сценарий инициализации в пользовательские данные контейнера. контейнера, и cloud-init выполнит его.

Это здорово, и позволяет мне настроить данный контейнер с именно теми пакетами, которые ему нужны, за исключением одной проблемы.

Microsoft

(Я знаю, я знаю... оставь шутки и оскорбления :-D)

В отличие от большинства сторонних поставщиков пакетов, MS упаковывает все добавление своего источника deb и ключа GPG в отдельный dpkg package, этот файл пакета не указан в обычных репозиториях, поэтому его в основном необходимо загрузить с помощью 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.

Я также пытался использовать модуль «Apt», чтобы установить «microsoft-prod.list» в «/etc/apt/sources.list.d», но это также не удалось, потому что MS не публикует свои GPG-ключ,и добавление источника вызывает сбой при выполнении подходящего обновления из-за того, что он является ненадежным источником.

Я просмотрел документацию модуля для cloud-init, и я не могу найти ничего, что, по-видимому, предполагает загрузку и добавление обычного файла dpkg, поэтому я спрашиваю здесь:-)

0
задан 29 October 2021 в 09:44
1 ответ

То, что вы сейчас делаете, кажется лучшим. В настоящее время нет модуля, предназначенного для установки отдельных deb-файлов.

1
ответ дан 1 November 2021 в 12:23

Теги

Похожие вопросы