Reprepro kasutamine

Allikas: Imre kasutab arvutit
Mine navigeerimisribaleMine otsikasti

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

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