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 Nedir ?
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.
Avantajları
- 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
.debpaketlerinin 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.
Terminoloji
- 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
.debuzantı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.
Aptly Nasıl Kurulur ?
Bu yazıda Aptly Linux bir makineye nasıl kurulur ondan bahsedilecektir. Linux olarak Ubuntu 20.04.6 LTS tercih edilmiştir.
Kurulum Öncesi Hazırlıklar:
Aptly Repository olarak kullanacak sunucuların güvenmesi için gpg key dizin oluşturup izinleri veriyoruz.
sudo mkdir -p /etc/apt/keyrings
sudo chmod 755 /etc/apt/keyrings
Aptly’nin gpg key indiriyoruz. APT daha sonra repository’nin imzasını bu anahtarla doğrular.
sudo wget -O /etc/apt/keyrings/aptly.asc \
https://www.aptly.info/pubkey.txt
Aptly repository tanım dosyasını oluşturuyoruz.
vi /etc/apt/sources.list.d/aptly.list
deb [signed-by=/etc/apt/keyrings/aptly.asc] http://repo.aptly.info/release noble main
Aptly Kurulumu:
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.
sudo apt install aptly nginx gnupg -y
Kurulum sonrası aşağıdaki komutla versiyon kontrolü yaparız çalışan herhangi bir servisi yoktur.
aptly version
Aptly için eklediğimiz disk altına path oluşturuyoruz.
mkdir -p /data/aptly
Aptly config dosyası yapılandırılır.
vi ~/.aptly.conf
{
“rootDir”: “/data/aptly”, #Dosyaları hangi lokasyonda oluşturucağı belirlenir.
“downloadConcurrency”: 4, #Aynı anda kaç adet paket download edeceği belirlenir
“downloadSpeedLimit”: 2621440, #Download hızı limitlenir.
“architectures”: [“amd64”], #Kullanılacak OS mimarisi belirlenir.
“gpgDisableVerify”: false, # Release dosyalarının GPG imzası kontrol edilir.
“skipLegacyPool”: true, # Aptly’nin eski repository dizin yapısını kullanmamasını sağlar.
“logLevel”: “info”, #Log seviyesi belirlenir
}
Client’ların aptly repository güvenmesi için key oluşturuyoruz. İstanbul ve Ankara için ayrı key’ler oluşturuyoruz.
gpg –full-generate-key
İ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.

Passphrase kısmında bir parola belirliyoruz.

Passphrase teyit amaçlı iki defa ister.
Key alıp client’lara dağıtmak üzere bir dosyaya yazıyoruz
GPG_KEY_ID=$(gpg –list-secret-keys –keyid-format LONG | grep sec | awk ‘{print $2}’ | cut -d/ -f2)
gpg –armor –export $GPG_KEY_ID > /data/aptly/aptly-key.asc
Ubuntu repository download edebilmek için Ubuntu’nun resmi archive key’lerini alıp ve Aptly’nin kullanacağı trusted keyring’e ekliyoruz.
gpg –no-default-keyring \
–keyring /usr/share/keyrings/ubuntu-archive-keyring.gpg \
–export | gpg –no-default-keyring –keyring trustedkeys.gpg –import
Aptly Repository’lerin Oluşturulması
4 adet ubuntu repository var bunları mirrorlayacağız. Öncelikle oluşturuyoruz.
aptly mirror create ubuntu-main \
http://archive.ubuntu.com/ubuntu noble main restricted universe multiverse
aptly mirror create ubuntu-updates \
http://archive.ubuntu.com/ubuntu noble-updates main restricted universe multiverse
aptly mirror create ubuntu-security \
http://security.ubuntu.com/ubuntu noble-security main restricted universe multivers
aptly mirror create ubuntu-backports \
http://archive.ubuntu.com/ubuntu noble-backports main restricted universe multiverse
Sırayla mirror’ları update ediyoruz. Mirror’lar ilk download’da yaklaşık 700 gb paket download edecektir.
aptly mirror update ubuntu-main
aptly mirror update ubuntu-updates
aptly mirror update ubuntu-security
aptly mirror update ubuntu-backports
Aşağıdaki komut ile snapshot listesini görebiliriz.
aptly mirror list
Mirror’lar tamamlandıktan sonra her mirror için bir snapshot alıyoruz. Karışıklık olmasın diye snapshot isimlerine tarih ekliyoruz.
DATE=$(date +%F-%H%M%S)
aptly snapshot create snap-ubuntu-main-$DATE from mirror ubuntu-main
aptly snapshot create snap-ubuntu-updates-$DATE from mirror ubuntu-updates
aptly snapshot create snap-ubuntu-security-$DATE from mirror ubuntu-security
aptly snapshot create snap-ubuntu-backports-$DATE from mirror ubuntu-backports
Aşağıdaki komut ile mirror listesini görebiliriz.
aptly snapshot list
Alınan snapshotları publish ediyoruz.
aptly publish snapshot \
-distribution=noble \
-component=main \
snap-ubuntu-main-$DATE \
ubuntu-main
aptly publish snapshot \
-distribution=noble \
-component=updates \
snap-ubuntu-updates-$DATE \
ubuntu-updates
aptly publish snapshot \
-distribution=noble \
-component=security \
snap-ubuntu-security-$DATE \
ubuntu-security
aptly publish snapshot \
-distribution=noble \
-component=backports \
snap-ubuntu-backports-$DATE \
ubuntu-backports
Aşağıdaki komut ile publish listesini görebiliriz.
aptly publish list
Her bir publish’ten sonra başta oluşturduğumuz passphrase istiyor, parolayı giriyoruz.
Nginx Konfigürasyonları Yapılması
Yayınlanacak nginx konfigürasyon dosyası oluşturulur.
vi /etc/nginx/sites-available/aptly
server {
listen 80;
server_name _;
root /data/aptly/public;
autoindex on;
}
Symbolic Link oluşturup, konfigürasyon test edilir ve servis restart edilir.
ln -s /etc/nginx/sites-available/aptly /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx
80 portunda birden fazla site çalıştığı warning veriyor, nginx default gelen site ihtiyacımız olmadığı için siliyoruz.
rm /etc/nginx/sites-enabled/default
nginx -t
systemctl reload nginx
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ı

GPG Anahtarı Export İşlemi
Client’ların aptly server güvenmesi için gpg anahtarı client’lara dağıtabilmek için export ediyoruz.
gpg –list-keys
cd /data/aptly
gpg –export key | gpg –dearmor > aptly-repo.gpg
Client’lara scp ile key kopyalıyoruz.
scp C:\Setup\aptly-key\aptly-repo.gpg
username@x.x.x.x:/tmp/aptly-repo-ist.gpg && ssh -t
username@x.x.x.x “sudo mv /tmp/aptly-repo.gpg
/usr/share/keyrings/aptly-repo.gpg && sudo chown root:root /usr/share/keyrings/aptly-repo.gpg && sudo chmod 644 /usr/share/keyrings/aptly-repo.gpg
Client Source List Konfigürasyonu
Varolan source list her ihtimale karşı kopyalanır.
cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources_old
Aptly sunucu source list’e eklenir.
sudo tee /etc/apt/sources.list.d/ubuntu.sources > /dev/null <<‘EOF’
Types: deb
URIs: http://x.x.x.x/ubuntu-main
Suites: noble
Components: main
Signed-By: /usr/share/keyrings/aptly-repo.gpg
Types: deb
URIs: http://x.x.x.x/ubuntu-updates
Suites: noble
Components: updates
Signed-By: /usr/share/keyrings/aptly-repo.gp
Types: deb
URIs: http://x.x.x.x/ubuntu-security
Suites: noble
Components: security
Signed-By: /usr/share/keyrings/aptly-repo.gpg
Types: deb
URIs: http://x.x.x.x/ubuntu-backports
Suites: noble
Components: backports
Signed-By: /usr/share/keyrings/aptly-repo.gpg
EOF
Aptly Client Akış Şeması

Client Update
Client update için herhangi bir değişiklik bulunmuyor. Normal bir şekilde yapılabilir.
apt update
apt upgrade -y
Aptly Map

0 yorum