<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://wiki.home.tartarefr.eu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Didier</id>
	<title>TartareFR - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.home.tartarefr.eu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Didier"/>
	<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php/Sp%C3%A9cial:Contributions/Didier"/>
	<updated>2026-07-06T20:11:03Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Services/Kerberos/Install&amp;diff=168</id>
		<title>Services/Kerberos/Install</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Services/Kerberos/Install&amp;diff=168"/>
		<updated>2018-01-31T08:50:31Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Récapitulatif des outils d&amp;#039;utilisation et d&amp;#039;administration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Le protocole Kerberos est issu du projet « Athena » du MIT, mené par Miller et Neuman. La version 5 du protocole Kerberos a été normalisée par l&#039;IETF dans les RFC 1510 (septembre 1993) et 1964 (juin 1996). Le nom « Kerberos » provient provient de la mythologie grecque et correspond au nom du chien (en français « Cerbère ») protégeant l&#039;accès aux portes d’Hadès.&lt;br /&gt;
&lt;br /&gt;
L&#039;objet de Kerberos est la mise en place de serveurs d&#039;authentification (&#039;&#039;&#039;AS&#039;&#039;&#039; pour &#039;&#039;&#039;Authentication Server&#039;&#039;&#039;), permettant d&#039;identifier des utilisateurs distants, et des serveurs de délivrement de tickets de service (&#039;&#039;&#039;TGS&#039;&#039;&#039;, pour &#039;&#039;&#039;Ticket Granting System&#039;&#039;&#039;), permettant de les autoriser à accéder à des services réseau. Les clients peuvent aussi bien être des utilisateurs que des machines. La plupart du temps, les deux types de services sont regroupés sur un même serveur, appelé Centre de Distribution des Clés (ou &#039;&#039;&#039;KDC&#039;&#039;&#039;, pour &#039;&#039;&#039;Key Distribution Center&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== Fonctionnement ==&lt;br /&gt;
&lt;br /&gt;
Le protocole Kerberos repose sur un système de cryptographie à base de clés secrètes (clés symétriques ou clés privées), avec l&#039;algorithme DES. Kerberos partage avec chaque client du réseau une clé secrète faisant office de preuve d&#039;identité.&lt;br /&gt;
&lt;br /&gt;
Le principe de fonctionnement de Kerberos repose sur la notion de « tickets »  :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:KerberosSimple.svg|800px]]&lt;br /&gt;
# Afin d&#039;obtenir l&#039;autorisation d&#039;accès à un service, un utilisateur distant doit envoyer son identifiant au serveur d&#039;authentification.&lt;br /&gt;
# Le serveur d&#039;authentification vérifie que l&#039;identifiant existe et envoie un ticket initial au client distant, chiffré avec la clé associée au client. Le ticket initial contient :&lt;br /&gt;
#* un clé de session, faisant office de mot de passe temporaire pour chiffrer les communications suivantes ;&lt;br /&gt;
#* un ticket d&#039;accès au service de délivrement de ticket. &lt;br /&gt;
# Le client distant déchiffre le ticket initial avec sa clé et obtient ainsi un ticket et une clé de session. &lt;br /&gt;
# Grâce à son ticket et sa clé de session, le client distant peut envoyer une requête chiffrée, afin de demander l&#039;accès à un service.&lt;br /&gt;
&lt;br /&gt;
Par ailleurs, Kerberos propose un système d&#039;authentification mutuelle permettant au client et au serveur de s&#039;identifier réciproquement.&lt;br /&gt;
&lt;br /&gt;
L&#039;authentification proposée par le serveur Kerberos a une durée limitée dans le temps, ce qui permet d&#039;éviter à un pirate de continuer d&#039;avoir accès aux ressources : on parle ainsi d&#039;anti re-jeu. &lt;br /&gt;
&lt;br /&gt;
* Les comptes sont appelé &#039;&#039;&#039;principal&#039;&#039;&#039; pour kerberos. Ce peut être un utilisateur (ex: &#039;&#039;didier@TARTAREFR.EU&#039;&#039;), un hôte (ex: &#039;&#039;kerberos.tartarefr.eu@TARTAREFR.EU&#039;&#039;), un service (ex: &#039;&#039;http/kerberos.tartarefr.eu@TARTAREFR.EU&#039;&#039;), etc...&lt;br /&gt;
* Un &#039;&#039;&#039;keytab&#039;&#039;&#039; (trousseau de clé) est un fichier où est encodé avec plusieurs algorithmes un ou plusieurs mots de passe.&lt;br /&gt;
&lt;br /&gt;
== Pré-requis ==&lt;br /&gt;
&lt;br /&gt;
* Les clients doivent avoir un nom d&#039;hôte pleinement qualifié et resolvable via un serveur DNS ou via le fichier &amp;lt;path&amp;gt;/etc/hosts&amp;lt;/path&amp;gt;&lt;br /&gt;
* Les heures doivent être synchronisées entre les serveurs (via &amp;lt;app&amp;gt;chronyd&amp;lt;/app&amp;gt; ou &amp;lt;app&amp;gt;ntpd&amp;lt;/app&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Installation du serveur ==&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install krb5-server krb5-workstation &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
{{Admon/tip|Rappel des conventions d&#039;écriture|&lt;br /&gt;
* le nom de &#039;&#039;&#039;domaine&#039;&#039;&#039; est en minuscule (&#039;&#039;didier.tartarefr.eu&#039;&#039;)&lt;br /&gt;
* le nom du &#039;&#039;&#039;royaume&#039;&#039;&#039; est en majuscule (&#039;&#039;DIDIER.TARTAREFR.EU&#039;&#039;)&lt;br /&gt;
}}&lt;br /&gt;
Remplacement du domaine example.com par le notre dans les fichiers de configuration.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sed -i -e &#039;s/EXAMPLE.COM/DIDIER.TARTAREFR.EU/g&#039; -e &#039;s/example.com/didier.tartarefr.eu/g&#039; /etc/krb5.conf&lt;br /&gt;
sed -i -e &#039;s/EXAMPLE.COM/DIDIER.TARTAREFR.EU/g&#039; /var/kerberos/krb5kdc/kdc.conf&lt;br /&gt;
sed -i -e &#039;s/EXAMPLE.COM/DIDIER.TARTAREFR.EU/g&#039; /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/krb5.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
 rdns = false&lt;br /&gt;
 default_realm = DIDIER.TARTAREFR.EU&lt;br /&gt;
 default_ccache_name = KEYRING:persistent:%{uid}&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 DIDIER.TARTAREFR.EU = {&lt;br /&gt;
 kdc = kerberos.didier.tartarefr.eu&lt;br /&gt;
 admin_server = kerberos.didier.tartarefr.eu&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .didier.tartarefr.eu = DIDIER.TARTAREFR.EU&lt;br /&gt;
 didier.tartarefr.eu = DIDIER.TARTAREFR.EU&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/var/kerberos/krb5kdc/kdc.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[kdcdefaults]&lt;br /&gt;
 kdc_ports = 88&lt;br /&gt;
 kdc_tcp_ports = 88&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 DIDIER.TARTAREFR.EU = {&lt;br /&gt;
  master_key_type = aes256-cts&lt;br /&gt;
  #database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  dict_file = /usr/share/dict/words&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal&lt;br /&gt;
  #default_principal_flags = +preauth&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/var/kerberos/krb5kdc/kadm5.acl&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
*/admin@DIDIER.TARTAREFR.EU       *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
Les droits d&#039;administration sont fixés dans le fichier &amp;lt;path&amp;gt;/var/kerberos/krb5kdc/kadm5.acl&amp;lt;/path&amp;gt; et sont sous la forme&lt;br /&gt;
&amp;lt;pre&amp;gt;principal  permissions  [target_principal  [restrictions] ]&amp;lt;/pre&amp;gt;&lt;br /&gt;
exemple&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*/admin@DIDIER.TARTAREFR.EU *&lt;br /&gt;
admin                         *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Chaque champs peut avoir un joker ( astérisque *)&lt;br /&gt;
* &#039;&#039;&#039;principal&#039;&#039;&#039;: Il spécifie tout ou partie d&#039;un nom du compte kerberos&lt;br /&gt;
* &#039;&#039;&#039;permissions&#039;&#039;&#039;: voir le tableau &#039;&#039;&#039;Permissions d&#039;administration&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;target_principal&#039;&#039;&#039;: paramètre optionnel. Il spécifie tout ou partie de domaine Kerberos&lt;br /&gt;
* &#039;&#039;&#039;restrictions&#039;&#039;&#039;: paramètre optionnel. C&#039;est une chaine de caractère représentant les options. Les options possibles sont:&lt;br /&gt;
** {+|-}flagname: l&#039;option est forcée à la valeur indiquée. Les options admissibles ici sont les mêmes que les permissions préfixés du signe + ou - (voir le tableau &#039;&#039;Permissions d&#039;administration&#039;&#039;)&lt;br /&gt;
** clearpolicy: la politique est forcé avec un paramètre vide (pas de politique)&lt;br /&gt;
** policy &#039;&#039;pol&#039;&#039;: la politique est forcé au paramètre &#039;&#039;pol&#039;&#039;&lt;br /&gt;
** -{expire, pwexpire, maxlife, maxrenewlife} &#039;&#039;time&#039;&#039;: l&#039;option est forcée à la valeur indiquée.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Permissions d&#039;administration&lt;br /&gt;
! Permission&lt;br /&gt;
! Commentaire&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;a&#039;&#039;&#039;&lt;br /&gt;
| [Dis]allows the addition of principals or policies&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;c&#039;&#039;&#039;&lt;br /&gt;
| [Dis]allows the changing of passwords for principals&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;d&#039;&#039;&#039;&lt;br /&gt;
| [Dis]allows the deletion of principals or policies&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;i&#039;&#039;&#039;&lt;br /&gt;
| [Dis]allows inquiries about principals or policies&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;l&#039;&#039;&#039;&lt;br /&gt;
| [Dis]allows the listing of principals or policies&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;m&#039;&#039;&#039;&lt;br /&gt;
| [Dis]allows the modification of principals or policies&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;p&#039;&#039;&#039;&lt;br /&gt;
| [Dis]allows the propagation of the principal database (used in Incremental database propagation)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;s&#039;&#039;&#039;&lt;br /&gt;
| [Dis]allows the explicit setting of the key for a principal&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;x&#039;&#039;&#039;&lt;br /&gt;
| Short for admcil. All privileges&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;*&#039;&#039;&#039;&lt;br /&gt;
| Same as x.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
On créer la base de données. Cette étape peut être très longue s&#039;il n&#039;y a pas assez d&#039;entropie. Pour s&#039;assurer qu&#039;il y en ai assez, on peut lancer la commande @find / 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1@ dans un autre shell afin d&#039;en générer. A la fin, la commande demande la futur mot de passe de la base (xk0un7mysx)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On ouvre le firewall pour kerberos (port 88)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
firewall-cmd --permanent --add-service=kerberos&lt;br /&gt;
firewall-cmd --reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On démarre les services&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl start krb5kdc&lt;br /&gt;
systemctl start kadmin&lt;br /&gt;
systemctl enable kadmin&lt;br /&gt;
systemctl enable krb5kdc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tests ===&lt;br /&gt;
On va lister les principals déjà disponibles&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
Authenticating as principal root/admin@DIDIER.TARTAREFR.EU with password.&lt;br /&gt;
kadmin.local: listprincs&lt;br /&gt;
K/M@DIDIER.TARTAREFR.EU&lt;br /&gt;
kadmin/admin@DIDIER.TARTAREFR.EU&lt;br /&gt;
kadmin/changepw@DIDIER.TARTAREFR.EU&lt;br /&gt;
kadmin/kerberos.didier.tartarefr.eu@DIDIER.TARTAREFR.EU&lt;br /&gt;
krbtgt/DIDIER.TARTAREFR.EU@DIDIER.TARTAREFR.EU&lt;br /&gt;
kadmin.local:  exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis ajouter un principal pour l&#039;utilisateur didier&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
kadmin.local: ank didier&lt;br /&gt;
WARNING: no policy specified for didier@DIDIER.TARTAREFR.EU; defaulting to no policy&lt;br /&gt;
Enter password for principal &amp;quot;didier@DIDIER.TARTAREFR.EU&amp;quot;: &lt;br /&gt;
Re-enter password for principal &amp;quot;didier@DIDIER.TARTAREFR.EU&amp;quot;: &lt;br /&gt;
Principal &amp;quot;didier@DIDIER.TARTAREFR.EU&amp;quot; created.&lt;br /&gt;
kadmin.local:  exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On vérifie que l&#039;utilisateur didier peut acquérir un jeton kerberos. Si la commande ne renvoie rien, c&#039;est que ça s&#039;est bien passé.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kinit didier&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On liste les jetons distribués&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
Ticket cache: KEYRING:persistent:0:0&lt;br /&gt;
Default principal: didier@DIDIER.TARTAREFR.EU&lt;br /&gt;
&lt;br /&gt;
Valid starting       Expires              Service principal&lt;br /&gt;
25/02/2015 10:47:09  26/02/2015 10:47:06  krbtgt/DIDIER.TARTAREFR.EU@DIDIER.TARTAREFR.EU&lt;br /&gt;
        renew until 25/02/2015 10:47:09&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On vérifie que l&#039;utilisateur didier ne peut que changer son mot de passe (politique par défaut)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kadmin -p didier&lt;br /&gt;
Authenticating as principal didier with password.&lt;br /&gt;
Password for didier@DIDIER.TARTAREFR.EU: &lt;br /&gt;
kadmin:  listprincs&lt;br /&gt;
get_principals: Operation requires ``list&#039;&#039; privilege while retrieving list.&lt;br /&gt;
kadmin:  cpw didier&lt;br /&gt;
Enter password for principal &amp;quot;didier@DIDIER.TARTAREFR.EU&amp;quot;: &lt;br /&gt;
Re-enter password for principal &amp;quot;didier@DIDIER.TARTAREFR.EU&amp;quot;: &lt;br /&gt;
Password for &amp;quot;didier@DIDIER.TARTAREFR.EU&amp;quot; changed.&lt;br /&gt;
kadmin:  exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pour chaque hôte&#039;&#039;&#039; devant être géré par Kerberos&lt;br /&gt;
* on ajoute un principal avec un mot de passe aléatoire&lt;br /&gt;
* on l&#039;exporte dans un keytab local (celui-ci sera copié dans un deuxième temps sur l&#039;hôte concerné)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
Authenticating as principal didier/admin@DIDIER.TARTAREFR.EU with password.&lt;br /&gt;
&lt;br /&gt;
kadmin.local:  ank -randkey host/test.didier.tartarefr.eu@DIDIER.TARTAREFR.EU &lt;br /&gt;
WARNING: no policy specified for host/test.didier.tartarefr.eu@DIDIER.TARTAREFR.EU; defaulting to no policy&lt;br /&gt;
Principal &amp;quot;host/test.didier.tartarefr.eu@DIDIER.TARTAREFR.EU&amp;quot; created.&lt;br /&gt;
&lt;br /&gt;
kadmin.local:  ktadd -k /tmp/krb5.keytab host/test.didier.tartarefr.eu   &lt;br /&gt;
Entry for principal host/test.didier.tartarefr.eu with kvno 3, encryption type aes256-cts-hmac-sha1-96 added to keytab FILE:/tmp/krb5.keytab.&lt;br /&gt;
Entry for principal host/test.didier.tartarefr.eu with kvno 3, encryption type aes128-cts-hmac-sha1-96 added to keytab FILE:/tmp/krb5.keytab.&lt;br /&gt;
Entry for principal host/test.didier.tartarefr.eu with kvno 3, encryption type des3-cbc-sha1 added to keytab FILE:/tmp/krb5.keytab.&lt;br /&gt;
Entry for principal host/test.didier.tartarefr.eu with kvno 3, encryption type arcfour-hmac added to keytab FILE:/tmp/krb5.keytab.&lt;br /&gt;
Entry for principal host/test.didier.tartarefr.eu with kvno 3, encryption type camellia256-cts-cmac added to keytab FILE:/tmp/krb5.keytab.&lt;br /&gt;
Entry for principal host/test.didier.tartarefr.eu with kvno 3, encryption type camellia128-cts-cmac added to keytab FILE:/tmp/krb5.keytab.&lt;br /&gt;
Entry for principal host/test.didier.tartarefr.eu with kvno 3, encryption type des-hmac-sha1 added to keytab FILE:/tmp/krb5.keytab.&lt;br /&gt;
Entry for principal host/test.didier.tartarefr.eu with kvno 3, encryption type des-cbc-md5 added to keytab FILE:/tmp/krb5.keytab.&lt;br /&gt;
&lt;br /&gt;
kadmin.local:  exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On copie ensuite ce keytab local sur le client kerberos (serveur SSH, serveur web, etc...)&lt;br /&gt;
&lt;br /&gt;
== Installation sur les clients ==&lt;br /&gt;
&lt;br /&gt;
On installe les outils kerberos&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install krb5-workstation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On édite (ou on copie le fichier depuis le serveur) /etc/krb5.conf&lt;br /&gt;
&lt;br /&gt;
On ajoute un utilisateur système didier&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
useradd -s /bin/bash -m didier&lt;br /&gt;
passwd didier&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
On vérifie que l&#039;utilisateur didier peut acquérir un jeton kerberos depuis ce client.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kinit didier&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Connexion locale (PAM) ===&lt;br /&gt;
&lt;br /&gt;
Installation du &amp;lt;class&amp;gt;PAM&amp;lt;/class&amp;gt; (Pluggable Authentication Modules) &amp;lt;class&amp;gt;Kerberos&amp;lt;/class&amp;gt; et activation.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install pam_krb5&lt;br /&gt;
authconfig --enablekrb5 --update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Client SSH ===&lt;br /&gt;
&lt;br /&gt;
Comme SSH utilise PAM par défaut, le paquet &amp;lt;package&amp;gt;pam_krb5&amp;lt;/package&amp;gt; doit être [[#Connexion_locale_.28PAM.29|installé et activé]].&lt;br /&gt;
{{Admon/tip|Utilisateurs pouvant se connecter au serveur|Seul les utilisateurs ayant un &#039;&#039;&#039;principal Kerberos&#039;&#039;&#039; et ayant un &#039;&#039;&#039;compte utilisateur sur le serveur SSH&#039;&#039;&#039; peuvent se connecter en SSH avec la méthode &#039;&#039;gssapi-with-mic&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Il est possible de se [[Windows/Kerberos/Client|connecter en GSSAPI depuis un poste Windows]]&lt;br /&gt;
&lt;br /&gt;
==== Sur le serveur Kerberos ====&lt;br /&gt;
&lt;br /&gt;
On créé un principal qui aura accès à tous les serveurs. Il n&#039;y a pas de nom mieux choisi que &#039;&#039;&#039;root&#039;&#039;&#039;.&lt;br /&gt;
# On créé le principal pour root&amp;lt;pre&amp;gt;kadmin.local -q &amp;quot;addprinc -randkey root&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
# On s&#039;assure que le fichier d&#039;export n&#039;existe pas encore&amp;lt;pre&amp;gt;rm -f /tmp/root.keytab&amp;lt;/pre&amp;gt;&lt;br /&gt;
# On exporte ce principal&amp;lt;pre&amp;gt;kadmin.local -q &amp;quot;ktadd -k /tmp/root.keytab root&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
# On copie dans &amp;lt;path&amp;gt;/root&amp;lt;/path&amp;gt; du &#039;&#039;&#039;client&#039;&#039;&#039; l&#039;export du principal root.&lt;br /&gt;
&lt;br /&gt;
Pour chaque serveur SSH devant être géré par kerberos&lt;br /&gt;
# On créé un principal &amp;lt;nowiki&amp;gt;host/&amp;lt;FQDN&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;pre&amp;gt;kadmin.local -q &amp;quot;addprinc -randkey host/server.tartarefr.eu&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
# On s&#039;assure que le fichier d&#039;export n&#039;existe pas encore&amp;lt;pre&amp;gt;rm -f /tmp/krb5.keytab&amp;lt;/pre&amp;gt;&lt;br /&gt;
# On exporte ce principal (et uniquement lui pour des raisons de sécurité)&amp;lt;pre&amp;gt;kadmin.local -q &amp;quot;ktadd -k /tmp/krb5.keytab host/server.tartarefr.eu&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
# On copie ce principal sur le &#039;&#039;&#039;serveur SSH&#039;&#039;&#039;&amp;lt;pre&amp;gt;scp /tmp/krb5.keytab server.tartarefr.eu:/etc/krb5.keytab&amp;lt;/pre&amp;gt;&lt;br /&gt;
# On copie le fichier de configuration Kerberos sur le serveur SSH&amp;lt;pre&amp;gt;scp /etc/krb5.conf server.tartarefr.eu:/etc/krb5.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sur le serveur SSH ====&lt;br /&gt;
* On lui spécifie explicitement le propriétaire/groupe de l&#039;export du principal&amp;lt;pre&amp;gt;chown root:root /etc/krb5.keytab&amp;lt;/pre&amp;gt;&lt;br /&gt;
* On lui spécifie les droits associés&amp;lt;pre&amp;gt;chmod 600 /etc/krb5.keytab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== sur le client SSH ====&lt;br /&gt;
* On copie dans &amp;lt;path&amp;gt;/root&amp;lt;/path&amp;gt; l&#039;export du principal root.&lt;br /&gt;
&lt;br /&gt;
==== Test de connexion ====&lt;br /&gt;
&lt;br /&gt;
Avant de le fixer dans le fichier /etc/ssh/ssh_config, on teste&lt;br /&gt;
# On acquiert un jeton kerberos&amp;lt;pre&amp;gt;kinit -k -t /root/root.keytab root&amp;lt;/pre&amp;gt;&lt;br /&gt;
# On se connecte par ssh en forçant l&#039;option &#039;&#039;GSSAPIAuthentication&#039;&#039;&amp;lt;pre&amp;gt;ssh root@server.tartarefr.eu -o &amp;quot;GSSAPIAuthentication yes&amp;quot; -o &amp;quot;PasswordAuthentication no&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Si la connexion est un succès (sans mot de passe), on vérifie que le fichier &amp;lt;path&amp;gt;/etc/ssh/ssh_config&amp;lt;/path&amp;gt; contient bien&lt;br /&gt;
#* &amp;lt;pre&amp;gt;GSSAPIAuthentication yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
#* &amp;lt;pre&amp;gt;GSSAPIDelegateCredentials yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Debug ====&lt;br /&gt;
&lt;br /&gt;
# Vérification de la synchronisation de l&#039;heure&amp;lt;pre&amp;gt;date &amp;amp;&amp;amp; hwclock&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Vérification des paramètres du fichier &amp;lt;path&amp;gt;/etc/ssh/sshd_config&amp;lt;/path&amp;gt;&lt;br /&gt;
#* &amp;lt;pre&amp;gt;GSSAPIAuthentication yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
#* &amp;lt;pre&amp;gt;GSSAPIDelegateCredentials yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Vérification DNS&lt;br /&gt;
#* S&#039;assurer que la résolution fonctionne correctement dans les deux sens&amp;lt;pre&amp;gt;getent hosts $(hostname) | awk &#039;{print $1; exit}&#039; | xargs getent hosts | awk &#039;{print $2}&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
#* Vérification du fichier &amp;lt;path&amp;gt;/etc/hosts&amp;lt;/path&amp;gt; sur le serveur SSH.&amp;lt;br&amp;gt;&#039;&#039;&#039;Il ne doit en aucun cas résoudre sur localhost&#039;&#039;&#039;.&amp;lt;br&amp;gt;Le premier nom d&#039;hôte qui suit l&#039;adresse IP (LAN/WAN) doit être le nom d&#039;hôte pleinement qualifié, suivi du nom d&#039;hôte simple.&amp;lt;br&amp;gt;Les alias (CNAME) ainsi que les noms d&#039;hôte virtuels d&#039;Apache peuvent être placé après.&lt;br /&gt;
# Vérification des fichiers&lt;br /&gt;
#* Vérification du fichier &amp;lt;path&amp;gt;/etc/krb5.conf&amp;lt;/path&amp;gt; sur le serveur SSH&lt;br /&gt;
#** Le contenu attendu (c.a.d identique à celui du serveur Kerberos)&lt;br /&gt;
#** Le bon propriétaire et groupe&amp;lt;pre&amp;gt;chown root:root /etc/krb5.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
#** Les bons droits&amp;lt;pre&amp;gt;chmod 644 /etc/krb5.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
#* Vérification du fichier &amp;lt;path&amp;gt;/etc/krb5.keytab&amp;lt;/path&amp;gt; sur le serveur SSH&lt;br /&gt;
#** Le contenu attendu, avec le nom d&#039;hôte pleinement qualifié correspondant (préfixé par &#039;&#039;host/&#039;&#039;) et le bon lvno (le numéro d&#039;export qui est incrémenté à chaque fois)&amp;lt;pre&amp;gt;klist -k /etc/krb5.keytab&amp;lt;/pre&amp;gt;&lt;br /&gt;
#** Le bon propriétaire et groupe&amp;lt;pre&amp;gt;chown root:root /etc/krb5.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
#** Les bons droits&amp;lt;pre&amp;gt;chmod 600 /etc/krb5.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Authentification Apache ===&lt;br /&gt;
&lt;br /&gt;
* Installation d&#039;apache, du module ssl et du module d&#039;authentification kerberos pour apache&amp;lt;pre&amp;gt;yum install httpd mod_ssl mod_auth_kerb&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Ajout d&#039;un principal pour apache (mot de passe aléatoire)&amp;lt;pre&amp;gt;kadmin.local -q &amp;quot;addprinc -randkey http/didier.tartarefr.eu&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Export du principal dans un keytab&amp;lt;pre&amp;gt;kadmin.local -q &amp;quot;ktadd -k /etc/httpd/conf.d/http.keytab http/didier.tartarefr.eu&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Modification du propriétaire du keytab car apache doit pouvoir lire ce fichier&amp;lt;pre&amp;gt;chown apache /etc/httpd/conf.d/http.keytab&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Vérification de la bonne configuration en obtenant un ticket kerberos manuellement&amp;lt;pre&amp;gt;kinit -k -t /etc/httpd/conf.d/http.keytab http/didier.tartarefr.eu&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Destruction du ticket avant de redémarrer le service &amp;lt;app&amp;gt;httpd&amp;lt;/app&amp;gt;&amp;lt;pre&amp;gt;kdestroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple de configuration apache&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Directory /var/www/html/kerb&amp;gt;&lt;br /&gt;
    SSLRequireSSL&lt;br /&gt;
    AuthType Kerberos&lt;br /&gt;
    AuthName &amp;quot;Kerberos Authentication&amp;quot;&lt;br /&gt;
    KrbAuthRealms DIDIER.TARTAREFR.EU&lt;br /&gt;
    Krb5Keytab /etc/httpd/conf.d/http.keytab&lt;br /&gt;
    KrbServiceName http/didier.tartarefr.eu&lt;br /&gt;
    KrbMethodNegotiate Off&lt;br /&gt;
    KrbSaveCredentials Off&lt;br /&gt;
    KrbVerifyKDC Off&lt;br /&gt;
    Require valid-user&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Récapitulatif des outils d&#039;utilisation et d&#039;administration ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;kinit&#039;&#039;&#039;: Acquiert un nouveau jeton kerberos pour l&#039;utilisateur passé en argument.&lt;br /&gt;
* &#039;&#039;&#039;kdestroy&#039;&#039;&#039;: Efface le jeton de l&#039;utilisateur actif (le nom passé en argument à kinit)&lt;br /&gt;
* &#039;&#039;&#039;klist&#039;&#039;&#039;: Affiche la liste des jetons pour l&#039;utilisateur actif&lt;br /&gt;
* &#039;&#039;&#039;kadmin&#039;&#039;&#039;: Commande d&#039;administration de kerberos.&lt;br /&gt;
&lt;br /&gt;
== Sauvegarde / Restauration ==&lt;br /&gt;
&lt;br /&gt;
L&#039;utilitaire &amp;lt;app&amp;gt;kdb5_util&amp;lt;/app&amp;gt; est utilisé pour la sauvegarde et la restauration: &amp;lt;path&amp;gt;/usr/sbin/kdb5_util&amp;lt;/path&amp;gt;&lt;br /&gt;
* Sauvegarde dans le fichier krbsave &amp;lt;pre&amp;gt;kdb5_util dump krbsave&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Restauration à partir du fichier krbsave &amp;lt;pre&amp;gt;kdb5_util load krbsave&amp;lt;/pre&amp;gt;On peut rajouter l&#039;option &amp;lt;code&amp;gt;--update&amp;lt;/code&amp;gt; pour mettre à jour uniquement une base existante à partir du la sauvegarde, au lieu de la vider.&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
* [http://fr.wikipedia.org/wiki/Kerberos_%28protocole%29 Page Wikipedia expliquant le protocole Kerberos]&lt;br /&gt;
* [https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Managing_Smart_Cards/Using_Kerberos.html Documentation RedHat de l&#039;installation du serveur]&lt;br /&gt;
* [http://docstore.mik.ua/orelly/networking_2ndEd/ssh/ch11_04.htm Configuration du serveur SSH pour utiliser Kerberos]&lt;br /&gt;
* [http://unix.stackexchange.com/questions/90383/ssh-authentication-using-gssapi-keyex-or-gssapi-with-mic-publickey-not-permitte Debugging SSH authentication using gssapi-keyex or gssapi-with-mic]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=MediaWiki:Sidebar&amp;diff=167</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=MediaWiki:Sidebar&amp;diff=167"/>
		<updated>2017-11-10T15:12:41Z</updated>

		<summary type="html">&lt;p&gt;Didier : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** Tuto/Edit|Édition&lt;br /&gt;
** Datasheet|Datasheet&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help&lt;br /&gt;
* Sysadmin&lt;br /&gt;
** Services|Services&lt;br /&gt;
** Security|Securité&lt;br /&gt;
** Hardware|Hardware&lt;br /&gt;
* Linux&lt;br /&gt;
** distributions|Linux Distributions&lt;br /&gt;
** RPM|RPM&lt;br /&gt;
* Programmation&lt;br /&gt;
** C_C++|C/C++&lt;br /&gt;
** Perl|Perl&lt;br /&gt;
** Python|Python&lt;br /&gt;
** Povray|Povray&lt;br /&gt;
** Markdown|Markdown&lt;br /&gt;
** Charset/Charset&lt;br /&gt;
* Others OS&lt;br /&gt;
** Android|Android&lt;br /&gt;
** Pfsense|pfSense&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;br /&gt;
* Blogs&lt;br /&gt;
** [https://www.tartarefr.eu TartareFR]T&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=MediaWiki:Sidebar&amp;diff=166</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=MediaWiki:Sidebar&amp;diff=166"/>
		<updated>2017-11-10T15:11:01Z</updated>

		<summary type="html">&lt;p&gt;Didier : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** Tuto/Edit|Édition&lt;br /&gt;
** Datasheet|Datasheet&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help&lt;br /&gt;
* Sysadmin&lt;br /&gt;
** Services|Services&lt;br /&gt;
** Security|Securité&lt;br /&gt;
** Hardware|Hardware&lt;br /&gt;
* Linux&lt;br /&gt;
** distributions|Linux Distributions&lt;br /&gt;
** RPM|RPM&lt;br /&gt;
* Programmation&lt;br /&gt;
** C_C++|C/C++&lt;br /&gt;
** Perl|Perl&lt;br /&gt;
** Python|Python&lt;br /&gt;
** Povray|Povray&lt;br /&gt;
** Markdown|Markdown&lt;br /&gt;
** Charset/Charset&lt;br /&gt;
* Others OS&lt;br /&gt;
** Android|Android&lt;br /&gt;
** Pfsense|pfSense&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;br /&gt;
* Blogs&lt;br /&gt;
** MyBlog|Blog TartareFR&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=MediaWiki:Sidebar&amp;diff=165</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=MediaWiki:Sidebar&amp;diff=165"/>
		<updated>2017-11-10T15:10:21Z</updated>

		<summary type="html">&lt;p&gt;Didier : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** Tuto/Edit|Édition&lt;br /&gt;
** Datasheet|Datasheet&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help&lt;br /&gt;
* Sysadmin&lt;br /&gt;
** Services|Services&lt;br /&gt;
** Security|Securité&lt;br /&gt;
** Hardware|Hardware&lt;br /&gt;
* Linux&lt;br /&gt;
** distributions|Linux Distributions&lt;br /&gt;
** RPM|RPM&lt;br /&gt;
* Programmation&lt;br /&gt;
** C_C++|C/C++&lt;br /&gt;
** Perl|Perl&lt;br /&gt;
** Python|Python&lt;br /&gt;
** Povray|Povray&lt;br /&gt;
** Markdown|Markdown&lt;br /&gt;
** Charset/Charset&lt;br /&gt;
* Others OS&lt;br /&gt;
** Android|Android&lt;br /&gt;
** Pfsense|pfSense&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;br /&gt;
* Blog&lt;br /&gt;
** Blog TartareFR&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Services&amp;diff=164</id>
		<title>Services</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Services&amp;diff=164"/>
		<updated>2017-05-06T14:35:21Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « {{Admon/button|width=200px|title=Base de données}} {{Admon/button|width=200px|title=DNS}} {{Admon/button|width=200px|title=voIP}} {{Admon/button|width=200px|title=Mail}}... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Admon/button|width=200px|title=Base de données}}&lt;br /&gt;
{{Admon/button|width=200px|title=DNS}}&lt;br /&gt;
{{Admon/button|width=200px|title=voIP}}&lt;br /&gt;
{{Admon/button|width=200px|title=Mail}}&lt;br /&gt;
{{Admon/button|width=200px|title=Déploiement}}&lt;br /&gt;
{{Admon/button|width=200px|title=Virtualisation}}&lt;br /&gt;
{{Admon/button|width=200px|title=Web}}&lt;br /&gt;
{{Admon/button|width=200px|title=Cluster}}&lt;br /&gt;
{{Admon/button|width=200px|title=Monitoring}}&lt;br /&gt;
{{Admon/button|width=200px|title=Sécurité}}&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Mod%C3%A8le:Admon/button&amp;diff=163</id>
		<title>Modèle:Admon/button</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Mod%C3%A8le:Admon/button&amp;diff=163"/>
		<updated>2017-05-06T14:28:19Z</updated>

		<summary type="html">&lt;p&gt;Didier : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span class=&amp;quot;effect3d&amp;quot; style=&amp;quot;display:inline-block;text-align:center;background-color:#f6f6f6;padding:5px 8px;margin:2px;border:#A7D7F9 2px solid;border-radius:6px;width:{{{width|120px}}};font-weight:bold;font-size:16px;line-height:{{{iconsize|16}}}px;padding:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;position:relative;top:-2px;&amp;quot;&amp;gt;{{#if:{{{icon|}}}|[[Fichier:{{{icon}}}|link=|alt=]]|[[Fichier:IconLinux32.png|link=|alt=]]}}&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;span&amp;gt;[[{{{link|Accueil}}}|{{{title|Title}}}]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/span&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Services/FTP/SFTP&amp;diff=162</id>
		<title>Services/FTP/SFTP</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Services/FTP/SFTP&amp;diff=162"/>
		<updated>2017-05-06T09:49:06Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « Pour donner un accès en téléversement à un tiers, la solution la plus logique serait d&amp;#039;utiliser ssh et de limiter ce tiers au serveur sFTP. Bien que ce ne soit obligat... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pour donner un accès en téléversement à un tiers, la solution la plus logique serait d&#039;utiliser ssh et de limiter ce tiers au serveur sFTP. Bien que ce ne soit obligatoire, celui-ci serait emprisonné dans son répertoire utilisateur (chroot)&lt;br /&gt;
&lt;br /&gt;
== Création du groupe et des utilisateurs ==&lt;br /&gt;
&lt;br /&gt;
Création du groupe &#039;&#039;sftponly&#039;&#039; qui limiterait les utilisateurs à l&#039;utilisation de sFTP (accès SSH interdit)&lt;br /&gt;
 groupadd sftponly&lt;br /&gt;
Création d&#039;un utilisateur dont l&#039;accès serait uniquement via sFTP (pas d&#039;ouverture de session possible, en local ou distant) et affectation d&#039;un mot de passe.&lt;br /&gt;
 useradd -m -s /bin/false -c &#039;sFTP User Only&#039; sftptest&lt;br /&gt;
 usermod -aG sftponly  sftptest&lt;br /&gt;
 passwd sftptest&lt;br /&gt;
&lt;br /&gt;
== Modification de la configuration du démon SSH ==&lt;br /&gt;
&lt;br /&gt;
Dans le fichier &amp;lt;path&amp;gt;/etc/ssh/sshd_config&amp;lt;/path&amp;gt;&lt;br /&gt;
Modifier le programme gérant le sFTP afin d&#039;utiliser le wrapper interne à ssh pour lancer le programme sFTP. En effet le binaire ne sera pas accessible depuis le chroot.&lt;br /&gt;
 Subsystem       sftp    internal-sftp&lt;br /&gt;
&lt;br /&gt;
Ajouter à la fin du fichier, la configuration des utilisateurs ayant pour groupe &#039;&#039;sftponly&#039;&#039; afin de les emprisonner dans leur répertoire personnel et de leur permettre l&#039;accès uniquement au service sFTP.&lt;br /&gt;
&lt;br /&gt;
 Match Group sftponly&lt;br /&gt;
    ChrootDirectory %h&lt;br /&gt;
    ForceCommand internal-sftp&lt;br /&gt;
    X11Forwarding no&lt;br /&gt;
    AllowTcpForwarding no&lt;br /&gt;
&lt;br /&gt;
Le démon SSH (sshd) doit être rafraichi&lt;br /&gt;
 service sshd reload&lt;br /&gt;
&lt;br /&gt;
== Ajuster les droits des répertoires utilisateurs créés ==&lt;br /&gt;
&lt;br /&gt;
Le répertoire personnel des utilisateurs sFTP doit avoir pour propriétaire et groupe &#039;&#039;&#039;root&#039;&#039;&#039; et pour permission &#039;&#039;&#039;755&#039;&#039;&#039; (root:root rwxr-xr-x). Afin de pouvoir téléverser, il faut créer un répertoire ayant pour propriétaire l&#039;utilisateur (sftptest ici). en effet l&#039;utilisateur ne pourra pas téléverser à sa racine (son répertoire utilisateur).&lt;br /&gt;
&lt;br /&gt;
 chown root:sftponly /home/sftptest&lt;br /&gt;
 chmod 755 /home/sftptest&lt;br /&gt;
 mkdir /home/sftptest/upload&lt;br /&gt;
 chown sftptest: sftponly /home/sftptest/upload&lt;br /&gt;
 chmod 755 /home/sftptest/upload&lt;br /&gt;
&lt;br /&gt;
== SELinux ==&lt;br /&gt;
&lt;br /&gt;
Par défaut, pour SELinux, le chroot sFTP est en lecture seule. Afin d&#039;autoriser le téléversement, il faut qu&#039;il soit en lecture/écriture. SELInux dispose d&#039;un booléen pour ça.&lt;br /&gt;
&lt;br /&gt;
 setsebool -P ssh_chroot_rw_homedirs on&lt;br /&gt;
&lt;br /&gt;
== Test ==&lt;br /&gt;
&lt;br /&gt;
Afin de ne pas perturber le démon SSH en cours d&#039;utilisation, on peut lancer une seconde instance (sur un port différent) en mode debug&lt;br /&gt;
 /usr/sbin/sshd -p 2222 -d&lt;br /&gt;
&lt;br /&gt;
Depuis un autre poste, on test la connexion ssh (qui ne doit pas fonctionner) et le téléversement d&#039;un fichier à la racine (qui doit rapporter une erreur) et dans le répertoire upload (seul ce dernier doit fonctionner).&lt;br /&gt;
 ssh -p 2222 sftptest@monserver&lt;br /&gt;
 sftptest@monserver&#039;s password:&lt;br /&gt;
 This service allows sftp connections only.&lt;br /&gt;
 Connection to monserver closed.&lt;br /&gt;
&lt;br /&gt;
 sftp -p 2222 sftptest@monserver&lt;br /&gt;
 sftptest@monserver&#039;s password:&lt;br /&gt;
 Connected to monserver.&lt;br /&gt;
 sftp&amp;gt; ls&lt;br /&gt;
 upload&lt;br /&gt;
 sftp&amp;gt; put test.txt&lt;br /&gt;
 Uploading test.txt to /test.txt&lt;br /&gt;
 remote open(&amp;quot;/test.txt&amp;quot;): Permission denied&lt;br /&gt;
 sftp&amp;gt; cd upload&lt;br /&gt;
 sftp&amp;gt; put test.txt&lt;br /&gt;
 Uploading test.txt to /upload/test.txt&lt;br /&gt;
 test.txt                    100%    5     0.0KB/s   00:00&lt;br /&gt;
 sftp&amp;gt; exit&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Services/Kerberos/Install&amp;diff=161</id>
		<title>Services/Kerberos/Install</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Services/Kerberos/Install&amp;diff=161"/>
		<updated>2017-05-06T09:45:19Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « == Introduction ==  Le protocole Kerberos est issu du projet « Athena » du MIT, mené par Miller et Neuman. La version 5 du protocole Kerberos a été normalisée par l&amp;#039;... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
&lt;br /&gt;
Le protocole Kerberos est issu du projet « Athena » du MIT, mené par Miller et Neuman. La version 5 du protocole Kerberos a été normalisée par l&#039;IETF dans les RFC 1510 (septembre 1993) et 1964 (juin 1996). Le nom « Kerberos » provient provient de la mythologie grecque et correspond au nom du chien (en français « Cerbère ») protégeant l&#039;accès aux portes d’Hadès.&lt;br /&gt;
&lt;br /&gt;
L&#039;objet de Kerberos est la mise en place de serveurs d&#039;authentification (&#039;&#039;&#039;AS&#039;&#039;&#039; pour &#039;&#039;&#039;Authentication Server&#039;&#039;&#039;), permettant d&#039;identifier des utilisateurs distants, et des serveurs de délivrement de tickets de service (&#039;&#039;&#039;TGS&#039;&#039;&#039;, pour &#039;&#039;&#039;Ticket Granting System&#039;&#039;&#039;), permettant de les autoriser à accéder à des services réseau. Les clients peuvent aussi bien être des utilisateurs que des machines. La plupart du temps, les deux types de services sont regroupés sur un même serveur, appelé Centre de Distribution des Clés (ou &#039;&#039;&#039;KDC&#039;&#039;&#039;, pour &#039;&#039;&#039;Key Distribution Center&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
== Fonctionnement ==&lt;br /&gt;
&lt;br /&gt;
Le protocole Kerberos repose sur un système de cryptographie à base de clés secrètes (clés symétriques ou clés privées), avec l&#039;algorithme DES. Kerberos partage avec chaque client du réseau une clé secrète faisant office de preuve d&#039;identité.&lt;br /&gt;
&lt;br /&gt;
Le principe de fonctionnement de Kerberos repose sur la notion de « tickets »  :&lt;br /&gt;
&lt;br /&gt;
[[Fichier:KerberosSimple.svg|800px]]&lt;br /&gt;
# Afin d&#039;obtenir l&#039;autorisation d&#039;accès à un service, un utilisateur distant doit envoyer son identifiant au serveur d&#039;authentification.&lt;br /&gt;
# Le serveur d&#039;authentification vérifie que l&#039;identifiant existe et envoie un ticket initial au client distant, chiffré avec la clé associée au client. Le ticket initial contient :&lt;br /&gt;
#* un clé de session, faisant office de mot de passe temporaire pour chiffrer les communications suivantes ;&lt;br /&gt;
#* un ticket d&#039;accès au service de délivrement de ticket. &lt;br /&gt;
# Le client distant déchiffre le ticket initial avec sa clé et obtient ainsi un ticket et une clé de session. &lt;br /&gt;
# Grâce à son ticket et sa clé de session, le client distant peut envoyer une requête chiffrée, afin de demander l&#039;accès à un service.&lt;br /&gt;
&lt;br /&gt;
Par ailleurs, Kerberos propose un système d&#039;authentification mutuelle permettant au client et au serveur de s&#039;identifier réciproquement.&lt;br /&gt;
&lt;br /&gt;
L&#039;authentification proposée par le serveur Kerberos a une durée limitée dans le temps, ce qui permet d&#039;éviter à un pirate de continuer d&#039;avoir accès aux ressources : on parle ainsi d&#039;anti re-jeu. &lt;br /&gt;
&lt;br /&gt;
* Les comptes sont appelé &#039;&#039;&#039;principal&#039;&#039;&#039; pour kerberos. Ce peut être un utilisateur (ex: &#039;&#039;didier@TARTAREFR.EU&#039;&#039;), un hôte (ex: &#039;&#039;kerberos.tartarefr.eu@TARTAREFR.EU&#039;&#039;), un service (ex: &#039;&#039;http/kerberos.tartarefr.eu@TARTAREFR.EU&#039;&#039;), etc...&lt;br /&gt;
* Un &#039;&#039;&#039;keytab&#039;&#039;&#039; (trousseau de clé) est un fichier où est encodé avec plusieurs algorithmes un ou plusieurs mots de passe.&lt;br /&gt;
&lt;br /&gt;
== Pré-requis ==&lt;br /&gt;
&lt;br /&gt;
* Les clients doivent avoir un nom d&#039;hôte pleinement qualifié et resolvable via un serveur DNS ou via le fichier &amp;lt;path&amp;gt;/etc/hosts&amp;lt;/path&amp;gt;&lt;br /&gt;
* Les heures doivent être synchronisées entre les serveurs (via &amp;lt;app&amp;gt;chronyd&amp;lt;/app&amp;gt; ou &amp;lt;app&amp;gt;ntpd&amp;lt;/app&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Installation du serveur ==&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install krb5-server krb5-workstation &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
{{Admon/tip|Rappel des conventions d&#039;écriture|&lt;br /&gt;
* le nom de &#039;&#039;&#039;domaine&#039;&#039;&#039; est en minuscule (&#039;&#039;didier.tartarefr.eu&#039;&#039;)&lt;br /&gt;
* le nom du &#039;&#039;&#039;royaume&#039;&#039;&#039; est en majuscule (&#039;&#039;DIDIER.TARTAREFR.EU&#039;&#039;)&lt;br /&gt;
}}&lt;br /&gt;
Remplacement du domaine example.com par le notre dans les fichiers de configuration.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sed -i -e &#039;s/EXAMPLE.COM/DIDIER.TARTAREFR.EU/g&#039; -e &#039;s/example.com/didier.tartarefr.eu/g&#039; /etc/krb5.conf&lt;br /&gt;
sed -i -e &#039;s/EXAMPLE.COM/DIDIER.TARTAREFR.EU/g&#039; /var/kerberos/krb5kdc/kdc.conf&lt;br /&gt;
sed -i -e &#039;s/EXAMPLE.COM/DIDIER.TARTAREFR.EU/g&#039; /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/krb5.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[logging]&lt;br /&gt;
 default = FILE:/var/log/krb5libs.log&lt;br /&gt;
 kdc = FILE:/var/log/krb5kdc.log&lt;br /&gt;
 admin_server = FILE:/var/log/kadmind.log&lt;br /&gt;
&lt;br /&gt;
[libdefaults]&lt;br /&gt;
 dns_lookup_realm = false&lt;br /&gt;
 ticket_lifetime = 24h&lt;br /&gt;
 renew_lifetime = 7d&lt;br /&gt;
 forwardable = true&lt;br /&gt;
 rdns = false&lt;br /&gt;
 default_realm = DIDIER.TARTAREFR.EU&lt;br /&gt;
 default_ccache_name = KEYRING:persistent:%{uid}&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 DIDIER.TARTAREFR.EU = {&lt;br /&gt;
 kdc = kerberos.didier.tartarefr.eu&lt;br /&gt;
 admin_server = kerberos.didier.tartarefr.eu&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[domain_realm]&lt;br /&gt;
 .didier.tartarefr.eu = DIDIER.TARTAREFR.EU&lt;br /&gt;
 didier.tartarefr.eu = DIDIER.TARTAREFR.EU&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/var/kerberos/krb5kdc/kdc.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[kdcdefaults]&lt;br /&gt;
 kdc_ports = 88&lt;br /&gt;
 kdc_tcp_ports = 88&lt;br /&gt;
&lt;br /&gt;
[realms]&lt;br /&gt;
 DIDIER.TARTAREFR.EU = {&lt;br /&gt;
  master_key_type = aes256-cts&lt;br /&gt;
  #database_name = /var/kerberos/krb5kdc/principal&lt;br /&gt;
  acl_file = /var/kerberos/krb5kdc/kadm5.acl&lt;br /&gt;
  dict_file = /usr/share/dict/words&lt;br /&gt;
  admin_keytab = /var/kerberos/krb5kdc/kadm5.keytab&lt;br /&gt;
  supported_enctypes = aes256-cts:normal aes128-cts:normal des3-hmac-sha1:normal arcfour-hmac:normal camellia256-cts:normal camellia128-cts:normal des-hmac-sha1:normal des-cbc-md5:normal des-cbc-crc:normal&lt;br /&gt;
  #default_principal_flags = +preauth&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/var/kerberos/krb5kdc/kadm5.acl&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
*/admin@DIDIER.TARTAREFR.EU       *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
Les droits d&#039;administration sont fixés dans le fichier &amp;lt;path&amp;gt;/var/kerberos/krb5kdc/kadm5.acl&amp;lt;/path&amp;gt; et sont sous la forme&lt;br /&gt;
&amp;lt;pre&amp;gt;principal  permissions  [target_principal  [restrictions] ]&amp;lt;/pre&amp;gt;&lt;br /&gt;
exemple&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
*/admin@DIDIER.TARTAREFR.EU *&lt;br /&gt;
admin                         *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Chaque champs peut avoir un joker ( astérisque *)&lt;br /&gt;
* &#039;&#039;&#039;principal&#039;&#039;&#039;: Il spécifie tout ou partie d&#039;un nom du compte kerberos&lt;br /&gt;
* &#039;&#039;&#039;permissions&#039;&#039;&#039;: voir le tableau &#039;&#039;&#039;Permissions d&#039;administration&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;target_principal&#039;&#039;&#039;: paramètre optionnel. Il spécifie tout ou partie de domaine Kerberos&lt;br /&gt;
* &#039;&#039;&#039;restrictions&#039;&#039;&#039;: paramètre optionnel. C&#039;est une chaine de caractère représentant les options. Les options possibles sont:&lt;br /&gt;
** {+|-}flagname: l&#039;option est forcée à la valeur indiquée. Les options admissibles ici sont les mêmes que les permissions préfixés du signe + ou - (voir le tableau &#039;&#039;Permissions d&#039;administration&#039;&#039;)&lt;br /&gt;
** clearpolicy: la politique est forcé avec un paramètre vide (pas de politique)&lt;br /&gt;
** policy &#039;&#039;pol&#039;&#039;: la politique est forcé au paramètre &#039;&#039;pol&#039;&#039;&lt;br /&gt;
** -{expire, pwexpire, maxlife, maxrenewlife} &#039;&#039;time&#039;&#039;: l&#039;option est forcée à la valeur indiquée.&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Permissions d&#039;administration&lt;br /&gt;
! Permission&lt;br /&gt;
! Commentaire&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;a&#039;&#039;&#039;&lt;br /&gt;
| [Dis]allows the addition of principals or policies&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;c&#039;&#039;&#039;&lt;br /&gt;
| [Dis]allows the changing of passwords for principals&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;d&#039;&#039;&#039;&lt;br /&gt;
| [Dis]allows the deletion of principals or policies&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;i&#039;&#039;&#039;&lt;br /&gt;
| [Dis]allows inquiries about principals or policies&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;l&#039;&#039;&#039;&lt;br /&gt;
| [Dis]allows the listing of principals or policies&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;m&#039;&#039;&#039;&lt;br /&gt;
| [Dis]allows the modification of principals or policies&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;p&#039;&#039;&#039;&lt;br /&gt;
| [Dis]allows the propagation of the principal database (used in Incremental database propagation)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;s&#039;&#039;&#039;&lt;br /&gt;
| [Dis]allows the explicit setting of the key for a principal&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;x&#039;&#039;&#039;&lt;br /&gt;
| Short for admcil. All privileges&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;*&#039;&#039;&#039;&lt;br /&gt;
| Same as x.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Initialisation ===&lt;br /&gt;
On créer la base de données. Cette étape peut être très longue s&#039;il n&#039;y a pas assez d&#039;entropie. Pour s&#039;assurer qu&#039;il y en ai assez, on peut lancer la commande @find / 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1@ dans un autre shell afin d&#039;en générer. A la fin, la commande demande la futur mot de passe de la base (xk0un7mysx)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kdb5_util create -s&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On ouvre le firewall pour kerberos (port 88)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
firewall-cmd --permanent --add-service=kerberos&lt;br /&gt;
firewall-cmd --reload&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On démarre les services&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl start krb5kdc&lt;br /&gt;
systemctl start kadmin&lt;br /&gt;
systemctl enable kadmin&lt;br /&gt;
systemctl enable krb5kdc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tests ===&lt;br /&gt;
On va lister les principals déjà disponibles&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
Authenticating as principal root/admin@DIDIER.TARTAREFR.EU with password.&lt;br /&gt;
kadmin.local: listprincs&lt;br /&gt;
K/M@DIDIER.TARTAREFR.EU&lt;br /&gt;
kadmin/admin@DIDIER.TARTAREFR.EU&lt;br /&gt;
kadmin/changepw@DIDIER.TARTAREFR.EU&lt;br /&gt;
kadmin/kerberos.didier.tartarefr.eu@DIDIER.TARTAREFR.EU&lt;br /&gt;
krbtgt/DIDIER.TARTAREFR.EU@DIDIER.TARTAREFR.EU&lt;br /&gt;
kadmin.local:  exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis ajouter un principal pour l&#039;utilisateur didier&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
kadmin.local: ank didier&lt;br /&gt;
WARNING: no policy specified for didier@DIDIER.TARTAREFR.EU; defaulting to no policy&lt;br /&gt;
Enter password for principal &amp;quot;didier@DIDIER.TARTAREFR.EU&amp;quot;: &lt;br /&gt;
Re-enter password for principal &amp;quot;didier@DIDIER.TARTAREFR.EU&amp;quot;: &lt;br /&gt;
Principal &amp;quot;didier@DIDIER.TARTAREFR.EU&amp;quot; created.&lt;br /&gt;
kadmin.local:  exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On vérifie que l&#039;utilisateur didier peut acquérir un jeton kerberos. Si la commande ne renvoie rien, c&#039;est que ça s&#039;est bien passé.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kinit didier&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On liste les jetons distribués&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
klist&lt;br /&gt;
Ticket cache: KEYRING:persistent:0:0&lt;br /&gt;
Default principal: didier@DIDIER.TARTAREFR.EU&lt;br /&gt;
&lt;br /&gt;
Valid starting       Expires              Service principal&lt;br /&gt;
25/02/2015 10:47:09  26/02/2015 10:47:06  krbtgt/DIDIER.TARTAREFR.EU@DIDIER.TARTAREFR.EU&lt;br /&gt;
        renew until 25/02/2015 10:47:09&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On vérifie que l&#039;utilisateur didier ne peut que changer son mot de passe (politique par défaut)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kadmin -p didier&lt;br /&gt;
Authenticating as principal didier with password.&lt;br /&gt;
Password for didier@DIDIER.TARTAREFR.EU: &lt;br /&gt;
kadmin:  listprincs&lt;br /&gt;
get_principals: Operation requires ``list&#039;&#039; privilege while retrieving list.&lt;br /&gt;
kadmin:  cpw didier&lt;br /&gt;
Enter password for principal &amp;quot;didier@DIDIER.TARTAREFR.EU&amp;quot;: &lt;br /&gt;
Re-enter password for principal &amp;quot;didier@DIDIER.TARTAREFR.EU&amp;quot;: &lt;br /&gt;
Password for &amp;quot;didier@DIDIER.TARTAREFR.EU&amp;quot; changed.&lt;br /&gt;
kadmin:  exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Pour chaque hôte&#039;&#039;&#039; devant être géré par Kerberos&lt;br /&gt;
* on ajoute un principal avec un mot de passe aléatoire&lt;br /&gt;
* on l&#039;exporte dans un keytab local (celui-ci sera copié dans un deuxième temps sur l&#039;hôte concerné)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kadmin.local&lt;br /&gt;
Authenticating as principal didier/admin@DIDIER.TARTAREFR.EU with password.&lt;br /&gt;
&lt;br /&gt;
kadmin.local:  ank -randkey host/test.didier.tartarefr.eu@DIDIER.TARTAREFR.EU &lt;br /&gt;
WARNING: no policy specified for host/test.didier.tartarefr.eu@DIDIER.TARTAREFR.EU; defaulting to no policy&lt;br /&gt;
Principal &amp;quot;host/test.didier.tartarefr.eu@DIDIER.TARTAREFR.EU&amp;quot; created.&lt;br /&gt;
&lt;br /&gt;
kadmin.local:  ktadd -k /tmp/krb5.keytab host/test.didier.tartarefr.eu   &lt;br /&gt;
Entry for principal host/test.didier.tartarefr.eu with kvno 3, encryption type aes256-cts-hmac-sha1-96 added to keytab FILE:/tmp/krb5.keytab.&lt;br /&gt;
Entry for principal host/test.didier.tartarefr.eu with kvno 3, encryption type aes128-cts-hmac-sha1-96 added to keytab FILE:/tmp/krb5.keytab.&lt;br /&gt;
Entry for principal host/test.didier.tartarefr.eu with kvno 3, encryption type des3-cbc-sha1 added to keytab FILE:/tmp/krb5.keytab.&lt;br /&gt;
Entry for principal host/test.didier.tartarefr.eu with kvno 3, encryption type arcfour-hmac added to keytab FILE:/tmp/krb5.keytab.&lt;br /&gt;
Entry for principal host/test.didier.tartarefr.eu with kvno 3, encryption type camellia256-cts-cmac added to keytab FILE:/tmp/krb5.keytab.&lt;br /&gt;
Entry for principal host/test.didier.tartarefr.eu with kvno 3, encryption type camellia128-cts-cmac added to keytab FILE:/tmp/krb5.keytab.&lt;br /&gt;
Entry for principal host/test.didier.tartarefr.eu with kvno 3, encryption type des-hmac-sha1 added to keytab FILE:/tmp/krb5.keytab.&lt;br /&gt;
Entry for principal host/test.didier.tartarefr.eu with kvno 3, encryption type des-cbc-md5 added to keytab FILE:/tmp/krb5.keytab.&lt;br /&gt;
&lt;br /&gt;
kadmin.local:  exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On copie ensuite ce keytab local sur le client kerberos (serveur SSH, serveur web, etc...)&lt;br /&gt;
&lt;br /&gt;
== Installation sur les clients ==&lt;br /&gt;
&lt;br /&gt;
On installe les outils kerberos&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install krb5-workstation&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On édite (ou on copie le fichier depuis le serveur) /etc/krb5.conf&lt;br /&gt;
&lt;br /&gt;
On ajoute un utilisateur système didier&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
useradd -s /bin/bash -m didier&lt;br /&gt;
passwd didier&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
On vérifie que l&#039;utilisateur didier peut acquérir un jeton kerberos depuis ce client.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kinit didier&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Connexion locale (PAM) ===&lt;br /&gt;
&lt;br /&gt;
Installation du &amp;lt;class&amp;gt;PAM&amp;lt;/class&amp;gt; (Pluggable Authentication Modules) &amp;lt;class&amp;gt;Kerberos&amp;lt;/class&amp;gt; et activation.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install pam_krb5&lt;br /&gt;
authconfig --enablekrb5 --update&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Client SSH ===&lt;br /&gt;
&lt;br /&gt;
Comme SSH utilise PAM par défaut, le paquet &amp;lt;package&amp;gt;pam_krb5&amp;lt;/package&amp;gt; doit être [[#Connexion_locale_.28PAM.29|installé et activé]].&lt;br /&gt;
{{Admon/tip|Utilisateurs pouvant se connecter au serveur|Seul les utilisateurs ayant un &#039;&#039;&#039;principal Kerberos&#039;&#039;&#039; et ayant un &#039;&#039;&#039;compte utilisateur sur le serveur SSH&#039;&#039;&#039; peuvent se connecter en SSH avec la méthode &#039;&#039;gssapi-with-mic&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
Il est possible de se [[Windows/Kerberos/Client|connecter en GSSAPI depuis un poste Windows]]&lt;br /&gt;
&lt;br /&gt;
==== Sur le serveur Kerberos ====&lt;br /&gt;
&lt;br /&gt;
On créé un principal qui aura accès à tous les serveurs. Il n&#039;y a pas de nom mieux choisi que &#039;&#039;&#039;root&#039;&#039;&#039;.&lt;br /&gt;
# On créé le principal pour root&amp;lt;pre&amp;gt;kadmin.local -q &amp;quot;addprinc -randkey root&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
# On s&#039;assure que le fichier d&#039;export n&#039;existe pas encore&amp;lt;pre&amp;gt;rm -f /tmp/root.keytab&amp;lt;/pre&amp;gt;&lt;br /&gt;
# On exporte ce principal&amp;lt;pre&amp;gt;kadmin.local -q &amp;quot;ktadd -k /tmp/root.keytab root&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
# On copie dans &amp;lt;path&amp;gt;/root&amp;lt;/path&amp;gt; du &#039;&#039;&#039;client&#039;&#039;&#039; l&#039;export du principal root.&lt;br /&gt;
&lt;br /&gt;
Pour chaque serveur SSH devant être géré par kerberos&lt;br /&gt;
# On créé un principal &amp;lt;nowiki&amp;gt;host/&amp;lt;FQDN&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;pre&amp;gt;kadmin.local -q &amp;quot;addprinc -randkey host/server.tartarefr.eu&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
# On s&#039;assure que le fichier d&#039;export n&#039;existe pas encore&amp;lt;pre&amp;gt;rm -f /tmp/krb5.keytab&amp;lt;/pre&amp;gt;&lt;br /&gt;
# On exporte ce principal (et uniquement lui pour des raisons de sécurité)&amp;lt;pre&amp;gt;kadmin.local -q &amp;quot;ktadd -k /tmp/krb5.keytab host/server.tartarefr.eu&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
# On copie ce principal sur le &#039;&#039;&#039;serveur SSH&#039;&#039;&#039;&amp;lt;pre&amp;gt;scp /tmp/krb5.keytab server.tartarefr.eu:/etc/krb5.keytab&amp;lt;/pre&amp;gt;&lt;br /&gt;
# On copie le fichier de configuration Kerberos sur le serveur SSH&amp;lt;pre&amp;gt;scp /etc/krb5.conf server.tartarefr.eu:/etc/krb5.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Sur le serveur SSH ====&lt;br /&gt;
* On lui spécifie explicitement le propriétaire/groupe de l&#039;export du principal&amp;lt;pre&amp;gt;chown root:root /etc/krb5.keytab&amp;lt;/pre&amp;gt;&lt;br /&gt;
* On lui spécifie les droits associés&amp;lt;pre&amp;gt;chmod 600 /etc/krb5.keytab&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== sur le client SSH ====&lt;br /&gt;
* On copie dans &amp;lt;path&amp;gt;/root&amp;lt;/path&amp;gt; l&#039;export du principal root.&lt;br /&gt;
&lt;br /&gt;
==== Test de connexion ====&lt;br /&gt;
&lt;br /&gt;
Avant de le fixer dans le fichier /etc/ssh/ssh_config, on teste&lt;br /&gt;
# On acquiert un jeton kerberos&amp;lt;pre&amp;gt;kinit -k -t /root/root.keytab root&amp;lt;/pre&amp;gt;&lt;br /&gt;
# On se connecte par ssh en forçant l&#039;option &#039;&#039;GSSAPIAuthentication&#039;&#039;&amp;lt;pre&amp;gt;ssh root@server.tartarefr.eu -o &amp;quot;GSSAPIAuthentication yes&amp;quot; -o &amp;quot;PasswordAuthentication no&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Si la connexion est un succès (sans mot de passe), on vérifie que le fichier &amp;lt;path&amp;gt;/etc/ssh/ssh_config&amp;lt;/path&amp;gt; contient bien&lt;br /&gt;
#* &amp;lt;pre&amp;gt;GSSAPIAuthentication yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
#* &amp;lt;pre&amp;gt;GSSAPIDelegateCredentials yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Debug ====&lt;br /&gt;
&lt;br /&gt;
# Vérification de la synchronisation de l&#039;heure&amp;lt;pre&amp;gt;date &amp;amp;&amp;amp; hwclock&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Vérification des paramètres du fichier &amp;lt;path&amp;gt;/etc/ssh/sshd_config&amp;lt;/path&amp;gt;&lt;br /&gt;
#* &amp;lt;pre&amp;gt;GSSAPIAuthentication yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
#* &amp;lt;pre&amp;gt;GSSAPIDelegateCredentials yes&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Vérification DNS&lt;br /&gt;
#* S&#039;assurer que la résolution fonctionne correctement dans les deux sens&amp;lt;pre&amp;gt;getent hosts $(hostname) | awk &#039;{print $1; exit}&#039; | xargs getent hosts | awk &#039;{print $2}&#039;&amp;lt;/pre&amp;gt;&lt;br /&gt;
#* Vérification du fichier &amp;lt;path&amp;gt;/etc/hosts&amp;lt;/path&amp;gt; sur le serveur SSH.&amp;lt;br&amp;gt;&#039;&#039;&#039;Il ne doit en aucun cas résoudre sur localhost&#039;&#039;&#039;.&amp;lt;br&amp;gt;Le premier nom d&#039;hôte qui suit l&#039;adresse IP (LAN/WAN) doit être le nom d&#039;hôte pleinement qualifié, suivi du nom d&#039;hôte simple.&amp;lt;br&amp;gt;Les alias (CNAME) ainsi que les noms d&#039;hôte virtuels d&#039;Apache peuvent être placé après.&lt;br /&gt;
# Vérification des fichiers&lt;br /&gt;
#* Vérification du fichier &amp;lt;path&amp;gt;/etc/krb5.conf&amp;lt;/path&amp;gt; sur le serveur SSH&lt;br /&gt;
#** Le contenu attendu (c.a.d identique à celui du serveur Kerberos)&lt;br /&gt;
#** Le bon propriétaire et groupe&amp;lt;pre&amp;gt;chown root:root /etc/krb5.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
#** Les bons droits&amp;lt;pre&amp;gt;chmod 644 /etc/krb5.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
#* Vérification du fichier &amp;lt;path&amp;gt;/etc/krb5.keytab&amp;lt;/path&amp;gt; sur le serveur SSH&lt;br /&gt;
#** Le contenu attendu, avec le nom d&#039;hôte pleinement qualifié correspondant (préfixé par &#039;&#039;host/&#039;&#039;) et le bon lvno (le numéro d&#039;export qui est incrémenté à chaque fois)&amp;lt;pre&amp;gt;klist -k /etc/krb5.keytab&amp;lt;/pre&amp;gt;&lt;br /&gt;
#** Le bon propriétaire et groupe&amp;lt;pre&amp;gt;chown root:root /etc/krb5.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
#** Les bons droits&amp;lt;pre&amp;gt;chmod 600 /etc/krb5.conf&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Authentification Apache ===&lt;br /&gt;
&lt;br /&gt;
* Installation d&#039;apache, du module ssl et du module d&#039;authentification kerberos pour apache&amp;lt;pre&amp;gt;yum install httpd mod_ssl mod_auth_kerb&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Ajout d&#039;un principal pour apache (mot de passe aléatoire)&amp;lt;pre&amp;gt;kadmin.local -q &amp;quot;addprinc -randkey http/didier.tartarefr.eu&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Export du principal dans un keytab&amp;lt;pre&amp;gt;kadmin.local -q &amp;quot;ktadd -k /etc/httpd/conf.d/http.keytab http/didier.tartarefr.eu&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Modification du propriétaire du keytab car apache doit pouvoir lire ce fichier&amp;lt;pre&amp;gt;chown apache /etc/httpd/conf.d/http.keytab&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Vérification de la bonne configuration en obtenant un ticket kerberos manuellement&amp;lt;pre&amp;gt;kinit -k -t /etc/httpd/conf.d/http.keytab http/didier.tartarefr.eu&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Destruction du ticket avant de redémarrer le service &amp;lt;app&amp;gt;httpd&amp;lt;/app&amp;gt;&amp;lt;pre&amp;gt;kdestroy&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple de configuration apache&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Directory /var/www/html/kerb&amp;gt;&lt;br /&gt;
    SSLRequireSSL&lt;br /&gt;
    AuthType Kerberos&lt;br /&gt;
    AuthName &amp;quot;Kerberos Authentication&amp;quot;&lt;br /&gt;
    KrbAuthRealms DIDIER.TARTAREFR.EU&lt;br /&gt;
    Krb5Keytab /etc/httpd/conf.d/http.keytab&lt;br /&gt;
    KrbServiceName http/didier.tartarefr.eu&lt;br /&gt;
    KrbMethodNegotiate Off&lt;br /&gt;
    KrbSaveCredentials Off&lt;br /&gt;
    KrbVerifyKDC Off&lt;br /&gt;
    Require valid-user&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Récapitulatif des outils d&#039;utilisation et d&#039;administration ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;kinit&#039;&#039;&#039;: Acquiert un nouveau jeton kerberos pour l&#039;utilisateur passé en argument.&lt;br /&gt;
* &#039;&#039;&#039;kdestroy&#039;&#039;&#039;: Efface le jeton de l&#039;utilisateur actif (le nom passé en argument à kinit)&lt;br /&gt;
* &#039;&#039;&#039;klist&#039;&#039;&#039;: Affiche la liste des jetons pour l&#039;utilisateur actif&lt;br /&gt;
* &#039;&#039;&#039;kadmin&#039;&#039;&#039;: Commande d&#039;administration de kerberos.&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&lt;br /&gt;
* [http://fr.wikipedia.org/wiki/Kerberos_%28protocole%29 Page Wikipedia expliquant le protocole Kerberos]&lt;br /&gt;
* [https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Managing_Smart_Cards/Using_Kerberos.html Documentation RedHat de l&#039;installation du serveur]&lt;br /&gt;
* [http://docstore.mik.ua/orelly/networking_2ndEd/ssh/ch11_04.htm Configuration du serveur SSH pour utiliser Kerberos]&lt;br /&gt;
* [http://unix.stackexchange.com/questions/90383/ssh-authentication-using-gssapi-keyex-or-gssapi-with-mic-publickey-not-permitte Debugging SSH authentication using gssapi-keyex or gssapi-with-mic]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Fichier:KerberosSimple.svg&amp;diff=160</id>
		<title>Fichier:KerberosSimple.svg</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Fichier:KerberosSimple.svg&amp;diff=160"/>
		<updated>2017-05-06T09:44:39Z</updated>

		<summary type="html">&lt;p&gt;Didier : Workflow du protocole Kerberos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Workflow du protocole Kerberos&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Koji/SigulUsing&amp;diff=159</id>
		<title>Koji/SigulUsing</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Koji/SigulUsing&amp;diff=159"/>
		<updated>2017-04-21T07:07:11Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « == Sigul ==  après une installation de Sigul, on peut l&amp;#039;utiliser. {{Admon/note|Commandes disponible|&amp;lt;pre&amp;gt;$ sigul --help-commands delete-key... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Sigul ==&lt;br /&gt;
&lt;br /&gt;
après une [[Koji/SigulInstall|installation de Sigul]], on peut l&#039;utiliser.&lt;br /&gt;
{{Admon/note|Commandes disponible|&amp;lt;pre&amp;gt;$ sigul --help-commands&lt;br /&gt;
delete-key          Delete a key&lt;br /&gt;
modify-key-user     Modify user&#039;s key access&lt;br /&gt;
list-users          List users&lt;br /&gt;
grant-key-access    Grant key access to a user&lt;br /&gt;
sign-text           Output a cleartext signature of a text&lt;br /&gt;
import-key          Import a key&lt;br /&gt;
new-user            Add a user&lt;br /&gt;
sign-rpm            Sign a RPM&lt;br /&gt;
list-keys           List keys&lt;br /&gt;
sign-data           Create a detached signature&lt;br /&gt;
revoke-key-access   Revoke key acess from a user&lt;br /&gt;
user-info           Show information about a user&lt;br /&gt;
change-passphrase   Change key passphrase&lt;br /&gt;
list-key-users      List users that can access a key&lt;br /&gt;
new-key             Add a key&lt;br /&gt;
modify-user         Modify a user&lt;br /&gt;
sign-rpms           Sign one or more RPMs&lt;br /&gt;
modify-key          Modify a key&lt;br /&gt;
delete-user         Delete a user&lt;br /&gt;
key-user-info       Show information about user&#039;s key access&lt;br /&gt;
get-public-key      Output public part of the key&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Créer une nouvelle clé ===&lt;br /&gt;
&lt;br /&gt;
Une fois le client Sigul capable d&#039;envoyer des commandes à &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, on peut créer une nouvelle clé nommée &#039;&#039;&#039;centos-5-key&#039;&#039;&#039;.&lt;br /&gt;
 sigul new-key --name-real=&#039;CentOS-5-B2PWeb&#039; --name-comment=&#039;CentOS 5 B2PWeb Signing Key&#039; --name-email=&#039;didier@tartarefr.eu&#039; --key-admin root centos-5-key&lt;br /&gt;
{{Admon/note|Générer beaucoup d&#039;entropie durant le génération de la clé|La génération de la clé nécessite beaucoup d&#039;entropie sur le serveur Sigul. On peut donc occuper le serveur et paradoxalement accélerer la génération de la clé.&lt;br /&gt;
&lt;br /&gt;
La commande suivant génère assez d&#039;entropie pour 2 minutes:&lt;br /&gt;
&amp;lt;pre&amp;gt;find / &amp;gt; /dev/null 2&amp;gt;&amp;amp;1&amp;lt;/pre&amp;gt;}}&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sigul new-key --help&lt;br /&gt;
usage: client.py new-key [options] key&lt;br /&gt;
&lt;br /&gt;
Add a key&lt;br /&gt;
&lt;br /&gt;
options:&lt;br /&gt;
  -h, --help            show this help message and exit&lt;br /&gt;
  --key-admin=USER      Initial key administrator&lt;br /&gt;
  --name-real=NAME_REAL&lt;br /&gt;
                        Real name of key subject&lt;br /&gt;
  --name-comment=NAME_COMMENT&lt;br /&gt;
                        A comment about of key subject&lt;br /&gt;
  --name-email=NAME_EMAIL&lt;br /&gt;
                        E-mail of key subject&lt;br /&gt;
  --expire-date=YYYY-MM-DD&lt;br /&gt;
                        Key expiration date&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Import d&#039;une clé existante ===&lt;br /&gt;
 sigul import-key &#039;CentOS-5-B2PWeb&#039; ~/.gnupg/secring.gpg&lt;br /&gt;
&lt;br /&gt;
=== Changer le nom de la clé ===&lt;br /&gt;
Changer le nom de la clé &#039;&#039;&#039;centos5&#039;&#039;&#039; en &#039;&#039;&#039;centos-5-key&#039;&#039;&#039;&amp;lt;pre&amp;gt;sigul modify-key --new-name centos-5-key centos5&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ajout d&#039;un utilisateur ===&lt;br /&gt;
&lt;br /&gt;
* Ajout d&#039;un utilisateur administrateur&amp;lt;pre&amp;gt;sigul new-user --admin --with-password didier&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Autoriser l&#039;utilisation d&#039;une clé existante à un utilisateur ===&lt;br /&gt;
&amp;lt;pre&amp;gt;sigul grant-key-access centos-5-key didier&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigul grant-key-access --help&lt;br /&gt;
usage: client.py grant-key-access key user&lt;br /&gt;
&lt;br /&gt;
Grant key access to a user&lt;br /&gt;
&lt;br /&gt;
options:&lt;br /&gt;
  -h, --help  show this help message and exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Modifier la phrase de passe ===&lt;br /&gt;
 sigul change-passphrase centos-5-key&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sigul change-passphrase --help&lt;br /&gt;
usage: client.py change-passphrase key&lt;br /&gt;
&lt;br /&gt;
Change key passphrase&lt;br /&gt;
&lt;br /&gt;
options:&lt;br /&gt;
  -h, --help  show this help message and exit&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== FAQ ===&lt;br /&gt;
&lt;br /&gt;
{{Admon/faq|ERROR: I/O error: Unexpected EOF in NSPR|&lt;br /&gt;
* S&#039;assurer que le répertoire des clés existe. Ce chemin est déclaré dans le fichier &amp;lt;path&amp;gt;/etc/sigul/server.conf&amp;lt;/path&amp;gt;&amp;lt;pre&amp;gt;gnupg-home: /var/lib/sigul/server/gnupg&amp;lt;/pre&amp;gt;&lt;br /&gt;
** Propriétaire: &#039;&#039;&#039;sigul&#039;&#039;&#039;&lt;br /&gt;
** Groupe: &#039;&#039;&#039;sigul&#039;&#039;&#039;&lt;br /&gt;
** Droits: 0700 &#039;&#039;&#039;rwx------&#039;&#039;&#039;&lt;br /&gt;
** Lien symbolique &#039;&#039;&#039;/var/lib/sigul/gnupg&#039;&#039;&#039; pointant sur &amp;lt;path&amp;gt;/var/lib/sigul/server/gnupg&amp;lt;/path&amp;gt;&lt;br /&gt;
* S&#039;assurer qu&#039;il y a suffisamment d&#039;espace disque ( en gros deux fois la taille du plus gros paquet RPM )&lt;br /&gt;
* S&#039;assurer que les daemons sigul_bridge et sigul_server sont démarrés&amp;lt;pre&amp;gt;service sigul_server status &amp;amp;&amp;amp; service sigul_bridge status&amp;lt;/pre&amp;gt;&lt;br /&gt;
* S&#039;assurer que le pont peut se connecter au serveur ( [[Koji/SigulInstall#Firewall| Configure firewall]] )}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/faq|Error: Unknown error|&lt;br /&gt;
Vérifier les journaux du serveur, l&#039;erreur est surement plus explicite&lt;br /&gt;
* &amp;lt;pre&amp;gt;/usr/bin/rpmsign: No such file or directory&amp;lt;/pre&amp;gt;Il suffit d&#039;installer le paquet &amp;lt;package&amp;gt;rpm-sign&amp;lt;/package&amp;gt; qui n&#039;est pas installé par défaut sur centos 7. Un simple &amp;lt;code&amp;gt;yum provides /usr/bin/rpmsign&amp;lt;/code&amp;gt; donne le paquet à installer.}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/faq|Unknown error on creating key process|&lt;br /&gt;
* Installer le paquet &amp;lt;package&amp;gt;gnupg1&amp;lt;/package&amp;gt; depuis [ http://people.redhat.com/mitr/rpmsigner/rhel6 ] ou de [ http://infrastructure.stg.fedoraproject.org/repo/builder-rpms/6Server/SRPMS/ ]&lt;br /&gt;
* S&#039;assurer que Sigul est configurer pour utiliser &amp;lt;package&amp;gt;gnupg1&amp;lt;/package&amp;gt;&amp;lt;pre&amp;gt;sed -i -e &#039;/gnupg_bin/s,^.*$,gnupg_bin = &amp;quot;/usr/bin/gpg1&amp;quot;,&#039; /usr/share/sigul/settings.py&amp;lt;/pre&amp;gt;&lt;br /&gt;
* S&#039;assurer que le paquet &amp;lt;package&amp;gt;python-sqlalchemy&amp;lt;/package&amp;gt; soit installé}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/faq|Certificats client expirés|&lt;br /&gt;
Une fois le certificat client expiré, il faut le désactiver localement&amp;lt;pre&amp;gt;certutil -d ~/.sigul -D -n sigul-client-cert&amp;lt;/pre&amp;gt; et refaire une génération de certificat client.}}&lt;br /&gt;
&lt;br /&gt;
== Interfacer Sigul et koji ==&lt;br /&gt;
&lt;br /&gt;
=== configuration ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; peut être utiliser pour signer un ou de multiples RPMs dans une instance &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;. Une fois le client Sigul correctement configuré, il suffit juste de configurer l&#039;utilisateur Proxy pour Koji. Quand un client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; émet une requête de signature pour &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;, le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; se connecte à &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; en tant qu&#039;utilisateur &#039;&#039;&#039;kojiweb&#039;&#039;&#039;. Il faut juste s&#039;assurer que l&#039;utilisateur demandeur a les droits administrateur sur le &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; et &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; s&#039;occupe du reste.&lt;br /&gt;
&lt;br /&gt;
La configuration pour &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; peut être situer n&#039;importe où, du moment que l&#039;utilisateur sigul a droit de lecture. Les certificats pour &#039;&#039;&#039;kojiweb&#039;&#039;&#039; doivent être copiés dans le même chemin que la configuration &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Comme toutes &#039;&#039;&#039;les commandes de cette partie doivent être lancées par l&#039;utilisateur sigul&#039;&#039;&#039;, on va donc devenir cet utilisateur&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;su - sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création du répertoire de configuration de &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir -p ~/.koji&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie de la configuration par défaut du client &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/koji.conf ~/.koji/config&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie des certificats {{class|Kojiweb}} dans celui-ci&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/pki/koji/pem/kojiweb.pem .koji/client.pem&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/pki/koji/kojica.crt .koji/clientca.crt&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/pki/koji/kojica.crt .koji/serverca.crt&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Après avoir redémarrer le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, le client doit être capable d&#039;obtenir un RPM depuis Koji et de le signer.&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
&lt;br /&gt;
Pour tester l&#039;interfaçage, on va obtenir un RPM depuis &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;, le signer et le sauvegarder dans le répertoire de travail actuel. c&#039;est juste pour tester la connxion et l&#039;authentification sur &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; et &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul sign-rpm -o signed.rpm key_name unsigned.rpm&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si la commande précédente fonctionne, un RPM signé est présent dans le répertoire de travail actuel.&lt;br /&gt;
&lt;br /&gt;
On vérifie sa signature&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rpm --checksig signed.rpm&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Script sigulsign_unsigned.py ==&lt;br /&gt;
&lt;br /&gt;
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&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
* Changer l&#039;URL du HUB Koji (2 fois): KOJIHUB&lt;br /&gt;
* Spécifier nos propres fichiers de certificats: SERVERCA, CLIENTCA, CLIENTCERT&lt;br /&gt;
* Ajout de nos clés de signature: KEYS&lt;br /&gt;
{{Admon/warning|Casse de l&#039;ID dans le script sigulsign_unsigned.py|GPG rapporte un ID écrit en majuscule mais dans le script, celui-ci doit être renseigné en minuscule pour que le processus fonctionne.}}&lt;br /&gt;
&lt;br /&gt;
Pour obtenir l&#039;ID de nos clés:&lt;br /&gt;
* exporter de la clé&amp;lt;pre&amp;gt;sigul get-public-key centos-5-key &amp;gt; centos-5-key.asc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* importer dans GPG&amp;lt;pre&amp;gt;gpg --import centos-5-key.asc&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Lister nos clé GPG&amp;lt;pre&amp;gt;gpg --list-keys&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/root/.gnupg/pubring.gpg&lt;br /&gt;
------------------------&lt;br /&gt;
pub   1024D/773DF357 2013-08-20&lt;br /&gt;
uid                  CentOS-5-B2PWeb (CentOS 5 B2PWeb Signing Key) &amp;lt;didier@tartarefr.eu&amp;gt;&lt;br /&gt;
sub   2048g/EBC96FF2 2013-08-20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
L&#039;ID de notre clé &#039;&#039;&#039;centos-5-key&#039;&#039;&#039; est 773DF357&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
Change koji hostname, certificate files and add B2PWeb signing keys&lt;br /&gt;
diff -u a/sigulsign_unsigned.py b/sigulsign_unsigned.py&lt;br /&gt;
--- a/sigulsign_unsigned.py	2013-08-21 10:05:57.418032284 +0200&lt;br /&gt;
+++ b/sigulsign_unsigned.py	2013-08-21 10:13:11.683976970 +0200&lt;br /&gt;
@@ -38,11 +38,11 @@ rpmdict = {}&lt;br /&gt;
 unsigned = []&lt;br /&gt;
 loglevel = &#039;&#039;&lt;br /&gt;
 passphrase = &#039;&#039;&lt;br /&gt;
-KOJIHUB = &#039;https://koji.fedoraproject.org/kojihub&#039;&lt;br /&gt;
+KOJIHUB = &#039;http://koji.tartarefr.eu/kojihub&#039;&lt;br /&gt;
 # Should probably set these from a koji config file&lt;br /&gt;
-SERVERCA = os.path.expanduser(&#039;~/.fedora-server-ca.cert&#039;)&lt;br /&gt;
-CLIENTCA = os.path.expanduser(&#039;~/.fedora-upload-ca.cert&#039;)&lt;br /&gt;
-CLIENTCERT = os.path.expanduser(&#039;~/.fedora.cert&#039;)&lt;br /&gt;
+SERVERCA = os.path.expanduser(&#039;~/.koji/serverca.crt&#039;)&lt;br /&gt;
+CLIENTCA = os.path.expanduser(&#039;~/.koji/clientca.crt&#039;)&lt;br /&gt;
+CLIENTCERT = os.path.expanduser(&#039;~/.koji/client.pem&#039;)&lt;br /&gt;
 # Setup a dict of our key names as sigul knows them to the actual key ID&lt;br /&gt;
 # that koji would use.  We should get this from sigul somehow.&lt;br /&gt;
 KEYS = {&#039;fedora-12-sparc&#039;: {&#039;id&#039;: &#039;b3eb779b&#039;, &#039;v3&#039;: True},&lt;br /&gt;
@@ -67,7 +67,9 @@ KEYS = {&#039;fedora-12-sparc&#039;: {&#039;id&#039;: &#039;b3eb7&lt;br /&gt;
         &#039;fedora-10&#039;: {&#039;id&#039;: &#039;4ebfc273&#039;, &#039;v3&#039;: False},&lt;br /&gt;
         &#039;fedora-10-testing&#039;: {&#039;id&#039;: &#039;0b86274e&#039;, &#039;v3&#039;: False},&lt;br /&gt;
         &#039;epel-6&#039;: {&#039;id&#039;: &#039;0608b895&#039;, &#039;v3&#039;: True},&lt;br /&gt;
-        &#039;epel-5&#039;: {&#039;id&#039;: &#039;217521f6&#039;, &#039;v3&#039;: False}}&lt;br /&gt;
+        &#039;epel-5&#039;: {&#039;id&#039;: &#039;217521f6&#039;, &#039;v3&#039;: False},&lt;br /&gt;
+        &#039;centos-5-key&#039; : {&#039;id&#039;: &#039;773df357&#039;, &#039;v3&#039;: True},&lt;br /&gt;
+        &#039;centos-6-key&#039; : {&#039;id&#039;: &#039;d3f3c56a&#039;, &#039;v3&#039;: True}}&lt;br /&gt;
 &lt;br /&gt;
 def exit(status):&lt;br /&gt;
     &amp;quot;&amp;quot;&amp;quot;End the program using status, report any errors&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
@@ -213,7 +215,7 @@ if not (opts.just_list or opts.just_writ&lt;br /&gt;
 &lt;br /&gt;
 # Reset the KOJIHUB if the target is a secondary arch&lt;br /&gt;
 if opts.arch:&lt;br /&gt;
-    KOJIHUB = &#039;http://%s.koji.fedoraproject.org/kojihub&#039; % opts.arch&lt;br /&gt;
+    KOJIHUB = &#039;http://%s.koji.tartarefr.eu/kojihub&#039; % opts.arch&lt;br /&gt;
 # setup the koji session&lt;br /&gt;
 logging.info(&#039;Setting up koji session&#039;)&lt;br /&gt;
 kojisession = koji.ClientSession(KOJIHUB)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Signature d&#039;un ou plusieurs paquets ===&lt;br /&gt;
&lt;br /&gt;
C&#039;est utile afin de signer des paquets qui ne sont pas les derniers construits (dernier N-V-R)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sigulsign_unsigned.py -v --password=&amp;quot;motdepasse&amp;quot; --inherit centos-6-key &amp;lt;N-V-R&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
exemple:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sigulsign_unsigned.py -v --password=&amp;quot;$(cat /root/.sigul/centos-6-key)&amp;quot; --inherit centos-6-key appliance-tools-007.0-1.el6&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Koji/SigulInstall&amp;diff=158</id>
		<title>Koji/SigulInstall</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Koji/SigulInstall&amp;diff=158"/>
		<updated>2017-04-21T07:03:36Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Mise en place du pont */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vue d&#039;ensemble ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; est une suite logicielle pour un serveur de signature, qui peut signer les RPMs ou de simple ou multiples fichiers. Toutes les clés [[Security/OpenGPG|GPG]] sont stockés uniquement sur le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; (Sigul server), et donc aucun utilisateur n&#039;a accès à aucune clé publique ou privée. Toutes les communications avec le serveur passent par le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; (Sigul bridge) qui agit comme une passerelle entre le client et le serveur. Cela isole le serveur et interdit tout accès extérieur autre que depuis le pont. Le client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, une fois configuré, autorise les utilisateurs à signer les RPMs avec les clés créées (ou importées) sur le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, en envoyant des commandes au pont, qui lui se chargera de transmettre au serveur.&lt;br /&gt;
[[Fichier:SigulArch.svg|441px|centré|vignette|Architecture de Sigul]]&lt;br /&gt;
{{Admon/bug|&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; sur les systèmes el6|&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; a un bug récurrent&amp;lt;ref&amp;gt;https://bugzilla.redhat.com/show_bug.cgi?format=multiple&amp;amp;id=894019&amp;lt;/ref&amp;gt; sur les systèmes el6 et a besoin de travailler avec le paquet &amp;lt;package&amp;gt;gnupg1&amp;lt;/package&amp;gt; au lieu du paquet par défaut &amp;lt;package&amp;gt;gnupg2&amp;lt;/package&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Il faut modifier le fichier &amp;lt;path&amp;gt;/usr/share/sigul/settings.py&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gnupg_bin = &amp;quot;/usr/bin/gpg1&amp;quot;&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Rien de plus simple, on installe via [[RPM/UsingYum|yum]], puis on créé l&#039;arborescence nécessaire aux composants de &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;  {{Admon/smiley|:)}}&lt;br /&gt;
&lt;br /&gt;
La création de l&#039;arborescence est rendue nécessaire par le fait d&#039;installer le pont et le serveur sur le même système (chose qui n&#039;est pas recommandée pour des raisons de sécurité)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install sigul&lt;br /&gt;
su - sigul -s /bin/bash -c &#039;mkdir /var/lib/sigul/{bridge,server}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Admon/tip|Modification permanente pour l&#039;utilisateur sigul|Il peut être pratique de fixer le shell pour l&#039;utilisateur sigul afin de simplifier les commandes d&#039;administrations&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# usermod -s /bin/bash sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
De même, on peut fixer définitivement les variables utilisées dans l&#039;installation en ajoutant au fichier &amp;lt;path&amp;gt;~/.bash_profile&amp;lt;/path&amp;gt; de l&#039;utilisateur sigul&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bridge_dir=/var/lib/sigul/bridge&lt;br /&gt;
server_dir=/var/lib/sigul/server&lt;br /&gt;
export bridge_dir&lt;br /&gt;
export server_dir&lt;br /&gt;
&lt;br /&gt;
gpgagent=$(ps aux | grep gpg | grep sigul | grep -v grep | wc -l)&lt;br /&gt;
[ ${gpgagent} -eq 0 ] &amp;amp;&amp;amp; gpg-agent --homedir=/var/lib/sigul/server --daemon --use-standard-socket 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Admon/note|FAS|FAS est le système de compte de Fedora, nous n&#039;avons pas besoin de FAS pour un système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; personnel.}}&lt;br /&gt;
{{Admon/warning|Mot de passe NSS| Il faut impérativement se rappeler tous les mots de passes utilisés ici.}}&lt;br /&gt;
&lt;br /&gt;
== Firewall ==&lt;br /&gt;
&lt;br /&gt;
* Le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;  doit pouvoir communiquer avec le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; ( default: TCP port 44333 )&lt;br /&gt;
* Tous les clients &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; doivent pouvoir communiquer avec le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; ( default: TCP port 44334 )&lt;br /&gt;
&lt;br /&gt;
Naturellement, Le pont peut avoir des accès plus restrictifs ( autorisation de quelques adresses IP )&lt;br /&gt;
* Pour le pont&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 44334 -j ACCEPT&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Pour le serveur (une seule adresse autorisée)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -s 10.0.0.10/32 -p tcp -m state --state NEW -m tcp --dport 44333 -j ACCEPT&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mise en place du pont ==&lt;br /&gt;
&lt;br /&gt;
Le pont agit en tant que passerelle centrale su système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;. C&#039;est le seul composant qui dialogue avec le serveur, c&#039;est à dire que les commandes clientes pour le serveur vont être envoyées au pont, qui les relayera au serveur, recevra la réponse et la redistribuera au client. Le pont agit en tant que passerelle pour [[RPM#Infrastructure_de_construction_de_RPM:_Koji|Koji]] pour la signature des paquets, le pont dialogue avec le [[Koji/Installation#Pr.C3.A9sentation|Hub Koji]] avec l’authentification d&#039;un utilisateur Proxy, comme Kojiweb. La partie sur la liaison entre &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; et &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; est [[Koji/SigulInstall#Configuration_de_Sigul_pour_koji|ici]].&lt;br /&gt;
&lt;br /&gt;
Pour démarrer la mise en place, on doit générer les certificats qui seront utilisés pour authentifier les différent composants du système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; entre eux. Le pont sera utilisé comme Autorité de Certification pour les communications internes du système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec le compte sigul ===&lt;br /&gt;
&lt;br /&gt;
* Comme toutes &#039;&#039;&#039;les commandes de cette partie doivent être lancées par l&#039;utilisateur sigul&#039;&#039;&#039;, on va donc devenir cet utilisateur&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# su - sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Définition du répertoire de destination&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;bridge_dir=/var/lib/sigul/bridge&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de la base de données NSS, pour garder les informations des certificats, dans le répertoire de destination définit par la variable &#039;&#039;$bridge_dir&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $bridge_dir -N&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération de l&#039;autorité de certification (CA: Certificate Authority) qui sera utilisée par tous les composants &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $bridge_dir -S -n sigul-ca -s &#039;CN=Sigul CA&#039; -t CT,, -x -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération d&#039;un certificat pour le pont&amp;lt;br&amp;gt;Le champs CN doit être le nom complet de l&#039;hôte (fqdn) sur lequel le pont est hebergé&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $bridge_dir -S -n sigul-bridge-cert -s &#039;CN=koji.tartarefr.eu&#039; -c sigul-ca -t u,, -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec le compte root ===&lt;br /&gt;
&lt;br /&gt;
Il est temps de configurer le pont en éditant le fichier &amp;lt;path&amp;gt;/etc/sigul/bridge.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[bridge]&lt;br /&gt;
bridge-cert-nickname: sigul-bridge-cert&lt;br /&gt;
client-listen-port: 44334&lt;br /&gt;
server-listen-port: 44333&lt;br /&gt;
max-rpms-payload-size: 10737418240&lt;br /&gt;
&lt;br /&gt;
[koji]&lt;br /&gt;
koji-config: ~/.koji/config&lt;br /&gt;
&lt;br /&gt;
[daemon]&lt;br /&gt;
unix-user: sigul&lt;br /&gt;
unix-group: sigul&lt;br /&gt;
&lt;br /&gt;
[nss]&lt;br /&gt;
nss-dir: /var/lib/sigul/bridge&lt;br /&gt;
nss-password: bridgensspasswd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
&lt;br /&gt;
Lancement en mode debug, les logs se trouvant dans le fichier &amp;lt;path&amp;gt;/var/log/sigul_bridge.log&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_bridge -v -v&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérification du fichier journal et s&#039;il n&#039;y a pas d&#039;erreur, on peut continuer.&lt;br /&gt;
{{Admon/note|Le premier message du fichier &amp;lt;path&amp;gt;/var/log/sigul_bridge.log&amp;lt;/path&amp;gt; doit être&lt;br /&gt;
&amp;lt;pre&amp;gt;2011-11-24 16:41:42,214 DEBUG: Waiting for the client to connect&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
    &lt;br /&gt;
Arrêt du pont sigul CRTL-C &lt;br /&gt;
&lt;br /&gt;
=== Démarrage ===&lt;br /&gt;
&lt;br /&gt;
On peut maintenant lancer le deamon et activer son démarrage automatique au démarrage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;systemd&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl start sigul_bridge.service&lt;br /&gt;
systemctl enable sigul_bridge.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;sysVinit&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
service sigul_bridge start&lt;br /&gt;
chkconfig sigul_bridge on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mise en place du serveur ==&lt;br /&gt;
&lt;br /&gt;
Le serveur est complètement isolé du reste du monde. Toutes les communications depuis l&#039;extérieur doivent être interdites, exception faite des communications avec le pont. De même, les communications sortantes doivent être restreintes au pont pour un maximum de sécurité. Il faut s&#039;assurer qu&#039;aucun accès exterieur est possible (même web). Il détient toutes les clés pour signer les RPMs, et donc aucun utilisateur ne doit avoir accès directement aux clés, le serveur est le seul système qui connait les clés.&lt;br /&gt;
&lt;br /&gt;
=== Opérations préalables sur le pont avec l&#039;utilisateur sigul ===&lt;br /&gt;
* Export de l&#039;autorité de certification dans le fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $bridge_dir -o sigulca.p12 -n sigul-ca&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie du fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt; sur le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;&lt;br /&gt;
* Destruction de l&#039;export&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec l&#039;utilisateur sigul ===&lt;br /&gt;
&lt;br /&gt;
* Comme toutes &#039;&#039;&#039;les commandes de cette partie doivent être lancées par l&#039;utilisateur sigul&#039;&#039;&#039;, on va donc devenir cet utilisateur&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# su - sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Définition du répertoire de destination&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;server_dir=/var/lib/sigul/server&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de la base de données NSS, pour garder les informations des certificats, dans le répertoire de destination définit par la variable &#039;&#039;$server_dir&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $server_dir -N&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Import de l&#039;autorité de certification (CA: Certificate Authority)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $server_dir -i sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $server_dir -M -n sigul-ca -t CT,,&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération d&#039;un certificat pour le serveur&amp;lt;br&amp;gt;Le champs CN doit être le nom complet de l&#039;hôte (fqdn) sur lequel le serveur est hebergé&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $server_dir -S -n sigul-server-cert -s &#039;CN=koji.tartarefr.eu&#039; -c sigul-ca -t u,, -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Suppression de l&#039;export de l&#039;autorité de certification&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Admon/bug|Répertoire racine de gnupg|Bien que la configuration de sigul puisse être éditée, &lt;br /&gt;
&amp;lt;pre&amp;gt;_default_storage_path = &#039;/var/lib/sigul/server&#039;&lt;br /&gt;
default_gnupg_home = os.path.join(_default_storage_path, &#039;gnupg&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
il faut quand même rajouter un lien symbolique à la racine du répertoire personnel de sigul.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/lib/sigul&lt;br /&gt;
ln -s /var/lib/sigul/server/gnupg gnupg&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec l&#039;utilisateur root ===&lt;br /&gt;
&lt;br /&gt;
Il est temps de configurer le serveur en éditant le fichier &amp;lt;path&amp;gt;/etc/sigul/server.conf&amp;lt;/path&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[server]&lt;br /&gt;
bridge-hostname: koji.didier-linux.eu&lt;br /&gt;
bridge-port: 44333&lt;br /&gt;
max-file-payload-size: 1073741824&lt;br /&gt;
max-memory-payload-size: 1048576&lt;br /&gt;
max-rpms-payload-size: 10737418240&lt;br /&gt;
server-cert-nickname: sigul-server-cert&lt;br /&gt;
signing-timeout: 60&lt;br /&gt;
&lt;br /&gt;
[database]&lt;br /&gt;
database-path: /var/lib/sigul/server/server.sqlite&lt;br /&gt;
&lt;br /&gt;
[gnupg]&lt;br /&gt;
gnupg-home: /var/lib/sigul/server/gnupg&lt;br /&gt;
gnupg-key-type: DSA&lt;br /&gt;
gnupg-key-length: 1024&lt;br /&gt;
gnupg-subkey-type: ELG-E&lt;br /&gt;
gnupg-subkey-length: 2048&lt;br /&gt;
gnupg-key-usage: sign&lt;br /&gt;
passphrase-length: 64&lt;br /&gt;
&lt;br /&gt;
[daemon]&lt;br /&gt;
unix-user: sigul&lt;br /&gt;
unix-group: sigul&lt;br /&gt;
&lt;br /&gt;
[nss]&lt;br /&gt;
nss-dir: /var/lib/sigul/server&lt;br /&gt;
nss-password: **********&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On va maintenant créer la base de données pour que le serveur y stocke les informations à propos des utilisateurs et des clés&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_server_create_db&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On va ajouter l&#039;administrateur initial. Celui-ci doit déjà exister localement sur le système. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_server_add_admin&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
&lt;br /&gt;
Lancement en mode debug, les logs se trouvant dans le fichier &amp;lt;path&amp;gt;/var/log/sigul_server.log&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_server -v -v&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérification du fichier journal et s&#039;il n&#039;y a pas d&#039;erreur, on peut continuer.&lt;br /&gt;
{{Admon/note|You should see the first log message in &amp;lt;path&amp;gt;/var/log/sigul_server.log:&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;2011-11-24 16:36:42,154 DEBUG: Waiting for a request&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
    &lt;br /&gt;
Arrêt du pont sigul CRTL-C &lt;br /&gt;
&lt;br /&gt;
=== Démarrage ===&lt;br /&gt;
&lt;br /&gt;
On peut maintenant lancer le deamon et activer son démarrage automatique au démarrage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;systemd&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl start sigul_server.service&lt;br /&gt;
systemctl enable sigul_server.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;sysVinit&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
service sigul_server start&lt;br /&gt;
chkconfig sigul_server on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mise en place du Client ==&lt;br /&gt;
&lt;br /&gt;
Le client doit pouvoir s&#039;authentifier sur le pont avec des certificats pour pouvoir envoyer des commandes à celui-ci.&lt;br /&gt;
&lt;br /&gt;
=== Opérations préalables sur le pont avec l&#039;utilisateur sigul ===&lt;br /&gt;
&lt;br /&gt;
* Export de l&#039;autorité de certification dans le fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $bridge_dir -o sigulca.p12 -n sigul-ca&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie du fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt; sur le client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; et modification du propriétaire sur celui-ci&lt;br /&gt;
* Destruction de l&#039;export&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations sur le client avec l&#039;utilisateur root ===&lt;br /&gt;
&lt;br /&gt;
Edition du fichier &amp;lt;path&amp;gt;/etc/sigul/client.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[client]&lt;br /&gt;
bridge-hostname: koji.didier-linux.eu&lt;br /&gt;
bridge-port: 44334&lt;br /&gt;
client-cert-nickname: sigul-client-cert&lt;br /&gt;
server-hostname: koji.didier-linux.eu&lt;br /&gt;
&lt;br /&gt;
[koji]&lt;br /&gt;
koji-config: ~/.koji/config&lt;br /&gt;
&lt;br /&gt;
[nss]&lt;br /&gt;
nss-dir: ~/.sigul&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations sur le client avec l&#039;utilisateur qui utilisera Sigul ===&lt;br /&gt;
&lt;br /&gt;
* Définition du répertoire de destination&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;client_dir=~/.sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de celui-ci&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir $client_dir&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de la base de données NSS, pour garder les informations des certificats, dans le répertoire de destination définit par la variable &#039;&#039;$client_dir&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $client_dir -N&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Import de l&#039;autorité de certification (CA: Certificate Authority)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $client_dir -i sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $client_dir -M -n sigul-ca -t CT,,&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération d&#039;un certificat pour le serveur&amp;lt;br&amp;gt;Le champs CN doit être le login de l&#039;utilisateur pour le système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $client_dir -S -n sigul-client-cert -s &#039;CN=root&#039; -c sigul-ca -t u,, -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Suppression de l&#039;export de l&#039;autorité de certification&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie du fichier de configuration générale des clients &amp;lt;path&amp;gt;/etc/sigul/client.conf&amp;lt;/path&amp;gt; dans son répertoire personnel &amp;lt;path&amp;gt;~/.sigul/client.conf&amp;lt;/path&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/sigul/client.conf ~/.sigul/client.conf&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Édition du fichier &amp;lt;path&amp;gt;~/.sigul/client.conf&amp;lt;/path&amp;gt; pour insérer le mot de passe de l&#039;utilisateur dans la section [nss].&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;nss-password: Your NSS PASS&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
Test avec une commande sigul pour valider le bon fonctionnement de toute la chaine&lt;br /&gt;
 sigul list-users&lt;br /&gt;
&lt;br /&gt;
On peut maintenant utiliser pleinement &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Sigul Client Config Script==&lt;br /&gt;
&lt;br /&gt;
Ce script peut être utilisé pour mettre en place rapidement l’authentification pour un client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; quand l’authentification FAS n&#039;est pas utilisée.&lt;br /&gt;
{{Admon/important|L&#039;utilisateur doit déjà être créé sur le serveur|Ce script ne fait que la mise en place des certificats.}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #Variables### And initial setup#######&lt;br /&gt;
 mkdir ~/.sigul&lt;br /&gt;
 client_dir=~/.sigul&lt;br /&gt;
 user=$(whoami)  &lt;br /&gt;
 ####################&lt;br /&gt;
 echo&lt;br /&gt;
 ############################Begin Certificate imports&lt;br /&gt;
 echo &amp;quot;=======================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Setting up NSS Database&amp;quot;&lt;br /&gt;
 echo &amp;quot;=======================&amp;quot;&lt;br /&gt;
 certutil -d $client_dir -N&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;===================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Downloading CA Cert&amp;quot;&lt;br /&gt;
 echo &amp;quot;===================&amp;quot;&lt;br /&gt;
 wget http://someurl.com/sigul/sigulca.p12 &amp;lt;-- Substitute with a path or url of your exported .p12&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;==================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Importing CA certs&amp;quot;&lt;br /&gt;
 echo &amp;quot;==================&amp;quot;&lt;br /&gt;
 pk12util -d $client_dir -i sigulca.p12&lt;br /&gt;
 certutil -d $client_dir -M -n sigul-ca -t CT,,&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;======================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Generating Client cert&amp;quot;&lt;br /&gt;
 echo &amp;quot;======================&amp;quot;&lt;br /&gt;
 certutil -d $client_dir -S -n sigul-client-cert -s &amp;quot;CN=$user&amp;quot; -c sigul-ca -t u,, -v 120&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;======================&amp;quot;&lt;br /&gt;
 #########End certificate imports########&lt;br /&gt;
 ########################################&lt;br /&gt;
 #########NSS password Saver#############&lt;br /&gt;
 read -p &amp;quot;Would you like to save your nss pass to ~/.sigul/client.conf [y/n]: &amp;quot; nsspasssel&lt;br /&gt;
 #########User Input conditional#########&lt;br /&gt;
 if [ $nsspasssel == &amp;quot;y&amp;quot; -o $nsspasssel == &amp;quot;Y&amp;quot; ]; then&lt;br /&gt;
 echo &amp;quot;Enter your NSS password One more time: &amp;quot;&lt;br /&gt;
 read -s nsspass&lt;br /&gt;
 echo &amp;quot;[nss]&amp;quot; &amp;gt; ~/.sigul/client.conf&lt;br /&gt;
 echo &amp;quot;nss-password: $nsspass&amp;quot; &amp;gt;&amp;gt; ~/.sigul/client.conf&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 echo &amp;quot;Cleaning up&amp;quot;&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 rm sigulca.p12&lt;br /&gt;
 else&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 echo &amp;quot;Cleaning up&amp;quot;&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 rm sigulca.p12&lt;br /&gt;
 fi&lt;br /&gt;
 #########################################\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
Utilisation de son [[Koji/SigulUsing|Sigul signing server]]&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Koji/SigulInstall&amp;diff=157</id>
		<title>Koji/SigulInstall</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Koji/SigulInstall&amp;diff=157"/>
		<updated>2017-04-21T07:02:11Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Mise en place du pont */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vue d&#039;ensemble ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; est une suite logicielle pour un serveur de signature, qui peut signer les RPMs ou de simple ou multiples fichiers. Toutes les clés [[Security/OpenGPG|GPG]] sont stockés uniquement sur le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; (Sigul server), et donc aucun utilisateur n&#039;a accès à aucune clé publique ou privée. Toutes les communications avec le serveur passent par le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; (Sigul bridge) qui agit comme une passerelle entre le client et le serveur. Cela isole le serveur et interdit tout accès extérieur autre que depuis le pont. Le client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, une fois configuré, autorise les utilisateurs à signer les RPMs avec les clés créées (ou importées) sur le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, en envoyant des commandes au pont, qui lui se chargera de transmettre au serveur.&lt;br /&gt;
[[Fichier:SigulArch.svg|441px|centré|vignette|Architecture de Sigul]]&lt;br /&gt;
{{Admon/bug|&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; sur les systèmes el6|&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; a un bug récurrent&amp;lt;ref&amp;gt;https://bugzilla.redhat.com/show_bug.cgi?format=multiple&amp;amp;id=894019&amp;lt;/ref&amp;gt; sur les systèmes el6 et a besoin de travailler avec le paquet &amp;lt;package&amp;gt;gnupg1&amp;lt;/package&amp;gt; au lieu du paquet par défaut &amp;lt;package&amp;gt;gnupg2&amp;lt;/package&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Il faut modifier le fichier &amp;lt;path&amp;gt;/usr/share/sigul/settings.py&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gnupg_bin = &amp;quot;/usr/bin/gpg1&amp;quot;&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Rien de plus simple, on installe via [[RPM/UsingYum|yum]], puis on créé l&#039;arborescence nécessaire aux composants de &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;  {{Admon/smiley|:)}}&lt;br /&gt;
&lt;br /&gt;
La création de l&#039;arborescence est rendue nécessaire par le fait d&#039;installer le pont et le serveur sur le même système (chose qui n&#039;est pas recommandée pour des raisons de sécurité)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install sigul&lt;br /&gt;
su - sigul -s /bin/bash -c &#039;mkdir /var/lib/sigul/{bridge,server}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Admon/tip|Modification permanente pour l&#039;utilisateur sigul|Il peut être pratique de fixer le shell pour l&#039;utilisateur sigul afin de simplifier les commandes d&#039;administrations&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# usermod -s /bin/bash sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
De même, on peut fixer définitivement les variables utilisées dans l&#039;installation en ajoutant au fichier &amp;lt;path&amp;gt;~/.bash_profile&amp;lt;/path&amp;gt; de l&#039;utilisateur sigul&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bridge_dir=/var/lib/sigul/bridge&lt;br /&gt;
server_dir=/var/lib/sigul/server&lt;br /&gt;
export bridge_dir&lt;br /&gt;
export server_dir&lt;br /&gt;
&lt;br /&gt;
gpgagent=$(ps aux | grep gpg | grep sigul | grep -v grep | wc -l)&lt;br /&gt;
[ ${gpgagent} -eq 0 ] &amp;amp;&amp;amp; gpg-agent --homedir=/var/lib/sigul/server --daemon --use-standard-socket 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Admon/note|FAS|FAS est le système de compte de Fedora, nous n&#039;avons pas besoin de FAS pour un système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; personnel.}}&lt;br /&gt;
{{Admon/warning|Mot de passe NSS| Il faut impérativement se rappeler tous les mots de passes utilisés ici.}}&lt;br /&gt;
&lt;br /&gt;
== Firewall ==&lt;br /&gt;
&lt;br /&gt;
* Le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;  doit pouvoir communiquer avec le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; ( default: TCP port 44333 )&lt;br /&gt;
* Tous les clients &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; doivent pouvoir communiquer avec le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; ( default: TCP port 44334 )&lt;br /&gt;
&lt;br /&gt;
Naturellement, Le pont peut avoir des accès plus restrictifs ( autorisation de quelques adresses IP )&lt;br /&gt;
* Pour le pont&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 44334 -j ACCEPT&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Pour le serveur (une seule adresse autorisée)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -s 10.0.0.10/32 -p tcp -m state --state NEW -m tcp --dport 44333 -j ACCEPT&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mise en place du pont ==&lt;br /&gt;
&lt;br /&gt;
Le pont agit en tant que passerelle centrale su système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;. C&#039;est le seul composant qui dialogue avec le serveur, c&#039;est à dire que les commandes clientes pour le serveur vont être envoyées au pont, qui les relayera au serveur, recevra la réponse et la redistribuera au client. Le pont agit en tant que passerelle pour [[/RPM#Infrastructure_de_construction_de_RPM:_Koji|Koji]] pour la signature des paquets, le pont dialogue avec le [[Koji/Installation#Pr.C3.A9sentation|Hub Koji]] avec l’authentification d&#039;un utilisateur Proxy, comme Kojiweb. La partie sur la liaison entre &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; et &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; est [[Koji/SigulInstall#Configuration_de_Sigul_pour_koji|ici]].&lt;br /&gt;
&lt;br /&gt;
Pour démarrer la mise en place, on doit générer les certificats qui seront utilisés pour authentifier les différent composants du système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; entre eux. Le pont sera utilisé comme Autorité de Certification pour les communications internes du système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec le compte sigul ===&lt;br /&gt;
&lt;br /&gt;
* Comme toutes &#039;&#039;&#039;les commandes de cette partie doivent être lancées par l&#039;utilisateur sigul&#039;&#039;&#039;, on va donc devenir cet utilisateur&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# su - sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Définition du répertoire de destination&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;bridge_dir=/var/lib/sigul/bridge&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de la base de données NSS, pour garder les informations des certificats, dans le répertoire de destination définit par la variable &#039;&#039;$bridge_dir&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $bridge_dir -N&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération de l&#039;autorité de certification (CA: Certificate Authority) qui sera utilisée par tous les composants &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $bridge_dir -S -n sigul-ca -s &#039;CN=Sigul CA&#039; -t CT,, -x -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération d&#039;un certificat pour le pont&amp;lt;br&amp;gt;Le champs CN doit être le nom complet de l&#039;hôte (fqdn) sur lequel le pont est hebergé&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $bridge_dir -S -n sigul-bridge-cert -s &#039;CN=koji.tartarefr.eu&#039; -c sigul-ca -t u,, -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec le compte root ===&lt;br /&gt;
&lt;br /&gt;
Il est temps de configurer le pont en éditant le fichier &amp;lt;path&amp;gt;/etc/sigul/bridge.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[bridge]&lt;br /&gt;
bridge-cert-nickname: sigul-bridge-cert&lt;br /&gt;
client-listen-port: 44334&lt;br /&gt;
server-listen-port: 44333&lt;br /&gt;
max-rpms-payload-size: 10737418240&lt;br /&gt;
&lt;br /&gt;
[koji]&lt;br /&gt;
koji-config: ~/.koji/config&lt;br /&gt;
&lt;br /&gt;
[daemon]&lt;br /&gt;
unix-user: sigul&lt;br /&gt;
unix-group: sigul&lt;br /&gt;
&lt;br /&gt;
[nss]&lt;br /&gt;
nss-dir: /var/lib/sigul/bridge&lt;br /&gt;
nss-password: bridgensspasswd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
&lt;br /&gt;
Lancement en mode debug, les logs se trouvant dans le fichier &amp;lt;path&amp;gt;/var/log/sigul_bridge.log&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_bridge -v -v&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérification du fichier journal et s&#039;il n&#039;y a pas d&#039;erreur, on peut continuer.&lt;br /&gt;
{{Admon/note|Le premier message du fichier &amp;lt;path&amp;gt;/var/log/sigul_bridge.log&amp;lt;/path&amp;gt; doit être&lt;br /&gt;
&amp;lt;pre&amp;gt;2011-11-24 16:41:42,214 DEBUG: Waiting for the client to connect&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
    &lt;br /&gt;
Arrêt du pont sigul CRTL-C &lt;br /&gt;
&lt;br /&gt;
=== Démarrage ===&lt;br /&gt;
&lt;br /&gt;
On peut maintenant lancer le deamon et activer son démarrage automatique au démarrage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;systemd&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl start sigul_bridge.service&lt;br /&gt;
systemctl enable sigul_bridge.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;sysVinit&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
service sigul_bridge start&lt;br /&gt;
chkconfig sigul_bridge on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mise en place du serveur ==&lt;br /&gt;
&lt;br /&gt;
Le serveur est complètement isolé du reste du monde. Toutes les communications depuis l&#039;extérieur doivent être interdites, exception faite des communications avec le pont. De même, les communications sortantes doivent être restreintes au pont pour un maximum de sécurité. Il faut s&#039;assurer qu&#039;aucun accès exterieur est possible (même web). Il détient toutes les clés pour signer les RPMs, et donc aucun utilisateur ne doit avoir accès directement aux clés, le serveur est le seul système qui connait les clés.&lt;br /&gt;
&lt;br /&gt;
=== Opérations préalables sur le pont avec l&#039;utilisateur sigul ===&lt;br /&gt;
* Export de l&#039;autorité de certification dans le fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $bridge_dir -o sigulca.p12 -n sigul-ca&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie du fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt; sur le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;&lt;br /&gt;
* Destruction de l&#039;export&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec l&#039;utilisateur sigul ===&lt;br /&gt;
&lt;br /&gt;
* Comme toutes &#039;&#039;&#039;les commandes de cette partie doivent être lancées par l&#039;utilisateur sigul&#039;&#039;&#039;, on va donc devenir cet utilisateur&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# su - sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Définition du répertoire de destination&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;server_dir=/var/lib/sigul/server&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de la base de données NSS, pour garder les informations des certificats, dans le répertoire de destination définit par la variable &#039;&#039;$server_dir&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $server_dir -N&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Import de l&#039;autorité de certification (CA: Certificate Authority)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $server_dir -i sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $server_dir -M -n sigul-ca -t CT,,&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération d&#039;un certificat pour le serveur&amp;lt;br&amp;gt;Le champs CN doit être le nom complet de l&#039;hôte (fqdn) sur lequel le serveur est hebergé&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $server_dir -S -n sigul-server-cert -s &#039;CN=koji.tartarefr.eu&#039; -c sigul-ca -t u,, -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Suppression de l&#039;export de l&#039;autorité de certification&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Admon/bug|Répertoire racine de gnupg|Bien que la configuration de sigul puisse être éditée, &lt;br /&gt;
&amp;lt;pre&amp;gt;_default_storage_path = &#039;/var/lib/sigul/server&#039;&lt;br /&gt;
default_gnupg_home = os.path.join(_default_storage_path, &#039;gnupg&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
il faut quand même rajouter un lien symbolique à la racine du répertoire personnel de sigul.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/lib/sigul&lt;br /&gt;
ln -s /var/lib/sigul/server/gnupg gnupg&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec l&#039;utilisateur root ===&lt;br /&gt;
&lt;br /&gt;
Il est temps de configurer le serveur en éditant le fichier &amp;lt;path&amp;gt;/etc/sigul/server.conf&amp;lt;/path&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[server]&lt;br /&gt;
bridge-hostname: koji.didier-linux.eu&lt;br /&gt;
bridge-port: 44333&lt;br /&gt;
max-file-payload-size: 1073741824&lt;br /&gt;
max-memory-payload-size: 1048576&lt;br /&gt;
max-rpms-payload-size: 10737418240&lt;br /&gt;
server-cert-nickname: sigul-server-cert&lt;br /&gt;
signing-timeout: 60&lt;br /&gt;
&lt;br /&gt;
[database]&lt;br /&gt;
database-path: /var/lib/sigul/server/server.sqlite&lt;br /&gt;
&lt;br /&gt;
[gnupg]&lt;br /&gt;
gnupg-home: /var/lib/sigul/server/gnupg&lt;br /&gt;
gnupg-key-type: DSA&lt;br /&gt;
gnupg-key-length: 1024&lt;br /&gt;
gnupg-subkey-type: ELG-E&lt;br /&gt;
gnupg-subkey-length: 2048&lt;br /&gt;
gnupg-key-usage: sign&lt;br /&gt;
passphrase-length: 64&lt;br /&gt;
&lt;br /&gt;
[daemon]&lt;br /&gt;
unix-user: sigul&lt;br /&gt;
unix-group: sigul&lt;br /&gt;
&lt;br /&gt;
[nss]&lt;br /&gt;
nss-dir: /var/lib/sigul/server&lt;br /&gt;
nss-password: **********&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On va maintenant créer la base de données pour que le serveur y stocke les informations à propos des utilisateurs et des clés&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_server_create_db&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On va ajouter l&#039;administrateur initial. Celui-ci doit déjà exister localement sur le système. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_server_add_admin&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
&lt;br /&gt;
Lancement en mode debug, les logs se trouvant dans le fichier &amp;lt;path&amp;gt;/var/log/sigul_server.log&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_server -v -v&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérification du fichier journal et s&#039;il n&#039;y a pas d&#039;erreur, on peut continuer.&lt;br /&gt;
{{Admon/note|You should see the first log message in &amp;lt;path&amp;gt;/var/log/sigul_server.log:&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;2011-11-24 16:36:42,154 DEBUG: Waiting for a request&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
    &lt;br /&gt;
Arrêt du pont sigul CRTL-C &lt;br /&gt;
&lt;br /&gt;
=== Démarrage ===&lt;br /&gt;
&lt;br /&gt;
On peut maintenant lancer le deamon et activer son démarrage automatique au démarrage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;systemd&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl start sigul_server.service&lt;br /&gt;
systemctl enable sigul_server.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;sysVinit&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
service sigul_server start&lt;br /&gt;
chkconfig sigul_server on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mise en place du Client ==&lt;br /&gt;
&lt;br /&gt;
Le client doit pouvoir s&#039;authentifier sur le pont avec des certificats pour pouvoir envoyer des commandes à celui-ci.&lt;br /&gt;
&lt;br /&gt;
=== Opérations préalables sur le pont avec l&#039;utilisateur sigul ===&lt;br /&gt;
&lt;br /&gt;
* Export de l&#039;autorité de certification dans le fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $bridge_dir -o sigulca.p12 -n sigul-ca&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie du fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt; sur le client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; et modification du propriétaire sur celui-ci&lt;br /&gt;
* Destruction de l&#039;export&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations sur le client avec l&#039;utilisateur root ===&lt;br /&gt;
&lt;br /&gt;
Edition du fichier &amp;lt;path&amp;gt;/etc/sigul/client.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[client]&lt;br /&gt;
bridge-hostname: koji.didier-linux.eu&lt;br /&gt;
bridge-port: 44334&lt;br /&gt;
client-cert-nickname: sigul-client-cert&lt;br /&gt;
server-hostname: koji.didier-linux.eu&lt;br /&gt;
&lt;br /&gt;
[koji]&lt;br /&gt;
koji-config: ~/.koji/config&lt;br /&gt;
&lt;br /&gt;
[nss]&lt;br /&gt;
nss-dir: ~/.sigul&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations sur le client avec l&#039;utilisateur qui utilisera Sigul ===&lt;br /&gt;
&lt;br /&gt;
* Définition du répertoire de destination&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;client_dir=~/.sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de celui-ci&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir $client_dir&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de la base de données NSS, pour garder les informations des certificats, dans le répertoire de destination définit par la variable &#039;&#039;$client_dir&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $client_dir -N&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Import de l&#039;autorité de certification (CA: Certificate Authority)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $client_dir -i sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $client_dir -M -n sigul-ca -t CT,,&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération d&#039;un certificat pour le serveur&amp;lt;br&amp;gt;Le champs CN doit être le login de l&#039;utilisateur pour le système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $client_dir -S -n sigul-client-cert -s &#039;CN=root&#039; -c sigul-ca -t u,, -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Suppression de l&#039;export de l&#039;autorité de certification&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie du fichier de configuration générale des clients &amp;lt;path&amp;gt;/etc/sigul/client.conf&amp;lt;/path&amp;gt; dans son répertoire personnel &amp;lt;path&amp;gt;~/.sigul/client.conf&amp;lt;/path&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/sigul/client.conf ~/.sigul/client.conf&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Édition du fichier &amp;lt;path&amp;gt;~/.sigul/client.conf&amp;lt;/path&amp;gt; pour insérer le mot de passe de l&#039;utilisateur dans la section [nss].&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;nss-password: Your NSS PASS&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
Test avec une commande sigul pour valider le bon fonctionnement de toute la chaine&lt;br /&gt;
 sigul list-users&lt;br /&gt;
&lt;br /&gt;
On peut maintenant utiliser pleinement &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Sigul Client Config Script==&lt;br /&gt;
&lt;br /&gt;
Ce script peut être utilisé pour mettre en place rapidement l’authentification pour un client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; quand l’authentification FAS n&#039;est pas utilisée.&lt;br /&gt;
{{Admon/important|L&#039;utilisateur doit déjà être créé sur le serveur|Ce script ne fait que la mise en place des certificats.}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #Variables### And initial setup#######&lt;br /&gt;
 mkdir ~/.sigul&lt;br /&gt;
 client_dir=~/.sigul&lt;br /&gt;
 user=$(whoami)  &lt;br /&gt;
 ####################&lt;br /&gt;
 echo&lt;br /&gt;
 ############################Begin Certificate imports&lt;br /&gt;
 echo &amp;quot;=======================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Setting up NSS Database&amp;quot;&lt;br /&gt;
 echo &amp;quot;=======================&amp;quot;&lt;br /&gt;
 certutil -d $client_dir -N&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;===================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Downloading CA Cert&amp;quot;&lt;br /&gt;
 echo &amp;quot;===================&amp;quot;&lt;br /&gt;
 wget http://someurl.com/sigul/sigulca.p12 &amp;lt;-- Substitute with a path or url of your exported .p12&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;==================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Importing CA certs&amp;quot;&lt;br /&gt;
 echo &amp;quot;==================&amp;quot;&lt;br /&gt;
 pk12util -d $client_dir -i sigulca.p12&lt;br /&gt;
 certutil -d $client_dir -M -n sigul-ca -t CT,,&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;======================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Generating Client cert&amp;quot;&lt;br /&gt;
 echo &amp;quot;======================&amp;quot;&lt;br /&gt;
 certutil -d $client_dir -S -n sigul-client-cert -s &amp;quot;CN=$user&amp;quot; -c sigul-ca -t u,, -v 120&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;======================&amp;quot;&lt;br /&gt;
 #########End certificate imports########&lt;br /&gt;
 ########################################&lt;br /&gt;
 #########NSS password Saver#############&lt;br /&gt;
 read -p &amp;quot;Would you like to save your nss pass to ~/.sigul/client.conf [y/n]: &amp;quot; nsspasssel&lt;br /&gt;
 #########User Input conditional#########&lt;br /&gt;
 if [ $nsspasssel == &amp;quot;y&amp;quot; -o $nsspasssel == &amp;quot;Y&amp;quot; ]; then&lt;br /&gt;
 echo &amp;quot;Enter your NSS password One more time: &amp;quot;&lt;br /&gt;
 read -s nsspass&lt;br /&gt;
 echo &amp;quot;[nss]&amp;quot; &amp;gt; ~/.sigul/client.conf&lt;br /&gt;
 echo &amp;quot;nss-password: $nsspass&amp;quot; &amp;gt;&amp;gt; ~/.sigul/client.conf&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 echo &amp;quot;Cleaning up&amp;quot;&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 rm sigulca.p12&lt;br /&gt;
 else&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 echo &amp;quot;Cleaning up&amp;quot;&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 rm sigulca.p12&lt;br /&gt;
 fi&lt;br /&gt;
 #########################################\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
Utilisation de son [[Koji/SigulUsing|Sigul signing server]]&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=RPM&amp;diff=156</id>
		<title>RPM</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=RPM&amp;diff=156"/>
		<updated>2017-04-21T07:00:34Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Koji */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Admon/tip|&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;Fedora Packaging&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;|&lt;br /&gt;
* [https://admin.fedoraproject.org FAS Account]&lt;br /&gt;
* [http://fedoraproject.org/wiki/Packaging:Guidelines Guidelines]&lt;br /&gt;
* [http://fedoraproject.org/wiki/Changes/FormatSecurity Format Security]&lt;br /&gt;
* [http://fedoraproject.org/wiki/Package_SCM_admin_requests SCM Requests]&lt;br /&gt;
* [https://fedoraproject.org/wiki/Using_Fedora_GIT Using git and fedpkg]&lt;br /&gt;
* [https://fedoraproject.org/wiki/Using_the_Koji_build_system Using the Koji build system]&lt;br /&gt;
* [https://admin.fedoraproject.org/pkgdb Package Database]: manage contact, package admins (bodhi), etc...&lt;br /&gt;
* [http://fedoraproject.org/wiki/New_package_process_for_existing_contributors Package process for existing contributors]&lt;br /&gt;
* [http://fedoraproject.org/wiki/Package_Review_Process Package Review Process]&lt;br /&gt;
* [https://fedoraproject.org/wiki/Join_the_package_collection_maintainers Join the package collection maintainers]&lt;br /&gt;
* [https://fedoraproject.org/wiki/Package_update_HOWTO Updating Package HowTo]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Commande rpm ==&lt;br /&gt;
* [[RPM/Using|Utiliser la commande &amp;lt;app&amp;gt;rpm&amp;lt;/app&amp;gt;]]&lt;br /&gt;
* [[RPM/UsingYum|Utiliser la commande &amp;lt;app&amp;gt;yum&amp;lt;/app&amp;gt;]]&lt;br /&gt;
* [[RPM/DNF/FAQ| F.A.Q. concernant &amp;lt;app&amp;gt;dnf&amp;lt;/app&amp;gt;]]&lt;br /&gt;
* [[RPM/DNFvYUM|Comparatif de &amp;lt;app&amp;gt;dnf&amp;lt;/app&amp;gt; et de &amp;lt;app&amp;gt;yum&amp;lt;/app&amp;gt;]]&lt;br /&gt;
* [[RPM/Troubleshooting|Gérer les problèmes liés aux RPMs]]&lt;br /&gt;
&lt;br /&gt;
== Fichier Spec ==&lt;br /&gt;
* [[RPM/Spec|Fichiers Spec]]&lt;br /&gt;
&lt;br /&gt;
== Environnement de construction ==&lt;br /&gt;
* [[RPM/Environnement|Building Environment]]&lt;br /&gt;
&lt;br /&gt;
== Infrastructure de construction de RPM: Koji ==&lt;br /&gt;
&lt;br /&gt;
=== Installation d&#039;un serveur Koji personnel ===&lt;br /&gt;
* [[Koji/Installation|Installation d&#039;un serveur Koji]] pas à pas avec l’authentification SSL.&lt;br /&gt;
* Installation d&#039;un repository avec [[RPM/Mash|Mash]]&lt;br /&gt;
&lt;br /&gt;
=== Bootstrap de son serveur Koji ===&lt;br /&gt;
* [[Koji/Bootstrap|Bootstrap de Koji]]&lt;br /&gt;
&lt;br /&gt;
=== Utilisation de son serveur Koji ===&lt;br /&gt;
* [[Koji/Utilisation|Utilisation de Koji]]&lt;br /&gt;
* [[Koji/CLI|Utilisation du client Koji en ligne de commande]]&lt;br /&gt;
&lt;br /&gt;
== Serveur de signature: sigul ==&lt;br /&gt;
* [[Koji/SigulInstall|Installation d&#039;un Serveur de Signature Sigul]]&lt;br /&gt;
* [[Koji/SigulUsing|Utilisation du Serveur de Signature Sigul]]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Fichier:SigulArch.svg&amp;diff=155</id>
		<title>Fichier:SigulArch.svg</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Fichier:SigulArch.svg&amp;diff=155"/>
		<updated>2017-04-21T06:59:14Z</updated>

		<summary type="html">&lt;p&gt;Didier : Architecture d&amp;#039;un serveur Sigul&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Architecture d&#039;un serveur Sigul&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Koji/SigulInstall&amp;diff=154</id>
		<title>Koji/SigulInstall</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Koji/SigulInstall&amp;diff=154"/>
		<updated>2017-04-21T06:54:14Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « == Vue d&amp;#039;ensemble ==  &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; est une suite logicielle pour un serveur de signature, qui peut signer les RPMs ou de simple ou multiples fichiers. Toutes les c... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vue d&#039;ensemble ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; est une suite logicielle pour un serveur de signature, qui peut signer les RPMs ou de simple ou multiples fichiers. Toutes les clés [[Security/OpenGPG|GPG]] sont stockés uniquement sur le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; (Sigul server), et donc aucun utilisateur n&#039;a accès à aucune clé publique ou privée. Toutes les communications avec le serveur passent par le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; (Sigul bridge) qui agit comme une passerelle entre le client et le serveur. Cela isole le serveur et interdit tout accès extérieur autre que depuis le pont. Le client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, une fois configuré, autorise les utilisateurs à signer les RPMs avec les clés créées (ou importées) sur le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;, en envoyant des commandes au pont, qui lui se chargera de transmettre au serveur.&lt;br /&gt;
[[Fichier:SigulArch.svg|441px|centré|vignette|Architecture de Sigul]]&lt;br /&gt;
{{Admon/bug|&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; sur les systèmes el6|&amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; a un bug récurrent&amp;lt;ref&amp;gt;https://bugzilla.redhat.com/show_bug.cgi?format=multiple&amp;amp;id=894019&amp;lt;/ref&amp;gt; sur les systèmes el6 et a besoin de travailler avec le paquet &amp;lt;package&amp;gt;gnupg1&amp;lt;/package&amp;gt; au lieu du paquet par défaut &amp;lt;package&amp;gt;gnupg2&amp;lt;/package&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Il faut modifier le fichier &amp;lt;path&amp;gt;/usr/share/sigul/settings.py&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;gnupg_bin = &amp;quot;/usr/bin/gpg1&amp;quot;&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
Rien de plus simple, on installe via [[RPM/UsingYum|yum]], puis on créé l&#039;arborescence nécessaire aux composants de &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;  {{Admon/smiley|:)}}&lt;br /&gt;
&lt;br /&gt;
La création de l&#039;arborescence est rendue nécessaire par le fait d&#039;installer le pont et le serveur sur le même système (chose qui n&#039;est pas recommandée pour des raisons de sécurité)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
yum install sigul&lt;br /&gt;
su - sigul -s /bin/bash -c &#039;mkdir /var/lib/sigul/{bridge,server}&#039;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Admon/tip|Modification permanente pour l&#039;utilisateur sigul|Il peut être pratique de fixer le shell pour l&#039;utilisateur sigul afin de simplifier les commandes d&#039;administrations&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# usermod -s /bin/bash sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
De même, on peut fixer définitivement les variables utilisées dans l&#039;installation en ajoutant au fichier &amp;lt;path&amp;gt;~/.bash_profile&amp;lt;/path&amp;gt; de l&#039;utilisateur sigul&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bridge_dir=/var/lib/sigul/bridge&lt;br /&gt;
server_dir=/var/lib/sigul/server&lt;br /&gt;
export bridge_dir&lt;br /&gt;
export server_dir&lt;br /&gt;
&lt;br /&gt;
gpgagent=$(ps aux | grep gpg | grep sigul | grep -v grep | wc -l)&lt;br /&gt;
[ ${gpgagent} -eq 0 ] &amp;amp;&amp;amp; gpg-agent --homedir=/var/lib/sigul/server --daemon --use-standard-socket 1&amp;gt;/dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{Admon/note|FAS|FAS est le système de compte de Fedora, nous n&#039;avons pas besoin de FAS pour un système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; personnel.}}&lt;br /&gt;
{{Admon/warning|Mot de passe NSS| Il faut impérativement se rappeler tous les mots de passes utilisés ici.}}&lt;br /&gt;
&lt;br /&gt;
== Firewall ==&lt;br /&gt;
&lt;br /&gt;
* Le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;  doit pouvoir communiquer avec le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; ( default: TCP port 44333 )&lt;br /&gt;
* Tous les clients &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; doivent pouvoir communiquer avec le pont &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; ( default: TCP port 44334 )&lt;br /&gt;
&lt;br /&gt;
Naturellement, Le pont peut avoir des accès plus restrictifs ( autorisation de quelques adresses IP )&lt;br /&gt;
* Pour le pont&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 44334 -j ACCEPT&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Pour le serveur (une seule adresse autorisée)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;iptables -A INPUT -s 10.0.0.10/32 -p tcp -m state --state NEW -m tcp --dport 44333 -j ACCEPT&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mise en place du pont ==&lt;br /&gt;
&lt;br /&gt;
Le pont agit en tant que passerelle centrale su système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;. C&#039;est le seul composant qui dialogue avec le serveur, c&#039;est à dire que les commandes clientes pour le serveur vont être envoyées au pont, qui les relayera au serveur, recevra la réponse et la redistribuera au client. Le pont agit en tant que passerelle pour [[Koji]] pour la signature des paquets, le pont dialogue avec le [[Koji/Installation#Pr.C3.A9sentation|Hub Koji]] avec l’authentification d&#039;un utilisateur Proxy, comme Kojiweb. La partie sur la liaison entre &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; et &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; est [[Koji/SigulInstall#Configuration_de_Sigul_pour_koji|ici]].&lt;br /&gt;
&lt;br /&gt;
Pour démarrer la mise en place, on doit générer les certificats qui seront utilisés pour authentifier les différent composants du système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; entre eux. Le pont sera utilisé comme Autorité de Certification pour les communications internes du système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec le compte sigul ===&lt;br /&gt;
&lt;br /&gt;
* Comme toutes &#039;&#039;&#039;les commandes de cette partie doivent être lancées par l&#039;utilisateur sigul&#039;&#039;&#039;, on va donc devenir cet utilisateur&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# su - sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Définition du répertoire de destination&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;bridge_dir=/var/lib/sigul/bridge&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de la base de données NSS, pour garder les informations des certificats, dans le répertoire de destination définit par la variable &#039;&#039;$bridge_dir&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $bridge_dir -N&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération de l&#039;autorité de certification (CA: Certificate Authority) qui sera utilisée par tous les composants &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $bridge_dir -S -n sigul-ca -s &#039;CN=Sigul CA&#039; -t CT,, -x -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération d&#039;un certificat pour le pont&amp;lt;br&amp;gt;Le champs CN doit être le nom complet de l&#039;hôte (fqdn) sur lequel le pont est hebergé&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $bridge_dir -S -n sigul-bridge-cert -s &#039;CN=koji.tartarefr.eu&#039; -c sigul-ca -t u,, -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec le compte root ===&lt;br /&gt;
&lt;br /&gt;
Il est temps de configurer le pont en éditant le fichier &amp;lt;path&amp;gt;/etc/sigul/bridge.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[bridge]&lt;br /&gt;
bridge-cert-nickname: sigul-bridge-cert&lt;br /&gt;
client-listen-port: 44334&lt;br /&gt;
server-listen-port: 44333&lt;br /&gt;
max-rpms-payload-size: 10737418240&lt;br /&gt;
&lt;br /&gt;
[koji]&lt;br /&gt;
koji-config: ~/.koji/config&lt;br /&gt;
&lt;br /&gt;
[daemon]&lt;br /&gt;
unix-user: sigul&lt;br /&gt;
unix-group: sigul&lt;br /&gt;
&lt;br /&gt;
[nss]&lt;br /&gt;
nss-dir: /var/lib/sigul/bridge&lt;br /&gt;
nss-password: bridgensspasswd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
&lt;br /&gt;
Lancement en mode debug, les logs se trouvant dans le fichier &amp;lt;path&amp;gt;/var/log/sigul_bridge.log&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_bridge -v -v&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérification du fichier journal et s&#039;il n&#039;y a pas d&#039;erreur, on peut continuer.&lt;br /&gt;
{{Admon/note|Le premier message du fichier &amp;lt;path&amp;gt;/var/log/sigul_bridge.log&amp;lt;/path&amp;gt; doit être&lt;br /&gt;
&amp;lt;pre&amp;gt;2011-11-24 16:41:42,214 DEBUG: Waiting for the client to connect&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
    &lt;br /&gt;
Arrêt du pont sigul CRTL-C &lt;br /&gt;
&lt;br /&gt;
=== Démarrage ===&lt;br /&gt;
&lt;br /&gt;
On peut maintenant lancer le deamon et activer son démarrage automatique au démarrage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;systemd&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl start sigul_bridge.service&lt;br /&gt;
systemctl enable sigul_bridge.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;sysVinit&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
service sigul_bridge start&lt;br /&gt;
chkconfig sigul_bridge on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mise en place du serveur ==&lt;br /&gt;
&lt;br /&gt;
Le serveur est complètement isolé du reste du monde. Toutes les communications depuis l&#039;extérieur doivent être interdites, exception faite des communications avec le pont. De même, les communications sortantes doivent être restreintes au pont pour un maximum de sécurité. Il faut s&#039;assurer qu&#039;aucun accès exterieur est possible (même web). Il détient toutes les clés pour signer les RPMs, et donc aucun utilisateur ne doit avoir accès directement aux clés, le serveur est le seul système qui connait les clés.&lt;br /&gt;
&lt;br /&gt;
=== Opérations préalables sur le pont avec l&#039;utilisateur sigul ===&lt;br /&gt;
* Export de l&#039;autorité de certification dans le fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $bridge_dir -o sigulca.p12 -n sigul-ca&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie du fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt; sur le serveur &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;&lt;br /&gt;
* Destruction de l&#039;export&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec l&#039;utilisateur sigul ===&lt;br /&gt;
&lt;br /&gt;
* Comme toutes &#039;&#039;&#039;les commandes de cette partie doivent être lancées par l&#039;utilisateur sigul&#039;&#039;&#039;, on va donc devenir cet utilisateur&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;# su - sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Définition du répertoire de destination&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;server_dir=/var/lib/sigul/server&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de la base de données NSS, pour garder les informations des certificats, dans le répertoire de destination définit par la variable &#039;&#039;$server_dir&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $server_dir -N&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Import de l&#039;autorité de certification (CA: Certificate Authority)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $server_dir -i sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $server_dir -M -n sigul-ca -t CT,,&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération d&#039;un certificat pour le serveur&amp;lt;br&amp;gt;Le champs CN doit être le nom complet de l&#039;hôte (fqdn) sur lequel le serveur est hebergé&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $server_dir -S -n sigul-server-cert -s &#039;CN=koji.tartarefr.eu&#039; -c sigul-ca -t u,, -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Suppression de l&#039;export de l&#039;autorité de certification&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Admon/bug|Répertoire racine de gnupg|Bien que la configuration de sigul puisse être éditée, &lt;br /&gt;
&amp;lt;pre&amp;gt;_default_storage_path = &#039;/var/lib/sigul/server&#039;&lt;br /&gt;
default_gnupg_home = os.path.join(_default_storage_path, &#039;gnupg&#039;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
il faut quand même rajouter un lien symbolique à la racine du répertoire personnel de sigul.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd /var/lib/sigul&lt;br /&gt;
ln -s /var/lib/sigul/server/gnupg gnupg&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Opérations avec l&#039;utilisateur root ===&lt;br /&gt;
&lt;br /&gt;
Il est temps de configurer le serveur en éditant le fichier &amp;lt;path&amp;gt;/etc/sigul/server.conf&amp;lt;/path&amp;gt;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[server]&lt;br /&gt;
bridge-hostname: koji.didier-linux.eu&lt;br /&gt;
bridge-port: 44333&lt;br /&gt;
max-file-payload-size: 1073741824&lt;br /&gt;
max-memory-payload-size: 1048576&lt;br /&gt;
max-rpms-payload-size: 10737418240&lt;br /&gt;
server-cert-nickname: sigul-server-cert&lt;br /&gt;
signing-timeout: 60&lt;br /&gt;
&lt;br /&gt;
[database]&lt;br /&gt;
database-path: /var/lib/sigul/server/server.sqlite&lt;br /&gt;
&lt;br /&gt;
[gnupg]&lt;br /&gt;
gnupg-home: /var/lib/sigul/server/gnupg&lt;br /&gt;
gnupg-key-type: DSA&lt;br /&gt;
gnupg-key-length: 1024&lt;br /&gt;
gnupg-subkey-type: ELG-E&lt;br /&gt;
gnupg-subkey-length: 2048&lt;br /&gt;
gnupg-key-usage: sign&lt;br /&gt;
passphrase-length: 64&lt;br /&gt;
&lt;br /&gt;
[daemon]&lt;br /&gt;
unix-user: sigul&lt;br /&gt;
unix-group: sigul&lt;br /&gt;
&lt;br /&gt;
[nss]&lt;br /&gt;
nss-dir: /var/lib/sigul/server&lt;br /&gt;
nss-password: **********&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On va maintenant créer la base de données pour que le serveur y stocke les informations à propos des utilisateurs et des clés&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_server_create_db&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On va ajouter l&#039;administrateur initial. Celui-ci doit déjà exister localement sur le système. &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_server_add_admin&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
&lt;br /&gt;
Lancement en mode debug, les logs se trouvant dans le fichier &amp;lt;path&amp;gt;/var/log/sigul_server.log&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;sigul_server -v -v&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vérification du fichier journal et s&#039;il n&#039;y a pas d&#039;erreur, on peut continuer.&lt;br /&gt;
{{Admon/note|You should see the first log message in &amp;lt;path&amp;gt;/var/log/sigul_server.log:&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;2011-11-24 16:36:42,154 DEBUG: Waiting for a request&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
    &lt;br /&gt;
Arrêt du pont sigul CRTL-C &lt;br /&gt;
&lt;br /&gt;
=== Démarrage ===&lt;br /&gt;
&lt;br /&gt;
On peut maintenant lancer le deamon et activer son démarrage automatique au démarrage.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;systemd&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
systemctl start sigul_server.service&lt;br /&gt;
systemctl enable sigul_server.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;sysVinit&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
service sigul_server start&lt;br /&gt;
chkconfig sigul_server on&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Mise en place du Client ==&lt;br /&gt;
&lt;br /&gt;
Le client doit pouvoir s&#039;authentifier sur le pont avec des certificats pour pouvoir envoyer des commandes à celui-ci.&lt;br /&gt;
&lt;br /&gt;
=== Opérations préalables sur le pont avec l&#039;utilisateur sigul ===&lt;br /&gt;
&lt;br /&gt;
* Export de l&#039;autorité de certification dans le fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $bridge_dir -o sigulca.p12 -n sigul-ca&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie du fichier &amp;lt;path&amp;gt;sigulca.p12&amp;lt;/path&amp;gt; sur le client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; et modification du propriétaire sur celui-ci&lt;br /&gt;
* Destruction de l&#039;export&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations sur le client avec l&#039;utilisateur root ===&lt;br /&gt;
&lt;br /&gt;
Edition du fichier &amp;lt;path&amp;gt;/etc/sigul/client.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[client]&lt;br /&gt;
bridge-hostname: koji.didier-linux.eu&lt;br /&gt;
bridge-port: 44334&lt;br /&gt;
client-cert-nickname: sigul-client-cert&lt;br /&gt;
server-hostname: koji.didier-linux.eu&lt;br /&gt;
&lt;br /&gt;
[koji]&lt;br /&gt;
koji-config: ~/.koji/config&lt;br /&gt;
&lt;br /&gt;
[nss]&lt;br /&gt;
nss-dir: ~/.sigul&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Opérations sur le client avec l&#039;utilisateur qui utilisera Sigul ===&lt;br /&gt;
&lt;br /&gt;
* Définition du répertoire de destination&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;client_dir=~/.sigul&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de celui-ci&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir $client_dir&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Création de la base de données NSS, pour garder les informations des certificats, dans le répertoire de destination définit par la variable &#039;&#039;$client_dir&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $client_dir -N&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Import de l&#039;autorité de certification (CA: Certificate Authority)&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;pk12util -d $client_dir -i sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $client_dir -M -n sigul-ca -t CT,,&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Génération d&#039;un certificat pour le serveur&amp;lt;br&amp;gt;Le champs CN doit être le login de l&#039;utilisateur pour le système &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;certutil -d $client_dir -S -n sigul-client-cert -s &#039;CN=root&#039; -c sigul-ca -t u,, -v 120&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Suppression de l&#039;export de l&#039;autorité de certification&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;rm -f sigulca.p12&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Copie du fichier de configuration générale des clients &amp;lt;path&amp;gt;/etc/sigul/client.conf&amp;lt;/path&amp;gt; dans son répertoire personnel &amp;lt;path&amp;gt;~/.sigul/client.conf&amp;lt;/path&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;cp /etc/sigul/client.conf ~/.sigul/client.conf&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Édition du fichier &amp;lt;path&amp;gt;~/.sigul/client.conf&amp;lt;/path&amp;gt; pour insérer le mot de passe de l&#039;utilisateur dans la section [nss].&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;nss-password: Your NSS PASS&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Test ===&lt;br /&gt;
Test avec une commande sigul pour valider le bon fonctionnement de toute la chaine&lt;br /&gt;
 sigul list-users&lt;br /&gt;
&lt;br /&gt;
On peut maintenant utiliser pleinement &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Sigul Client Config Script==&lt;br /&gt;
&lt;br /&gt;
Ce script peut être utilisé pour mettre en place rapidement l’authentification pour un client &amp;lt;class&amp;gt;Sigul&amp;lt;/class&amp;gt; quand l’authentification FAS n&#039;est pas utilisée.&lt;br /&gt;
{{Admon/important|L&#039;utilisateur doit déjà être créé sur le serveur|Ce script ne fait que la mise en place des certificats.}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #Variables### And initial setup#######&lt;br /&gt;
 mkdir ~/.sigul&lt;br /&gt;
 client_dir=~/.sigul&lt;br /&gt;
 user=$(whoami)  &lt;br /&gt;
 ####################&lt;br /&gt;
 echo&lt;br /&gt;
 ############################Begin Certificate imports&lt;br /&gt;
 echo &amp;quot;=======================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Setting up NSS Database&amp;quot;&lt;br /&gt;
 echo &amp;quot;=======================&amp;quot;&lt;br /&gt;
 certutil -d $client_dir -N&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;===================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Downloading CA Cert&amp;quot;&lt;br /&gt;
 echo &amp;quot;===================&amp;quot;&lt;br /&gt;
 wget http://someurl.com/sigul/sigulca.p12 &amp;lt;-- Substitute with a path or url of your exported .p12&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;==================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Importing CA certs&amp;quot;&lt;br /&gt;
 echo &amp;quot;==================&amp;quot;&lt;br /&gt;
 pk12util -d $client_dir -i sigulca.p12&lt;br /&gt;
 certutil -d $client_dir -M -n sigul-ca -t CT,,&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;======================&amp;quot;&lt;br /&gt;
 echo &amp;quot;Generating Client cert&amp;quot;&lt;br /&gt;
 echo &amp;quot;======================&amp;quot;&lt;br /&gt;
 certutil -d $client_dir -S -n sigul-client-cert -s &amp;quot;CN=$user&amp;quot; -c sigul-ca -t u,, -v 120&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;======================&amp;quot;&lt;br /&gt;
 #########End certificate imports########&lt;br /&gt;
 ########################################&lt;br /&gt;
 #########NSS password Saver#############&lt;br /&gt;
 read -p &amp;quot;Would you like to save your nss pass to ~/.sigul/client.conf [y/n]: &amp;quot; nsspasssel&lt;br /&gt;
 #########User Input conditional#########&lt;br /&gt;
 if [ $nsspasssel == &amp;quot;y&amp;quot; -o $nsspasssel == &amp;quot;Y&amp;quot; ]; then&lt;br /&gt;
 echo &amp;quot;Enter your NSS password One more time: &amp;quot;&lt;br /&gt;
 read -s nsspass&lt;br /&gt;
 echo &amp;quot;[nss]&amp;quot; &amp;gt; ~/.sigul/client.conf&lt;br /&gt;
 echo &amp;quot;nss-password: $nsspass&amp;quot; &amp;gt;&amp;gt; ~/.sigul/client.conf&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 echo &amp;quot;Cleaning up&amp;quot;&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 rm sigulca.p12&lt;br /&gt;
 else&lt;br /&gt;
 echo&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 echo &amp;quot;Cleaning up&amp;quot;&lt;br /&gt;
 echo &amp;quot;===========&amp;quot;&lt;br /&gt;
 rm sigulca.p12&lt;br /&gt;
 fi&lt;br /&gt;
 #########################################\&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation ==&lt;br /&gt;
Utilisation de son [[Koji/SigulUsing|Sigul signing server]]&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Koji/CLI&amp;diff=153</id>
		<title>Koji/CLI</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Koji/CLI&amp;diff=153"/>
		<updated>2017-04-20T10:34:33Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « == Commandes générales == &amp;lt;pre&amp;gt; koji help Available commands:         build                     Build a package from source         buildinfo                 Print basic... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Commandes générales ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji help&lt;br /&gt;
Available commands:&lt;br /&gt;
        build                     Build a package from source&lt;br /&gt;
        buildinfo                 Print basic information about a build&lt;br /&gt;
        cancel                    Cancel tasks and/or builds&lt;br /&gt;
        chain-build               Build one or more packages from source&lt;br /&gt;
        download-build            Download a built package&lt;br /&gt;
        help                      List available commands&lt;br /&gt;
        import-comps              Import group/package information from a comps file&lt;br /&gt;
        latest-by-tag             Print the latest packages for each tag&lt;br /&gt;
        latest-pkg                Print the latest packages for a tag&lt;br /&gt;
        list-api                  Print the list of XML-RPC APIs&lt;br /&gt;
        list-buildroot            List the rpms used in or built in a buildroot&lt;br /&gt;
        list-external-repos       List external repos&lt;br /&gt;
        list-groups               Print the group listings&lt;br /&gt;
        list-history              Display historical data&lt;br /&gt;
        list-hosts                Print the host listing&lt;br /&gt;
        list-pkgs                 Print the package listing for tag or for owner&lt;br /&gt;
        list-tag-history          Print a history of tag operations&lt;br /&gt;
        list-tag-inheritance      Print the inheritance information for a tag&lt;br /&gt;
        list-tagged               List the builds or rpms in a tag&lt;br /&gt;
        list-tags                 Print the list of tags&lt;br /&gt;
        list-targets              List the build targets&lt;br /&gt;
        list-tasks                Print the list of tasks&lt;br /&gt;
        list-untagged             List untagged builds&lt;br /&gt;
        list-volumes              List storage volumes&lt;br /&gt;
        maven-build               Build a Maven package from source&lt;br /&gt;
        mock-config               Create a mock config&lt;br /&gt;
        moshimoshi                Introduce yourself&lt;br /&gt;
        move-pkg                  &#039;Move&#039; one or more packages between tags&lt;br /&gt;
        resubmit                  Retry a canceled or failed task, using the same parameter as the original task.&lt;br /&gt;
        rpminfo                   Print basic information about an RPM&lt;br /&gt;
        search                    Search the system&lt;br /&gt;
        show-groups               Show groups data for a tag&lt;br /&gt;
        tag-pkg                   Apply a tag to one or more packages&lt;br /&gt;
        taginfo                   Print basic information about a tag&lt;br /&gt;
        taskinfo                  Show information about a task&lt;br /&gt;
        untag-pkg                 Remove a tag from one or more packages&lt;br /&gt;
        wait-repo                 Wait for a repo to be regenerated&lt;br /&gt;
        watch-logs                Watch logs in realtime&lt;br /&gt;
        watch-task                Track progress of particular tasks                                                                                                                                 &lt;br /&gt;
        win-build                 Build a Windows package from source                                                                                                                                &lt;br /&gt;
        wrapper-rpm               Build wrapper rpms for any archives associated with a build.                                                                                                       &lt;br /&gt;
(Type &amp;quot;koji --help&amp;quot; for help about global options                                                                                                                                                    &lt;br /&gt;
 or &amp;quot;koji &amp;lt;command&amp;gt; --help&amp;quot; for help about a particular command&#039;s options                                                                                                                            &lt;br /&gt;
 or &amp;quot;koji help --admin&amp;quot; for help about privileged administrative commands.) &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Commandes d&#039;administration ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji help --admin                                                                                                                                                                 &lt;br /&gt;
Available commands:                                                                                                                                                                                  &lt;br /&gt;
        add-external-repo         Create an external repo and/or add one to a tag                                                                                                                    &lt;br /&gt;
        add-group                 Add a group to a tag                                                                                                                                               &lt;br /&gt;
        add-group-pkg             Add a package to a group&#039;s package listing                                                                                                                         &lt;br /&gt;
        add-group-req             Add a group to a group&#039;s required list                                                                                                                             &lt;br /&gt;
        add-host                  Add a host&lt;br /&gt;
        add-host-to-channel       Add a host to a channel&lt;br /&gt;
        add-pkg                   Add a package to the listing for tag&lt;br /&gt;
        add-tag                   Add a new tag to the database&lt;br /&gt;
        add-tag-inheritance       Add to a tag&#039;s inheritance&lt;br /&gt;
        add-target                Create a new build target&lt;br /&gt;
        add-user                  Add a user&lt;br /&gt;
        add-volume                Add a new storage volume&lt;br /&gt;
        block-group-pkg           Block a package from a group&#039;s package listing&lt;br /&gt;
        block-group-req           Block a group&#039;s requirement listing&lt;br /&gt;
        block-pkg                 Block a package in the listing for tag&lt;br /&gt;
        build                     Build a package from source&lt;br /&gt;
        buildinfo                 Print basic information about a build&lt;br /&gt;
        call                      Execute an arbitrary XML-RPC call&lt;br /&gt;
        cancel                    Cancel tasks and/or builds&lt;br /&gt;
        chain-build               Build one or more packages from source&lt;br /&gt;
        clone-tag                 Duplicate the contents of one tag onto another tag&lt;br /&gt;
        disable-host              Mark one or more hosts as disabled&lt;br /&gt;
        disable-user              Disable logins by a user&lt;br /&gt;
        download-build            Download a built package&lt;br /&gt;
        edit-external-repo        Edit data for an external repo&lt;br /&gt;
        edit-host                 Edit a host&lt;br /&gt;
        edit-tag                  Alter tag information&lt;br /&gt;
        edit-tag-inheritance      Edit tag inheritance&lt;br /&gt;
        edit-target               Set the name, build_tag, and/or dest_tag of an existing build target to new values&lt;br /&gt;
        enable-host               Mark one or more hosts as enabled&lt;br /&gt;
        enable-user               Enable logins by a user&lt;br /&gt;
        free-task                 Free a task&lt;br /&gt;
        grant-permission          Grant a permission to a user&lt;br /&gt;
        help                      List available commands&lt;br /&gt;
        import                    Import externally built RPMs into the database&lt;br /&gt;
        import-archive            Import an archive file and associate it with a build&lt;br /&gt;
        import-comps              Import group/package information from a comps file&lt;br /&gt;
        import-in-place           Import RPMs that are already in place&lt;br /&gt;
        import-sig                Import signatures into the database&lt;br /&gt;
        latest-by-tag             Print the latest packages for each tag&lt;br /&gt;
        latest-pkg                Print the latest packages for a tag&lt;br /&gt;
        list-api                  Print the list of XML-RPC APIs&lt;br /&gt;
        list-buildroot            List the rpms used in or built in a buildroot&lt;br /&gt;
        list-external-repos       List external repos&lt;br /&gt;
        list-groups               Print the group listings&lt;br /&gt;
        list-history              Display historical data&lt;br /&gt;
        list-hosts                Print the host listing&lt;br /&gt;
        list-permissions          List user permissions&lt;br /&gt;
        list-pkgs                 Print the package listing for tag or for owner&lt;br /&gt;
        list-signed               List signed copies of rpms&lt;br /&gt;
        list-tag-history          Print a history of tag operations&lt;br /&gt;
        list-tag-inheritance      Print the inheritance information for a tag&lt;br /&gt;
        list-tagged               List the builds or rpms in a tag&lt;br /&gt;
        list-tags                 Print the list of tags&lt;br /&gt;
        list-targets              List the build targets&lt;br /&gt;
        list-tasks                Print the list of tasks&lt;br /&gt;
        list-untagged             List untagged builds&lt;br /&gt;
        list-volumes              List storage volumes&lt;br /&gt;
        lock-tag                  Lock a tag&lt;br /&gt;
        make-task                 Create an arbitrary task&lt;br /&gt;
        maven-build               Build a Maven package from source&lt;br /&gt;
        mock-config               Create a mock config&lt;br /&gt;
        moshimoshi                Introduce yourself&lt;br /&gt;
        move-pkg                  &#039;Move&#039; one or more packages between tags&lt;br /&gt;
        prune-signed-copies       Prune signed copies&lt;br /&gt;
        regen-repo                Force a repo to be regenerated&lt;br /&gt;
        remove-channel            Remove a channel entirely&lt;br /&gt;
        remove-external-repo      Remove an external repo from a tag or tags, or remove entirely&lt;br /&gt;
        remove-host-from-channel  Remove a host from a channel&lt;br /&gt;
        remove-tag                Remove a tag&lt;br /&gt;
        remove-tag-inheritance    Remove a tag inheritance link&lt;br /&gt;
        remove-target             Remove a build target&lt;br /&gt;
        rename-channel            Rename a channel&lt;br /&gt;
        restart-hosts             Restart enabled hosts&lt;br /&gt;
        resubmit                  Retry a canceled or failed task, using the same parameter as the original task.&lt;br /&gt;
        revoke-permission         Revoke a permission from a user&lt;br /&gt;
        rpminfo                   Print basic information about an RPM&lt;br /&gt;
        search                    Search the system&lt;br /&gt;
        set-build-volume          Move a build to a different volume&lt;br /&gt;
        set-pkg-arches            Set the list of extra arches for a package&lt;br /&gt;
        set-pkg-owner             Set the owner for a package&lt;br /&gt;
        set-pkg-owner-global      Set the owner for a package globally&lt;br /&gt;
        set-task-priority         Set task priority&lt;br /&gt;
        show-groups               Show groups data for a tag&lt;br /&gt;
        spin-appliance            Create an appliance given a kickstart file&lt;br /&gt;
        spin-livecd               Create a live CD image given a kickstart file&lt;br /&gt;
        tag-pkg                   Apply a tag to one or more packages&lt;br /&gt;
        taginfo                   Print basic information about a tag&lt;br /&gt;
        taskinfo                  Show information about a task&lt;br /&gt;
        unblock-group-pkg         Unblock a package from a group&#039;s package listing&lt;br /&gt;
        unblock-group-req         Unblock a group&#039;s requirement listing&lt;br /&gt;
        unblock-pkg               Unblock a package in the listing for tag&lt;br /&gt;
        unlock-tag                Unlock a tag&lt;br /&gt;
        untag-pkg                 Remove a tag from one or more packages&lt;br /&gt;
        wait-repo                 Wait for a repo to be regenerated&lt;br /&gt;
        watch-logs                Watch logs in realtime&lt;br /&gt;
        watch-task                Track progress of particular tasks&lt;br /&gt;
        win-build                 Build a Windows package from source&lt;br /&gt;
        wrapper-rpm               Build wrapper rpms for any archives associated with a build.&lt;br /&gt;
        write-signed-rpm          Write signed RPMs to disk&lt;br /&gt;
(Type &amp;quot;koji --help&amp;quot; for help about global options&lt;br /&gt;
 or &amp;quot;koji &amp;lt;command&amp;gt; --help&amp;quot; for help about a particular command&#039;s options&lt;br /&gt;
 or &amp;quot;koji help --admin&amp;quot; for help about privileged administrative commands.)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Fichier:KojiwebScreenshot.png&amp;diff=152</id>
		<title>Fichier:KojiwebScreenshot.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Fichier:KojiwebScreenshot.png&amp;diff=152"/>
		<updated>2017-04-20T10:32:39Z</updated>

		<summary type="html">&lt;p&gt;Didier : Photo d&amp;#039;écran de kojiweb (https://koji.fedoraproject.org/koji/)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Photo d&#039;écran de kojiweb (https://koji.fedoraproject.org/koji/)&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Fichier:LogoKoji.svg&amp;diff=150</id>
		<title>Fichier:LogoKoji.svg</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Fichier:LogoKoji.svg&amp;diff=150"/>
		<updated>2017-04-20T10:23:29Z</updated>

		<summary type="html">&lt;p&gt;Didier : Logo Koji&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Logo Koji&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Koji/Utilisation&amp;diff=149</id>
		<title>Koji/Utilisation</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Koji/Utilisation&amp;diff=149"/>
		<updated>2017-04-20T10:20:01Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « droite  == Généralités ==  === Ajout d&amp;#039;un paquet au repository === Un admin du koji ajoute le paquet et le place sous la responsabil... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Fichier:LogoKoji.svg|sans_cadre|droite]]&lt;br /&gt;
&lt;br /&gt;
== Généralités ==&lt;br /&gt;
&lt;br /&gt;
=== Ajout d&#039;un paquet au repository ===&lt;br /&gt;
Un admin du koji ajoute le paquet et le place sous la responsabilité d&#039;un utilisateur Koji&lt;br /&gt;
 koji add-pkg --owner didier centos-5 didier-release&lt;br /&gt;
{{Admon/tip|Construction d&#039;un paquet scratch|&lt;br /&gt;
Koji permet de construire des paquets sans qu&#039;il soit nécessaire de les ajouter au repository: c&#039;est le &#039;&#039;&#039;scratch build&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
La commande de construction devient donc&lt;br /&gt;
&amp;lt;pre&amp;gt;koji build --scratch centos-5 didier-release-1.0.0-1.fc17.src.rpm&amp;lt;/pre&amp;gt;&lt;br /&gt;
Toutefois cette méthode n&#039;est pas recommandé si on cherche à construire un paquet pour notre dépôt (hors test).}}&lt;br /&gt;
&lt;br /&gt;
=== Construction d&#039;un paquet ===&lt;br /&gt;
&lt;br /&gt;
==== Depuis un paquet source ====&lt;br /&gt;
 koji build centos-5 didier-release-1.0.0-1.fc17.src.rpm&lt;br /&gt;
&lt;br /&gt;
==== Depuis un système de contrôle de version ====&lt;br /&gt;
&lt;br /&gt;
Il faut tout d&#039;abord autoriser le serveur et le dépôt sur &#039;&#039;&#039;tous les constructeurs&#039;&#039;&#039; koji ( kojid ).&lt;br /&gt;
&lt;br /&gt;
Ici on déclare deux dépôts de sources:&lt;br /&gt;
* dépôt &#039;&#039;&#039;GIT&#039;&#039;&#039;: &#039;&#039;git://didier.tartarefr.eu/rpm&#039;&#039;&lt;br /&gt;
* dépôt &#039;&#039;&#039;SVN&#039;&#039;&#039;: &#039;&#039;&amp;lt;nowiki&amp;gt;http://didier.tartarefr.eu/svn/rpm&amp;lt;/nowiki&amp;gt;&#039;&#039;&amp;lt;br&amp;gt;Celui-ci étant composé d&#039;un arbre SVN standard, on déclare le répertoire &#039;&#039;trunk&#039;&#039;.&lt;br /&gt;
&#039;&#039;&lt;br /&gt;
Extrait du fichier &amp;lt;path&amp;gt;/etc/kojid/kojid.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
 ; A space-separated list of hostname:repository[:use_common] tuples that kojid is authorized to checkout from (no quotes).&lt;br /&gt;
 ; Wildcards (as supported by fnmatch) are allowed.&lt;br /&gt;
 ; If use_common is specified and is one of &amp;quot;false&amp;quot;, &amp;quot;no&amp;quot;, &amp;quot;off&amp;quot;, or &amp;quot;0&amp;quot; (without quotes), then kojid will not attempt to checkout&lt;br /&gt;
 ; a common/ dir when checking out sources from the source control system.  Otherwise, it will attempt to checkout a common/&lt;br /&gt;
 ; dir, and will raise an exception if it cannot.&lt;br /&gt;
 allowed_scms=didier.tartarefr.eu:/rpm:no didier.tartarefr.eu:/svn/rpm/trunk:yes&lt;br /&gt;
{{Admon/warning|Paramètre &#039;&#039;use_common&#039;&#039;|Il semble y avoir un bug avec le paramètre &#039;&#039;use_common&#039;&#039; et l&#039;utilisation d&#039;un dépôt git.&lt;br /&gt;
&lt;br /&gt;
En effet quelque soit la valeur de ce paramètre, un dépôt &#039;&#039;common&#039;&#039; sera téléchargé.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Work-Around&#039;&#039;&#039;: Créer un dépôt &#039;&#039;common&#039;&#039; vide sur le serveur git.}}&lt;br /&gt;
&lt;br /&gt;
Le système doit fournir un Makefile qui contient une cible sources, dont la tâche est de fournir les sources via une commande de téléchargement. Si celles-ci sont incluses dans le SCM, la cible doit être vide.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;make&amp;quot;&amp;gt;&lt;br /&gt;
# Common Makefile&lt;br /&gt;
sources:&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il ne reste plus qu&#039;à lancer la construction depuis &amp;lt;app&amp;gt;koji&amp;lt;/app&amp;gt;&lt;br /&gt;
&lt;br /&gt;
avec SVN&lt;br /&gt;
 koji build centos-5 &amp;lt;nowiki&amp;gt;svn+http://didier.tartarefr.eu/svn/rpm/trunk?didier-release#head&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
avec git&lt;br /&gt;
 koji build centos-5 git://didier.tartarefr.eu/rpm?didier-release#5153396fc3bf204b74e745759eee33ed5dad0ffe&lt;br /&gt;
{{Admon/important|Différence entre les SCM|* Avec svn, le &#039;&#039;&#039;répertoire&#039;&#039;&#039; &#039;&#039;common&#039;&#039; sera téléchargé en plus de celui du paquet en cours&lt;br /&gt;
* Avec git c&#039;est un &#039;&#039;&#039;dépôt&#039;&#039;&#039; &#039;&#039;common&#039;&#039; qui sera ajouté et l&#039;intégralité du dépôt rpm sera téléchargé.}}&lt;br /&gt;
&lt;br /&gt;
== Interface Web ==&lt;br /&gt;
[[Fichier:KojiwebScreenshot.png||800px]]&lt;br /&gt;
&lt;br /&gt;
== Dépôt B2PWeb ==&lt;br /&gt;
&lt;br /&gt;
=== Importer des paquets sources et binaires ===&lt;br /&gt;
{{Admon/warning|Import|Il est impératif d&#039;importer les paquets RPM pour chaque architecture gérée (intel 32/64 bits, etc ...). De plus le paquet SRPM (RPM source) devra être importer en premier.&lt;br /&gt;
Il y a donc au minimum import de deux paquets RPM.}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;package&amp;gt;Koji&amp;lt;/package&amp;gt; &#039;&#039;&#039;n&#039;accepte pas facilement l&#039;import de paquet RPM binaire sans paquet RPM source correspondant.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==== Import standard ====&lt;br /&gt;
&lt;br /&gt;
Comme nous n&#039;avons que deux architectures définies :&lt;br /&gt;
* i386 ou i686 ( suivant la version de la distribution )&lt;br /&gt;
* x86_64&lt;br /&gt;
&lt;br /&gt;
Afin de maintenir une certaine homogénéité dans le dépôt, il faudra importer les paquets RPM binaires pour les deux architectures.&lt;br /&gt;
&lt;br /&gt;
Le SRPM est obligatoirement importé en premier.&lt;br /&gt;
&lt;br /&gt;
# Import du paquet RPM source&amp;lt;pre&amp;gt;koji add-pkg centos-5 foo.src.rpm&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Import des paquets RPM binaires&lt;br /&gt;
#* Paquet 32 bits&amp;lt;pre&amp;gt;koji add-pkg centos-5 foo.i386.rpm&amp;lt;/pre&amp;gt;&lt;br /&gt;
#* Paquet 64 bits&amp;lt;pre&amp;gt;koji add-pkg centos-5 foo.x86_64.rpm&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Import sans SRPM ====&lt;br /&gt;
&lt;br /&gt;
Exemple en intégrant les paquets pour une base Oracle.&lt;br /&gt;
# Téléchargement des RPM depuis le site Oracle dans le dossier &amp;lt;path&amp;gt;/mnt/koji/externals&amp;lt;/path&amp;gt;&lt;br /&gt;
#* oracle-instantclient12.1-basic-12.1.0.1.0-1.i386.rpm&lt;br /&gt;
#* oracle-instantclient12.1-devel-12.1.0.1.0-1.i386.rpm&lt;br /&gt;
#* oracle-instantclient12.1-sqlplus-12.1.0.1.0-1.i386.rpm&lt;br /&gt;
#* oracle-instantclient12.1-basic-12.1.0.1.0-1.x86_64.rpm&lt;br /&gt;
#* oracle-instantclient12.1-devel-12.1.0.1.0-1.x86_64.rpm&lt;br /&gt;
#* oracle-instantclient12.1-sqlplus-12.1.0.1.0-1.x86_64.rpm&lt;br /&gt;
# Ajout des paquets au {{package|Koji}}&lt;br /&gt;
#* &amp;lt;pre&amp;gt;koji add-pkg centos-6 --owner didier oracle-instantclient12.1-basic&amp;lt;/pre&amp;gt;&lt;br /&gt;
#* &amp;lt;pre&amp;gt;koji add-pkg centos-6 --owner didier oracle-instantclient12.1-devel&amp;lt;/pre&amp;gt;&lt;br /&gt;
#* &amp;lt;pre&amp;gt;koji add-pkg centos-6 --owner didier oracle-instantclient12.1-sqlplus&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Import des paquets dans le {{package|Koji}}&amp;lt;pre&amp;gt;koji import --create-build /mnt/koji/externals/oracle*.rpm&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Comme les paquets sont juste importés, il est nécessaire de les taggués. On commmence par visualiser les paquets non taggués&amp;lt;pre&amp;gt;koji list-untagged&amp;lt;/pre&amp;gt;Comme on s&#039;y attend, trois paquets ne sont pas taggués&lt;br /&gt;
#* oracle-instantclient12.1-basic-12.1.0.1.0-1&lt;br /&gt;
#* oracle-instantclient12.1-devel-12.1.0.1.0-1&lt;br /&gt;
#* oracle-instantclient12.1-sqlplus-12.1.0.1.0-1&lt;br /&gt;
# Tag des paquets précédemment importés en centos-6-build&lt;br /&gt;
#* &amp;lt;pre&amp;gt;koji tag-pkg centos-6 oracle-instantclient12.1-basic-12.1.0.1.0-1&amp;lt;/pre&amp;gt;&lt;br /&gt;
#* &amp;lt;pre&amp;gt;koji tag-pkg centos-6 oracle-instantclient12.1-devel-12.1.0.1.0-1&amp;lt;/pre&amp;gt;&lt;br /&gt;
#* &amp;lt;pre&amp;gt;koji tag-pkg centos-6 oracle-instantclient12.1-sqlplus-12.1.0.1.0-1&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Régénération du dépôt&amp;lt;pre&amp;gt;koji regen-repo centos-6-build&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ajout de paquets sources ===&lt;br /&gt;
Il faut tout d&#039;abord avoir une copie de travail du dépôt des sources, accessible en lecture/écriture.&lt;br /&gt;
&lt;br /&gt;
Pour cela il faut disposer d&#039;un compte associé à une paire de clés ( publique et privée ) &amp;lt;app&amp;gt;ssh&amp;lt;/app&amp;gt;.&lt;br /&gt;
# Génération de la paire de clé&lt;br /&gt;
#* Sous GNU/Linux, il suffit de lancer la commande&amp;lt;pre&amp;gt; ssh-keygen -t rsa&amp;lt;/pre&amp;gt;&lt;br /&gt;
#* Sous Windows il faut utiliser le programme &amp;lt;app&amp;gt;puttygen.exe&amp;lt;/app&amp;gt; pour générer la paire de clé. La clé publique porte l&#039;extension &#039;&#039;&#039;pub&#039;&#039;&#039; et la clé privé &#039;&#039;&#039;ppk&#039;&#039;&#039;.&amp;lt;br&amp;gt;Il faut ensuite utiliser un agent ( ex: &amp;lt;app&amp;gt;pageant.exe&amp;lt;/app&amp;gt; )&lt;br /&gt;
#Puis il faut insérer le contenu de la clé publique ( à la suite des autres ) dans le fichier &amp;lt;path&amp;gt;/var/lib/git/.ssh/authorized_keys&amp;lt;/path&amp;gt; sur le serveur.&amp;lt;br&amp;gt;Afin de tester avant le checkout, on doit pouvoir se connecter au serveur sans mot de passe&amp;lt;pre&amp;gt; ssh git@didier.tartarefr.eu&amp;lt;/pre&amp;gt;&lt;br /&gt;
# Si le login est possible, on peut alors obtenir une copie du dépôt&amp;lt;pre&amp;gt;git clone git@didier.tartarefr.eu/rpm&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ajout d&#039;un paquet ===&lt;br /&gt;
{{Admon/todo}}&lt;br /&gt;
=== Mise à jour d&#039;un paquet ===&lt;br /&gt;
{{Admon/todo}}&lt;br /&gt;
&lt;br /&gt;
== Mise à jour du koji ==&lt;br /&gt;
&lt;br /&gt;
La mise à jour du koji est sensible. En effet, les versions doivent correspondre entre le hub, le web, et même les builders.&lt;br /&gt;
&lt;br /&gt;
Si les composants sont sur des machines virtuelles, il est préférable de sauvegarder la vm (a minima de faire un snapshot, ou bien un export) avant de lancer la mise à jour.&lt;br /&gt;
&lt;br /&gt;
== F.A.Q. ==&lt;br /&gt;
&lt;br /&gt;
=== Comment supprimer un paquet sans aucun build associé ===&lt;br /&gt;
Pour un problème de nom incorrect de paquet ou pour d&#039;autre raisons, il est nécessaire de modifier directement la base de données, car aucune commande existe.&lt;br /&gt;
&lt;br /&gt;
Si aucun build n&#039;est associé à ce paquet, il n&#039;est référencé que dans deux tables:&lt;br /&gt;
* package&lt;br /&gt;
* tag_packages&lt;br /&gt;
&lt;br /&gt;
On se place sur le serveur &amp;lt;package&amp;gt;Koji&amp;lt;/package&amp;gt; et on se loggue avec l&#039;utilisateur koji&lt;br /&gt;
&lt;br /&gt;
 # su - koji&lt;br /&gt;
 $ psql -U koji koji&lt;br /&gt;
&lt;br /&gt;
Remplacer commit par rollback si quelque chose ne se passe pas bien, afin d&#039;annuler la transaction.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
begin;&lt;br /&gt;
delete from tag_packages where package_id = (select id from package where name = &#039;SOME-TYPO&#039;);&lt;br /&gt;
delete from package where name = &#039;SOME-TYPO&#039;;&lt;br /&gt;
commit;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== BuildrootError: could not init mock buildroot, mock exited with status 30 ===&lt;br /&gt;
&lt;br /&gt;
Et dans le fichier &amp;lt;path&amp;gt;root.log&amp;lt;/path&amp;gt; associé au build, on retrouve l&#039;erreur: &#039;&#039;Package does not match intended download&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Il faut lancer manuellement la régénération du dépôt&lt;br /&gt;
 koji regen-repo centos-6-build&lt;br /&gt;
&lt;br /&gt;
=== Construction du SRPM en erreur ===&lt;br /&gt;
&lt;br /&gt;
* Il faut regarder que le répertoire ne contient pas de fichier nommé &amp;lt;path&amp;gt;sources&amp;lt;/path&amp;gt;, car koji télécharge les sources en faisant &amp;lt;pre&amp;gt;make sources&amp;lt;/pre&amp;gt;et la cible du Makefile est donc à jour.&lt;br /&gt;
* Le paquet n&#039;est pas inclus au dépôt. Il faut l&#039;inclure comme ceci&amp;lt;pre&amp;gt;koji add-pkg centos-6 --owner didier &amp;lt;MON PAQUET&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Utilisation du repository ==&lt;br /&gt;
&lt;br /&gt;
Il suffit de renseigné &amp;lt;package&amp;gt;yum&amp;lt;/package&amp;gt; pour qu&#039;il pointe sur le repository&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;http://koji.tartarefr.eu/kojifiles/repos/centos-6-build/latest/$basearch&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Skins ==&lt;br /&gt;
Modification à partir du thème osg&amp;lt;ref&amp;gt;https://github.com/djw8605/osg-koji-theme&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Fichier:IconTodo48.png&amp;diff=148</id>
		<title>Fichier:IconTodo48.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Fichier:IconTodo48.png&amp;diff=148"/>
		<updated>2017-04-20T10:17:05Z</updated>

		<summary type="html">&lt;p&gt;Didier : Icone Todo 48 pixels&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Icone Todo 48 pixels&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Mod%C3%A8le:Admon/todo&amp;diff=147</id>
		<title>Modèle:Admon/todo</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Mod%C3%A8le:Admon/todo&amp;diff=147"/>
		<updated>2017-04-20T10:15:31Z</updated>

		<summary type="html">&lt;p&gt;Didier : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{high-risk template|pagecount=all pages}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{message|{{color|red|{{#if:{{{1|}}}| {{{1}}}|&#039;&#039;&#039;TODO&#039;&#039;&#039;&lt;br /&gt;
* étape #1&lt;br /&gt;
* étape #2&lt;br /&gt;
}}}}|image=IconTodo48.png|bgcolor=#cccccc|bdcolor=#c5d7e0}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{tempdoc}}[[Category:Admonition templates]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Mod%C3%A8le:Admon/todo&amp;diff=146</id>
		<title>Modèle:Admon/todo</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Mod%C3%A8le:Admon/todo&amp;diff=146"/>
		<updated>2017-04-20T10:11:10Z</updated>

		<summary type="html">&lt;p&gt;Didier : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{high-risk template|pagecount=all pages}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{message|{{color|red|{{#if:{{{1|}}}| &#039;&#039;&#039;{{{1}}}&#039;&#039;&#039;|&#039;&#039;&#039;TODO&#039;&#039;&#039;}}}}|image=IconTodo48.png|bgcolor=#cccccc|bdcolor=#c5d7e0}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{tempdoc}}[[Category:Admonition templates]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Tuto/Edit&amp;diff=145</id>
		<title>Tuto/Edit</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Tuto/Edit&amp;diff=145"/>
		<updated>2017-04-20T10:09:19Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Ajouter une note d&amp;#039;auteur ( simple, importante, avertissement, astuce, auteur original ) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Syntaxe =&lt;br /&gt;
* Aide générale sur la syntaxe: http://fr.wikipedia.org/wiki/Aide:Syntaxe&lt;br /&gt;
* Mot clés de Mediawiki: http://www.mediawiki.org/wiki/Help:Magic_words&lt;br /&gt;
&lt;br /&gt;
= Règle de base =&lt;br /&gt;
La recherche dans les pages du wiki ainsi et que la maintenance de celui-ci est grandement facilité par l&#039;ajout de catégorie sur chaque page.&lt;br /&gt;
&lt;br /&gt;
= Modification générale de MediaWiki =&lt;br /&gt;
Tous les changements de cette section doivent être édité avec le compte administrateur.&lt;br /&gt;
* &#039;&#039;&#039;Menu latéral&#039;&#039;&#039;: [[MediaWiki:Sidebar]]&lt;br /&gt;
* &#039;&#039;&#039;Ajout de CSS à tous les styles&#039;&#039;&#039;: [[MediaWiki:Common.css]]&lt;br /&gt;
* &#039;&#039;&#039;Ajout de CSS pour l&#039;impression&#039;&#039;&#039;: [[MediaWiki:Print.css]]&lt;br /&gt;
&lt;br /&gt;
= Modules intégrés =&lt;br /&gt;
==Upload de fichier==&lt;br /&gt;
&lt;br /&gt;
Page d&#039;aide sur la configuration de l&#039;upload de fichiers &amp;lt;ref&amp;gt;http://www.mediawiki.org/wiki/Manual:Configuring_file_uploads&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tableau==&lt;br /&gt;
Page d&#039;aide sur les tableaux &amp;lt;ref&amp;gt;http://www.mediawiki.org/wiki/Help:Tables/fr&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple d&#039;utilisation&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Titre du tableau&lt;br /&gt;
!Titre de colonne1&lt;br /&gt;
!Titre de colonne2&lt;br /&gt;
|-&lt;br /&gt;
|Cellule 1 sur la ligne 1&lt;br /&gt;
|Cellule 2 sur la ligne 1&lt;br /&gt;
|-&lt;br /&gt;
|Cellule 1 sur la ligne 2&lt;br /&gt;
|Cellule 2 sur la ligne 2&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Titre du tableau&amp;lt;br&amp;gt;&lt;br /&gt;
!Titre de colonne1&lt;br /&gt;
!Titre de colonne2&lt;br /&gt;
|-&lt;br /&gt;
|Cellule 1 sur la ligne 1&lt;br /&gt;
|Cellule 2 sur la ligne 1&lt;br /&gt;
|-&lt;br /&gt;
|Cellule 1 sur la ligne 2&lt;br /&gt;
|Cellule 2 sur la ligne 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Modules supplémentaires =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CategoryTree&#039;&#039;&#039;: Afficher une vue en arbre des catégories&amp;lt;ref&amp;gt;http://www.mediawiki.org/wiki/Extension:CategoryTree/fr&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Cite&#039;&#039;&#039;: Créer des notes de bas de page, collection de références, etc...&amp;lt;ref&amp;gt;http://www.mediawiki.org/wiki/Extension:Cite/Cite.php&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;ParserFunctions&#039;&#039;&#039;: Fonctions avancées pour les extensions&amp;lt;ref&amp;gt;http://www.mediawiki.org/wiki/Help:Extension:ParserFunctions/fr&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Mpdf&#039;&#039;&#039;: Export de page en PDF&amp;lt;ref&amp;gt;http://www.mediawiki.org/wiki/Extension:Mpdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SyntaxHighlight_GeSHi&#039;&#039;&#039;: Coloration syntaxique de code source&amp;lt;ref&amp;gt;http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;RandomImage&#039;&#039;&#039;: Ajout d&#039;une image aléatoire&amp;lt;ref&amp;gt;http://www.mediawiki.org/wiki/Extension:RandomImage&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SSL_authentification&#039;&#039;&#039;: Authentification via un certificat&amp;lt;ref&amp;gt;http://www.mediawiki.org/wiki/Extension:SSL_authentication&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;CustomTag&#039;&#039;&#039;: Permet l&#039;usage des tags suivants dans le code wiki ( en ligne )&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;&amp;lt;path&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; Affichage du path ex: &amp;lt;path&amp;gt;/home/user&amp;lt;/path&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;&amp;lt;package&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; Affichage du nom du paquet ex: &amp;lt;package&amp;gt;perl-ExtUtils-MakeMaker&amp;lt;/package&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;&amp;lt;app&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; Affichage du nom de l&#039;application ex: &amp;lt;app&amp;gt;vim&amp;lt;/app&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;&amp;lt;class&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; Affichage du nom de la class ex: &amp;lt;class&amp;gt;KVirtualView&amp;lt;/class&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Macros définies permettant un affichage spécial =&lt;br /&gt;
&lt;br /&gt;
== Mettre en valeur un mot ==&lt;br /&gt;
* &#039;&#039;&#039;class&#039;&#039;&#039; pour mettre en valeur un nom de class ( en ligne ) {{class|KVirtual}}&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{class|KVirtual}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;path&#039;&#039;&#039; pour mettre en valeur un chemin ( en ligne ), ex: {{path|/home/user}}&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{path|/home/user}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;filename&#039;&#039;&#039; pour mettre en valeur un nom de fichier ( en ligne ), ex: {{filename|/etc/mail/aliases}}&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{filename|/etc/mail/aliases}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; pour mettre en valeur un nom de paquet ( en ligne ), ex: {{package|perl-ExtUtils-MakeMaker}}&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{package|perl-ExtUtils-MakeMaker}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;app&#039;&#039;&#039; pour mettre en valeur un nom d&#039;application ( en ligne ), ex: {{app|vim}}&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{app|vim}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;code&#039;&#039;&#039; pour mettre en valeur un morceau de code ( en ligne ), ex: {{code|find /etc -type f -name &#039;*.conf&#039;}}&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{code|find /etc -type f -name &#039;*.conf&#039;}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;command&#039;&#039;&#039; pour mettre en valeur une commande ( en ligne ), ex: {{command|find /etc -type f -name &#039;*.conf&#039;}}&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{command|find /etc -type f -name &#039;*.conf&#039;}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;color&#039;&#039;&#039; pour mettre en couleur un mot ( en ligne ), ex: {{color|red|mots en couleur}}&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{color|red|mots en couleur}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ajouter une note d&#039;auteur ( simple, importante, avertissement, astuce, auteur original ) ==&lt;br /&gt;
* &#039;&#039;&#039;Admon/note&#039;&#039;&#039; pour écrire une note d&#039;information&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{Admon/note|Titre|texte optionnel de la note}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{Admon/note|Titre|texte optionnel de la note}}&lt;br /&gt;
* &#039;&#039;&#039;Admon/warning&#039;&#039;&#039; pour écrire un avertissement bien visible&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{Admon/warning|Titre|Texte optionnel du warning}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{Admon/warning|Titre|Texte optionnel du warning}}&lt;br /&gt;
* &#039;&#039;&#039;Admon/important&#039;&#039;&#039; pour écrire une note très importante&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{Admon/important|Titre|Texte optionnel de la note importante}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{Admon/important|Titre|Texte optionnel de la note importante}}&lt;br /&gt;
* &#039;&#039;&#039;Admon/tip&#039;&#039;&#039; pour écrire une astuce bien visible&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{Admon/tip|Titre|Texte optionnel de l&#039;astuce}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{Admon/tip|Titre|Texte optionnel de l&#039;astuce}}&lt;br /&gt;
* &#039;&#039;&#039;Admon/bug&#039;&#039;&#039; pour signaler un bug&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{Admon/bug|Titre|Texte optionnel du bug}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{Admon/bug|Titre|Texte optionnel du bug}}&lt;br /&gt;
* &#039;&#039;&#039;Admon/faq&#039;&#039;&#039; pour écrire une question réponse&lt;br /&gt;
{{Admon/faq|Question|Answer}}&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{Admon/faq|Question|Answer}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;author&#039;&#039;&#039; pour afficher les auteurs et les participants éventuels lorsqu&#039;il s&#039;agit d&#039;une page recopié d&#039;un autre wiki.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{author|author=Auteur original|othersauthors=Liste des participants éventuels (paramètre optionnel)|url=Lien vers l&#039;URL d&#039;origine (paramètre optionnel)}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{author|author=Auteur original|othersauthors=Liste des participants éventuels (paramètre optionnel)|url=Lien vers l&#039;URL d&#039;origine (paramètre optionnel)}}&lt;br /&gt;
* &#039;&#039;&#039;Admon/todo&#039;&#039;&#039; pour écrire une liste de chose à faire (TODO)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{Admon/todo|TODO Liste&lt;br /&gt;
 * étape 1&lt;br /&gt;
 * étape 2}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{Admon/todo|TODO Liste&lt;br /&gt;
* étape 1&lt;br /&gt;
* étape 2}}&lt;br /&gt;
* &#039;&#039;&#039;Admon/file&#039;&#039;&#039; pour afficher un ficher texte&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{Admon/file|Chemin du fichier|&lt;br /&gt;
 &amp;lt;pre&amp;gt;&lt;br /&gt;
 ligne 1&lt;br /&gt;
 ligne2&lt;br /&gt;
 &amp;lt;/pre&amp;gt;}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{Admon/file|Chemin du fichier|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ligne 1&lt;br /&gt;
ligne 2&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Smileys ==&lt;br /&gt;
* &#039;&#039;&#039;Admon/smiley&#039;&#039;&#039;&lt;br /&gt;
Good Job {{Admon/smiley|:)}}&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{Admon/smiley|:)}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{:Modèle:Admon/smiley/example}}&lt;br /&gt;
&lt;br /&gt;
Consultez le [http://meta.wikimedia.org/wiki/Aide:Contenu Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel.&lt;br /&gt;
&lt;br /&gt;
= Langages supportés par l&#039;extension de coloration syntaxique =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;CODE&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float:left;margin-right:20px;&amp;quot;&lt;br /&gt;
!Code||Language&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;abap&amp;lt;/code&amp;gt;||ABAP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;actionscript&amp;lt;/code&amp;gt;||ActionScript&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;ada&amp;lt;/code&amp;gt;||Ada&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;apache&amp;lt;/code&amp;gt;||Apache Configuration&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;applescript&amp;lt;/code&amp;gt;||AppleScript&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;asm&amp;lt;/code&amp;gt;||Assembly&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;asp&amp;lt;/code&amp;gt;||Active Server Pages (ASP)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;autoit&amp;lt;/code&amp;gt;||AutoIt&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt;||Bash&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;basic4gl&amp;lt;/code&amp;gt;||Basic4GL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;bf&amp;lt;/code&amp;gt;||Brainfuck&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;blitzbasic&amp;lt;/code&amp;gt;||Blitz BASIC&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;bnf&amp;lt;/code&amp;gt;||Backus-Naur Form&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;||C&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;c_mac&amp;lt;/code&amp;gt;||C (Mac)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;caddcl&amp;lt;/code&amp;gt;||AutoCAD DCL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cadlisp&amp;lt;/code&amp;gt;||AutoLISP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cfdg&amp;lt;/code&amp;gt;||CFDG&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cfm&amp;lt;/code&amp;gt;||ColdFusion Markup Language&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cil&amp;lt;/code&amp;gt;||Common Intermediate Language (CIL)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cobol&amp;lt;/code&amp;gt;||COBOL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cpp-qt&amp;lt;/code&amp;gt;||C++ (Qt toolkit)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cpp&amp;lt;/code&amp;gt;||C++&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;csharp&amp;lt;/code&amp;gt;||C#&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;css&amp;lt;/code&amp;gt;||Cascading Style Sheets (CSS)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt;||D&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;delphi&amp;lt;/code&amp;gt;||Delphi&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;diff&amp;lt;/code&amp;gt;||Diff&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt;||DIV&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;dos&amp;lt;/code&amp;gt;||DOS batch file&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;dot&amp;lt;/code&amp;gt;||DOT&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;eiffel&amp;lt;/code&amp;gt;||Eiffel&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fortran&amp;lt;/code&amp;gt;||Fortran&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;freebasic&amp;lt;/code&amp;gt;||FreeBASIC&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;genero&amp;lt;/code&amp;gt;||Genero&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;gettext&amp;lt;/code&amp;gt;||GNU internationalization (i18n) library&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;glsl&amp;lt;/code&amp;gt;||OpenGL Shading Language (GLSL)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;gml&amp;lt;/code&amp;gt;||Game Maker Language (GML)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;gnuplot&amp;lt;/code&amp;gt;||gnuplot&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;groovy&amp;lt;/code&amp;gt;||Groovy&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;haskell&amp;lt;/code&amp;gt;||Haskell&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;hq9plus&amp;lt;/code&amp;gt;||HQ9+&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;html4strict&amp;lt;/code&amp;gt;||HTML&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;idl&amp;lt;/code&amp;gt;||Uno IDL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;ini&amp;lt;/code&amp;gt;||INI&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;inno&amp;lt;/code&amp;gt;||Inno&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;intercal&amp;lt;/code&amp;gt;||INTERCAL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt;||Io&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;java&amp;lt;/code&amp;gt;||Java&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;java5&amp;lt;/code&amp;gt;||Java(TM) 2 Platform Standard Edition 5.0 &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;javascript&amp;lt;/code&amp;gt;||JavaScript&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;kixtart&amp;lt;/code&amp;gt;||KiXtart&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;klonec&amp;lt;/code&amp;gt;||Klone C&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;klonecpp&amp;lt;/code&amp;gt;||Klone C++&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;latex&amp;lt;/code&amp;gt;||LaTeX&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;lisp&amp;lt;/code&amp;gt;||Lisp&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;lolcode&amp;lt;/code&amp;gt;||LOLCODE&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;lotusscript&amp;lt;/code&amp;gt;||LotusScript&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;lua&amp;lt;/code&amp;gt;||Lua&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float:left&amp;quot;&lt;br /&gt;
!Code||Language&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;m68k&amp;lt;/code&amp;gt;||Motorola 68000 Assembler&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;||make&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;matlab&amp;lt;/code&amp;gt;||MATLAB M&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mirc&amp;lt;/code&amp;gt;||mIRC scripting language&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mxml&amp;lt;/code&amp;gt;||MXML&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mpasm&amp;lt;/code&amp;gt;||Microchip Assembler&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt;||MySQL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;nsis&amp;lt;/code&amp;gt;||Nullsoft Scriptable Install System (NSIS)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;objc&amp;lt;/code&amp;gt;||Objective-C&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;ocaml-brief&amp;lt;/code&amp;gt;||OCaml&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;ocaml&amp;lt;/code&amp;gt;||OCaml&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;oobas&amp;lt;/code&amp;gt;||OpenOffice.org Basic&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;oracle8&amp;lt;/code&amp;gt;||Oracle 8 SQL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;oracle11&amp;lt;/code&amp;gt;||Oracle 11 SQL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;pascal&amp;lt;/code&amp;gt;||Pascal&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;per&amp;lt;/code&amp;gt;||per&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;perl&amp;lt;/code&amp;gt;||Perl&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;php-brief&amp;lt;/code&amp;gt;||PHP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt;||PHP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;pixelbender&amp;lt;/code&amp;gt;||Pixel Bender&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;plsql&amp;lt;/code&amp;gt;||PL/SQL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;povray&amp;lt;/code&amp;gt;||Persistence of Vision Raytracer&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;powershell&amp;lt;/code&amp;gt;||Windows PowerShell&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;progress&amp;lt;/code&amp;gt;||OpenEdge Advanced Business Language&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;prolog&amp;lt;/code&amp;gt;||Prolog&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;providex&amp;lt;/code&amp;gt;||ProvideX&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;python&amp;lt;/code&amp;gt;||Python&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;qbasic&amp;lt;/code&amp;gt;||QBasic/QuickBASIC&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;rails&amp;lt;/code&amp;gt;||Rails&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;reg&amp;lt;/code&amp;gt;||Windows Registry&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;robots&amp;lt;/code&amp;gt;||robots.txt&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;ruby&amp;lt;/code&amp;gt;||Ruby&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;sas&amp;lt;/code&amp;gt;||SAS&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;scala&amp;lt;/code&amp;gt;||Scala&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;scheme&amp;lt;/code&amp;gt;||Scheme&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;scilab&amp;lt;/code&amp;gt;||Scilab&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;sdlbasic&amp;lt;/code&amp;gt;||SdlBasic&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;smalltalk&amp;lt;/code&amp;gt;||Smalltalk&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;smarty&amp;lt;/code&amp;gt;||Smarty&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;sql&amp;lt;/code&amp;gt;||SQL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;tcl&amp;lt;/code&amp;gt;||Tcl&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;teraterm&amp;lt;/code&amp;gt;||Tera Term&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt;||Plain text&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;thinbasic&amp;lt;/code&amp;gt;||thinBasic&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;tsql&amp;lt;/code&amp;gt;||Transact-SQL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;typoscript&amp;lt;/code&amp;gt;||TypoScript&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;vb&amp;lt;/code&amp;gt;||Visual Basic&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;vbnet&amp;lt;/code&amp;gt;||Visual Basic .NET&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;verilog&amp;lt;/code&amp;gt;||Verilog&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;vhdl&amp;lt;/code&amp;gt;||VHDL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;vim&amp;lt;/code&amp;gt;||Vimscript&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;visualfoxpro&amp;lt;/code&amp;gt;||Visual FoxPro&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;visualprolog&amp;lt;/code&amp;gt;||Visual Prolog&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;whitespace&amp;lt;/code&amp;gt;||Whitespace&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;winbatch&amp;lt;/code&amp;gt;||Winbatch&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xml&amp;lt;/code&amp;gt;||XML&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xorg_conf&amp;lt;/code&amp;gt;||Xorg.conf&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xpp&amp;lt;/code&amp;gt;||X++&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;z80&amp;lt;/code&amp;gt;||ZiLOG Z80 Assembler&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Mod%C3%A8le:Admon/todo&amp;diff=144</id>
		<title>Modèle:Admon/todo</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Mod%C3%A8le:Admon/todo&amp;diff=144"/>
		<updated>2017-04-20T09:59:25Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « &amp;lt;noinclude&amp;gt;{{high-risk template|pagecount=all pages}}&amp;lt;/noinclude&amp;gt; {{message|{{color|red|{{#if:{{{1|}}}| &amp;#039;&amp;#039;&amp;#039;{{{1}}}&amp;#039;&amp;#039;&amp;#039;|&amp;#039;&amp;#039;&amp;#039;TODO&amp;#039;&amp;#039;&amp;#039;}}}}|image=Todo.png|bgcolor=#cccccc|bdcolor... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{high-risk template|pagecount=all pages}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{message|{{color|red|{{#if:{{{1|}}}| &#039;&#039;&#039;{{{1}}}&#039;&#039;&#039;|&#039;&#039;&#039;TODO&#039;&#039;&#039;}}}}|image=Todo.png|bgcolor=#cccccc|bdcolor=#c5d7e0}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{tempdoc}}[[Category:Admonition templates]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Koji/Bootstrap&amp;diff=143</id>
		<title>Koji/Bootstrap</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Koji/Bootstrap&amp;diff=143"/>
		<updated>2017-04-20T09:46:31Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « = Commandes utiles =  Il est nécessaire de régénerer le dépôt régulièrement car &amp;lt;package&amp;gt;Koji&amp;lt;/package&amp;gt; ne prend pas automatiquement en compte la mise à jour des d... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Commandes utiles =&lt;br /&gt;
&lt;br /&gt;
Il est nécessaire de régénerer le dépôt régulièrement car &amp;lt;package&amp;gt;Koji&amp;lt;/package&amp;gt; ne prend pas automatiquement en compte la mise à jour des dépôts externes.&lt;br /&gt;
 koji regen-repo centos-6-build&lt;br /&gt;
&lt;br /&gt;
Il peut être intéressant d&#039;en faire une tâche cron.&lt;br /&gt;
&lt;br /&gt;
= Bootstrap =&lt;br /&gt;
&lt;br /&gt;
== CentOS 5 ==&lt;br /&gt;
&lt;br /&gt;
=== Ajout des tags ===&lt;br /&gt;
 koji add-tag centos-5&lt;br /&gt;
 koji add-tag --parent &amp;quot;centos-5&amp;quot; --arches &#039;i386 x86_64&#039; centos-5-build&lt;br /&gt;
&lt;br /&gt;
=== Ajout des groupes ===&lt;br /&gt;
 koji add-group centos-5-build build&lt;br /&gt;
 koji add-group centos-5-build srpm-build&lt;br /&gt;
&lt;br /&gt;
=== Ajout des cibles ===&lt;br /&gt;
 koji add-target centos-5 centos-5-build&lt;br /&gt;
&lt;br /&gt;
=== Ajout des repositories externes ===&lt;br /&gt;
&lt;br /&gt;
 koji add-external-repo -t centos-5-build -p 10 centos-5-external-core &amp;lt;nowiki&amp;gt;http://mirrors.ircam.fr/pub/CentOS/5/os/\$arch&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 koji add-external-repo -t centos-5-build -p 5 centos-5-external-update &amp;lt;nowiki&amp;gt;http://mirrors.ircam.fr/pub/CentOS/5/updates/\$arch&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 koji add-external-repo -t centos-5-build -p 15 centos-5-external-builsys &amp;lt;nowiki&amp;gt;http://buildsys.fedoraproject.org/buildgroups/rhel5/\$arch&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 koji add-external-repo -t centos-5-build -p 20 centos-5-external-rpmforge &amp;lt;nowiki&amp;gt;http://apt.sw.be/redhat/el5/en/\$arch/rpmforge&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 koji add-external-repo -t centos-5-build -p 25 centos-5-external-epel &amp;lt;nowiki&amp;gt;http://mirrors.ircam.fr/pub/fedora/epel/5/\$arch&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ajout de la liste des paquets ===&lt;br /&gt;
Cette liste définie les paquets pour une installation la plus minimaliste possible&lt;br /&gt;
&lt;br /&gt;
 koji add-group-pkg centos-5-build build bash bzip2 coreutils cpio diffutils \&lt;br /&gt;
 	findutils gawk gcc grep sed gcc-c++ gzip info patch redhat-rpm-config \&lt;br /&gt;
 	rpm-build shadow-utils tar unzip util-linux-ng which make buildsys-macros \&lt;br /&gt;
 	redhat-release curl&lt;br /&gt;
 &lt;br /&gt;
 koji add-group-pkg centos-5-build srpm-build bash buildsys-macros curl \&lt;br /&gt;
 	redhat-release make redhat-rpm-config rpm-build shadow-utils&lt;br /&gt;
&lt;br /&gt;
=== Ajout éventuelle de paquets externes ===&lt;br /&gt;
 koji add-pkg centos-5 centos/5/RPMS/SRPMS/*.rpm&lt;br /&gt;
 koji add-pkg centos-5 centos/5/RPMS/*.rpm&lt;br /&gt;
&lt;br /&gt;
== CentOS 6 ==&lt;br /&gt;
&lt;br /&gt;
=== Ajout des tags ===&lt;br /&gt;
 koji add-tag centos-6&lt;br /&gt;
 koji add-tag --parent &amp;quot;centos-6&amp;quot; --arches &#039;i686 x86_64&#039; centos-6-build&lt;br /&gt;
&lt;br /&gt;
=== Ajout des groupes ===&lt;br /&gt;
 koji add-group centos-6-build build&lt;br /&gt;
 koji add-group centos-6-build srpm-build&lt;br /&gt;
&lt;br /&gt;
=== Ajout des cibles ===&lt;br /&gt;
 koji add-target centos-6 centos-6-build&lt;br /&gt;
&lt;br /&gt;
=== Ajout des repositories externes ===&lt;br /&gt;
 koji add-external-repo -t centos-6-build -p 10 centos-6-external-core &amp;lt;nowiki&amp;gt;http://mirrors.ircam.fr/pub/CentOS/6/os/\$arch&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 koji add-external-repo -t centos-6-build -p 5 centos-6-external-update &amp;lt;nowiki&amp;gt;http://mirrors.ircam.fr/pub/CentOS/6/updates/\$arch&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 koji add-external-repo -t centos-6-build -p 15 centos-6-external-rpmforge &amp;lt;nowiki&amp;gt;http://apt.sw.be/redhat/el6/en/\$arch/rpmforge&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 koji add-external-repo -t centos-6-build -p 20 centos-6-external-epel &amp;lt;nowiki&amp;gt;http://mirrors.ircam.fr/pub/fedora/epel/6/\$arch&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ajout de la liste des paquets ===&lt;br /&gt;
 koji add-group-pkg centos-6-build build bash bzip2 coreutils cpio diffutils \&lt;br /&gt;
 	findutils gawk gcc grep sed gcc-c++ gzip info patch redhat-rpm-config \&lt;br /&gt;
 	rpm-build shadow-utils tar unzip util-linux-ng which make buildsys-macros \&lt;br /&gt;
 	redhat-release centos-release curl&lt;br /&gt;
 &lt;br /&gt;
 koji add-group-pkg centos-6-build srpm-build bash buildsys-macros curl \&lt;br /&gt;
 	redhat-release centos-release make redhat-rpm-config rpm-build shadow-utils&lt;br /&gt;
&lt;br /&gt;
== Fedora 17 ==&lt;br /&gt;
&lt;br /&gt;
=== Ajout des tags ===&lt;br /&gt;
 koji add-tag fedora-17&lt;br /&gt;
 koji add-tag --parent &#039;fedora-17&#039; --arches &#039;i686 x86_64&#039; fedora-17-build&lt;br /&gt;
&lt;br /&gt;
=== Ajout des groupes ===&lt;br /&gt;
 koji add-group fedora-17-build build&lt;br /&gt;
 koji add-group fedora-17-build srpm-build&lt;br /&gt;
&lt;br /&gt;
=== Ajout des cibles ===&lt;br /&gt;
 koji add-target fedora-17 fedora-17-build&lt;br /&gt;
&lt;br /&gt;
=== Ajout des repositories externes ===&lt;br /&gt;
 koji add-external-repo -t fedora-17-build -p 10 fedora-17-external-core &amp;lt;nowiki&amp;gt;http://fedora.mirrors.ovh.net/linux/releases/17/Everything/\$arch/os&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 koji add-external-repo -t fedora-17-build -p 5 fedora-17-external-update &amp;lt;nowiki&amp;gt;http://mir01.syntis.net/fedora/linux/updates/17/\$arch&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 koji add-external-repo -t fedora-17-build -p 15 fedora-17-external-rpmfusion-free-core &amp;lt;nowiki&amp;gt;http://download1.rpmfusion.org/free/fedora/releases/17/Everything\$arch/os&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 koji add-external-repo -t fedora-17-build -p 11 fedora-17-external-rpmfusion-free-update &amp;lt;nowiki&amp;gt;http://download1.rpmfusion.org/free/fedora/updates/17/\$arch&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ajout de la liste des paquets ===&lt;br /&gt;
 koji add-group-pkg fedora-17-build build bash bzip2 coreutils cpio diffutils \&lt;br /&gt;
 	findutils gawk gcc grep sed gcc-c++ gzip info patch redhat-rpm-config \&lt;br /&gt;
 	rpm-build shadow-utils tar unzip util-linux-ng which make buildsys-macros-6 \&lt;br /&gt;
 	fedora-release curl&lt;br /&gt;
 &lt;br /&gt;
 koji add-group-pkg fedora-17-build srpm-build bash buildsys-macros-6 curl \&lt;br /&gt;
 	fedora-release make redhat-rpm-config rpm-build shadow-utils&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:RPM|Bootstrap Koji]]&lt;br /&gt;
[[Catégorie:Koji|Bootstrap]]&lt;br /&gt;
[[Catégorie:Server|Bootstrap Koji]]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=RPM/Mash&amp;diff=142</id>
		<title>RPM/Mash</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=RPM/Mash&amp;diff=142"/>
		<updated>2017-04-20T09:44:49Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Présentation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Mash&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Présentation ==&lt;br /&gt;
&amp;lt;app&amp;gt;Mash&amp;lt;/app&amp;gt; est un outil qui interroge [[Koji/Utilisation|Koji]] afin d&#039;obtenir les RPMs pour un tag donné et qui créer un dépôt directement utilisable avec ceux-ci.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
 yum install mash&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Configuration générale de mash ===&lt;br /&gt;
&lt;br /&gt;
Fichier &amp;lt;path&amp;gt;/etc/mash/mash.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[defaults]&lt;br /&gt;
configdir = /etc/mash&lt;br /&gt;
buildhost = http://koji.tartarefr.eu/kojihub&lt;br /&gt;
repodir = file:///mnt/koji&lt;br /&gt;
use_sqlite = True&lt;br /&gt;
use_repoview = True&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration du dépôt pour CentOS 5 ===&lt;br /&gt;
&lt;br /&gt;
Par défaut, {{package|mash}} créé une somme de vérification avec l&#039;algorythme sha256, ce qui est incompatible avec CentOS 5. On doit donc lui préciser d&#039;utiliser l&#039;algorythme sha1 en lieu et place.&lt;br /&gt;
&lt;br /&gt;
Fichier &amp;lt;path&amp;gt;/etc/mash/centos5.mash&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
# mash config file&lt;br /&gt;
&lt;br /&gt;
[5]&lt;br /&gt;
rpm_path = os/RPMS/%(arch)s/&lt;br /&gt;
repodata_path = os/RPMS/%(arch)s/&lt;br /&gt;
source_path = os/SRPMS&lt;br /&gt;
debuginfo = True&lt;br /&gt;
debuginfo_path = debug/%(arch)s/&lt;br /&gt;
multilib = True&lt;br /&gt;
multilib_method = devel&lt;br /&gt;
tag = centos-5&lt;br /&gt;
inherit = True&lt;br /&gt;
strict_keys = True&lt;br /&gt;
keys = 22B3B81A, 1ACA3465, A82BA4B7, 069C8460, 97A1071F, E8E40FDE, 57BBCCBA, D22E77F2, 4EBFC273, 0B86274E, 6DF2196F, DF9B0AE9, 773DF357&lt;br /&gt;
repoviewurl = http://koji.tartarefr.eu/repositories/&lt;br /&gt;
repoviewtitle = &amp;quot;CentOS 5 repository - %(arch)s&amp;quot;&lt;br /&gt;
arches = i386 x86_64&lt;br /&gt;
delta = True&lt;br /&gt;
# Change distro_tags as fedora-release version gets bumped&lt;br /&gt;
#distro_tags = cpe:/o:fedoraproject:fedora:17 rawhide&lt;br /&gt;
distro_tags = cpe:/o:centos:centos:5 centos-5&lt;br /&gt;
hash_packages = True&lt;br /&gt;
#make_ancient = True&lt;br /&gt;
hash = sha1&lt;br /&gt;
outputdir = /mnt/repos/centos&lt;br /&gt;
# This forces to also create older version of same package&lt;br /&gt;
latest = False&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration du dépôt pour CentOS 6 ===&lt;br /&gt;
&lt;br /&gt;
Fichier &amp;lt;path&amp;gt;/etc/mash/centos6.mash&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
# mash config file&lt;br /&gt;
&lt;br /&gt;
[6]&lt;br /&gt;
rpm_path = os/RPMS/%(arch)s/&lt;br /&gt;
repodata_path = os/RPMS/%(arch)s/&lt;br /&gt;
source_path = os/SRPMS&lt;br /&gt;
debuginfo = True&lt;br /&gt;
debuginfo_path = debug/%(arch)s/&lt;br /&gt;
multilib = True&lt;br /&gt;
multilib_method = devel&lt;br /&gt;
tag = centos-6&lt;br /&gt;
inherit = True&lt;br /&gt;
strict_keys = True&lt;br /&gt;
keys = 22B3B81A, 1ACA3465, A82BA4B7, 069C8460, 97A1071F, E8E40FDE, 57BBCCBA, D22E77F2, 4EBFC273, 0B86274E, 6DF2196F, DF9B0AE9, D3F3C56A&lt;br /&gt;
repoviewurl = http://koji.tartarefr.eu/repositories/&lt;br /&gt;
repoviewtitle = &amp;quot;CentOS 6 repository - %(arch)s&amp;quot;&lt;br /&gt;
arches = i386 x86_64&lt;br /&gt;
delta = True&lt;br /&gt;
# Change distro_tags as fedora-release version gets bumped&lt;br /&gt;
distro_tags = cpe:/o:centos:centos:6 centos-6&lt;br /&gt;
hash_packages = True&lt;br /&gt;
outputdir = /mnt/repos/centos&lt;br /&gt;
# This forces to also create older version of same package&lt;br /&gt;
latest = False&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration du dépôt pour fedora 20 ===&lt;br /&gt;
&lt;br /&gt;
Le fichier existe déjà (installé en même temps que &amp;lt;app&amp;gt;mash&amp;lt;/app&amp;gt;). Seul la version de fedora s&#039;incrémente au fur et à mesure des sorties de la distribution.&lt;br /&gt;
&lt;br /&gt;
Fichier &amp;lt;path&amp;gt;/etc/mash/branched.mash&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
# mash config file&lt;br /&gt;
&lt;br /&gt;
[20]&lt;br /&gt;
rpm_path = os/RPMS/%(arch)s/&lt;br /&gt;
repodata_path = os/RPMS/%(arch)s/&lt;br /&gt;
source_path = os/SRPMS&lt;br /&gt;
debuginfo = True&lt;br /&gt;
debuginfo_path = debug/%(arch)s/&lt;br /&gt;
multilib = True&lt;br /&gt;
multilib_method = devel&lt;br /&gt;
tag = fedora-20&lt;br /&gt;
inherit = True&lt;br /&gt;
strict_keys = True&lt;br /&gt;
keys = 246110C1&lt;br /&gt;
repoviewurl = http://koji.tartarefr.eu/repositories/&lt;br /&gt;
repoviewtitle = &amp;quot;Fedora 20 repository - %(arch)s&amp;quot;&lt;br /&gt;
arches = i386 x86_64 &lt;br /&gt;
delta = True&lt;br /&gt;
max_delta_rpm_size = 800000000&lt;br /&gt;
# Change distro_tags as fedora-release version gets bumped&lt;br /&gt;
distro_tags = cpe:/o:fedoraproject:fedora:20 Null&lt;br /&gt;
hash_packages = True&lt;br /&gt;
outputdir = /mnt/repositories/fedora&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mise en place d&#039;un alias ===&lt;br /&gt;
&lt;br /&gt;
Le répertoire &amp;lt;path&amp;gt;/mnt/repositories&amp;lt;/path&amp;gt; doit être accessible par HTTP. On ajoute donc un alias.&lt;br /&gt;
&lt;br /&gt;
Fichier &amp;lt;path&amp;gt;/etc/httpd/conf.d/mash.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
Alias /repositories &amp;quot;/mnt/repositories&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/mnt/repositories&amp;quot;&amp;gt;&lt;br /&gt;
        Options Indexes&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        Order allow,deny&lt;br /&gt;
        Allow from all&lt;br /&gt;
        Options +Indexes&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfModule mod_authz_core.c&amp;gt;&lt;br /&gt;
                # Apache 2.4&lt;br /&gt;
                Require all granted&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
        &amp;lt;IfModule !mod_authz_core.c&amp;gt;&lt;br /&gt;
                # Apache 2.2&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                Allow from all&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lancement de l&#039;outil ==&lt;br /&gt;
&lt;br /&gt;
=== Setup initial ===&lt;br /&gt;
On va simplement créé l&#039;arborescence nécessaire&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir /mnt/repos/{fedora,centos}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Création des dépôts ===&lt;br /&gt;
Création du dépôt pour CentOS 5&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mash 5&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Création du dépôt pour CentOS 6&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mash 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Création du dépôt pour Fedora 20&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mash 20&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== F.A.Q. ==&lt;br /&gt;
{{Admon/faq|Erreur yum.Errors.RpmDBError: Package tuple could not be found in rpmdb|Cette erreur se rencontre après avoir mis à jour &amp;lt;package&amp;gt;yum&amp;lt;/package&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce bug est répertorié chez RedHat&amp;lt;ref&amp;gt;https://bugzilla.redhat.com/show_bug.cgi?format=multiple&amp;amp;id=920758&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La correction est triviale, Il faut appliquer le patch suivant au fichier &amp;lt;path&amp;gt;/usr/lib/python2.6/site-packages/yum/depsolve.py&amp;lt;/path&amp;gt;( _checkFileRequires() caches the file requires of installed or to-be installed packages.  Update it when removing packages in TS_INSTALL_STATES from transaction).&amp;lt;ref&amp;gt;http://lists.baseurl.org/pipermail/yum-devel/2013-March/010022.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
diff -up a/depsolve.py b/depsolve.py&lt;br /&gt;
--- a/depsolve.py    2014-01-14 14:51:27.288392585 +0100&lt;br /&gt;
+++ b/depsolve.py.new        2014-01-14 14:51:17.683392467 +0100&lt;br /&gt;
@@ -808,6 +808,8 @@ class Depsolve(object):&lt;br /&gt;
                                     # Have to deal with loops!&lt;br /&gt;
                                     continue&lt;br /&gt;
                                 self.tsInfo.remove(otxmbr.pkgtup)&lt;br /&gt;
+                                ifr = self.installedFileRequires or {}&lt;br /&gt;
+                                ifr.pop(otxmbr.pkgtup, None)&lt;br /&gt;
                                 #  We need to remove an obsoleted entry that&lt;br /&gt;
                                 # was maybe used to resolve something ... ?&lt;br /&gt;
                                 CheckDeps = True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:RPM]]&lt;br /&gt;
[[Catégorie:Koji]]&lt;br /&gt;
[[Catégorie:Server]]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=RPM/Mash&amp;diff=141</id>
		<title>RPM/Mash</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=RPM/Mash&amp;diff=141"/>
		<updated>2017-04-20T09:42:52Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Configuration générale de mash */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Mash&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Présentation ==&lt;br /&gt;
&amp;lt;app&amp;gt;Mash&amp;lt;/app&amp;gt; est un outil qui interroge [[Koji|Koji]] afin d&#039;obtenir les RPMs pour un tag donné et qui créer un dépôt directement utilisable avec ceux-ci.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
 yum install mash&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Configuration générale de mash ===&lt;br /&gt;
&lt;br /&gt;
Fichier &amp;lt;path&amp;gt;/etc/mash/mash.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[defaults]&lt;br /&gt;
configdir = /etc/mash&lt;br /&gt;
buildhost = http://koji.tartarefr.eu/kojihub&lt;br /&gt;
repodir = file:///mnt/koji&lt;br /&gt;
use_sqlite = True&lt;br /&gt;
use_repoview = True&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration du dépôt pour CentOS 5 ===&lt;br /&gt;
&lt;br /&gt;
Par défaut, {{package|mash}} créé une somme de vérification avec l&#039;algorythme sha256, ce qui est incompatible avec CentOS 5. On doit donc lui préciser d&#039;utiliser l&#039;algorythme sha1 en lieu et place.&lt;br /&gt;
&lt;br /&gt;
Fichier &amp;lt;path&amp;gt;/etc/mash/centos5.mash&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
# mash config file&lt;br /&gt;
&lt;br /&gt;
[5]&lt;br /&gt;
rpm_path = os/RPMS/%(arch)s/&lt;br /&gt;
repodata_path = os/RPMS/%(arch)s/&lt;br /&gt;
source_path = os/SRPMS&lt;br /&gt;
debuginfo = True&lt;br /&gt;
debuginfo_path = debug/%(arch)s/&lt;br /&gt;
multilib = True&lt;br /&gt;
multilib_method = devel&lt;br /&gt;
tag = centos-5&lt;br /&gt;
inherit = True&lt;br /&gt;
strict_keys = True&lt;br /&gt;
keys = 22B3B81A, 1ACA3465, A82BA4B7, 069C8460, 97A1071F, E8E40FDE, 57BBCCBA, D22E77F2, 4EBFC273, 0B86274E, 6DF2196F, DF9B0AE9, 773DF357&lt;br /&gt;
repoviewurl = http://koji.tartarefr.eu/repositories/&lt;br /&gt;
repoviewtitle = &amp;quot;CentOS 5 repository - %(arch)s&amp;quot;&lt;br /&gt;
arches = i386 x86_64&lt;br /&gt;
delta = True&lt;br /&gt;
# Change distro_tags as fedora-release version gets bumped&lt;br /&gt;
#distro_tags = cpe:/o:fedoraproject:fedora:17 rawhide&lt;br /&gt;
distro_tags = cpe:/o:centos:centos:5 centos-5&lt;br /&gt;
hash_packages = True&lt;br /&gt;
#make_ancient = True&lt;br /&gt;
hash = sha1&lt;br /&gt;
outputdir = /mnt/repos/centos&lt;br /&gt;
# This forces to also create older version of same package&lt;br /&gt;
latest = False&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration du dépôt pour CentOS 6 ===&lt;br /&gt;
&lt;br /&gt;
Fichier &amp;lt;path&amp;gt;/etc/mash/centos6.mash&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
# mash config file&lt;br /&gt;
&lt;br /&gt;
[6]&lt;br /&gt;
rpm_path = os/RPMS/%(arch)s/&lt;br /&gt;
repodata_path = os/RPMS/%(arch)s/&lt;br /&gt;
source_path = os/SRPMS&lt;br /&gt;
debuginfo = True&lt;br /&gt;
debuginfo_path = debug/%(arch)s/&lt;br /&gt;
multilib = True&lt;br /&gt;
multilib_method = devel&lt;br /&gt;
tag = centos-6&lt;br /&gt;
inherit = True&lt;br /&gt;
strict_keys = True&lt;br /&gt;
keys = 22B3B81A, 1ACA3465, A82BA4B7, 069C8460, 97A1071F, E8E40FDE, 57BBCCBA, D22E77F2, 4EBFC273, 0B86274E, 6DF2196F, DF9B0AE9, D3F3C56A&lt;br /&gt;
repoviewurl = http://koji.tartarefr.eu/repositories/&lt;br /&gt;
repoviewtitle = &amp;quot;CentOS 6 repository - %(arch)s&amp;quot;&lt;br /&gt;
arches = i386 x86_64&lt;br /&gt;
delta = True&lt;br /&gt;
# Change distro_tags as fedora-release version gets bumped&lt;br /&gt;
distro_tags = cpe:/o:centos:centos:6 centos-6&lt;br /&gt;
hash_packages = True&lt;br /&gt;
outputdir = /mnt/repos/centos&lt;br /&gt;
# This forces to also create older version of same package&lt;br /&gt;
latest = False&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration du dépôt pour fedora 20 ===&lt;br /&gt;
&lt;br /&gt;
Le fichier existe déjà (installé en même temps que &amp;lt;app&amp;gt;mash&amp;lt;/app&amp;gt;). Seul la version de fedora s&#039;incrémente au fur et à mesure des sorties de la distribution.&lt;br /&gt;
&lt;br /&gt;
Fichier &amp;lt;path&amp;gt;/etc/mash/branched.mash&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
# mash config file&lt;br /&gt;
&lt;br /&gt;
[20]&lt;br /&gt;
rpm_path = os/RPMS/%(arch)s/&lt;br /&gt;
repodata_path = os/RPMS/%(arch)s/&lt;br /&gt;
source_path = os/SRPMS&lt;br /&gt;
debuginfo = True&lt;br /&gt;
debuginfo_path = debug/%(arch)s/&lt;br /&gt;
multilib = True&lt;br /&gt;
multilib_method = devel&lt;br /&gt;
tag = fedora-20&lt;br /&gt;
inherit = True&lt;br /&gt;
strict_keys = True&lt;br /&gt;
keys = 246110C1&lt;br /&gt;
repoviewurl = http://koji.tartarefr.eu/repositories/&lt;br /&gt;
repoviewtitle = &amp;quot;Fedora 20 repository - %(arch)s&amp;quot;&lt;br /&gt;
arches = i386 x86_64 &lt;br /&gt;
delta = True&lt;br /&gt;
max_delta_rpm_size = 800000000&lt;br /&gt;
# Change distro_tags as fedora-release version gets bumped&lt;br /&gt;
distro_tags = cpe:/o:fedoraproject:fedora:20 Null&lt;br /&gt;
hash_packages = True&lt;br /&gt;
outputdir = /mnt/repositories/fedora&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mise en place d&#039;un alias ===&lt;br /&gt;
&lt;br /&gt;
Le répertoire &amp;lt;path&amp;gt;/mnt/repositories&amp;lt;/path&amp;gt; doit être accessible par HTTP. On ajoute donc un alias.&lt;br /&gt;
&lt;br /&gt;
Fichier &amp;lt;path&amp;gt;/etc/httpd/conf.d/mash.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
Alias /repositories &amp;quot;/mnt/repositories&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/mnt/repositories&amp;quot;&amp;gt;&lt;br /&gt;
        Options Indexes&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        Order allow,deny&lt;br /&gt;
        Allow from all&lt;br /&gt;
        Options +Indexes&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfModule mod_authz_core.c&amp;gt;&lt;br /&gt;
                # Apache 2.4&lt;br /&gt;
                Require all granted&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
        &amp;lt;IfModule !mod_authz_core.c&amp;gt;&lt;br /&gt;
                # Apache 2.2&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                Allow from all&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lancement de l&#039;outil ==&lt;br /&gt;
&lt;br /&gt;
=== Setup initial ===&lt;br /&gt;
On va simplement créé l&#039;arborescence nécessaire&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir /mnt/repos/{fedora,centos}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Création des dépôts ===&lt;br /&gt;
Création du dépôt pour CentOS 5&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mash 5&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Création du dépôt pour CentOS 6&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mash 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Création du dépôt pour Fedora 20&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mash 20&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== F.A.Q. ==&lt;br /&gt;
{{Admon/faq|Erreur yum.Errors.RpmDBError: Package tuple could not be found in rpmdb|Cette erreur se rencontre après avoir mis à jour &amp;lt;package&amp;gt;yum&amp;lt;/package&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce bug est répertorié chez RedHat&amp;lt;ref&amp;gt;https://bugzilla.redhat.com/show_bug.cgi?format=multiple&amp;amp;id=920758&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La correction est triviale, Il faut appliquer le patch suivant au fichier &amp;lt;path&amp;gt;/usr/lib/python2.6/site-packages/yum/depsolve.py&amp;lt;/path&amp;gt;( _checkFileRequires() caches the file requires of installed or to-be installed packages.  Update it when removing packages in TS_INSTALL_STATES from transaction).&amp;lt;ref&amp;gt;http://lists.baseurl.org/pipermail/yum-devel/2013-March/010022.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
diff -up a/depsolve.py b/depsolve.py&lt;br /&gt;
--- a/depsolve.py    2014-01-14 14:51:27.288392585 +0100&lt;br /&gt;
+++ b/depsolve.py.new        2014-01-14 14:51:17.683392467 +0100&lt;br /&gt;
@@ -808,6 +808,8 @@ class Depsolve(object):&lt;br /&gt;
                                     # Have to deal with loops!&lt;br /&gt;
                                     continue&lt;br /&gt;
                                 self.tsInfo.remove(otxmbr.pkgtup)&lt;br /&gt;
+                                ifr = self.installedFileRequires or {}&lt;br /&gt;
+                                ifr.pop(otxmbr.pkgtup, None)&lt;br /&gt;
                                 #  We need to remove an obsoleted entry that&lt;br /&gt;
                                 # was maybe used to resolve something ... ?&lt;br /&gt;
                                 CheckDeps = True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:RPM]]&lt;br /&gt;
[[Catégorie:Koji]]&lt;br /&gt;
[[Catégorie:Server]]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=RPM/Mash&amp;diff=140</id>
		<title>RPM/Mash</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=RPM/Mash&amp;diff=140"/>
		<updated>2017-04-20T09:42:12Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « &amp;#039;&amp;#039;&amp;#039;Mash&amp;#039;&amp;#039;&amp;#039;  == Présentation == &amp;lt;app&amp;gt;Mash&amp;lt;/app&amp;gt; est un outil qui interroge Koji afin d&amp;#039;obtenir les RPMs pour un tag donné et qui créer un dépôt directement ut... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Mash&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Présentation ==&lt;br /&gt;
&amp;lt;app&amp;gt;Mash&amp;lt;/app&amp;gt; est un outil qui interroge [[Koji|Koji]] afin d&#039;obtenir les RPMs pour un tag donné et qui créer un dépôt directement utilisable avec ceux-ci.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
 yum install mash&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Configuration générale de mash ===&lt;br /&gt;
&lt;br /&gt;
Fichier &amp;lt;path&amp;gt;/etc/mash/mash.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[defaults]&lt;br /&gt;
configdir = /etc/mash&lt;br /&gt;
buildhost = http://koji.b2pweb.com/kojihub&lt;br /&gt;
repodir = file:///mnt/koji&lt;br /&gt;
use_sqlite = True&lt;br /&gt;
use_repoview = True&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration du dépôt pour CentOS 5 ===&lt;br /&gt;
&lt;br /&gt;
Par défaut, {{package|mash}} créé une somme de vérification avec l&#039;algorythme sha256, ce qui est incompatible avec CentOS 5. On doit donc lui préciser d&#039;utiliser l&#039;algorythme sha1 en lieu et place.&lt;br /&gt;
&lt;br /&gt;
Fichier &amp;lt;path&amp;gt;/etc/mash/centos5.mash&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
# mash config file&lt;br /&gt;
&lt;br /&gt;
[5]&lt;br /&gt;
rpm_path = os/RPMS/%(arch)s/&lt;br /&gt;
repodata_path = os/RPMS/%(arch)s/&lt;br /&gt;
source_path = os/SRPMS&lt;br /&gt;
debuginfo = True&lt;br /&gt;
debuginfo_path = debug/%(arch)s/&lt;br /&gt;
multilib = True&lt;br /&gt;
multilib_method = devel&lt;br /&gt;
tag = centos-5&lt;br /&gt;
inherit = True&lt;br /&gt;
strict_keys = True&lt;br /&gt;
keys = 22B3B81A, 1ACA3465, A82BA4B7, 069C8460, 97A1071F, E8E40FDE, 57BBCCBA, D22E77F2, 4EBFC273, 0B86274E, 6DF2196F, DF9B0AE9, 773DF357&lt;br /&gt;
repoviewurl = http://koji.tartarefr.eu/repositories/&lt;br /&gt;
repoviewtitle = &amp;quot;CentOS 5 repository - %(arch)s&amp;quot;&lt;br /&gt;
arches = i386 x86_64&lt;br /&gt;
delta = True&lt;br /&gt;
# Change distro_tags as fedora-release version gets bumped&lt;br /&gt;
#distro_tags = cpe:/o:fedoraproject:fedora:17 rawhide&lt;br /&gt;
distro_tags = cpe:/o:centos:centos:5 centos-5&lt;br /&gt;
hash_packages = True&lt;br /&gt;
#make_ancient = True&lt;br /&gt;
hash = sha1&lt;br /&gt;
outputdir = /mnt/repos/centos&lt;br /&gt;
# This forces to also create older version of same package&lt;br /&gt;
latest = False&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration du dépôt pour CentOS 6 ===&lt;br /&gt;
&lt;br /&gt;
Fichier &amp;lt;path&amp;gt;/etc/mash/centos6.mash&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
# mash config file&lt;br /&gt;
&lt;br /&gt;
[6]&lt;br /&gt;
rpm_path = os/RPMS/%(arch)s/&lt;br /&gt;
repodata_path = os/RPMS/%(arch)s/&lt;br /&gt;
source_path = os/SRPMS&lt;br /&gt;
debuginfo = True&lt;br /&gt;
debuginfo_path = debug/%(arch)s/&lt;br /&gt;
multilib = True&lt;br /&gt;
multilib_method = devel&lt;br /&gt;
tag = centos-6&lt;br /&gt;
inherit = True&lt;br /&gt;
strict_keys = True&lt;br /&gt;
keys = 22B3B81A, 1ACA3465, A82BA4B7, 069C8460, 97A1071F, E8E40FDE, 57BBCCBA, D22E77F2, 4EBFC273, 0B86274E, 6DF2196F, DF9B0AE9, D3F3C56A&lt;br /&gt;
repoviewurl = http://koji.tartarefr.eu/repositories/&lt;br /&gt;
repoviewtitle = &amp;quot;CentOS 6 repository - %(arch)s&amp;quot;&lt;br /&gt;
arches = i386 x86_64&lt;br /&gt;
delta = True&lt;br /&gt;
# Change distro_tags as fedora-release version gets bumped&lt;br /&gt;
distro_tags = cpe:/o:centos:centos:6 centos-6&lt;br /&gt;
hash_packages = True&lt;br /&gt;
outputdir = /mnt/repos/centos&lt;br /&gt;
# This forces to also create older version of same package&lt;br /&gt;
latest = False&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration du dépôt pour fedora 20 ===&lt;br /&gt;
&lt;br /&gt;
Le fichier existe déjà (installé en même temps que &amp;lt;app&amp;gt;mash&amp;lt;/app&amp;gt;). Seul la version de fedora s&#039;incrémente au fur et à mesure des sorties de la distribution.&lt;br /&gt;
&lt;br /&gt;
Fichier &amp;lt;path&amp;gt;/etc/mash/branched.mash&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
# mash config file&lt;br /&gt;
&lt;br /&gt;
[20]&lt;br /&gt;
rpm_path = os/RPMS/%(arch)s/&lt;br /&gt;
repodata_path = os/RPMS/%(arch)s/&lt;br /&gt;
source_path = os/SRPMS&lt;br /&gt;
debuginfo = True&lt;br /&gt;
debuginfo_path = debug/%(arch)s/&lt;br /&gt;
multilib = True&lt;br /&gt;
multilib_method = devel&lt;br /&gt;
tag = fedora-20&lt;br /&gt;
inherit = True&lt;br /&gt;
strict_keys = True&lt;br /&gt;
keys = 246110C1&lt;br /&gt;
repoviewurl = http://koji.tartarefr.eu/repositories/&lt;br /&gt;
repoviewtitle = &amp;quot;Fedora 20 repository - %(arch)s&amp;quot;&lt;br /&gt;
arches = i386 x86_64 &lt;br /&gt;
delta = True&lt;br /&gt;
max_delta_rpm_size = 800000000&lt;br /&gt;
# Change distro_tags as fedora-release version gets bumped&lt;br /&gt;
distro_tags = cpe:/o:fedoraproject:fedora:20 Null&lt;br /&gt;
hash_packages = True&lt;br /&gt;
outputdir = /mnt/repositories/fedora&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mise en place d&#039;un alias ===&lt;br /&gt;
&lt;br /&gt;
Le répertoire &amp;lt;path&amp;gt;/mnt/repositories&amp;lt;/path&amp;gt; doit être accessible par HTTP. On ajoute donc un alias.&lt;br /&gt;
&lt;br /&gt;
Fichier &amp;lt;path&amp;gt;/etc/httpd/conf.d/mash.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
Alias /repositories &amp;quot;/mnt/repositories&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/mnt/repositories&amp;quot;&amp;gt;&lt;br /&gt;
        Options Indexes&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        Order allow,deny&lt;br /&gt;
        Allow from all&lt;br /&gt;
        Options +Indexes&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        &amp;lt;IfModule mod_authz_core.c&amp;gt;&lt;br /&gt;
                # Apache 2.4&lt;br /&gt;
                Require all granted&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
        &amp;lt;IfModule !mod_authz_core.c&amp;gt;&lt;br /&gt;
                # Apache 2.2&lt;br /&gt;
                Order allow,deny&lt;br /&gt;
                Allow from all&lt;br /&gt;
        &amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Lancement de l&#039;outil ==&lt;br /&gt;
&lt;br /&gt;
=== Setup initial ===&lt;br /&gt;
On va simplement créé l&#039;arborescence nécessaire&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mkdir /mnt/repos/{fedora,centos}&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Création des dépôts ===&lt;br /&gt;
Création du dépôt pour CentOS 5&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mash 5&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Création du dépôt pour CentOS 6&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mash 6&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Création du dépôt pour Fedora 20&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;mash 20&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== F.A.Q. ==&lt;br /&gt;
{{Admon/faq|Erreur yum.Errors.RpmDBError: Package tuple could not be found in rpmdb|Cette erreur se rencontre après avoir mis à jour &amp;lt;package&amp;gt;yum&amp;lt;/package&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce bug est répertorié chez RedHat&amp;lt;ref&amp;gt;https://bugzilla.redhat.com/show_bug.cgi?format=multiple&amp;amp;id=920758&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La correction est triviale, Il faut appliquer le patch suivant au fichier &amp;lt;path&amp;gt;/usr/lib/python2.6/site-packages/yum/depsolve.py&amp;lt;/path&amp;gt;( _checkFileRequires() caches the file requires of installed or to-be installed packages.  Update it when removing packages in TS_INSTALL_STATES from transaction).&amp;lt;ref&amp;gt;http://lists.baseurl.org/pipermail/yum-devel/2013-March/010022.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;diff&amp;quot;&amp;gt;&lt;br /&gt;
diff -up a/depsolve.py b/depsolve.py&lt;br /&gt;
--- a/depsolve.py    2014-01-14 14:51:27.288392585 +0100&lt;br /&gt;
+++ b/depsolve.py.new        2014-01-14 14:51:17.683392467 +0100&lt;br /&gt;
@@ -808,6 +808,8 @@ class Depsolve(object):&lt;br /&gt;
                                     # Have to deal with loops!&lt;br /&gt;
                                     continue&lt;br /&gt;
                                 self.tsInfo.remove(otxmbr.pkgtup)&lt;br /&gt;
+                                ifr = self.installedFileRequires or {}&lt;br /&gt;
+                                ifr.pop(otxmbr.pkgtup, None)&lt;br /&gt;
                                 #  We need to remove an obsoleted entry that&lt;br /&gt;
                                 # was maybe used to resolve something ... ?&lt;br /&gt;
                                 CheckDeps = True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Références ==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:RPM]]&lt;br /&gt;
[[Catégorie:Koji]]&lt;br /&gt;
[[Catégorie:Server]]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Koji/Installation&amp;diff=139</id>
		<title>Koji/Installation</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Koji/Installation&amp;diff=139"/>
		<updated>2017-04-20T09:37:41Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « &amp;#039;&amp;#039;&amp;#039;Mettre en place un système de construction de RPM Koji&amp;#039;&amp;#039;&amp;#039;  == Présentation == {{class|Koji}} est une suite logicielle de construction de RPM. Il utilise RPM/Mock|mo... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Mettre en place un système de construction de RPM Koji&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Présentation ==&lt;br /&gt;
{{class|Koji}} est une suite logicielle de construction de RPM. Il utilise [[RPM/Mock|mock]] pour créer des environnements&lt;br /&gt;
chrootés et y effectuer les builds.&lt;br /&gt;
&lt;br /&gt;
[[Fichier:KojiArch.svg|441px|vignette|centré|Architecture du koji]]&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Koji-Hub&#039;&#039;&#039;&amp;lt;br&amp;gt;C&#039;est le centre nerveux de toutes les opérations Koji. Il s&#039;agit d&#039;un serveur XML-RPC fonctionnant sous mod_python pour Apache. {{class|koji-hub}} est passif : il ne reçoit que les appels XML-RPC et s&#039;appuie sur les autres outils de la suite pour la construction. {{class|koji-hub}} est le seul composant qui a un accès direct à la base de données et est l&#039;un des deux composants qui ont un accès en écriture au système de fichiers.&lt;br /&gt;
* &#039;&#039;&#039;Kojid&#039;&#039;&#039; ou &#039;&#039;&#039;Koji-builder&#039;&#039;&#039;&amp;lt;br&amp;gt;C&#039;est le démon de compilation qui s&#039;exécute sur chacune des machines de construction. Sa principale responsabilité est de scruter les demandes de construction entrantes et de les exécuter. Pour cela, {{class|kojid}} interroge {{class|koji-hub}}. {{class|Kojid}} est également responsable d&#039;autres tâches que la construction : la création d&#039;images d&#039;installation par exemple. kojid utilise Mock pour la construction. Il crée également un buildroot vierge pour chaque génération. kojid est écrit en Python et communique avec koji-hub par l&#039;intermédiaire de XML-RPC.&lt;br /&gt;
* &#039;&#039;&#039;Koji-Web&#039;&#039;&#039;&amp;lt;br&amp;gt;C&#039;est un ensemble de scripts qui s&#039;exécutent avec mod_python et utilise le moteur de templates Cheetah pour fournir une interface web à {{class|Koji}}. Il agit comme un client à {{class|koji-hub}} en offrant une interface d&#039;aministration limitée. {{class|koji-Web}} expose un grand nombre d&#039;informations et fournit également un moyen pour certaines opérations, telles que l&#039;annulation de builds.&lt;br /&gt;
* &#039;&#039;&#039;Koji-client&#039;&#039;&#039;&amp;lt;br&amp;gt;C&#039;est une interface en ligne de commande ( CLI = Command Line Interface ) écrit en Python qui fournit de nombreux hooks à {{class|Koji}}. Il permet à l&#039;utilisateur d&#039;interroger la plupart des données ainsi que d&#039;effectuer des actions telles que l&#039;ajout d&#039;utilisateurs et de lancer la construction des demandes.&lt;br /&gt;
* &#039;&#039;&#039;Kojira&#039;&#039;&#039;&amp;lt;br&amp;gt;C&#039;est un démon qui garde la racine de construction repodata à jour. Il est responsable de l&#039;enlèvement des racines redondantes et du nettoyage après une demande de construction est terminée.&lt;br /&gt;
&lt;br /&gt;
Les composants de {{class|Koji}} peuvent être installés sur des serveurs différents. La seule obligation est d&#039;autoriser la communication entre les différents composants de la suite.&lt;br /&gt;
&lt;br /&gt;
{{class|Koji}} supporte nativement l&#039;authentification par serveur Kerberos et par certificat SSL. Seul {{class|koji-client}} supporte l&#039;authentification par mot de passe. De ce fait, l&#039;authentification par mot de passe ne sera même pas abordée.&lt;br /&gt;
&lt;br /&gt;
La méthode d&#039;authentification doit être choisie dès le début de l&#039;installation. Dans la suite de ce document, nous mettrons en place la méthode SSL.&lt;br /&gt;
&lt;br /&gt;
{{class|Koji}} utilise beaucoup d&#039;espace disque dans son répertoire primaire &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;. De plus Mock en utilisera beaucoup aussi sur les répertoires &amp;lt;path&amp;gt;/var/lib/mock&amp;lt;/path&amp;gt; et &amp;lt;path&amp;gt;/var/cache/mock&amp;lt;/path&amp;gt;. Il vaut mieux prévoir des partitions dédiées à ces répertoires ( les répertoires de Mock doivent appartenir au groupe mock et avoir les permissions 02755 ).&lt;br /&gt;
&lt;br /&gt;
Pour un aperçu rapide des outils utilisés : [[RPM/Yum|yum]], [[RPM/Mock|mock]], {{class|Koji}} (et tous ses composants), [[RPM/Mash|mash]], et comment ils fonctionnent ensemble, il existe une excellente présentation &amp;lt;ref&amp;gt;Présentation des outils de création/gestion des RPM [http://indico.cern.ch/event/55091 | Version online ]&amp;lt;br&amp;gt;Version offline: [[Fichier:MockKojiMash.pdf]] ( non mise à jour )&amp;lt;/ref&amp;gt; créée par Steve Traylen du CERN.&lt;br /&gt;
&lt;br /&gt;
Le dépôt git de RussianFedora avec les fichiers de configuration de {{class|Koji}} &amp;lt;ref&amp;gt;https://github.com/RussianFedora/koji-setup&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Connaissances requises ===&lt;br /&gt;
* Connaissances basiques de l&#039;authentification par certificat SSL.&lt;br /&gt;
* Connaissances basiques de création de base de données PostgreSQL and d&#039;importation de structure de base&lt;br /&gt;
* Connaissances basiques de l&#039;outil psql&lt;br /&gt;
* Connaissances basiques de configuration d&#039;Apache&lt;br /&gt;
* Connaissances basiques des outils yum/createrepo/mock &lt;br /&gt;
* Connaissances basiques de la ligne de commandes&lt;br /&gt;
* Connaissances basiques sur la construction de RPM&lt;br /&gt;
&lt;br /&gt;
=== Dépendances ===&lt;br /&gt;
&lt;br /&gt;
Sur le serveur ({{class|koji-hub}} / {{class|kojiweb}} )&lt;br /&gt;
* httpd&lt;br /&gt;
* mod_ssl&lt;br /&gt;
* postgresql-server&lt;br /&gt;
* mod_wsgi&lt;br /&gt;
* MySQL-python&lt;br /&gt;
&lt;br /&gt;
Sur les constructeurs ( {{class|kojid}} )&lt;br /&gt;
* mock&lt;br /&gt;
* setarch&lt;br /&gt;
* rpm-build&lt;br /&gt;
* createrepo&lt;br /&gt;
&lt;br /&gt;
Si le mode d&#039;authentification choisie est Kerberos, il faudra aussi que le réseau local ait un serveur DNS et une dépendance supplémentaire est à installer sur le serveur et les constructeurs.&lt;br /&gt;
* mod_auth_kerb&lt;br /&gt;
&lt;br /&gt;
=== Espace disque ===&lt;br /&gt;
&lt;br /&gt;
comme &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; utilise [[RPM/Mock|Mock]], les répertoires &amp;lt;path&amp;gt;/var/lib/mock&amp;lt;/path&amp;gt; et &amp;lt;path&amp;gt;/var/cache/mock&amp;lt;/path&amp;gt; grossiront mais une purge de ces répertoires est mise en place par Koji.&lt;br /&gt;
&lt;br /&gt;
Les répertoires qui vont grossir au fur et à mesure de l&#039;utilisation sont ceux de:&lt;br /&gt;
* Mock: &lt;br /&gt;
* La base de données: &amp;lt;path&amp;gt;/var/lib/psql&amp;lt;/path&amp;gt;&lt;br /&gt;
* Le répertoire principal de Koji: &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;&lt;br /&gt;
* Le répertoire des dépôts: &amp;lt;path&amp;gt;/mnt/repo&amp;lt;/path&amp;gt;&lt;br /&gt;
Il sera donc judicieux de leur attribuer une partition spécifique avec une taille dynamique (lvm)&lt;br /&gt;
&lt;br /&gt;
== Génération des certificats SSL ==&lt;br /&gt;
&lt;br /&gt;
Ces certificats serviront à l&#039;authentification des éléments de Koji sur le {{class|koji-hub}}.&lt;br /&gt;
&lt;br /&gt;
Création du répertoire des certificats&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 mkdir /etc/pki/koji &amp;amp;&amp;amp; cd /etc/pki/koji&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Création du fichier de configuration de nos futurs certificats&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/pki/koji/ssl.cnf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
HOME                    = .&lt;br /&gt;
RANDFILE                = .rand&lt;br /&gt;
&lt;br /&gt;
[ca] &lt;br /&gt;
default_ca              = ca_default&lt;br /&gt;
&lt;br /&gt;
[ca_default] &lt;br /&gt;
dir                     = .&lt;br /&gt;
certs                   = $dir/certs&lt;br /&gt;
crl_dir                 = $dir/crl&lt;br /&gt;
database                = $dir/index.txt&lt;br /&gt;
new_certs_dir           = $dir/newcerts&lt;br /&gt;
certificate             = $dir/%s_ca_cert.pem&lt;br /&gt;
private_key             = $dir/private/%s_ca_key.pem&lt;br /&gt;
serial                  = $dir/serial&lt;br /&gt;
crl                     = $dir/crl.pem&lt;br /&gt;
x509_extensions         = usr_cert&lt;br /&gt;
name_opt                = ca_default&lt;br /&gt;
cert_opt                = ca_default&lt;br /&gt;
default_days            = 3650&lt;br /&gt;
default_crl_days        = 30&lt;br /&gt;
default_md              = sha256&lt;br /&gt;
preserve                = no&lt;br /&gt;
policy                  = policy_match&lt;br /&gt;
&lt;br /&gt;
[policy_match] &lt;br /&gt;
countryName             = match&lt;br /&gt;
stateOrProvinceName     = match&lt;br /&gt;
organizationName        = match&lt;br /&gt;
organizationalUnitName  = optional&lt;br /&gt;
commonName              = supplied&lt;br /&gt;
emailAddress            = optional&lt;br /&gt;
&lt;br /&gt;
[req] &lt;br /&gt;
default_bits            = 4096&lt;br /&gt;
default_keyfile         = privkey.pem&lt;br /&gt;
distinguished_name      = req_distinguished_name&lt;br /&gt;
attributes              = req_attributes&lt;br /&gt;
x509_extensions         = v3_ca # The extentions to add to the self signed cert&lt;br /&gt;
string_mask             = MASK:0x2002&lt;br /&gt;
&lt;br /&gt;
[req_distinguished_name] &lt;br /&gt;
countryName                     = Country Name (2 letter code)&lt;br /&gt;
countryName_default             = FR&lt;br /&gt;
countryName_min                 = 2&lt;br /&gt;
countryName_max                 = 2&lt;br /&gt;
stateOrProvinceName             = State or Province Name (full name)&lt;br /&gt;
stateOrProvinceName_default     = Languedoc Roussilon&lt;br /&gt;
localityName                    = Locality Name (eg, city)&lt;br /&gt;
localityName_default            = Beaucaire&lt;br /&gt;
0.organizationName              = Organization Name (eg, company)&lt;br /&gt;
0.organizationName_default      = Home&lt;br /&gt;
organizationalUnitName          = Organizational Unit Name (eg, section)&lt;br /&gt;
commonName                      = Common Name (eg, your name or your server\&#039;s hostname)&lt;br /&gt;
commonName_max                  = 64&lt;br /&gt;
emailAddress                    = Email Address&lt;br /&gt;
emailAddress_max                = 64&lt;br /&gt;
&lt;br /&gt;
[req_attributes] &lt;br /&gt;
challengePassword               = A challenge password&lt;br /&gt;
challengePassword_min           = 4&lt;br /&gt;
challengePassword_max           = 20&lt;br /&gt;
unstructuredName                = An optional company name&lt;br /&gt;
&lt;br /&gt;
[usr_cert] &lt;br /&gt;
basicConstraints                = CA:FALSE&lt;br /&gt;
nsComment                       = &amp;quot;OpenSSL Generated Certificate&amp;quot;&lt;br /&gt;
subjectKeyIdentifier            = hash&lt;br /&gt;
authorityKeyIdentifier          = keyid,issuer:always&lt;br /&gt;
&lt;br /&gt;
[v3_ca] &lt;br /&gt;
subjectKeyIdentifier            = hash&lt;br /&gt;
authorityKeyIdentifier          = keyid:always,issuer:always&lt;br /&gt;
basicConstraints                = CA:true&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
{{Admon/note|Modification du fichier ssl.cnf|Bien que cela ne soit pas obligatoire, il est recommandé d&#039;éditer les champs suffixés par &#039;&#039;&#039;_default&#039;&#039;&#039; dans la section &#039;&#039;&#039;[req_distinguished_name]&#039;&#039;&#039;, afin de coller aux informations du serveur en cours d&#039;installation&amp;lt;br&amp;gt;Cela vous permettra d&#039;accepter directement les valeurs proposées par défaut à la génération des certificats.&amp;lt;br&amp;gt;Les autres sections n&#039;ont pas besoin d&#039;être éditées.}}&lt;br /&gt;
&lt;br /&gt;
=== Génération de l&#039;autorité de certification ===&lt;br /&gt;
&lt;br /&gt;
Toujours depuis le répertoire /etc/pki/koji, on initialise notre générateur et on génère l’autorité de certification. Celle-ci se compose d&#039;une paire clé/certificat qui servira à signer tous les autres certificats.&lt;br /&gt;
&lt;br /&gt;
Ici, le CN sera obligatoirement le nom d&#039;hôte du serveur (FQDN), les autres renseignements ne sont pas bloquants pour la suite.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /etc/pki/koji/&lt;br /&gt;
mkdir {certs,private,confs}&lt;br /&gt;
touch index.txt&lt;br /&gt;
echo 01 &amp;gt; serial&lt;br /&gt;
openssl genrsa -out private/koji_ca_cert.key 4096&lt;br /&gt;
openssl req -config ssl.cnf -new -x509 -days 3650 -key private/koji_ca_cert.key \&lt;br /&gt;
-out koji_ca_cert.crt -extensions v3_ca&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Générer les certificats des composants de Koji et le certificat de l&#039;administrateur===&lt;br /&gt;
&lt;br /&gt;
Chaque composant de Koji a besoin d&#039;un certificat.&lt;br /&gt;
Kojihub et kojiweb ont besoin d&#039;avoir le nome d&#039;hôte pleinement qualifié (FQDN) en CN, on se servira de OU pour distinguer les certificats. Pour les autres certificats, le CN doit être le nom du composant ( kojira ), le login du compte administrateur ou le nom du builder qui sera définit avec koji-client.&lt;br /&gt;
Par simplicité, on va se servir de ces scripts pour générer les certificats des composants et les certificats web.&lt;br /&gt;
&lt;br /&gt;
Script de génération des certificats&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/pki/koji/generate-certificate.sh&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#if you change your certificate authority name to something else you will need to change the caname value to reflect the change.&lt;br /&gt;
caname=koji&lt;br /&gt;
&lt;br /&gt;
# user is equal to parameter one or the first argument when you actually run the script&lt;br /&gt;
user=$1&lt;br /&gt;
&lt;br /&gt;
if [[ &amp;quot;$user&amp;quot; == &amp;quot;&amp;quot; ]]&lt;br /&gt;
then&lt;br /&gt;
	echo &amp;quot;Usage: $(basename $0) USER&amp;quot;&lt;br /&gt;
	exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Generate certificates for \&amp;quot;${user}\&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
openssl genrsa -out certs/${user}.key 4096&lt;br /&gt;
&lt;br /&gt;
cat ssl.cnf | sed &#039;s/insert_hostname/&#039;${user}&#039;/&#039;&amp;gt; ssl2.cnf&lt;br /&gt;
&lt;br /&gt;
openssl req -config ssl2.cnf -new -nodes -out certs/${user}.csr -key certs/${user}.key&lt;br /&gt;
&lt;br /&gt;
openssl ca -config ssl2.cnf -keyfile private/${caname}_ca_cert.key -cert ${caname}_ca_cert.crt \&lt;br /&gt;
	-out certs/${user}.crt -outdir certs -infiles certs/${user}.csr&lt;br /&gt;
&lt;br /&gt;
cat certs/${user}.crt certs/${user}.key &amp;gt; ${user}.pem&lt;br /&gt;
&lt;br /&gt;
mv ssl2.cnf confs/${user}-ssl.cnf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Script de génération des certificats pour les navigateurs Web&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/pki/koji/generate-web-certificate.sh&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
#if you change your certificate authority name to something else you will need to change the caname value to reflect the change.&lt;br /&gt;
caname=koji&lt;br /&gt;
&lt;br /&gt;
# user is equal to parameter one or the first argument when you actually run the script&lt;br /&gt;
user=$1&lt;br /&gt;
&lt;br /&gt;
if [[ &amp;quot;$user&amp;quot; == &amp;quot;&amp;quot; ]]&lt;br /&gt;
then&lt;br /&gt;
	echo &amp;quot;Usage: $(basename $0) USER&amp;quot;&lt;br /&gt;
	exit&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;Generate web certificates for \&amp;quot;${user}\&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
openssl pkcs12 -export -inkey certs/${user}.key -in certs/${user}.crt -CAfile ${caname}_ca_cert.crt \&lt;br /&gt;
	-out certs/${user}_browser_cert.p12&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
On génère les certificats comme cela pour tous les composants et users du tableau récapitulatif:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /etc/pki/koji/&lt;br /&gt;
./generate-certificate.sh kojiweb&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Le user choisi pour être le koji admin est le user didier.&lt;br /&gt;
&lt;br /&gt;
De plus pour les utilisateurs (réels) de {{class|koji}}, on générera les certificats web comme ceci:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
./generate-web-certificate.sh didier&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Nom du certificat&lt;br /&gt;
! CN (commonName)&lt;br /&gt;
! OU (organizationalUnitName)&lt;br /&gt;
|-&lt;br /&gt;
| kojihub&lt;br /&gt;
| koji.didier-linux.eu (FQDN)&lt;br /&gt;
| kojihub&lt;br /&gt;
|-&lt;br /&gt;
| kojiweb&lt;br /&gt;
| koji.didier-linux.eu (FQDN)&lt;br /&gt;
| kojiweb&lt;br /&gt;
|-&lt;br /&gt;
| kojira&lt;br /&gt;
| kojira&lt;br /&gt;
| Admin&lt;br /&gt;
|-&lt;br /&gt;
| didier ( utilisateur koji admin )&lt;br /&gt;
| didier ( ici c&#039;est le user et non le nom d&#039;hôte de la machine )&lt;br /&gt;
| Admin&lt;br /&gt;
|-&lt;br /&gt;
| kojibuilder.didier-linux.eu&lt;br /&gt;
| kojibuilder.didier-linux.eu&lt;br /&gt;
| builder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Copier les certificats dans le home de utilisateur admin ===&lt;br /&gt;
&lt;br /&gt;
On copie le certificat correspondant à l&#039;administrateur du {{class|Koji}}, et l&#039;autorité de certification dans son home.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir ~/.koji&lt;br /&gt;
cp /etc/pki/koji/didier.pem ~/.koji/client.crt&lt;br /&gt;
cp /etc/pki/koji/koji_ca_cert.crt ~/.koji/clientca.crt&lt;br /&gt;
cp /etc/pki/koji/koji_ca_cert.crt ~/.koji/serverca.crt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{Admon/note|Modification des paramètres par défaut|Pour modifier des paramètre d&#039;un client sans modifier la configuration générale, il faut copier le fichier &amp;lt;path&amp;gt;/etc/koji.conf&amp;lt;/path&amp;gt; dans le home de l&#039;utilisateur &amp;lt;path&amp;gt;~/.koji/config&amp;lt;/path&amp;gt; et y effectuer les modifications dans celui-ci.}}&lt;br /&gt;
&lt;br /&gt;
==Mise en place des principals Kerberos==&lt;br /&gt;
&lt;br /&gt;
Le serveur Kerberos doit pouvoir être trouvé grâce au DNS. Le point final indique que l&#039;hôte est pleinement qualifié (FQDN).&lt;br /&gt;
&amp;lt;pre&amp;gt;_kerberos._udp    IN SRV  10 100 88 kerberos.didier-linux.eu.&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Principal&lt;br /&gt;
! Utilisation&lt;br /&gt;
|-&lt;br /&gt;
| host/kojihub@DIDIER-LINUX.EU&lt;br /&gt;
| Utiliser par koji-hub pour communiquer avec le client koji&lt;br /&gt;
|-&lt;br /&gt;
| HTTP/kojiweb@DIDIER-LINUX.EU&lt;br /&gt;
| Utiliser par koji-web pour négotier une authentifiaction avec le navigateur web. C&#039;est le principal pour l&#039;authentification Apache &amp;lt;package&amp;gt;mod_auth_kerb&amp;lt;/package&amp;gt;. &lt;br /&gt;
|-&lt;br /&gt;
| koji/kojiweb@DIDIER-LINUX.EU&lt;br /&gt;
| Utiliser par koji-web pour communiquer avec koji-hub. C&#039;est le principal qui va authentifier koji-web sur Kerberos comme &amp;quot;koji/kojiweb@EXAMPLE.COM&amp;quot;. Koji-web relayera aussi le nom d&#039;utilisateur (authentification Apache) vers koji-hub (koji-hub config option &#039;&#039;&#039;&#039;&#039;ProxyPrincipals&#039;&#039;&#039;&#039;&#039;). &lt;br /&gt;
|-&lt;br /&gt;
| koji/kojira@DIDIER-LINUX.EU&lt;br /&gt;
| Utiliser par kojira pour communiquer avec koji-hub&lt;br /&gt;
|-&lt;br /&gt;
| compile/builder1@DIDIER-LINUX.EU&lt;br /&gt;
| Utiliser par le constructeur koji pour communiquer avec koji-hub&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Ajout des utilisateurs Koji aux alias du serveur de mail local==&lt;br /&gt;
&lt;br /&gt;
Bien évidemment, un serveur [[Mail/MTA/Sendmail|sendmail]] en local est déjà configuré et opérationnel.&lt;br /&gt;
&lt;br /&gt;
Appairer les utilisateurs Koji aux véritables adresses mail.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/aliases&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Person who should get root&#039;s mail&lt;br /&gt;
root:           didier@didier-linux.eu&lt;br /&gt;
didier:         didier@didier-linux.eu&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Puis lancer la régénération des alias&lt;br /&gt;
 # newaliases&lt;br /&gt;
&lt;br /&gt;
== Serveur PostgreSQL ==&lt;br /&gt;
Une fois l&#039;autentification mise en place, nous avons besoin d&#039;installer un serveur [[DBMS/PostgreSQL/Brief|PostgreSQL]], de le configurer et de mettre en place la structure de la base de données pour {{class|Koji}}.&lt;br /&gt;
&#039;&#039;&#039;Fichiers de Configuration :&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* /var/lib/pgsql/data/pg_hba.conf&lt;br /&gt;
* /var/lib/pgsql/data/postgresql.conf&lt;br /&gt;
&lt;br /&gt;
===Installation du serveur PostgreSQL===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install postgresql-server&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Initialisation de la base de données PostgreSQL===&lt;br /&gt;
&lt;br /&gt;
Les commandes suivantes initialise le serveur [[DBMS/PostgreSQL/Brief|PostgreSQL]] et le démarre.&lt;br /&gt;
Le script d&#039;init a été converti à systemd sur les distributions Fedora 16 et supérieures et la cible &#039;&#039;&#039;initdb&#039;&#039;&#039; du script d&#039;init a été supprimée. On initialise directement avec les commandes du SGBD.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - postgres -c &amp;quot;PGDATA=/var/lib/pgsql/data initdb&amp;quot;&lt;br /&gt;
systemctl start postgresql.service&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
{{admon/tip|Initialisation du SGBD sur les distributions sysVinit|&amp;lt;pre&amp;gt;service postgresql initdb &amp;amp;&amp;amp; service postgresql start&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Compte utilisateur ===&lt;br /&gt;
&lt;br /&gt;
Mise en place du compte &#039;&#039;&#039;koji&#039;&#039;&#039; sur le système (utilisateur unix) et mise en place d&#039;un mot de passe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
useradd koji&lt;br /&gt;
passwd koji&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Setup de PostgreSQL et import de la structure de la base ===&lt;br /&gt;
&lt;br /&gt;
Création de l&#039;utilisateur PostgreSQL &#039;&#039;&#039;koji&#039;&#039;&#039; et création de sa base de données, puis import de la structure.&lt;br /&gt;
{{Admon/bug|Import de la structure|Il est important laisser le joker (*) afin de ne pas se restreindre à une version particulière de Koji. Durant des test, il a été découvert que la restriction à une version spécifique de Koji ne créé pas  correctement toutes les tables.}}&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - postgres&lt;br /&gt;
createuser koji&lt;br /&gt;
Shall the new role be a superuser? (y/n) n&lt;br /&gt;
Shall the new role be allowed to create databases? (y/n) n&lt;br /&gt;
Shall the new role be allowed to create more new roles? (y/n) n&lt;br /&gt;
createdb -O koji koji&lt;br /&gt;
logout&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
su - koji&lt;br /&gt;
psql koji koji &amp;lt; /usr/share/doc/koji*/docs/schema.sql&lt;br /&gt;
exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Autorisation de Koji-web et Koji-hub aux resources===&lt;br /&gt;
&#039;&#039;Dans cet exemple, Koji-web et Koji-hub sont démarrés sur localhost.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ces paramètres doivent être ajouter avant les autres.&lt;br /&gt;
Fichier &amp;lt;path&amp;gt;/var/lib/pgsql/data/pg_hba.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/var/lib/pgsql/data/pg_hba.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
host    koji        koji        127.0.0.1/32          trust&lt;br /&gt;
host    koji        koji          ::1/128             trust&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
On peut aussi utiliser les sockets UNIX. La variable &#039;&#039;&#039;&#039;&#039;DBHost&#039;&#039;&#039;&#039;&#039; variable ne doit pas être renseigné avec cette méthode.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/var/lib/pgsql/data/pg_hba.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
local   koji        apache                            trust&lt;br /&gt;
local   koji        apache      127.0.0.1/32          trust&lt;br /&gt;
local   koji        apache        ::1/128             trust&lt;br /&gt;
local   koji        koji                              trust&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Application des changements à chaud ===&lt;br /&gt;
&lt;br /&gt;
Informer postgreSQL que les fichiers de configuration doivent être relus.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@localhost$ su - postgres&lt;br /&gt;
postgres@localhost$ pg_ctl reload&lt;br /&gt;
postgres@localhost$ exit&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ajout du premier administrateur du Koji à la base PostgreSQL ===&lt;br /&gt;
&lt;br /&gt;
Le premier administrateur du &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; doit être ajouter à la main avec des commandes SQL. Une fois ajouté avec les droits administarteur, Il pourra gérer les autres utilisateurs de &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt; avec l&#039;outil d&#039;administration en ligne de commande.&lt;br /&gt;
&lt;br /&gt;
Pour l&#039;authentifiaction SSL ou Kerberos, il n&#039;y a pas besoin de mettre un mot de passe.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
root@localhost$ su - koji&lt;br /&gt;
koji@localhost$ psql&lt;br /&gt;
koji=&amp;gt; insert into users (name, status, usertype) values (&#039;admin-user-name&#039;, 0, 0);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Se donner les droits admin ===&lt;br /&gt;
&lt;br /&gt;
Commande permettant de se donner les droits administrateur. Pour la lancer, on doit connaitre l&#039;ID de l&#039;utilisateur.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji=&amp;gt; insert into user_perms (user_id, perm_id, creator_id) values (&amp;lt;ID of user inserted above&amp;gt;, 1, &amp;lt;ID of user inserted above&amp;gt;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Admon/tip|Connaitre l&#039;ID des utilisateurs|Pour connaitre les IDs des utilisateurs du &amp;lt;class&amp;gt;Koji&amp;lt;/class&amp;gt;, on doit lancer une commande SQL.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji=&amp;gt; select * from users;&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
A ce stade, aucune action ne peut être démarrée tant que le kojihub n&#039;est pas configuré et le serveur web démarré.&lt;br /&gt;
&lt;br /&gt;
== Koji Hub ==&lt;br /&gt;
&lt;br /&gt;
koji-hub est le centre nerveux de toutes les opérations Koji. Il s&#039;agit d&#039;un serveur XML-RPC fonctionnant sous mod_python pour Apache. koji-hub est passif : il ne reçoit que les appels XML-RPC et s&#039;appuie sur les autres outils de la suite pour la construction. koji-hub est le seul composant qui a un accès direct à la base de données et est l&#039;un des deux composants qui ont un accès en écriture au système de fichiers. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fichiers de Configuration&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* /etc/httpd/conf/httpd.conf&lt;br /&gt;
* /etc/httpd/conf.d/kojihub.conf&lt;br /&gt;
* /etc/httpd/conf.d/ssl.conf (when using ssl auth)&lt;br /&gt;
* /etc/koji-hub/hub.conf&lt;br /&gt;
* /etc/koji.conf&lt;br /&gt;
&lt;br /&gt;
Le répertoire de travail sera &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;.&lt;br /&gt;
{{Admon/bug|Répertoire de travail de Koji|Si le répertoire de travail de Koji n&#039;est pas &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;, il est impératif de créer un lien symbolique du répertoire de travail de Koji dans &amp;lt;path&amp;gt;/mnt&amp;lt;/path&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;ln -s /path/to/koji/datadir /mnt/koji&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
===Installation de {{class|koji-hub}}===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install koji-hub httpd mod_ssl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Configuration ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On bride tout d&#039;abord le nombre maximum de requête sur le serveur [[Webserver/Apache|apache]] à une valeur plus raisonnable afin de prévenir une saturation et/ou un crash du serveur web.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf/httpd.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;IfModule prefork.c&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
MaxRequestsPerChild  100&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;IfModule worker.c&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
MaxRequestsPerChild  100&lt;br /&gt;
&amp;lt;/IfModule&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Le répertoire &amp;lt;path&amp;gt;/mnt/koji/packages&amp;lt;/path&amp;gt; doit être accessible par HTTP. On ajoute donc un alias.&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf.d/kojipackages.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
Alias /packages &amp;quot;/mnt/koji/packages&amp;quot;&lt;br /&gt;
&amp;lt;Directory &amp;quot;/mnt/koji/packages&amp;quot;&amp;gt;&lt;br /&gt;
        Options Indexes&lt;br /&gt;
        AllowOverride None&lt;br /&gt;
        Order allow,deny&lt;br /&gt;
        Allow from all&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf.d/ssl.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
LoadModule ssl_module modules/mod_ssl.so&lt;br /&gt;
&lt;br /&gt;
Listen 443&lt;br /&gt;
&lt;br /&gt;
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog&lt;br /&gt;
&lt;br /&gt;
SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000)&lt;br /&gt;
SSLSessionCacheTimeout  300&lt;br /&gt;
&lt;br /&gt;
SSLMutex default&lt;br /&gt;
&lt;br /&gt;
SSLRandomSeed startup file:/dev/urandom  256&lt;br /&gt;
SSLRandomSeed connect builtin&lt;br /&gt;
&lt;br /&gt;
SSLCryptoDevice builtin&lt;br /&gt;
&lt;br /&gt;
&amp;lt;VirtualHost _default_:443&amp;gt;&lt;br /&gt;
  ErrorLog logs/ssl_error_log&lt;br /&gt;
  TransferLog logs/ssl_access_log&lt;br /&gt;
  LogLevel warn&lt;br /&gt;
&lt;br /&gt;
  SSLEngine on&lt;br /&gt;
  SSLProtocol all -SSLv2&lt;br /&gt;
  SSLCipherSuite RC4-SHA:AES128-SHA:ALL:!ADH:!EXP:!LOW:!MD5:!SSLV2:!NULL&lt;br /&gt;
&lt;br /&gt;
  SSLCertificateFile /etc/pki/koji/certs/kojihub.crt&lt;br /&gt;
  SSLCertificateKeyFile /etc/pki/koji/certs/kojihub.key&lt;br /&gt;
  SSLCertificateChainFile /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
  SSLCACertificateFile /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
  SSLVerifyClient require&lt;br /&gt;
  SSLVerifyDepth  10&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;Files ~ &amp;quot;\.(cgi|shtml|phtml|php3?)$&amp;quot;&amp;gt;&lt;br /&gt;
    SSLOptions +StdEnvVars&lt;br /&gt;
  &amp;lt;/Files&amp;gt;&lt;br /&gt;
  &amp;lt;Directory &amp;quot;/var/www/cgi-bin&amp;quot;&amp;gt;&lt;br /&gt;
    SSLOptions +StdEnvVars&lt;br /&gt;
  &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  SetEnvIf User-Agent &amp;quot;.*MSIE.*&amp;quot; \&lt;br /&gt;
         nokeepalive ssl-unclean-shutdown \&lt;br /&gt;
         downgrade-1.0 force-response-1.0&lt;br /&gt;
&lt;br /&gt;
  CustomLog logs/ssl_request_log \&lt;br /&gt;
          &amp;quot;%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \&amp;quot;%r\&amp;quot; %b&amp;quot;&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf.d/kojihub.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
Alias /kojihub /usr/share/koji-hub/kojixmlrpc.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Directory &amp;quot;/usr/share/koji-hub&amp;quot;&amp;gt;&lt;br /&gt;
    Options ExecCGI&lt;br /&gt;
    SetHandler wsgi-script&lt;br /&gt;
    Order allow,deny&lt;br /&gt;
    Allow from all&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Alias /kojifiles &amp;quot;/mnt/koji/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Directory &amp;quot;/mnt/koji&amp;quot;&amp;gt;&lt;br /&gt;
    Options Indexes SymLinksIfOwnerMatch&lt;br /&gt;
    AllowOverride None&lt;br /&gt;
    Order allow,deny&lt;br /&gt;
    Allow from all&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Location /kojihub/ssllogin&amp;gt;&lt;br /&gt;
        SSLVerifyClient require&lt;br /&gt;
        SSLVerifyDepth  10&lt;br /&gt;
        SSLOptions +StdEnvVars&lt;br /&gt;
&amp;lt;/Location&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Location /kojihub&amp;gt;&lt;br /&gt;
        SSLOptions +StdEnvVars&lt;br /&gt;
&amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/koji-hub/hub.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[hub]&lt;br /&gt;
DBName = koji&lt;br /&gt;
DBUser = koji&lt;br /&gt;
DBHost = localhost&lt;br /&gt;
KojiDir = /mnt/koji&lt;br /&gt;
&lt;br /&gt;
DNUsernameComponent = CN&lt;br /&gt;
ProxyDNs = C=FR,ST=Languedoc Roussillon,L=Beaucaire,O=Home,OU=kojiweb,CN=koji.didier-linux.eu,emailAddress=root@didier-linux.eu&lt;br /&gt;
&lt;br /&gt;
LoginCreatesUser = On&lt;br /&gt;
KojiWebURL = http://koji.didier-linux.eu/koji&lt;br /&gt;
EmailDomain = didier-linux.eu&lt;br /&gt;
NotifyOnSuccess = True&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/koji.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[koji]&lt;br /&gt;
server = http://koji.didier-linux.eu/kojihub&lt;br /&gt;
weburl = http://koji.didier-linux.eu/koji&lt;br /&gt;
topurl = http://koji.didier-linux.eu/kojifiles&lt;br /&gt;
topdir = /mnt/koji&lt;br /&gt;
cert = ~/.koji/client.crt&lt;br /&gt;
ca = ~/.koji/clientca.crt&lt;br /&gt;
serverca = ~/.koji/serverca.crt&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
=== Configuration de [[Security/SELinux|SELinux]] ===&lt;br /&gt;
Si le mode enforcing est utilisé, on doit autoriser [[Webserver/Apache|apache]] à acceder au serveur [[SGBD/PostgreSQL]]. Même si le mode est permissive, il est recommandé de lancer la commande suivante afin de se prémunir d&#039;un changement de mode de [[Security/SELinux|SELinux]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
setsebool -P httpd_can_network_connect_db 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Squelette des fichiers Koji ===&lt;br /&gt;
&lt;br /&gt;
Avant que les autres composants de Koji puissent fonctionner correctement, On doit créer la structure et modifié les droits de celui-ci.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /mnt&lt;br /&gt;
mkdir koji&lt;br /&gt;
cd koji&lt;br /&gt;
mkdir {packages,repos,work,scratch}&lt;br /&gt;
chown apache.apache *&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ici, [[Webserver/Apache|apache]] peut être redémarré et on peut effectuer des opérations minimales sur notre serveur Koji via le client en ligne de commande: gestion des utilisateurs et des constructeurs.&lt;br /&gt;
&lt;br /&gt;
Il faut s&#039;assurer que le client est configuré par défaut ( fichier &amp;lt;path&amp;gt;/etc/koji.conf&amp;lt;/path&amp;gt; et que les certificats sont en place dans le home de l&#039;administrateur.&lt;br /&gt;
&lt;br /&gt;
{{Admon/note|Fichier de configuration alternatif|Si un fichier de configuration personnel autre que &amp;lt;path&amp;gt;~/.koji/config&amp;lt;/path&amp;gt; est utilisé, il faut utilisé la commande koji avec l&#039;option &#039;&#039;&#039;-c&#039;&#039;&#039;.}}&lt;br /&gt;
La commande suivante teste le login administrateur sur le serveur Koji.&lt;br /&gt;
 koji call getLoggedInUser&lt;br /&gt;
&lt;br /&gt;
{{Admon/important|Droit des daemons|Kojira a besoin du privilège &#039;&#039;&#039;repo&#039;&#039;&#039; avant le lancement du daemon. C&#039;est pourquoi il est vivement recommandé de créer cet utilisateur maintenant et de lui ajouter le privilège&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji add-user kojira&lt;br /&gt;
koji grant-permission repo kojira&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour des raisons similaires, les hôtes de constructions doivent être ajoutés avant le démarrage du daemon kojid.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji add-host kojibuilder1 x86_64 i386&lt;br /&gt;
koji add-host kojibuilder2 ppc ppc64&lt;br /&gt;
koji add-host kojibuilder3 ia64&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Koji Web - Interface for the Masses ==&lt;br /&gt;
&lt;br /&gt;
Koji-web est un jeu de scripts qui tournent avec mod_wsgi et qui utilise le moteur de modèle Cheetah pour fournir une interface web à Koji. Koji-web affiche beaucoup d&#039;informations et propose même quelques opérations comme l&#039;abandon de tâche.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Fichiers de Configuration:&#039;&#039;&#039;&lt;br /&gt;
* /etc/kojiweb/web.conf&lt;br /&gt;
* /etc/httpd/conf.d/kojiweb.conf&lt;br /&gt;
* /etc/httpd/conf.d/ssl.conf&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installation de Koji-Web:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install koji-web mod_ssl&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configuration obligatoire ====&lt;br /&gt;
&lt;br /&gt;
La configuration doit fournir à Koji-web les URLs d&#039;accès à Koji-hub, aux paquets koji (builds) et à sa propre interface. Il est judicieux de modifier aussi le secret (directive &#039;&#039;PythonOption Secret&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Avec l&#039;authentification SSL, elle doit aussi fournir le nom des certificats à utiliser et la directive &#039;&#039;PythonOption WebCert&#039;&#039; doit contenir &#039;&#039;&#039;la clé publique ET la clé privée&#039;&#039;&#039;.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojiweb/web.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[web]&lt;br /&gt;
SiteName = koji&lt;br /&gt;
KojiTheme = didier&lt;br /&gt;
&lt;br /&gt;
KojiHubURL http://koji.didier-linux.eu/kojihub&lt;br /&gt;
KojiFilesURL http://www.didier-linux.eu/kojifiles&lt;br /&gt;
&lt;br /&gt;
WebCert /etc/pki/koji/kojiweb.pem&lt;br /&gt;
ClientCA /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
KojiHubCA /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
&lt;br /&gt;
LoginTimeout 72&lt;br /&gt;
Secret CHANGE_ME&lt;br /&gt;
&lt;br /&gt;
LibPath = /usr/share/koji-web/lib&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==== Configuration Optionnelle ====&lt;br /&gt;
&lt;br /&gt;
Il faut éditer le fichier &amp;lt;path&amp;gt;/etc/httpd/conf.d/kojiweb.conf&amp;lt;/path&amp;gt; pour configurer l&#039;authentification choisie.&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf.d/kojiweb.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;Location /koji/login&amp;gt;&lt;br /&gt;
SSLOptions +StdEnvVars&lt;br /&gt;
&amp;lt;/Location&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/httpd/conf.d/ssl.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SSLVerifyClient require&lt;br /&gt;
SSLVerifyDepth  10&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==== Interface Web opérationnelle ====&lt;br /&gt;
&lt;br /&gt;
L&#039;interface Web du koji est maintenant accessible et la plupart des opérations de lecture doivent fonctionner et chaque utilisateur doit pouvoir se connecter.&lt;br /&gt;
&lt;br /&gt;
== Koji Daemon - Builder ==&lt;br /&gt;
&lt;br /&gt;
Kojid est le daemon de construction qui tourne sur chaque constructeur. son rôle principale est de traiter les requêtes de construction. Koji ne se limite cependant pas aux tâches de construction puisqu&#039;il peut aussi construire des images ISO, des disques virtuels (appliances). Kojid utilise mock pour créer des environnements de construction minimaliste et en créé pour chaque construction. Ceci permet le compartimentage des constructions et les constructions ne peuvent pas se gêner les unes les autres. Kojid est écrit en python et communique avec le hub via XML-RPC.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;fichiers de Configuration&#039;&#039;&#039;&lt;br /&gt;
* Configuration du daemon Kojira: /etc/kojid/kojid.conf&lt;br /&gt;
* Variables de lancement du daemon: /etc/sysconfig/kojid&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installation de kojid:&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
yum install koji-builder&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Configuration générale ====&lt;br /&gt;
&lt;br /&gt;
Le fichier de configuration de chaque constructeur doit être édité afin que la directive &#039;&#039;server&#039;&#039; pointe sur l&#039;hôte supportant le Koji-hub. La directive &#039;&#039;user&#039;&#039; doit contenir le nom d&#039;hôte du constructeur.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojid/kojid.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; The URL for the xmlrpc server&lt;br /&gt;
server=http://hub.example.com/kojihub&lt;br /&gt;
&lt;br /&gt;
; the username has to be the same as what you used with add-host&lt;br /&gt;
; in this example follow as below&lt;br /&gt;
user = kojibuilder1.example.com&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
La directive &#039;&#039;workdir&#039;&#039; peut être différente entre les constructeurs mais elle ne doit pas être le répertoire de travail du Koji (&amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;)&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojid/kojid.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; The directory root for temporary storage&lt;br /&gt;
workdir=/tmp/koji&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==== Configuration des certificats SSL ====&lt;br /&gt;
&lt;br /&gt;
Ces entrées doivent être éditées pour pointer sur les bons certificats générés précédemment.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojid/kojid.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
;client certificate&lt;br /&gt;
; This should reference the builder certificate we created above, for&lt;br /&gt;
; kojibuilder1.example.com&lt;br /&gt;
cert = /etc/kojid/kojid.pem&lt;br /&gt;
&lt;br /&gt;
;certificate of the CA that issued the client certificate&lt;br /&gt;
ca = /etc/kojid/koji_ca_cert.crt&lt;br /&gt;
&lt;br /&gt;
;certificate of the CA that issued the HTTP server certificate&lt;br /&gt;
serverca = /etc/kojid/koji_ca_cert.crt&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
{{Admon/important|Copie des certificats sur l&#039;hôte|Les certificats SSL doivent être copiés depuis l&#039;hôte abritant le Koji-hub sur les constructeurs dans le répertoire &amp;lt;path&amp;gt;/etc/kojid&amp;lt;/path&amp;gt; pour que les constructeurs puissent s&#039;authentifier.}}&lt;br /&gt;
&lt;br /&gt;
==== Ajout d&#039;un hôte à la base de données des constructeurs ====&lt;br /&gt;
&lt;br /&gt;
Il faut maintenant ajouter l&#039;hôte à la base de données des constructeurs afin qu&#039;il puisse être utilisé par Koji-hub.&lt;br /&gt;
{{Admon/important|L&#039;ajout doit être fait avant le premier démarrage du daemon de construction|Sinon, il faudra purger les entrées à la main dans les tables &#039;&#039;sessions&#039;&#039; et &#039;&#039;users&lt;br /&gt;
&#039;&#039; avant de pouvoir démarrer avec succès le daemon.}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji add-host kojibuilder1.didier-linux.eu i386 x86_64&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Le premier argument après la commande est le nom d&#039;hôte du constructeur. Le second argument spécifie l&#039;(les) architecture(s) utilisées par l&#039;hôtes.&lt;br /&gt;
&lt;br /&gt;
==== Ajout de l&#039;hôte au canal de création ====&lt;br /&gt;
&lt;br /&gt;
Les canaux sont un moyen de contrôler quel constructeur fait quoi. Par défaut les hôtes sont ajouté au canal &#039;&#039;default&#039;&#039;. Il faut qu&#039;au moins quelques uns (1 au minimum) soient ajoutés au canal &#039;&#039;createrepo&#039;&#039; pour pouvoir lancer les travaux kojira sur les dépôts.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji add-host-to-channel kojibuilder1.didier.eu createrepo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Capacité ====&lt;br /&gt;
&lt;br /&gt;
La capacité d&#039;un hôte par défaut est de 2, ce qui veut dire que le daemond econstruction n&#039;acceptera pas de travail supplémentaire si le load average est supérieur à 2. Ce paramètre est différent de celui du nombre maximal de travaux (fichier de configuration). Avant que ledaemon de construction n&#039;accepte un nouveau travail, il s&#039;assure que le load average est inférieur à la capacité et que le nombre de travaux est inférieur au nombre maximal. Toutefois, à l&#039;ère des CPU multi-coeurs, un load average de 2 est insuffisant pour consommer 100% des ressources du système. Il n&#039;y a pas d&#039;option pour définir la capacité en ligne de commande, cela doit être fait en base (psql).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji@localhost$ psql koji&lt;br /&gt;
koji=# select (id, name, capacity) from host;&lt;br /&gt;
              row               &lt;br /&gt;
--------------------------------&lt;br /&gt;
 (1,kojibuilder1.didier-linux.eu,2)&lt;br /&gt;
 (2,kojibuilder2.didier-linux.eu,2)&lt;br /&gt;
(2 rows)&lt;br /&gt;
&lt;br /&gt;
koji=# update host set capacity = 16 where id = 1;&lt;br /&gt;
UPDATE 1&lt;br /&gt;
koji=# &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Démarrage du daemon Kojid ====&lt;br /&gt;
&lt;br /&gt;
Une fois le constructeur ajouté à la base de données, on peut démarrer son daemon de construction.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl start kojid&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
On vérifie dans le fichier &amp;lt;path&amp;gt;/var/log/kojid.log&amp;lt;/path&amp;gt; qur le daemon a bien démarré. Si aucune erreur n&#039;est rapportée, c&#039;est que le daemon doit être correctement configuré et démarré. On peut le vérifier sur l&#039;interface Koji-web dans l&#039;onglet &#039;&#039;hôtes&#039;&#039;. Cette page affiche le liste des constructeurs et leur status.&lt;br /&gt;
&lt;br /&gt;
== Kojira - Création et maintenance du dépôt ==&lt;br /&gt;
&#039;&#039;&#039;Fichiers de Configuration:&#039;&#039;&#039;&lt;br /&gt;
* Configuration du daemon Kojira: &amp;lt;path&amp;gt;/etc/kojira/kojira.conf&amp;lt;/path&amp;gt;&lt;br /&gt;
* Variables de lancement du daemon: &amp;lt;path&amp;gt;/etc/sysconfig/kojira&amp;lt;/path&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Installation de kojira&#039;&#039;&#039;&lt;br /&gt;
 yum install koji-utils&lt;br /&gt;
&lt;br /&gt;
==== Configuration générale ====&lt;br /&gt;
La directive &#039;&#039;server&#039;&#039; a besoin de pointer sur le koji-hub.&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojira/kojira.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; The URL for the xmlrpc server&lt;br /&gt;
server=http://koji.didier-linux.eu/kojihub&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
{{Admon/important|Note importante|&lt;br /&gt;
* Kojira a besoin d&#039;un accès en lecture/écriture sur &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;. &lt;br /&gt;
* Il ne devrait exister qu&#039;une seule instance de {{class|kojira}} à la fois.&lt;br /&gt;
* Il n&#039;est pas recommandé de lancer kojira sur les constructeurs, car ceux-ci n&#039;ont besoin que d&#039;un accès en lecture seule sur le répertoire &amp;lt;path&amp;gt;/mnt/koji&amp;lt;/path&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
==== Configuration de l&#039;authentification SSL ====&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/kojira/kojira.conf&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
;client certificate&lt;br /&gt;
; This should reference the kojira certificate we created above&lt;br /&gt;
cert = /etc/pki/koji/kojira.pem&lt;br /&gt;
&lt;br /&gt;
;certificate of the CA that issued the client certificate&lt;br /&gt;
ca = /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
&lt;br /&gt;
;certificate of the CA that issued the HTTP server certificate&lt;br /&gt;
serverca = /etc/pki/koji/koji_ca_cert.crt&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;The local user kojira runs as needs to be able to read and write to /mnt/koji/repos/.&lt;br /&gt;
If the volume that directory resides on is root-squashed or otherwise unmodifiable&lt;br /&gt;
by root, you can set &#039;&#039;&#039;RUNAS=&#039;&#039;&#039; to a user that has the required privileges.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/etc/sysconfig/kojira&amp;lt;/path&amp;gt;|&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FORCE_LOCK=Y&lt;br /&gt;
KOJIRA_DEBUG=N&lt;br /&gt;
KOJIRA_VERBOSE=Y&lt;br /&gt;
RUNAS=root&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
==== Ajout de l&#039;utilisateur kojira à Koji ====&lt;br /&gt;
Si cela n&#039;a pas été déjà fait, création de l&#039;utilisateur kojira et ajout du droit &#039;&#039;&#039;repo&#039;&#039;&#039; à celui-ci. Cela doit être fait avec le compte de l&#039;administrateur de Koji.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
koji add-user kojira&lt;br /&gt;
koji grant-permission repo kojira&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Démarrage du deamon Kojira ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
systemctl start kojira.service&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
On vérifie dans le fichier &amp;lt;path&amp;gt;/var/log/kojira/kojira.log&amp;lt;/path&amp;gt; que {{class|kojira}} a bien démarré.&lt;br /&gt;
&lt;br /&gt;
== SELinux ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
semanage fcontext -a -t httpd_sys_rw_content_t &#039;/mnt/koji(/.*)?&#039;&lt;br /&gt;
restorecon -Rv /mnt/koji&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Catégorie:RPM|Install Koji]]&lt;br /&gt;
[[Catégorie:Koji|Install]]&lt;br /&gt;
[[Catégorie:Server|Install Koji]]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Fichier:MockKojiMash.pdf&amp;diff=138</id>
		<title>Fichier:MockKojiMash.pdf</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Fichier:MockKojiMash.pdf&amp;diff=138"/>
		<updated>2017-04-20T09:35:42Z</updated>

		<summary type="html">&lt;p&gt;Didier : RPM Building with Mock, Koji and Mash by Steve Tralen (CERN)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;RPM Building with Mock, Koji and Mash by Steve Tralen (CERN)&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Fichier:KojiArch.svg&amp;diff=137</id>
		<title>Fichier:KojiArch.svg</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Fichier:KojiArch.svg&amp;diff=137"/>
		<updated>2017-04-20T09:31:58Z</updated>

		<summary type="html">&lt;p&gt;Didier : Koji simplified architecture&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Koji simplified architecture&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Fichier:IconTextFile16.png&amp;diff=136</id>
		<title>Fichier:IconTextFile16.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Fichier:IconTextFile16.png&amp;diff=136"/>
		<updated>2017-04-20T09:29:20Z</updated>

		<summary type="html">&lt;p&gt;Didier : Icon Plain text 16 pixels&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Icon Plain text 16 pixels&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Mod%C3%A8le:Admon/file&amp;diff=135</id>
		<title>Modèle:Admon/file</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Mod%C3%A8le:Admon/file&amp;diff=135"/>
		<updated>2017-04-20T09:27:56Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « &amp;lt;noinclude&amp;gt;{{high-risk template|pagecount=all pages}}&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;div&amp;gt; &amp;lt;div style=&amp;quot;background-color: {{{bgcolor|#C1FFE9}}}; border: 1px solid {{{bdcolor|#c4c2... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{high-risk template|pagecount=all pages}}&amp;lt;/noinclude&amp;gt;&amp;lt;includeonly&amp;gt;&amp;lt;div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color: {{{bgcolor|#C1FFE9}}}; border: 1px solid {{{bdcolor|#c4c295}}}; border-radius-top-left: 4px; border-radius-top-right: 4px; color: {{{fgcolor|black}}}; padding: 5px; margin: 1ex 0 -2ex 0;&amp;quot;&amp;gt;[[File:IconTextFile16.png]] {{{1}}}&amp;lt;/div&amp;gt;&lt;br /&gt;
{{{2}}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{Admon/file|&amp;lt;path&amp;gt;/tmp/path/to/my/file&amp;lt;/path&amp;gt;|&amp;lt;pre&amp;gt;&lt;br /&gt;
line 1 &lt;br /&gt;
line 2&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
{{tempdoc}}[[Category:Admonition templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=RPM&amp;diff=134</id>
		<title>RPM</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=RPM&amp;diff=134"/>
		<updated>2017-04-20T09:24:55Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Environnement de construction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Admon/tip|&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;Fedora Packaging&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;|&lt;br /&gt;
* [https://admin.fedoraproject.org FAS Account]&lt;br /&gt;
* [http://fedoraproject.org/wiki/Packaging:Guidelines Guidelines]&lt;br /&gt;
* [http://fedoraproject.org/wiki/Changes/FormatSecurity Format Security]&lt;br /&gt;
* [http://fedoraproject.org/wiki/Package_SCM_admin_requests SCM Requests]&lt;br /&gt;
* [https://fedoraproject.org/wiki/Using_Fedora_GIT Using git and fedpkg]&lt;br /&gt;
* [https://fedoraproject.org/wiki/Using_the_Koji_build_system Using the Koji build system]&lt;br /&gt;
* [https://admin.fedoraproject.org/pkgdb Package Database]: manage contact, package admins (bodhi), etc...&lt;br /&gt;
* [http://fedoraproject.org/wiki/New_package_process_for_existing_contributors Package process for existing contributors]&lt;br /&gt;
* [http://fedoraproject.org/wiki/Package_Review_Process Package Review Process]&lt;br /&gt;
* [https://fedoraproject.org/wiki/Join_the_package_collection_maintainers Join the package collection maintainers]&lt;br /&gt;
* [https://fedoraproject.org/wiki/Package_update_HOWTO Updating Package HowTo]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Commande rpm ==&lt;br /&gt;
* [[RPM/Using|Utiliser la commande &amp;lt;app&amp;gt;rpm&amp;lt;/app&amp;gt;]]&lt;br /&gt;
* [[RPM/UsingYum|Utiliser la commande &amp;lt;app&amp;gt;yum&amp;lt;/app&amp;gt;]]&lt;br /&gt;
* [[RPM/DNF/FAQ| F.A.Q. concernant &amp;lt;app&amp;gt;dnf&amp;lt;/app&amp;gt;]]&lt;br /&gt;
* [[RPM/DNFvYUM|Comparatif de &amp;lt;app&amp;gt;dnf&amp;lt;/app&amp;gt; et de &amp;lt;app&amp;gt;yum&amp;lt;/app&amp;gt;]]&lt;br /&gt;
* [[RPM/Troubleshooting|Gérer les problèmes liés aux RPMs]]&lt;br /&gt;
&lt;br /&gt;
== Fichier Spec ==&lt;br /&gt;
* [[RPM/Spec|Fichiers Spec]]&lt;br /&gt;
&lt;br /&gt;
== Environnement de construction ==&lt;br /&gt;
* [[RPM/Environnement|Building Environment]]&lt;br /&gt;
&lt;br /&gt;
== Koji ==&lt;br /&gt;
&lt;br /&gt;
=== Installation d&#039;un serveur Koji personnel ===&lt;br /&gt;
* [[Koji/Installation|Installation d&#039;un serveur Koji]] pas à pas avec l’authentification SSL.&lt;br /&gt;
* Installation d&#039;un repository avec [[RPM/Mash|Mash]]&lt;br /&gt;
&lt;br /&gt;
=== Bootstrap de son serveur Koji ===&lt;br /&gt;
* [[Koji/Bootstrap|Bootstrap de Koji]]&lt;br /&gt;
&lt;br /&gt;
=== Utilisation de son serveur Koji ===&lt;br /&gt;
* [[Koji/Utilisation|Utilisation de Koji]]&lt;br /&gt;
* [[Koji/CLI|Utilisation du client Koji en ligne de commande]]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=RPM&amp;diff=133</id>
		<title>RPM</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=RPM&amp;diff=133"/>
		<updated>2017-04-20T09:23:14Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « {{Admon/tip|&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;Fedora Packaging&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;| * [https://admin.fedoraproject.org FAS Account] * [http://fedoraproject.org/wiki/Packaging:Guidelines Guidelines] * [ht... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Admon/tip|&amp;lt;big&amp;gt;&amp;lt;big&amp;gt;Fedora Packaging&amp;lt;/big&amp;gt;&amp;lt;/big&amp;gt;|&lt;br /&gt;
* [https://admin.fedoraproject.org FAS Account]&lt;br /&gt;
* [http://fedoraproject.org/wiki/Packaging:Guidelines Guidelines]&lt;br /&gt;
* [http://fedoraproject.org/wiki/Changes/FormatSecurity Format Security]&lt;br /&gt;
* [http://fedoraproject.org/wiki/Package_SCM_admin_requests SCM Requests]&lt;br /&gt;
* [https://fedoraproject.org/wiki/Using_Fedora_GIT Using git and fedpkg]&lt;br /&gt;
* [https://fedoraproject.org/wiki/Using_the_Koji_build_system Using the Koji build system]&lt;br /&gt;
* [https://admin.fedoraproject.org/pkgdb Package Database]: manage contact, package admins (bodhi), etc...&lt;br /&gt;
* [http://fedoraproject.org/wiki/New_package_process_for_existing_contributors Package process for existing contributors]&lt;br /&gt;
* [http://fedoraproject.org/wiki/Package_Review_Process Package Review Process]&lt;br /&gt;
* [https://fedoraproject.org/wiki/Join_the_package_collection_maintainers Join the package collection maintainers]&lt;br /&gt;
* [https://fedoraproject.org/wiki/Package_update_HOWTO Updating Package HowTo]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Commande rpm ==&lt;br /&gt;
* [[RPM/Using|Utiliser la commande &amp;lt;app&amp;gt;rpm&amp;lt;/app&amp;gt;]]&lt;br /&gt;
* [[RPM/UsingYum|Utiliser la commande &amp;lt;app&amp;gt;yum&amp;lt;/app&amp;gt;]]&lt;br /&gt;
* [[RPM/DNF/FAQ| F.A.Q. concernant &amp;lt;app&amp;gt;dnf&amp;lt;/app&amp;gt;]]&lt;br /&gt;
* [[RPM/DNFvYUM|Comparatif de &amp;lt;app&amp;gt;dnf&amp;lt;/app&amp;gt; et de &amp;lt;app&amp;gt;yum&amp;lt;/app&amp;gt;]]&lt;br /&gt;
* [[RPM/Troubleshooting|Gérer les problèmes liés aux RPMs]]&lt;br /&gt;
&lt;br /&gt;
== Fichier Spec ==&lt;br /&gt;
* [[RPM/Spec|Fichiers Spec]]&lt;br /&gt;
&lt;br /&gt;
== Environnement de construction ==&lt;br /&gt;
* [[RPM/Environnement|Building Environment]]&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Accueil&amp;diff=132</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Accueil&amp;diff=132"/>
		<updated>2017-04-20T09:15:37Z</updated>

		<summary type="html">&lt;p&gt;Didier : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTITLE__&lt;br /&gt;
&amp;lt;!-- CONTENU --&amp;gt;&lt;br /&gt;
{| style=&amp;quot;margin-top:10px; background:none;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width:67%; border:1px solid #a7d7f9; vertical-align:top; color:#000; padding: 0px 10px 10px 0px; border-radius:6px;&amp;quot; |&lt;br /&gt;
{| cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;5&amp;quot; style=&amp;quot;width:98%; vertical-align:top; background:transparent;&amp;quot;&lt;br /&gt;
| &amp;lt;div id=&amp;quot;accueil_titre&amp;quot;&amp;gt;{{Accueil/Titre}}&lt;br /&gt;
{{Accueil/Fastlink}}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&amp;lt;!-- =============== LUMIERE SUR =============== --&amp;gt;&lt;br /&gt;
| {{Accueil/Cadre&lt;br /&gt;
|titre   = Lumière sur&lt;br /&gt;
|id      = accueil-lumieresur&lt;br /&gt;
|image   = IconBookmark32.png&lt;br /&gt;
|contenu = &amp;lt;div id=&amp;quot;mf-lumieresur&amp;quot; title=&amp;quot;Lumière sur&amp;quot;&amp;gt;&lt;br /&gt;
Le tutorial qui va bien pour écrire des articles sur ce wiki.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|lien = [[Tuto/Edit|Tutorial]] • [[Tuto/Edit|Tutorial]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;!-- =============== ACTUALITES ET EVENEMENTS =============== --&amp;gt;&lt;br /&gt;
| {{Accueil/Cadre&lt;br /&gt;
|titre   = Actualités et événements&lt;br /&gt;
|id      = accueil-actualite&lt;br /&gt;
|image   = IconCalendar32.png&lt;br /&gt;
|contenu = &amp;lt;div id=&amp;quot;mf-actualite&amp;quot; title=&amp;quot;Actualités et évènements&amp;quot;&amp;gt;{{Accueil/news}}&amp;lt;/div&amp;gt;&lt;br /&gt;
|lien    = [[Modèle:Accueil/news|Gérer les actualités]]&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;!-- =============== LE SAVIEZ-VOUS ? =============== --&amp;gt;&lt;br /&gt;
| {{Accueil/Cadre&lt;br /&gt;
|titre   = Le saviez-vous ?&lt;br /&gt;
|image   = IconQuestion32.png&lt;br /&gt;
|contenu = &amp;lt;div id=&amp;quot;mf-SaviezVous&amp;quot; title=&amp;quot;Le saviez-vous ?&amp;quot;&amp;gt;{{Accueil/DoYouKnow}}&amp;lt;/div&amp;gt;&lt;br /&gt;
|lien    = [[Modèle:Accueil/DoYouKnow|Gérer les astuces]]&lt;br /&gt;
|id = SaviezVous&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;!-- =============== FIN COLONNE DE GAUCHE =============== --&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
|&amp;lt;!-- ESPACE ENTRE LES 2 COLONNES --&amp;gt;  style=&amp;quot;border:4px solid transparent;&amp;quot; |&lt;br /&gt;
&amp;lt;!-- =============== COLONNE DE DROITE =============== --&amp;gt;&lt;br /&gt;
| style=&amp;quot;width:33%; border:1px solid #a7d7f9; background:#f5faff; vertical-align:top; padding: 0px 10px 10px 0px; border-radius:6px;&amp;quot;|&lt;br /&gt;
{| id=&amp;quot;mp-right&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;5&amp;quot; style=&amp;quot;width:98%; vertical-align:top; background:#f5faff; background:transparent;  text-align: left;&amp;quot;&lt;br /&gt;
&amp;lt;!-- =============== IMAGE DU JOUR =============== --&amp;gt;&lt;br /&gt;
| {{Accueil/Cadre2&lt;br /&gt;
|titre   = Image du jour&lt;br /&gt;
|image   =  IconImage32.png&lt;br /&gt;
|contenu = &amp;lt;randomimage size=&amp;quot;300&amp;quot; float=&amp;quot;left&amp;quot; choices=&amp;quot;PovrayCityArctic.png | PovrayCityDefault.png | PovrayCityScap.png | PovrayCityWaterlin.png | PovrayGalaxyBigNebula.png | PovrayGalaxyOuterSpace.png | PovrayObjectStarwarsAWing.png | PovrayObjectStarwarsBWing.png | PovrayObjectStarwarsCCRV.png | PovrayObjectStarwarsCloudCity.png | PovrayObjectStarwarsEWing.png | PovrayObjectStarwarsFalcon.png | PovrayObjectStarwarsSTDEST.png | PovrayObjectStarwarsShuttle.png | PovrayObjectStarwarsTieD.png | PovrayObjectStarwarsTieDef.png | PovrayObjectStarwarsTieFighter.png | PovrayObjectStarwarsTieInterceptor.png | PovrayObjectStarwarsXWing.png | PovrayObjectStarwarsYWing.png | PovrayTutoRealisticWater01.png | PovrayTutoRealisticWater02.png | PovrayTutoRealisticWater03.png | PovrayTutoRealisticWater04.png | PovrayTutoRealisticWater05.png | PovrayTutoRealisticWater06.png | PovrayTutoRealisticWater07.png | PovrayTutoRealisticWater08.png | PovrayTutoRealisticWater09.png&amp;quot;&amp;gt;&amp;lt;/randomimage&amp;gt;&lt;br /&gt;
|id = ImageDuJour&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;!-- =============== PRESENTATION =============== --&amp;gt;&lt;br /&gt;
| {{Accueil/Cadre2&lt;br /&gt;
| image   = IconPresentation32.png&lt;br /&gt;
| titre   = Présentation&lt;br /&gt;
| contenu = {{Accueil/Présentation}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;!-- =============== PARTICIPATION =============== --&amp;gt;&lt;br /&gt;
| {{Accueil/Cadre2&lt;br /&gt;
| image   = IconEdit32.png&lt;br /&gt;
| titre   = Participation&lt;br /&gt;
| contenu = {{Accueil/Participation}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;!-- =============== COMMUNAUTE =============== --&amp;gt;&lt;br /&gt;
| {{Accueil/Cadre2&lt;br /&gt;
| image   = IconCommunity32.png&lt;br /&gt;
| titre   = Communauté&lt;br /&gt;
| contenu =  {{Accueil/Communauté}} &lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;!-- =============== PIED DE PAGE =============== --&amp;gt;&lt;br /&gt;
{{Accueil/Contact}}&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
pas de menu, pas de « modifier » à chaque section.&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;__NOTOC__&amp;lt;!-- --&amp;gt;__NOEDITSECTION__&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
Liste des vingt plus grands interwikis&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Tuto/Edit&amp;diff=131</id>
		<title>Tuto/Edit</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Tuto/Edit&amp;diff=131"/>
		<updated>2017-04-20T09:13:12Z</updated>

		<summary type="html">&lt;p&gt;Didier : /* Ajouter une note d&amp;#039;auteur ( simple, importante, avertissement, astuce, auteur original ) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Syntaxe =&lt;br /&gt;
* Aide générale sur la syntaxe: http://fr.wikipedia.org/wiki/Aide:Syntaxe&lt;br /&gt;
* Mot clés de Mediawiki: http://www.mediawiki.org/wiki/Help:Magic_words&lt;br /&gt;
&lt;br /&gt;
= Règle de base =&lt;br /&gt;
La recherche dans les pages du wiki ainsi et que la maintenance de celui-ci est grandement facilité par l&#039;ajout de catégorie sur chaque page.&lt;br /&gt;
&lt;br /&gt;
= Modification générale de MediaWiki =&lt;br /&gt;
Tous les changements de cette section doivent être édité avec le compte administrateur.&lt;br /&gt;
* &#039;&#039;&#039;Menu latéral&#039;&#039;&#039;: [[MediaWiki:Sidebar]]&lt;br /&gt;
* &#039;&#039;&#039;Ajout de CSS à tous les styles&#039;&#039;&#039;: [[MediaWiki:Common.css]]&lt;br /&gt;
* &#039;&#039;&#039;Ajout de CSS pour l&#039;impression&#039;&#039;&#039;: [[MediaWiki:Print.css]]&lt;br /&gt;
&lt;br /&gt;
= Modules intégrés =&lt;br /&gt;
==Upload de fichier==&lt;br /&gt;
&lt;br /&gt;
Page d&#039;aide sur la configuration de l&#039;upload de fichiers &amp;lt;ref&amp;gt;http://www.mediawiki.org/wiki/Manual:Configuring_file_uploads&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Tableau==&lt;br /&gt;
Page d&#039;aide sur les tableaux &amp;lt;ref&amp;gt;http://www.mediawiki.org/wiki/Help:Tables/fr&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple d&#039;utilisation&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Titre du tableau&lt;br /&gt;
!Titre de colonne1&lt;br /&gt;
!Titre de colonne2&lt;br /&gt;
|-&lt;br /&gt;
|Cellule 1 sur la ligne 1&lt;br /&gt;
|Cellule 2 sur la ligne 1&lt;br /&gt;
|-&lt;br /&gt;
|Cellule 1 sur la ligne 2&lt;br /&gt;
|Cellule 2 sur la ligne 2&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Titre du tableau&amp;lt;br&amp;gt;&lt;br /&gt;
!Titre de colonne1&lt;br /&gt;
!Titre de colonne2&lt;br /&gt;
|-&lt;br /&gt;
|Cellule 1 sur la ligne 1&lt;br /&gt;
|Cellule 2 sur la ligne 1&lt;br /&gt;
|-&lt;br /&gt;
|Cellule 1 sur la ligne 2&lt;br /&gt;
|Cellule 2 sur la ligne 2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Modules supplémentaires =&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;CategoryTree&#039;&#039;&#039;: Afficher une vue en arbre des catégories&amp;lt;ref&amp;gt;http://www.mediawiki.org/wiki/Extension:CategoryTree/fr&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Cite&#039;&#039;&#039;: Créer des notes de bas de page, collection de références, etc...&amp;lt;ref&amp;gt;http://www.mediawiki.org/wiki/Extension:Cite/Cite.php&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;ParserFunctions&#039;&#039;&#039;: Fonctions avancées pour les extensions&amp;lt;ref&amp;gt;http://www.mediawiki.org/wiki/Help:Extension:ParserFunctions/fr&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Mpdf&#039;&#039;&#039;: Export de page en PDF&amp;lt;ref&amp;gt;http://www.mediawiki.org/wiki/Extension:Mpdf&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SyntaxHighlight_GeSHi&#039;&#039;&#039;: Coloration syntaxique de code source&amp;lt;ref&amp;gt;http://www.mediawiki.org/wiki/Extension:SyntaxHighlight_GeSHi&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;RandomImage&#039;&#039;&#039;: Ajout d&#039;une image aléatoire&amp;lt;ref&amp;gt;http://www.mediawiki.org/wiki/Extension:RandomImage&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;SSL_authentification&#039;&#039;&#039;: Authentification via un certificat&amp;lt;ref&amp;gt;http://www.mediawiki.org/wiki/Extension:SSL_authentication&amp;lt;/ref&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;CustomTag&#039;&#039;&#039;: Permet l&#039;usage des tags suivants dans le code wiki ( en ligne )&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;&amp;lt;path&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; Affichage du path ex: &amp;lt;path&amp;gt;/home/user&amp;lt;/path&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;&amp;lt;package&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; Affichage du nom du paquet ex: &amp;lt;package&amp;gt;perl-ExtUtils-MakeMaker&amp;lt;/package&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;&amp;lt;app&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; Affichage du nom de l&#039;application ex: &amp;lt;app&amp;gt;vim&amp;lt;/app&amp;gt;&lt;br /&gt;
** &#039;&#039;&#039;&amp;lt;nowiki&amp;gt;&amp;lt;class&amp;gt;&amp;lt;/nowiki&amp;gt;&#039;&#039;&#039; Affichage du nom de la class ex: &amp;lt;class&amp;gt;KVirtualView&amp;lt;/class&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Macros définies permettant un affichage spécial =&lt;br /&gt;
&lt;br /&gt;
== Mettre en valeur un mot ==&lt;br /&gt;
* &#039;&#039;&#039;class&#039;&#039;&#039; pour mettre en valeur un nom de class ( en ligne ) {{class|KVirtual}}&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{class|KVirtual}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;path&#039;&#039;&#039; pour mettre en valeur un chemin ( en ligne ), ex: {{path|/home/user}}&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{path|/home/user}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;filename&#039;&#039;&#039; pour mettre en valeur un nom de fichier ( en ligne ), ex: {{filename|/etc/mail/aliases}}&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{filename|/etc/mail/aliases}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;package&#039;&#039;&#039; pour mettre en valeur un nom de paquet ( en ligne ), ex: {{package|perl-ExtUtils-MakeMaker}}&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{package|perl-ExtUtils-MakeMaker}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;app&#039;&#039;&#039; pour mettre en valeur un nom d&#039;application ( en ligne ), ex: {{app|vim}}&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{app|vim}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;code&#039;&#039;&#039; pour mettre en valeur un morceau de code ( en ligne ), ex: {{code|find /etc -type f -name &#039;*.conf&#039;}}&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{code|find /etc -type f -name &#039;*.conf&#039;}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;command&#039;&#039;&#039; pour mettre en valeur une commande ( en ligne ), ex: {{command|find /etc -type f -name &#039;*.conf&#039;}}&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{command|find /etc -type f -name &#039;*.conf&#039;}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;color&#039;&#039;&#039; pour mettre en couleur un mot ( en ligne ), ex: {{color|red|mots en couleur}}&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{color|red|mots en couleur}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Ajouter une note d&#039;auteur ( simple, importante, avertissement, astuce, auteur original ) ==&lt;br /&gt;
* &#039;&#039;&#039;Admon/note&#039;&#039;&#039; pour écrire une note d&#039;information&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{Admon/note|Titre|texte optionnel de la note}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{Admon/note|Titre|texte optionnel de la note}}&lt;br /&gt;
* &#039;&#039;&#039;Admon/warning&#039;&#039;&#039; pour écrire un avertissement bien visible&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{Admon/warning|Titre|Texte optionnel du warning}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{Admon/warning|Titre|Texte optionnel du warning}}&lt;br /&gt;
* &#039;&#039;&#039;Admon/important&#039;&#039;&#039; pour écrire une note très importante&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{Admon/important|Titre|Texte optionnel de la note importante}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{Admon/important|Titre|Texte optionnel de la note importante}}&lt;br /&gt;
* &#039;&#039;&#039;Admon/tip&#039;&#039;&#039; pour écrire une astuce bien visible&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{Admon/tip|Titre|Texte optionnel de l&#039;astuce}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{Admon/tip|Titre|Texte optionnel de l&#039;astuce}}&lt;br /&gt;
* &#039;&#039;&#039;Admon/bug&#039;&#039;&#039; pour signaler un bug&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{Admon/bug|Titre|Texte optionnel du bug}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{Admon/bug|Titre|Texte optionnel du bug}}&lt;br /&gt;
* &#039;&#039;&#039;Admon/faq&#039;&#039;&#039; pour écrire une question réponse&lt;br /&gt;
{{Admon/faq|Question|Answer}}&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{Admon/faq|Question|Answer}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;author&#039;&#039;&#039; pour afficher les auteurs et les participants éventuels lorsqu&#039;il s&#039;agit d&#039;une page recopié d&#039;un autre wiki.&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{author|author=Auteur original|othersauthors=Liste des participants éventuels (paramètre optionnel)|url=Lien vers l&#039;URL d&#039;origine (paramètre optionnel)}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{author|author=Auteur original|othersauthors=Liste des participants éventuels (paramètre optionnel)|url=Lien vers l&#039;URL d&#039;origine (paramètre optionnel)}}&lt;br /&gt;
&lt;br /&gt;
== Smileys ==&lt;br /&gt;
* &#039;&#039;&#039;Admon/smiley&#039;&#039;&#039;&lt;br /&gt;
Good Job {{Admon/smiley|:)}}&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;{{Admon/smiley|:)}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{{:Modèle:Admon/smiley/example}}&lt;br /&gt;
&lt;br /&gt;
Consultez le [http://meta.wikimedia.org/wiki/Aide:Contenu Guide de l’utilisateur] pour plus d’informations sur l’utilisation de ce logiciel.&lt;br /&gt;
&lt;br /&gt;
= Langages supportés par l&#039;extension de coloration syntaxique =&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;syntaxhighlight lang=&amp;quot;CODE&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float:left;margin-right:20px;&amp;quot;&lt;br /&gt;
!Code||Language&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;abap&amp;lt;/code&amp;gt;||ABAP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;actionscript&amp;lt;/code&amp;gt;||ActionScript&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;ada&amp;lt;/code&amp;gt;||Ada&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;apache&amp;lt;/code&amp;gt;||Apache Configuration&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;applescript&amp;lt;/code&amp;gt;||AppleScript&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;asm&amp;lt;/code&amp;gt;||Assembly&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;asp&amp;lt;/code&amp;gt;||Active Server Pages (ASP)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;autoit&amp;lt;/code&amp;gt;||AutoIt&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;bash&amp;lt;/code&amp;gt;||Bash&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;basic4gl&amp;lt;/code&amp;gt;||Basic4GL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;bf&amp;lt;/code&amp;gt;||Brainfuck&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;blitzbasic&amp;lt;/code&amp;gt;||Blitz BASIC&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;bnf&amp;lt;/code&amp;gt;||Backus-Naur Form&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;||C&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;c_mac&amp;lt;/code&amp;gt;||C (Mac)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;caddcl&amp;lt;/code&amp;gt;||AutoCAD DCL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cadlisp&amp;lt;/code&amp;gt;||AutoLISP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cfdg&amp;lt;/code&amp;gt;||CFDG&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cfm&amp;lt;/code&amp;gt;||ColdFusion Markup Language&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cil&amp;lt;/code&amp;gt;||Common Intermediate Language (CIL)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cobol&amp;lt;/code&amp;gt;||COBOL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cpp-qt&amp;lt;/code&amp;gt;||C++ (Qt toolkit)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;cpp&amp;lt;/code&amp;gt;||C++&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;csharp&amp;lt;/code&amp;gt;||C#&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;css&amp;lt;/code&amp;gt;||Cascading Style Sheets (CSS)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt;||D&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;delphi&amp;lt;/code&amp;gt;||Delphi&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;diff&amp;lt;/code&amp;gt;||Diff&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;div&amp;lt;/code&amp;gt;||DIV&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;dos&amp;lt;/code&amp;gt;||DOS batch file&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;dot&amp;lt;/code&amp;gt;||DOT&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;eiffel&amp;lt;/code&amp;gt;||Eiffel&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;fortran&amp;lt;/code&amp;gt;||Fortran&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;freebasic&amp;lt;/code&amp;gt;||FreeBASIC&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;genero&amp;lt;/code&amp;gt;||Genero&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;gettext&amp;lt;/code&amp;gt;||GNU internationalization (i18n) library&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;glsl&amp;lt;/code&amp;gt;||OpenGL Shading Language (GLSL)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;gml&amp;lt;/code&amp;gt;||Game Maker Language (GML)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;gnuplot&amp;lt;/code&amp;gt;||gnuplot&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;groovy&amp;lt;/code&amp;gt;||Groovy&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;haskell&amp;lt;/code&amp;gt;||Haskell&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;hq9plus&amp;lt;/code&amp;gt;||HQ9+&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;html4strict&amp;lt;/code&amp;gt;||HTML&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;idl&amp;lt;/code&amp;gt;||Uno IDL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;ini&amp;lt;/code&amp;gt;||INI&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;inno&amp;lt;/code&amp;gt;||Inno&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;intercal&amp;lt;/code&amp;gt;||INTERCAL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;io&amp;lt;/code&amp;gt;||Io&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;java&amp;lt;/code&amp;gt;||Java&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;java5&amp;lt;/code&amp;gt;||Java(TM) 2 Platform Standard Edition 5.0 &lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;javascript&amp;lt;/code&amp;gt;||JavaScript&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;kixtart&amp;lt;/code&amp;gt;||KiXtart&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;klonec&amp;lt;/code&amp;gt;||Klone C&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;klonecpp&amp;lt;/code&amp;gt;||Klone C++&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;latex&amp;lt;/code&amp;gt;||LaTeX&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;lisp&amp;lt;/code&amp;gt;||Lisp&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;lolcode&amp;lt;/code&amp;gt;||LOLCODE&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;lotusscript&amp;lt;/code&amp;gt;||LotusScript&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;lua&amp;lt;/code&amp;gt;||Lua&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float:left&amp;quot;&lt;br /&gt;
!Code||Language&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;m68k&amp;lt;/code&amp;gt;||Motorola 68000 Assembler&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;make&amp;lt;/code&amp;gt;||make&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;matlab&amp;lt;/code&amp;gt;||MATLAB M&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mirc&amp;lt;/code&amp;gt;||mIRC scripting language&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mxml&amp;lt;/code&amp;gt;||MXML&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mpasm&amp;lt;/code&amp;gt;||Microchip Assembler&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;mysql&amp;lt;/code&amp;gt;||MySQL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;nsis&amp;lt;/code&amp;gt;||Nullsoft Scriptable Install System (NSIS)&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;objc&amp;lt;/code&amp;gt;||Objective-C&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;ocaml-brief&amp;lt;/code&amp;gt;||OCaml&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;ocaml&amp;lt;/code&amp;gt;||OCaml&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;oobas&amp;lt;/code&amp;gt;||OpenOffice.org Basic&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;oracle8&amp;lt;/code&amp;gt;||Oracle 8 SQL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;oracle11&amp;lt;/code&amp;gt;||Oracle 11 SQL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;pascal&amp;lt;/code&amp;gt;||Pascal&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;per&amp;lt;/code&amp;gt;||per&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;perl&amp;lt;/code&amp;gt;||Perl&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;php-brief&amp;lt;/code&amp;gt;||PHP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;php&amp;lt;/code&amp;gt;||PHP&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;pixelbender&amp;lt;/code&amp;gt;||Pixel Bender&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;plsql&amp;lt;/code&amp;gt;||PL/SQL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;povray&amp;lt;/code&amp;gt;||Persistence of Vision Raytracer&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;powershell&amp;lt;/code&amp;gt;||Windows PowerShell&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;progress&amp;lt;/code&amp;gt;||OpenEdge Advanced Business Language&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;prolog&amp;lt;/code&amp;gt;||Prolog&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;providex&amp;lt;/code&amp;gt;||ProvideX&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;python&amp;lt;/code&amp;gt;||Python&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;qbasic&amp;lt;/code&amp;gt;||QBasic/QuickBASIC&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;rails&amp;lt;/code&amp;gt;||Rails&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;reg&amp;lt;/code&amp;gt;||Windows Registry&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;robots&amp;lt;/code&amp;gt;||robots.txt&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;ruby&amp;lt;/code&amp;gt;||Ruby&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;sas&amp;lt;/code&amp;gt;||SAS&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;scala&amp;lt;/code&amp;gt;||Scala&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;scheme&amp;lt;/code&amp;gt;||Scheme&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;scilab&amp;lt;/code&amp;gt;||Scilab&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;sdlbasic&amp;lt;/code&amp;gt;||SdlBasic&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;smalltalk&amp;lt;/code&amp;gt;||Smalltalk&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;smarty&amp;lt;/code&amp;gt;||Smarty&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;sql&amp;lt;/code&amp;gt;||SQL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;tcl&amp;lt;/code&amp;gt;||Tcl&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;teraterm&amp;lt;/code&amp;gt;||Tera Term&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;text&amp;lt;/code&amp;gt;||Plain text&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;thinbasic&amp;lt;/code&amp;gt;||thinBasic&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;tsql&amp;lt;/code&amp;gt;||Transact-SQL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;typoscript&amp;lt;/code&amp;gt;||TypoScript&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;vb&amp;lt;/code&amp;gt;||Visual Basic&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;vbnet&amp;lt;/code&amp;gt;||Visual Basic .NET&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;verilog&amp;lt;/code&amp;gt;||Verilog&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;vhdl&amp;lt;/code&amp;gt;||VHDL&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;vim&amp;lt;/code&amp;gt;||Vimscript&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;visualfoxpro&amp;lt;/code&amp;gt;||Visual FoxPro&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;visualprolog&amp;lt;/code&amp;gt;||Visual Prolog&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;whitespace&amp;lt;/code&amp;gt;||Whitespace&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;winbatch&amp;lt;/code&amp;gt;||Winbatch&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xml&amp;lt;/code&amp;gt;||XML&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xorg_conf&amp;lt;/code&amp;gt;||Xorg.conf&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;xpp&amp;lt;/code&amp;gt;||X++&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;code&amp;gt;z80&amp;lt;/code&amp;gt;||ZiLOG Z80 Assembler&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both;&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Notes =&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=MediaWiki:Print.css&amp;diff=130</id>
		<title>MediaWiki:Print.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=MediaWiki:Print.css&amp;diff=130"/>
		<updated>2017-04-20T09:07:32Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « /* Le CSS placé ici affectera les impressions */ .printfooter {display: none;} #footer {display: none;} »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Le CSS placé ici affectera les impressions */&lt;br /&gt;
.printfooter {display: none;}&lt;br /&gt;
#footer {display: none;}&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=MediaWiki:Common.css&amp;diff=129</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=MediaWiki:Common.css&amp;diff=129"/>
		<updated>2017-04-20T09:07:04Z</updated>

		<summary type="html">&lt;p&gt;Didier : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Le CSS placé ici sera appliqué à tous les habillages. */&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=MediaWiki:Common.css&amp;diff=128</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=MediaWiki:Common.css&amp;diff=128"/>
		<updated>2017-04-20T09:06:00Z</updated>

		<summary type="html">&lt;p&gt;Didier : Page créée avec « /* Le CSS placé ici sera appliqué à tous les habillages. */  .bluerounded {   display:block;   background-image:url(&amp;quot;https://didier.dnsdynamic.net/wiki/images/b/be/Blue... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Le CSS placé ici sera appliqué à tous les habillages. */&lt;br /&gt;
&lt;br /&gt;
.bluerounded {&lt;br /&gt;
  display:block;&lt;br /&gt;
  background-image:url(&amp;quot;https://didier.dnsdynamic.net/wiki/images/b/be/BlueBgRounded.png&amp;quot;);&lt;br /&gt;
  background-repeat:no-repeat;&lt;br /&gt;
  background-position:0 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.effect3d {&lt;br /&gt;
  display:block;&lt;br /&gt;
  background-image:url(&amp;quot;https://didier.dnsdynamic.net/wiki/images/1/1a/ItemBg.png&amp;quot;);&lt;br /&gt;
  background-repeat:repeat-x;&lt;br /&gt;
  background-position:0 50%;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Povray/Tutorials/RealisticWater&amp;diff=127</id>
		<title>Povray/Tutorials/RealisticWater</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Povray/Tutorials/RealisticWater&amp;diff=127"/>
		<updated>2017-04-20T06:59:24Z</updated>

		<summary type="html">&lt;p&gt;Didier : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{author|author=Friedrich A. Lohmüller|url=http://www.f-lohmueller.de/}}&lt;br /&gt;
&lt;br /&gt;
== Une surface de l&#039;eau simple, opaque, plate et réfléchissante ==&lt;br /&gt;
{{Povray/tuto|Le plus souvent la surface de l&#039;eau paraît comme un miroir opaque. Pour simuler cette surface il suffit d&#039;ajouter une texture comme &#039;Polished_Chrome&#039;. L&#039;eau même est transparente, légèrement grisée très clair (L&#039;eau claire n&#039;a pas de couleur !!!).&lt;br /&gt;
La couleur d&#039;une surface de l&#039;eau est surtout défini par les objets que se réfléchissent dans la surface. ( Bleu est la couleur de la mer seulement les jours ensoleillés avec un ciel bleu ! L&#039;eau a l&#039;air différente avec des ciels différents ! ).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;povray&amp;quot;&amp;gt;&lt;br /&gt;
plane{&amp;lt;0,1,0&amp;gt;, 0&lt;br /&gt;
      texture{pigment{rgb &amp;lt;.2,.2,.2&amp;gt;}&lt;br /&gt;
              finish {ambient 0.15&lt;br /&gt;
                      diffuse 0.55&lt;br /&gt;
                      brilliance 6.0&lt;br /&gt;
                      phong 0.8&lt;br /&gt;
                      phong_size 120&lt;br /&gt;
                      reflection 0.6}&lt;br /&gt;
              }// end of texture&lt;br /&gt;
     }// end of plane&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Si nous avons inséré les définitions des textures, nous pouvons écrire cela plus court :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;povray&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;textures.inc&amp;quot;&lt;br /&gt;
plane{&amp;lt;0,1,0&amp;gt;, 0&lt;br /&gt;
      texture{ Polished_Chrome }&lt;br /&gt;
     }// end of plane&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| [[Fichier:PovrayTutoRealisticWater01.png|300px|vignette|Surface simple, opaque, plate et réfléchissante&amp;lt;br&amp;gt;[[Media:PovrayTutoRealisticWater01.pov|Fichier POVRay correspondant]]]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== L&#039;eau peu agitée avec reflections des nuages ==&lt;br /&gt;
{{Povray/tuto|Des ondes modérées font une surface de l&#039;eau plus réaliste. Nous ajoutons à la texture la commande suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;povray&amp;quot;&amp;gt;&lt;br /&gt;
normal{ bumps 0.03&lt;br /&gt;
         scale &amp;lt;1,0.25,0.25&amp;gt;*1&lt;br /&gt;
         turbulence 0.6&lt;br /&gt;
       }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| [[Fichier:PovrayTutoRealisticWater02.png|300px|vignette|Surface peu agitée avec réflexion&amp;lt;br&amp;gt;[[Media:PovrayTutoRealisticWater02.pov|Fichier POVRay correspondant]]]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== La mer agitée, la surface de l&#039;eau plus agitée ==&lt;br /&gt;
&lt;br /&gt;
{{Povray/tuto|Nous obtenons cela par ajouter à la texture la commande suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;povray&amp;quot;&amp;gt;&lt;br /&gt;
normal{ bumps 0.3&lt;br /&gt;
        scale 0.05&lt;br /&gt;
        turbulence 0.6&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| [[Fichier:PovrayTutoRealisticWater03.png|300px|vignette|Surface agitée avec bumps&amp;lt;br&amp;gt;[[Media:PovrayTutoRealisticWater03.pov|Fichier POVRay correspondant]]]]&lt;br /&gt;
}}&lt;br /&gt;
{{Povray/tuto|Aussi un effet très realiste on peut voir par ex. comme cela :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;povray&amp;quot;&amp;gt;&lt;br /&gt;
normal{ crackle 0.15&lt;br /&gt;
        scale 0.75&lt;br /&gt;
        turbulence 0.3&lt;br /&gt;
        translate&amp;lt;-1,0,5&amp;gt;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| [[Fichier:PovrayTutoRealisticWater04.png|300px|vignette|Surface agitée avec crackle&amp;lt;br&amp;gt;[[Media:PovrayTutoRealisticWater04.pov|Fichier POVRay correspondant]]]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Une surface de l&#039;eau ridée par le vent ==&lt;br /&gt;
&lt;br /&gt;
{{Povray/tuto|Nous obtenons cela avec le motif &#039;crackle&#039; ou &#039;bozo&#039; et par ajouter des échelles différentes en direction x et y et aussi une rotation dans la direction transversale au vent :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;povray&amp;quot;&amp;gt;&lt;br /&gt;
normal{ bozo 1.75&lt;br /&gt;
         scale &amp;lt;2.0,1,0.3&amp;gt;*0.20&lt;br /&gt;
         rotate&amp;lt;0,10,0&amp;gt;&lt;br /&gt;
         turbulence 0.9&lt;br /&gt;
         translate&amp;lt;0,0,-2&amp;gt;&lt;br /&gt;
       }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| [[Fichier:PovrayTutoRealisticWater05.png|300px|vignette|Surface de l&#039;eau ridée avec bozo&amp;lt;br&amp;gt;[[Media:PovrayTutoRealisticWater05.pov|Fichier POVRay correspondant]]]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Povray/tuto|L&#039;effet ressemblent avec &#039;crackle&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;povray&amp;quot;&amp;gt;&lt;br /&gt;
normal{ pigment_pattern{&lt;br /&gt;
             crackle&lt;br /&gt;
             colour_map { [0, rgb 0]&lt;br /&gt;
                          [1, rgb 1] }&lt;br /&gt;
             turbulence 1.7&lt;br /&gt;
             translate &amp;lt;0,0,1&amp;gt;}&lt;br /&gt;
             0.5}&lt;br /&gt;
       scale &amp;lt;2.0,1,0.3&amp;gt;*2&lt;br /&gt;
       rotate&amp;lt;0,10,0&amp;gt;&lt;br /&gt;
     }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| [[Fichier:PovrayTutoRealisticWater06.png|300px|vignette|Surface de l&#039;eau ridée avec crackle&amp;lt;br&amp;gt;[[Media:PovrayTutoRealisticWater06.pov|Fichier POVRay correspondant]]]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Remarque : Tout cela sont seulement des simulations des surfaces ondulées! Géométriquement, ils sont toujours parfaitement plat. Pour obtenir des des surfaces tridimensionnelles ondulées, il faut beaucoup plus ! Voir ici et ici !&lt;br /&gt;
&lt;br /&gt;
== Une surface de l&#039;eau partiellement transparente et réfléchissante ==&lt;br /&gt;
&lt;br /&gt;
{{Povray/tuto|Si l&#039;eau paraît partiellement transparente et réfléchissante, nous pouvons simuler en utilisant la texture &#039;Glass3&#039; (l&#039;eau clair) ou &#039;Green_Glass&#039; (l&#039;eau verdie par des plantes aquatiques !). Dans ce cas le fond sous-marin doit être bien défini. Le fond a une grande influence sur l&#039;apparence de la surface de l&#039;eau!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;povray&amp;quot;&amp;gt;&lt;br /&gt;
plane{&amp;lt;0,1,0&amp;gt;, 0  translate&amp;lt;0,-3,0&amp;gt;&lt;br /&gt;
       texture{pigment{color LightWood}&lt;br /&gt;
               normal {bumps 0.25&lt;br /&gt;
                       scale 0.05}&lt;br /&gt;
               finish {ambient 0.45&lt;br /&gt;
                       diffuse 0.55}&lt;br /&gt;
               }// end of texture&lt;br /&gt;
       }// end of plane 1&lt;br /&gt;
&lt;br /&gt;
plane{&amp;lt;0,1,0&amp;gt;, 0&lt;br /&gt;
      texture{ Green_Glass&lt;br /&gt;
              normal{ripples 0.3&lt;br /&gt;
                     scale 0.25&lt;br /&gt;
                     turbulence 0.75&lt;br /&gt;
                     translate&amp;lt; 1,0,2&amp;gt;}&lt;br /&gt;
              finish{ambient 0.45&lt;br /&gt;
                     diffuse 0.55&lt;br /&gt;
                     reflection 0.3}&lt;br /&gt;
             }// end of texture&lt;br /&gt;
     interior{I_Glass}&lt;br /&gt;
     }// end of plane 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| [[Fichier:PovrayTutoRealisticWater07.png|300px|vignette|Surface de l&#039;eau partiellement transparente et réfléchissante&amp;lt;br&amp;gt;[[Media:PovrayTutoRealisticWater07.pov|Fichier POVRay correspondant]]]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Ondes concentriques autour d&#039;un poteau ==&lt;br /&gt;
&lt;br /&gt;
{{Povray/tuto|&amp;lt;syntaxhighlight lang=&amp;quot;povray&amp;quot;&amp;gt;&lt;br /&gt;
plane{&amp;lt;0,1,0&amp;gt;, 0&lt;br /&gt;
      texture{ Green_Glass&lt;br /&gt;
              normal{ripples 0.3&lt;br /&gt;
                     scale 0.25&lt;br /&gt;
                     turbulence 0.5&lt;br /&gt;
                     translate&amp;lt; 1,0,2&amp;gt;}&lt;br /&gt;
              finish{ambient 0.45&lt;br /&gt;
                     diffuse 0.55&lt;br /&gt;
                     reflection 0.3}&lt;br /&gt;
             }// end of texture&lt;br /&gt;
     interior{I_Glass}&lt;br /&gt;
     }// end of plane 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| [[Fichier:PovrayTutoRealisticWater08.png|300px|vignette|Ondes concentriques&amp;lt;br&amp;gt;[[Media:PovrayTutoRealisticWater08.pov|Fichier POVRay correspondant]]]]&lt;br /&gt;
}}&lt;br /&gt;
== Un trou dans l&#039;eau - un tourbillon ==&lt;br /&gt;
&lt;br /&gt;
{{Povray/tuto|&lt;br /&gt;
Cela peut être fait avec quelques fonctions simples de CSG. À la fin nous devons appliquer une texture avec un composant &#039;normal&#039; approprié sur le plan pour simuler le tourbillon de l&#039;eau.&lt;br /&gt;
Pour plus de clarté un quart du plan a été retiré.&lt;br /&gt;
# Nous prenons un plan xz ( plane{&amp;lt;0,1,0&amp;gt;,0} ) et un cylindre un peu plus haut. pour éviter des surfaces coïncidentes dans une &#039;difference&#039;.&amp;lt;br&amp;gt;[[Fichier:PovrayTutoWaterHole01.jpg]]&lt;br /&gt;
# Nous soustrayons ce cylindre du notre plan. Nous obtenons un trou avec un arête vive.&amp;lt;br&amp;gt;[[Fichier:PovrayTutoWaterHole02.jpg]]&lt;br /&gt;
# Pour arrondir cet arête vive nous prenons un autre cylindere avec le rayon agrandi du rayon du bords ronds.&amp;lt;br&amp;gt;[[Fichier:PovrayTutoWaterHole03.jpg]]&lt;br /&gt;
# Encore une fois nous soustrayons ce deuxième cylindre ! &amp;lt;br&amp;gt;[[Fichier:PovrayTutoWaterHole04.jpg]]&lt;br /&gt;
# Puis nous ajoutons un tore (un anneau) avec le rayon majeur &amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt; rayon de notre deuxième cylindre et le rayon mineur &amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt; rayon du bords ronds.&amp;lt;br&amp;gt;[[Fichier:PovrayTutoWaterHole05.jpg]]&lt;br /&gt;
# La construction est fini!&amp;lt;br&amp;gt;[[Fichier:PovrayTutoWaterHole06.jpg]]&lt;br /&gt;
À la fin nous ajoutons à la texture de l&#039;eau, une normale come cela :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;povray&amp;quot;&amp;gt;&lt;br /&gt;
normal {spiral1  20  0.25 &lt;br /&gt;
        sine_wave&lt;br /&gt;
        turbulence 0.1&lt;br /&gt;
        rotate&amp;lt;90,0,0&amp;gt;&lt;br /&gt;
        scale 0.5&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| [[Fichier:PovrayTutoRealisticWater09.png|300px|vignette|Un tourbillon&amp;lt;br&amp;gt;[[Media:PovrayTutoRealisticWater09.pov|Fichier POVRay correspondant]]]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Mod%C3%A8le:Author&amp;diff=126</id>
		<title>Modèle:Author</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Mod%C3%A8le:Author&amp;diff=126"/>
		<updated>2017-04-20T06:56:50Z</updated>

		<summary type="html">&lt;p&gt;Didier : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{high-risk template|pagecount=all pages}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{message|{{#if:{{{author|}}}|Auteur initial &#039;&#039;&#039;{{{author}}}&#039;&#039;&#039;&amp;lt;br&amp;gt;}}{{#if:{{{othersauthors|}}}|Avec la participation de &#039;&#039;&#039;{{{othersauthors}}}&#039;&#039;&#039;&amp;lt;br&amp;gt;}}{{#if:{{{url|}}}|Source: {{{url}}}}}|image=IconUser48.png|bgcolor=#def3fe|bdcolor=#c5d7e0}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{tempdoc}}[[Category:Admonition templates]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Mod%C3%A8le:Author&amp;diff=125</id>
		<title>Modèle:Author</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Mod%C3%A8le:Author&amp;diff=125"/>
		<updated>2017-04-20T06:53:30Z</updated>

		<summary type="html">&lt;p&gt;Didier : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{high-risk template|pagecount=all pages}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
{{message|{{#if:{{{author|}}}|Auteur initial &#039;&#039;&#039;{{{author}}}&#039;&#039;&#039;&amp;lt;br&amp;gt;}}{{#if:{{{othersauthors|}}}|Avec la participation de &#039;&#039;&#039;{{{othersauthors}}}&#039;&#039;&#039;}}{{#if:{{{url|}}}|&amp;lt;br&amp;gt;Source: {{{url}}}}}|image=IconUser48.png|bgcolor=#def3fe|bdcolor=#c5d7e0}}&lt;br /&gt;
&amp;lt;noinclude&amp;gt;{{tempdoc}}[[Category:Admonition templates]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Povray/Tutorials/RealisticWater&amp;diff=124</id>
		<title>Povray/Tutorials/RealisticWater</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Povray/Tutorials/RealisticWater&amp;diff=124"/>
		<updated>2017-04-20T06:50:22Z</updated>

		<summary type="html">&lt;p&gt;Didier : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{author|author=Friedrich A. Lohmüller|url=http://www.f-lohmueller.de/pov_tut/backgrnd/p_wat1.htm}}&lt;br /&gt;
&lt;br /&gt;
== Une surface de l&#039;eau simple, opaque, plate et réfléchissante ==&lt;br /&gt;
{{Povray/tuto|Le plus souvent la surface de l&#039;eau paraît comme un miroir opaque. Pour simuler cette surface il suffit d&#039;ajouter une texture comme &#039;Polished_Chrome&#039;. L&#039;eau même est transparente, légèrement grisée très clair (L&#039;eau claire n&#039;a pas de couleur !!!).&lt;br /&gt;
La couleur d&#039;une surface de l&#039;eau est surtout défini par les objets que se réfléchissent dans la surface. ( Bleu est la couleur de la mer seulement les jours ensoleillés avec un ciel bleu ! L&#039;eau a l&#039;air différente avec des ciels différents ! ).&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;povray&amp;quot;&amp;gt;&lt;br /&gt;
plane{&amp;lt;0,1,0&amp;gt;, 0&lt;br /&gt;
      texture{pigment{rgb &amp;lt;.2,.2,.2&amp;gt;}&lt;br /&gt;
              finish {ambient 0.15&lt;br /&gt;
                      diffuse 0.55&lt;br /&gt;
                      brilliance 6.0&lt;br /&gt;
                      phong 0.8&lt;br /&gt;
                      phong_size 120&lt;br /&gt;
                      reflection 0.6}&lt;br /&gt;
              }// end of texture&lt;br /&gt;
     }// end of plane&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Si nous avons inséré les définitions des textures, nous pouvons écrire cela plus court :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;povray&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;textures.inc&amp;quot;&lt;br /&gt;
plane{&amp;lt;0,1,0&amp;gt;, 0&lt;br /&gt;
      texture{ Polished_Chrome }&lt;br /&gt;
     }// end of plane&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| [[Fichier:PovrayTutoRealisticWater01.png|300px|vignette|Surface simple, opaque, plate et réfléchissante&amp;lt;br&amp;gt;[[Media:PovrayTutoRealisticWater01.pov|Fichier POVRay correspondant]]]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== L&#039;eau peu agitée avec reflections des nuages ==&lt;br /&gt;
{{Povray/tuto|Des ondes modérées font une surface de l&#039;eau plus réaliste. Nous ajoutons à la texture la commande suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;povray&amp;quot;&amp;gt;&lt;br /&gt;
normal{ bumps 0.03&lt;br /&gt;
         scale &amp;lt;1,0.25,0.25&amp;gt;*1&lt;br /&gt;
         turbulence 0.6&lt;br /&gt;
       }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| [[Fichier:PovrayTutoRealisticWater02.png|300px|vignette|Surface peu agitée avec réflexion&amp;lt;br&amp;gt;[[Media:PovrayTutoRealisticWater02.pov|Fichier POVRay correspondant]]]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== La mer agitée, la surface de l&#039;eau plus agitée ==&lt;br /&gt;
&lt;br /&gt;
{{Povray/tuto|Nous obtenons cela par ajouter à la texture la commande suivante :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;povray&amp;quot;&amp;gt;&lt;br /&gt;
normal{ bumps 0.3&lt;br /&gt;
        scale 0.05&lt;br /&gt;
        turbulence 0.6&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| [[Fichier:PovrayTutoRealisticWater03.png|300px|vignette|Surface agitée avec bumps&amp;lt;br&amp;gt;[[Media:PovrayTutoRealisticWater03.pov|Fichier POVRay correspondant]]]]&lt;br /&gt;
}}&lt;br /&gt;
{{Povray/tuto|Aussi un effet très realiste on peut voir par ex. comme cela :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;povray&amp;quot;&amp;gt;&lt;br /&gt;
normal{ crackle 0.15&lt;br /&gt;
        scale 0.75&lt;br /&gt;
        turbulence 0.3&lt;br /&gt;
        translate&amp;lt;-1,0,5&amp;gt;&lt;br /&gt;
      }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| [[Fichier:PovrayTutoRealisticWater04.png|300px|vignette|Surface agitée avec crackle&amp;lt;br&amp;gt;[[Media:PovrayTutoRealisticWater04.pov|Fichier POVRay correspondant]]]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Une surface de l&#039;eau ridée par le vent ==&lt;br /&gt;
&lt;br /&gt;
{{Povray/tuto|Nous obtenons cela avec le motif &#039;crackle&#039; ou &#039;bozo&#039; et par ajouter des échelles différentes en direction x et y et aussi une rotation dans la direction transversale au vent :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;povray&amp;quot;&amp;gt;&lt;br /&gt;
normal{ bozo 1.75&lt;br /&gt;
         scale &amp;lt;2.0,1,0.3&amp;gt;*0.20&lt;br /&gt;
         rotate&amp;lt;0,10,0&amp;gt;&lt;br /&gt;
         turbulence 0.9&lt;br /&gt;
         translate&amp;lt;0,0,-2&amp;gt;&lt;br /&gt;
       }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| [[Fichier:PovrayTutoRealisticWater05.png|300px|vignette|Surface de l&#039;eau ridée avec bozo&amp;lt;br&amp;gt;[[Media:PovrayTutoRealisticWater05.pov|Fichier POVRay correspondant]]]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Povray/tuto|L&#039;effet ressemblent avec &#039;crackle&#039;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;povray&amp;quot;&amp;gt;&lt;br /&gt;
normal{ pigment_pattern{&lt;br /&gt;
             crackle&lt;br /&gt;
             colour_map { [0, rgb 0]&lt;br /&gt;
                          [1, rgb 1] }&lt;br /&gt;
             turbulence 1.7&lt;br /&gt;
             translate &amp;lt;0,0,1&amp;gt;}&lt;br /&gt;
             0.5}&lt;br /&gt;
       scale &amp;lt;2.0,1,0.3&amp;gt;*2&lt;br /&gt;
       rotate&amp;lt;0,10,0&amp;gt;&lt;br /&gt;
     }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| [[Fichier:PovrayTutoRealisticWater06.png|300px|vignette|Surface de l&#039;eau ridée avec crackle&amp;lt;br&amp;gt;[[Media:PovrayTutoRealisticWater06.pov|Fichier POVRay correspondant]]]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Remarque : Tout cela sont seulement des simulations des surfaces ondulées! Géométriquement, ils sont toujours parfaitement plat. Pour obtenir des des surfaces tridimensionnelles ondulées, il faut beaucoup plus ! Voir ici et ici !&lt;br /&gt;
&lt;br /&gt;
== Une surface de l&#039;eau partiellement transparente et réfléchissante ==&lt;br /&gt;
&lt;br /&gt;
{{Povray/tuto|Si l&#039;eau paraît partiellement transparente et réfléchissante, nous pouvons simuler en utilisant la texture &#039;Glass3&#039; (l&#039;eau clair) ou &#039;Green_Glass&#039; (l&#039;eau verdie par des plantes aquatiques !). Dans ce cas le fond sous-marin doit être bien défini. Le fond a une grande influence sur l&#039;apparence de la surface de l&#039;eau!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;povray&amp;quot;&amp;gt;&lt;br /&gt;
plane{&amp;lt;0,1,0&amp;gt;, 0  translate&amp;lt;0,-3,0&amp;gt;&lt;br /&gt;
       texture{pigment{color LightWood}&lt;br /&gt;
               normal {bumps 0.25&lt;br /&gt;
                       scale 0.05}&lt;br /&gt;
               finish {ambient 0.45&lt;br /&gt;
                       diffuse 0.55}&lt;br /&gt;
               }// end of texture&lt;br /&gt;
       }// end of plane 1&lt;br /&gt;
&lt;br /&gt;
plane{&amp;lt;0,1,0&amp;gt;, 0&lt;br /&gt;
      texture{ Green_Glass&lt;br /&gt;
              normal{ripples 0.3&lt;br /&gt;
                     scale 0.25&lt;br /&gt;
                     turbulence 0.75&lt;br /&gt;
                     translate&amp;lt; 1,0,2&amp;gt;}&lt;br /&gt;
              finish{ambient 0.45&lt;br /&gt;
                     diffuse 0.55&lt;br /&gt;
                     reflection 0.3}&lt;br /&gt;
             }// end of texture&lt;br /&gt;
     interior{I_Glass}&lt;br /&gt;
     }// end of plane 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| [[Fichier:PovrayTutoRealisticWater07.png|300px|vignette|Surface de l&#039;eau partiellement transparente et réfléchissante&amp;lt;br&amp;gt;[[Media:PovrayTutoRealisticWater07.pov|Fichier POVRay correspondant]]]]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Ondes concentriques autour d&#039;un poteau ==&lt;br /&gt;
&lt;br /&gt;
{{Povray/tuto|&amp;lt;syntaxhighlight lang=&amp;quot;povray&amp;quot;&amp;gt;&lt;br /&gt;
plane{&amp;lt;0,1,0&amp;gt;, 0&lt;br /&gt;
      texture{ Green_Glass&lt;br /&gt;
              normal{ripples 0.3&lt;br /&gt;
                     scale 0.25&lt;br /&gt;
                     turbulence 0.5&lt;br /&gt;
                     translate&amp;lt; 1,0,2&amp;gt;}&lt;br /&gt;
              finish{ambient 0.45&lt;br /&gt;
                     diffuse 0.55&lt;br /&gt;
                     reflection 0.3}&lt;br /&gt;
             }// end of texture&lt;br /&gt;
     interior{I_Glass}&lt;br /&gt;
     }// end of plane 2&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| [[Fichier:PovrayTutoRealisticWater08.png|300px|vignette|Ondes concentriques&amp;lt;br&amp;gt;[[Media:PovrayTutoRealisticWater08.pov|Fichier POVRay correspondant]]]]&lt;br /&gt;
}}&lt;br /&gt;
== Un trou dans l&#039;eau - un tourbillon ==&lt;br /&gt;
&lt;br /&gt;
{{Povray/tuto|&lt;br /&gt;
Cela peut être fait avec quelques fonctions simples de CSG. À la fin nous devons appliquer une texture avec un composant &#039;normal&#039; approprié sur le plan pour simuler le tourbillon de l&#039;eau.&lt;br /&gt;
Pour plus de clarté un quart du plan a été retiré.&lt;br /&gt;
# Nous prenons un plan xz ( plane{&amp;lt;0,1,0&amp;gt;,0} ) et un cylindre un peu plus haut. pour éviter des surfaces coïncidentes dans une &#039;difference&#039;.&amp;lt;br&amp;gt;[[Fichier:PovrayTutoWaterHole01.jpg]]&lt;br /&gt;
# Nous soustrayons ce cylindre du notre plan. Nous obtenons un trou avec un arête vive.&amp;lt;br&amp;gt;[[Fichier:PovrayTutoWaterHole02.jpg]]&lt;br /&gt;
# Pour arrondir cet arête vive nous prenons un autre cylindere avec le rayon agrandi du rayon du bords ronds.&amp;lt;br&amp;gt;[[Fichier:PovrayTutoWaterHole03.jpg]]&lt;br /&gt;
# Encore une fois nous soustrayons ce deuxième cylindre ! &amp;lt;br&amp;gt;[[Fichier:PovrayTutoWaterHole04.jpg]]&lt;br /&gt;
# Puis nous ajoutons un tore (un anneau) avec le rayon majeur &amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt; rayon de notre deuxième cylindre et le rayon mineur &amp;lt;nowiki&amp;gt;=&amp;lt;/nowiki&amp;gt; rayon du bords ronds.&amp;lt;br&amp;gt;[[Fichier:PovrayTutoWaterHole05.jpg]]&lt;br /&gt;
# La construction est fini!&amp;lt;br&amp;gt;[[Fichier:PovrayTutoWaterHole06.jpg]]&lt;br /&gt;
À la fin nous ajoutons à la texture de l&#039;eau, une normale come cela :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;povray&amp;quot;&amp;gt;&lt;br /&gt;
normal {spiral1  20  0.25 &lt;br /&gt;
        sine_wave&lt;br /&gt;
        turbulence 0.1&lt;br /&gt;
        rotate&amp;lt;90,0,0&amp;gt;&lt;br /&gt;
        scale 0.5&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
| [[Fichier:PovrayTutoRealisticWater09.png|300px|vignette|Un tourbillon&amp;lt;br&amp;gt;[[Media:PovrayTutoRealisticWater09.pov|Fichier POVRay correspondant]]]]&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Fichier:PovrayLensEffectWater.png&amp;diff=123</id>
		<title>Fichier:PovrayLensEffectWater.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Fichier:PovrayLensEffectWater.png&amp;diff=123"/>
		<updated>2017-04-19T16:13:04Z</updated>

		<summary type="html">&lt;p&gt;Didier : Lens Effect on Water&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lens Effect on Water&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Fichier:PovrayLensEffectCandles.png&amp;diff=122</id>
		<title>Fichier:PovrayLensEffectCandles.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Fichier:PovrayLensEffectCandles.png&amp;diff=122"/>
		<updated>2017-04-19T16:12:23Z</updated>

		<summary type="html">&lt;p&gt;Didier : Lens effect with candles&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Lens effect with candles&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Fichier:PovrayGalaxyOuterSpace.png&amp;diff=121</id>
		<title>Fichier:PovrayGalaxyOuterSpace.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Fichier:PovrayGalaxyOuterSpace.png&amp;diff=121"/>
		<updated>2017-04-19T16:12:00Z</updated>

		<summary type="html">&lt;p&gt;Didier : Outer space&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Outer space&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Fichier:PovrayGalaxyBigNebula.png&amp;diff=120</id>
		<title>Fichier:PovrayGalaxyBigNebula.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Fichier:PovrayGalaxyBigNebula.png&amp;diff=120"/>
		<updated>2017-04-19T16:11:32Z</updated>

		<summary type="html">&lt;p&gt;Didier : Big Nebula&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Big Nebula&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Fichier:PovrayCityWaterlin.png&amp;diff=119</id>
		<title>Fichier:PovrayCityWaterlin.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Fichier:PovrayCityWaterlin.png&amp;diff=119"/>
		<updated>2017-04-19T16:11:05Z</updated>

		<summary type="html">&lt;p&gt;Didier : City and Water line&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;City and Water line&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
	<entry>
		<id>https://wiki.home.tartarefr.eu/index.php?title=Fichier:PovrayCityScap.png&amp;diff=118</id>
		<title>Fichier:PovrayCityScap.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.home.tartarefr.eu/index.php?title=Fichier:PovrayCityScap.png&amp;diff=118"/>
		<updated>2017-04-19T16:07:29Z</updated>

		<summary type="html">&lt;p&gt;Didier : City Scap&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;City Scap&lt;/div&gt;</summary>
		<author><name>Didier</name></author>
	</entry>
</feed>