Ubuntu 16.04サーバーのVMイメージは、明らかに「apt-daily.service」を
12時間ごとに開始します。このサービスは、利用可能なパッケージのリストの更新、必要に応じて無人アップグレードの実行など、さまざまな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
にも関わらず 値が コマンドラインから
(以下を参照)、unattended-upgrades
プログラムはまだ実行されています…
[email protected]:~$ 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
それでも、タスクは実行され、プロセステーブルで確認できます。ただし、コマンドラインからプローブした場合、ファイルは存在しません::
[email protected]:~$ 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
を介して スクリプト?
承認された回答:
はい、私が行方不明になっていることは明らかです。
Systemdはすべてサービスの同時開始に関するものなので、cloud-init
スクリプトは
同時に実行されます apt-daily.service
トリガーされます。 cloud-init
までに ユーザー指定のペイロードapt-get update
を実行します
すでに実行されています。したがって、2。と3.の試行は、名前空間の魔法が原因ではなく、apt.systemd.daily
に対してシステムを変更するのが遅すぎたために失敗しました。
変更を取得します。
これは、基本的に防止する方法がないことも意味します。 apt.systemd.daily
実行から—開始後にのみ殺すことができます。
この「ユーザーデータ」スクリプトは次のルートを取ります::
#!/bin/bash
systemctl stop apt-daily.service
systemctl kill --kill-who=all apt-daily.service
# wait until `apt-get updated` has been killed
while ! (systemctl list-units --all apt-daily.service | egrep -q '(dead|failed)')
do
sleep 1;
done
# now proceed with own APT tasks
apt install -y python
SSHログインが可能な時間枠はまだありますが、apt-get
実行されませんが、ストックで機能する別のソリューションを想像することはできません
Ubuntu16.04クラウドイメージ。