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:

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.