Bagaimana cara Ubuntu meningkatkan mulus ke distribusi yang lebih baru, sementara sistem operasi masih berjalan? Saya meningkatkan dari 10,10 menjadi 11,04, dan saya telah memutakhirkan beberapa kali sebelumnya, dan itu sesederhana menjalankan pembaruan-manajer -d dan mengunduh serta menginstalnya, kemudian reboot.
Bagaimana tepatnya cara kerjanya? Bagaimana manajer pemutakhiran dapat memperbarui sistem operasi saat sedang digunakan?
upgrade
release-management
bbosak
sumber
sumber
Jawaban:
Dari pengalaman saya, saya akan berasumsi bahwa sementara paket dan modul berjalan mereka ditahan di memori dan tidak merujuk kembali ke salinan mereka pada hard drive. Anda dapat melihat ini jika Anda menjalankan program di ubuntu dan kemudian menghapus paket terkait saat sedang berjalan. Ini akan terus berjalan, tetapi jika Anda menutupnya, Anda tidak dapat memulai kembali.
Saya akan menganggap hal yang sama terjadi dengan peningkatan distribusi. Semua paket yang terkait dengan versi asli ubuntu masih berjalan meskipun telah dihapus dan diganti dengan yang baru, jadi ketika mereka akhirnya dihentikan pada sistem restart, paket-paket baru mengambil alih.
sumber
Berikut deskripsi proses yang lebih terperinci. Maaf, teksnya terlalu panjang.
Pengalaman saya berasal dari Debian, yang seluruh sistem pengemasan dan peningkatan yang digunakan di Ubuntu awalnya diciptakan. Peningkatan keamanan Ubuntu harian berhubungan dengan menjalankan
apt-get upgrade
yang biasanya tidak menghapus perangkat lunak apa pun. Upgrade rilis besar sesuai denganapt-get dist-upgrade
selama paket perangkat lunak dapat ditukar sepenuhnya.Sebenarnya komponen level sangat rendah biasanya tidak ditukar selama upgrade rilis. Segera setelah peningkatan, Anda harus menemukan dua imej kernel dan initrd di direktori / boot Anda. Ini karena tidak seperti program, komponen-komponen kernel tidak dapat dipertukarkan dengan baik. Jika diperlukan untuk memuat driver perangkat baru selama peningkatan, itu harus kompatibel dengan kernel yang berjalan. Setelah sistem boot dengan kernel baru, yang lama dapat dihapus. Terakhir kali saya memeriksa hal ini harus dilakukan secara manual, saya tidak tahu bagaimana updater saat ini menangani ini. Ini BTW. alasan utama, mengapa gambar kernel memuat nomor versinya dalam nama file - sehingga Anda dapat menginstal versi kernel yang berbeda secara bersamaan. Sama untuk lintasan modul (/ lib / modules / ...)
Paket perangkat lunak ditingkatkan satu per satu, dimulai dengan paket terendah dalam hirarki ketergantungan. Itu biasanya perpustakaan program seperti libc dan yang lainnya. Namun, urutan paket diperbarui tidak hardcoded tetapi secara dinamis dihitung sebagai dependensi paket diselesaikan. Dalam kebanyakan kasus, program lama dapat berfungsi dengan perpustakaan baru, jadi tidak terlalu bermasalah jika perpustakaan itu diganti terlebih dahulu.
Anda harus memahami di sini, bahwa sistem membedakan antara paket yang diinstal secara manual (yaitu paket yang Anda instal sendiri, yaitu kromium) dan paket yang diinstal secara otomatis, yang hanya diinstal untuk memenuhi dependensi paket yang diinstal secara manual (dan dependensi dependensi tersebut). ).
Untuk setiap program yang diinstal secara manual, pembaru hanya mencari versi yang lebih baru. Seringkali program tersebut hanyalah paket meta seperti "ubuntu-desktop", yang tidak berisi data, dan hanya dependensi. Versi baru pustaka dependen akan ditarik, karena diminta oleh program yang diperbarui secara langsung (diminta secara manual). Pemutakhiran akan selalu mencoba untuk menginstal versi terbaru yang dapat digunakan dari semua paket yang bergantung (selama pembaruan apa pun tidak hanya merilis pemutakhiran).
Program yang tidak dapat berfungsi dengan versi perpustakaan baru tidak dapat dimulai selama waktu setelah perpustakaan ditingkatkan, dan sebelum program itu sendiri ditingkatkan juga. Jika program-program tersebut seharusnya sudah berjalan sebelum pemutakhiran perpustakaan, mereka akan terus berjalan, karena versi perpustakaan lama tetap ada di memori selama masih digunakan. Hal yang sama berlaku untuk program yang dimulai sebelum mereka ditingkatkan. Mereka tidak akan memberikan fitur baru sampai mereka dihentikan dan dimulai kembali.
Setelah pembaruan, beberapa perpustakaan (atau dependensi pada umumnya) akan menjadi yatim piatu. Itu adalah perpustakaan yang diwajibkan oleh versi program lama, tetapi tidak lagi diperlukan oleh versi baru. Karena paket-paket ini ditandai sebagai terinstal secara otomatis, dan karena tidak ada prgram yang diinstal secara manual yang berhubungan dengannya lagi, paket-paket ini dapat dengan mudah ditemukan dan dihapus. Anda bahkan dapat mengamati ini sebagai langkah terakhir dari proses pembaruan (saver pembaru "menghapus paket usang" atau yang serupa).
Beberapa paket akan diinstal, yang mana tidak diinstal sebelumnya, itu hanyalah dependensi baru, yang ditandai sebagai diinstal secara otomatis, dan dapat dihapus, jika persyaratan untuk mereka menghilang di masa depan.
Mekanisme ini bahkan memungkinkan pertukaran seluruh program pengguna. Seperti misalnya beralih dari Gnome2 ke Unity. Karena keduanya hanyalah dependensi otomatis dari ubuntu-desktop, yang merupakan salah satu dari sedikit paket, untuk itulah versi baru sebenarnya diminta.
Program-program biasanya tidak tergantung pada versi spesifik dari kernel OS, sehingga mereka biasanya akan bekerja dengan baik dengan kernel yang sedang berjalan.
Terlepas dari semua ini saya curiga updater Ubuntu melempar beberapa perbaikan dan penyelesaian spesifik ke dalam campuran, untuk menghindari situasi di mana teori ini rusak.
Seperti yang Anda lihat selama pembaruan ada kondisi yang sangat baik di mana sistem hanya dapat digunakan untuk bagian yang terbatas. Haruskah sesuatu yang salah dalam update Anda akan kemungkinan besar akan ditinggalkan dengan sistem rusak. Seringkali bahkan satu yang tidak mudah diperbaiki, karena program peningkatan juga dapat terpengaruh. Ingat, program dengan dependensi yang rusak dapat terus berfungsi, tetapi tidak dapat dimulai kembali, selama dependensinya rusak, ini berlaku untuk pembaru juga.
Anda dapat menggunakan program baris perintah
apt-mark
untuk mengetahui paket mana yang ditandai sebagai yang diinstal secara manual dan yang telah diinstal secara otomatis. Anda juga dapat mengganti tanda tersebut menggunakan program yang sama. Ini akan secara langsung mempengaruhi proses pembaruan.Dalam pengaturan perangkat lunak yang lebih kompleks, Updater terkadang akan meminta Anda untuk menyelesaikan ketergantungan secara manual. Yaitu ketika satu program yang diinstal secara manual diperbarui dan meminta versi baru dari perpustakaan sementara program lain yang diinstal secara manual tergantung pada versi lama dari perpustakaan yang sama dan tidak dapat bekerja dengan yang baru. Anda kemudian harus membuat pilihan, baik untuk melepaskan salah satu dari program tersebut atau untuk tidak memperbarui keduanya. Karena dependensi seringkali kompleks, ini bisa menjadi sangat berantakan dengan sangat cepat (Anda mungkin pernah mendengar istilah "neraka ketergantungan").
Sekarang untuk pertanyaan spesifik:
Tanyakan kepada saya jika Anda masih memiliki pertanyaan lagi.
sumber
man apt-get
. Saya merasa sering berguna untuk menggunakan sintaks perintah rilis yang menentukan sepertiapt-get -t intrepid install foo/jaunty bar/oneiric
dll ..., hanya contoh. Sebenarnya ini lebih masuk akal dengan Debian di mana Anda kadang-kadang mencampur rilis, di bawah Ubuntu ini kurang biasa. Topik-topik menarik juga dapat disesuaikan dan mengatur paket yang ditahan.Pada tingkat sistem file, tidak seperti Windows, pada sistem Unix Anda dapat menghapus file yang terbuka. Penghapusan hanya menghapus nama file, bukan isinya, sehingga setiap program yang masih memiliki file terbuka masih dapat mengaksesnya sampai mereka menutup file, dan hanya dengan demikian data dibebaskan.
Jadi proses pemutakhiran hanya menghapus file lama, menggantinya dengan yang baru, dan untuk layanan sistem tertentu, restart mereka sehingga versi baru berjalan.
Ada satu atau dua komponen yang tidak dapat di-restart tanpa me-reboot seluruh komputer, jadi setelah memutakhirkannya, Anda akan diminta untuk me-reboot sehingga Anda akan menggunakan versi yang baru.
sumber
Bagaimana Linux dapat memperbarui dirinya sendiri saat masih digunakan?
Terutama karena Linux (dan dengan itu, sebagian besar distribusi) hanya dirancang seperti itu. Mampu meningkatkan paket pada sistem yang sedang berjalan adalah tujuan untuk sebagian besar distribusi berbasis Linux.
Dengan Linux, tidak ada apa pun yang akan mencegah proses manajer paket dari menulis ke file pada disk, bahkan jika file itu saat ini dibuka oleh aplikasi atau file tersebut adalah perpustakaan kode yang dapat dieksekusi atau dibagikan yang sedang berjalan . Pada tingkat yang sangat rendah, ada kunci yang melindungi akses ke file selama operasi tulis / baca tunggal, tetapi ini tidak pernah dirancang untuk ditahan lebih dari hitungan milidetik dan aplikasi lain yang mencoba menulis ke file yang sama hanya akan menunggu milidetik tersebut.
Anda dapat mengganti file yang dapat dieksekusi saat sedang berjalan dan itu tidak akan benar-benar melakukan apa pun untuk proses yang sedang berjalan, karena proses tidak lagi membutuhkan file pada disk - semua kodenya telah dimuat ke dalam memori.
Itulah sebabnya di Linux, meskipun Anda dapat memutakhirkan aplikasi saat sedang berjalan, pemutakhiran tidak akan benar-benar berlaku hingga aplikasi yang Anda tingkatkan dimulai kembali. Dalam hal meningkatkan proses latar belakang seperti layanan sistem, layanan itu perlu dimulai kembali. Jika Anda telah memutakhirkan kernel, maka ini berarti reboot.
Tidak akan mengganti file program saat menjalankan beberapa program?
Beberapa paket dalam distribusi Linux akan berisi instruksi instalasi yang menginstruksikan manajer paket untuk menghentikan layanan sistem tertentu ketika paket diperbarui, dan memulai kembali layanan tersebut setelah pembaruan selesai. Ini mencegah situasi di mana, misalnya, file konfigurasi untuk layanan tertentu diperbarui dan versi layanan yang berjalan mungkin tidak dapat mengatasi versi yang lebih baru dari file konfigurasi.
Secara umum, aplikasi pengguna reguler tidak memerlukan file konfigurasi untuk dijalankan, kecuali untuk file yang dihasilkannya sendiri dan ditempatkan di lokasi seperti direktori home pengguna. Jadi ini tidak akan disentuh oleh manajer paket saat memperbarui.
sumber
apt
menangani paket dan dependensi tertentu selama proses peningkatan.Ini mirip dengan fitur lain. Semoga ini bisa membantu untuk memahami proses dasar.
Saya mengacu pada kemampuan untuk "beralih root" ketika sistem operasi boot.
Ketika sistem operasi boot, sistem file root (baca: "/") pada awalnya hanya tersedia di RAM. Ketika proses booting ini berjalan, ini akan mengalihkan / dari RAM ke sistem file di hard disk.
sumber