Photo by Growtika on Unsplash

Red Hat Paket Yönetimi Rehberi Serisi #1 | RPM

Huseyinkaya

--

Linuxta bir yazılımı kurmanın iki yolu vardır. Paket yöneticisi kullanma ve kaynak dosyalardan derleme. Kaynak dosyalardan derleme yoluyla bir paketin kurulumu, paket yöneticisi ile kuruluma göre daha zordur. Çünkü kaynak dosyalardan kurulumun, kaynak dosyaların hazırlanması, derleme adımlarının manuel yapılması, her uygulamanın derleme aşamasında farklı adımlar içerebilmesi, bağımlılıklarının kontrolünün yöneticinin sorumluluğunda olması gibi ek yükleri vardır. Bu yazımızda birçok paket yöneticisinden biri olan ve Red Hat tabanlı işletim sistemlerinde kullanılan RPM paket yönetim aracı, Rocky Linux işletim sistemi üzerinde incelenecektir.

Rpm Nedir?

RPM, Red Hat tabanlı işletim sistemlerinde kullanılan temel paket yönetim aracıdır. RPM paketi aslında yazılımın dosyalarını, meta verilerini, kurulum ve kaldırma talimatlarını içeren sıkıştırılmış bir arşivdir. Burada paket olarak bahsedilen, programı yüklemek için gereken tüm verileri içeren .rpm uzantılı bir dosyadır. RPM ile de bir paketin kurulumu, güncellemesi, kaldırılması, yönetilmesi, incelenmesi vb. mümkündür. Eğer .rpm olarak paketlenmiş bir uygulamanın kurulabilmesi için daha önceden sistemde kurulu olması gereken yani bağımlı olduğu paketler var ise öncelikle yönetici tarafından bu paketler kurulmalıdır. Bir .rpm paket, kurulum esnasında başka bir pakete bağımlılık duyuyor ise kurulum adımında bu bilgiyi yöneticiye vermektedir.

Bir RPM paketinin adı belli bir formatta adlandırılmaktadır.

Tüm Yüklü Paketleri Göster

Yüklü paketlerin tamamını göstermek için rpm -qa komutu çalıştırılır. Terminal çıktısı çok uzun olduğu için kısaltılmıştır.

# YÜKLÜ PAKETLERİN TAMAMINI GÖSTER
[root@localhost ~]# rpm -qa
gpgme-1.13.1-11.el8.x86_64
python3-setuptools-wheel-39.2.0-7.el8.noarch
python3-hawkey-0.63.0-17.el8_9.x86_64
rocky-gpg-keys-8.9-1.6.el8.noarch
....................
systemd-239-78.el8.x86_64
polkit-libs-0.115-15.el8.x86_64
libmodulemd-2.13.0-1.el8.x86_64
policycoreutils-2.9-24.el8.x86_64

Paket Yükle

Bir .rpm paketini yüklemek için rpm -ivh paket-adi.rpm komutu çalıştırılır. Örnek olarak wget kurulumu yapılacaktır.

# .rpm paketini indir
[root@localhost home]# curl -O https://rpmfind.net/linux/centos/8-stream/AppStream/x86_64/os/Packages/wget-1.19.5-11.el8.x86_64.rpm
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 734k 100 734k 0 0 899k 0 --:--:-- --:--:-- --:--:-- 899k

# Wget paketini yükle
# -i (install): Paketi yükleme modunu belirten bir seçenek. Bu, belirtilen RPM paketini sisteme yüklemek için kullanılır.
# -v (verbose): Ayrıntılı çıktı almayı sağlar. Bu seçenekle birlikte kullanıldığında, işlemin ayrıntılarını daha fazla bilgi ile görebilirsiniz.
# -h (hash): İşlemin ilerleme çubuğunu gösterir. Yüklenen paketin işleminin ne kadarının tamamlandığını gösteren bir ilerleme çubuğu sağlar.
[root@localhost home]# rpm -ivh wget-1.19.5-11.el8.x86_64.rpm
warning: wget-1.19.5-11.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
error: Failed dependencies:
libmetalink.so.3()(64bit) is needed by wget-1.19.5-11.el8.x86_64

Yukarıdaki ilk komutta, wget uygulamasının .rpm paketi kurulum için sunucuya indirilmiştir. İkinci komutta paket yüklenmek istendiğinde bağımlılık hatası alınmıştır. Bu hatayı almak, ileride karşılaşılabilecek bağımlılık hatalarının çözümüne aşina olmak amacıyla kıymetlidir. Bir bağımlılık durumu olmasaydı paket sorunsuz kurulmuş olacaktı. Aşağıda çözümüyle beraber, wget kurulumunun nasıl tamamlandığı gösterilmektedir. Öncelikle bağımlı olunan libmetalink.so.3()(64bit) paketi küçük bir araştırma ile internetten bulunmalı ve .rpm uzantılı kurulum dosyası indirilmedilir. Bu gibi paketlerin bulunmasında faydalı olan rpmfind adlı siteden doğrudan .rpm paketlere erişilebilir. Bağımlı paket indirilip kurulduktan sonra asıl kurulacak paket olan wget başarıyla kurulabilmektedir.

# libmetalink.so.3()(64bit) paketi indiriliyor.
[root@localhost home]# curl -O https://rpmfind.net/linux/centos/8-stream/BaseOS/x86_64/os/Packages/libmetalink-0.1.3-7.el8.x86_64.rpm
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 32760 100 32760 0 0 88064 0 --:--:-- --:--:-- --:--:-- 88064

# İndirilen paketler listeleniyor
[root@localhost home]# ls
libmetalink-0.1.3-7.el8.x86_64.rpm wget-1.19.5-11.el8.x86_64.rpm

# Öncelikle bağımlı olunan paket kuruluyor
[root@localhost home]# rpm -ivh libmetalink-0.1.3-7.el8.x86_64.rpm
warning: libmetalink-0.1.3-7.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:libmetalink-0.1.3-7.el8 ################################# [100%]

# Bağımlı paket kurulduktan sonra asıl paket kuruluyor.
[root@localhost home]# rpm -ivh wget-1.19.5-11.el8.x86_64.rpm
warning: wget-1.19.5-11.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:wget-1.19.5-11.el8 ################################# [100%]

# Version parametresi ile version kontrol ediliyor.
[root@localhost home]# wget --version
GNU Wget 1.19.5 built on linux-gnu.
.....................
Originally written by Hrvoje Niksic <hniksic@xemacs.org>.
Please send bug reports and questions to <bug-wget@gnu.org>.
[root@localhost home]#

Paketin Bağımlılıklarını Listele

rpm -qpR paket-adi.rpm komutu ile paketin bağımlı olduğu diğer paketleri görebiliriz. Örnek olarak aşağıda listelenen paketler varsayılan olarak zaten sunucuda bulunmaktadır.

[root@localhost home]# rpm -qpR wget-1.19.5-11.el8.x86_64.rpm 
warning: wget-1.19.5-11.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
/bin/sh
/bin/sh
/sbin/install-info
/sbin/install-info
config(wget) = 1.19.5-11.el8
libc.so.6()(64bit)
libc.so.6(GLIBC_2.11)(64bit)
libc.so.6(GLIBC_2.14)(64bit)
libc.so.6(GLIBC_2.15)(64bit)
libc.so.6(GLIBC_2.17)(64bit)
libc.so.6(GLIBC_2.2.5)(64bit)
libc.so.6(GLIBC_2.3)(64bit)
libc.so.6(GLIBC_2.3.4)(64bit)
libc.so.6(GLIBC_2.4)(64bit)
libc.so.6(GLIBC_2.7)(64bit)
libc.so.6(GLIBC_2.8)(64bit)
libgnutls.so.30()(64bit)
libgnutls.so.30(GNUTLS_3_4)(64bit)
libgnutls.so.30(GNUTLS_3_6_3)(64bit)
libgpgme.so.11()(64bit)
libgpgme.so.11(GPGME_1.0)(64bit)
libgpgme.so.11(GPGME_1.1)(64bit)
libidn2.so.0()(64bit)
libidn2.so.0(IDN2_0.0.0)(64bit)
libmetalink.so.3()(64bit)
libnettle.so.6()(64bit)
libnettle.so.6(NETTLE_6)(64bit)
libpcre.so.1()(64bit)
libpsl.so.5()(64bit)
libuuid.so.1()(64bit)
libuuid.so.1(UUID_1.0)(64bit)
libz.so.1()(64bit)
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(PayloadIsXz) <= 5.2-1
rtld(GNU_HASH)
[root@localhost home]#

Paket Bilgisi

rpm -qip paket-adi.rpm komutu ile paket dosyası hakkında genel bilgi alabiliriz.

[root@localhost home]# rpm -qip wget-1.19.5-11.el8.x86_64.rpm 
warning: wget-1.19.5-11.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
Name : wget
Version : 1.19.5
Release : 11.el8
Architecture: x86_64
Install Date: (not installed)
Group : Applications/Internet
Size : 2895311
License : GPLv3+
Signature : RSA/SHA256, Sal 20 Ara 2022 17:24:08 +03, Key ID 05b555b38483c65d
Source RPM : wget-1.19.5-11.el8.src.rpm
Build Date : Prş 15 Ara 2022 10:07:26 +03
Build Host : x86-01.mbox.centos.org
Relocations : (not relocatable)
Packager : CentOS Buildsys <bugs@centos.org>
Vendor : CentOS
URL : http://www.gnu.org/software/wget/
Summary : A utility for retrieving files using the HTTP or FTP protocols
Description :
GNU Wget is a file retrieval utility which can use either the HTTP or
FTP protocols. Wget features include the ability to work in the
background while you are logged out, recursive retrieval of
directories, file name wildcard matching, remote file timestamp
storage and comparison, use of Rest with FTP servers and Range with
HTTP servers to retrieve files over slow or unstable connections,
support for Proxy servers, and configurability.

Paket Güncelle

rpm -Uvh paket-adi.rpm ile paket güncellenir. Örnekte 1.19.5 olan wget versiyonu yeni .rpm paketinin yüklenmesi ile 1.20.3 versiyonuna güncellenmiştir.

[root@localhost home]# rpm -Uvh wget-1.20.3-3.12.1.x86_64.rpm 
warning: wget-1.20.3-3.12.1.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 39db7c82: NOKEY
Verifying... ################################# [100%]
Preparing... ################################# [100%]
Updating / installing...
1:wget-1.20.3-3.12.1 ################################# [100%]
[root@localhost home]# wget --version
GNU Wget 1.20.3 built on linux-gnu.

Paket Sil

rpm -ev paket-adi ile paket sunucudan kaldırılır. Bu komut ile paketin bağımlılıkları da kaldırılır.

[root@localhost home]# rpm -ev wget
Preparing packages...
wget-1.19.5-11.el8.x86_64

rpm -ev — nodeps paket-ismi ile paket sunucudan kaldırılır fakat bağımlılıklara dokunulmaz.

[root@localhost home]# rpm -ev --nodeps wget
Preparing packages...
wget-1.19.5-11.el8.x86_64

--

--