Pri pokuse naučiť sa Ansible na Arch node som sa rozhodol vymazať konfiguráciu Nginx:

sudo systemctl stop nginx.servie
sudo pacman -Rnc nginx
sudo rm -rf /etc/nginx

V nádeji, že preinštalovanie nginx (alebo možno nginx-mainline) obnoví všetky súbory:

sudo pacman -S nginx
sudo systemctl start nginx.service

Bohužiaľ, spustiť nginx.service už nebolo možné:

Job for nginx.service failed because the control process exited with error code.

Hľadanie možnej príčiny v systémovom žurnáli:

sudo journalctl -xeu nginx

Prinieslo výsledky:

open() "/etc/nginx/mime.types" failed (2: No such file or directory) in
/etc/nginx/nginx.conf:18

Akceptované riešenie na Unix Stack Exchange navrhlo stiahnutie mime.types z upstream zdroja.

Vlastníctvo súborov balíčka #

Súbor /etc/nginx/mime.types musel niekde pochádzať, preto som skúmal balíček Nginx:

pacman -Fl nginx | grep mime

Neukázal žiadny takýto súbor vlastnený balíčkom, a predsa nový /etc/nginx/nginx.conf ho vyžaduje:

...
http {
    include       mime.types;
    default_type  application/octet-stream;
...

Kontrola, ktorý balíček vlastní mime.types:

pacman -F /etc/nginx/mime.types

Súbor /etc/nginx/mime.types pochádza z balíčka mailcap.

Vzťahy balíčkov #

Prečo súbor uložený v /etc/nginx nepochádza z balíčka mailcap? Sú spolu prepojené?

pacman -Si nginx | grep -i mailcap

Výstup ukazuje, že Nginx Závisí od mailcap — to je úľava. Preinštalujem oba:

sudo pacman -S nginx mailcap

Pacman potvrdzuje, že chýbajúci súbor mime.types ho tiež mätie, a obnoví ho:

:: Proceed with installation? [Y/n]
(2/2) checking keyring...
(2/2) checking package integrity...
(2/2) loading package files...
(2/2) checking for file conflicts...
(2/2) checking available disk space...
warning: could not get file information for etc/nginx/mime.types

Nginx service sa teraz spustí.

Krížová verifikácia #

Rozhodol som sa skontrolovať, či iné súbory v /etc/nginx patria iným balíčkom:

ls /etc/nginx | xargs -I % sh -c 'pacman -F /etc/nginx/%; printf "\n"'

Prezeranie čiastočne čitateľného výstupu ukazuje iba mime.types:

etc/nginx/fastcgi.conf is owned by extra/nginx 1.18.0-2
etc/nginx/fastcgi.conf is owned by community/nginx-mainline 1.19.6-2

etc/nginx/fastcgi_params is owned by extra/nginx 1.18.0-2
etc/nginx/fastcgi_params is owned by community/nginx-mainline 1.19.6-2

etc/nginx/koi-utf is owned by extra/nginx 1.18.0-2
etc/nginx/koi-utf is owned by community/nginx-mainline 1.19.6-2

etc/nginx/koi-win is owned by extra/nginx 1.18.0-2
etc/nginx/koi-win is owned by community/nginx-mainline 1.19.6-2

etc/nginx/mime.types is owned by extra/mailcap 2.1.49-1

etc/nginx/nginx.conf is owned by extra/nginx 1.18.0-2
etc/nginx/nginx.conf is owned by community/nginx-mainline 1.19.6-2

etc/nginx/scgi_params is owned by extra/nginx 1.18.0-2
etc/nginx/scgi_params is owned by community/nginx-mainline 1.19.6-2

etc/nginx/uwsgi_params is owned by extra/nginx 1.18.0-2
etc/nginx/uwsgi_params is owned by community/nginx-mainline 1.19.6-2

etc/nginx/win-utf is owned by extra/nginx 1.18.0-2
etc/nginx/win-utf is owned by community/nginx-mainline 1.19.6-2

A pre istotu, že je iba tento jeden cudzí súbor:

ls /etc/nginx | xargs -I % pacman -F /etc/nginx/% | cut -d' ' -f5 | grep -v nginx

Vyššie uvedené vráti iba balíček extra/mailcap.

V iných balíčkoch #

Mať jeden balíček, ktorý poskytuje konfiguračný súbor do iného konfiguračného adresára, sa stáva:

pacman -Fl syncthing | grep ufw

Balíček syncthing poskytuje súbory do /etc/ufw/:

syncthing etc/ufw/
syncthing etc/ufw/applications.d/
syncthing etc/ufw/applications.d/ufw-syncthing

Na toto správanie som už naznačil v jednom z predchádzajúcich príspevkov.

Odkazy #

Toto je 34. príspevok #100daystooffload.