Strávil som nejaký čas pokusmi o prekonvertovanie curl | bash mágie z
oficiálnej dokumentácie Caddy na ansible playbook. Teda, pravdepodobne som
len prepísaním do ansible neznížil žiadne riziká ako nedostatok
transparentnosti, man-in-the-middle útoky, škodlivé payloady alebo
chýbajúce overenie pravosti spojené s postupom curl-pipe-bash.
Stále používame repozitár tretej strany, aj keď dôveryhodný. Povedzme, že to robíme „ansible štýlom” len pre cvičenie. V čase písania vyzerá oficiálna inštalácia Caddy na Ubuntu 22.04 (aktuálny LTS) takto:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
Keďže s ansible nie som v tomto bode príliš zdatný a predtým som sa sústredil na automatizáciu Archu namiesto Ubuntu a ponáral som sa hlboko do králičej nory menom rootless docker, aj takáto zdanlivo triviálna úloha mi zabrala nejaký čas.
Pridanie kľúča repozitára #
Druhý riadok, ktorý slúži na pridanie kľúča repozitára, sa preloží do nasledujúcej ansible úlohy:
- name: Add Cloudsmith repository
apt_key:
url: "https://dl.cloudsmith.io/public/caddy/stable/gpg.key"
state: present
Po spustení tejto úlohy môžeme skontrolovať výsledok na cieľovom stroji
pomocou zastaraného nástroja apt-key list:
/etc/apt/trusted.gpg
--------------------
pub rsa4096 2016-04-01 [SC]
6576 0C51 EDEA 2017 CEA2 CA15 155B 6D79 CA56 EA34
uid [ unknown] Caddy Web Server <[email protected]>
sub rsa4096 2020-12-29 [S] [expires: 2025-12-28]
Rozdiel oproti pôvodnému skriptu je v tom, že jednoducho nešpecifikujeme
umiestnenie súboru ako
/usr/share/keyrings/caddy-stable-archive-keyring.gpg. Práve tento názov
súboru je potom odkazovaný v zdrojoch:
curl https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt
Čo vypíše nasledovné:
# Source: Caddy
# Site: https://github.com/caddyserver/caddy
# Repository: Caddy / stable
# Description: Fast, multi-platform web server with automatic HTTPS
deb [signed-by=/usr/share/keyrings/caddy-stable-archive-keyring.gpg] https://dl.cloudsmith.io/public/caddy/stable/deb/debian any-version main
deb-src [signed-by=/usr/share/keyrings/caddy-stable-archive-keyring.gpg] https://dl.cloudsmith.io/public/caddy/stable/deb/debian any-version main
Všimni si atribút signed-by, ktorý odkazuje na daný súbor s kľúčom. Ešte
treba trochu pogoogliť, aby som pochopil dôsledky úplného vynechania
umiestnenia súboru. Pozrime sa ešte raz na tretí riadok skriptu:
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
Ten explicitne hovorí, že súbor by mal mať názov caddy-stable.list.
Našťastie môžeme
názov súboru
zadať pomocou vhodne pomenovaného parametra filename. Poznámka: prípona
.list sa doplní automaticky.
Zoznamy zdrojov #
S čerstvo nadobudnutými znalosťami môžeme skonštruovať nasledujúce dve úlohy:
- name: Add Caddy repository to sources list
apt_repository:
repo:
"deb https://dl.cloudsmith.io/public/caddy/stable/deb/debian
any-version main"
state: present
filename: caddy-stable
- name: Add Caddy src repository to sources list
apt_repository:
repo:
"deb-src https://dl.cloudsmith.io/public/caddy/stable/deb/debian
any-version main"
state: present
filename: caddy-stable
Skúsil som tieto dve úlohy spojiť do jednej s nádejou, že repo prijme
pole, no zdá sa, že akceptuje
iba reťazec.
Každopádne, môžeme to spätne overiť na hostiteľskom stroji:
cat /etc/apt/sources.list.d/caddy-stable.list
Čo teraz celkom zjavne vypíše nasledovné:
deb https://dl.cloudsmith.io/public/caddy/stable/deb/debian any-version main
deb-src https://dl.cloudsmith.io/public/caddy/stable/deb/debian any-version main
Výsledný playbook teda vyzerá takto:
---
- name: Install Caddy web server
hosts: my_hosts
become: true
become_user: root
tasks:
- name: Install required packages
apt:
update_cache: yes
name:
- debian-keyring
- debian-archive-keyring
- apt-transport-https
state: present
- name: Add Cloudsmith repository
apt_key:
url: "https://dl.cloudsmith.io/public/caddy/stable/gpg.key"
state: present
- name: Add Caddy repository to sources list
apt_repository:
repo:
"deb https://dl.cloudsmith.io/public/caddy/stable/deb/debian
any-version main"
state: present
filename: caddy-stable
- name: Add Caddy src repository to sources list
apt_repository:
repo:
"deb-src https://dl.cloudsmith.io/public/caddy/stable/deb/debian
any-version main"
state: present
filename: caddy-stable
- name: Install Caddy
apt:
update_cache: yes
name: caddy
state: present
- name: Enable and start Caddy service
service:
name: caddy
enabled: yes
state: started
Enjoy!
Odkazy #
- https://cloudsmith.com/blog/deploy-packages-from-cloudsmith-repository-with-ansible/
- https://caddyserver.com/docs/install#debian-ubuntu-raspbian
- https://docs.ansible.com/ansible/latest/collections/ansible/builtin/apt_key_module.html
- https://docs.ansible.com/ansible/latest/collections/ansible/builtin/apt_repository_module.html