Kategória: Debian Linux

Zmenené: 17. apríl 2014

APT a apticron

Automatizáciou úloh APT som sa už viackrát zaoberal. Tentokrát sa zameriam na riešenie, ktoré sa postará o automatické sťahovanie dostupných aktualizácií, posielanie informácií emailom, ale aj o zaistenie, že vyrovnávacia pamäť stiahnutých balíkov nezaplní disk (partíciu).

Niektoré ďalšie poznámky a návody ohľadom automatizácie APT si môžete prečítať v predošlých článkoch – Auto nástroje APT a Automatizácia APT. Tento popis je praktickým využitím a riešením, ktoré už dlhšiu dobu úspešne používam a vychádza zo skúseností z jednotlivých automatizačných riešení systému APT.

Nastavenie

Nastavenie nástroja apticron je v súbore /etc/apticron/apticron.conf a je podrobne popísané v komentároch. Z nastavení vyberám tie, ktoré sú podľa dôležité:

EMAIL="root"
  • nastavuje emailovú adresu, kam sú posielané emailové upozornenia na dostupné aktualizácie.
  • môže obsahovať viac adries, oddelených medzerami.
SYSTEM="debtest"
  • nastavuje meno systému, ktorým bude email označený, aby ste vedeli ktorého stroja sa aktualizácie týkali
  • ak nie je nastavené, použije sa FQDN z hostname
NOTIFY_HOLDS="0"
  • udáva, že vo výstupe nemajú byť informácie o podržaných (hold) balíkoch
NOTIFY_NO_UPDATES="1"
  • zapína (1) alebo vypína (0) posielanie upozornení aj v prípade, že nie sú dostupné aktualizácie
  • vhodné, ak si chcete byť istý, že apticron pracuje správne
CUSTOM_SUBJECT=""
  • prispôsobuje text predmetu emailu

  • vhodné napríklad na triedenie pošty v klientovi

  • je možné použiť aj interné premenné (pozor, apostrofy):

    $CUSTOM_SUBJECT='[apticron] $SYSTEM: $NUM_PACKAGES package update(s)'
    
CUSTOM_NO_UPDATES_SUBJECT=""
  • obdoba predošlého, ale pre predmet správ, keď nie sú k dispozícii žiadne aktualizácie

  • i tu je možné použiť aj interné premenné (pozor, apostrofy):

    $CUSTOM_NO_UPDATES_SUBJECT='[apticron] $SYSTEM: no updates'
    
CUSTOM_FROM="apticron"
  • nastavuje adresu odosielateľa emailu
  • predvolené je root@example.org

Spúšťanie

Nástroj apticron môžete spustiť priamo z príkazového riadku:

apticron

Tip

Príkaz nepoužíva žiadne voľby, ale všetko načíta z vyššie spomenutého konfiguračného súboru.

Manuálne spúšťanie z príkazového riadku je vhodné na testovanie, aby nástroj splnil svoj účel, je potrebné aby bol automaticky spúšťaný, o čo sa postará úloha cron v /etc/cron.d/apticron:

# cron entry for apticron
47 * * * * root if test -x /usr/sbin/apticron; then /usr/sbin/apticron --cron; else true; fi

Ako možno vidieť, úloha je spúšťaná každú hodinu (inak, presná minúta je náhodná), ale v skutočnosti neodstanete email o aktualizáciách každú hodinu, ale len raz za deň, o čo sa postará kontrola časovej pečiatky súboru /var/lib/apticron/cron_run. Pri spúšťaní z príkazového riadku pošle email aj viac krát denne…

Vyrovnávacia pamäť balíkov

S použitím takýchto automatizačných nástrojov prichádza jeden problém, a tým je postupné zapĺňanie disku vyrovnávacou pamäťou balíkov. Poznáte, balíky sa sťahujú a sťahujú, občas i inštalujú, ale často sa zabúda na ich mazanie.

Ako užitočný pomocník sa tu javí nastavenie automatizácie APT. Vytvorte si súbor v adresári , napr. 02periodic, s obsahom:

// control parameters for cron jobs by /etc/cron.daily/apt

APT
{
    Periodic
    {
        Enable                        "1";

        BackupArchiveInterval         "0";

        Update-Package-Lists          "0";
        Download-Upgradeable-Packages "0";
        Unattended-Upgrade            "0";

        AutocleanInterval             "7";
        MaxSize                       "500";
        MaxAge                        "14";
        MinAge                        "2";

        Verbose                       "0";

        RandomSleep                   "0";
    };
};

Toto nastavenie síce len potvrdzuje mnoho predvolených hodnôt, ale istota je istota:

  • vypína posielanie vytváranie záloh
  • vypína automatické aktualizáciu zoznamu balíkov a sťahovanie aktualizácií (o to sa postará apticron)
  • vypína automatickú bezzásahovú inštaláciu
  • zapína čistenie vyrovnávacej pamäte každý 7. deň, pričom nastavuje maximálnu veľkosť vyrovnávacej pamäte na 500 MB, odstraňuje balíky staršie ako 14 dní, ale zachováva balíky mladšie ako 7 dní
  • vypína posielanie emailov (i o toto sa postará apticron, a podľa mňa lepšie)
  • ako posledné je nastavenie náhodného oneskorenia, ktoré mám tiež vypnuté…

O zvyšok sa postará úloha cron /etc/cron.daily/apt.

Balíky v stave hold

Zmeny vo formáte súboru so stavom balíkov (/var/lib/aptitude/pkgstates): majú za následok, že apticron nedokáže filtrovať balíky v stave hold, je na základe BTS 707230 stačí malá zmena kódu:

---8<---
--- apticron.orig   2013-07-26 10:06:11.773698290 +0200
+++ apticron        2013-07-26 10:06:40.957691347 +0200
@@ -124,7 +124,7 @@
 done

 # workaround to handle apt-get installing packages hold by aptitude.
-APTITUDE_HOLDS=`grep "^State: 2" -B 2 /var/lib/aptitude/pkgstates 2>/dev/null |grep "^Package: .*$" |cut -d" " -f 2`
+APTITUDE_HOLDS=`egrep "^(Package|State):" /var/lib/aptitude/pkgstates 2>/dev/null | \
+                grep "^State: 2" -B 1 |grep "^Package: .*$" |cut -d" " -f 2`
 DSELECT_HOLDS=`dpkg --get-selections |grep "hold$" |cut -f1`

 if [ "$NOTIFY_HOLDS" = "0" ]; then