Bagaimana cara melewatkan pembaruan kernel?

25

Saya menjalankan Ubuntu 12.04.1 LTS i686 di VirtulBox. Setiap kali saya memeriksa pembaruan, ada kernel Linux baru. Jika saya menginstal kernel baru, saya harus menginstal Virtulbox Guest Additions lagi dan reboot server. Saya tidak ingin melakukan ini setiap minggu. Saya tahu saya bisa menghapus centang secara manual paket kernel dari manajer pembaruan, tetapi apakah ada cara untuk melewatkan pembaruan kernel secara otomatis? Saya menemukan jawaban di sini, tetapi untuk Ubuntu 10. Terima kasih.

garconcn
sumber

Jawaban:

18

APT (Advanced Packaging Tool) adalah sistem yang digunakan Ubuntu untuk mengelola semua perangkat lunak yang diinstal pada suatu sistem. Ini memungkinkan Anda untuk "menyematkan" paket ke versi tertentu, sehingga tidak akan diperbarui ketika Anda Pembaruan Manajer berjalan.

Untuk menyematkan paket kernel Anda, pertama-tama Anda harus menentukan versi kernel Anda. Salah satu cara untuk melakukan ini adalah membuka Manajer Paket Synaptic di System> Administration.

masukkan deskripsi gambar di sini

Ketik "linux-generic" di bidang teks pencarian cepat dan tekan enter.

masukkan deskripsi gambar di sini

Catat nomor yang tercantum di kolom "Versi Terpasang". Kami akan menggunakannya di langkah berikutnya.

Selanjutnya, kita perlu mengedit file / etc / apt / preferences. Buka dengan menekan Alt + F2 untuk membuka jendela Run Application dan masuk:

gksudo gedit /etc/apt/preferences

masukkan deskripsi gambar di sini

Ini akan membuka jendela gedit. Kemungkinan besar jendela akan kosong, kecuali Anda pernah bermain-main dengan APT sebelumnya.

Di jendela, ketikkan yang berikut, ganti nomor versi dengan nomor versi yang Anda temukan di Synaptic Package Manager.

Package: linux-generic linux-headers-generic linux-image-generic linux-restricted-modules-generic
Pin: version <insert version here>
Pin-Priority: 1001

masukkan deskripsi gambar di sini

Simpan file dan tutup gedit. Jika Anda membuka Manajer Pembaruan, Anda akan melihat bahwa pembaruan kernel Linux sekarang disembunyikan!

masukkan deskripsi gambar di sini

Sumber

Memblokir paket dengan APT / DPKG

Ingat nama paket kernel Anda dari atas.

Buka terminal dan jalankan:

sudo -s

Dan pukul enter.

Masukkan kata sandi Anda untuk sudo:

echo kernel_package_name hold | dpkg --set-selections

Ganti kernel_package_namedengan nama kernel yang ingin Anda pin.

Sekarang jalankan:

sudo apt-get update && sudo apt-get upgrade

Untuk menghapus pin dari Apt / Dpkg:

Buka terminal

sudo -s
echo kernel_package install | dpkg --set-selections

Ganti paket kernel_ dengan paket yang ingin Anda pin.

Sekarang jalankan:

sudo apt-get update &&  sudo apt-get upgrade

Sumber

Apa yang Anda coba lakukan disebut pinning. Sumber yang saya berikan kepada Anda di atas, memiliki hal-hal penting yang harus Anda lakukan untuk menyelesaikan tugas-tugas Anda.

LnxSlck
sumber
1
Terima kasih untuk balasan Anda. Tampaknya kami menggunakan versi yang berbeda. Saya tidak memiliki Synaptic Package Manager dan / etc / apt / preferensi di Ubuntu 12.04 saya.
garconcn
2
Ya, Synaptic tidak lagi diinstal secara default.
ish
1
@garconcn, Anda dapat menginstal Synaptic dan menginstal perbaikan yang saya katakan kepada Anda, atau membaca pertanyaan lagi, karena saya telah memasukkan lebih banyak info tentang itu
LnxSlck
2
@ LnxSlck, saya menginstal Synaptic dan mengikuti instruksi Anda. Berhasil. Terima kasih.
garconcn
16

Dalam satu baris itu adalah:

echo $(dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}') hold | dpkg --set-selections

Ini akan mengatur status gambar kernel dari install ke hold dan dengan demikian akan mencegah pembaruan.

Christoph
sumber
8

One-liner oleh Christoph tidak memperhitungkan paket tambahan (mis. Linux-image-extra-3.13.0-45-generic). Sebaliknya gunakan yang ini:

untuk i in $ (dpkg -l "* $ (uname -r) *" | grep image | awk '{print $ 2}'); lakukan echo $ i hold | dpkg --set-selection; selesai
Superlexx
sumber
4

Sehubungan dengan saran superlexx: baris itu akan melewatkan paket "header":

dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}'
linux-image-3.13.0-48-generic
linux-image-extra-3.13.0-48-generic

Jadi bagaimana kalau hanya menggunakan yang berikut ini:

dpkg -l "*$(uname -r)*" | grep kernel | awk '{print $2}'
linux-headers-3.13.0-48-generic
linux-image-3.13.0-48-generic
linux-image-extra-3.13.0-48-generic
cloudeliver
sumber
1
Jika paket ekstra / header / dll tidak ditandai, apakah ada masalah? Atau, apakah Anda menyarankan menandai mereka juga untuk kelengkapan? Saya berharap Ubuntu tidak akan mencoba untuk menginstal paket header yang diperbarui, sampai linux-image diinstal (header menjadi ketergantungan gambar). Saya belum memverifikasi ini.
whitehat101
2
Kalian bisa berkolaborasi dalam satu liner alih-alih menumpuk 3 jawaban satu sama lain. = P Just sayin
cubuspl42
1
Tidak perlu memanggil grep jika Anda sudah menggunakan awk:dpkg -l "*$(uname -r)*" | awk '/kernel/{print $2}'
Javier López
1

Ini membersihkan paket meta kernel yang memungkinkan pembaruan kernel:

sudo apt purge $(apt-cache rdepends -i --installed linux-{headers,image}-$(uname -r)|awk '!/[0-9]/ && /^[ ]/{print $1}')

(Jika Anda baru saja memutakhirkan kernel, Anda harus reboot terlebih dahulu dengan kernel baru, atau temukan rilis kernel terbaru dan gunakan di atas alih-alih "$ (uname -r)".)

Disarankan untuk menginstal pembaruan kernel karena kebanyakan pembaruan keamanan.

jarno
sumber
0

Pada Ubuntu 16.04.1, kode berikut berfungsi

for i in $(dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}'); do echo $i hold | sudo dpkg --set-selections; done

ini merupakan peningkatan dari kode Superlexx, sudoditambahkan

dpkg -l | grep linux-image

Anda akan menemukan:

hi linux-image-4.4.0-34-generic ...

hi linux-image-extra-4.4.0-34-generic ...

perhatikan bahwa tag sekarang terbaca hi, bukanii

untuk menghapus pin

for i in $(dpkg -l "*$(uname -r)*" | grep image | awk '{print $2}'); do echo $i install | sudo dpkg --set-selections; done
Chen Deng-Ta
sumber
Jawaban yang bagus tetapi Anda memasukkan sudokomentar bukan perintah ...
WinEunuuchs2Unix
0

Versi lebih pendek: (Ganti "tahan" dengan "instal" untuk menghapus pin)

 dpkg -l "*$(uname -r)*" | grep kernel | awk '{print $2,"hold"}' | sudo dpkg --set-selections

Untuk melihat status semua gambar dan header kernel, jalankan:

 dpkg --get-selections | grep "linux-"
Per Mejdal Rasmussen
sumber