Kapan dan mengapa saya harus menggunakan pembaruan apt-get?

15

Pertanyaan Umum:

Bisakah beberapa menjelaskan apa yang dilakukan perintah apt-get updatedan kapan saya benar-benar harus menggunakannya?


Catatan

Tolong beri jawaban rinci . Bukan hanya salinan halaman manual, kecuali versi Anda benar-benar rinci (saya menempatkan satu definisi dari halaman manual di bawah).

apt-get update : Digunakan untuk menyinkronkan kembali file indeks paket dari sumbernya. Indeks paket yang tersedia diambil dari lokasi yang ditentukan di /etc/apt/sources.list(5). Pembaruan harus selalu dilakukan sebelum upgrade atau dist-upgrade.


Sub-pertanyaan:

  • Di mana disimpan indeks paket? Di database? Pada file?
  • Apa yang terjadi jika saya melakukannya apt-get installtanpa memperbarui cache? Apakah ada kemungkinan paket remote tidak ada lagi dan tautannya akan terputus?
  • Apakah ada politik yang sepakat tentang repositori deb? Misalnya, apakah repositori hanya berisi versi terakhir dari paket, atau sebaliknya haruskah berisi semua versi yang tersedia untuk rilis distribusi tertentu?

Konteks

Saya mengajukan pertanyaan karena saya mempelajari kerangka kerja Docker . Salah satu fiturnya adalah Dockerfile , yang memungkinkan Anda membangun semacam gambar OS dengan menjalankan beberapa instruksi dari file ini. Salah satu properti dari gambar ini adalah harus selalu sama, apa pun konteksnya (waktu pembuatan, dll.).

Saya takut jika saya meluncurkan apt-get updateperintah pada waktu yang berbeda, hasilnya akan berbeda dan gambar saya akan berbeda.

Pierre-Jean
sumber
Saya pikir posting ini bisa berfungsi sebagai artikel wiki untuk cara mengajukan pertanyaan tingkat tinggi. Sangat berguna.
Zerodf

Jawaban:

12

apt-get update mengunduh daftar paket yang tersedia.

Daftar paket dapat berubah seiring waktu. Paket baru ditambahkan, dan paket lama dihapus. Jadi jika Anda memiliki cache yang benar-benar tua, dan Anda mencoba melakukannya apt-get install, ia mungkin mencoba mengunduh paket yang sudah tidak ada.
Berapa lama paket lama disimpan dalam repositori tergantung pada pengelola repo (distribusi Anda). Dengan demikian, jika Anda menggunakan sesuatu seperti buruh pelabuhan, di mana cache mungkin sangat ketinggalan zaman, Anda harus selalu menjalankannya apt-get updatesebelum menginstal paket apa pun.

Alasan untuk menghapus dan menambahkan paket sebagian besar adalah perbaikan bug & pembaruan keamanan. Meskipun jika Anda menggunakan repo pihak ke-3 seperti PPA, semuanya berjalan lancar.

Saat menggunakan sesuatu seperti buruh pelabuhan untuk kontainerisasi di lingkungan perusahaan, Anda harus membangun wadah sekali, dan kemudian memindahkan kontainer itu melalui berbagai lingkungan rilis Anda (pengembangan, pementasan, produksi), dan tidak membangun kembali wadah setiap kali. Ini akan memastikan Anda tidak mendapatkan wadah lain yang belum diuji.

Untuk menjawab pertanyaan Anda tentang di mana file cache tinggal /var/lib/apt/lists,.

Patrick
sumber
Jawaban bagus! Terima kasih! Saya ingin bereaksi untuk paragraf "(...) tidak membangun kembali wadah setiap kali. Ini akan memastikan Anda tidak mendapatkan wadah yang berbeda yang belum diuji." Saya telah membaca bahwa praktik terbaik adalah tidak pernah menggunakan peningkatan apt-get. Salah satu alasannya adalah: "Ini juga menghasilkan gambar yang tidak konsisten karena Anda tidak lagi memiliki satu sumber kebenaran tentang bagaimana aplikasi Anda harus dijalankan dan versi dependensi apa yang termasuk dalam gambar." Bukankah itu masalah yang sama dengan apt-get updateitu? Dan Dockerfile tidak seharusnya menjamin gambar?
Pierre-Jean
2
Agak. apt-get updatehanya akan mempengaruhi paket yang baru diinstal Paket yang ada hanya akan ditingkatkan jika diperlukan oleh paket baru (ini harus minimal). Dengan apt-get upgradeAnda meningkatkan semua paket, termasuk yang sudah ada, menghasilkan gambar yang sangat berbeda. Meskipun ini dapat menghasilkan hasil yang berbeda setiap kali Anda membangun dari dockerfile, saya pribadi tidak berpikir ini adalah masalah serius jika Anda melalui rilis multi-lingkungan. Saya pikir ini lebih merupakan masalah jika Anda mendistribusikan buruh pelabuhan kepada orang lain dan minta mereka membangunnya.
Patrick
0

Bisakah beberapa menjelaskan apa yang dilakukan perintah apt-get update dan kapan saya benar-benar harus menggunakannya?

apt-get update mengunduh indeks yang diperbarui dari repositori paket distribusi, mendaftar semua paket yang tersedia dan versi tepatnya.

Distribusi umum seperti Ubuntu dan Debian biasanya konservatif dan kompatibel mundur dalam penawaran paket mereka, sehingga versi tidak akan banyak berubah dari waktu ke waktu; mereka akan berubah karena pembaruan keamanan atau perbaikan bug. Misalnya, mysql dapat ditingkatkan dari 5.7.18menjadi 5.7.19tetapi tidak ke 6.x.

Di mana disimpan indeks paket? Di database? Pada file?

Biasanya disimpan dalam satu atau lebih file di dalamnya /var/lib/apt. Dalam konteks Docker, file-file ini ada di dalam gambar. Ketika membangun Dockerfile, mereka disimpan di lapisan sistem file baru yang dibuat dan bertahan sebagai gambar yang baru dibangun.

Apa yang terjadi jika saya menginstal apt-get tanpa memperbarui cache?

Anda dapat mencoba mengunduh versi paket yang tidak ada lagi. Ini sangat umum pada mesin virtual, tetapi mungkin juga di dalam kontainer jika repositori distribusi telah merilis paket baru setelah gambar dasar dibuat. Mungkin tidak ada koordinasi antara pengelola distribusi dan pengelola Dockerfile, yang hilir dari distribusi dan mungkin jumlahnya lebih besar. Hanya ada satu repositori Debian tetapi ribuan jessiegambar kontainer berbasis dan Dockerfile.

Selain itu, beberapa gambar hulu seperti ubuntu menghapus indeks yang diunduh untuk membuat gambar lebih kecil dan menghindari file yang ketinggalan zaman di sana. Jadi diharapkan indeks yang diperbarui harus diunduh saat membangun di atas gambar dasar, tidak untuk setiap versi gambar dasar untuk dikirimkan dengan indeks terbaru.

Apakah ada kemungkinan paket remote tidak ada lagi dan tautannya akan terputus?

Jelas, karena versi yang disimpan dalam indeks sangat tepat seperti 5.7.19(penyederhanaan; mereka lebih mirip dengan 5.7.19-0ubuntu1).

Apakah ada politik yang sepakat tentang repositori deb? Misalnya, apakah repositori hanya berisi versi terakhir dari paket, atau sebaliknya haruskah berisi semua versi yang tersedia untuk rilis distribusi tertentu?

Sangat umum untuk versi minor yang lama dihapus dengan cepat setelah pembaruan tersedia; Saya berasumsi ini untuk menghemat ruang di server karena binari dapat menimbang beberapa puluh megabyte, dikalikan dengan semua versi dan arsitektur yang didukung. Jadi biasanya tidak mungkin untuk menyematkan, katakanlah, mysql-5.7.18pada yang berikutnya apt-get install; segera setelah mysql-5.7.19dirilis dalam distribusi yang sebelumnya akan dihapus.

Agar adil bagi Docker, non-determinisme apt-get updateini adalah masalah yang dibawa sebagai bagian dari manajemen paket setiap distribusi. Anda akan memiliki masalah yang sama ketika mencoba membuat mesin virtual EC2 atau Vagrant yang berulang.

Beberapa administrator sistem menggunakan layanan seperti Aptly untuk mencerminkan repositori asli dan dapat menyematkan versi tertentu, tetapi Anda berisiko kehilangan pembaruan keamanan kecuali Anda memiliki proses terpisah yang sering dijalankan untuk menguji pembaruan dan mengubah apa yang Anda sedang menjepit.

giorgiosironi
sumber