APTには、インターネットに恒久的に接続されていないコンピューターのための永続的な盲点があるようです。最近では、確かにそれらの多くがあり、ほとんどがラップトップです。
一般的な解決策はunattended-upgrades
です。これはデフォルトでインストールされ、毎日のcron
ジョブで実行されます。保護として、anacron
もデフォルトでインストールおよび実行され、コンピューターの電源が切れたために失われたcron
ジョブを実行します。これまでのところ賢明です。
だが!
デフォルトのunattended-upgrades
config(/etc/apt/apt.conf.d/50unattended-upgrades
または類似のもの)では、以下を設定する必要があります。そうしないと、アップグレードがスキップされるリスクがあります。
Unattended-Upgrade::OnlyOnACPower "false";
Unattended-Upgrade::Skip-Updates-On-Metered-Connections "false";
さらに重要なことに、anacron
はcron
と同様に、インターネット接続が利用可能かどうかに関係なくジョブを実行します。パーソナルコンピュータは常に恒久的に接続されているわけではないため、これは明らかに非サーバーUbuntuの主要な設計バグです。デフォルトの設定では、遊牧民のラップトップでは、unattended-upgrades
はほとんどの場合失敗します。
(おそらく、実行するまでネットワーク接続を待機するcron
ジョブの個別のクラスが必要です。または、失敗したcron.daily
ジョブは、正常に実行されるまでcron.hourly
に切り替えることができます。)
実用的な解決策の1つは、ネットワークがオンラインになった後にユーザースクリプトとしてunattended-upgrades
を実行するsystemd
ユニットファイルです。ただし、起動ごとに1回だけ実行されます。
最適なソリューションは何ですか?新しいパッケージまたは構成の改善でこれを修正する計画があるかどうか誰かが知っていますか?
Ubuntuの現在のデフォルトであるnetwork-manager
を使用してインターネットに接続している場合、ネットワークに接続した後、unattended-upgrade
(unattended-upgrades
はシンボリックリンクでも機能します)を起動するディスパッチャスクリプトを作成します。
Sudo touch /etc/NetworkManager/dispatcher.d/20-myconnectionscript
Sudo chmod +x /etc/NetworkManager/dispatcher.d/20-myconnectionscript
20-myconnectionscript
:
#!/bin/sh
if [ "$2" = "up" ];
# only proceed if unattended-upgrades was last run more than a day ago
ELAPSEDSINCEUU=$(($(date +%s) - $(date +%s -r /var/lib/apt/periodic/unattended-upgrades-stamp)))
if [ $ELAPSEDSINCEUU -gt 86400 ]; then
apt update --yes # replace, see below
/usr/bin/unattended-upgrade # replace, see below
fi
fi
編集。unattended-upgrades
はパッケージリストの更新をトリガーしないことがわかります。したがって、unattended-upgrades
が失敗した場合は、apt update
も失敗している可能性が高く、その場合、アップグレードは続行されません。そのため、スクリプトに手動更新を追加しました。セキュリティのアップグレードを確実にすることは非常に複雑でなければならないことに失望します。
編集2。これは、ラップトップが最新であることを確実にしたい場合に、非インタラクティブスクリプトで必要なものです。確実に動作することを確認できます。上記の2行をそれで置き換えます。
DEBIAN_FRONTEND=noninteractive apt-get --yes update
DEBIAN_FRONTEND=noninteractive apt-get --yes --allow-downgrades --allow-remove-essential --allow-change-held-packages -- option Dpkg::Options::=--force-confold --option Dpkg::Options::=--force-confdef dist-upgrade
これは完全なdist-upgrade
であり、単なるセキュリティアップグレードではありません。セキュリティのみのバージョンの提案がある場合は、非対話型で実行すると常に機能し、リポジトリ設定であまりファッツを発生させないようにしてください。それを提案します。
もう一度:unattended-upgrades
が断続的に接続されたコンピューターで機能するとは期待できません。 Ubuntuのセキュリティチームは本当にこの状況に対処する必要があります。