GNU/Linux >> Belajar Linux >  >> Linux

Bekerja dengan dependensi paket di Red Hat Linux

Tujuan

Tujuan kami adalah membiasakan diri dengan alat yang tersedia untuk mengetahui informasi tentang dependensi paket pada sistem berbasis RPM.

Sistem Operasi dan Versi Perangkat Lunak

  • Sistem operasi: Red Hat Enterprise Linux 7.5
  • Perangkat Lunak: rpm 4.11, enak 3.4.3

Persyaratan

Akses istimewa ke sistem.

Kesulitan

MUDAH

Konvensi

  • # – membutuhkan perintah linux yang diberikan untuk dieksekusi dengan hak akses root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
  • $ – perintah linux yang diberikan untuk dieksekusi sebagai pengguna biasa yang tidak memiliki hak istimewa

Pengantar

RPM, yang merupakan singkatan dari Red Hat Package Manager, adalah pengelola paket yang terkenal dan matang yang digunakan oleh semua distribusi rasa Red Hat, serta SuSE. Dengan RPM, pembuat paket dapat mendefinisikan hubungan antar paket, dan bahkan dengan versi paket – misalnya, server Apache Tomcat membutuhkan lingkungan Java yang tepat untuk dapat dijalankan.

Di sisi lain, untuk menginstal lingkungan Java, Anda tidak memerlukan server Tomcat – Anda dapat memutuskan untuk menjalankan beberapa aplikasi berbasis Java yang berbeda, mungkin yang ditulis sendiri dimulai dengan tangan saat diperlukan untuk melakukan tugasnya. Dengan kata lain, server Tomcat bergantung di Jawa.

RPM dapat membuat hidup sysadmin jauh lebih mudah dengan menghadirkan dependensi ini – dan alat yang mengandalkan RPM seperti rpm utilitas, atau yum dapat secara otomatis menyelesaikan dependensi ini, dan menginstal semua paket tambahan yang diperlukan agar komponen baru dapat berjalan dengan benar.

Mengumpulkan informasi

Untuk mengetahui daftar paket yang bergantung pada paket foo.bar, jalankan saja:

# yum deplist foo.bar

Dan untuk menemukan daftar paket yang membutuhkan (tergantung pada) paket foo.bar:

rpm -q --whatrequires foo.bar

Contoh nyata dengan paket generik:bash . Mari kita lihat paket apa saja yang dibutuhkan oleh paket bash:

# yum deplist bash

package: bash.x86_64 4.2.46-30.el7
  dependency: libc.so.6()(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.11)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.14)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.15)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.2.5)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.3)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.3.4)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.4)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libc.so.6(GLIBC_2.8)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libdl.so.2()(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libdl.so.2(GLIBC_2.2.5)(64bit)
   provider: glibc.x86_64 2.17-222.el7
  dependency: libtinfo.so.5()(64bit)
   provider: ncurses-libs.x86_64 5.9-14.20130511.el7_4
  dependency: rtld(GNU_HASH)
   provider: glibc.x86_64 2.17-222.el7
   provider: glibc.i686 2.17-222.el7

Dari perspektif paket, bash adalah yang sangat umum, dan seperti yang terlihat di atas, bergantung pada beberapa paket inti. Tetapi jika kita ingin memasang sesuatu yang jauh lebih bergantung, katakanlah, konzole Emulator terminal KDE pada Red Hat Linux dengan manajer desktop Gnome, kita mungkin mendapatkan lebih dari satu halaman daftar ketergantungan. Dan dengan konzole , kasusnya bahkan lebih rumit, karena bergantung pada paket QT dan KDE, jadi untuk menginstalnya, Anda perlu menginstal seluruh lingkungan KDE di samping Gnome (apa yang pasti dapat Anda lakukan) untuk menyediakan semuanya konzole kebutuhan.

Untuk lebih memahami paket apa yang akan diinstal, periksa daftar yang disediakan oleh yum sebelum memulai instalasi:

# yum install konsole

Resolving Dependencies
--> Running transaction check
---> Package konsole.x86_64 0:4.10.5-4.el7 will be installed
--> Processing Dependency: konsole-part = [...]

Dalam kasus sistem Red Hat dengan Gnome, mungkin diperlukan beberapa waktu untuk menyelesaikan dependensi aplikasi KDE untuk pertama kalinya, dan ketika itu selesai, yum akan menampilkan satu-satunya paket yang kami minta, dengan ukuran kecil yang bagus . Diikuti oleh lebih dari seratus paket yang diinstal untuk dependensi:

[...]
--> Running transaction check
---> Package boost-system.x86_64 0:1.53.0-27.el7 will be installed
---> Package boost-thread.x86_64 0:1.53.0-27.el7 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==============================================================================================================================
 Package                                Arch             Version                           Repository                    Size
==============================================================================================================================
Installing:
 konsole                                x86_64           4.10.5-4.el7                      rhel-7-server-rpms            78 k
Installing for dependencies:
 OpenEXR-libs
[...]

Dan dalam ringkasan kita dapat melihat bahwa instalasi akan menggunakan lebih banyak ruang pada disk pada akhirnya, maka ukuran paket yang kita butuhkan:

[...]
Transaction Summary
==============================================================================================================================
Install  1 Package (+120 Dependent packages)

Total download size: 108 M
Installed size: 307 M

Ini banyak, tetapi kami mendapat informasi berguna tentang berapa banyak ruang yang akan digunakan. Ini sangat berguna jika kita menginstal banyak paket dalam satu transaksi.

Sementara dalam kasus ini transaksinya boros, tujuan dependensi pada akhirnya adalah tentang menghemat sumber daya:jika seseorang mengimplementasikan beberapa fungsionalitas dalam kodenya, dan itu dapat dipanggil pada sistem, pengembang berikutnya mungkin tidak perlu mengimplementasikan fungsionalitas yang sama. lagi, tetapi gunakan implementasi yang sudah ada. Untuk konzole contoh, jika Anda ingin menginstal akregator lain kali, sistem akan memiliki banyak dependensi yang telah diselesaikan, seperti kdepim paket berisi akregator juga bergantung pada qt , kdelibs , dan semacamnya.

Kita bisa menggunakan rpm utilitas mendapatkan informasi sebaliknya:mari daftar paket yang diinstal yang memerlukan bash paket:

# rpm -q --whatrequires bash
dracut-033-535.el7.x86_64
initscripts-9.49.41-1.el7.x86_64
autofs-5.0.7-83.el7.x86_64
lvm2-2.02.177-4.el7.x86_64
rsyslog-8.24.0-16.el7.x86_64

Membersihkan paket yang tidak dibutuhkan

Jika kami terus memperbarui sistem kami, dan mengubah atau memperluas peran mereka, paket "sampah" pasti akan muncul. Dalam pengertian paket, sampah berarti tidak lagi diperlukan dan/atau paket yang tidak digunakan lagi. Untuk mengikuti contoh di atas, kita tidak perlu lagi akregator , karena kami memindahkan "layanan" penanganan RSS ke konsentrator RSS pusat hipotetis dalam sistem kami, jadi setelah memigrasikan umpan kami ke tempat pusat, kami mencopot pemasangan aplikasi penanganan RSS lokal. Itu tidak akan menghapus semua paket KDE, karena banyak paket lain mungkin bergantung padanya. Namun jika tidak, paket tersebut adalah sampah, dan akan menghabiskan sumber daya, termasuk waktu pembaruan yang lebih lama, karena yum secara default akan memperbarui semuanya secara membabi buta untuk menemukan paket/errata baru.

Menghabiskan sumber daya untuk memutakhirkan beberapa paket yang tidak dibutuhkan pada laptop dengan koneksi broadband dan SSD mungkin tampaknya tidak menjadi masalah, tetapi bayangkan pusat data dengan ratusan atau ribuan komputer, dan Anda mendapatkan gambarannya. Secara umum merupakan ide yang baik untuk menjaga agar semua sistem tetap sederhana, dan manajemen sumber daya hanyalah satu poin. Semakin kompleks suatu sistem, semakin rentan terhadap kesalahan. Lebih banyak komponen berarti lebih banyak kemungkinan bug.

Untuk mendapatkan gambaran umum tentang paket-paket yang tidak dibutuhkan yang diinstal pada sistem, kita dapat menggunakan yum dan pembersihan paket dengan cara yang sama seperti pada CentOS, atau fitur yum lainnya, autoremove :

yum autoremove

Paket yang ditandai oleh alat ini sebagai tidak dibutuhkan tidak sama.

Saat menggunakan salah satu alat ini, disarankan untuk memeriksa ulang apa yum akan dihapus, dan mungkin menguji apa yang akan dihasilkan pembersihan pada mesin pengujian dengan konten paket yang identik sebelum membersihkan sistem produksi.

Alat-alat ini memang pintar, tetapi tidak mengetahui segalanya:misalnya, tidak akan ada entri di database rpm tentang aplikasi PHP khusus yang berjalan di atas server web yang memanggil cups untuk mencetak pesanan yang masuk pada printer yang terhubung ke server. Artinya, ada bisa menjadi entri jika aplikasi dikemas dengan dependensi yang tepat disertakan, dan diinstal dengan benar dengan rpm atau yum – tetapi itu membutuhkan usaha, dan semua layanan harus dikemas dengan cara yang sama jika Anda ingin merasa aman dengan pembersihan otomatis berbasis yum.

Memecahkan masalah ketergantungan

Terutama di lingkungan yang besar, mungkin ada masalah ketergantungan saat menginstal atau meningkatkan sistem.

Tangkapan layar di bawah menunjukkan masalah sederhana:

Memecahkan dependensi dengan rpm

Pada layar terminal di atas kami mencoba menginstal nrpe paket, klien perlu memantau banyak aspek sistem dengan Nagios. Kami mengunduh klien untuk distribusi, tetapi keduanya rpm dan yum gagal dengan kesalahan yang sama:nrpe paket membutuhkan (tergantung pada) nagios-common kemasan. Dalam contoh ini kita dapat memperoleh paket yang dibutuhkan dari sumber yang sama, dan ketika menginstal keduanya rpm utilitas melihat bahwa ketergantungan yang kita gagalkan sebelumnya akan dipenuhi pada akhir transaksi dan menginstal kedua paket, keluar secara diam-diam dengan sukses.

Kesimpulan

Yum dan rpm adalah alat penting saat bekerja dengan distribusi menggunakan manajer paket RPM. Dengan mengetahui toolset, jauh lebih mudah, dan biasanya lebih aman untuk menyelesaikan pemasangan, peningkatan, dan modifikasi tugas pada lingkungan perangkat lunak dari sistem yang diberikan.


Linux
  1. Manajemen paket Linux dengan apt

  2. Cara Mendaftar Ketergantungan Paket Di Linux

  3. Bekerja dengan pipa di baris perintah Linux

  1. Daftarkan Red Hat Enterprise Linux dan lampirkan langganan dengan Ansible

  2. Mengonfigurasi alamat IPv6 di Red Hat Enterprise Linux 7 dan 8

  3. Cara mencerminkan repositori di Linux

  1. Manajemen paket Linux dengan dnf

  2. Tingkatkan Zsh Di Red Hat 5 X86_64?

  3. Apa itu Red Hat Linux?