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.18
menjadi 5.7.19
tetapi 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 jessie
gambar 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.18
pada yang berikutnya apt-get install
; segera setelah mysql-5.7.19
dirilis dalam distribusi yang sebelumnya akan dihapus.
Agar adil bagi Docker, non-determinisme apt-get update
ini 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.