apt / unattended-upgrade menutup warung

13

Ketika unattended-upgradesdiinstal, 9 dari 10 shutdowns / reboot hang sementara "memulai shutdown upgrade tanpa pengawasan". Hang ini menghentikan proses shutdown selama 5-10 menit.

Jika saya menonaktifkan peningkatan tanpa pengawasan melalui /etc/apt/apt.conf.d/20auto-upgrades and/or 50unattended-upgrades, masalah terjadi.

Jika saya menghentikan layanan sebelum shutdown / reboot ( sudo service unattended-upgrades stop) masalah masih terjadi.

Jika saya menghapus paket ( sudo apt remove unattended-upgrades) masalah tidak lagi terjadi.

Ini terjadi pada versi yang baru diinstal Ubuntu Server 16.04.1(keduanya unattended-upgradesdiinstal melalui install GUI atau instalasi manual tanpa peningkatan)

Keduanya Kern.log & syslogtidak menunjukkan proses shutdown (saya percaya karena filesystem sudah di-unmount)

Adakah orang lain yang melihat atau memperbaiki masalah ini? Gila mencoba memecahkan masalah itu.

garullon245136
sumber
Tidak dapat mereproduksi dalam uji VM 16.04.1. Shutdown tidak ditunda di sini.
user535733
Mungkinkah itu berbasis perangkat keras? Saya tidak sepenuhnya yakin apa yang terjadi dengan unattended-upgradesselama shutdown.
garullon245136
Saya bertanya-tanya mengapa Anda selalu berjalan pada saat shutdown: Anda bukan daemon; itu hanya sebuah skrip yang berjalan singkat sekali setiap hari dan kemudian berakhir.
user535733
Tampaknya seolah-olah proses shutdown mencoba menjalankan uu selama tahap di mana semua filesystem sedang diturunkan. Ini sepertinya tidak dikendalikan oleh tautan /etc/rc6.d/ atau /etc/rc0.d/ sebagai Saya telah menghapus semua tautan dan prosesnya masih berjalan saat shutdown.
garullon245136
1
Lihat di /etc/apt/apt/conf.d/50unattended-upgrades untuk opsi 'run uu at shutdown' (sekitar baris 25). Pastikan itu 'salah' atau dikomentari.
user535733

Jawaban:

14

Melihat sekeliling untuk lebih dekat ke akar permasalahan

Masalahnya tampaknya skrip berjalan saat shutdown.

Saya mengidentifikasi file yang sesuai dengan:

find /etc/systemd -name *unattended*

yang memberi saya skrip systemd terkait:

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

yang kemudian memberi tahu saya skrip dieksekusi pada shutdown:

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

Investigasi lebih dalam untuk menemukan akar masalahnya

dalam skrip ini ada bagian dalam baris 120 yang terkait dengan bagian di /etc/apt/apt.conf.d/50unattended-upgrades -> Unattended-Upgrade :: InstallOnShutdown

Baris 120 dari / usr / share / upgrade tanpa pengawasan / unattended-upgrade-shutdown:

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

Masalahnya: ia mengharapkan kata kunci "Salah" sementara di apt conf kita harus menambahkan "false" (perbandingan string yang tepat)!

Larutan

Saya bisa memperbaiki / menyelesaikan shutdown dengan 3 cara berbeda:

Penanganan masalah A

  • tulis "False" alih-alih "false" di /etc/apt/apt.conf.d/50unattended-upgrades

Pengaturan ini pemutakhiran aman hingga perbaikan nyata diberikan karena file yang kami ubah di sini tidak akan ditimpa oleh pembaruan peningkatan tanpa pengawasan. Masalah: Ketika akar permasalahan diperbaiki, ini akan menghasilkan penghentian macet lagi, jadi saya sarankan untuk menggabungkan ini dengan Workaround B.

ATAU: Penanganan Masalah B

  • kurangi waktu tunggu di /etc/systemd/system/shutdown.target.wants/unattended-upgrades.service dari default menjadi 15 detik:

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

[Layanan]
Ketik = oneshot
ExecStart = / usr / share / unattended-upgrade / unattended-upgrade-shutdown
TimeoutStartSec = 15

Pengaturan ini BUKAN pemutakhiran yang aman karena file yang kami ubah di sini mungkin akan ditimpa oleh pembaruan peningkatan tanpa pengawasan. Selain itu ini sangat jauh dari memperbaiki sesuatu tetapi akan memastikan bahwa sistem Anda tidak akan menunggu beberapa menit ketika dimatikan. Ingatlah bahwa setelah peningkatan tanpa pengawasan, Anda mungkin harus mengatur ini lagi!

ATAU: Perbaiki C (harus dilaporkan ke hulu)

  • fix / usr / share / unattended-upgrade / unattended-upgrade-shutdown untuk mengharapkan "false", bukan "False"

menambal / usr / share / upgrade tanpa pengawasan / 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 @@
     # menjalankannya
     p = Tidak Ada
     apt_pkg.init_config ()
- if apt_pkg.config.find_b ("Peningkatan tanpa pengawasan :: InstallOnShutdown", Salah):
+ if apt_pkg.config.find_b ("Peningkatan tanpa pengawasan :: InstallOnShutdown", false):
         env = copy.copy (os.environ)
         env ["UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN"] = "1"
         logging.debug ("memulai peningkatan tanpa pengawasan dalam mode mematikan")

Kesimpulan

tbh hanya yang terakhir adalah perbaikan nyata. kedua opsi lainnya hanya solusi sampai perbaikan nyata akan dilaksanakan.

Ini harus dilakukan di hulu dan karena ini mempengaruhi baik Debian (diuji pada Debian Stretch) dan Ubuntu (diuji pada Ubuntu 16.04.1) untuk kedua distribusi.

Saya telah membuka laporan bug di sini: https://bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1661611

teguhX
sumber
2
apt_pkg.config.find_b () mengembalikan boolean bukan string. "find_b (key [, default = False]) → bool Kembalikan nilai boolean yang disimpan di key, atau nilai yang diberikan oleh objek bool default jika opsi yang diminta tidak disetel." apt.alioth.debian.org/python-apt-doc/library/... Jadi itu bukan bug di-upgrade-shutdown tanpa pengawasan karena memeriksa False sudah benar.
Brian Murray
Seperti orang yang mengikuti tautan laporan bug Launchpad di atas akan melihat, masalah ini sebenarnya bukan disebabkan oleh perbandingan string yang gagal, melainkan karena bug sequencing systemd yang dilaporkan sekarang telah diperbaiki .
sampablokuper
1

Sebagai solusi saya menggunakan skrip ini untuk memperbaikinya:

#!/usr/bin/env bash

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

exit

Semoga akan segera di-upstream.

caracal
sumber