web-dev-qa-db-ja.com

apt /無人アップグレードが停止する

unattended-upgradesがインストールされている場合、10回のシャットダウン/再起動のうち9回が「無人アップグレードの開始シャットダウン」中にハングします。このハングにより、シャットダウンプロセスが5〜10分間停止します。

/etc/apt/apt.conf.d/20auto-upgrades and/or 50unattended-upgradesを使用して無人アップグレードを無効にすると、問題が発生します。

シャットダウン/リブート(Sudo service unattended-upgrades stop)の前にサービスを終了すると、問題は引き続き発生します。

パッケージ(Sudo apt remove unattended-upgrades)を削除すると、問題は発生しなくなります。

これは、新しくインストールされたUbuntu Server 16.04.1(インストールGUIまたは無人アップグレードの手動インストールでインストールされたunattended-upgradesの両方)バージョンで発生します

両方のKern.log & syslogにはシャットダウンプロセスが表示されません(ファイルシステムが既にアンマウントされているためだと思います)

他の誰かがこの問題を発見または修正しましたか?それをトラブルシューティングしようとしてクレイジーになります。

11
garullon245136

根本原因に近づくために見回す

問題は、シャットダウン時に実行されるスクリプトにあるようです。

対応するファイルを次のように識別しました:

find /etc/systemd -name *unattended*

それは私に関連するsystemdスクリプトを与えました:

/etc/systemd/system/shutdown.target.wants/unattended-upgrades.service

次に、シャットダウン時に実行されるスクリプトを教えてくれました。

/usr/share/unattended-upgrades/unattended-upgrade-shutdown

根本原因を見つけるためにさらに調査する

このスクリプトには、/ etc/apt/apt.conf.d/50unattended-upgradesのセクションに関連する120行目のセクションがあります-> Unattended-Upgrade :: InstallOnShutdown

/ usr/share/unattended-upgrades/unattended-upgrade-shutdownの120行目:

if apt_pkg.config.find_b("Unattended-Upgrade::InstallOnShutdown", False):

問題:キーワード「False」が必要ですが、apt confでは「false」(正確な文字列比較)を追加する必要があります!

解決

私は3つの異なる方法でストールシャットダウンを修正/回避することができました:

回避策A

  • /etc/apt/apt.conf.d/50unattended-upgradesに「false」ではなく「False」と記述します

ここで変更するファイルは無人アップグレードの更新によって上書きされないため、この設定は、実際の修正が提供されるまでアップグレードしても安全です。問題:根本的な原因が修正されると、停止が再び停止するため、これを回避策Bと組み合わせることをお勧めします。

または:回避策B

  • /etc/systemd/system/shutdown.target.wants/unattended-upgrades.serviceの待機時間をデフォルトから15秒に減らします。

vim /etc/systemd/system/shutdown.target.wants/unattended-upgrades.service

 [サービス] 
 Type = oneshot 
 ExecStart =/usr/share/unattended-upgrades/unattended-upgrade-shutdown 
 TimeoutStartSec = 15 

ここで変更するファイルは、無人アップグレードの更新によって上書きされる可能性があるため、この設定はアップグレードしても安全ではありません。これに加えて、何かを修正することからはかけ離れていますが、システムがシャットダウンする際に数分待たないことが保証されます。無人アップグレードのアップグレード後に、これを再度設定する必要がある場合があることに注意してください!

または:Cを修正します(アップストリームに報告する必要があります)

  • / usr/share/unattended-upgrades/unattended-upgrades-shutdownを修正して、「False」ではなく「false」を期待します。

/ usr/share/unattended-upgrades/unattended-upgrade-shutdownのパッチ:

 ---/tmp/unattended-upgrade-shutdown 2017-02-03 14:53:03.238103238 +0100 
 +++/tmp/unattended-upgrade-shutdown_fix 2017-02-03 14 :53:17.685589001 +0100 
 @@ -117,7 +117,7 @@ 
#実行する
 p =なし
 apt_pkg.init_config()
-if apt_pkg.config.find_b( "Unattended-Upgrade :: InstallOnShutdown"、False):
 + if apt_pkg.config.find_b( "Unattended-Upgrade :: InstallOnShutdown"、false):
 env = copy.copy(os.environ)
 env ["UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN"] = "1" 
 logging.debug( "シャットダウンモードでの無人アップグレードの開始")

結論

tbh最後の1つだけが実際の修正です。他の両方のオプションは、実際の修正が実装されるまでの単なる回避策です。

これはアップストリームで行う必要があり、これは両方のディストリビューションのDebian(Debian Stretchでテスト済み)とUbuntu(Ubuntu 16.04.1でテスト済み)の両方に影響するためです。

ここでバグレポートを開きました: https://bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1661611

13
steadfasterX
1
steadfasterX

回避策として、このスクリプトを使用して修正します。

#!/usr/bin/env bash

sed -i '/if apt_pkg.config.find_b/s/False/false/' /usr/share/unattended-upgrades/unattended-upgrade-shutdown

exit

うまくいけば、すぐにアップストリームになります。

1
caracal