« Koji/SigulUsing » : différence entre les versions
(→FAQ) |
|||
| (2 versions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 90 : | Ligne 90 : | ||
{{Admon/faq|ERROR: I/O error: Unexpected EOF in NSPR| | {{Admon/faq|ERROR: I/O error: Unexpected EOF in NSPR| | ||
* S'assurer que le répertoire des clés existe | * S'assurer que le répertoire des clés existe. Ce chemin est déclaré dans le fichier <path>/etc/sigul/server.conf</path><pre>gnupg-home: /var/lib/sigul/server/gnupg</pre> | ||
** 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 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<pre>service sigul_server status && service sigul_bridge status</pre> | * S'assurer que les daemons sigul_bridge et sigul_server sont démarrés<pre>service sigul_server status && service sigul_bridge status</pre> | ||
* S'assurer que le pont peut se connecter au serveur ( [[Koji/SigulInstall#Firewall| Configure firewall]] )}} | * S'assurer que le pont peut se connecter au serveur ( [[Koji/SigulInstall#Firewall| Configure firewall]] )}} | ||
{{Admon/faq|Error: Unknown error| | |||
Vérifier les journaux du serveur, l'erreur est surement plus explicite | |||
* <pre>/usr/bin/rpmsign: No such file or directory</pre>Il suffit d'installer le paquet <package>rpm-sign</package> qui n'est pas installé par défaut sur centos 7. Un simple <code>yum provides /usr/bin/rpmsign</code> donne le paquet à installer.}} | |||
{{Admon/faq|Unknown error on creating key process| | {{Admon/faq|Unknown error on creating key process| | ||
| Ligne 102 : | Ligne 110 : | ||
{{Admon/faq|Certificats client expirés| | {{Admon/faq|Certificats client expirés| | ||
Une fois le certificat client expiré, il faut le désactiver localement<pre>certutil -d ~/.sigul -D -n sigul-client-cert</pre> et refaire une génération de certificat client.}} | Une fois le certificat client expiré, il faut le désactiver localement<pre>certutil -d ~/.sigul -D -n sigul-client-cert</pre> et refaire une génération de certificat client.}} | ||
== Interfacer Sigul et koji == | |||
=== configuration === | |||
<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<syntaxhighlight lang="bash">su - sigul</syntaxhighlight> | |||
* Création du répertoire de configuration de <class>Koji</class><syntaxhighlight lang="bash">mkdir -p ~/.koji</syntaxhighlight> | |||
* Copie de la configuration par défaut du client <class>Koji</class><syntaxhighlight lang="bash">cp /etc/koji.conf ~/.koji/config</syntaxhighlight> | |||
* Copie des certificats {{class|Kojiweb}} dans celui-ci<syntaxhighlight lang="bash">cp /etc/pki/koji/pem/kojiweb.pem .koji/client.pem</syntaxhighlight><syntaxhighlight lang="bash">cp /etc/pki/koji/kojica.crt .koji/clientca.crt</syntaxhighlight><syntaxhighlight lang="bash">cp /etc/pki/koji/kojica.crt .koji/serverca.crt</syntaxhighlight> | |||
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 === | |||
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>. | |||
<syntaxhighlight lang="bash">sigul sign-rpm -o signed.rpm key_name unsigned.rpm</syntaxhighlight> | |||
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 | |||
<syntaxhighlight lang="bash">rpm --checksig signed.rpm</syntaxhighlight> | |||
== Script sigulsign_unsigned.py == | == Script sigulsign_unsigned.py == | ||
Dernière version du 23 avril 2015 à 08:53
Sigul
après une installation de Sigul, on peut l'utiliser.
Créer une nouvelle clé
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='srs@b2pweb.com' --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
sigul import-key 'CentOS-5-B2PWeb' ~/.gnupg/secring.gpg
Changer le nom de la clé
Changer le nom de la clé centos5 en centos-5-key
sigul modify-key --new-name centos-5-key centos5
Ajout d'un utilisateur
- Ajout d'un utilisateur administrateur
sigul new-user --admin --with-password didier
Autoriser l'utilisation d'une clé existante à un utilisateur
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
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
- 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
configuration
<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
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
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) <srs@b2pweb.com> 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.b2pweb.com/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.b2pweb.com/kojihub' % opts.arch
# setup the koji session
logging.info('Setting up koji session')
kojisession = koji.ClientSession(KOJIHUB)
Signature d'un ou plusieurs paquets
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