Pisi paketlerini chroot içinde derleyerek bağımlılıkları düzeltmek ve dağıtık bir farm için altyapı hazırlamak için docker kullanmayı planladık.
Bunun için İlker Manap @ilkermanap, pisi-chroot-build uygulamasını yazdı.
Bu uygulama ile kolayca pisilinux için pisi çalıştıran base hazırlayabiliyoruz. bu şekilde hazırlamış olduğum içerisinde 75 tane pisi paketinin olduğu 190Mb civarında büyüklüğü olan base imajı burada.
Bu imajın üzerine derleme için gereken make, gcc ve diğer uygulamaların da dahil olduğu bir imaj hazırladım. Bu imajın inşa dosyaları burada, kendisi de burada.
Tamam da bunları nasıl kullanacağız? ilk önce docker kurmalısınız. Docker PisiLinux ana deposunda mevcut. Bu yazıyı yazdığımda henüz derlenmemişti farm depodaki pisi paketini
pisi it docker
ile kurun.
Docker için gereken çekirdek desteği PisiLinux’ta açık ancak henüz /etc/fstab da cgroup ile satırı olmadığı için cgroup u elle bağlıyor ve docker servisini çalıştırıyoruz.
bunun mutlaka tamamlanması gerek. ( cgroupfs-mount konusu mudur içinde halloldu, docker servis olarak başlatılırken hata veriyor. )
sudo docker -d
Şimdi kota probleminiz olmadığını varsayıyorum farm veya base imajı çekebilir, paket derleyebilirsiniz.
pisi-chroot-base ve farm da kullanılan pisi dosyaları yeni binutils ve glibc ile derlenmiştir. Bu nedenle bu sistemde oluşan pisi’lerin kullanmakta olduğunuz sistem ile uyumlu olmadığı ve problem çıkartabileceği varsayılır.
pisi-chroot-build ve pisi-chroot-farm kodlarını incelerseniz öncelikli paketler deposunun manap.se/pisi ve kaynak deposunun https://github.com/ertugerata/PisiLinux/tree/Pisi-2.0 dalı olduğu görülür.
ilk olarak base imajı veya farm imajını çekmelisiniz.
sudo docker pull ertugerata/pisi-chroot-farm
işlem tamamlandığında
Pulling repository ertugerata/pisi-chroot-farm
5599ec6d57ca: Download complete
3290615324f4: Download complete
2b691f7e1007: Download complete
b725b4624bd4: Download complete
f78c43205c91: Download complete
4c7038edae83: Download complete
0bb137624718: Download complete
a50d8f5355d8: Download complete
Status: Image is up to date for ertugerata/pisi-chroot-farm:latest
görececeksiniz. docker servisinin çalıştığı terminalde de
INFO[1041] +job log(pull, ertugerata/pisi-chroot-farm:latest, )
INFO[1041] -job log(pull, ertugerata/pisi-chroot-farm:latest, ) = OK (0)
INFO[1041] -job pull(ertugerata/pisi-chroot-farm, latest) = OK (0)
benzer satırlarını görmelisiniz, görüyorsanız artık hazırsınız.
Ben şöyle yapıyorum; derleyeceğim paketin adı acl olsun, ilk önce bir dizin oluşturuyorum d_acl, ve içine bir Dockerfile hazırlıyorum.
mkdir d_acl
vim Dockerfile
cat d_acl/Dockerfile
#ertugerata/d-acl
FROM ertugerata/pisi-chroot-farm
MAINTAINER Ertuğrul Erata <ertugrulerata@gmail.com>
VOLUME /var/cache/pisi/packages
VOLUME /var/cache/pisi/archives
RUN service dbus start && pisi bi acl --ignore-safety -y && service dbus stop
sonra o dizinin içine giriyor ve
docker build .
ile imaj dosyasını oluşturmaya çalışıyorum. aşağıdakine benzer bir log ile tamamlanmasını gerekir.
gmake[2]: Leaving directory '/var/pisi/acl-2.2.52-5/work/acl-2.2.52/man/man3'
gmake[1]: Leaving directory '/var/pisi/acl-2.2.52-5/work/acl-2.2.52/man'
DEBUG: return value for "make -j5 DESTDIR=/var/pisi/acl-2.2.52-5/install install install-lib install-dev" is 0
DEBUG: return value for "install -m0644 "README" /var/pisi/acl-2.2.52-5/install/usr/share/doc/acl" is 0
DEBUG: /bin/setfacl [stripped]
DEBUG: /bin/chacl [stripped]
DEBUG: /bin/getfacl [stripped]
DEBUG: Removing special libtool file: /var/pisi/acl-2.2.52-5/install/lib/libacl.la
DEBUG: /lib/libacl.so.1.1.0 [stripped]
DEBUG: Path /usr/share/man/man3 belongs in multiple packages
Building package: acl
Creating acl-2.2.52-5-p01-x86_64.pisi...
Building package: acl-devel
Creating acl-devel-2.2.52-5-p01-x86_64.pisi...
Keeping build directory
Stopping DBus
---> 8c4755d5fb24
Removing intermediate container 8dfa9c6b7903
Paket normal olarak oluşmuş ve docker imajının root dizini altındadır. Oluşmaz ise ne olur, ne yapmak lazımdır, hatalar nasıl bulunur ve giderilir, bunlar yazılarımızın devamında gelecek.