Please Donate to Bitcoin Address : [[address]]

Donation of [[value]] BTC Received. Thank You.
[[error]]

Aptly ile Debian Paket Deposu Yönetimi

Teknik yazıya başlamadan önce biraz gevezelik yapacağım kendi perspektifimden, teknik kısım için bir sonraki başlıktan başlayabilirsiniz okumaya.

Debian GNU/Linux herkesin bildiği gibi dünyada en çok kullanılan Linux tabanlı dağıtımlardan biri. Bir çok diğer dağıtımın da temel aldığı (ki bunlar Mint, Ubuntu vs. başka saymaya gerek yok çok fazlalar) köklü bir işletim sistemi. Arkasında çok ciddi, katı ve sağlam bir community’si de mevcut. Dünyada Özgür Yazılım Kültürünün en büyük dinamolarından biri.
Bir çok projenin de halen geliştiriciliğini yapan bir community’si ve Debian geliştirici topluluğu var. (Örneğin Docker projesinde bir çok eski Debian geliştiricisi çalışmakta)

Aslına bakarsak ben de öğrencilik dönemimde ilk tanıştığım kültür Debian kültürüydü, bunu da büyük bir rastlantısal şans olarak görüyorum ancak hiç bir zaman bundan şikayetçi olmadım. Bir çok konuyu, Debian ile tanışıklığımdan dolayı zorlanmadan anlayabildiğimi düşünüyorum bugüne kadar. Kültürüne yabancı olmadığım bir dağıtım.

Ancak şöyle bir baktığımda yönettiğim sunucuların hiç biri Debian tabanlı değil nerdeyse (iş harici), kendi şahsi makinemde de Arch Linux koşturuyorum yıllardır.

E peki neden Debian paketleme sistemleriyle falan uğraşıyorum? El-Cevap : Pardus

Biliyorsunuz ki ülkemizde açık kaynak kullanımının yaygınlaştırılması projesi kapsamında geliştirilen Pardus İşletim Sistemi Debian tabanlı bir dağıtım olduğundan beri, Pardus kullanan kullanıcıların bilgisayarlarına program paketlerini kurabilmesi için bir paket deposu yönetim sistemi hasıl olageldi. Ben de TÜBİTAK’ta olduğumdan beri bu konuyla ara ara ama sıkça uğraşmak durumunda kaldım. Bu yazıyı da bu konuda biriktirdiğim bilginin bana açıkcası fazla geldiğini düşünerek paylaşma isteğimden dolayı yazdım. Ne kadar Debian kültürünü tanısam da, saygı duysam da, dağıtım savaşlarına girmek istemesem de hiç, her sysadminin gönlünde yatan bir aslan olduğunu söylemek gerekli, e benimkini de bilen biliyor zaten ama bu hiç bir zaman Debian olmadı sunucu dağıtımları arasında 🙂

Aptly Paket Deposu Yönetim Sistemi Aracı

Bu konunun bu başlıktan sonraki her kısmı aptly ile alakalı olacak.

Aptly, Go programlama dili ile geliştirilmiş bir paket deposu yönetim sistemi aracı. Yani debian paketlerini bir araya getirip Debian standartlarına göre paket deposu yapısını
oluşturabilen, PGP anahtarınız ile sunmak istediğiniz her paketi imzalayıp sunabilen, başka bir Debian tabanlı paket deposunu yansılayabilen ve local olarak kendi debian paketlerinizi sunabildiğiniz bir local repo kavramı getiren çok fonksiyonlu bir proje. Geliştirici ekibi de aktif, mail listelerinde herkese yardımcı olmaya çalışıyorlar, yazılımın kendisi de fena değil
zira çok büyük paket depolarıyla uğraşmak durumundaysanız kolaylıkla işin içinden çıkabilmenizi sağlayan bir çok fonksiyona sahip. Her birinden bahsetmeye çalışacağım.

Proje deposu : https://github.com/smira/aptly
Proje web sayfası : https://www.aptly.info/
Mail listesi : https://groups.google.com/forum/#!forum/aptly-discuss

Dokümantasyonu çok sade ve şık bir dille hazırlanmış, özenilmiş bir proje yani bu konuda.
E-posta listesindeyse benim de adımı görebilirsiniz aralarda 🙂

Bu blog yazısında Aptly’i Debian Jessie 8.5 sürümü üzerinde anlatacağım.

Ön Hazırlık ve Kurulum

İşletim sisteminizin günce olduğuna emin olun :


# apt-get update && apt-get upgrade -y

Gerekiyorsa sisteminizi güncelledikten sonra yeniden başlatın (kernel güncellemeleri vb yaptıysanız)

Aşağıdaki şekilde aptly paket deposu tanımını /etc/apt/sources.list.d/aptly.conf dosyasını aşağıdaki içerikle oluşturun :

# vi /etc/apt/sources.list.d/aptly.list

deb http://repo.aptly.info/ squeeze main

aptly paket deposunun GPG anahtarını paket yöneticinizin keyringe aşağıdaki şekilde ekleyin :


# apt-key adv --keyserver keys.gnupg.net --recv-keys 9E3E53F19C7DE460

Paket deposu metadalarını güncelleyip, aptly paketini sisteminize kurun :


# apt-get update

# apt-get install aptly

aptly paketinin kurulduğunu teyit edin :

# aptly version
> aptly version: 0.9.7

Aşağıdaki paketlerin de sistemde kurulu olduğuna emin olun :

# apt-get install bzip2 gnupg gpgv rng-tools graphviz

Aptly için aptly isimli bir sistem kullanıcısı oluşturun, ev dizini olarak ben /opt/aptly tercih ediyorum :

# useradd -m -d /opt/aptly -s /bin/bash -c "Aptly User" -U aptly

Paket deposunun imzalanacağı GPG anahtarını üretmek için sistemde gerekli entropy’i aşağıdaki şekilde oluşturun :

# rngd -r /dev/urandom

Kurulum işlemleri bu kadar, bundan sonraki işlemleri aptly kullanıcısına geçerek devam edeceğiz :

# su - aptly

Aptly Kullanıcısı İçin GPG Anahtarı Oluşturulması

aptly kullanıcısı ile aşağıdaki gibi bir gpg keyi üretin :

$ gpg --gen-key

gpg (GnuPG) 1.4.18; Copyright (C) 2014 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

gpg: directory `/opt/aptly/.gnupg' created
gpg: new configuration file `/opt/aptly/.gnupg/gpg.conf' created
gpg: WARNING: options in `/opt/aptly/.gnupg/gpg.conf' are not yet active during this run
gpg: keyring `/opt/aptly/.gnupg/secring.gpg' created
gpg: keyring `/opt/aptly/.gnupg/pubring.gpg' created
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection? 1
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
Please specify how long the key should be valid.
0 = key does not expire
n;  = key expires in n days
n;w = key expires in n weeks
n;m = key expires in n months
n;y = key expires in n years
Key is valid for? (0) 365
Key expires at Fri 30 Jun 2017 04:32:18 PM EEST
Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: Aydin Doyak
Email address: aydin.doyak@linux.org.tr
Comment: aydintd
You selected this USER-ID:
"Aydin Doyak (aydintd) <aydin.doyak@linux.org.tr>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
.+++++
.....+++++
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
...........+++++
gpg: /opt/aptly/.gnupg/trustdb.gpg: trustdb created
gpg: key 8A21BD8C marked as ultimately trusted
public and secret key created and signed.

gpg: checking the trustdb
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:   1  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: next trustdb check due at 2017-06-30
pub   2048R/8A21BD8C 2016-06-30 [expires: 2017-06-30]
Key fingerprint = 28E7 95D9 F6E3 089C 1EBD  2C16 073D 9AB0 8A21 BD8C
uid                  Aydin Doyak (aydintd) <aydin.doyak@linux.org.tr>;
sub   2048R/92F8116F 2016-06-30 [expires: 2017-06-30]

Bu anahtar oluşturduğunuz depoyu imzalayacak GPG anahtarı, Debian bu konuda strict davranıyor,
eğer deponuzu imzalamazsanız, paket deposundan ve debian-installer gibi bir çok paket deposuna bağlı
debian araçlarından düzgün faydalanamazsınız.

Aptly Konfigürasyonu

Aşağıdaki şekilde /opt/aptly/.aptly.conf isimli bir dosyayı aşağıdaki içerikle oluşturun :

{
  "rootDir": "/opt/aptly",
  "downloadConcurrency": 4,
  "downloadSpeedLimit": 0,
  "architectures": [],
  "dependencyFollowSuggests": false,
  "dependencyFollowRecommends": false,
  "dependencyFollowAllVariants": false,
  "dependencyFollowSource": false,
  "gpgDisableSign": false,
  "gpgDisableVerify": false,
  "downloadSourcePackages": false
}

Bu dosyanın içeriği default olarak geçilmesi gereken aptly ayarları, aptly paket deposu yönetimi işlemlerinde bu dosyayı baz alıyor.
Ancak ben bu ayar dosyasındaki çoğu özelliği işlemi yaparken parametre olarak geçmeyi daha çok seviyorum, öbür türlü işler biraz
karmaşıklaşıyor ve anlaması güç hale geliyor.

Yansılama İşlemleri

Bu blog yazısında ftp.tr.debian.org paket deposundan Debian 8 (Jessie) yansılama işlemi anlatılacaktır.

Yansılama işlemlerine başlamadan önce aşağıdaki gibi yansı sunucusu olacak sunucuzda Debian Archive Signing anahtarlarının
trustedkeys’inize import edilmiş olduğuna emin olun, böylece problem olmadan ilgili Debian paketlerini tanıyıp, yerelinize indirebilecek/yansılayabilecek
hale geleceksiniz.

$ gpg --no-default-keyring --keyring /usr/share/keyrings/debian-archive-keyring.gpg --export | gpg --no-default-keyring --keyring trustedkeys.gpg --import

Not: Bu komut eğer yansılama sunucunuz Debian ise çalışacaktır. Eğer farklı bir dağıtım üzerinde yansılama yapıyorsanız (Örneğin Ubuntu) bu arşiv anahtarlarını elle bulup, güvenilir anahtarlarınıza manuel olarak import etmeniz gerekir.

Bu işlemi gerçekleştirdikten sonra aşağıdaki gibi bir komutla yansı paket deposu yerelde oluşturulur :

$ aptly -architectures="i386,amd64" -with-sources=true -with-udebs=true mirror create debian-main http://ftp.tr.debian.org/debian jessie main
Downloading http://ftp.tr.debian.org/debian/dists/jessie/InRelease...
Downloading http://ftp.tr.debian.org/debian/dists/jessie/Release...
Downloading http://ftp.tr.debian.org/debian/dists/jessie/Release.gpg...
gpgv: Signature made Sat 04 Jun 2016 04:26:51 PM EEST using RSA key ID 46925553
gpgv: Good signature from "Debian Archive Automatic Signing Key (7.0/wheezy) <ftpmaster@debian.org>"
gpgv: Signature made Sat 04 Jun 2016 04:26:51 PM EEST using RSA key ID 2B90D010
gpgv: Good signature from "Debian Archive Automatic Signing Key (8/jessie) <ftpmaster@debian.org>"
gpgv: Signature made Sat 04 Jun 2016 04:36:26 PM EEST using RSA key ID 518E17E1
gpgv: Good signature from "Jessie Stable Release Key <debian-release@lists.debian.org>"

Mirror [debian-main]: http://ftp.tr.debian.org/debian/ jessie [src] [udeb] successfully added.
You can run 'aptly mirror update debian-main' to download repository contents.

Dilerseniz bu komutun anatomisini ve çıktısını beraber inceleyelim :

aptly : aptly binary'si $(which aptly) => /usr/bin/aptly
-architectures="i386,amd64" : İlgili yansıdan 32bit ve 64bit mimarideki paketleri yansıla
-with-sources=true : Paketlenmiş programların kaynak kodlarını da yansıla
-with-udebs=true : Bu paket deposu yansısından tasksel, preseeding, PXEBoot vb ile kurulum yapılabilmesi için mikro debian paketlerini de yansıla
mirror create debian-main : debian-main isimli bir paket deposu yansısı oluştur
http://ftp.tr.debian.org/debian jessie main : ftp.tr.debian.org paket deposundaki Debian distro'sunun Jessie sürümünün main component'ını yansıla

Her Debian paket deposunun default 3 tane component dediğimiz bileşeni var. Bu bileşenler ise main, contrib, non-free
Bu bileşenler lisanslarına göre Debian communitysi tarafından belirlenmiş debian paketlerini ayırmak için kullanılan bileşenler.
Örneğin Özgür Yazılım olmayan debian paketlerini de yansılamak istiyorsanız non-free bileşenini de yansılamanız gerekli.

Aşağıdaki şekilde diğer bileşenlerin yansıları da alabilirsiniz :

$ aptly -architectures="i386,amd64" -with-sources=true -with-udebs=true mirror create debian-contrib http://ftp.tr.debian.org/debian jessie contrib
Downloading http://ftp.tr.debian.org/debian/dists/jessie/InRelease...
Downloading http://ftp.tr.debian.org/debian/dists/jessie/Release...
Downloading http://ftp.tr.debian.org/debian/dists/jessie/Release.gpg...
gpgv: Signature made Sat 04 Jun 2016 04:26:51 PM EEST using RSA key ID 46925553
gpgv: Good signature from "Debian Archive Automatic Signing Key (7.0/wheezy) <ftpmaster@debian.org>"
gpgv: Signature made Sat 04 Jun 2016 04:26:51 PM EEST using RSA key ID 2B90D010
gpgv: Good signature from "Debian Archive Automatic Signing Key (8/jessie) <ftpmaster@debian.org>"
gpgv: Signature made Sat 04 Jun 2016 04:36:26 PM EEST using RSA key ID 518E17E1
gpgv: Good signature from "Jessie Stable Release Key <debian-release@lists.debian.org>"

Mirror [debian-contrib]: http://httpredir.debian.org/debian/ jessie [src] [udeb] successfully added.
You can run 'aptly mirror update debian-contrib' to download repository contents.

$ aptly -architectures="i386,amd64" -with-sources=true -with-udebs=true mirror create debian-nonfree http://ftp.tr.debian.org/debian jessie non-free
Downloading http://ftp.tr.debian.org/debian/dists/jessie/InRelease...
Downloading http://ftp.tr.debian.org/debian/dists/jessie/Release...
Downloading http://ftp.tr.debian.org/debian/dists/jessie/Release.gpg...
gpgv: Signature made Sat 04 Jun 2016 04:26:51 PM EEST using RSA key ID 46925553
gpgv: Good signature from "Debian Archive Automatic Signing Key (7.0/wheezy) <ftpmaster@debian.org>"
gpgv: Signature made Sat 04 Jun 2016 04:26:51 PM EEST using RSA key ID 2B90D010
gpgv: Good signature from "Debian Archive Automatic Signing Key (8/jessie) <ftpmaster@debian.org>"
gpgv: Signature made Sat 04 Jun 2016 04:36:26 PM EEST using RSA key ID 518E17E1
gpgv: Good signature from "Jessie Stable Release Key <debian-release@lists.debian.org>"

Mirror [debian-nonfree]: http://ftp.tr.debian.org/debian/ jessie [src] [udeb] successfully added.
You can run 'aptly mirror update debian-nonfree' to download repository contents.

 

Şimdi bu yeni oluşturduğumuz mirror tanımlarını listeleyelip, bu paket depolarıyla alakalı bilgileri aşağıdaki şekilde alabiliriz :

$ aptly mirror list
List of mirrors:
 * [debian-contrib]: http://ftp.tr.debian.org/debian/ jessie [src] [udeb]
 * [debian-main]: http://ftp.tr.debian.org/debian/ jessie [src] [udeb]
 * [debian-nonfree]: http://ftp.tr.debian.org/debian/ jessie [src] [udeb]

To get more information about mirror, run `aptly mirror show <name>`.

$ aptly mirror show debian-main
Name: debian-main
Archive Root URL: http://ftp.tr.debian.org/debian/
Distribution: jessie
Components: main
Architectures: i386, amd64
Download Sources: yes
Download .udebs: yes
Last update: never

Information from release file:
Architectures: amd64 arm64 armel armhf i386 mips mipsel powerpc ppc64el s390x
Codename: jessie
Components: main contrib non-free
Date: Sat, 04 Jun 2016 13:24:54 UTC
Description:  Debian 8.5 Released 04 June 2016

Label: Debian
Origin: Debian
Suite: stable
Version: 8.5

$ aptly mirror show debian-contrib
Name: debian-contrib
Archive Root URL: http://ftp.tr.debian.org/debian/
Distribution: jessie
Components: contrib
Architectures: i386, amd64
Download Sources: yes
Download .udebs: yes
Last update: never

Information from release file:
Architectures: amd64 arm64 armel armhf i386 mips mipsel powerpc ppc64el s390x
Codename: jessie
Components: main contrib non-free
Date: Sat, 04 Jun 2016 13:24:54 UTC
Description:  Debian 8.5 Released 04 June 2016

Label: Debian
Origin: Debian
Suite: stable
Version: 8.5
...

Yansılama İşlemlerinin Başlatılması

Aşağıdaki komut ile oluşturduğumuz yansı tanımlarından paketleri istediğimiz mimarilerde ve istediğimiz şekilde yansılanma işlemine başlanabilir :

$ aptly mirror update debian-main
Downloading http://ftp.tr.debian.org/debian/dists/jessie/InRelease...
Downloading http://ftp.tr.debian.org/debian/dists/jessie/Release...
Downloading http://ftp.tr.debian.org/debian/dists/jessie/Release.gpg...
gpgv: Signature made Sat 04 Jun 2016 04:26:51 PM EEST using RSA key ID 46925553
gpgv: Good signature from "Debian Archive Automatic Signing Key (7.0/wheezy) <ftpmaster@debian.org>"
gpgv: Signature made Sat 04 Jun 2016 04:26:51 PM EEST using RSA key ID 2B90D010
gpgv: Good signature from "Debian Archive Automatic Signing Key (8/jessie) <ftpmaster@debian.org>"
gpgv: Signature made Sat 04 Jun 2016 04:36:26 PM EEST using RSA key ID 518E17E1
gpgv: Good signature from "Jessie Stable Release Key <debian-release@lists.debian.org>"
Downloading & parsing package files...
Downloading http://ftp.tr.debian.org/debian/dists/jessie/main/binary-i386/Packages.gz...
Downloading http://ftp.tr.debian.org/debian/dists/jessie/main/debian-installer/binary-i386/Packages.gz...
Downloading http://ftp.tr.debian.org/debian/dists/jessie/main/binary-amd64/Packages.gz...
Downloading http://ftp.tr.debian.org/debian/dists/jessie/main/debian-installer/binary-amd64/Packages.gz...
Downloading http://ftp.tr.debian.org/debian/dists/jessie/main/source/Sources.gz...
Building download queue...
Download queue: 128086 items (119.05 GiB)...

 

Bu komut 119.05 GiB’lık 128086 tane item (debian paketleri, source’ları ve udeb paketleri) ile main component mirror’unu yansılayacak. Bu işlem boyuta ve internet hızına bağlı olarak değişecektir.

Diğer yansıları da aşağıdaki komutlarla alabilirsiniz :

$ aptly mirror update debian-contrib
...
$ aptly mirror update debian-nonfree
...

Bunun dışında bir de debian’ın security paket depolarını da yansılamanız hayati öneme sahip, eğer online bir linux istemci çiftliğine hizmet verecek
bir yansı deposu hazırlıyorsanız eğer, bu güncellemeleri de kullanıcılarınıza sunmanızda fayda var. Zira Debian özelinde bu paket deposu, ilgili uygulamalar, paket programlar, kernel vb
güvenlik açığı çıktığında yamalanıp buradan kullanıcılarına sunuluyor.

Aşağıdaki şekilde debian-security paket deposunu yansılayabilirsiniz :

$ aptly -architectures="amd64,i386" mirror create debian-security http://security.debian.org/ jessie/updates main

Gördüğünüz üzere bu yansı depoyu oluştururken source ve udeb’leri almadık çünkü bunlar yama paketleri.
Depoyu yerele çekmek için :

$ aptly mirror update debian-security

Yansılanan Paket Depolarının Snapshotlarının Alınması

Snapshot almak bildiğiniz üzere bir şeyin(sanal makine, paket deposu yansısı vs.) o anki state’inin daha sonra tekrar kullanabilecek şekilde bir yere kaydedilmesi manasına geliyor.
Bütün yansı depo güncelleme işlemleri bittikten sonra bu depo yansılarının tercihen alındığı tarihe göre snapshotlarının alınması gerekmekte.
Böylelikle yansı depoların birden fazla snapshotunun alınması durumlarında ya da daha önceki bir paket deposu yansı sürümüne dönülmek istenmesi durumunda hayat kurtarıcı bir rol oynuyor.

Aptly’nin kullanıcılarına sağladığı en önemli özellik bana göre bu. Belirli bir tarihte yansıladığınız ve mevcut yansının güncellemelerini aldığınız takdirde daha önceki versiyonları
kaybetmemek, gerektiğinde bu versiyonları tekrar sunabilmek için hayati bir önem taşımakta.

Her bir component için oluşturulmuş ayrı yansı paket depolarının güncellemesi bittikten sonra, aşağıdaki gibi tarih formatı da kullanarak bu yansıların snapshotlarının alınması gerekiyor :

$ aptly snapshot create debian-main-20160725 from mirror debian-main 

Snapshot debian-main-20160725 successfully created.
You can run 'aptly publish snapshot debian-main-20160725' to publish snapshot as Debian repository.
$ aptly snapshot create debian-contrib-20160725 from mirror debian-contrib

Snapshot debian-contrib-20160725 successfully created.
You can run 'aptly publish snapshot debian-contrib-20160725' to publish snapshot as Debian repository.
$ aptly snapshot create debian-nonfree-20160725 from mirror debian-nonfree 

Snapshot debian-nonfree-20160725 successfully created.
You can run 'aptly publish snapshot debian-nonfree-20160725' to publish snapshot as Debian repository.
$ aptly snapshot create debian-security-20160725 from mirror debian-security 

Snapshot debian-security-20160725 successfully created.
You can run 'aptly publish snapshot debian-security-20160725' to publish snapshot as Debian repository.
$ aptly snapshot list
List of snapshots:
 * [debian-contrib-20160725]: Snapshot from mirror [debian-contrib]: http://ftp.tr.debian.org/debian/ jessie [src] [udeb]
 * [debian-main-20160725]: Snapshot from mirror [debian-main]: http://ftp.tr.debian.org/debian/ jessie [src] [udeb]
 * [debian-nonfree-20160725]: Snapshot from mirror [debian-nonfree]: http://ftp.tr.debian.org/debian/ jessie [src] [udeb]
 * [debian-security-20160725]: Snapshot from mirror [debian-security]: http://security.debian.org/ jessie/updates

Artık yansılanan paket depolarının hepsinin 20160725 tarihi itibariyle snapshotları alındı. Şimdi bu snapshotları kullanıma açmak için bu alınan snapshotların publish edilmesi gerekiyor.

Aşağıdaki şekilde snapshotları debian paket deposu ismiyle publish edin :

$ aptly publish snapshot -passphrase='gpgp4ssphr4s3' -distribution=jessie -component=main,contrib,non-free debian-main-20160725 debian-contrib-20160725 debian-nonfree-20160725 debian
Loading packages...
Generating metadata files and linking package files...
[==========================>---------------------------------------------------------------------------------------------------------------------------------------] 37.16 % 2h6m7s
...

Bu komutun anatomisini de inceleyecek olursak :

aptly publish snapshot : alınan snapshotları publish et
-passphrase : Paketlerin imzalanması için dokümanın başında oluşturulan GPG anahtarının passphrase'i

Önemli Not : Bu parolayı komut satırında vermek sakıncalı. Vermediğiniz takdirde .aptly.conf içersinde
paketlerin imzalanması gerektiği şeklinde konfigürasyon yaptığımız için bu komut çalıştırıldığında interaktif
olarak aptly sizden bu passphrase'i isteyecek. Ancak ben dokümanda detaylı anlatmak amacıyla bu şekilde 
hazırladım.
-distribution=jessie : Yansıladığınız Debian paket deposu sürümü (stable -> jessie, unstable -> sid, ubuntu için kod adları farklı olabilir)
-component=main,contrib,non-free : snapshotlarını teker teker aldığımız bileşenlerin sırayla publish edilmesi için verilen parametre
debian-main-20160725 debian-contrib-20160725 debian-nonfree-20160725 : -component parametresindeki sırayla alınan snapshotların isimleri
debian : paket deposu yansısının ismi

Bu işlem bittiğinde /opt/aptly/public altında debian isimli paket deposu oluşmuş olacaktır. Bu işlem biraz uzun sürebilir, yansıladığınız paket miktarına göre zaman uzayıp-kısayacaktır.

Security paket deposu için de benzer işlemi gerçekleştirin :

$ aptly publish snapshot -passphrase='gpgp4ssphr4s3' -distribution=jessie -component=main debian-security-20160725 debian-security

Bu işlemin de sonunda /opt/aptly/public dizini altında 2 adet debian ve debian-security adında paket depolarının oluşmuş olduğunu göreceksiniz.

Sıra bu paket depolarının sunulmasına geldi.

Paket Deposunun HTTP üzerinden Sunulması

Ben paket deposunu sunmak için HTTP protokolü kullanıyorum. Bunun için basit bir Apache Web Sunucusu kurulum ve konfigürasyonu yeterli oluyor.
aptly’nin bu iş için bir HTTP sunucusu var (aptly serve) ancak çok performanslı bulmuyorum. Bu yüzden Apache web sunucusu ile sunmak özellikle production için daha mantıklı.

Kurulumu yapmak için root kullanıcısıyla :

# apt-get install apache2

Kurulum tamamlandıktan sonra aşağıdaki dosyada ilgili düzenlemeleri yapın :

# vim /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        ServerName mirror.aydintd.net

        ServerAdmin info@aydintd.net
        DocumentRoot /var/www/html

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/mirror-error.log
        CustomLog ${APACHE_LOG_DIR}/mirror-access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

Daha sonra /opt/aptly/public/debian dizinini /var/www/html altına sembolik linkledikten sonra, default index.html dosyasının da kaldırılması gerekiyor :

# ln -s /opt/aptly/public/debian /var/www/html
# ln -s /opt/aptly/public/debian-security /var/www/html
# rm -rf /var/www/html/index.html
# systemctl restart apache2
# systemctl enable apache2

Artık http://mirror.aydintd.net gibi bir linkle (gerekli DNS çözümlemelerini hallettiğinizi düşünerek) yansı depo HTTP üzerinden erişilebilir hale geldi.

Paket Deposunun FTP üzerinden Sunulması

Bir çok yansı depo aynı zamanda FTP üzerinden de anonymous olarak sunuluyor.

Bu işlem için ben vsftpd kullanacağım :

# apt-get install vsftpd

# vim /etc/vsftpd.conf

listen=YES
listen_ipv6=NO
anonymous_enable=YES
local_enable=NO
dirmessage_enable=YES
use_localtime=YES
xferlog_enable=YES
connect_from_port_20=YES
secure_chroot_dir=/var/run/vsftpd/empty
pam_service_name=vsftpd
anon_upload_enable=NO
anon_mkdir_write_enable=NO

Yukarıdaki ayarları tanımladıktan sonra vsftpd servisini yeniden başlatın :

# systemctl restart vsftpd
# systemctl enable vsftpd

/srv/ftp dizini de artık ftp://mirror.pardus.org.tr olarak sunulur hale geldi. Ancak göreceğiniz gibi paket deposu şimdilik FTP’den sunulmuyor.

Yansı paket deposunun dosya sistemini FTP ile sunmak için aşağıdaki şekilde dosya sistemindeki path’ini mount ile /srv/ftp altına bind edin :

# mount --bind /opt/aptly/public /srv/ftp

Sayfayı yenilediğinizde paket deposunun da artık FTP den anonymous olarak sunulduğunu görebilirsiniz.

Ubuntu/Debian İstemcilerin Yansı Paket Deposunu Kullanabilir Hale Getirilmesi

İlk iş olarak yansı deponun GPG açık anahtarını, istemcilerin trusted keyring’lerine eklenmesi gerekmektedir.

GPG açık anahtarını aşağıdaki şekilde üretip, yansı depo üzerinde çalışan HTTP sunucu üzerinden sunabilirsiniz :

# su - aptly
$ gpg --list-key
/opt/aptly/.gnupg/pubring.gpg
-----------------------------
pub   2048R/60F7980A 2016-07-21 [expires: 2017-07-19]
uid                  Aydin Doyak (aydintd) <aydin.doyak@linux.org.tr>
sub   2048R/EA43C059 2016-07-21 [expires: 2017-07-19]
$ gpg --export --armor 60F7980A > /opt/aptly/Release.pub

Daha sonra bu Release.pub açık anahtarını /var/www/html altına kopyalayın ve istemcilere aşağıdaki gibi wget vb. bir tool’la çekip paket deposu güven anahtarlığına keyi ekleyin :

# cp -a /opt/aptly/Release.pub /var/www/html

İstemcilerde aşağıdaki gibi anahtarı, güven anahtarlığına ekleyebilirsiniz :

# wget -q http://mirror.aydintd.net/Release.pub -O- | apt-key add -
OK

Paket deposu tanımını aşağıdaki şekilde kullanacağınız bağlantı protokolüne, mimariye ya da bileşene göre düzenleyin :

Örneğin :

# vim /etc/apt/sources.list

# Paket Depoları 
deb ftp://mirror.aydintd.net/debian jessie main contrib non-free
deb-src ftp://mirror.aydintd.net/debian jessie main contrib non-free

# Security Paket Depoları
deb ftp://mirror.aydintd.net/debian-security jessie main

HTTP’den kullanılmak isteniyorsa ftp:// yerine http:// yazılması yeterli. deb-src debian paketlerinin kaynaklarını da kullanmak istiyorsanız tanımlamanız gereken satır.

Paket deposu tanımlarını temizleyip, tekrar güncelleyin :

# apt-get clean all ; apt-get update

Herşey doğru gittiyse yeni paket deposu yansısından paket kurabilir hale gelmiş olmalısınız, test etmek için :

# apt-cache showpkg sl
Package: sl
Versions: 
3.03-17 (/var/lib/apt/lists/mirror.aydintd.net_debian_dists_jessie_main_binary-amd64_Packages)
 Description Language: 
                 File: /var/lib/apt/lists/mirror.aydintd.net_debian_dists_jessie_main_binary-amd64_Packages
                  MD5: 64964faf22f36fbd8983fb5015010c0b


Reverse Depends: 
  junior-games-text,sl
  games-toys,sl
Dependencies: 
3.03-17 - libc6 (2 2.2.5) libncurses5 (2 5.5-5~) libtinfo5 (0 (null)) 
Provides: 
3.03-17 - 
Reverse Provides:

İleri Debian Paket Deposu Yönetimi hakkında başka bir blog yazısı daha yazmayı planlıyorum, zira yazarken ben bunaldım.

Burada bırakıyorum, birilerinin işine yarayacağı ümidiyle,

Sevgiler

2 Comments

Bir Cevap Yazın

I'm not a freaking robot : Time limit is exhausted. Please reload CAPTCHA.

26 Temmuz 2016

Posted In: Sistem, Teknik

Etiketler:, , , , , ,

2 Comments