Bagaimana cara mengaktifkan pembaruan otomatis senyap untuk repositori apa pun?

44

Saya membaca di sini cara mengaktifkan pembaruan otomatis sunyi untuk Google Chrome. Namun, saya memiliki repositori lain seperti spotify, docky dan lainnya yang saya ingin aktifkan pembaruan diam.

Saya mencoba melakukan ini di sistem Ubuntu 10.04 saya. Tetapi pertanyaan ini berlaku untuk semua versi Ubuntu. Saya telah menginstal paket peningkatan tanpa pengawasan .

Bagaimana saya bisa melakukan ini?

nik90
sumber
Apakah Anda ingin pembaruan keamanan diam-diam . atau SEMUA pembaruan diinstal tanpa intervensi? Mengapa?
david6
1
Hampir semua pembaruan termasuk repositori pengguna juga.
nik90

Jawaban:

66

Pertama, instal gksu:

sudo apt-get install gksu

Cara termudah untuk mengaktifkan pembaruan tanpa pengawasan untuk sistem Anda adalah mengedit file 50unattended-upgradesdi dalam /etc/apt/apt.conf.d/dengan editor teks favorit Anda, misalnya:

gksu gedit /etc/apt/apt.conf.d/50unattended-upgrades

Di dalamnya Anda perlu mengomentari bagian komentar dari blok Origins yang Diizinkan

Perubahan

Unattended-Upgrade::Allowed-Origins {
        "${distro_id} ${distro_codename}-security";
//      "${distro_id} ${distro_codename}-updates";
//      "${distro_id} ${distro_codename}-proposed";
//      "${distro_id} ${distro_codename}-backports";
};

untuk

Unattended-Upgrade::Allowed-Origins {
        "${distro_id} ${distro_codename}-security";
        "${distro_id} ${distro_codename}-updates";
//      "${distro_id} ${distro_codename}-proposed";
//      "${distro_id} ${distro_codename}-backports";
};

Untuk perangkat lunak yang tidak ada di repo Ubuntu yang ingin Anda perbarui, Anda perlu menambahkan asal dan arsip ke file. Untuk menemukan apa itu untuk PPA Anda, buka folder /var/lib/apt/lists/, yaitu area penyimpanan untuk informasi negara untuk setiap sumber daya paket. Apa yang Anda cari adalah file yang diakhiri dengan Release in the name.

Buka satu dengan editor teks Anda, yaitu untuk Google Chrome:

gedit /var/lib/apt/lists/dl.google.com_linux_chrome_deb_dists_stable_Release

Origin: Google, Inc.
Label: Google
Suite: stable
Codename: stable
Version: 1.0
Date: Thu, 17 Nov 2011 19:09:01 +0000
Architectures: i386 amd64
Components: main
Description: Google chrome-linux repository.

Asal jelas ( Origin: Google, Inc.) dan arsip akan menjadi apa pun yang ada di bawah baris Suite ( Suite: stable).

Jika salah satu Originatau Suitetidak ada maka mereka akan menjadi string kosong. Tetapi perhatikan bahwa jika keduanya hilang maka mungkin tidak akan mungkin untuk menggunakan sumber itu dengan pemutakhiran tanpa pengawasan tanpa menyertakan sumber lain dengan masalah yang sama.

Setelah Anda mencatat 2 baris tersebut, Anda perlu mengedit 50unattended-upgradesfile dan menambahkan baris menggunakan format "<origin>:<archive>";demi contoh ini "Google\, Inc.:stable";.

Asal Google Chrome agak rumit karena memiliki ruang titik akhir dan koma di dalamnya, tetapi sebagian besar file Rilis akan mudah dibaca.

Sebagai contoh lain, sumber Node JS menentukan asal ( Node Source) tetapi bukan arsip; sehingga Anda dapat mencocokkannya dengan "Node Source:";.

Origins yang Diizinkan dicocokkan menggunakan wildcard style-shell (lebih khusus, dengan fnmatch Python () ). Jika Anda cukup berhati-hati untuk tidak menyertakan sumber yang bertentangan, Anda dapat menulis hal-hal seperti itu "Node *:*";.


Jangan lupa untuk membuat cadangan 50unattended-upgradesfile Anda sebelum mengeditnya, lakukan dengan sudo cp /etc/apt/apt.conf.d/50unattended-upgrades /etc/apt/apt.conf.d/50unattended-upgrades.bak.

Untuk menguji perubahan yang dilakukan pada file Anda dapat menggunakan sudo unattended-upgradesdengan parameter --dry-rundan --debug.

--dry-run akan menjalankan siklus upgrade tanpa pengawasan kecuali itu tidak akan benar-benar menginstal upgrade, hanya memeriksa dan memverifikasi bahwa semuanya baik-baik saja.

--debug akan mengaktifkan mode verbose.

Anda selalu dapat memeriksa log untuk unattended-upgradesdi /var/log/unattended-upgrades/unattended-upgrades.log.


Anda dapat mengubah konfigurasi peningkatan tanpa pengawasan dengan mengedit file /etc/apt/apt.conf.d/10periodic, opsi untuk konfigurasi ada di /etc/cron.daily/aptheader skrip. Baca untuk mengonfigurasi frekuensi peningkatan tanpa pengawasan.

Bruno Pereira
sumber
2
Terima kasih ... Sangat detail! bolehkah saya bertanya mengapa Anda menaruh \ setelah Google?
nik90
Karena karakter khusus dalam asal, karakter pelarian untuk koma. Kebanyakan asal yang Anda temukan tidak akan memilikinya.
Bruno Pereira
1
@ jo Tidak, itu cara kerjanya, --dry-runakan memeriksa apakah pada daftar yang diperbarui ada pembaruan yang tersedia dan output kepada Anda, daftar pembaruan melalui apa pun konfigurasi Anda /etc/cron.daily/apt, menjalankannya secara manual tidak memperbarui daftar yang saya pikir.
Bruno Pereira
1
Apa yang harus saya masukkan sebagai nama arsip ketika file Rilis yang sesuai tidak mencantumkan Suite?
hsivonen
2
Silakan juga periksa pendekatan otomatis di sini: askubuntu.com/a/792621/417607
Abhishek Bhatia
14

Pendekatan otomatis untuk jawaban @Bruno Pereira: (Silakan pertimbangkan untuk membintangi repo github jika Anda menemukan jawabannya berguna.)

Tautan Kode: https://github.com/abhigenie92/unattended_upgrades_repos

  • Periksa repositori untuk menambahkan:

    $ python automatic_upgrade.py 
    Add repos:
    "Ubuntu:xenial";
    "LP-PPA-kubuntu-ppa-backports:xenial";
    "LP-PPA-tuxonice:xenial";
    "LP-PPA-webupd8team-sublime-text-3:xenial";
    
    Skipping files due to not present origin or suite. Or origin being a url.:
    packagecloud.io_slacktechnologies_slack_debian_dists_jessie_InRelease
    tiliado.eu_nuvolaplayer_repository_deb_dists_xenial_InRelease
    
  • Sekarang edit /etc/apt/apt.conf.d/50unattended-upgradesuntuk memasukkan mereka:

    // Automatically upgrade packages from these (origin:archive) pairs
    Unattended-Upgrade::Allowed-Origins {
        "${distro_id}:${distro_codename}-security";
        "${distro_id}:${distro_codename}-updates";
        "${distro_id}:${distro_codename}-proposed";
        "${distro_id}:${distro_codename}-backports";
      "Ubuntu:xenial";
      "LP-PPA-kubuntu-ppa-backports:xenial";
      "LP-PPA-tuxonice:xenial";
      "LP-PPA-webupd8team-sublime-text-3:xenial";
    };
    ....
    ....
    
  • Periksa untuk melihat apakah mereka disertakan:

    $ sudo unattended-upgrade --dry-run --debug
    Initial blacklisted packages: 
    Initial whitelisted packages: 
    Starting unattended upgrades script
    Allowed origins are: ['o=Ubuntu,a=xenial-security', 'o=Ubuntu,a=xenial-updates', 'o=Ubuntu,a=xenial-proposed', 'o=Ubuntu,a=xenial-backports', 'o=Ubuntu,a=xenial', 'o=LP-PPA-kubuntu-ppa-backports,a=xenial', 'o=LP-PPA-tuxonice,a=xenial', 'o=LP-PPA-webupd8team-sublime-text-3,a=xenial']
    pkgs that look like they should be upgraded: 
    Fetched 0 B in 0s (0 B/s)                                                                                  
    fetch.run() result: 0
    blacklist: []
    whitelist: []
    No packages found that can be upgraded unattended and no pending auto-removals
    
Abhishek Bhatia
sumber
@ andy.holmes selamat datang, silakan pertimbangkan untuk membintangi repositori github jika memungkinkan. Link- github.com/abhigenie92/unattended_upgrades_repos
Abhishek Bhatia
Anda juga dapat memodifikasi cara dpkg memperlakukan paket yang mencoba mengubah file konfigurasi: unix.stackexchange.com/questions/138751/…
deoren
Skrip python ini sangat bagus, namun saya harus memodifikasi apa yang disarankan README.md untuk 50 unattended-upgrade untuk Raspberry Pi saya. Menentukan asal yang diizinkan sebagai, misalnya, "Raspberry:stable";tidak berfungsi. Sebagai gantinya saya menggunakan, misalnya,"o=Raspberry, a=stable";
cfogelberg
5

Editing /etc/apt/apt.conf.d/50unattended-upgrades, tambahkan berikut ini:

Unattended-Upgrade::Origins-Pattern {
        "origin=*";
};

Ini akan memungkinkan peningkatan tanpa pengawasan untuk semua paket.

Zachary West
sumber
Ya, terima kasih atas jawaban yang jelas dan ringkas. Tetapi ada paket yang memiliki origin:'', misalnya datadog-agent dari site:'apt.datadoghq.com'. Dalam hal ini juga akan diperlukan untuk menambahkan "origin=";agar tidak melewatkan paket dengan asal kosong. Tapi lebih baik menggunakan saja "site=*";daripada menggunakannya "origin=*";.
Paul Tobias
Saya telah menambahkan repositori saya sendiri ke dalam file /etc/apt/sources.list.d/my_repo.list, tetapi itu tidak memutakhirkan paket. Secara manual itu bekerja dengan sudo apt update. Ada petunjuk bagaimana?
Sander
Apakah ini menggunakan sumber yang sama dengan pembaruan manual, yaitu apakah itu mengabaikan sumber yang dinonaktifkan?
Silicomancer
3

Ada instruksi untuk memaksa menjalankan ulang untuk membuat cron memulai pembaruan otomatis di tautan berikut . Prosedur untuk menghentikan cron adalah ini

sudo service anacron stop
sudo service cron stop
sudo rm -rf /var/run/unattend* /var/run/cron* /var/run/anacron*
sudo rm -rf /var/lib/apt/periodic/*

dan untuk me-restart cron untuk membuat pembaruan otomatis terjadi sekarang (atau setidaknya dalam beberapa menit) adalah

sudo service cron start
sudo anacron -fn

Bagaimana itu bekerja

Beberapa hal akan memicunya untuk berjalan.

  • Dipecat dari menjalankan /etc/cron.dailyoleh cron, khususnya /etc/cron.daily/apt. Cron beroperasi /etc/cron.dailypada pukul 6.25 pagi (lihat /etc/crontab)

  • Anacron berjalan dari pemula? dan itu akan padam /etc/cron.dailysetelah 5 menit uptime (lihat /etc/anacrontab)

    Catatan APT::Periodic::RandomSleepdapat diatur /etc/apt/apt.conf.d/10periodic, tetapi standarnya adalah 1800an (30 menit) sehingga tidak ada pembaruan yang terjadi hingga 30 menit setelah /etc/cron.daily/aptberjalan.

Log

Jika berfungsi, hal-hal yang harus dicatat dalam folder ini /var/log/unattended-upgrades,.

Eleanor Ellis
sumber
Ini sangat berguna bagi saya karena penyedia hosting virtual saya pikir itu akan menjadi ide yang baik untuk menghapus /etc/cron.daily/aptdari instalasi Ubuntu 12.04 default - sehingga pembaruan APT otomatis tidak terjadi :-(. ServerFault answer serverfault.com/a/568329/ 95570 memberikan perincian tentang cara membuat kembali file itu
Alex Dupuy