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 apt
proses 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.service
dipicu oleh apt-daily.timer
. Saya telah mencoba untuk menonaktifkan satu atau yang lain, atau keduanya, dengan berbagai kombinasi dari perintah berikut; masih, apt-daily.service
beberapa 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.daily
membaca beberapa variabel konfigurasi APT; pengaturan APT::Periodic::Enable
menonaktifkan 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::Enable
memiliki nilai 0
dari baris perintah (lihat di bawah), unattended-upgrades
program ini masih berjalan ...
ubuntu@test:~$ apt-config shell AutoAptEnable APT::Periodic::Enable
AutoAptEnable='0'
3. Hapus /usr/lib/apt/apt.systemd.daily
semuanya
cloud-init
Skrip 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-init
skrip (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.service
melalui
cloud-init
naskah?
--now
bendera di systemctl disable
perintah untuk membuat perubahan itu efektif dengan segera. Itu masalah saya.
disable --now
sama dengan stop
diikuti oleh disable
.