Günümüzde Linux sistemlerinin güvenli, kararlı ve sürdürülebilir şekilde yönetilebilmesi için işletim sistemi paketlerinin merkezi olarak kontrol edilmesi büyük önem taşımaktadır. Özellikle kurumsal ortamlarda çok sayıda Ubuntu veya Debian tabanlı sunucunun yönetildiği durumlarda, her sunucunun doğrudan internet üzerindeki resmi depolardan paket indirmesi; bant genişliği kullanımı, güvenlik politikaları, sürüm kontrolü ve operasyonel yönetim açısından çeşitli zorluklar oluşturabilmektedir.

Bu noktada kurumlar, kendi içerisinde yönetilen yerel paket depolarına (local repository) ihtiyaç duyarlar. Yerel repository kullanımı sayesinde sistem yöneticileri, hangi paketlerin kullanılacağını kontrol edebilir, belirli paket sürümlerini sabitleyebilir, güncelleme süreçlerini test ortamından üretim ortamına kontrollü şekilde taşıyabilir ve internet bağımlılığını azaltabilir.

Ubuntu ve Debian tabanlı sistemlerde paket yönetimi için kullanılan APT (Advanced Package Tool) altyapısı, paketlerin depolardan alınmasını ve kurulmasını sağlar. Ancak büyük ölçekli yapılarda resmi depoların birebir yönetimi, senkronizasyonu ve dağıtımı için ek araçlara ihtiyaç duyulmaktadır.

Aptly, Debian ve Ubuntu tabanlı Linux sistemleri için geliştirilmiş bir APT repository yönetim aracıdır. Sistem yöneticilerinin paket depolarını merkezi olarak yönetmesini, resmi depoların kopyalarını oluşturmasını (mirror), paketleri kontrol etmesini ve kurum içi özel paket depoları yayınlamasını sağlar.

Ubuntu veya Debian sistemlerinde paket yönetimi genellikle internet üzerindeki resmi APT depoları üzerinden gerçekleştirilir. Ancak kurumsal ortamlarda yüzlerce veya binlerce sunucunun aynı paketleri doğrudan internetten indirmesi; ağ trafiği, güvenlik politikaları, versiyon kontrolü ve güncelleme yönetimi açısından sorunlara yol açabilir. Aptly bu noktada devreye girerek kurum içerisinde yönetilebilir bir yerel APT repository oluşturulmasına imkan sağlar.

  • Merkezi paket yönetimi sağlar: Ubuntu ve Debian paketlerini tek bir noktadan yönetmeye imkan verir.
  • Paket sürümlerini kontrol eder: Kullanılacak paket versiyonlarının sabitlenmesini ve yönetilmesini sağlar.
  • İnternet trafiğini azaltır: Paketlerin her sunucu tarafından internetten indirilmesi yerine yerel repository üzerinden dağıtılmasını sağlar.
  • Güncelleme süreçlerini kolaylaştırır: Paket güncellemelerinin test edilerek kontrollü şekilde yayına alınmasını sağlar.
  • Snapshot desteği sunar: Repository durumlarının belirli tarihlerde kaydedilmesini ve gerektiğinde geri dönülmesini sağlar.
  • Güvenliği artırır: Sadece onaylanan paketlerin sistemlere dağıtılmasına olanak tanır.
  • Özel paket yönetimi sağlar: Kuruma ait .deb paketlerinin oluşturulmasını ve dağıtılmasını destekler.
  • Bant genişliği kullanımını azaltır: Aynı paketlerin tekrar tekrar internetten indirilmesini önler.
  • Kapalı ağ ortamlarında kullanılabilir: İnternet erişimi olmayan sistemlerde paket yönetimini kolaylaştırır.
  • Otomasyona uygundur: Script, Cron ve konfigürasyon yönetim araçlarıyla entegre çalışabilir.
  • Denetim süreçlerini kolaylaştırır: Kullanılan paketlerin ve sürümlerin takip edilmesini sağlar.
  • Ölçeklenebilir yapı sunar: Küçük yapılardan büyük kurumsal altyapılara kadar kullanılabilir.
  • Mirror: Ubuntu veya Debian resmi repository’lerinin Aptly içerisine alınmış kopyasıdır.
  • Repository: Paketlerin saklandığı ve istemcilere sunulduğu depo yapısıdır.
  • Snapshot: Bir repository’nin belirli bir andaki değişmez kopyasıdır.
  • Publish: Repository veya snapshot’ın istemcilerin kullanabileceği APT repository olarak yayınlanması işlemidir.
  • Package: Repository içerisinde bulunan .deb uzantılı yazılım paketleridir.
  • Distribution: Ubuntu sürümünü veya dağıtım adını ifade eder (örnek: noble, jammy, bookworm).
  • Component: Repository içerisindeki paket kategorileridir (örnek: main, universe, restricted, multiverse).
  • Architecture: Paketlerin desteklediği işlemci mimarisidir (örnek: amd64, arm64).
  • Local Repository: Kurum içerisinde oluşturulan ve yönetilen özel paket deposudur.
  • Upstream Repository: Paketlerin alındığı resmi dış kaynak repository’sidir (örnek: Ubuntu resmi depoları).
  • Package Index: APT istemcilerinin paket bilgilerini aldığı metadata dosyalarıdır.
  • GPG Signing: Repository ve paketlerin güvenilirliğini doğrulamak için dijital olarak imzalanması işlemidir.
  • Filter: Mirror veya repository içerisinden belirli paketlerin dahil edilmesini veya hariç tutulmasını sağlayan kurallardır.
  • Pool: Repository içerisinde paket dosyalarının fiziksel olarak saklandığı dizin yapısıdır.
  • Aptly Database: Aptly tarafından yönetilen repository, paket ve metadata bilgilerinin tutulduğu veritabanıdır.
  • Publish Endpoint: Yayınlanan repository’nin istemciler tarafından erişildiği HTTP/HTTPS adresidir.
  • Update: Mirror içerisindeki paket bilgilerinin ve yeni sürümlerin kaynak repository ile senkronize edilmesi işlemidir.
  • Cleanup: Kullanılmayan veya artık referans edilmeyen paketlerin temizlenmesi işlemidir.

Bu yazıda Aptly Linux bir makineye nasıl kurulur ondan bahsedilecektir. Linux olarak Ubuntu 20.04.6 LTS tercih edilmiştir.

Aptly Repository olarak kullanacak sunucuların güvenmesi için gpg key dizin oluşturup izinleri veriyoruz.

Aptly’nin gpg key indiriyoruz. APT daha sonra repository’nin imzasını bu anahtarla doğrular.

Aptly repository tanım dosyasını oluşturuyoruz.

Aptly ve gerekli paketler kurulur. Nginx, client’lar bir URL’den erişeceği için URL publish etmek için kurulur. Client’ların güvenmesi için repository imzalamak için kurulur.

Kurulum sonrası aşağıdaki komutla versiyon kontrolü yaparız çalışan herhangi bir servisi yoktur.

Aptly için eklediğimiz disk altına path oluşturuyoruz.

Aptly config dosyası yapılandırılır.

Client’ların aptly repository güvenmesi için key oluşturuyoruz. İstanbul ve Ankara için ayrı key’ler oluşturuyoruz.

İhtiyacımız olan sadece RSA imzalama olduğu için 4 seçiyoruz.

Key size 4096 seçiyoruz.

Key süresini 10 yıl olarak belirliyoruz ve onaylıyoruz.

Key adı belirliyoruz. ‘aptly’

Sorumlu olacak mail adresini seçiyoruz.

Comment istiyor. Hatırlatma amaçlı herhangi bir açıklama yazabiliriz.

Tamamlamak için okay seçiyoruz.

GPG Key Oluşturmak

Passphrase kısmında bir parola belirliyoruz.

Passphrase Password Oluşturmak

Passphrase teyit amaçlı iki defa ister.

Key alıp client’lara dağıtmak üzere bir dosyaya yazıyoruz

Ubuntu repository download edebilmek için Ubuntu’nun resmi archive key’lerini alıp ve Aptly’nin kullanacağı trusted keyring’e ekliyoruz.

4 adet ubuntu repository var bunları mirrorlayacağız. Öncelikle oluşturuyoruz.

Sırayla mirror’ları update ediyoruz. Mirror’lar ilk download’da yaklaşık 700 gb paket download edecektir.

Aşağıdaki komut ile snapshot listesini görebiliriz.

Mirror’lar tamamlandıktan sonra her mirror için bir snapshot alıyoruz. Karışıklık olmasın diye snapshot isimlerine tarih ekliyoruz.

Aşağıdaki komut ile mirror listesini görebiliriz.

Alınan snapshotları publish ediyoruz.

Aşağıdaki komut ile publish listesini görebiliriz.

Her bir publish’ten sonra başta oluşturduğumuz passphrase istiyor, parolayı giriyoruz.

Yayınlanacak nginx konfigürasyon dosyası oluşturulur.

Symbolic Link oluşturup, konfigürasyon test edilir ve servis restart edilir.

80 portunda birden fazla site çalıştığı warning veriyor, nginx default gelen site ihtiyacımız olmadığı için siliyoruz.

Repository Up to Date kalması için günlük mirror update script çalıştırabiliriz.

Ayrıca güncel mirrorlardan snapshot alıp publish etmek için ayrı bir script çalıştırabiliriz.

Aptly Server Akış Şeması

Client’ların aptly server güvenmesi için gpg anahtarı client’lara dağıtabilmek için export ediyoruz.

Client’lara scp ile key kopyalıyoruz.

Varolan source list her ihtimale karşı kopyalanır.

Aptly sunucu source list’e eklenir.

Client update için herhangi bir değişiklik bulunmuyor. Normal bir şekilde yapılabilir.


0 yorum

Bir yanıt yazın

Avatar yer tutucu

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir