Mít každý repozitář (nebo sbírku úložišť) ve vlastním souboru usnadňuje správu, a to jak ručně, tak programově:
- Umožňuje novým instalacím, které potřebují vlastní úložiště, aby nemusely prohledávat plochý soubor, aby bylo zajištěno, že nepřidává duplicitní položky.
- Umožňuje správci systému snadno zakázat (přejmenováním) nebo odstranit (smazáním) sadu úložiště, aniž by musel upravovat amonolitický soubor.
- Umožňuje správci balíčků zadat jednoduchý příkaz k aktualizaci umístění úložiště, aniž by se musel starat o neúmyslnou změnu konfigurace pro nesouvisející úložiště.
Na technické úrovni, jako někdo, kdo musel zvládnout tyto změny v několika velkých a oblíbených systémových informačních nástrojích, jde v podstatě o toto:
Pro sources.list.d/
# to add
if [[ ! -e /etc/apt/sources.list.d/some_repo.list ]];then
echo 'some repo line for apt' > /etc/apt/sources.list.d/some_repo.list
fi
# to delete
if [[ -e /etc/apt/sources.list.d/some_repo.list ]];then
rm -f /etc/apt/sources.list.d/some_repo.list
fi
Všimněte si, že pokud také neprovádějí stejnou kontrolu jako níže, pokud byste okomentovali řádek repo, tyto testy by byly špatné. Pokud provádějí stejnou kontrolu jako níže, pak je to přesně stejná složitost, kromě toho, že se provádí přes mnoho souborů, ne jeden. Také, pokud nekontrolují VŠECHNY možné soubory, mohou, a často to dělají, přidat duplicitní položku, na kterou si pak apt stěžuje, dokud jeden z nich nesmažete.
Pro sources.list
# to add. Respect commented out lines. Bonus points for uncommenting
# line instead of adding a new line
if [[ -z $( grep -E '\s*[^#]\s*some repo line for apt' /etc/apt/sources.list ) ]];then
echo 'some repo line for apt' >> /etc/apt/sources.list
fi
# to delete. Delete whether commented out or not. Bonus for not
# deleting if commented out, thus respecting the user's wishes
sed -i '/.*some repo line for apt.*/d' /etc/apt/sources.list
Vývojáři Google Chrome nezkontrolovali přítomnost zdrojů Google Chrome a spoléhali na přesný název souboru, který by jejich balíček Chrome vytvořil. Ve všech ostatních případech by vytvořili nový soubor v sources.list.d pojmenovaný přesně tak, jak chtěli.
Chcete-li vidět, jaké zdroje máte, samozřejmě to není tak hezké, protože čtení a údržba nemůže být snazší než:
cat /etc/sources.list
Takže to bylo v podstatě provedeno za účelem automatických aktualizací a poskytování jednoduchých jednoduchých příkazů, které byste mohli uživatelům zadávat, pokud vím. Pro uživatele to znamená, že musí číst mnoho souborů místo 1 souboru, aby zjistili, zda mají přidané repo, a pro apt to znamená, že musí číst také mnoho souborů místo jednoho souboru.
Protože v reálném světě, pokud byste to chtěli udělat dobře, musíte podporovat kontroly proti všem souborům bez ohledu na to, jak se jmenují, a poté otestovat, zda je akce, která má být provedena, vyžadována nebo není vyžadována.
Pokud byste to však nedělali dobře, prostě byste ignorovali kontroly, abyste zjistili, zda je položka někde ve zdrojích, a zkontrolovali byste pouze název souboru. Věřím, že to dělá většina automatizovaných věcí, ale protože jsem nakonec prostě musel všechno zkontrolovat, abych to mohl vypsat a jednat podle toho, jestli se některý z těch souborů shoduje, jediným skutečným výsledkem bylo, že to bylo mnohem složitější.
Hromadné úpravy
Vzhledem k tomu, že běží mnoho serverů, byl bych v pokušení jednoduše naskriptovat noční úlohu, která prochází /etc/apt/sources.list.d/ a nejprve zkontroluje, zda položka již není v sources.list, a pak, jestli je ne, přidejte tuto položku do sources.list, smažte soubor sources.list.d, a pokud je již v sources.list, jednoduše smažte soubor sources.list.d
Vzhledem k tomu, že používání pouze sources.list kromě jednoduchosti a snadnosti údržby nemá ŽÁDNÉ negativum, přidání něčeho takového nemusí být špatný nápad, zvláště s ohledem na kreativní náhodné akce systémových administrátorů.
Jak je uvedeno ve výše uvedeném komentáři, inxi -r úhledně vytiskne aktivní úložiště pro každý soubor, ale nebude je samozřejmě upravovat ani měnit, takže by to byla jen polovina řešení. Pokud se jedná o mnoho distribucí, je těžké se naučit, jak to každá dělá, to je jisté, a náhoda je bohužel spíše pravidlem než výjimkou.
Pokud své servery spravujete ručně, souhlasím s tím, že to dělá věci více matoucí. Prospívá však programové správě (tj. „konfiguraci jako kód“). Při použití softwaru pro správu konfigurací, jako je Puppet, Ansible, Chef atd., je snazší jednoduše přetáhnout nebo odstranit soubor z adresáře a spustit apt update
, namísto analýzy souboru za účelem přidání nebo odstranění určitých řádků.
Zejména proto, že se vyhnete nutnosti spravovat obsah jednoho zdroje „souboru“, např.:/etc/apt/sources.list
, z více nezávislých modulů, které byly napsány třetími stranami.
Z tohoto konkrétního důvodu oceňuji v Ubuntu široké použití dirs „.d“, tj. sudoers.d, rsyslog.d, sysctl.d., cron.d, logrotate.d atd.