Skip to main content

Automatická aktualizace hostitelského systému (Raspbian)


Cílem je automaticky instalovat bezpečnostní (a případně i ostatní) aktualizace pro samotný operační systém. Nejspolehlivější metodou je použití balíčku unattended-upgrades.

Jak na to (na každém Raspberry Pi):

Krok 1: Instalace balíčku
Nejdříve nainstalujte potřebný balíček, pokud již není přítomen.

Generated bash

sudo apt update
sudo apt install unattended-upgrades apt-listchanges

Krok 2: Základní konfigurace
Spusťte konfiguračního průvodce, který vytvoří základní konfigurační soubor.

sudo dpkg-reconfigure -plow unattended-upgrades

V dialogovém okně vyberte "Yes" pro automatické stahování a instalaci stabilních aktualizací. Tím se vytvoří soubor /etc/apt/apt.conf.d/20auto-upgrades.

Krok 3: Detailní konfigurace (volitelné, ale doporučené)
Pro jemnější nastavení otevřete hlavní konfigurační soubor:

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

V tomto souboru můžete definovat, co přesně se má aktualizovat. Důležité jsou sekce Unattended-Upgrade::Allowed-Origins. Dobré výchozí nastavení je povolit aktualizace pro bezpečnostní a stabilní repozitáře:

// Automaticky aktualizovat balíčky z těchto zdrojů:
Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}-security";
        // "${distro_id}:${distro_codename}-updates";
        // "${distro_id}:${distro_codename}-proposed";
        // "${distro_id}:${distro_codename}-backports";
};
  • -security (doporučeno): Instaluje pouze kritické bezpečnostní záplaty. Toto je nejbezpečnější volba.

  • -updates (volitelné): Instaluje i běžné aktualizace balíčků (opravy chyb, drobné vylepšení). Můžete odkomentovat, pokud chcete mít systém plně aktuální, ale existuje zde nepatrně vyšší riziko, že nějaká aktualizace něco rozbije.

Další užitečná nastavení v tomto souboru:

  • Automatický restart: Někdy je po aktualizaci (např. kernelu) potřeba restartovat systém. Můžete to povolit automaticky.


    Unattended-Upgrade::Automatic-Reboot "true";
    Unattended-Upgrade::Automatic-Reboot-Time "03:00"; // Restartuje ve 3 ráno, pokud je to potřeba

Čištění starých balíčků: Udržuje systém čistý.Generated conf Unattended-Upgrade::Remove-Unused-Kernel-Packages "true"; Unattended-Upgrade::Remove-Unused-Dependencies "true"; IGNORE_WHEN_COPYING_START Use code with caution. ConfIGNORE_WHEN_COPYING_ENDE-mailová upozornění: Můžete si nechat posílat e-maily o provedených aktualizacích.Generated conf Unattended-Upgrade::Mail "vas.email@domena.cz"; 

  • (Vyžaduje správně nakonfigurovaný mail server nebo ssmtp.)

Krok 4: Test konfigurace
Spusťte "suchý běh" (dry run), který vám ukáže, co by se aktualizovalo, ale nic neprovede.

sudo unattended-upgrades --dry-run --debug

Pokud vše vypadá v pořádku, systém se nyní bude aktualizovat automaticky, obvykle jednou denně.

Klíčová otázka: Jak poznám, které RPi poslalo e-mail?

Máte naprostou pravdu, pokud budou mít všechny vaše Raspberry Pi stejný název (hostname), e-maily budou vypadat identicky. Řešení je jednoduché a je to základ správné správy více serverů: každé Raspberry Pi musí mít svůj unikátní hostname.

Systém unattended-upgrades obvykle do předmětu nebo hlavičky e-mailu zahrne právě hostname serveru.

Jak změnit hostname na Raspberry Pi:

Před aplikací konfigurace níže se přihlaste ke každému RPi a dejte mu unikátní jméno. Například pro váš dns1:

sudo hostnamectl set-hostname dns1

Pro další RPi můžete použít názvy jako rpi-nas, rpi-iot, rpi-media atd. Po změně je nejlepší systém restartovat (sudo reboot), aby se změna plně projevila ve všech službách.

Kompletní konfigurace pro unattended-upgrades

Tato konfigurace se aplikuje na každém Raspberry Pi.

Krok 1: Instalace potřebných balíčků
(Pokud jste to již neudělal)

sudo apt update
sudo apt install unattended-upgrades apt-listchanges mailutils

Poznámka: mailutils je jednoduchý balíček, který poskytuje příkaz mail a umožňuje odesílání e-mailů. Pro složitější nastavení (např. přes SMTP server s autentizací) by se použil ssmtp nebo postfix.

Krok 2: Vytvoření konfiguračního souboru
Otevřete soubor a vložte do něj celý následující obsah.

Cesta k souboru: /etc/apt/apt.conf.d/50unattended-upgrades

sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

Kompletní obsah souboru:

      // Tento soubor je spravován automaticky. Pro ruční úpravy jej
// zkopírujte do /etc/apt/apt.conf.d/51unattended-upgrades-local

// Automaticky aktualizovat balíčky z těchto zdrojů:
// Bezpečnostní aktualizace jsou klíčové, ostatní jsou volitelné.
Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}-security";
        // Povolí i běžné aktualizace, nejen bezpečnostní. Odkomentujte, pokud chcete.
        // "${distro_id}:${distro_codename}-updates"; 
};

// Seznam balíčků, které se NIKDY nemají automaticky aktualizovat.
// Např. pokud máte speciální verzi kernelu, kterou nechcete měnit.
Unattended-Upgrade::Package-Blacklist {
    // "vim";
    // "libc6";
};

// Pokud je potřeba restart po aktualizaci (např. kernelu), provede se automaticky.
Unattended-Upgrade::Automatic-Reboot "true";

// Čas pro automatický restart (24h formát). Vyberte dobu s nízkou zátěží.
Unattended-Upgrade::Automatic-Reboot-Time "03:00";

// Odeslat e-mail s výsledky aktualizace na zadanou adresu.
// Díky unikátnímu hostname poznáte, který server e-mail poslal.
Unattended-Upgrade::Mail "aktualizace@zelina.eu";

// Odeslat e-mail vždy, i když nedošlo k žádným změnám.
// Pro ladění odkomentujte, pro produkci nechte zakomentované.
// Unattended-Upgrade::MailOnlyOnError "false";

// Odstranit nepoužívané závislosti a staré kernely po aktualizaci.
// Šetří místo na disku a udržuje systém čistý.
Unattended-Upgrade::Remove-Unused-Kernel-Packages "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
    


2. Automatická aktualizace Docker kontejnerů

Zde je cílem zajistit, aby vaše běžící kontejnery používaly nejnovější verze svých obrazů (images). Například, aby se váš pihole:latest automaticky aktualizoval, když tým Pi-hole vydá novou verzi.

Na to je ideální nástroj jménem Watchtower. Je to samotný kontejner, jehož jediným úkolem je sledovat ostatní běžící kontejnery, stahovat jejich nové image a restartovat je s novou verzí.

Jak na to (stačí spustit na každém Raspberry Pi):

Nejjednodušší je přidat Watchtower jako další službu do vašeho docker-compose.yml souboru, pokud ho používáte. Pokud ne, můžete ho spustit jako samostatný kontejner.

Metoda 1: Přidání do docker-compose.yml (doporučeno, pokud používáte Compose)

Upravte váš docker-compose.yml a přidejte novou službu:

Generated yaml

      version: "3.8"
services:
  dnscrypt-proxy:
    # ... vaše dnscrypt konfigurace
  
  pihole:
    # ... vaše pihole konfigurace

  # ... další vaše služby

  watchtower:
    image: containrrr/watchtower:latest
    container_name: watchtower
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: --schedule "0 0 4 * * *" --cleanup
    

Vysvětlení klíčových parametrů:

  • volumes: [/var/run/docker.sock:/var/run/docker.sock]: Toto je naprosto zásadní. Tímto dáváte kontejneru Watchtower přístup k Docker API na hostitelském systému, aby mohl spravovat ostatní kontejnery.

  • command: --schedule "0 0 4 * * *": Tímto nastavujete, kdy se má Watchtower spouštět. Formát je cron. Tento příklad znamená "každý den ve 4:00 ráno". Je dobré to nastavit na dobu, kdy je nízká zátěž. Pokud toto vynecháte, bude kontrolovat aktualizace každých 24 hodin od svého spuštění.

  • command: --cleanup: Tento příkaz zajistí, že Watchtower po aktualizaci smaže staré, nepoužívané obrazy, čímž šetří místo na disku.

Po přidání stačí spustit sudo docker compose up -d a Watchtower začne pracovat.

Metoda 2: Spuštění jako samostatný Docker příkaz

Pokud nepoužíváte docker-compose, můžete Watchtower spustit tímto příkazem:

      sudo docker run -d \
  --name watchtower \
  --restart=unless-stopped \
  -v /var/run/docker.sock:/var/run/docker.sock \
  containrrr/watchtower \
  --schedule "0 0 4 * * *" --cleanup
    

Shrnutí a doporučení

  1. Na každém RPi nastavte unattended-upgrades pro automatické bezpečnostní aktualizace systému. Je to spolehlivé a bezpečné.

  2. Na každém RPi spusťte kontejner Watchtower pro automatickou aktualizaci vašich Docker kontejnerů. Ušetří vám to spoustu práce a zajistí, že budete mít vždy poslední verze software s novými funkcemi a opravami.

Tato kombinace vám zajistí "set-and-forget" systém, který se bude udržovat z velké části sám.