Ansible : Red Hat Paketlerini Yönetme

Modern altyapı operasyonları, yalnızca verimlilik için değil, aynı zamanda tekrarlanabilirlik için de otomasyona bağlıdır. Günlük iş akışlarında otomatikleştirilen birçok görev arasında paket yönetimi en sık karşılaşılanlardan biridir. Red Hat Enterprise Linux (RHEL), CentOS, AlmaLinux, Rocky Linux ve Fedora’nın eski sürümleri gibi RPM paket formatlarına dayalı sistemler için Ansible, yum paket yöneticisiyle doğrudan entegre olan yerel bir modül sunar.

Yeni sistemler arka planda dnf’ye güvense de, Ansible’daki yum modülü geriye dönük uyumluluk sayesinde tam işlevselliğe sahiptir. Uygulamada, Ansible kılavuzları aracılığıyla RPM tabanlı sistemlerde paketleri yönetmek için birincil arayüz olmaya devam etmektedir.

Ansible’da Yum modülüyle yapabileceğiniz bazı olağan paket yönetimlerine bir bakalım.

Paketleri bildirimsel olarak yükleme ve kaldırma

Yum modülünün en yaygın kullanımı, bir sistemde belirli paketlerin mevcut olup olmadığını kontrol etmektir. Yazılımları koşulsuz olarak yükleyen zorunlu kabuk görevlerinin aksine, Ansible modülleri bildirimsel olarak çalışır. Bu, yöneticilerin istenen son durumu belirlediği ve Ansible’ın sistemin bu durumu yansıtmasını sağladığı anlamına gelir.

- name: Ensure Apache is installed
  ansible.builtin.yum:
    name: httpd
    state: present

Bu görev, httpd paketinin yüklendiğini onaylar. Paket zaten yüklüyse, herhangi bir değişiklik yapılmaz. Eksikse, yüklenir.

Paketin (bizim durumumuzda Apache paketi) kaldırılması da oldukça basittir:

- name: Remove Apache if no longer required
  ansible.builtin.yum:
    name: httpd
    state: absent

İşte komut satırında state parametresinin değerini değiştirerek bir paketi temiz ve idempotent bir şekilde nasıl kurup kaldırabileceğiniz.

Birden fazla paketle çalışma

Yöneticilerin tek bir görevde sıklıkla birden fazla paket yüklemesi veya kaldırması gerekir. Yum modülü, ad argümanı olarak bir liste kabul eder:

- name: Install common utilities
  ansible.builtin.yum:
    name:
      - git
      - wget
      - curl
    state: present

Bu örnek, Git, wget ve curl’ün hedef sisteme yüklendiğinden emin olur. Görev, yalnızca listelenen paketlerden biri veya daha fazlası mevcut değilse bir değişikliği tetikler.

Paketleri güncel tutmak

Yaygın bir diğer gereklilik ise, yapılandırılmış depodaki paketlerin en son sürüme güncellenmesidir. Bunu yum modülünü kullanarak nasıl yapabileceğiniz aşağıda açıklanmıştır:

- name: Upgrade nginx to the latest version
  ansible.builtin.yum:
    name: nginx
    state: latest

Bu, mevcut en son nginx sürümünün yüklü olmasını garanti eder. Özellikle, sistemleri dağıtımdan önce bilinen ve güncel bir duruma getirmek için tasarlanmış kılavuzlarda kullanışlıdır.

RPM dosyalarını doğrudan yükleme

Depo tabanlı kurulumlara ek olarak, yum modülü yerel RPM paketlerini de işleyebilir. Bu, genel depolarda bulunmayan özel yazılım veya satıcı paketlerini yüklerken kullanışlıdır.

- name: Install a local RPM
  ansible.builtin.yum:
    name: /tmp/package-name.rpm
    state: present

RPM’de karşılanmamış bağımlılıklar varsa, yum bunları sistemin yapılandırılmış depolarını kullanarak çözmeye çalışır.

Gerektiğinde, örneğin geliştirme ortamlarında veya kontrollü test senaryolarında, GPG imza denetimini devre dışı bırakmak da mümkündür:

- name: Install without GPG checks
  ansible.builtin.yum:
    name: /tmp/unsigned-package.rpm
    disable_gpg_check: true
    state: present

Üretim sistemlerinde dikkatli kullanılmalı ve kaçınılmalıdır.

Depoya duyarlı davranış

Ansible, paket yönetimini depo yapılandırmasından ayırır. Özel veya üçüncü taraf depolara ihtiyaç duyuluyorsa, bunları açıkça tanımlamak için yum_repository modülü kullanılmalıdır:

- name: Add a third-party repository
  ansible.builtin.yum_repository:
    name: example
    description: Example Repository
    baseurl: https://repo.example.com/centos/$releasever/os/$basearch/
    gpgcheck: true
    gpgkey: https://repo.example.com/RPM-GPG-KEY-example
    enabled: true

Bu adım, sistemleri hava boşluklu ortamlara dağıtırken veya kısıtlı depolama alanına erişimi olan güçlendirilmiş temel çizgiler kullanırken sıklıkla gereklidir.

Hizmetler ve görevlilerle koordinasyon

Paket kurulumu genellikle hizmet yönetimiyle bağlantılıdır. Tipik bir model, paket kurulduktan veya yükseltildikten sonra hizmeti başlatan veya yeniden başlatan bir işleyiciye bildirim göndermektir:

- name: Install Apache
  ansible.builtin.yum:
    name: httpd
    state: present
  notify: Restart Apache

handlers:
  - name: Restart Apache
    ansible.builtin.service:
      name: httpd
      state: restarted

Bu mekanizma, hizmet yeniden başlatmalarının yalnızca gerektiğinde gerçekleşmesini sağlayarak rutin dağıtımlar sırasında gereksiz kesintileri azaltır.

Platform farkındalığı ve uyumluluğu

Birçok RPM tabanlı sistem artık dahili olarak dnf’ye güvense de, yum modülü düzgün bir şekilde çalışmaya devam ediyor.

Deneyimlerime göre, genellikle hala CentOS 7 veya daha eski sürümleri çalıştıran ve yum’un varsayılan ve tek kullanılabilir paket yöneticisi olduğu eski bir CentOS sistemiyle karşılaşmanız kaçınılmazdır.

Fedora ve RHEL 8+ sistemleri için dnf ikili dosyası genellikle CLI uyumluluğunu koruyan bir yedek dosyadır ve Ansible bunu şeffaf bir şekilde halleder.

Ancak, tam tutarlılık arıyorsanız, neredeyse aynı sözdizimi ve davranışa sahip dnf modülü alternatif olarak mevcuttur. Çoğu kullanım durumu için, yum ve dnf arasındaki seçim mutlak teknik bir zorunluluktan ziyade bir politika meselesidir.

Yazının orijinalini buradan okuyabilirsiniz.

 

Hüseyin GÜÇ

Kariyerime 26 yıl önce başladım. Windows ve Linux sistemlerinin kurulumu, yapılandırılması, yönetimi ve bakımı dahil olmak üzere birden fazla sistem üzerinde uzmanlaştım. Açık kaynak dünyasındaki en son gelişmelerden haberdar olmaktan ve Linux hakkındaki en son araçları, özellikleri ve hizmetleri denemekten hoşlanıyorum. Son 6 yıldır  sistem ve ağ yöneticisi olarak görev yapıyorum ayrıca Pardus Dönüşüm Projesini yönetiyorum ve Pardus İşletim Sisteminin yaygınlaşması adına uğraş gösteriyorum. Boş zamanlarımda açık kaynaklı uygulamaların Türkçe çevirisine katılıyorum ve The Document Foundation üyesiyim.