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 aptiş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.servicetarafı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.serviceVM, 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.dailybirkaç APT yapılandırma değişkenini okuyor; ayar APT::Periodic::Enableiş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::Enabledeğer almasına rağmen 0(aşağıya bakınız), unattended-upgradesprogram hala çalışıyor ...
ubuntu@test:~$ apt-config shell AutoAptEnable APT::Periodic::Enable
AutoAptEnable='0'
3. /usr/lib/apt/apt.systemd.dailyTamamen çıkarın
Aşağıdaki cloud-initkomut, 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.servicebir
cloud-initbetiği nasıl devre dışı bırakabilirim ?
--nowkomuttaki bayrağı kaçırıyordunuz systemctl disable. Bu benim sorunumdu.
disable --noweşdeğerdir stopizledi disable.