Ubuntu 16.04 sunucu VM görüntüsü görünüşte her 12 saatte bir "apt-daily.service" başlatır; Bu servis mevcut paketlerin listesini yenilemek, gerektiğinde katılımsız yükseltme yapmak, vb. gibi APT ile ilgili çeşitli görevleri yerine getirir.
Bir VM "enstantanesi" nden başlarken, (sanırım) systemd, zamanlayıcının uzun zaman önce bitmiş olması gerektiğini hızla anladığı için servis hemen tetiklenir .
Bununla birlikte, çalışan bir APT diğer apt
işlemlerin kilitlendiği sırada çalışmasını önler /var/lib/dpkg
. Bunu gösteren hata mesajı şöyle görünür:
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'ın makine kurulumunu tamamlayana kadar (genellikle paketlerin yüklenmesini içeren) bu otomatik APT görevini devre dışı bırakmam gerekiyor; Daha fazla bilgi ve içerik için https://github.com/gc3-uzh-ch/elasticluster/issues/304 adresine bakınız .
"Katılımsız yükseltme" özelliğini "kullanıcı verileri" komut dosyasıyla devre dışı bırakmak için çeşitli seçenekler denedim cloud-init
, ancak hepsi şu ana kadar başarısız oldu.
1. systemd görevini devre dışı bırakın
systemd görevi apt-daily.service
tarafından tetiklenir apt-daily.timer
. Aşağıdaki komutların çeşitli kombinasyonları ile birini veya diğerini veya her ikisini de devre dışı bırakmaya çalıştım; yine de, apt-daily.service
VM, SSH bağlantılarını kabul etmeye hazır hale geldikten sonra başlar.
#!/bin/bash
systemctl stop apt-daily.timer
systemctl disable apt-daily.timer
systemctl mask apt-daily.service
systemctl daemon-reload
2. config seçeneğini devre dışı bırak APT::Periodic::Enable
Script /usr/lib/apt/apt.systemd.daily
birkaç APT yapılandırma değişkenini okuyor; ayar APT::Periodic::Enable
işlevselliği tamamen devre dışı bırakır (satır 331-337). Aşağıdaki komut dosyasıyla devre dışı bırakmayı denedim:
#!/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
Ancak, komut satırından APT::Periodic::Enable
değer almasına rağmen 0
(aşağıya bakınız), unattended-upgrades
program hala çalışıyor ...
ubuntu@test:~$ apt-config shell AutoAptEnable APT::Periodic::Enable
AutoAptEnable='0'
3. /usr/lib/apt/apt.systemd.daily
Tamamen çıkarın
Aşağıdaki cloud-init
komut, katılımsız yükseltme komut dosyasını tamamen kaldırır:
#!/bin/bash
mv /usr/lib/apt/apt.systemd.daily /usr/lib/apt/apt.systemd.daily.DISABLED
Yine de, görev devam ediyor ve bunu işlem tablosunda görebiliyorum! Her ne kadar dosya komut satırından araştırılmışsa olmasa da ::
ubuntu@test:~$ ls /usr/lib/apt/apt.systemd.daily
ls: cannot access '/usr/lib/apt/apt.systemd.daily': No such file or directory
Gibi gösteriyor cloud-init
(birlikte SSH komut satırı ile) komut dosyası ve kök systemd süreci ayrı dosya sistemleri ve süreç mekanlarda yürütmek ...
Sorular
Kaybettiğim aşikar bir şey var mı? Yoksa bilmediğim bir sihir alanı var mı?
En önemlisi: apt-daily.service
bir
cloud-init
betiği nasıl devre dışı bırakabilirim ?
--now
komuttaki bayrağı kaçırıyordunuz systemctl disable
. Bu benim sorunumdu.
disable --now
eşdeğerdir stop
izledi disable
.