Bagaimana cara kerja proses peningkatan Ubuntu?

11

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?

bbosak
sumber
Oke, menambahkan pertanyaan saya dalam komentar karunia bukanlah ide yang bagus. Sepertinya saya tidak bisa mengeditnya juga.
Oxwivi

Jawaban:

3

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.

Slipstream
sumber
Itu juga akan menjelaskan mengapa saya memerhatikan fitur-fitur baru ditambahkan ke beberapa menu saat peningkatan berlangsung.
bbosak
15

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 upgradeyang biasanya tidak menghapus perangkat lunak apa pun. Upgrade rilis besar sesuai dengan apt-get dist-upgradeselama 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-markuntuk 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:

  1. Ketika infrastruktur tingkat rendah diubah (tingkat rendah seperti di kernel, driver, perpustakaan, dll apa pun yang pengguna tidak berinteraksi secara langsung), apa yang terjadi dengan binari yang sudah tidak digunakan lagi?
    • OKE ... Saya sudah membahas yang ini
  2. Apa yang terjadi pada aplikasi yang telah sepenuhnya ditinggalkan? Misalnya, Unity 2D (atau perangkat lunak lain yang ditinggalkan / tidak ada pengelola yang paketnya tidak dalam repo baru).
    • Jika Aplikasi pernah diinstal secara manual itu akan tetap di sistem, sering menyebabkan ketergantungan neraka yang saya jelaskan.
  3. ubuntu-desktop adalah metapackage yang menarik aplikasi default Ubuntu sebagai dependensi. Jika saya menghapus Firefox dan menginstal Chrome, apakah Firefox masih akan ditarik sebagai bagian dari peningkatan?
    • Selama itu adalah browser standar dari Rilis baru, ya. Chromium juga akan ditingkatkan. Saya tidak yakin apakah Anda dapat menghapus Firefox tanpa menghapus ubuntu-desktop. Perhatikan bahwa selain dari dependensi yang ketat, sistem paket juga mengetahui konsep rekomendasi, di mana perangkat lunak biasanya akan diinstal seperti dependensi, tetapi dapat dihapus instalasinya nanti tanpa mempengaruhi hal lain selain dependensi sendiri.
  4. Terlebih lagi, apa yang terjadi jika satu aplikasi dulu bergantung pada package-x dan tidak lagi melakukannya dalam rilis baru; Apakah paket-x akan ditingkatkan bersama paket-paket lainnya meskipun menjadi yatim?
    • Nggak.

Tanyakan kepada saya jika Anda masih memiliki pertanyaan lagi.

Paul Hänsch
sumber
Bisakah Anda menautkan lebih banyak dokumen yang terkait dengan neraka ketergantungan (mengingatkan saya pada istilah DLL neraka)? Saya menggunakan instalasi minimal Ubuntu, dan saya ingin mengetahui bagaimana peningkatan akan bekerja untuk saya.
Oxwivi
Saya pikir semua yang Anda akan temukan di internet tentang neraka ketergantungan adalah keluhan. Baca halaman manual yang tepat, seperti man apt-get. Saya merasa sering berguna untuk menggunakan sintaks perintah rilis yang menentukan seperti apt-get -t intrepid install foo/jaunty bar/oneiricdll ..., 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.
Paul Hänsch
3
Anda memenangkan penghargaan untuk respons non-kode terpanjang yang pernah saya lihat di jaringan Stack Exchange.
Patrick
3

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.

psusi
sumber
2

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.

thomasrutter
sumber
Saya sudah mengetahui semua detail ini, silakan baca komentar yang saya berikan dengan hadiah saya. Saya ingin tahu bagaimana tepatnya Ubuntu, yaitu aptmenangani paket dan dependensi tertentu selama proses peningkatan.
Oxwivi
-2

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.

kecurangan
sumber
1
Tidak, mekanisme chroot tidak digunakan selama peningkatan sistem. Pembaruan dilakukan pada sistem file langsung. Anda bahkan dapat menonton menu program Anda dibangun kembali dan ikon program berubah saat sedang diganti. Tetapi mekanisme chroot digunakan dalam instalasi sistem asli, ketika sistem baru "debootstrapped" menjadi lingkungan perubahan root pada partiton disk yang baru dibuat.
Paul Hänsch