Reprepro kasutamine
Sissejuhatus
reprepro https://mirrorer.alioth.debian.org/ tarkvara abil hallatakse lokaalset apt repositooriumit. Repositoorimi haldamine on suhteliselt lihtne ja tulemus on suhteliselt täisväärtuslik, nt toimib nn SecureApt, https://wiki.debian.org/SecureApt. Käesolev tekst on koostatud Ubuntu v. 16.04 keskkonda kasutades, aga võiks töötada nö mujal ka. gnupg2 tarkvara kasutamisel jälgida, kas see pakett paigaldataks ka reprepro paketi sõltuvusena ja kui, siis kautada GnuPG v. 2 võtmeid.
Tööpõhimõte
reprepro kasutamine seisneb vajadusel reprepro nimelise programmi käivitamisel sobivate argumentidega, käivitamise tulemusena tavaliselt genereeritakse apt repositooriumile vastav kataloogistruktuur koos seal sisalduvate nö igasuguste failidega (Release.gpg jt). Tavaliselt on reprepro arvutis lisaks vajalikud
- gpg tarkvara (v. 1.4 või v. 2.x) - käesolevas tekstis kasutatakse v. 2 tarkvara ja krüptomaterjali
- reprepro käivitajal on kasutada gpg signeerimise võti
- veebiserver (nt NginX või Apache)
Tüüpilisel reprepro kasutusjuhtumil nt arendaja annab tellijale oma töö üle .deb failidena, aga neid otseselt on ebamugav kasutada (nö dpkg -i paketinimi.deb ütlemisega). Lahenduseks on paigaldada üle võrgu, sarnasel viisil nagu kasutatakse tavalist apt repositooriumi (nt ee.archive.ubuntu.com). Seejuures uuemal ajal apt klient eeldab, et repositoorum on nö turvaline, st kasutatakse signeeritud Release.gpg faili. Selliste omadustega repositooriumi haldamiseks on sobiv kasutada reprepro tarkvara.
reprepro lahenduse tekitamise sammud
- paigaldada operatsioonisüsteem (nt Debian või Ubuntu)
- tekitada reprepro kasutaja
- paigaldada gpg tarkvara ja genereerida reprepro kasutajana gpg signeerimise võti
- paigaldada ja seadistada reprepro tarkvara
- paigutada reprepro repositooriumisse pakett
- paigaldada ja seadistada veebiserveri tarkvara ning teha reprepro poolt genereeritud apt kataloogistruktuur üle võrgu kättesaadavaks
- seadistada apt klient kasutama repositoorimumi ja kasutada
Tarkvara paigaldamine
Tarkvara paigaldamiseks sobib öelda
# apt-get install gnupg2 reprepro rng-tools nginx
kus
- rng-tools kiirendab /dev/urandom kasutamist vms, vastasel korral võtmete genereerimine väga aeglane
Repositooriumi haldav kasutaja:grupp
kasutaja:grupp tekitamine mille abil repositooriumi hallatakse
# groupadd repropro # useradd -g repropro -m -d /opt/repropro -s /bin/bash repropro
GPG v. 2 võtmed
GPG v. 2 võtmete genereerimisel tuleb teha kaks liigutust ja tekib kolm võtmepaari
- genereerida nö master võtmepaar (see on gpg kasutamise eelduseks) signeerimiseks
- master võtmepaariga kaasneb automaatselt ühe krüptimise subkey võtmepaari tekkimine
- genereerida signeerimise subkey võtmepaar
Master signeerimise võti ja subkey kürptimise võti
Nt sobib master võtmepaari genereerimiseks sellist seadistusfaili
$ cat gpg2.template %echo Generating a basic OpenPGP key Key-Type: RSA Key-Length: 4096 Key-Usage: sign Subkey-Type: RSA Subkey-Length: 4096 Subkey-Usage: encrypt Name-Real: Moraal APT Name-Email: moraal-apt@moraal.ee Expire-Date: 0 Passphrase: abc,6543H %commit %echo done
Genereerimisks öelda
$ gpg2 --batch --gen-key gpg2.template gpg: directory '/opt/reprepro/.gnupg' created gpg: new configuration file '/opt/reprepro/.gnupg/dirmngr.conf' created gpg: new configuration file '/opt/reprepro/.gnupg/gpg.conf' created gpg: keybox '/opt/reprepro/.gnupg/pubring.kbx' created gpg: Generating a basic OpenPGP key gpg: /opt/reprepro/.gnupg/trustdb.gpg: trustdb created gpg: key EDD7F10A marked as ultimately trusted gpg: directory '/opt/reprepro/.gnupg/openpgp-revocs.d' created gpg: revocation certificate stored as '/opt/reprepro/.gnupg/openpgp-revocs.d/D936FDF35DE6AEB9241AA937C348B1DAEDD7F10A.rev' gpg: done
Tulemusena tekib master võti
$ gpg2 --list-keys gpg: checking the trustdb gpg: marginals needed: 3 completes needed: 1 trust model: PGP gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u /opt/reprepro/.gnupg/pubring.kbx ------------------------------ pub rsa4096/EDD7F10A 2017-10-24 [SC] uid [ultimate] Moraal APT <moraal-apt@moraal.ee> sub rsa4096/0D884A61 2017-10-24 [E]
Signeerimise subkey võti
Signeerimise subkey võtme tekitamiseks sobib öelda
$ gpg2 --edit-key EDD7F10A gpg (GnuPG) 2.1.11; Copyright (C) 2016 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. Secret key is available. sec rsa4096/EDD7F10A created: 2017-10-24 expires: never usage: SC trust: ultimate validity: ultimate ssb rsa4096/0D884A61 created: 2017-10-24 expires: never usage: E [ultimate] (1). Moraal APT <moraal-apt@moraal.ee> gpg> addkey Please select what kind of key you want: (3) DSA (sign only) (4) RSA (sign only) (5) Elgamal (encrypt only) (6) RSA (encrypt only) Your selection? 4 RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (2048) 4096 Requested keysize is 4096 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) Key does not expire at all Is this correct? (y/N) y Really create? (y/N) y
seejärel küsitakse uue võtme parooli kaks korda, et võtmele parool seada ning master võtme parooli, et uus võti signeerida. Tulemusena öeldakse
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. sec rsa4096/EDD7F10A created: 2017-10-24 expires: never usage: SC trust: ultimate validity: ultimate ssb rsa4096/0D884A61 created: 2017-10-24 expires: never usage: E ssb rsa4096/E1DD3BBF created: 2017-10-24 expires: never usage: S [ultimate] (1). Moraal APT <moraal-apt@moraal.ee> gpg>
lõpuks salvestada muudatused võtmehoidjasse
gpg> save
Tulemus paistab selline
$ gpg2 --list-keys /opt/reprepro/.gnupg/pubring.kbx ------------------------------ pub rsa4096/EDD7F10A 2017-10-24 [SC] uid [ultimate] Moraal APT <moraal-apt@moraal.ee> sub rsa4096/0D884A61 2017-10-24 [E] sub rsa4096/E1DD3BBF 2017-10-24 [S]
Võtmete haldus
- võtme salvestamiseks
$ gpg2 -a --export E1DD3BBF > reprepro.gpg
- võtme omadusi saab kontrollida aadressil http://cirw.in/gpg-decoder/
- võtme packet sisu esitamine
$ gpg2 -a --export "E1DD3BBF" | gpg --list-packets --verbose
- parooli eemaldamine
# gpg2 --edit-key KeyID > passwd
ning seejärel sisestada töötav parool ning kaks korda uue parooli sisestamisest mina Enter'iga üle.
Kasulikud lisamaterjalid
- https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html
- http://irtfweb.ifa.hawaii.edu/~lockhart/gpg/
- https://wiki.gentoo.org/wiki/GnuPG
- https://www.apache.org/dev/openpgp.html
- https://davesteele.github.io/gpg/2014/09/20/anatomy-of-a-gpg-key/
- https://spin.atomicobject.com/2013/09/25/gpg-gnu-privacy-guard/
- https://tools.ietf.org/html/rfc4880
- https://pgp.key-server.io/
- https://pgp.cs.uu.nl/
GPG v. 1 võtmed
Käesolev punkt on väga lakooniline, reeglina võiks tänapäeval kasutada GnuPG v. 2 tarkvara.
Master signeerimise võti ja subkey kürptimise võti
v. 1.4 puhul tuleb sha1 vältimiseks kasutada nt sellist seadistusfaili, https://keyring.debian.org/creating-key.html
$ cat .gnupg/gpg.conf personal-digest-preferences SHA256 cert-digest-algo SHA256 default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 ZLIB BZIP2 ZIP Uncompressed
Nt sobib master võtmepaari genereerimiseks sellist malli
$ cat gpg.template %echo Generating a basic OpenPGP key Key-Type: RSA Key-Length: 4096 Key-Usage: sign Subkey-Type: RSA Subkey-Length: 4096 Subkey-Usage: encrypt Name-Real: Moraal APT Name-Email: moraal-apt@moraal.ee Expire-Date: 0 Passphrase: abc,6543H %commit %echo done
Genereerimisks öelda
$ gpg --batch --gen-key gpg.template
Signeerimise subkey võti
$ gpg --edit-key KeyID gpg> addkey ...
reprepro seadistamine
reprepro seadistamiseks on sobib kasutada ne selline distributions fail
$ cat /srv/repositories/conf/distributions Codename: xenial Components: main Architectures: i386 amd64 SignWith: E1DD3BBF
ning nt selline options fail
$ cat /srv/repositories/conf/options ask-passphrase
Kasutamine
reprepro kasutamine on praktiliselt ühtemoodi, nii GnuPG v. 1 kui v. 2 kasutamisel. Paketi lisamine repositooriumisse
$ reprepro -b /var/repositories includedeb xenial ioping_0.9-2_amd64.deb
Repositooriumi sisu esitamine
$ reprepro -b /var/repositories/ list xenial xenial|main|amd64: ioping 0.9-2
Paketi eemaldamine repositooriumist
$ reprepro -b /srv/repositories/ remove xenial ioping Exporting indices... Deleting files no longer referenced...
Misc
- v. 1.4 -> 2.1 teisendus
$ gpg --export-secret-keys | gpg2 --import -
- võtmete varukoopia moodustamine
TODO
Kasulikud lisamaterjalid
- https://blog.packagecloud.io/eng/2017/03/23/create-debian-repository-reprepro/
- https://help.ubuntu.com/community/CreateAuthenticatedRepository
- https://www.howtoforge.com/setting-up-an-apt-repository-with-reprepro-and-nginx-on-debian-wheezy
- https://www.digitalocean.com/community/tutorials/how-to-use-reprepro-for-a-secure-package-repository-on-ubuntu-14-04
- https://josetips.wordpress.com/tag/reprepro/
- http://blog.jonliv.es/blog/2011/04/26/creating-your-own-signed-apt-repository-and-debian-packages/
- https://wiki.debian.org/DebianRepository/SetupWithReprepro