apt / unattended-yükseltmeleri tezgahları kapatır


14

Kurulduğunda unattended-upgrades, "katılımsız yükseltmeleri kapatmaya başlarken" 10 kapatma / yeniden başlatma işleminden 9'u askıda kalır. Bu askıda tutma işlemi 5-10 dakika durur.

Istenmeyen yükseltmeleri üzerinden devre dışı bırakırsam /etc/apt/apt.conf.d/20auto-upgrades and/or 50unattended-upgrades, sorunlar oluşur.

Kapatma / reboot ( sudo service unattended-upgrades stop) işleminden önce hizmeti sonlandırırsam sorun devam eder.

Paketi ( sudo apt remove unattended-upgrades) kaldırırsam sorun oluşmaz.

Bu, yeni yüklenmiş bir sürümünde Ubuntu Server 16.04.1(her ikisi de unattended-upgradesyükleme GUI'si veya katılımsız yükseltmelerin elle yüklenmesi yoluyla yüklenir)

Her ikisi Kern.log & syslogde kapatma işlemini göstermiyor (Dosya sistemlerinin zaten bağlantısı kesildiğine inanıyorum)

Başka kimse bu sorunu gördü veya çözdü mü? Sorun gidermeye çalışırken deliriyorum.


16.04.1 test VM'sinde çoğaltılamıyor. Burada kapatma gecikmez.
user535733

Donanım tabanlı olabilir mi? unattended-upgradesKapatma sırasında neler olacağından tam olarak emin değilim .
garullon245136

Neden uu'nun her zaman kapatma anında çalıştığını merak ediyorum: uu bir daemon değil; sadece günde bir kez kısa bir süre için çalışan ve sonra sona eren bir betiktir.
user535733

Kapatma işlemi, tüm dosya sistemlerinin kaldırıldığı aşamada uu'yu çalıştırmaya çalışıyor gibi görünüyor. /Etc/rc6.d/ veya /etc/rc0.d/ bağlantıları tarafından Tüm bağlantıları kaldırdım ve işlem kapatma sırasında hala çalışıyor.
garullon245136

2
'Kapatma sırasında çalıştır uu' seçeneği (25. satır civarında) için /etc/apt/apt/conf.d/50unattended-upgrades dosyasına bakın. Bunun 'yanlış' veya yorumda bulunmadığından emin olun.
user535733

Yanıtlar:


14

Temel nedene yaklaşmak için etrafa bakma

Sorun kapatma sırasında çalışan komut dosyası gibi görünüyor.

İlgili dosyayı şu şekilde tanımladım:

find /etc/systemd -name *unattended*

hangi bana ilgili systemd betiği verir:

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

bu da bana kapatma sırasında çalıştırılan komut dosyasını söyledi:

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

Temel nedeni bulmak için daha derinlemesine araştırma

Bu komut dosyasında 120 satırında /etc/apt/apt.conf.d/50unattended-upgrades -> Katılımsız Yükseltme :: InstallOnShutdown'daki bölümle ilgili bir bölüm vardır.

/ Usr / share / katılımsız yükseltmeler / katılımsız yükseltme-kapanış satırı 120:

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

Sorun: apt conf biz "yanlış" (tam dize karşılaştırması) eklemeliyken "False" anahtar kelimesini bekliyor!

Çözüm

Stalling kapatma 3 farklı şekilde düzeltmek / geçici çözüm başardı:

Geçici Çözüm A

  • /etc/apt/apt.conf.d/50unattended-upgrades içinde "false" yerine "False" yazın

Bu ayar, gerçek bir düzeltme sağlanana kadar yükseltme güvenlidir, çünkü burada değiştirdiğimiz dosyanın katılımsız yükseltme güncellemesi tarafından üzerine yazılmaz. Sorun: Kök neden düzeltildiğinde, bu durum yine durmaya neden olacaktır, bu yüzden bunu Geçici Çözüm B ile birleştirmenizi öneririm.

VEYA: Geçici Çözüm B

  • /etc/systemd/system/shutdown.target.wants/unattended-upgrades.service içindeki bekleme süresini varsayılandan 15 saniyeye düşürün:

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

[Hizmet]
= Oneshot yazın
ExecStart = / usr / share / gözetimsiz-yükseltmeleri / gözetimsiz yükseltme-kapatma
TimeoutStartSec = 15

Burada değiştirdiğimiz dosyanın katılımsız yükseltme güncellemesi ile üzerine yazılabileceğinden bu ayar güvenli yükseltme DEĞİLDİR. Bunun yanı sıra, bir şeyi düzeltmekten çok uzaktır, ancak sisteminizin kapanırken birkaç dakika beklememesini sağlayacaktır. Gözetimsiz yükseltmelerin yükseltilmesinden sonra bunu tekrar ayarlamanız gerekebileceğini unutmayın!

VEYA: Düzeltme C (akış yukarı rapor edilmelidir)

  • "False" yerine "false" olmasını beklemek için / usr / share / unattended-upgrade / unattended-upgradedes-shutdown düzeltmesi

yama / usr / share / katılımsız yükseltme / katılımsız yükseltme-kapatma:

--- / tmp / katılımsız yükseltme-kapatma 2017-02-03 14: 53: 03.238103238 +0100
+++ / tmp / katılımsız yükseltme-shutdown_fix 2017-02-03 14: 53: 17.685589001 +0100
@@ -117,7 +117,7 @@
     # koş
     p = Yok
     apt_pkg.init_config ()
- apt_pkg.config.find_b ("Katılımsız Yükseltme :: InstallOnShutdown", Yanlış) ise:
+ apt_pkg.config.find_b ("Katılımsız Yükseltme :: InstallOnShutdown", yanlış) ise:
         env = copy.copy (os.environ)
         env ["UNATTENDED_UPGRADES_FORCE_INSTALL_ON_SHUTDOWN"] = "1"
         logging.debug ("kapatma modunda katılımsız yükseltmeleri başlatma")

Sonuç

tbh sadece sonuncusu gerçek bir düzeltmedir. diğer her iki seçenek de gerçek düzeltme uygulanana kadar geçici çözümlerdir.

Bu akış yukarı yapılmalıdır ve bu her iki dağıtım için hem Debian'ı (Debian Stretch'te test edilmiştir) hem de Ubuntu'yu (Ubuntu 16.04.1'de test edilmiştir) etkiler.

Burada bir hata raporu açtım: https://bugs.launchpad.net/ubuntu/+source/unattended-upgrades/+bug/1661611


2
apt_pkg.config.find_b (), dize değil boole döndürür. "find_b (anahtar [, default = False]) → bool Anahtarda depolanan boolean değerini veya istenen seçenek ayarlanmamışsa bool nesnesi tarafından verilen değeri döndürür." apt.alioth.debian.org/python-apt-doc/library/… Yani yanlış kontrol doğru olduğundan katılımsız yükseltme-kapatma bir hata değil.
Brian Murray

Yukarıdaki Launchpad hata raporu bağlantısını izleyen herkesin göreceği gibi, bu sorun aslında başarısız bir dize karşılaştırmasından kaynaklanmadı, ancak bunun yerine şimdi düzeltildiği bildirilen bir systemd sıralama hatası nedeniyle oldu .
sampablokuper

1

Çözüm olarak bu komut dosyasını düzeltmek için kullanıyorum:

#!/usr/bin/env bash

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

exit

İnşallah yakında desteklenecektir.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.