Koji/SigulUsing
Sigul[modifier | modifier le wikicode]
après une installation de Sigul, on peut l'utiliser.
Créer une nouvelle clé[modifier | modifier le wikicode]
Une fois le client Sigul capable d'envoyer des commandes à <class>Sigul</class>, on peut créer une nouvelle clé nommée centos-5-key.
sigul new-key --name-real='CentOS-5-B2PWeb' --name-comment='CentOS 5 B2PWeb Signing Key' --name-email='didier@tartarefr.eu' --key-admin root centos-5-key
$ sigul new-key --help
usage: client.py new-key [options] key
Add a key
options:
-h, --help show this help message and exit
--key-admin=USER Initial key administrator
--name-real=NAME_REAL
Real name of key subject
--name-comment=NAME_COMMENT
A comment about of key subject
--name-email=NAME_EMAIL
E-mail of key subject
--expire-date=YYYY-MM-DD
Key expiration date
Import d'une clé existante[modifier | modifier le wikicode]
sigul import-key 'CentOS-5-B2PWeb' ~/.gnupg/secring.gpg
Changer le nom de la clé[modifier | modifier le wikicode]
Changer le nom de la clé centos5 en centos-5-key
sigul modify-key --new-name centos-5-key centos5
Ajout d'un utilisateur[modifier | modifier le wikicode]
- Ajout d'un utilisateur administrateur
sigul new-user --admin --with-password didier
Autoriser l'utilisation d'une clé existante à un utilisateur[modifier | modifier le wikicode]
sigul grant-key-access centos-5-key didier
sigul grant-key-access --help usage: client.py grant-key-access key user Grant key access to a user options: -h, --help show this help message and exit
Modifier la phrase de passe[modifier | modifier le wikicode]
sigul change-passphrase centos-5-key
sigul change-passphrase --help usage: client.py change-passphrase key Change key passphrase options: -h, --help show this help message and exit
FAQ[modifier | modifier le wikicode]
- S'assurer que le répertoire des clés existe. Ce chemin est déclaré dans le fichier <path>/etc/sigul/server.conf</path>
gnupg-home: /var/lib/sigul/server/gnupg
- Propriétaire: sigul
- Groupe: sigul
- Droits: 0700 rwx------
- Lien symbolique /var/lib/sigul/gnupg pointant sur <path>/var/lib/sigul/server/gnupg</path>
- S'assurer qu'il y a suffisamment d'espace disque ( en gros deux fois la taille du plus gros paquet RPM )
- S'assurer que les daemons sigul_bridge et sigul_server sont démarrés
service sigul_server status && service sigul_bridge status
- S'assurer que le pont peut se connecter au serveur ( Configure firewall )
/usr/bin/rpmsign: No such file or directory
Il suffit d'installer le paquet <package>rpm-sign</package> qui n'est pas installé par défaut sur centos 7. Un simpleyum provides /usr/bin/rpmsigndonne le paquet à installer.
- Installer le paquet <package>gnupg1</package> depuis [ http://people.redhat.com/mitr/rpmsigner/rhel6 ] ou de [ http://infrastructure.stg.fedoraproject.org/repo/builder-rpms/6Server/SRPMS/ ]
- S'assurer que Sigul est configurer pour utiliser <package>gnupg1</package>
sed -i -e '/gnupg_bin/s,^.*$,gnupg_bin = "/usr/bin/gpg1",' /usr/share/sigul/settings.py
- S'assurer que le paquet <package>python-sqlalchemy</package> soit installé
certutil -d ~/.sigul -D -n sigul-client-certet refaire une génération de certificat client.
Interfacer Sigul et koji[modifier | modifier le wikicode]
configuration[modifier | modifier le wikicode]
<class>Sigul</class> peut être utiliser pour signer un ou de multiples RPMs dans une instance <class>Koji</class>. Une fois le client Sigul correctement configuré, il suffit juste de configurer l'utilisateur Proxy pour Koji. Quand un client <class>Sigul</class> émet une requête de signature pour <class>Koji</class>, le pont <class>Sigul</class> se connecte à <class>Koji</class> en tant qu'utilisateur kojiweb. Il faut juste s'assurer que l'utilisateur demandeur a les droits administrateur sur le <class>Koji</class> et <class>Sigul</class> s'occupe du reste.
La configuration pour <class>Koji</class> peut être situer n'importe où, du moment que l'utilisateur sigul a droit de lecture. Les certificats pour kojiweb doivent être copiés dans le même chemin que la configuration <class>Koji</class>
- Comme toutes les commandes de cette partie doivent être lancées par l'utilisateur sigul, on va donc devenir cet utilisateur
su - sigul
- Création du répertoire de configuration de <class>Koji</class>
mkdir -p ~/.koji
- Copie de la configuration par défaut du client <class>Koji</class>
cp /etc/koji.conf ~/.koji/config
- Copie des certificats Kojiweb dans celui-ci
cp /etc/pki/koji/pem/kojiweb.pem .koji/client.pem
cp /etc/pki/koji/kojica.crt .koji/clientca.crt
cp /etc/pki/koji/kojica.crt .koji/serverca.crt
Après avoir redémarrer le pont <class>Sigul</class>, le client doit être capable d'obtenir un RPM depuis Koji et de le signer.
Test[modifier | modifier le wikicode]
Pour tester l'interfaçage, on va obtenir un RPM depuis <class>Koji</class>, le signer et le sauvegarder dans le répertoire de travail actuel. c'est juste pour tester la connxion et l'authentification sur <class>Koji</class> et <class>Sigul</class>.
sigul sign-rpm -o signed.rpm key_name unsigned.rpm
Si la commande précédente fonctionne, un RPM signé est présent dans le répertoire de travail actuel.
On vérifie sa signature
rpm --checksig signed.rpm
Script sigulsign_unsigned.py[modifier | modifier le wikicode]
Le script est à récupérer depuis un depôt releng de Fedora via git (git://git.fedorahosted.org/git/releng) ou directement depuis https://git.fedorahosted.org/cgit/releng/tree/scripts/sigulsign_unsigned.py
Avant de pouvoir utiliser ce script magique qui va signer tous les RPM non-signés (derniers m-v-r) construit dans le Koji, il est nécessaire de modifier quelques variables:
- Changer l'URL du HUB Koji (2 fois): KOJIHUB
- Spécifier nos propres fichiers de certificats: SERVERCA, CLIENTCA, CLIENTCERT
- Ajout de nos clés de signature: KEYS
Pour obtenir l'ID de nos clés:
- exporter de la clé
sigul get-public-key centos-5-key > centos-5-key.asc
- importer dans GPG
gpg --import centos-5-key.asc
- Lister nos clé GPG
gpg --list-keys
/root/.gnupg/pubring.gpg ------------------------ pub 1024D/773DF357 2013-08-20 uid CentOS-5-B2PWeb (CentOS 5 B2PWeb Signing Key) <didier@tartarefr.eu> sub 2048g/EBC96FF2 2013-08-20
L'ID de notre clé centos-5-key est 773DF357
Change koji hostname, certificate files and add B2PWeb signing keys
diff -u a/sigulsign_unsigned.py b/sigulsign_unsigned.py
--- a/sigulsign_unsigned.py 2013-08-21 10:05:57.418032284 +0200
+++ b/sigulsign_unsigned.py 2013-08-21 10:13:11.683976970 +0200
@@ -38,11 +38,11 @@ rpmdict = {}
unsigned = []
loglevel = ''
passphrase = ''
-KOJIHUB = 'https://koji.fedoraproject.org/kojihub'
+KOJIHUB = 'http://koji.tartarefr.eu/kojihub'
# Should probably set these from a koji config file
-SERVERCA = os.path.expanduser('~/.fedora-server-ca.cert')
-CLIENTCA = os.path.expanduser('~/.fedora-upload-ca.cert')
-CLIENTCERT = os.path.expanduser('~/.fedora.cert')
+SERVERCA = os.path.expanduser('~/.koji/serverca.crt')
+CLIENTCA = os.path.expanduser('~/.koji/clientca.crt')
+CLIENTCERT = os.path.expanduser('~/.koji/client.pem')
# Setup a dict of our key names as sigul knows them to the actual key ID
# that koji would use. We should get this from sigul somehow.
KEYS = {'fedora-12-sparc': {'id': 'b3eb779b', 'v3': True},
@@ -67,7 +67,9 @@ KEYS = {'fedora-12-sparc': {'id': 'b3eb7
'fedora-10': {'id': '4ebfc273', 'v3': False},
'fedora-10-testing': {'id': '0b86274e', 'v3': False},
'epel-6': {'id': '0608b895', 'v3': True},
- 'epel-5': {'id': '217521f6', 'v3': False}}
+ 'epel-5': {'id': '217521f6', 'v3': False},
+ 'centos-5-key' : {'id': '773df357', 'v3': True},
+ 'centos-6-key' : {'id': 'd3f3c56a', 'v3': True}}
def exit(status):
"""End the program using status, report any errors"""
@@ -213,7 +215,7 @@ if not (opts.just_list or opts.just_writ
# Reset the KOJIHUB if the target is a secondary arch
if opts.arch:
- KOJIHUB = 'http://%s.koji.fedoraproject.org/kojihub' % opts.arch
+ KOJIHUB = 'http://%s.koji.tartarefr.eu/kojihub' % opts.arch
# setup the koji session
logging.info('Setting up koji session')
kojisession = koji.ClientSession(KOJIHUB)
Signature d'un ou plusieurs paquets[modifier | modifier le wikicode]
C'est utile afin de signer des paquets qui ne sont pas les derniers construits (dernier N-V-R)
sigulsign_unsigned.py -v --password="motdepasse" --inherit centos-6-key <N-V-R>
exemple:
sigulsign_unsigned.py -v --password="$(cat /root/.sigul/centos-6-key)" --inherit centos-6-key appliance-tools-007.0-1.el6