GNU/Linux >> Belajar Linux >  >> Ubuntu

Ubuntu – Bagaimana Cara Menonaktifkan `apt-daily.service` Di Ubuntu Cloud Vm Image?

Gambar VM server Ubuntu 16.04 tampaknya memulai "apt-daily.service" setiap
12 jam atau lebih; layanan ini melakukan berbagai tugas terkait APT seperti menyegarkan
daftar paket yang tersedia, melakukan peningkatan tanpa pengawasan jika diperlukan, dll.

Saat memulai dari "snapshot" VM, layanan akan dipicu segera , karena (saya
duga) systemd menyadari dengan cepat bahwa pengatur waktu seharusnya sudah mati sejak lama.

Namun, APT yang berjalan mencegah apt . lainnya proses berjalan karena memegang
kunci pada /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 hingga Ansible
telah menyelesaikan penyiapan mesin (yang biasanya melibatkan pemasangan paket);
lihat https://github.com/gc3-uzh-ch/elasticluster/issues/ 304 untuk info lebih lanjut dan
konteks.

Saya telah mencoba berbagai opsi untuk menonaktifkan fitur “unattended upgrades”
melalui skrip “user data” untuk cloud-init , tapi sejauh ini semuanya gagal
.

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; tetap saja, apt-daily.service dimulai beberapa saat setelah VM menjadi
siap 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

Skrip /usr/lib/apt/apt.systemd.daily membaca beberapa konfigurasi APT
variabel; pengaturan APT::Periodic::Enable menonaktifkan fungsionalitas
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 dari baris perintah
(lihat di bawah), unattended-upgrades program masih berjalan…

    [email protected]:~$ apt-config shell AutoAptEnable APT::Periodic::Enable
    AutoAptEnable='0'

3. Hapus /usr/lib/apt/apt.systemd.daily sama sekali

Berikut cloud-init skrip menghapus skrip pemutakhiran yang tidak dijaga
sama sekali::

    #!/bin/bash

    mv /usr/lib/apt/apt.systemd.daily /usr/lib/apt/apt.systemd.daily.DISABLED

Tetap saja, tugas berjalan dan saya bisa melihatnya di tabel proses! meskipun file
tidak ada jika diperiksa dari baris perintah::

[email protected]:~$ ls /usr/lib/apt/apt.systemd.daily
ls: cannot access '/usr/lib/apt/apt.systemd.daily': No such file or directory

Sepertinya cloud-init skrip (bersama dengan baris perintah SSH)
dan proses sistem root dijalankan di sistem file dan ruang proses
yang terpisah…

Pertanyaan

Apakah ada sesuatu yang jelas saya lewatkan? Atau apakah ada keajaiban namespace
yang tidak saya sadari?

Terkait:Perbedaan antara [] dan () dalam Ekspresi Reguler Dasar?

Yang terpenting:bagaimana saya bisa menonaktifkan apt-daily.service melalui
cloud-init naskah?

Jawaban yang Diterima:

Ya, jelas ada sesuatu yang saya lewatkan.

Systemd adalah tentang memulai layanan secara bersamaan, jadi cloud-init skrip
dijalankan bersamaan apt-daily.service dipicu. Pada saat cloud-init dapat mengeksekusi payload yang ditentukan pengguna, apt-get update
sudah berjalan. Jadi upaya 2. dan 3. gagal bukan karena keajaiban namespace
, tetapi karena mereka terlambat mengubah sistem untuk apt.systemd.daily untuk
mengambil perubahan.

Ini juga berarti bahwa pada dasarnya tidak ada cara untuk mencegah apt.systemd.daily dari menjalankan — seseorang hanya dapat membunuhnya setelah dimulai.

Skrip “data pengguna” ini mengambil rute ini::

#!/bin/bash

systemctl stop apt-daily.service
systemctl kill --kill-who=all apt-daily.service

# wait until `apt-get updated` has been killed
while ! (systemctl list-units --all apt-daily.service | egrep -q '(dead|failed)')
do
  sleep 1;
done

# now proceed with own APT tasks
apt install -y python

Masih ada jendela waktu yang memungkinkan login SSH apt-get tidak akan berjalan, tetapi saya tidak dapat membayangkan solusi lain yang dapat bekerja pada gambar awan stok
Ubuntu 16.04.


Ubuntu
  1. Cara menonaktifkan layanan di Ubuntu

  2. Cara menghapus atau menonaktifkan Dock Ubuntu

  3. Bagaimana cara mengatur kata sandi pada gambar cloud Ubuntu?

  1. Cara Memperbaiki Paket Rusak di Ubuntu

  2. Cara Mengaktifkan/Menonaktifkan Firewall UFW di Ubuntu 18.04

  3. Cara Menonaktifkan Firewall di Ubuntu 18.04

  1. Cara Menginstal Spotify di Ubuntu 20.04

  2. Cara Mengaktifkan/Menonaktifkan Peningkatan Tanpa Pengawasan di Ubuntu 16.04

  3. Cara Mengaktifkan atau Menonaktifkan Layanan di Ubuntu Systemd/Pemula