Csomagkezelés haladó Bakai Dániel, volt reszortvezető bakaid@kszk.bme.hu
Technikai dolgok $ ssh -p 22{01-20} tanfolyam@152.66.209.110 Jelszó: Almafa12 $ sudo bash # apt-get -y install build-essential devscripts debhelper dpkg-sig apache2 screen rng-tools
Csomagkezelés...the single biggest advancement Linux has brought to the industry... Ian Murdock, a Debian projekt alapítója
Fő követelmények Telepítés Egységes csomagformátum Egységes install/uninstall metódusok Csomagkezelés Csomagtár (repository) Függőségfeloldás Frissítés
Egységes csomagformátum Metaadatok Név Verzió Függőségek Archívum Fájlok
dpkg Debian csomagkezelés alapja Alacsonyszintű eszköz Csomagformátum:.deb Önmagában ritkán használjuk
deb formátum Tömörített állomány (ar) debian-binary : verziószám control.tar.gz : metaadat data.tar.{gz, bz2,xz,...} : fájlok cica_0.0.1-1_amd64.deb alakú
Csomagtár (repository) Csomaggyűjtemény Karbantartott Frissített Szekciókra osztott Disztribúció/kiegészítő/alkalmazás szint Verifikáció Integritás és hitelesség
apt dpkg-re épül repository kezelés Telepítés függőségfeloldással Szoftverfrissítés
Mit fogunk ma csinálni? Létrehozunk egy saját alkalmazást deb csomagot csinálunk belőle repository-t csinálunk a csomagnak Hozzáadjuk a saját repot egy kliensgéphez Telepítjuk a csomagot
Saját alkalmazás
Saját alkalmazás: cica cica parancs Standard kimenetre: Cica {01-20} Írjuk meg!
Cica I. $ mkdir cica $ cd cica
cica.c #include <stdio.h> int main(void) { printf("cica %d\n, {01-20}); return 0; }
Makefile PREFIX = /usr BINDIR = ${PREFIX}/bin all: cica cica: cica.c gcc -std=c99 -Wall -o cica cica.c install: cica install -m 0755 cica ${BINDIR} clean: rm -rf cica.phony: install clean
Próba $ make # make install $ cica $ make clean # rm /usr/bin/cica
Cica II. $ cd.. $ mv cica cica-0.0.1 $ tar cvzf cica-0.0.1.tar.gz cica-0.0.1/
Saját kiadás # cp cica-0.0.1.tar.gz /var/www/html/ # chmod a+r /var/www/html/cica- 0.0.1.tar.gz
deb csomag
Hogy lesz ebből deb? Rengeteg tool és segítőeszköz Most a lehető legfapadosabban, hogy jobban megértsük
Átnevezés A forráscsomag nevének kötelező formátuma van $ mkdir deb $ cp cica-0.0.1.tar.gz deb/cica_0.0.1.orig.tar.gz $ cd deb
Kibontás $ cd deb/ $ tar xvf cica_0.0.1.orig.tar.gz $ cd cica-0.0.1/
Debianizálás Létre kell hoznunk a csomagolást vezérlő fájlokat: debian/ changelog compat control copyright rules source/ format
changelog $ dch --create v 0.0.1-1 --package cica cica (0.0.1-1) main; urgency=medium * Initial release. -- tanfolyam{01-20} <tanfolyam@tanfolyam{01-20}> Mon, 25 Apr 2016 14:40:46 +0200
compat magic number, debhelper verziótól függ 9
control Egyik legfontosabb fájl A készítendő csomagokat írja le Sok opció, minimálisan kötelező elemekkel
control Source: cica Maintainer: tanfolyam{01-20} <tanfolyam@tanfolyam{01-20}> Section: misc Priority: optional Standards-Version: 3.9.2 Build-Depends: debhelper (>= 9) Package: cica Architecture: any Depends: ${shlibs:depends}, ${misc:depends}, cowsay (>= 3) Description: says Cica writes "Cica {01-20}" to stdout
copyright Licenszeléssel kapcsolatos információk Egyelőre lehet üres $ touch debian/copyright
rules Másik nagyon fontos fájl A fordítás menetét írja le De okos!
rules #!/usr/bin/make -f %: dh $@ A behúzás tab!
source/format A forráscsomag verzióját írja le $ mkdir debian/source $ nano debian/source/format 3.0 (quilt)
Csomag készítése $ debuild us uc
Valami nem jó Rossz helyre akar telepíteni a csomagunk override_dh_auto_install: $(MAKE) PREFIX=$$(pwd)/debian/cica/usr install
Valami még mindig nem jó A csomag nem hozza létre a mappát -> debian/cica.dirs
/usr/bin cica.dirs
Újrapróbálkozás $ debuild us uc
Telepítés # dpkg -i cica_0.0.1-1_amd64.deb Mi a baj? A cowsay a függőségünk, a dpkg nem kezeli # apt-get install -f
Repository
Hogyan lesz reponk? Szintén rengeteg segédeszköz Megint csak a lehető legfapadosabb
Könyvtárstruktúra # cd /var/www/html/ # mkdir p debian/dists/stable/main/binaryamd64/ # cp cica-0.0.1-1_amd64.deb /var/www/html/debian/dists/stable/main/bi nary-amd64/
Packages fájl # cd /var/www/html/debian # apt-ftparchive packages dists/stable/main/binary-amd64 > dists/stable/main/binary-amd64/packages # gzip -c dists/stable/main/binaryamd64/packages > dists/stable/main/binaryamd64/packages.gz
Release fájl I. # cd /var/www/debian/stable/main/binary-amd64 # apt-ftparchive release. > Release Archive: stable Origin: tanfolyam Label: tanfolyam Version: 8.4 Component: main Architecture: amd64
Release fájl II. # cd /var/www/debian/dists/stable/ # apt-ftparchive release. > Release Origin: tanfolyam Label: tanfolyam Suite: stable Version: 8.4 Architectures: amd64 Components: main Description: Tanfolyam repo
Repo hozzáadása # nano /etc/apt/sources.list deb http://152.66.209.110:80{01-20}/debian/ stable main
Telepítés apt-get-tel # apt-get update # apt-get install cica
Verifikálhatóság Csomagok egyenkénti aláírása A csomag készítője Top-level Release fájl aláírása A repo üzemeltetője
Aláírás Kulcsgenerálás Publikus kulcs közzététele (Csomagok aláírása) Release aláírása
Kulcsgenerálás # gpg --gen-key (4) RSA (sign only) 4096 3y y tanfolyam tanfolyam@tanfolyam{01-20} <Enter> O <Jelszó> <Jelszó>
Publikus kulcs közzététele # cd /var/www/html/debian/ # gpg --list-keys # gpg --output keyfile --armor --export <ID>
Csomagok aláírása # cp cica_0.0.1-1_amd64.deb /tmp/ # cd /tmp # dpkg-sig --sign builder cica_0.0.1-1_amd64.deb Ellenőrzés # ar x cica_0.0.1-1_amd64.deb
Release aláírása # cd /var/www/html/debian/dists/stable # gpg -abs -o Release.gpg Release
Publikus kulcs elfogadása $ wget -O - http://152.66.209.110:80{01-20}/debian/keyfile sudo apt-key add -
Újbóli próba # apt-get remove cica # apt-get autoremove # apt-get update # apt-get install cica