Apa yang dilakukan pemasangan apt-get di bawah tenda?

60

Apa yang dilakukan apt-get install ...perintah?

Ketika saya memasukkan apt-get install ...perintah, ada beberapa teks yang muncul di layar, tetapi itu tidak memiliki informasi yang cukup untuk saya. Saya ingin tahu apakah ada file yang dibuat / diedit, layanan apa pun dimulai dan aktivitas lainnya ...

Apakah ada .shfile yang dieksekusi saat apt-get install ...dijalankan? Jika demikian, bagaimana saya bisa melihat konten shfile itu?

Alasan untuk pertanyaan ini baru-baru ini saya mencoba menginstal tomcat7 dengan apt-get install tomcat7. Semuanya berfungsi dengan baik sampai saya menginstal tomcat7-admin(aplikasi web manajer), server menjadi tidak responsif terhadap permintaan apa pun. Saya mencoba ini berkali-kali, dan ini selalu terjadi.

TrungDQ
sumber
Juga kunjungi askubuntu.com/questions/481241/…
Pandya
kunjungi wiki.debian.org/Apt untuk perincian lebih lanjut
Pandya
2
Dari 14,04, apt-getsedang diganti oleh apt. Pengganti belum lengkap, tetapi berfungsi untuk install, upgradedan dist-upgradedi antaranya.
Paddy Landau
@ PaddyLandau Apakah ini pengganti yang tepat atau utilitas tambahan / pembungkus?
muru

Jawaban:

49

Sebagian besar, apt-getmelakukan hal-hal berikut:

  • memeriksa dependensi (dan meminta untuk menginstalnya),
  • mengunduh paket, memverifikasinya dan kemudian memberitahu dpkguntuk menginstalnya.

dpkg akan:

  • ekstrak paket dan salin konten ke lokasi yang tepat, dan periksa file yang sudah ada dan modifikasi pada mereka,
  • jalankan skrip pengelola paket : preinst,, postinst(dan prerm, postrmsebelum ini, jika suatu paket sedang ditingkatkan)
  • melakukan beberapa tindakan berdasarkan pemicu

Anda mungkin tertarik dengan skrip pengelola, yang biasanya berlokasi di /var/lib/dpkg/info/<package-name>.{pre,post}{rm,inst}. Ini biasanya skrip shell, tetapi tidak ada aturan keras. Sebagai contoh:

$ ls /var/lib/dpkg/info/xml-core.{pre,post}{rm,inst}
/var/lib/dpkg/info/xml-core.postinst
/var/lib/dpkg/info/xml-core.postrm
/var/lib/dpkg/info/xml-core.preinst
/var/lib/dpkg/info/xml-core.prerm
muru
sumber
30

Singkatnya : apt-get installmelakukan semua yang diperlukan agar sistem Anda dapat berhasil menjalankan aplikasi perangkat lunak yang baru diinstal.

Lebih lama:

Persiapan:

Dari halaman manual :

Semua paket yang dibutuhkan oleh paket yang ditentukan untuk instalasi juga akan diambil dan diinstal.

Paket-paket tersebut disimpan di repositori di jaringan. Jadi, apt-getunduh semua yang diperlukan ke direktori sementara ( /var/cache/apt/archives/). Mereka akan diunduh dari web- atau ftp-server. Mereka ditentukan dalam apa yang disebut sources.list; daftar repositori. Sejak saat itu mereka diinstal satu per satu secara prosedural.

Yang pertama adalah yang tidak memiliki ketergantungan lebih lanjut; jadi tidak ada paket lain yang harus diinstal untuk mereka. Melalui itu, paket lain (yang sebelumnya memiliki dependensi) tidak lagi memiliki dependensi. Sistem terus melakukan proses itu berulang-ulang sampai paket yang ditentukan diinstal.

Setiap paket menjalani prosedur instalasi.

Instalasi paket:

Dalam distribusi Linux berbasis Debian, seperti Ubuntu, paket-paket itu dalam format standar yang disebut: deb - Format paket biner Debian .

Paket seperti itu berisi file yang akan diinstal pada sistem. Juga mengandung file kontrol . File itu berisi skrip yang harus dijalankan sistem pengemasan dalam situasi tertentu; skrip pengelola yang disebut . Skrip tersebut dibagi menjadi:

  • preinst: sebelum instalasi file ke dalam sistem filehierarchy
  • postinst: setelah instalasi
  • prerm: sebelum penghapusan instalasi
  • postrm: setelah penghapusan instalasi

Ada gambar yang menarik, menunjukkan prosedur pemasangan paket baru:

instalasi

Ada juga lebih banyak file kontrol, yang paling penting adalah sebagai berikut:

  • control: Daftar dependensi, dan informasi berguna lainnya untuk mengidentifikasi paket
  • conffiles: Daftar file konfigurasi (biasanya yang ada di /etc)
  • debian-binary: berisi versi paket-deb, saat ini 2.0
  • md5sums: Daftar md5sums setiap file dalam paket untuk memverifikasi
  • templates: File dengan deskripsi kesalahan dan dialog selama instalasi
kekacauan
sumber
11

Untuk hal-hal di bawah tenda yang sebenarnya , Anda harus mengambil sumber Apt. Cukup sederhana jika Anda memiliki repositori sumber yang diaktifkan:

apt-get source apt

The apt-getperintah itu sendiri tinggal di cmdline/apt-get.cc. Sangat sulit untuk membaca tetapi sebagian besar apt-gettindakan dijabarkan cukup luas di sana. Namun instalasi, dipetakan melalui DoInstallfungsi yang hidup di apt-private/private-install.{cc,h}.

Anda harus ingat bahwa apt-get hanyalah satu sisi dari koin.
dpkgsedang menangani instalasi yang sebenarnya tetapi DoInstalltidak tahu dpkgsecara langsung. apt-getsebenarnya mengejutkan paket-manager agnostik. Semua fungsionalitas disarikan melaluiapt-pkg/package-manager.cc

Saya hanya melihat sebentar tetapi bahkan di sana saya tidak bisa melihat di mana ini sebenarnya melekat pada dpkgsistem. Beberapa di antaranya tampaknya dikonfigurasi secara otomatis apt-pkg/aptconfiguration.cctetapi ini adalah sumur yang dalam. Anda bisa menghabiskan waktu berhari-hari untuk mengungkap ini.

Dokumentasi sumbernya bagus. Anda dapat melakukan hal-hal yang lebih buruk daripada menelusuri setiap file dan membaca header untuk mengetahui apa yang sebenarnya terjadi.

Oli
sumber
6

Ada beberapa jawaban fantastis di sini yang lebih baik daripada yang pendek ini, tetapi sesuatu yang mungkin Anda pertimbangkan untuk membantu Anda mendapatkan pemahaman yang lebih baik tentang perubahan yang dibuat oleh manajer paket adalah Docker . Anda dapat membedakan perubahan yang dibuat dalam wadah menggunakan docker diff <container>dan itu akan menunjukkan kepada Anda semua perubahan. Ini sangat berguna untuk melihat di bawah tenda untuk melihat apa yang apt-get installterjadi pada suatu sistem. Pencarian cepat akan memberi Anda beberapa sumber daya untuk membantu menerapkan ini.

L0j1k
sumber
1
Terima kasih telah memberikan poin Anda. Dalam wadah Docker, saya menginstal firefox dan di tab terminal lain saya memantau dengan cermat diff wadah dan belajar apa semua file berubah dalam wadah. Itu membantu saya untuk memahami dengan lebih jelas.
abhy