Î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 :-)