csomagkezelés haladókszk.sch.bme.hu/wp-content/uploads/2016/05/linux_pm... · 2016-05-05 ·...
TRANSCRIPT
Technikai dolgok
$ ssh -p 22{01-20} [email protected]
Jelszó: Almafa12
$ sudo bash
# apt-get -y install build-essential devscriptsdebhelper 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/usrinstall
Valami még mindig nem jó
• A csomag nem hozza létre a mappát -> debian/cica.dirs
cica.dirs
/usr/bin
Ú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/binary-amd64/
# cp cica-0.0.1-1_amd64.deb /var/www/html/debian/dists/stable/main/binary-amd64/
Packages fájl
# cd /var/www/html/debian
# apt-ftparchive packagesdists/stable/main/binary-amd64 > dists/stable/main/binary-amd64/Packages
# gzip -c dists/stable/main/binary-amd64/Packages > dists/stable/main/binary-amd64/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