Puncte:1

Cum descarc și instalez un pachet DPKG obișnuit într-un script cloud-init?

drapel in

Învârt containere ușoare pe o gazdă Linux folosind LXD/LXC.

Singurul scop al acestor containere este să găzduiască „aplicații de bază Dotnet și Dotnet”

De ceva vreme folosesc Ansible, dar recent am descoperit că aș putea încorpora un script init în datele utilizatorului configurației containerului, iar cloud-init îl va executa.

Acest lucru este grozav și îmi permite să configurez un anumit container cu exact pachetele de care are nevoie, cu excepția unei singure probleme.

Microsoft

(Știu, știu... salvează glumele și insultele :-D)

Spre deosebire de majoritatea furnizorilor de pachete terți, MS împachetează întreaga lor adăugare a sursei lor deb și a cheii GPG într-un fișier de pachet dpkg de sine stătător, acest fișier pachet nu este listat prin repozițiile normale, deci practic trebuie să fie descărcat „wget” și apoi instalat. folosind o comandă obișnuită dpkg.

În acest moment, așa fac lucrurile:

#cloud-config

# aplica actualizări folosind apt
package_update: adevărat
package_upgrade: adevărat

# setați numele de gazdă
Nume gazdă: ****
fqdn: ****
manage_etc_hosts: adevărat

# Instalați repoziții software terță parte
# NOTĂ: Acest lucru se face utilizând comanda run datorită modului în care Microsoft distribuie lucrurile folosind un dpkg brut
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
  - actualizare apt
  - apt-get install dotnet-sdk-3.1 -y
  - apt-get install dotnet-sdk-5.0 -y

# Instalați pachete standard
pachete:
  - apt-transport-https
  - python3
  - python-is-python3
  - mc
  - gnupg
  - nginx
  - git

# Adăugați utilizatori
utilizatori:
  - Nume: ****
    ssh-authorized-keys:
      - ssh-rsa **** rsa-key-BLAH
    sudo: ['****']
    grupuri: sudo
    shell: /bin/bash

mesaj_final:
  - „Inițializarea containerului finalizată”.

Partea cheie este secțiunea „runcmd”.

Deoarece folosesc "runcmd", acesta rulează DUPĂ orice altceva, inclusiv partea normală de instalare a pachetului, unde am introdus toate pachetele standard pe care trebuie să le folosesc.

Ceea ce mi-ar plăcea să fac în mod ideal este să instalez fișierul dpkg, apoi să adaug doar numele pachetelor care urmează să fie instalate în partea normală a pachetului, de exemplu

# Ceva aici pentru a descărca și instala dpkg

# Instalați pachete standard
pachete:
  - apt-transport-https
  - python3
  - python-is-python3
  - mc
  - gnupg
  - nginx
  - git
  - dotnet-sdk-3.1
  - dotnet-sdk-5.0

Am încercat să pun DOAR acel bit în runcmd, dar pentru că rulează ca ultimul pas, face ca partea pachetelor să eșueze, din cauza lipsei de depozit pentru dotnet instalat.

De asemenea, am încercat să folosesc modulul „Apt”, pentru a instala „microsoft-prod.list” în „/etc/apt/sources.list.d”, dar și asta nu a reușit, pentru că MS nu își publică cheia GPG și, în plus a sursei provoacă o eroare atunci când se efectuează o actualizare apt, deoarece este o sursă neîncrezătoare.

Am căutat documentele modulului pentru cloud-init și nu găsesc nimic care să sugereze că un fișier dpkg obișnuit poate fi descărcat și adăugat, de aceea întreb aici :-)

drapel in
Dacă aveți nevoie de aceste pachete în toate containerele dvs., puteți pur și simplu să adăugați pachetele direct în imagine.
drapel in
O altă opțiune ar putea fi adăugarea manuală a pachetelor Microsoft în fișierul .deb.
drapel in
@GeraldSchneider - da, m-am gândit la asta, dar, din păcate, aceste containere nu vor fi întotdeauna aceeași bază. În acest moment, folosesc un ubuntu:20.04, dar acolo este orchestrat printr-o interfață web în care dezvoltatorii care le folosesc au posibilitatea de a alege imagini de bază live de la Alpine la Arch la Ubuntu și tot ce este între ele. De asemenea, da, aveam să încerc și eu asta, dar nu pot să-mi amintesc pentru toată viața cum să scot conținutul unui fișier deb :-)
drapel sa
Modul în care te descurci în prezent pare a fi cel mai bun. În prezent, nu există un modul dedicat instalării deb-urilor individuale.
drapel in
@falcojr Fără probleme, nu ezitați să adăugați asta ca răspuns și îl voi accepta. A meritat să întreb doar în cazul în care cineva știa ceva ce eu nu știam :-) Poate că trebuie să mă întorc la utilizarea Ansible pentru unele lucruri.
Puncte:1
drapel sa

Modul în care te descurci în prezent pare a fi cel mai bun. În prezent, nu există un modul dedicat instalării deb-urilor individuale.

Puncte:1
drapel cn

Microsoft publică informații despre depozitele sale Linux Aici, aceasta include modul de a obține cheia lor gpg

Următoarea configurație ar trebui să adauge depozitul Microsoft pentru Ubuntu 20.04

apt:
    preserve_sources_list: adevărat
    surse:
        microsoft:
            server de chei: https://packages.microsoft.com/keys/microsoft.asc
            ID cheie: BC52 8686 B50D 79E3 39D3 721C EB3E 94AD BE12 29CF
            sursa: 'deb https://packages.microsoft.com/ubuntu/20.04/prod focal main'focal main'
drapel in
Frumos... cu siguranta va trebui sa o incerc pe asta :-)
Mart10 avatar
drapel cn
@shawty un lucru de notat este în scriptul original pe care îl utilizați „https://packages.microsoft.com/config/ubuntu/20.04/packages-microsoft-prod.deb” ca link pentru depozitul de pachete, dar când am scris asta Răspunde că linkul nu funcționa pentru mine, cred că a fost depreciat. Cel nou este cel dat de documentația oficială la care mă link
drapel in
Asta nu m-ar surprinde.... Am fost nevoit să actualizez numeroasele postări pe blog pe care le-am făcut pe jenkins de-a lungul anilor, tocmai din acest motiv.... cheia GPG continuă să se schimbe.. :-(

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.