Ubuntu 16.04サーバーVMイメージは、12時間ごとに「apt-daily.service」を開始するようです。このサービスは、利用可能なパッケージのリストの更新、必要に応じて無人アップグレードの実行など、APT関連のさまざまなタスクを実行します。
VMの「スナップショット」から開始すると、(おそらく)systemdがタイマーがずっと前に切れているはずだとすぐに認識するので、サービスがすぐにトリガーされます。
ただし、実行中のAPT apt
は、ロックを保持しているため、他のプロセスの実行を妨げ/var/lib/dpkg
ます。これを示すエラーメッセージは次のようになります。
E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
Ansibleがマシンのセットアップを完了するまで、この自動APTタスクを無効にする必要があります(通常、パッケージのインストールが必要です)。詳細とコンテキストについては、https://github.com/gc3-uzh-ch/elasticluster/issues/304を参照してください。
の「ユーザーデータ」スクリプトを使用して「無人アップグレード」機能を無効にするためのさまざまなオプションを試しcloud-init
ましたが、今のところすべてが失敗しています。
1. systemdタスクを無効にします
systemdタスクapt-daily.service
はによってトリガーされapt-daily.timer
ます。次のコマンドをさまざまに組み合わせて、いずれか、または両方を無効にしようとしました。それでも、apt-daily.service
VMがSSH接続を受け入れる準備ができた直後に開始されます。
#!/bin/bash
systemctl stop apt-daily.timer
systemctl disable apt-daily.timer
systemctl mask apt-daily.service
systemctl daemon-reload
2.設定オプションを無効にします APT::Periodic::Enable
スクリプト/usr/lib/apt/apt.systemd.daily
はいくつかのAPT構成変数を読み取ります。この設定APT::Periodic::Enable
により、機能が完全に無効になります(行331〜337)。次のスクリプトを使用して無効にしようとしました::
#!/bin/bash
# cannot use /etc/apt/apt.conf.d/10periodic as suggested in
# /usr/lib/apt/apt.systemd.daily, as Ubuntu distributes the
# unattended upgrades stuff with priority 20 and 50 ...
# so override everything with a 99xxx file
cat > /etc/apt/apt.conf.d/99elasticluster <<__EOF
APT::Periodic::Enable "0";
// undo what's in 20auto-upgrade
APT::Periodic::Update-Package-Lists "0";
APT::Periodic::Unattended-Upgrade "0";
__EOF
ただし、コマンドラインからのAPT::Periodic::Enable
値0
(下記参照)にもかかわらず、unattended-upgrades
プログラムはまだ実行されています...
ubuntu@test:~$ apt-config shell AutoAptEnable APT::Periodic::Enable
AutoAptEnable='0'
3. /usr/lib/apt/apt.systemd.daily
完全に削除する
次のcloud-init
スクリプトは、無人アップグレードスクリプトを完全に削除します。
#!/bin/bash
mv /usr/lib/apt/apt.systemd.daily /usr/lib/apt/apt.systemd.daily.DISABLED
それでも、タスクは実行され、プロセステーブルで確認できます!ただし、コマンドラインからプローブした場合、ファイルは存在しません。
ubuntu@test:~$ ls /usr/lib/apt/apt.systemd.daily
ls: cannot access '/usr/lib/apt/apt.systemd.daily': No such file or directory
cloud-init
スクリプト(SSHコマンドラインと一緒に)とルートのsystemdプロセスが別々のファイルシステムとプロセス空間で実行されるかのように見えます...
ご質問
私が行方不明になっていることは明らかですか?または、私が知らない名前空間の魔法がありますか?
最も重要なこと:スクリプトをapt-daily.service
介して
無効にするにはどうすればよいcloud-init
ですか?
--now
に、systemctl disable
コマンドのフラグが欠落している可能性があります。それが私の問題でした。
disable --now
に同等であるstop
が続きますdisable
。