Saya baru saja memutakhirkan ubuntu saya dengan rapi, selama pembaruan itu menggantikan sebagian besar aplikasi yang sedang berjalan dengan versi yang lebih baru.
Bagaimana cara kerjanya? (Tidakkah aplikasi akan crash?) Apa yang akan terjadi pada aplikasi jika file lib ditingkatkan dan aplikasi yang sedang berjalan yang mencari lib yang lebih lama mencoba memuatnya?
Jawaban:
Linux (dan UNIX lainnya) menggambar perbedaan antara nama file ( tautan ), file itu sendiri (sering diidentifikasi dengan inode ), dan buka pegangan ke file tersebut. Ketika Anda pergi untuk menghapus file, Anda memanggil
unlink()
panggilan - ini menghapus tautan ke file (Anda juga dapat menggunakannyarename()
untuk menimpanya dengan inode yang berbeda). Namun, jika pegangan terbuka ke file (atau tautan lain - file dapat memiliki banyak hardlink ) tetap ada, inode tetap ada, dan demikian juga konten file, sampai semua tautan dan pegangan hilang.Jadi menjalankan program menggunakan pustaka atau apa pun tetap menggunakan versi lama (sering secara implisit melalui pemetaan memori), sehingga tetap pada disk. Itu hanya tidak memiliki nama file lagi, dan akan dibersihkan ketika semua program menggunakannya mematikan (atau pada reboot berikutnya, selama pemeriksaan filesystem atau replay jurnal).
Lebih lanjut, perhatikan bahwa program yang mengharapkan 'perpustakaan lama' akan baik-baik saja dengan versi perpustakaan yang lebih baru. Perpustakaan Linux diberi nama file ('soname') yang mencerminkan versi ABI (Application Binary Interface) yang ditawarkan oleh perpustakaan. Sebagai contoh, pustaka C pada sistem saya adalah
libc.so.6
. Program apa pun yang dikompilasi melawan versi libc yang lebih lama, tetapi masih versi libc yang menerapkan versi 6 ABI, akan berfungsi dengan baik dengannya. Program yang benar-benar lama akan mencarilibc.so.5
ataulibc.so.4
atau sesuatu sebagai gantinya; dalam hal ini, Anda juga perlu menjaga versi lama - tetapi karena nama filenya berbeda, ini bukan masalah.sumber
Tidak seperti Windows, Anda dapat menghapus atau mengganti file yang terbuka; untuk memberikan penjelasan yang disederhanakan , permintaan baru untuk file membuka file baru, pegangan yang ada menggunakan file yang ada saat dibuat. Dengan kata lain, di Linux Anda dapat memiliki file / versi file yang masih ada, meskipun tidak ada lagi pointer ke mereka dalam struktur direktori; mereka berhenti ada tidak ada pointer sama sekali (tertutup dan semua).
Biasanya aplikasi yang berjalan memuat perpustakaan yang diperlukan di depan, sehingga masalah yang Anda uraikan hanya akan terjadi dalam situasi waktu yang sangat spesifik saat paket sedang diinstal: aplikasi yang berjalan masih menggunakan versi lama perpustakaan, aplikasi yang baru mulai menggunakan yang baru satu.
Ini digunakan tidak hanya di upgrade distro, tetapi terjadi pada setiap upgrade paket (upgrade-dist hanya menambah beberapa langkah automagic untuk proses itu).
sumber
Banyak proses Linux terus bekerja setelah paket-paket mereka berasal telah diupgrade - tetapi beberapa tidak. Dalam pengalaman saya, KDE tidak pernah berfungsi dengan baik jika Anda memutakhirkannya saat sedang berjalan. Anda cenderung mengalami gangguan dan / atau kegagalan untuk keluar.
sumber