Gambar Ubuntu server 16,04 rupanya memulai "apt-daily.service" setiap 12 jam atau lebih; layanan ini melakukan berbagai tugas terkait APT seperti memperbarui daftar paket yang tersedia, melakukan peningkatan tanpa pengawasan jika diperlukan, dll.
Ketika mulai dari "snapshot" VM, layanan dipicu segera , karena (saya kira) systemd menyadari dengan cepat bahwa timer seharusnya sudah mati sejak lama.
Namun, menjalankan APT mencegah aptproses lain dari berjalan karena memegang kunci /var/lib/dpkg. Pesan kesalahan yang menunjukkan ini terlihat seperti ini:
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?
Saya perlu menonaktifkan tugas APT otomatis ini sampai Ansible telah menyelesaikan pengaturan mesin (yang biasanya melibatkan pemasangan paket); lihat https://github.com/gc3-uzh-ch/elasticluster/issues/304 untuk info dan konteks lebih lanjut.
Saya telah mencoba berbagai opsi untuk menonaktifkan fitur "peningkatan tanpa pengawasan" melalui skrip "data pengguna" cloud-init, tetapi semuanya gagal sejauh ini.
1. Nonaktifkan tugas systemd
tugas systemd apt-daily.servicedipicu oleh apt-daily.timer. Saya telah mencoba untuk menonaktifkan satu atau yang lain, atau keduanya, dengan berbagai kombinasi dari perintah berikut; masih, apt-daily.servicebeberapa saat dimulai setelah VM menjadi siap untuk menerima koneksi SSH ::
#!/bin/bash
systemctl stop apt-daily.timer
systemctl disable apt-daily.timer
systemctl mask apt-daily.service
systemctl daemon-reload
2. Nonaktifkan opsi konfigurasi APT::Periodic::Enable
Script /usr/lib/apt/apt.systemd.dailymembaca beberapa variabel konfigurasi APT; pengaturan APT::Periodic::Enablemenonaktifkan fungsi sama sekali (baris 331-337). Saya telah mencoba menonaktifkannya dengan skrip berikut ::
#!/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
Namun, meskipun APT::Periodic::Enablememiliki nilai 0dari baris perintah (lihat di bawah), unattended-upgradesprogram ini masih berjalan ...
ubuntu@test:~$ apt-config shell AutoAptEnable APT::Periodic::Enable
AutoAptEnable='0'
3. Hapus /usr/lib/apt/apt.systemd.dailysemuanya
cloud-initSkrip berikut menghapus skrip upgrade yang tidak dijaga sama sekali ::
#!/bin/bash
mv /usr/lib/apt/apt.systemd.daily /usr/lib/apt/apt.systemd.daily.DISABLED
Tetap saja, tugasnya berjalan dan saya bisa melihatnya di tabel proses! meskipun file tidak ada jika diselidiki dari baris perintah ::
ubuntu@test:~$ ls /usr/lib/apt/apt.systemd.daily
ls: cannot access '/usr/lib/apt/apt.systemd.daily': No such file or directory
Tampaknya seolah-olah cloud-initskrip (bersama-sama dengan SSH command-line) dan proses systemd mengeksekusi di filesystem terpisah dan ruang proses ...
Pertanyaan
Apakah ada sesuatu yang jelas saya hilang? Atau adakah keajaiban namespace yang terjadi yang tidak saya sadari?
Yang paling penting: bagaimana saya bisa menonaktifkan apt-daily.servicemelalui
cloud-initnaskah?
--nowbendera di systemctl disableperintah untuk membuat perubahan itu efektif dengan segera. Itu masalah saya.
disable --nowsama dengan stopdiikuti oleh disable.