csomagkezelés haladókszk.sch.bme.hu/wp-content/uploads/2016/05/linux_pm... · 2016-05-05 ·...

Post on 05-Mar-2020

2 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Csomagkezeléshaladó

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 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

top related