Debian の apt 更新がめんどくさいのでなんとかする。
昔は cron-apt でやってたけど、今時はどうするのかなーと思って調べてたらUnattendedUpgradesがあったのでコレを設定することに。
Debian Wikiに従ってインストール
sudo apt install unattended-upgrades apt-listchanges
apt-listchanges は無くても良さそう。apt-listchangesはメールで更新の通知をするツール。
アップデートを有効にする
sudo dpkg-reconfigure -plow unattended-upgrades
アップグレードを有効にする。
sudo -e /etc/apt/apt.conf.d/20auto-upgrades
定期的にアップグレードとパッケージリストの更新を有効にする。
APT::Periodic::Update-Package-Lists "1"; APT::Periodic::Unattended-Upgrade "1";
自動更新の確認
sudo unattended-upgrades --dry-run
dry-run で自動更新の設定と動作をチェックできる。
更新するパッケージの指定と除外はここで設定できる
takuya@orangepizero:~$ cat /etc/apt/apt.conf.d/50unattended-upgrades | head // Unattended-Upgrade::Origins-Pattern controls which packages are // upgraded. // // Lines below have the format format is "keyword=value,...". A // package will be upgraded only if the values in its metadata match // all the supplied keywords in a line. (In other words, omitted // keywords are wild cards.) The keywords originate from the Release // file, but several aliases are accepted. The accepted keywords are: // a,archive,suite (eg, "stable") // c,component (eg, "main", "crontrib", "non-free")
設定が不安なら dpkg-recongfigure でも出来る
sudo dpkg-reconfigure -plow unattended-upgrades
no を選ぶと、/etc などのファイル更新でどっちを優先するか決められる。
設定ファイル更新されるの嫌だから、ローカル優先しておいた。
もし更新するパッケージを指定するなら
以下のファイルにアレコレ書いて、更新するパッケージを指定する。 デフォルトで大丈夫だと思うのですが。更新したら動かなくなる野良ビルドドライバとか入ってたら linux-header とかカーネルの更新は避けたいところだったりする。
sudo -e /etc/apt/apt.conf.d/50unattended-upgrades
たとえば、gitlab-ce の パッケージを指定した例。
gitlab-ce をapt に行を追加していて、ominibus パッケージとして使っている場合
// Automatically upgrade packages from these (origin:archive) pairs Unattended-Upgrade::Allowed-Origins { "${distro_id}:${distro_codename}-security"; "${distro_id}:${distro_codename}-updates"; // この行を追加 "o=*packages.gitlab.com/gitlab/gitlab-ce,codename=${distro_codename}";
このようにすると apt に追加した gitlab のパッケージが自動更新の対象になる。
もし自身でapt に追加していたらこのようにする。通常は debian の updates / security を自動インストールしてくれる。
除外したい場合はブラックリストにパッケージ名を書く
アップデートの実行ログ
アップデートの実行ログは /var/log/unattended-upgrades/unattended-upgrades.log
に書かれる。
また、dpkg のログが /var/log/dpkg.log
に記載されるので、自動更新のヒストリ(履歴・実行記録)をたまに見てやるといい。
参考資料
- DebianでもWindowsアップデートばりに自動更新::Cron-aptによるパッケージ自動更新 - それマグで!
- Debian -- Package Search Results -- apt-listchanges
- unattended-upgradesはインストールしただけでは動かない - orangain flavor
- https://wiki.debian.org/UnattendedUpgrades
2021-11-23
ログについて記述を追加