ここで問題が発生しました。 Ansibleを使用して設定を自動化しようとしています。
一部の手順では対話が必要ですapt
が、無人アップグレードが開始されロックされているため、エラーが発生することがあります。これによりスクリプトが中断されます。
この問題を解決するためにいくつかの方法を試しましたが、最も成功した方法は失敗したaptコマンドを繰り返すことです。
しかし、これは拡張されず、100%信頼できず、気分が悪くなります。
私はapt -y purge unattended-upgrades
スクリプトの冒頭で権利を発行することにしました。私も試してみましたが、apt -y remove unattended-upgrades
その人はまだ働いて再び戻ってきたようです。消去は終了する前と同様に、無人アップグレードをオフにしているようです。これが私が望むものです。
apt -y purge unattended-upgrades
ただし、ロックによって呼び出しも失敗する可能性があることがわかりました。だからに変更しましたが、while [[ $(dpkg -l | grep -P "unattended-upgrades" | wc -c) -ne 0 ]]; do apt -y purge unattended-upgrades; done
時々失敗することもあります(理由はわかりません)。
実行時に自動アップグレードが実行されているかどうかにかかわらず、すぐにシャットダウンして埋め込み、コマンドが返されてからクリアされるまで再起動しないようにするコマンドが必要ですapt install
。コマンドが操作を完了するのに1分かかりますが、問題ありません。
また、システムにはPythonがインストールされていないため、Ansibleはraw
呼び出しが成功した後にPythonをインストールするまでコマンドを実行します。apt -y update
date -s
仮想マシンで簡単に無人アップグレードができる状態ですが、古い日付を修正するようにコマンドを出すとすぐに無人アップグレードが開始されます。 VMの起動後date
に自動修正が実行され、無人アップグレードが開始されるまでに数分かかります。
これが私が今やっていることです:
- name: Disable autoupdate (part 1 of 2)
raw: sed -i /Update/s/"1"/"0"/ /etc/apt/apt.conf.d/10periodic && sync
- name: Disable autoupdate (part 2 of 2)
raw: echo 'APT::Periodic::Unattended-Upgrade "0";' >> /etc/apt/apt.conf.d/10periodic && sync
- name: Terminate any active autoupdate
raw: ps -A | grep unattended-upgrades | awk '{print $1}' | xargs -r kill -15 $1
- name: Terminate any active dpkg
raw: ps -A | grep dpkg | awk '{print $1}' | xargs -r kill -15 $1
- name: Allow dpkg to recover
raw: dpkg --configure -a
- name: Purge autoupdate
raw: apt -y purge unattended-upgrades
- name: Update apt cache
raw: apt -y update
- name: If needed, install Python
raw: test -e /usr/bin/python || apt -y install python
dpkgを終了すると怖がります。すべてUbuntu Server 18.04.1をクリーンインストールして実行しています。
許可された回答を使用して生成されたソリューションは次のとおりです。
答え1
明らかに、unattended-upgrades
システムデバイスapt-daily.service / apt-daily-upgrade.serviceのいずれかで実行されています。 (これは.timer
同じ名前のシステムデバイスによって順番にトリガされます。)
次のようにsystemdデバイスを待つことができます。
systemd-run --property="After=apt-daily.service apt-daily-upgrade.service" --wait /bin/true
dpkg
SIGTERM を送信するか、apt-get
より早く完了するために何かを送信するかどうかについてではありません。kill
これは信号を送信するだけで、何も待ちません。原則としてリリースされたリソースを使用するには、常に何らかの方法で待機する必要があります。