<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="fr">
	<id>https://doc.ycharbi.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nmorin</id>
	<title>Wiki doc - Contributions [fr]</title>
	<link rel="self" type="application/atom+xml" href="https://doc.ycharbi.fr/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Nmorin"/>
	<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php/Sp%C3%A9cial:Contributions/Nmorin"/>
	<updated>2026-04-29T01:03:14Z</updated>
	<subtitle>Contributions</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Croque_monsieur_au_four&amp;diff=1437</id>
		<title>Croque monsieur au four</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Croque_monsieur_au_four&amp;diff=1437"/>
		<updated>2023-02-24T15:36:27Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Passage des ustensiles en liste a puce&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:plats]]&lt;br /&gt;
&lt;br /&gt;
Un croque-monsieur ou croquemonsieur est un sandwich chaud, originaire de France, à base de pain, de jambon blanc et de fromage.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Préparation !! Cuisson !! Par portion&lt;br /&gt;
|-&lt;br /&gt;
| 7 minutes || 10 minutes || 623 kcal&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ingrédients=&lt;br /&gt;
Pour une personne :&lt;br /&gt;
* 2 tranches de pain de mie&lt;br /&gt;
* 1 tranche de jambon blanc&lt;br /&gt;
* 30g de fromage râpé&lt;br /&gt;
* 30g de crème fraîche&lt;br /&gt;
* 10g de moutarde à l'ancien&lt;br /&gt;
* 1/2 cuillère à soupe de parmesan râpé&lt;br /&gt;
* 5g de beurre demi-sel&lt;br /&gt;
&lt;br /&gt;
=Ustensiles=&lt;br /&gt;
* Four&lt;br /&gt;
* Plat à gratin&lt;br /&gt;
&lt;br /&gt;
=Recette=&lt;br /&gt;
# Préchauffez le four à 240°C. Mélangez dans un bol : la crème, la moutarde à l'ancien, le parmesan, et la moitié du fromage râpé, sel et poivre.&lt;br /&gt;
# Mettre les tranches dans le grille pain (pour rendre croquant le croque-monsieur)&lt;br /&gt;
# Beurrez les tranches de pain de mie d'un seul côté.&lt;br /&gt;
# Préparer une gille du four avec un papier sulfurisé.&lt;br /&gt;
# Disposez la moitié des tranches côté beurré vers le haut.&lt;br /&gt;
# Ajoutez une tranche de jambon par tranche de pain et le reste du fromage râpé.&lt;br /&gt;
# Refermez avec la seconde tranche de pain côté beurré sur le jambon, et recouvrez les sandwichs avec le mélange crème-fromage.&lt;br /&gt;
# Enfournez pendant 10 minutes à 240°C.&lt;br /&gt;
&lt;br /&gt;
=Commentaires=&lt;br /&gt;
Nous avons également ajouté une rondelle de fromage de chèvre sur le dessus du croque-monsieur avant cuisons. Cette variante est validée.&lt;br /&gt;
&lt;br /&gt;
=Liens=&lt;br /&gt;
https://jow.fr/recipes/croque-monsieur-au-four-84bomg6ak4qdflcq02nn?coversCount=2&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Gratin_de_p%C3%A2tes_au_jambon_simple&amp;diff=1436</id>
		<title>Gratin de pâtes au jambon simple</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Gratin_de_p%C3%A2tes_au_jambon_simple&amp;diff=1436"/>
		<updated>2023-02-24T15:36:25Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Passage des ustensiles en liste a puce et ajout du lien vers la cuisson des pâtes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:plats]]&lt;br /&gt;
&lt;br /&gt;
Un gratin de pâte est un plat chaud, originaire de France, à base de pâte, de jambon blanc et de fromage.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Préparation !! Cuisson !! Par portion&lt;br /&gt;
|-&lt;br /&gt;
| 4 minutes || 25 minutes || 641 kcal&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ingrédients (pour une personne)=&lt;br /&gt;
Pour une personne :&lt;br /&gt;
* 100g de pâtes (macaroni si possible)&lt;br /&gt;
* 40g de fromage râpé&lt;br /&gt;
* 1 tranche de jambon blanc&lt;br /&gt;
* 1 cuillère à soupe de crème fraîche&lt;br /&gt;
&lt;br /&gt;
=Ustensiles=&lt;br /&gt;
&lt;br /&gt;
* Four&lt;br /&gt;
* Casserole&lt;br /&gt;
* Plaque de cuisson&lt;br /&gt;
* Passoire&lt;br /&gt;
* Plat à gratin&lt;br /&gt;
&lt;br /&gt;
=Recette=&lt;br /&gt;
&lt;br /&gt;
# Préchauffez le four à 220°C. Faites [[Pâtes_à_l'eau|cuire les pâtes]].&lt;br /&gt;
# Une fois cuites, égouttez les pâtes, refroidir les pâte avec de l'eau froide (pour stopper la cuisson) et ajoutez-les dans un plat à gratin.&lt;br /&gt;
# Salez, poivrez, ajoutez la crème, le jambon coupé en morceaux, les 2/3 du fromage râpé et mélangez.&lt;br /&gt;
# Ajoutez le reste du fromage sur le dessus. Enfournez pendant 15 minutes à 220°C.&lt;br /&gt;
# Une fois bien doré, sortez le gratin du four. Servez aussitôt, c'est prêt !&lt;br /&gt;
&lt;br /&gt;
=Liens=&lt;br /&gt;
https://jow.fr/recipes/gratin-de-pates-au-jambon-81syk0a234c000vm1d0v?coversCount=1&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=P%C3%A2tes_%C3%A0_l%27eau&amp;diff=1435</id>
		<title>Pâtes à l'eau</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=P%C3%A2tes_%C3%A0_l%27eau&amp;diff=1435"/>
		<updated>2023-02-24T15:35:02Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Page créée avec « Category:plats Plat de basse de l'alimentation masculine, cette recette est simple et rapide à préparer. Elles peuvent servir de composant a une recette plus complexe ou simplement être dressées avec une sauce différente afin de faire varier les plaisirs.  {| class=&amp;quot;wikitable&amp;quot; ! Préparation !! Cuisson !! Par portion |- | N/A || ~12 minutes || N/C |}  =Ingrédients= Pour une personne : * 100g de pâtes crues * 1L d'eau * 7g de gros sel  =Ustensiles= * Casser... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:plats]]&lt;br /&gt;
Plat de basse de l'alimentation masculine, cette recette est simple et rapide à préparer. Elles peuvent servir de composant a une recette plus complexe ou simplement être dressées avec une sauce différente afin de faire varier les plaisirs.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Préparation !! Cuisson !! Par portion&lt;br /&gt;
|-&lt;br /&gt;
| N/A || ~12 minutes || N/C&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ingrédients=&lt;br /&gt;
Pour une personne :&lt;br /&gt;
* 100g de pâtes crues&lt;br /&gt;
* 1L d'eau&lt;br /&gt;
* 7g de gros sel&lt;br /&gt;
&lt;br /&gt;
=Ustensiles=&lt;br /&gt;
* Casserole&lt;br /&gt;
&lt;br /&gt;
=Recette=&lt;br /&gt;
# Commencez par mettre l'eau à bouillir.&lt;br /&gt;
# À la première ébullition, verser le sel dans l'eau suivi des pâtes.&lt;br /&gt;
# Touiller régulièrement.&lt;br /&gt;
# Goûter la préparation afin d'estimer si la cuisson est suffisante.&lt;br /&gt;
&lt;br /&gt;
=Liens=&lt;br /&gt;
https://cuisine.journaldesfemmes.fr/astuces-termes-et-tournemains/1195857-comment-faire-cuire-des-pates/&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Croque_monsieur_au_four&amp;diff=1434</id>
		<title>Croque monsieur au four</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Croque_monsieur_au_four&amp;diff=1434"/>
		<updated>2023-02-24T15:17:16Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Ajout de la section &amp;quot;Ustensiles&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:plats]]&lt;br /&gt;
&lt;br /&gt;
Un croque-monsieur ou croquemonsieur est un sandwich chaud, originaire de France, à base de pain, de jambon blanc et de fromage.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Préparation !! Cuisson !! Par portion&lt;br /&gt;
|-&lt;br /&gt;
| 7 minutes || 10 minutes || 623 kcal&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ingrédients (pour une personne)=&lt;br /&gt;
* 2 tranches de pain de mie&lt;br /&gt;
* 1 tranche de jambon blanc&lt;br /&gt;
* 30g de fromage râpé&lt;br /&gt;
* 30g de crème fraîche&lt;br /&gt;
* 10g de moutarde à l'ancien&lt;br /&gt;
* 1/2 cuillère à soupe de parmesan râpé&lt;br /&gt;
* 5g de beurre demi-sel&lt;br /&gt;
&lt;br /&gt;
=Ustensiles=&lt;br /&gt;
Four, Plat à gratin&lt;br /&gt;
&lt;br /&gt;
=Recette=&lt;br /&gt;
# Préchauffez le four à 240°C. Mélangez dans un bol : la crème, la moutarde à l'ancien, le parmesan, et la moitié du fromage râpé, sel et poivre.&lt;br /&gt;
# Mettre les tranches dans le grille pain (pour rendre croquant le croque-monsieur)&lt;br /&gt;
# Beurrez les tranches de pain de mie d'un seul côté.&lt;br /&gt;
# Préparer une gille du four avec un papier sulfurisé.&lt;br /&gt;
# Disposez la moitié des tranches côté beurré vers le haut.&lt;br /&gt;
# Ajoutez une tranche de jambon par tranche de pain et le reste du fromage râpé.&lt;br /&gt;
# Refermez avec la seconde tranche de pain côté beurré sur le jambon, et recouvrez les sandwichs avec le mélange crème-fromage.&lt;br /&gt;
# Enfournez pendant 10 minutes à 240°C.&lt;br /&gt;
&lt;br /&gt;
=Commentaires=&lt;br /&gt;
Nous avons également ajouté une rondelle de fromage de chèvre sur le dessus du croque-monsieur avant cuisons. Cette variante est validée.&lt;br /&gt;
&lt;br /&gt;
=Liens=&lt;br /&gt;
https://jow.fr/recipes/croque-monsieur-au-four-84bomg6ak4qdflcq02nn?coversCount=2&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Gratin_de_p%C3%A2tes_au_jambon_simple&amp;diff=1433</id>
		<title>Gratin de pâtes au jambon simple</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Gratin_de_p%C3%A2tes_au_jambon_simple&amp;diff=1433"/>
		<updated>2023-02-24T15:15:29Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Page créée avec « Category:plats  Un gratin de pâte est un plat chaud, originaire de France, à base de pâte, de jambon blanc et de fromage.  {| class=&amp;quot;wikitable&amp;quot; ! Préparation !! Cuisson !! Par portion |- | 4 minutes || 25 minutes || 641 kcal |}  =Ingrédients (pour une personne)=  * 100g de pâtes (macaroni si possible) * 40g de fromage râpé * 1 tranche de jambon blanc * 1 cuillère à soupe de crème fraîche  =Ustensiles=  Four, Casserole, Plaque de cuisson, Passoire, Pla... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:plats]]&lt;br /&gt;
&lt;br /&gt;
Un gratin de pâte est un plat chaud, originaire de France, à base de pâte, de jambon blanc et de fromage.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Préparation !! Cuisson !! Par portion&lt;br /&gt;
|-&lt;br /&gt;
| 4 minutes || 25 minutes || 641 kcal&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ingrédients (pour une personne)=&lt;br /&gt;
&lt;br /&gt;
* 100g de pâtes (macaroni si possible)&lt;br /&gt;
* 40g de fromage râpé&lt;br /&gt;
* 1 tranche de jambon blanc&lt;br /&gt;
* 1 cuillère à soupe de crème fraîche&lt;br /&gt;
&lt;br /&gt;
=Ustensiles=&lt;br /&gt;
&lt;br /&gt;
Four, Casserole, Plaque de cuisson, Passoire, Plat à gratin&lt;br /&gt;
&lt;br /&gt;
=Recette=&lt;br /&gt;
&lt;br /&gt;
# Préchauffez le four à 220°C. Faites cuire les pâtes selon les instructions du paquet en retirant 2 minutes.&lt;br /&gt;
# Une fois cuites, égouttez les pâtes, refroidir les pâte avec de l'eau froide (pour stopper la cuisson) et ajoutez-les dans un plat à gratin.&lt;br /&gt;
# Salez, poivrez, ajoutez la crème, le jambon coupé en morceaux, les 2/3 du fromage râpé et mélangez.&lt;br /&gt;
# Ajoutez le reste du fromage sur le dessus. Enfournez pendant 15 minutes à 220°C.&lt;br /&gt;
# Une fois bien doré, sortez le gratin du four. Servez aussitôt, c'est prêt !&lt;br /&gt;
&lt;br /&gt;
=Liens=&lt;br /&gt;
https://jow.fr/recipes/gratin-de-pates-au-jambon-81syk0a234c000vm1d0v?coversCount=1&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Croque_monsieur_au_four&amp;diff=1432</id>
		<title>Croque monsieur au four</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Croque_monsieur_au_four&amp;diff=1432"/>
		<updated>2023-02-24T15:03:35Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Page créée avec « Category:plats  Un croque-monsieur ou croquemonsieur est un sandwich chaud, originaire de France, à base de pain, de jambon blanc et de fromage.  {| class=&amp;quot;wikitable&amp;quot; ! Préparation !! Cuisson !! Par portion |- | 7 minutes || 10 minutes || 623 kcal |}  =Ingrédients (pour une personne)=  * 2 tranches de pain de mie * 1 tranche de jambon blanc * 30g de fromage râpé * 30g de crème fraîche * 10g de moutarde à l'ancien * 1/2 cuillère à soupe de parmesan râp... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:plats]]&lt;br /&gt;
&lt;br /&gt;
Un croque-monsieur ou croquemonsieur est un sandwich chaud, originaire de France, à base de pain, de jambon blanc et de fromage.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Préparation !! Cuisson !! Par portion&lt;br /&gt;
|-&lt;br /&gt;
| 7 minutes || 10 minutes || 623 kcal&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Ingrédients (pour une personne)=&lt;br /&gt;
&lt;br /&gt;
* 2 tranches de pain de mie&lt;br /&gt;
* 1 tranche de jambon blanc&lt;br /&gt;
* 30g de fromage râpé&lt;br /&gt;
* 30g de crème fraîche&lt;br /&gt;
* 10g de moutarde à l'ancien&lt;br /&gt;
* 1/2 cuillère à soupe de parmesan râpé&lt;br /&gt;
* 5g de beurre demi-sel&lt;br /&gt;
&lt;br /&gt;
=Recette=&lt;br /&gt;
&lt;br /&gt;
# Préchauffez le four à 240°C. Mélangez dans un bol : la crème, la moutarde à l'ancien, le parmesan, et la moitié du fromage râpé, sel et poivre.&lt;br /&gt;
# Mettre les tranches dans le grille pain (pour rendre croquant le croque-monsieur)&lt;br /&gt;
# Beurrez les tranches de pain de mie d'un seul côté.&lt;br /&gt;
# Préparer une gille du four avec un papier sulfurisé.&lt;br /&gt;
# Disposez la moitié des tranches côté beurré vers le haut.&lt;br /&gt;
# Ajoutez une tranche de jambon par tranche de pain et le reste du fromage râpé.&lt;br /&gt;
# Refermez avec la seconde tranche de pain côté beurré sur le jambon, et recouvrez les sandwichs avec le mélange crème-fromage.&lt;br /&gt;
# Enfournez pendant 10 minutes à 240°C.&lt;br /&gt;
&lt;br /&gt;
=Commentaires=&lt;br /&gt;
Nous avons également ajouté une rondelle de fromage de chèvre sur le dessus du croque-monsieur avant cuisons. Cette variante est validée.&lt;br /&gt;
&lt;br /&gt;
=Liens=&lt;br /&gt;
https://jow.fr/recipes/croque-monsieur-au-four-84bomg6ak4qdflcq02nn?coversCount=2&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Accueil&amp;diff=1431</id>
		<title>Accueil</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Accueil&amp;diff=1431"/>
		<updated>2023-02-24T15:03:05Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Ajout de la catégorie cuisine&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!--&amp;lt;strong&amp;gt;MediaWiki a été installé.&amp;lt;/strong&amp;gt;--&amp;gt;&lt;br /&gt;
'''Bienvenue sur notre site de documentation !'''&lt;br /&gt;
&lt;br /&gt;
Ce Wiki a été mis en place pour répondre à un besoin personnel de documentation. Il n'est éditable que par ses propriétaire mais est disponible à tout le monde sous les termes de la licence : [https://creativecommons.org/licenses/by-nc-sa/4.0/deed.fr CC BY-NC-SA 4.0]. Vous y trouverez des procédures sur divers thèmes informatiques ou non.&lt;br /&gt;
&lt;br /&gt;
Il est accessible à l'adresse https://doc.ycharbi.fr et https://doc.lesmorin.fr.&lt;br /&gt;
=Catégories=&lt;br /&gt;
&amp;lt;categorytree mode=pages&amp;gt;systèmes_d'exploitations&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;categorytree mode=pages&amp;gt;systèmes_de_fichiers&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;categorytree mode=pages&amp;gt;sauvegardes_et_archivage&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;categorytree mode=pages&amp;gt;clients_de_messagerie&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;categorytree mode=pages&amp;gt;éditeurs de texte&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;categorytree mode=pages&amp;gt;programmation&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;categorytree mode=pages&amp;gt;réseaux&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;categorytree mode=pages&amp;gt;matériels&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;categorytree mode=pages&amp;gt;téléphones&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;categorytree mode=pages&amp;gt;domotique&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;categorytree mode=pages&amp;gt;cuisine&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&lt;br /&gt;
À venir:&lt;br /&gt;
&amp;lt;categorytree mode=pages depth=0&amp;gt;Article en cours de rédaction&amp;lt;/categorytree&amp;gt;&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Cat%C3%A9gorie:Cuisine&amp;diff=1430</id>
		<title>Catégorie:Cuisine</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Cat%C3%A9gorie:Cuisine&amp;diff=1430"/>
		<updated>2023-02-24T15:01:52Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Page vide créée&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Cat%C3%A9gorie:Plats&amp;diff=1429</id>
		<title>Catégorie:Plats</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Cat%C3%A9gorie:Plats&amp;diff=1429"/>
		<updated>2023-02-24T15:01:32Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Page créée avec « Category:Cuisine »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Cuisine]]&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Traefik&amp;diff=1428</id>
		<title>Traefik</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Traefik&amp;diff=1428"/>
		<updated>2023-02-23T19:35:07Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Remplacement des schémas ASCII Art en SVG&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Reverse_proxy]]&lt;br /&gt;
&lt;br /&gt;
[https://docs.traefik.io/ Traefik] est un logiciel permettant de faire un serveur mandataire inversé (''reverse proxy'') et pouvant faire de la répartition de charge (''load balancer''). Il est développé en ''Go'' et a la particularité de faire de la [https://docs.traefik.io/providers/overview/#configuration-reload-frequency découverte automatique] (toute les deux secondes par défaut) de fichiers de configurations (pas de redémarrage du service). Ceci a pour intérêt de permettre une actualisation du mandataire en agissant uniquement sur des fichiers et non le service lui-même. On peut alors imaginer une actualisation de la configuration du serveur par simple copier/coller de fichiers depuis un partage sans privilèges ''root'' par exemple.&lt;br /&gt;
&lt;br /&gt;
{{attention| L'application ''Traefik'' évolue très rapidement. Le présent document traite de la version 2 de ''Traefik'', les fichiers de configurations n'ont rien à voir.}}&lt;br /&gt;
&lt;br /&gt;
=Schéma fonctionnel=&lt;br /&gt;
''Traefik'' traite les requêtes des clients en les faisant passer dans divers fonctions selon le schéma suivant:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://doc.ycharbi.fr/fichiers/services/mandataire/traefik/images/Schéma_logique_Traefik.svg&amp;quot; alt=&amp;quot;Schéma logique Traefik&amp;quot; style=&amp;quot;display: block; width: 60%; height:auto; margin-left:auto; margin-right:auto;&amp;quot;/&amp;gt;&lt;br /&gt;
                           &lt;br /&gt;
* '''EntryPoint''' : Permet la déclaration des ports d'entrés de ''Traefik''. Habituellement 80 et 443&lt;br /&gt;
* '''Routers''' : Permet la déclaration de l'''URL'' pour contacter le service&lt;br /&gt;
* '''Middlewares''' : Permet la modification du comportement de l'appel. Ex: Ajout d'une authentification&lt;br /&gt;
* '''Service''' : Permet la déclaration du serveur qui héberge le service&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
''Traefik'' n'est pas présent dans les dépôts ''Debian Buster''. Il va donc falloir le télécharger depuis son dépôt ''Git''.&lt;br /&gt;
 wget https://github.com/containous/traefik/releases/download/v2.2.1/traefik_v2.2.1_linux_amd64.tar.gz -P /tmp/&lt;br /&gt;
 mkdir -p /opt/traefik/{config/vhosts,tls,passwd,logs}&lt;br /&gt;
 tar xzvf /tmp/traefik_v2.2.1_linux_amd64.tar.gz -C /opt/traefik/&lt;br /&gt;
&lt;br /&gt;
Création de l'utilisateur du service&lt;br /&gt;
 useradd --system --home-dir /opt/traefik --user-group --shell /usr/sbin/nologin traefik&lt;br /&gt;
 chown -R traefik:traefik /opt/traefik&lt;br /&gt;
 chmod -R g+w /opt/traefik&lt;br /&gt;
&lt;br /&gt;
Création du service [[:Category:Systemd|Systemd]]&lt;br /&gt;
&lt;br /&gt;
 vim /etc/systemd/system/traefik.service&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Traefik, circulez y'a rien à voir !&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
RestartSec=2s&lt;br /&gt;
Type=simple&lt;br /&gt;
User=traefik&lt;br /&gt;
Group=traefik&lt;br /&gt;
WorkingDirectory=/opt/traefik&lt;br /&gt;
ExecStart=/opt/traefik/traefik --configFile=/opt/traefik/config/traefik.toml&lt;br /&gt;
Restart=always&lt;br /&gt;
CapabilityBoundingSet=CAP_NET_BIND_SERVICE&lt;br /&gt;
AmbientCapabilities=CAP_NET_BIND_SERVICE&lt;br /&gt;
&lt;br /&gt;
[Install]&lt;br /&gt;
WantedBy=multi-user.target&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Chargement du service au démarrage du système&lt;br /&gt;
&lt;br /&gt;
 systemctl daemon-reload&lt;br /&gt;
 systemctl enable traefik.service&lt;br /&gt;
 systemctl start traefik.service&lt;br /&gt;
 systemctl status traefik.service&lt;br /&gt;
&lt;br /&gt;
=Configuration de base=&lt;br /&gt;
Le fichier de configuration de ''Traefik'' est au format ''TOML'', mais peux être également au format ''JSON''. Il y a donc deux noms de fichier recommandés suivant le langage utilisé :&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;traefik.toml&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;traefik.yml&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce fichier est attendu dans l'une de ces arborescences :&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/traefik/&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;$HOME/.config&amp;lt;/source&amp;gt;&lt;br /&gt;
* &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;.&amp;lt;/source&amp;gt; (Dans la même arborescence que le binaire)&lt;br /&gt;
&lt;br /&gt;
Nous pouvons également définir à ''Traefik'' un fichier de configuration spécifique :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
traefik --configFile=foo/bar/myconfigfile.toml&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{attention|Dans ce fichier, il est attendu une configuration statique. Une modification de celui-ci nécessitera une relance de ''Traefik'' pour qu'elles soient prisent en compte. Sont également concernés les fichiers étrangers aux différents hôtes virtuels comme par exemple ''middleware.toml'' et  ''tls.toml'' que nous verrons plus bas. Seules les fichiers contenants les directives ''routers'' et ''services'' ne nécessites pas de redémarrage du service.}}&lt;br /&gt;
&lt;br /&gt;
Voici un exemple:&lt;br /&gt;
&lt;br /&gt;
 vim /opt/traefik/config/traefik.toml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# Configuration globale de Traefik&lt;br /&gt;
[global]&lt;br /&gt;
  sendAnonymousUsage = false # Évite l'envoi d'informations à l'éditeur&lt;br /&gt;
&lt;br /&gt;
# Configuration des journaux de Traefik&lt;br /&gt;
[log]&lt;br /&gt;
  level = &amp;quot;DEBUG&amp;quot; # Niveau de journalisation [DEBUG|PANIC|FATAL|ERROR|WARN|INFO]&lt;br /&gt;
  format = &amp;quot;common&amp;quot; # Format des journaux [common|json]&lt;br /&gt;
  filePath = &amp;quot;/opt/traefik/logs/traefik.log&amp;quot; # Chemin d'accès au fichier de journalisation&lt;br /&gt;
&lt;br /&gt;
# Configuration des journaux d'accès&lt;br /&gt;
[accessLog]&lt;br /&gt;
  filePath = &amp;quot;/opt/traefik/logs/access.log&amp;quot; # Chemin d'accès au fichier de journalisation&lt;br /&gt;
&lt;br /&gt;
# Configuration des fourniseurs&lt;br /&gt;
[providers]&lt;br /&gt;
  [providers.file] # Fournisseur de type &amp;quot;fichier&amp;quot;&lt;br /&gt;
    directory = &amp;quot;/opt/traefik/config/vhosts/&amp;quot; # Chemin d'accès du répertoire où sont stockés les fichiers des services&lt;br /&gt;
    watch = true # Permet le chargement à chaud des modifications de fichiers de configuration des hôtes virtuels&lt;br /&gt;
&lt;br /&gt;
# Configuration de l'API&lt;br /&gt;
[api]&lt;br /&gt;
  dashboard = true # Permet d'activer le tableau de bord de Traefik&lt;br /&gt;
  debug = false # Permet de désactiver le mode développeur de l'API&lt;br /&gt;
  insecure = true # Permet d'activer l'accès à l'API via le port 8080 par défaut&lt;br /&gt;
&lt;br /&gt;
# Configuration des points d'entrées de Traefik&lt;br /&gt;
[entryPoints]&lt;br /&gt;
  [entryPoints.http] # Permet de déclarer un point d'entrée nommé &amp;quot;http&amp;quot;&lt;br /&gt;
    address = &amp;quot;:80&amp;quot; # Permet de déclarer le port d'entrée&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{attention|Pour les &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;filePath&amp;lt;/source&amp;gt; des sections &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;[log]&amp;lt;/source&amp;gt; et &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;[accessLog]&amp;lt;/source&amp;gt;, il faudra prévoir une rotation du fichier journal (voir [[Logrotate]]) car ''Traefik'' ne gère pas cette fonction. Ceci est indispensable pour ne pas voir votre partition se remplir jusqu'à déni de service.}}&lt;br /&gt;
&lt;br /&gt;
Comme nous avons édité le fichier de configuration principal du serveur, il faut recharger le service&lt;br /&gt;
 systemctl restart traefik.service&lt;br /&gt;
&lt;br /&gt;
=Fonctionnalités=&lt;br /&gt;
L'outil permet un éventail de fonctionnalités souvent rencontrées dans des logiciels de ce type. Elles sont décrites dans un ou plusieurs fichiers. Un hôte étant définit par des sections, il est possible d'en combiner plusieurs en un seul fichier ou d'en faire un par fichier. Ceci est configuré dans le paramètre &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;directory&amp;lt;/source&amp;gt; de la directive &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;[providers]&amp;lt;/source&amp;gt; vu précédemment. Comme précisé par le paramètre &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;watch&amp;lt;/source&amp;gt; de cette même directive, ces fichiers sont appliqués au serveur à chaque enregistrements.&lt;br /&gt;
&lt;br /&gt;
Parmi les fonctionnalités que nous avons explorées, nous pouvons noter la possibilité de faire:&lt;br /&gt;
* un mandataire inverse ''HTTP/HTTPS''&lt;br /&gt;
* l'ajout d'une authentification ''HTTP''&lt;br /&gt;
* un répartiteur de charge&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Afin de simplifier la compréhension des fichiers d'exemples qui suivront, nous allons partir du principe que nous voulons mettre à disposition de visiteurs sur Internet, un site WEB simple en ''HTML''. Ce site est hébergé sur deux serveurs, ce qui nous permettra de configurer une répartition de charge. Nous le configurerons tout d'abord en ''HTTP'', lui appliquerons une authentification, mettrons en place la répartition de charge et le passerons en ''HTTPS''.&lt;br /&gt;
&lt;br /&gt;
==HTTP==&lt;br /&gt;
Dans cette section, nous allons aborder la mise en place d'une redirection simple en ''HTTP'' comme on le ferrai avec [[Haproxy]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://doc.ycharbi.fr/fichiers/services/mandataire/traefik/images/Schéma_exemple_Traefik_http.svg&amp;quot; alt=&amp;quot;Schéma logique Traefik&amp;quot; style=&amp;quot;display: block; width: 60%; height:auto; margin-left:auto; margin-right:auto;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons créer un fichier représentant le nom du service: &lt;br /&gt;
&lt;br /&gt;
 vim /opt/traefik/config/vhosts/ma_page.toml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# Service de type http&lt;br /&gt;
[http]&lt;br /&gt;
  [http.routers] # Déclaration des routers&lt;br /&gt;
     [http.routers.vers_ma_page] # Création d'un routeur nommé &amp;quot;vers_ma_page&amp;quot;&lt;br /&gt;
      rule = &amp;quot;Host(`mapage.jmador.yo`)&amp;quot; # URL avec laquelle sera joint notre site web&lt;br /&gt;
      service = &amp;quot;ma_page&amp;quot; # Nom du service (déclaré ci-dessous)&lt;br /&gt;
&lt;br /&gt;
  [http.services] # Déclaration des services&lt;br /&gt;
    [http.services.ma_page.loadBalancer] # Création d'un service nommé &amp;quot;ma_page&amp;quot;&lt;br /&gt;
      [[http.services.ma_page.loadBalancer.servers]] # Déclaration d'un serveur &lt;br /&gt;
        url = &amp;quot;http://[2001:db8:0:180::a0]&amp;quot; # URL vers mon serveur MaPage&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Vous pouvez noter le mot clé &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;loadBalancer&amp;lt;/source&amp;gt; à la ligne créant le service (&amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;[http.services.ma_page.loadBalancer]&amp;lt;/source&amp;gt;). En fait, ''Traefik'' fait constament de la répartition de charge, même avec un seul hôte (ce qui revient à toujours envoyer les requêtes sur la même machine). La configuration d'une réelle répartition de charge consiste donc à ajouter un hôte, d'où la simplicité de mise en œuvre. Nous verrons ceci plus bas.&lt;br /&gt;
&lt;br /&gt;
Il est également possible de faire des règles (paramètre &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;rule&amp;lt;/source&amp;gt;) avec plus de conditions en utilisant des [https://docs.traefik.io/routing/routers/#rule structures conditionnelles] telles que &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;||&amp;lt;/source&amp;gt; ou &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;amp;&amp;amp;&amp;lt;/source&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Authentification==&lt;br /&gt;
Pour l’[https://docs.traefik.io/middlewares/digestauth/ authentification], nous avons besoin d'un ''&amp;quot;middlewares&amp;quot;'' qui intercepte le lien pour demander un utilisateur et un mot de passe :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://doc.ycharbi.fr/fichiers/services/mandataire/traefik/images/Schéma_exemple_Traefik_http_auth.svg&amp;quot; alt=&amp;quot;Schéma logique Traefik&amp;quot; style=&amp;quot;display: block; width: 60%; height:auto; margin-left:auto; margin-right:auto;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, nous allons créer un fichier ''htpasswd'' (utilitaire présent dans le paquet &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;apache2-utils&amp;lt;/source&amp;gt;):&lt;br /&gt;
&lt;br /&gt;
 htpasswd -c /opt/traefik/passwd/groupe1 ycharbi&lt;br /&gt;
&lt;br /&gt;
{{attention| Si vous voulez ajouter un utilisateur, utilisez la commande suivante : &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;htpasswd /opt/traefik/passwd/groupe1 nmorin&amp;lt;/source&amp;gt;. L'usage du paramètre &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;-c&amp;lt;/source&amp;gt; ne devant être utilisé que pour la création du fichier, sous peine de l'écraser. De plus, il faut impérativement relancer le service pour prendre en compte tout ajout/modification/suppression.}}&lt;br /&gt;
&lt;br /&gt;
Un ''middleware'' est unique au sein de ''Traefik'', bien qu'il soit possible de mettre la section dédiée directement dans l'hôte concerné, il est plus judicieux de leur créer un fichier propre afin de pouvoir piocher dedans les groupes d'utilisateurs pour les authentifications:&lt;br /&gt;
&lt;br /&gt;
 vim /opt/traefik/config/vhosts/middlewares.toml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# Service de type http&lt;br /&gt;
[http]&lt;br /&gt;
  [http.middlewares] # Déclaration des middlewares&lt;br /&gt;
    [http.middlewares.mon_auth.basicAuth] # Création d'un middleware nommé &amp;quot;mon_auth&amp;quot; de type &amp;quot;basicAuth&amp;quot;&lt;br /&gt;
      usersFile = &amp;quot;/opt/traefik/passwd/groupe1&amp;quot; # Définit l'arborescence du fichier htpasswd&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis nous allons reprendre le fichier &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/opt/traefik/config/vhosts/ma_page.toml&amp;lt;/source&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
[http]&lt;br /&gt;
  [http.routers]&lt;br /&gt;
     [http.routers.vers_ma_page]&lt;br /&gt;
      rule = &amp;quot;Host(`mapage.jmador.yo`)&amp;quot;&lt;br /&gt;
      service = &amp;quot;ma_page&amp;quot;&lt;br /&gt;
      middlewares = [&amp;quot;mon_auth&amp;quot;] # Définit les middlewares utilisés pour ce routeur&lt;br /&gt;
&lt;br /&gt;
  [http.services]&lt;br /&gt;
    [http.services.ma_page.loadBalancer]&lt;br /&gt;
      [[http.services.ma_page.loadBalancer.servers]]&lt;br /&gt;
        url = &amp;quot;http://[2001:db8:0:180::a0]&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Répartition de charges==&lt;br /&gt;
Nous allons voir la configuration de la [https://docs.traefik.io/routing/services/#servers-load-balancer répartition de charge]. Plusieurs serveurs pourront êtres utilisés pour répondre de façon alternés aux clients. Attention, nous n'aborderons pas ici la notion de gestion de faillite (''failover''). Un serveur injoignable sera quand même utilisé dans la répartition et renvéra des erreurs aux clients.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://doc.ycharbi.fr/fichiers/services/mandataire/traefik/images/Schéma_exemple_Traefik_http_auth_rep.svg&amp;quot; alt=&amp;quot;Schéma logique Traefik&amp;quot; style=&amp;quot;display: block; width: 60%; height:auto; margin-left:auto; margin-right:auto;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
L'ajout d'un serveur dans le système de répartition de charge est très simple. Il faut seulement déclarer un autre serveur dans le service. La répartition de charge utilise l'algorithme d'ordonnancement [https://fr.wikipedia.org/wiki/Round-robin_(informatique) Round-robin].&lt;br /&gt;
&lt;br /&gt;
Reprenons notre fichier &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/opt/traefik/config/vhosts/ma_page.toml&amp;lt;/source&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
[http]&lt;br /&gt;
  [http.routers]&lt;br /&gt;
     [http.routers.vers_ma_page]&lt;br /&gt;
      rule = &amp;quot;Host(`mapage.jmador.yo`)&amp;quot;&lt;br /&gt;
      service = &amp;quot;ma_page&amp;quot;&lt;br /&gt;
      middlewares = [&amp;quot;mon_auth&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
  [http.services]&lt;br /&gt;
    [http.services.ma_page.loadBalancer]&lt;br /&gt;
      [[http.services.ma_page.loadBalancer.servers]]&lt;br /&gt;
        url = &amp;quot;http://[2001:db8:0:180::a0]&amp;quot;&lt;br /&gt;
      [[http.services.ma_page.loadBalancer.servers]] # Déclaration d'un autre serveur &lt;br /&gt;
        url = &amp;quot;http://[2001:db8:0:180::a1]&amp;quot; # URL vers mon serveur 2 MaPage&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Avec persistance de sessions===&lt;br /&gt;
''Traefik'' nous offre la possibilité de gérer la persistance de sessions sur un serveur de manière très simple. Il faut simplement ajouter la valeur &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;.sticky.cookie&amp;lt;/source&amp;gt; lors de la déclaration de notre service.&lt;br /&gt;
&lt;br /&gt;
{{info|La persistance de sessions permet d'allouer un client au premier serveur que le ''Round-robin'' lui aura fait joindre. La technique s'appuie sur la génération et l'envoi d'un cookie au navigateur du client (cela ne fonctionne donc pas avec ''curl'' ou ''wget''). Celui-ci présente ce cookie au serveur mandataire qui retransmet sa requête au même serveur qu'au premier échange.}}&lt;br /&gt;
&lt;br /&gt;
Toujours dans notre fichier &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/opt/traefik/config/vhosts/ma_page.toml&amp;lt;/source&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
# Service de type http&lt;br /&gt;
[http]&lt;br /&gt;
  [http.routers]&lt;br /&gt;
     [http.routers.vers_ma_page]&lt;br /&gt;
      rule = &amp;quot;Host(`mapage.jmador.yo`)&amp;quot;&lt;br /&gt;
      service = &amp;quot;ma_page&amp;quot;&lt;br /&gt;
      middlewares = [&amp;quot;mon_auth&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
  [http.services]&lt;br /&gt;
    [http.services.ma_page.loadBalancer.sticky.cookie] # Création d'un service nommé &amp;quot;ma_page&amp;quot; avec gestion des cookies de session&lt;br /&gt;
      [[http.services.ma_page.loadBalancer.servers]]&lt;br /&gt;
        url = &amp;quot;http://[2001:db8:0:180::a0]&amp;quot;&lt;br /&gt;
      [[http.services.ma_page.loadBalancer.servers]]&lt;br /&gt;
        url = &amp;quot;http://[2001:db8:0:180::a1]&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==HTTPS==&lt;br /&gt;
Dans cette section nous ajouterons le support de ''TLS'' pour faire du ''HTTPS''. Vous trouverez la documenation officielle sur le sujet [https://docs.traefik.io/https/tls/ ici] ainsi que l'ensemble des [https://godoc.org/crypto/tls#pkg-constants suites cryptographiques] configurables pour le [https://docs.traefik.io/https/tls/#cipher-suites chiffrement du flux] et les algorithmes d'échange de clés basés sur les [https://docs.traefik.io/https/tls/#curve-preferences courbes ellyptiques] (la syntaxes des algorithmes de la [https://tools.ietf.org/html/rfc8446#section-4.2.7 RFC 8446] est utilisable dans la configuration).&lt;br /&gt;
&lt;br /&gt;
===Simple===&lt;br /&gt;
Le support de ''HTTPS'' se ferra en cohabitation avec ''HTTP''. Les clients pourrons se connecter soit en clair, soit en chiffré.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://doc.ycharbi.fr/fichiers/services/mandataire/traefik/images/Schéma_exemple_Traefik_https_auth_rep.svg&amp;quot; alt=&amp;quot;Schéma logique Traefik&amp;quot; style=&amp;quot;display: block; width: 60%; height:auto; margin-left:auto; margin-right:auto;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme vous pouvez le voir dans le schéma ci-dessus, nous avons un nouveau point d'entrée sur le port 443. Il faut donc l'ajouter dans la configuration de base de ''Traefik''.&lt;br /&gt;
&lt;br /&gt;
 vim /opt/traefik/config/traefik.toml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
[global]&lt;br /&gt;
  sendAnonymousUsage = false&lt;br /&gt;
&lt;br /&gt;
# Configuration des journaux de Traefik&lt;br /&gt;
[log]&lt;br /&gt;
  level = &amp;quot;DEBUG&amp;quot;&lt;br /&gt;
  format = &amp;quot;common&amp;quot;&lt;br /&gt;
  filePath = &amp;quot;/opt/traefik/logs/traefik.log&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[accessLog]&lt;br /&gt;
  filePath = &amp;quot;/opt/traefik/logs/access.log&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[providers]&lt;br /&gt;
  [providers.file]&lt;br /&gt;
    directory = &amp;quot;/opt/traefik/config/vhosts/&amp;quot;&lt;br /&gt;
    watch = true&lt;br /&gt;
&lt;br /&gt;
[api]&lt;br /&gt;
  dashboard = true&lt;br /&gt;
  debug = false&lt;br /&gt;
  insecure = true&lt;br /&gt;
&lt;br /&gt;
[entryPoints]&lt;br /&gt;
  [entryPoints.http]&lt;br /&gt;
    address = &amp;quot;:80&amp;quot;&lt;br /&gt;
  [entryPoints.https] # Permet de déclarer un autre point d'entrée nommé &amp;quot;https&amp;quot;&lt;br /&gt;
    address = &amp;quot;:443&amp;quot; # Permet de déclarer le port d'entrée 443&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous allons ajouter un nouveau fichier pour définir les propriétés pas défaut de notre ''TLS'':&lt;br /&gt;
&lt;br /&gt;
 vim /opt/traefik/config/vhosts/tls.toml&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
[tls.options]&lt;br /&gt;
  [tls.options.default]&lt;br /&gt;
    # Définition des suites cryptographiques accéptés par le serveur&lt;br /&gt;
    cipherSuites = [ &lt;br /&gt;
      &amp;quot;TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384&amp;quot;,&lt;br /&gt;
      &amp;quot;TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256&amp;quot;&lt;br /&gt;
    ]&lt;br /&gt;
    curvePreferences = [&amp;quot;x25519&amp;quot;, &amp;quot;CurveP521&amp;quot;, &amp;quot;CurveP384&amp;quot;] # Définition des algorithmes d'échanges de clés accéptés par le serveur&lt;br /&gt;
    preferServerCipherSuites = true # Imposer l'utilisation des suites cryptographiques définies par le serveur&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note: Il est à précisé que GoLang ne permet pas de configurer de suites cryptographiques pour le [https://golang.org/doc/go1.12#tls_1_3 TLS 1.3]. Les développeurs du langage se justifient par le fait qu'elles sont définits dans la RFC 8446, respectés à la lettres et concidérées comme sûr donc y'a pas de problèmes... Personellement je trouve ça moyen surtout quand l'AES 128 bits est le choix par défaut... Ce n'est peut-être que temporaire, l'ajout de ce protocole datant de la version 1.12 du langage Go (on en est à la 1.13 au moment de la rédaction de ce paragraphe).''&lt;br /&gt;
&lt;br /&gt;
{{attention|N'oubliez pas que comme nous avons modifié le fichier de configuration principal ainsi qu'un fichier autre qu'un routeur ou un service, il faut relancer ''Traefik'' pour que la prise en compte de la configuration soit effective.}}&lt;br /&gt;
&lt;br /&gt;
Dans le fichier &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/opt/traefik/config/vhosts/ma_page.toml&amp;lt;/source&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
[http]&lt;br /&gt;
  [http.routers]&lt;br /&gt;
     [http.routers.vers_ma_page]&lt;br /&gt;
      entryPoints = [&amp;quot;https&amp;quot;] # On force l'accès via le point d'entrée &amp;quot;https&amp;quot;&lt;br /&gt;
      rule = &amp;quot;Host(`mapage.jmador.yo`)&amp;quot;&lt;br /&gt;
      service = &amp;quot;ma_page&amp;quot;&lt;br /&gt;
      middlewares = [&amp;quot;mon_auth&amp;quot;]&lt;br /&gt;
      [http.routers.vers_ma_page.tls] # On autorise les connexion &amp;quot;TLS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  [http.services]&lt;br /&gt;
    [http.services.ma_page.loadBalancer.sticky.cookie]&lt;br /&gt;
      [[http.services.ma_page.loadBalancer.servers]]&lt;br /&gt;
        url = &amp;quot;http://[2001:db8:0:180::a0]&amp;quot;&lt;br /&gt;
      [[http.services.ma_page.loadBalancer.servers]]&lt;br /&gt;
        url = &amp;quot;http://[2001:db8:0:180::a1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[tls.certificates]]&lt;br /&gt;
  certFile = &amp;quot;/opt/traefik/tls/mapage.jmador.yo/mapage.jmador.yo.crt&amp;quot; # Chemin d'accès au certificat&lt;br /&gt;
  keyFile = &amp;quot;/opt/traefik/tls/mapage.jmador.yo/mapage.jmador.yo.key&amp;quot; # Chemin d'accès à la clé du certificat&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note: la génération des certificats est expliquée dans la documentation concernant [[Openssl#Cr.C3.A9ation_d.27un_couple_de_cl.C3.A9s|OpenSSL]]. Prenez garde aux permissions de vos certificats. L'utilisateur &amp;quot;traefik&amp;quot; doit en être le propriétaire.''&lt;br /&gt;
&lt;br /&gt;
===Avec redirection de HTTP vers HTTPS===&lt;br /&gt;
Le support d'''HTTPS'' sera obligatoire, toute connexion en ''HTTP'' redirigera automatiquement le client en ''HTTPS''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;img src=&amp;quot;https://doc.ycharbi.fr/fichiers/services/mandataire/traefik/images/Schéma_exemple_Traefik_redirect_https_auth_rep.svg&amp;quot; alt=&amp;quot;Schéma logique Traefik&amp;quot; style=&amp;quot;display: block; width: 60%; height:auto; margin-left:auto; margin-right:auto;&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comme nous pouvons le voir sur le schéma ci-dessus, il faut que l'on déclare un nouveau ''middlewares''.&lt;br /&gt;
&lt;br /&gt;
Reprenons notre fichier &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/opt/traefik/config/vhosts/middlewares.toml&amp;lt;/source&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
[http]&lt;br /&gt;
  [http.middlewares]&lt;br /&gt;
    [http.middlewares.mon_auth.basicAuth]&lt;br /&gt;
      usersFile = &amp;quot;/opt/traefik/passwd/groupe1&amp;quot;&lt;br /&gt;
    [http.middlewares.redirection_https.redirectScheme] # Création d'un middleware nommé &amp;quot;redirection_https&amp;quot; de type &amp;quot;redirectScheme&amp;quot;&lt;br /&gt;
      scheme = &amp;quot;https&amp;quot; # Redirection vers https&lt;br /&gt;
      permanent = true # Permet l'envoie d'un code HTTP 301&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Puis, dans notre fichier d'hôte &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/opt/traefik/config/vhosts/ma_page.toml&amp;lt;/source&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
[http]&lt;br /&gt;
  [http.routers]&lt;br /&gt;
     [http.routers.vers_ma_page_http] # Création d'un routeur nommé &amp;quot;vers_ma_page_http&amp;quot;&lt;br /&gt;
      entryPoints = [&amp;quot;http&amp;quot;] # On force l'accès via le point d'entrée &amp;quot;http&amp;quot;&lt;br /&gt;
      rule = &amp;quot;Host(`mapage.jmador.yo`)&amp;quot; # URL avec laquelle sera joint notre site web&lt;br /&gt;
      service = &amp;quot;ma_page&amp;quot; # Nom du service (même si on y va pas)&lt;br /&gt;
      middlewares = [&amp;quot;redirection_https&amp;quot;] # Définit les middlewares utilisés pour ce routeur&lt;br /&gt;
&lt;br /&gt;
     [http.routers.vers_ma_page_https] # Création d'un routeur nommé &amp;quot;vers_ma_page_https&amp;quot;&lt;br /&gt;
      entryPoints = [&amp;quot;https&amp;quot;]&lt;br /&gt;
      rule = &amp;quot;Host(`mapage.jmador.yo`)&amp;quot;&lt;br /&gt;
      service = &amp;quot;ma_page&amp;quot;&lt;br /&gt;
      middlewares = [&amp;quot;mon_auth&amp;quot;]&lt;br /&gt;
      [http.routers.vers_ma_page_https.tls]&lt;br /&gt;
&lt;br /&gt;
  [http.services]&lt;br /&gt;
    [http.services.ma_page.loadBalancer.sticky.cookie]&lt;br /&gt;
      [[http.services.ma_page.loadBalancer.servers]]&lt;br /&gt;
        url = &amp;quot;http://[2001:db8:0:180::a0]&amp;quot;&lt;br /&gt;
      [[http.services.ma_page.loadBalancer.servers]]&lt;br /&gt;
        url = &amp;quot;http://[2001:db8:0:180::a1]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[tls.certificates]]&lt;br /&gt;
  certFile = &amp;quot;/opt/traefik/tls/mapage.jmador.yo/mapage.jmador.yo.crt&amp;quot;&lt;br /&gt;
  keyFile = &amp;quot;/opt/traefik/tls/mapage.jmador.yo/mapage.jmador.yo.key&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Supervision=&lt;br /&gt;
''Traefik'' permet d'exporter ses métriques au format ''OpenMetrics'' afin d'être exploités par des outils de supervision tel que [[Prometheus]].&lt;br /&gt;
&lt;br /&gt;
Pour cela il faut ajouter les paramètres suivants à la fin du fichier &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/opt/traefik/config/traefik.toml&amp;lt;/source&amp;gt;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[metrics]&lt;br /&gt;
  [metrics.prometheus]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{attention| Relancer ''Traefik'' pour la prise en compte de la configuration.}}&lt;br /&gt;
&lt;br /&gt;
=Sources=&lt;br /&gt;
* https://docs.traefik.io/&lt;br /&gt;
* https://golang.org/doc/go1.12&lt;br /&gt;
* https://tools.ietf.org/html/rfc8446&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Gnome_3&amp;diff=1424</id>
		<title>Gnome 3</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Gnome_3&amp;diff=1424"/>
		<updated>2023-02-19T00:18:54Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Correction des sources&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:environnements_bureau]]&lt;br /&gt;
&lt;br /&gt;
=Installation Gnome=&lt;br /&gt;
==Linux Debian==&lt;br /&gt;
===Méthode de l'installeur Debian===&lt;br /&gt;
 # apt install tasksel&lt;br /&gt;
 # tasksel install gnome-desktop --new-install&lt;br /&gt;
&lt;br /&gt;
===Méthode manuelle===&lt;br /&gt;
====Installation minimale====&lt;br /&gt;
 # apt install gnome-core gdm3&lt;br /&gt;
&lt;br /&gt;
====Installation avec applicatif de base====&lt;br /&gt;
 # apt install gnome-shell gdm3&lt;br /&gt;
&lt;br /&gt;
==Linux CentOS==&lt;br /&gt;
On peut installer GNOME 3 sous CentOS comme trouvé dans cette [https://unix.stackexchange.com/questions/181503/how-to-install-desktop-environments-on-centos-7 source] selon la méthode suivante:&lt;br /&gt;
 yum -y groups install &amp;quot;GNOME Desktop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 startx&lt;br /&gt;
&lt;br /&gt;
Je n'ai pas explorer l'usage d'un gestionnaire de session comme GDM. Il serai intéressant de s'en occuper plus tard (il semblerai qu'une solution soit décrite dans le lien source donné plus haut).&lt;br /&gt;
&lt;br /&gt;
=Mises à jours automatiques=&lt;br /&gt;
Par défaut, les mises à jours automatiques sont activé et il n'existe pas d'options dans l'interface graphique pour les configurer. La commande suivante suivie d'un drapeau booléen permet d'interagir avec.&lt;br /&gt;
&lt;br /&gt;
==Désactiver les mises à jours automatiques==&lt;br /&gt;
 $ gsettings set org.gnome.software download-updates false&lt;br /&gt;
''Note : ne fonctionne pas contrairement à la méthode suivante.''&lt;br /&gt;
&lt;br /&gt;
 systemctl disable apt-daily-upgrade.timer&lt;br /&gt;
 systemctl disable apt-daily.timer&lt;br /&gt;
 systemctl stop apt-daily-upgrade.timer&lt;br /&gt;
 systemctl stop apt-daily.timer&lt;br /&gt;
&lt;br /&gt;
==Réactiver les mises à jours automatiques==&lt;br /&gt;
 $ gsettings set org.gnome.software download-updates true&lt;br /&gt;
''Note : ne fonctionne pas contrairement à la méthode suivante.''&lt;br /&gt;
&lt;br /&gt;
 systemctl enable apt-daily-upgrade.timer&lt;br /&gt;
 systemctl enable apt-daily.timer&lt;br /&gt;
 systemctl start apt-daily-upgrade.timer&lt;br /&gt;
 systemctl start apt-daily.timer&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
 * https://www.jbnet.fr/systeme/linux/gnome-desactiver-la-rechercher-automatique-de-mises-a-jour.html&lt;br /&gt;
&lt;br /&gt;
=Ajouter une application au démarrage=&lt;br /&gt;
Sur Gnome 3, pour ajouter une application au démarrage nous avons 2 options :&lt;br /&gt;
&lt;br /&gt;
==Via l'outil de personnalisation Gnome==&lt;br /&gt;
L'application ce nomme : &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gnome-tweak-tool&amp;lt;/syntaxhighlight&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dans l'onglet &amp;quot;Applications au démarrage&amp;quot;, ajouter l'application voulu.&lt;br /&gt;
&lt;br /&gt;
==Via fichier==&lt;br /&gt;
Toutes les applications au démarrage déclarer dans l'outil de personnalisation Gnome sont dans des fichiers dans  &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;~/.config/autostart/&amp;lt;/syntaxhighlight&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons donc modifier les fichiers si nous voulons ajouter une option a notre application.&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
 # vim ~/.config/autostart/empathy.desktop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Exec=empathy -h #Ouverture en mode minimiser&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Modifier l'apparence de Gnome=&lt;br /&gt;
L'apparence de Gnome 3 a été totalement réalisé en CSS. Il suffit donc de modifier le fichier CSS pour donner a notre interface l'apparence voulu.&lt;br /&gt;
&lt;br /&gt;
 # vim /usr/share/gnome-shell/theme/gnome-shell.css&lt;br /&gt;
&lt;br /&gt;
==Changer la couleur de la barre du haut==&lt;br /&gt;
&lt;br /&gt;
Modifier :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Panel */&lt;br /&gt;
#panel {&lt;br /&gt;
    background-color: black;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    height: 1.86em;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Panel */&lt;br /&gt;
#panel {&lt;br /&gt;
    background-color: rgba(0,0,0,0.8); /*Couleur noire avec une opacité de 80%*/&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    height: 1.86em;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Changement du fond d'écran=&lt;br /&gt;
Il faut changer les paramètres suivants dans &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gsettings&amp;lt;/syntaxhighlight&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gsettings set org.gnome.desktop.background picture-uri 'file:///home/toto/Images/monfonddécran.jpg'&lt;br /&gt;
gsettings set org.gnome.desktop.background picture-options 'zoom'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Changement du pack d'icône=&lt;br /&gt;
Nous pouvons personnaliser le pack d'icône par défaut.Si un nouvelle utilisateur est créé, ce pack d'icône sera sélectionné.&lt;br /&gt;
Pour l’exemple nous allons utiliser le pack d'icône &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;papirus&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous débutons en installant &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;papirus&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;apt install papirus-icon-theme&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut changer les paramètres suivants dans &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gsettings&amp;lt;/syntaxhighlight&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gsettings set org.gnome.desktop.interface icon-theme 'Papirus'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ajout des boutons maximiser et minimiser dans la barre de titre des fenêtres=&lt;br /&gt;
Il faut changer les paramètres suivants dans &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gsettings&amp;lt;/syntaxhighlight&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gsettings set org.gnome.desktop.wm.preferences button-layout 'appmenu:minimize,maximize,close'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Changement de fenêtres=&lt;br /&gt;
Le fonctionnement par défaut du &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;lt;alt+tab&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; n'est pas pratique lorsque l'on a plusieurs fenêtres d'une même application ouverte. Pour corriger cela il faut ajouter un raccourci clavier dans les '''Paramètres &amp;gt; raccourcis clavier &amp;gt; Changer de fenêtre &amp;gt; Alt+Tabulation''', ce qui remplacera le comportement par défaut.&lt;br /&gt;
&lt;br /&gt;
Afin de permettre un changement de fenêtres [https://linuxiac.com/alt-tab-to-switch-only-on-current-workspace-in-gnome-shell/ entre les bureaux] virtuels, il faut définir la valeur suivante à ''false''&lt;br /&gt;
 gsettings set org.gnome.shell.window-switcher current-workspace-only false&lt;br /&gt;
&lt;br /&gt;
=Montage USB=&lt;br /&gt;
==Désactivation du montage automatique USB==&lt;br /&gt;
Sous Gnome, l'insertion d'une clé ou d'un disque dur USB a pour effet de déclencher son montage automatique, ce qui peut s'avérer dérangeant lorsque ladite insertion a pour but de servir à la création d'un liveCD ou tout simplement pour le partitionnement (le disque étant monté, ça peut foutre une merde monstre).&lt;br /&gt;
&lt;br /&gt;
===Méthode CLI===&lt;br /&gt;
Il faut simplement taper cette commande dans un terminal (root ou non, cela n'a pas d'importance)&lt;br /&gt;
 gsettings set org.gnome.desktop.media-handling automount false&lt;br /&gt;
&lt;br /&gt;
===Méthode graphique===&lt;br /&gt;
Cette méthode n'a aucun intérêt au vu de la simplicité/rapidité de la méthode CLI (mais nous avons parfois des masochistes parmi nous...), voici tout de même la façon de s'y prendre :&lt;br /&gt;
* Installation de l'utilitaire &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;dconf-editor&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Aller dans '''org &amp;gt; gnome &amp;gt; desktop &amp;gt; media-handling &amp;gt; ''décochez les cases en rapport avec l{{'}}automount'''''&lt;br /&gt;
&lt;br /&gt;
==Ré-activation du montage automatique==&lt;br /&gt;
===Méthode CLI===&lt;br /&gt;
De même que pour la désactivation (seul la valeur booléenne change)&lt;br /&gt;
 gsettings set org.gnome.desktop.media-handling automount true&lt;br /&gt;
&lt;br /&gt;
===Méthode graphique===&lt;br /&gt;
Dans dconf-editor :&lt;br /&gt;
* Installation de l'utilitaire &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;dconf-editor&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Aller dans '''org &amp;gt; gnome &amp;gt; desktop &amp;gt; media-handling &amp;gt; ''cochez les cases en rapport avec l{{'}}automount'''''&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://askubuntu.com/questions/89244/how-to-disable-automount-in-nautiluss-preferences#102601&lt;br /&gt;
&lt;br /&gt;
=Montage réseau=&lt;br /&gt;
Il est possible de monter des partage réseau via différent protocoles au travers du module [https://fr.wikipedia.org/wiki/GVFS GVFS] accessible par ''Nautilus''.&lt;br /&gt;
&lt;br /&gt;
Bien souvent, un partage réseau exige une identification et le système enregistre ces informations tant que votre session ([https://fr.wikipedia.org/wiki/GNOME_Display_Manager GDM]) est ouverte. Le fait de démonter le partage ne vide alors pas ces informations d'identification (un accès ultérieur se ferra sans redemander ces données). Il est cependant parfois souhaitable de se déconnecter d'un partage pour utiliser un autre compte distant. Pour se faire, il faut vider le cache de &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gnome-keyring-daemon&amp;lt;/syntaxhighlight&amp;gt; :&lt;br /&gt;
 gnome-keyring-daemon -r&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://askubuntu.com/questions/611612/how-to-make-nautilus-forget-smb-session-passwords-without-logging-out&lt;br /&gt;
&lt;br /&gt;
=Redémarrer le Shell=&lt;br /&gt;
Dans certain cas de plantages un redémarrage de Gnome Shell peut s'avérer utile. Si l'interface n'est pas gelée, il est possible via la combinaison de touches &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;lt;alt&amp;gt;&amp;lt;F2&amp;gt;-&amp;lt;r&amp;gt;&amp;lt;entrer&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; d'effectuer cette opération (uniquement sous ''X11''). Mais si c'est le cas, ouvrez un shell bash (vrai shell - pas terminal) avec &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;lt;ctrl&amp;gt;&amp;lt;alt&amp;gt;&amp;lt;F3&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; avec l'utilisateur de la session qui a planté et entrez ces deux commandes :&lt;br /&gt;
 export DISPLAY=:0.0&lt;br /&gt;
 gnome-shell -r&lt;br /&gt;
&lt;br /&gt;
''Le rechargement de Gnome-shell n’entraîne pas la perte de vos fenêtres.''&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://coderwall.com/p/qpv9oq/restart-gnome-shell-from-the-console&lt;br /&gt;
&lt;br /&gt;
=Modifier les paramètres par défaut de Gnome=&lt;br /&gt;
Dans les manipulations précédentes nous utilisons la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gsettings&amp;lt;/syntaxhighlight&amp;gt; pour changer des paramètres au niveau de l'utilisateur. Nous pouvons également modifier les paramètres par défaut.&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devons créer le fichier &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/dconf/profile/user&amp;lt;/syntaxhighlight&amp;gt; :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; '_EOF_' &amp;gt;&amp;gt; /etc/dconf/profile/user&lt;br /&gt;
user-db:user&lt;br /&gt;
system-db:local&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;user-db:user&amp;lt;/syntaxhighlight&amp;gt; : Sélectionne la bases de données de configuration en écriture, ici &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;user-db&amp;lt;/syntaxhighlight&amp;gt; veux dire qui va chercher la configuration dans &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;~/.config/dconf&amp;lt;/syntaxhighlight&amp;gt; et &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;user&amp;lt;/syntaxhighlight&amp;gt; recherche le fichier &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;user&amp;lt;/syntaxhighlight&amp;gt; ou le dossier &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;user.d&amp;lt;/syntaxhighlight&amp;gt; dans arborescence défini précédemment.&lt;br /&gt;
* &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;system-db:local&amp;lt;/syntaxhighlight&amp;gt; : Sélectionne la bases de données de configuration en lecture seule, ici &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;system-db&amp;lt;/syntaxhighlight&amp;gt; veux dire qui va chercher la configuration dans &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/dconf/db/&amp;lt;/syntaxhighlight&amp;gt; et &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;local&amp;lt;/syntaxhighlight&amp;gt; recherche le fichier &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;local&amp;lt;/syntaxhighlight&amp;gt; ou le dossier &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;local.d&amp;lt;/syntaxhighlight&amp;gt; dans arborescence défini précédemment.&lt;br /&gt;
&lt;br /&gt;
Il faut donc créer le dossier &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/dconf/db/local.d&amp;lt;/syntaxhighlight&amp;gt; pour placer notre configuration par défaut dedans :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p /etc/dconf/db/local.d/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici un exemple le fichier de configuration :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; '_EOF_' &amp;gt;&amp;gt; /etc/dconf/db/local.d/00-personnalisation&lt;br /&gt;
# Modification du fond d'écran&lt;br /&gt;
[org/gnome/desktop/background]&lt;br /&gt;
picture-uri='file:///usr/local/share/backgrounds/fondecran.jpg'&lt;br /&gt;
picture-options='zoom'&lt;br /&gt;
&lt;br /&gt;
# Modification du pack d'icône&lt;br /&gt;
[org/gnome/desktop/interface]&lt;br /&gt;
icon-theme='Papirus'&lt;br /&gt;
&lt;br /&gt;
# Ajout des boutons maximiser et minimiser dans la barre de titre des fenêtres&lt;br /&gt;
[org/gnome/desktop/wm/preferences]&lt;br /&gt;
button-layout='appmenu:minimize,maximize,close'&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour prandre en compte ces configurations, il faut lancer cette commande :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dconf update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la création d'un nouvelle utilisateur, la bases de données de configuration &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;user-db:user&amp;lt;/syntaxhighlight&amp;gt; étant inéxistant, il ce rabat sur la bases de données de configuration &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;system-db:local&amp;lt;/syntaxhighlight&amp;gt; (celle qu'on a modifié). L'utilisateur a donc un fond d'écran personnalisé, le pack d'icône &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;papirus&amp;lt;/syntaxhighlight&amp;gt; et les boutons maximiser et minimiser dans la barre de titre des fenêtres.&lt;br /&gt;
&lt;br /&gt;
==Sources de la section==&lt;br /&gt;
* https://help.gnome.org/admin/system-admin-guide/stable/desktop-background.html.en&lt;br /&gt;
* https://help.gnome.org/admin/system-admin-guide/stable/dconf-profiles.html.en&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Gnome_3&amp;diff=1423</id>
		<title>Gnome 3</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Gnome_3&amp;diff=1423"/>
		<updated>2023-02-19T00:17:40Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Ajout de la section &amp;quot;Modifier les paramètres par défaut de Gnome&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:environnements_bureau]]&lt;br /&gt;
&lt;br /&gt;
=Installation Gnome=&lt;br /&gt;
==Linux Debian==&lt;br /&gt;
===Méthode de l'installeur Debian===&lt;br /&gt;
 # apt install tasksel&lt;br /&gt;
 # tasksel install gnome-desktop --new-install&lt;br /&gt;
&lt;br /&gt;
===Méthode manuelle===&lt;br /&gt;
====Installation minimale====&lt;br /&gt;
 # apt install gnome-core gdm3&lt;br /&gt;
&lt;br /&gt;
====Installation avec applicatif de base====&lt;br /&gt;
 # apt install gnome-shell gdm3&lt;br /&gt;
&lt;br /&gt;
==Linux CentOS==&lt;br /&gt;
On peut installer GNOME 3 sous CentOS comme trouvé dans cette [https://unix.stackexchange.com/questions/181503/how-to-install-desktop-environments-on-centos-7 source] selon la méthode suivante:&lt;br /&gt;
 yum -y groups install &amp;quot;GNOME Desktop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 startx&lt;br /&gt;
&lt;br /&gt;
Je n'ai pas explorer l'usage d'un gestionnaire de session comme GDM. Il serai intéressant de s'en occuper plus tard (il semblerai qu'une solution soit décrite dans le lien source donné plus haut).&lt;br /&gt;
&lt;br /&gt;
=Mises à jours automatiques=&lt;br /&gt;
Par défaut, les mises à jours automatiques sont activé et il n'existe pas d'options dans l'interface graphique pour les configurer. La commande suivante suivie d'un drapeau booléen permet d'interagir avec.&lt;br /&gt;
&lt;br /&gt;
==Désactiver les mises à jours automatiques==&lt;br /&gt;
 $ gsettings set org.gnome.software download-updates false&lt;br /&gt;
''Note : ne fonctionne pas contrairement à la méthode suivante.''&lt;br /&gt;
&lt;br /&gt;
 systemctl disable apt-daily-upgrade.timer&lt;br /&gt;
 systemctl disable apt-daily.timer&lt;br /&gt;
 systemctl stop apt-daily-upgrade.timer&lt;br /&gt;
 systemctl stop apt-daily.timer&lt;br /&gt;
&lt;br /&gt;
==Réactiver les mises à jours automatiques==&lt;br /&gt;
 $ gsettings set org.gnome.software download-updates true&lt;br /&gt;
''Note : ne fonctionne pas contrairement à la méthode suivante.''&lt;br /&gt;
&lt;br /&gt;
 systemctl enable apt-daily-upgrade.timer&lt;br /&gt;
 systemctl enable apt-daily.timer&lt;br /&gt;
 systemctl start apt-daily-upgrade.timer&lt;br /&gt;
 systemctl start apt-daily.timer&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
 * https://www.jbnet.fr/systeme/linux/gnome-desactiver-la-rechercher-automatique-de-mises-a-jour.html&lt;br /&gt;
&lt;br /&gt;
=Ajouter une application au démarrage=&lt;br /&gt;
Sur Gnome 3, pour ajouter une application au démarrage nous avons 2 options :&lt;br /&gt;
&lt;br /&gt;
==Via l'outil de personnalisation Gnome==&lt;br /&gt;
L'application ce nomme : &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gnome-tweak-tool&amp;lt;/syntaxhighlight&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dans l'onglet &amp;quot;Applications au démarrage&amp;quot;, ajouter l'application voulu.&lt;br /&gt;
&lt;br /&gt;
==Via fichier==&lt;br /&gt;
Toutes les applications au démarrage déclarer dans l'outil de personnalisation Gnome sont dans des fichiers dans  &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;~/.config/autostart/&amp;lt;/syntaxhighlight&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons donc modifier les fichiers si nous voulons ajouter une option a notre application.&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
 # vim ~/.config/autostart/empathy.desktop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Exec=empathy -h #Ouverture en mode minimiser&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Modifier l'apparence de Gnome=&lt;br /&gt;
L'apparence de Gnome 3 a été totalement réalisé en CSS. Il suffit donc de modifier le fichier CSS pour donner a notre interface l'apparence voulu.&lt;br /&gt;
&lt;br /&gt;
 # vim /usr/share/gnome-shell/theme/gnome-shell.css&lt;br /&gt;
&lt;br /&gt;
==Changer la couleur de la barre du haut==&lt;br /&gt;
&lt;br /&gt;
Modifier :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Panel */&lt;br /&gt;
#panel {&lt;br /&gt;
    background-color: black;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    height: 1.86em;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Panel */&lt;br /&gt;
#panel {&lt;br /&gt;
    background-color: rgba(0,0,0,0.8); /*Couleur noire avec une opacité de 80%*/&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    height: 1.86em;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Changement du fond d'écran=&lt;br /&gt;
Il faut changer les paramètres suivants dans &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gsettings&amp;lt;/syntaxhighlight&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gsettings set org.gnome.desktop.background picture-uri 'file:///home/toto/Images/monfonddécran.jpg'&lt;br /&gt;
gsettings set org.gnome.desktop.background picture-options 'zoom'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Changement du pack d'icône=&lt;br /&gt;
Nous pouvons personnaliser le pack d'icône par défaut.Si un nouvelle utilisateur est créé, ce pack d'icône sera sélectionné.&lt;br /&gt;
Pour l’exemple nous allons utiliser le pack d'icône &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;papirus&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous débutons en installant &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;papirus&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;apt install papirus-icon-theme&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut changer les paramètres suivants dans &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gsettings&amp;lt;/syntaxhighlight&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gsettings set org.gnome.desktop.interface icon-theme 'Papirus'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ajout des boutons maximiser et minimiser dans la barre de titre des fenêtres=&lt;br /&gt;
Il faut changer les paramètres suivants dans &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gsettings&amp;lt;/syntaxhighlight&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gsettings set org.gnome.desktop.wm.preferences button-layout 'appmenu:minimize,maximize,close'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Changement de fenêtres=&lt;br /&gt;
Le fonctionnement par défaut du &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;lt;alt+tab&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; n'est pas pratique lorsque l'on a plusieurs fenêtres d'une même application ouverte. Pour corriger cela il faut ajouter un raccourci clavier dans les '''Paramètres &amp;gt; raccourcis clavier &amp;gt; Changer de fenêtre &amp;gt; Alt+Tabulation''', ce qui remplacera le comportement par défaut.&lt;br /&gt;
&lt;br /&gt;
Afin de permettre un changement de fenêtres [https://linuxiac.com/alt-tab-to-switch-only-on-current-workspace-in-gnome-shell/ entre les bureaux] virtuels, il faut définir la valeur suivante à ''false''&lt;br /&gt;
 gsettings set org.gnome.shell.window-switcher current-workspace-only false&lt;br /&gt;
&lt;br /&gt;
=Montage USB=&lt;br /&gt;
==Désactivation du montage automatique USB==&lt;br /&gt;
Sous Gnome, l'insertion d'une clé ou d'un disque dur USB a pour effet de déclencher son montage automatique, ce qui peut s'avérer dérangeant lorsque ladite insertion a pour but de servir à la création d'un liveCD ou tout simplement pour le partitionnement (le disque étant monté, ça peut foutre une merde monstre).&lt;br /&gt;
&lt;br /&gt;
===Méthode CLI===&lt;br /&gt;
Il faut simplement taper cette commande dans un terminal (root ou non, cela n'a pas d'importance)&lt;br /&gt;
 gsettings set org.gnome.desktop.media-handling automount false&lt;br /&gt;
&lt;br /&gt;
===Méthode graphique===&lt;br /&gt;
Cette méthode n'a aucun intérêt au vu de la simplicité/rapidité de la méthode CLI (mais nous avons parfois des masochistes parmi nous...), voici tout de même la façon de s'y prendre :&lt;br /&gt;
* Installation de l'utilitaire &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;dconf-editor&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Aller dans '''org &amp;gt; gnome &amp;gt; desktop &amp;gt; media-handling &amp;gt; ''décochez les cases en rapport avec l{{'}}automount'''''&lt;br /&gt;
&lt;br /&gt;
==Ré-activation du montage automatique==&lt;br /&gt;
===Méthode CLI===&lt;br /&gt;
De même que pour la désactivation (seul la valeur booléenne change)&lt;br /&gt;
 gsettings set org.gnome.desktop.media-handling automount true&lt;br /&gt;
&lt;br /&gt;
===Méthode graphique===&lt;br /&gt;
Dans dconf-editor :&lt;br /&gt;
* Installation de l'utilitaire &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;dconf-editor&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Aller dans '''org &amp;gt; gnome &amp;gt; desktop &amp;gt; media-handling &amp;gt; ''cochez les cases en rapport avec l{{'}}automount'''''&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://askubuntu.com/questions/89244/how-to-disable-automount-in-nautiluss-preferences#102601&lt;br /&gt;
&lt;br /&gt;
=Montage réseau=&lt;br /&gt;
Il est possible de monter des partage réseau via différent protocoles au travers du module [https://fr.wikipedia.org/wiki/GVFS GVFS] accessible par ''Nautilus''.&lt;br /&gt;
&lt;br /&gt;
Bien souvent, un partage réseau exige une identification et le système enregistre ces informations tant que votre session ([https://fr.wikipedia.org/wiki/GNOME_Display_Manager GDM]) est ouverte. Le fait de démonter le partage ne vide alors pas ces informations d'identification (un accès ultérieur se ferra sans redemander ces données). Il est cependant parfois souhaitable de se déconnecter d'un partage pour utiliser un autre compte distant. Pour se faire, il faut vider le cache de &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gnome-keyring-daemon&amp;lt;/syntaxhighlight&amp;gt; :&lt;br /&gt;
 gnome-keyring-daemon -r&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://askubuntu.com/questions/611612/how-to-make-nautilus-forget-smb-session-passwords-without-logging-out&lt;br /&gt;
&lt;br /&gt;
=Redémarrer le Shell=&lt;br /&gt;
Dans certain cas de plantages un redémarrage de Gnome Shell peut s'avérer utile. Si l'interface n'est pas gelée, il est possible via la combinaison de touches &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;lt;alt&amp;gt;&amp;lt;F2&amp;gt;-&amp;lt;r&amp;gt;&amp;lt;entrer&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; d'effectuer cette opération (uniquement sous ''X11''). Mais si c'est le cas, ouvrez un shell bash (vrai shell - pas terminal) avec &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;lt;ctrl&amp;gt;&amp;lt;alt&amp;gt;&amp;lt;F3&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; avec l'utilisateur de la session qui a planté et entrez ces deux commandes :&lt;br /&gt;
 export DISPLAY=:0.0&lt;br /&gt;
 gnome-shell -r&lt;br /&gt;
&lt;br /&gt;
''Le rechargement de Gnome-shell n’entraîne pas la perte de vos fenêtres.''&lt;br /&gt;
&lt;br /&gt;
=Modifier les paramètres par défaut de Gnome=&lt;br /&gt;
Dans les manipulations précédentes nous utilisons la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gsettings&amp;lt;/syntaxhighlight&amp;gt; pour changer des paramètres au niveau de l'utilisateur. Nous pouvons également modifier les paramètres par défaut.&lt;br /&gt;
&lt;br /&gt;
Pour cela nous devons créer le fichier &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/dconf/profile/user&amp;lt;/syntaxhighlight&amp;gt; :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; '_EOF_' &amp;gt;&amp;gt; /etc/dconf/profile/user&lt;br /&gt;
user-db:user&lt;br /&gt;
system-db:local&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;user-db:user&amp;lt;/syntaxhighlight&amp;gt; : Sélectionne la bases de données de configuration en écriture, ici &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;user-db&amp;lt;/syntaxhighlight&amp;gt; veux dire qui va chercher la configuration dans &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;~/.config/dconf&amp;lt;/syntaxhighlight&amp;gt; et &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;user&amp;lt;/syntaxhighlight&amp;gt; recherche le fichier &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;user&amp;lt;/syntaxhighlight&amp;gt; ou le dossier &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;user.d&amp;lt;/syntaxhighlight&amp;gt; dans arborescence défini précédemment.&lt;br /&gt;
* &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;system-db:local&amp;lt;/syntaxhighlight&amp;gt; : Sélectionne la bases de données de configuration en lecture seule, ici &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;system-db&amp;lt;/syntaxhighlight&amp;gt; veux dire qui va chercher la configuration dans &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/dconf/db/&amp;lt;/syntaxhighlight&amp;gt; et &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;local&amp;lt;/syntaxhighlight&amp;gt; recherche le fichier &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;local&amp;lt;/syntaxhighlight&amp;gt; ou le dossier &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;local.d&amp;lt;/syntaxhighlight&amp;gt; dans arborescence défini précédemment.&lt;br /&gt;
&lt;br /&gt;
Il faut donc créer le dossier &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/dconf/db/local.d&amp;lt;/syntaxhighlight&amp;gt; pour placer notre configuration par défaut dedans :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
mkdir -p /etc/dconf/db/local.d/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Voici un exemple le fichier de configuration :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt; '_EOF_' &amp;gt;&amp;gt; /etc/dconf/db/local.d/00-personnalisation&lt;br /&gt;
# Modification du fond d'écran&lt;br /&gt;
[org/gnome/desktop/background]&lt;br /&gt;
picture-uri='file:///usr/local/share/backgrounds/fondecran.jpg'&lt;br /&gt;
picture-options='zoom'&lt;br /&gt;
&lt;br /&gt;
# Modification du pack d'icône&lt;br /&gt;
[org/gnome/desktop/interface]&lt;br /&gt;
icon-theme='Papirus'&lt;br /&gt;
&lt;br /&gt;
# Ajout des boutons maximiser et minimiser dans la barre de titre des fenêtres&lt;br /&gt;
[org/gnome/desktop/wm/preferences]&lt;br /&gt;
button-layout='appmenu:minimize,maximize,close'&lt;br /&gt;
_EOF_&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour prandre en compte ces configurations, il faut lancer cette commande :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
dconf update&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A la création d'un nouvelle utilisateur, la bases de données de configuration &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;user-db:user&amp;lt;/syntaxhighlight&amp;gt; étant inéxistant, il ce rabat sur la bases de données de configuration &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;system-db:local&amp;lt;/syntaxhighlight&amp;gt; (celle qu'on a modifié). L'utilisateur a donc un fond d'écran personnalisé, le pack d'icône &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;papirus&amp;lt;/syntaxhighlight&amp;gt; et les boutons maximiser et minimiser dans la barre de titre des fenêtres.&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://coderwall.com/p/qpv9oq/restart-gnome-shell-from-the-console&lt;br /&gt;
* https://help.gnome.org/admin/system-admin-guide/stable/desktop-background.html.en&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Gnome_3&amp;diff=1422</id>
		<title>Gnome 3</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Gnome_3&amp;diff=1422"/>
		<updated>2023-02-18T23:27:58Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Ajout des éléments pour changer de fond d'écran, changer de pack d'icône et l'ajout des boutons maximiser et minimiser dans la barre de titre des fenêtres&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:environnements_bureau]]&lt;br /&gt;
&lt;br /&gt;
=Installation Gnome=&lt;br /&gt;
==Linux Debian==&lt;br /&gt;
===Méthode de l'installeur Debian===&lt;br /&gt;
 # apt install tasksel&lt;br /&gt;
 # tasksel install gnome-desktop --new-install&lt;br /&gt;
&lt;br /&gt;
===Méthode manuelle===&lt;br /&gt;
====Installation minimale====&lt;br /&gt;
 # apt install gnome-core gdm3&lt;br /&gt;
&lt;br /&gt;
====Installation avec applicatif de base====&lt;br /&gt;
 # apt install gnome-shell gdm3&lt;br /&gt;
&lt;br /&gt;
==Linux CentOS==&lt;br /&gt;
On peut installer GNOME 3 sous CentOS comme trouvé dans cette [https://unix.stackexchange.com/questions/181503/how-to-install-desktop-environments-on-centos-7 source] selon la méthode suivante:&lt;br /&gt;
 yum -y groups install &amp;quot;GNOME Desktop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 startx&lt;br /&gt;
&lt;br /&gt;
Je n'ai pas explorer l'usage d'un gestionnaire de session comme GDM. Il serai intéressant de s'en occuper plus tard (il semblerai qu'une solution soit décrite dans le lien source donné plus haut).&lt;br /&gt;
&lt;br /&gt;
=Mises à jours automatiques=&lt;br /&gt;
Par défaut, les mises à jours automatiques sont activé et il n'existe pas d'options dans l'interface graphique pour les configurer. La commande suivante suivie d'un drapeau booléen permet d'interagir avec.&lt;br /&gt;
&lt;br /&gt;
==Désactiver les mises à jours automatiques==&lt;br /&gt;
 $ gsettings set org.gnome.software download-updates false&lt;br /&gt;
''Note : ne fonctionne pas contrairement à la méthode suivante.''&lt;br /&gt;
&lt;br /&gt;
 systemctl disable apt-daily-upgrade.timer&lt;br /&gt;
 systemctl disable apt-daily.timer&lt;br /&gt;
 systemctl stop apt-daily-upgrade.timer&lt;br /&gt;
 systemctl stop apt-daily.timer&lt;br /&gt;
&lt;br /&gt;
==Réactiver les mises à jours automatiques==&lt;br /&gt;
 $ gsettings set org.gnome.software download-updates true&lt;br /&gt;
''Note : ne fonctionne pas contrairement à la méthode suivante.''&lt;br /&gt;
&lt;br /&gt;
 systemctl enable apt-daily-upgrade.timer&lt;br /&gt;
 systemctl enable apt-daily.timer&lt;br /&gt;
 systemctl start apt-daily-upgrade.timer&lt;br /&gt;
 systemctl start apt-daily.timer&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
 * https://www.jbnet.fr/systeme/linux/gnome-desactiver-la-rechercher-automatique-de-mises-a-jour.html&lt;br /&gt;
&lt;br /&gt;
=Ajouter une application au démarrage=&lt;br /&gt;
Sur Gnome 3, pour ajouter une application au démarrage nous avons 2 options :&lt;br /&gt;
&lt;br /&gt;
==Via l'outil de personnalisation Gnome==&lt;br /&gt;
L'application ce nomme : &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gnome-tweak-tool&amp;lt;/syntaxhighlight&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dans l'onglet &amp;quot;Applications au démarrage&amp;quot;, ajouter l'application voulu.&lt;br /&gt;
&lt;br /&gt;
==Via fichier==&lt;br /&gt;
Toutes les applications au démarrage déclarer dans l'outil de personnalisation Gnome sont dans des fichiers dans  &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;~/.config/autostart/&amp;lt;/syntaxhighlight&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Nous pouvons donc modifier les fichiers si nous voulons ajouter une option a notre application.&lt;br /&gt;
&lt;br /&gt;
Exemple :&lt;br /&gt;
&lt;br /&gt;
 # vim ~/.config/autostart/empathy.desktop&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Exec=empathy -h #Ouverture en mode minimiser&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Modifier l'apparence de Gnome=&lt;br /&gt;
L'apparence de Gnome 3 a été totalement réalisé en CSS. Il suffit donc de modifier le fichier CSS pour donner a notre interface l'apparence voulu.&lt;br /&gt;
&lt;br /&gt;
 # vim /usr/share/gnome-shell/theme/gnome-shell.css&lt;br /&gt;
&lt;br /&gt;
==Changer la couleur de la barre du haut==&lt;br /&gt;
&lt;br /&gt;
Modifier :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Panel */&lt;br /&gt;
#panel {&lt;br /&gt;
    background-color: black;&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    height: 1.86em;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par :&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;css&amp;quot;&amp;gt;&lt;br /&gt;
/* Panel */&lt;br /&gt;
#panel {&lt;br /&gt;
    background-color: rgba(0,0,0,0.8); /*Couleur noire avec une opacité de 80%*/&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
    height: 1.86em;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Changement du fond d'écran=&lt;br /&gt;
Il faut changer les paramètres suivants dans &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gsettings&amp;lt;/syntaxhighlight&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gsettings set org.gnome.desktop.background picture-uri 'file:///home/toto/Images/monfonddécran.jpg'&lt;br /&gt;
gsettings set org.gnome.desktop.background picture-options 'zoom'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Changement du pack d'icône=&lt;br /&gt;
Nous pouvons personnaliser le pack d'icône par défaut.Si un nouvelle utilisateur est créé, ce pack d'icône sera sélectionné.&lt;br /&gt;
Pour l’exemple nous allons utiliser le pack d'icône &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;papirus&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous débutons en installant &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;papirus&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;apt install papirus-icon-theme&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Il faut changer les paramètres suivants dans &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gsettings&amp;lt;/syntaxhighlight&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gsettings set org.gnome.desktop.interface icon-theme 'Papirus'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Ajout des boutons maximiser et minimiser dans la barre de titre des fenêtres=&lt;br /&gt;
Il faut changer les paramètres suivants dans &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gsettings&amp;lt;/syntaxhighlight&amp;gt;:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
gsettings set org.gnome.desktop.wm.preferences button-layout 'appmenu:minimize,maximize,close'&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Changement de fenêtres=&lt;br /&gt;
Le fonctionnement par défaut du &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;lt;alt+tab&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; n'est pas pratique lorsque l'on a plusieurs fenêtres d'une même application ouverte. Pour corriger cela il faut ajouter un raccourci clavier dans les '''Paramètres &amp;gt; raccourcis clavier &amp;gt; Changer de fenêtre &amp;gt; Alt+Tabulation''', ce qui remplacera le comportement par défaut.&lt;br /&gt;
&lt;br /&gt;
Afin de permettre un changement de fenêtres [https://linuxiac.com/alt-tab-to-switch-only-on-current-workspace-in-gnome-shell/ entre les bureaux] virtuels, il faut définir la valeur suivante à ''false''&lt;br /&gt;
 gsettings set org.gnome.shell.window-switcher current-workspace-only false&lt;br /&gt;
&lt;br /&gt;
=Montage USB=&lt;br /&gt;
==Désactivation du montage automatique USB==&lt;br /&gt;
Sous Gnome, l'insertion d'une clé ou d'un disque dur USB a pour effet de déclencher son montage automatique, ce qui peut s'avérer dérangeant lorsque ladite insertion a pour but de servir à la création d'un liveCD ou tout simplement pour le partitionnement (le disque étant monté, ça peut foutre une merde monstre).&lt;br /&gt;
&lt;br /&gt;
===Méthode CLI===&lt;br /&gt;
Il faut simplement taper cette commande dans un terminal (root ou non, cela n'a pas d'importance)&lt;br /&gt;
 gsettings set org.gnome.desktop.media-handling automount false&lt;br /&gt;
&lt;br /&gt;
===Méthode graphique===&lt;br /&gt;
Cette méthode n'a aucun intérêt au vu de la simplicité/rapidité de la méthode CLI (mais nous avons parfois des masochistes parmi nous...), voici tout de même la façon de s'y prendre :&lt;br /&gt;
* Installation de l'utilitaire &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;dconf-editor&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Aller dans '''org &amp;gt; gnome &amp;gt; desktop &amp;gt; media-handling &amp;gt; ''décochez les cases en rapport avec l{{'}}automount'''''&lt;br /&gt;
&lt;br /&gt;
==Ré-activation du montage automatique==&lt;br /&gt;
===Méthode CLI===&lt;br /&gt;
De même que pour la désactivation (seul la valeur booléenne change)&lt;br /&gt;
 gsettings set org.gnome.desktop.media-handling automount true&lt;br /&gt;
&lt;br /&gt;
===Méthode graphique===&lt;br /&gt;
Dans dconf-editor :&lt;br /&gt;
* Installation de l'utilitaire &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;dconf-editor&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Aller dans '''org &amp;gt; gnome &amp;gt; desktop &amp;gt; media-handling &amp;gt; ''cochez les cases en rapport avec l{{'}}automount'''''&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://askubuntu.com/questions/89244/how-to-disable-automount-in-nautiluss-preferences#102601&lt;br /&gt;
&lt;br /&gt;
=Montage réseau=&lt;br /&gt;
Il est possible de monter des partage réseau via différent protocoles au travers du module [https://fr.wikipedia.org/wiki/GVFS GVFS] accessible par ''Nautilus''.&lt;br /&gt;
&lt;br /&gt;
Bien souvent, un partage réseau exige une identification et le système enregistre ces informations tant que votre session ([https://fr.wikipedia.org/wiki/GNOME_Display_Manager GDM]) est ouverte. Le fait de démonter le partage ne vide alors pas ces informations d'identification (un accès ultérieur se ferra sans redemander ces données). Il est cependant parfois souhaitable de se déconnecter d'un partage pour utiliser un autre compte distant. Pour se faire, il faut vider le cache de &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;gnome-keyring-daemon&amp;lt;/syntaxhighlight&amp;gt; :&lt;br /&gt;
 gnome-keyring-daemon -r&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://askubuntu.com/questions/611612/how-to-make-nautilus-forget-smb-session-passwords-without-logging-out&lt;br /&gt;
&lt;br /&gt;
=Redémarrer le Shell=&lt;br /&gt;
Dans certain cas de plantages un redémarrage de Gnome Shell peut s'avérer utile. Si l'interface n'est pas gelée, il est possible via la combinaison de touches &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;lt;alt&amp;gt;&amp;lt;F2&amp;gt;-&amp;lt;r&amp;gt;&amp;lt;entrer&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; d'effectuer cette opération (uniquement sous ''X11''). Mais si c'est le cas, ouvrez un shell bash (vrai shell - pas terminal) avec &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;lt;ctrl&amp;gt;&amp;lt;alt&amp;gt;&amp;lt;F3&amp;gt;&amp;lt;/syntaxhighlight&amp;gt; avec l'utilisateur de la session qui a planté et entrez ces deux commandes :&lt;br /&gt;
 export DISPLAY=:0.0&lt;br /&gt;
 gnome-shell -r&lt;br /&gt;
&lt;br /&gt;
''Le rechargement de Gnome-shell n’entraîne pas la perte de vos fenêtres.''&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://coderwall.com/p/qpv9oq/restart-gnome-shell-from-the-console&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Wireguard&amp;diff=1348</id>
		<title>Wireguard</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Wireguard&amp;diff=1348"/>
		<updated>2022-03-05T09:03:26Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Modification des balises 'source' en 'syntaxhighlight' et ajout du chemin de la configuration du client&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:vpn]]&lt;br /&gt;
''Wireguard'' est une solution de ''VPN'' libre à source ouverte se voulant plus simple et sécurisée qu'[[Openvpn|OpenVPN]].&lt;br /&gt;
&lt;br /&gt;
=Partie serveur=&lt;br /&gt;
==Installation==&lt;br /&gt;
Il est actuellement (21/07/20) disponible dans les branches ''buster-backports'', ''bullseye'' et ''Sid'' de ''Debian''. L'outil est présent sous forme de module ''DKMS'' jusqu'au noyau ''5.5'' et c'est au ''5.6'' qu'il est intégré complètement à celui-ci. Il est également possible de l'obtenir via un dépôt dédié avec les [https://www.wireguard.com/install/ commandes suivantes]:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;deb http://deb.debian.org/debian/ unstable main&amp;quot; &amp;gt; /etc/apt/sources.list.d/unstable.list&lt;br /&gt;
printf 'Package: *\nPin: release a=unstable\nPin-Priority: 90\n' &amp;gt; /etc/apt/preferences.d/limit-unstable&lt;br /&gt;
apt update&lt;br /&gt;
apt install wireguard&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nous utiliserons une ''Debian Sid'' (du 19/04/19) pour cette documentation. Aussi, '''seule la commande suivante est nécessaire''':&lt;br /&gt;
 apt install wireguard&lt;br /&gt;
&lt;br /&gt;
==Génération des clés==&lt;br /&gt;
 wg genkey | tee /etc/wireguard/clé_privée_serveur | wg pubkey &amp;gt; /etc/wireguard/clé_publique_serveur&lt;br /&gt;
&lt;br /&gt;
==Afficher vos clés==&lt;br /&gt;
 cat /etc/wireguard/clé_privée_serveur /etc/wireguard/clé_publique_serveur&lt;br /&gt;
&lt;br /&gt;
''Le résultat vous sera utile pour remplir les fichiers de configuration serveur et client.''&lt;br /&gt;
&lt;br /&gt;
==Configuration du serveur==&lt;br /&gt;
 vim /etc/wireguard/wg0.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[Interface]&lt;br /&gt;
Address = 10.100.100.1/24&lt;br /&gt;
SaveConfig = true&lt;br /&gt;
PrivateKey = INSÉRER_LA_CLÉ_PRIVÉE_DU_SERVEUR&lt;br /&gt;
ListenPort = 51820&lt;br /&gt;
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE&lt;br /&gt;
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
[Peer]&lt;br /&gt;
PublicKey = INSÉRER_LA_CLÉ_PUBLIQUE_DU_CLIENT&lt;br /&gt;
AllowedIPs = 10.100.100.2/32&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Activer le routage==&lt;br /&gt;
 sed -i '/net.ipv4.ip_forward/s/^#//g' /etc/sysctl.conf&lt;br /&gt;
 sysctl -p&lt;br /&gt;
&lt;br /&gt;
==Appliquer les bons droits==&lt;br /&gt;
 chown -v root:root /etc/wireguard/wg0.conf&lt;br /&gt;
 chmod -v 600 /etc/wireguard/wg0.conf&lt;br /&gt;
&lt;br /&gt;
==Démarrer le tunnel==&lt;br /&gt;
 wg-quick up wg0&lt;br /&gt;
&lt;br /&gt;
''Une interface wg0 est créée avec l'adresse IP fournie dans le fichier de configuration.''&lt;br /&gt;
&lt;br /&gt;
==Arrêter le tunnel==&lt;br /&gt;
 wg-quick down wg0&lt;br /&gt;
&lt;br /&gt;
==Activer le tunnel au démarrage==&lt;br /&gt;
Il existe un service [[:Category:Systemd|Systemd]] pré-installé mais désactivé par défaut. Il suffit de l'activer pour lancer automatiquement ''Wireguard'' au démarrage du système.&lt;br /&gt;
 systemctl enable wg-quick@wg0.service&lt;br /&gt;
&lt;br /&gt;
=Partie cliente=&lt;br /&gt;
==installation==&lt;br /&gt;
 apt install wireguard&lt;br /&gt;
&lt;br /&gt;
'''Génération des clés'''&lt;br /&gt;
 wg genkey | tee /etc/wireguard/clé_privée_client | wg pubkey &amp;gt; /etc/wireguard/clé_publique_client&lt;br /&gt;
&lt;br /&gt;
==Afficher vos clés==&lt;br /&gt;
 cat /etc/wireguard/clé_privée_serveur /etc/wireguard/clé_publique_serveur&lt;br /&gt;
&lt;br /&gt;
==Configuration du client==&lt;br /&gt;
 vim /etc/wireguard/wg0-client.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[Interface]&lt;br /&gt;
Address = 10.100.100.2/32&lt;br /&gt;
PrivateKey = 8BOBheDTB8I0FpYfX4MM0OVRcchfPMPw1epH+rTaEm0=&lt;br /&gt;
&lt;br /&gt;
[Peer]&lt;br /&gt;
PublicKey = sX3l46346afcqNeCUgXOY7dxfGat0/pO7O2g75vtGhU=&lt;br /&gt;
Endpoint = wg.toto.fr:51820&lt;br /&gt;
AllowedIPs = 0.0.0.0/0&lt;br /&gt;
PersistentKeepalive = 25&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Astuce|Il est également possible d'exécuter un script après l'établissement et à la destruction du tunnel (afin de changer vos serveurs DNS  ou d'ajouter des [https://www.cyberciti.biz/faq/how-to-set-up-wireguard-firewall-rules-in-linux/ règles de pare-feu] par exemple) via les directives &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;PostUp&amp;lt;/syntaxhighlight&amp;gt; et &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;PostDown&amp;lt;/syntaxhighlight&amp;gt; de la section &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;[Interface]&amp;lt;/syntaxhighlight&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
==Démarrer le tunnel==&lt;br /&gt;
 wg-quick up wg0-client&lt;br /&gt;
&lt;br /&gt;
==Arrêter le tunnel==&lt;br /&gt;
 wg-quick down wg0-client&lt;br /&gt;
&lt;br /&gt;
==Routage==&lt;br /&gt;
''Wireguard'' utilise le [[routage par la source]] afin de faire transiter l'ensemble des paquets dans le tunnel. Lorsque le client monte le lien, l'outil se charge d'exécuter des commandes [[:Category:iproute2|Iproute2]] (affichées dans le ''stdout'') afin de créer une table n°51820 et d'y ajouter la règle &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;ip -4 route add 0.0.0.0/0 dev wg0-client table 51820&amp;lt;/syntaxhighlight&amp;gt;. Ceci peut être déroutant au premier abord du fait que la route par défaut n'est pas supprimée de la table de routage standard, ce qui pourrai laisser penser que le ''VPN'' n'est pas utilisé pour le traffic ''WAN'' mais il n'est est rien. Une capture réseau le confirmera asser facilement.&lt;br /&gt;
&lt;br /&gt;
=Sources=&lt;br /&gt;
* http://portal.altispeed.com/kb/faq.php?id=201&lt;br /&gt;
* https://www.youtube.com/watch?v=n00ayGUdCaI&lt;br /&gt;
* https://www.wireguard.com/&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Shell_bash&amp;diff=1316</id>
		<title>Shell bash</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Shell_bash&amp;diff=1316"/>
		<updated>2022-02-27T22:48:04Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Ajout de la section restriction&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:shell]]&lt;br /&gt;
Le ''shell Bash'' est l'interpréteur de commandes par défaut de la plupart des distributions Linux. Il peut être personnalisé en modifiant son apparence ou en lui activant des paramètres.&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
==bashrc==&lt;br /&gt;
Le &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;.bashrc&amp;lt;/source&amp;gt; est un fichier qui contient des commandes à exécuter au moment de la connexion d'un utilisateur. Il en existe 2 types :&lt;br /&gt;
* Un générique pour tout les utilisateurs : &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/bash.bashrc&amp;lt;/source&amp;gt;&lt;br /&gt;
* Un local pour chaque utilisateurs en particulier : &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;~/.bashrc&amp;lt;/source&amp;gt;&lt;br /&gt;
Pour que les modifications prennent effet, il faut recharger le fichier après modification soit en relançant le shell, soit en exécutant le fichier comme s'il s’agissait d'une commande &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;. .bashrc&amp;lt;/source&amp;gt; ou bien en utilisant la commande &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;source ~/.bashrc&amp;lt;/source&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Auto complétion===&lt;br /&gt;
Le paquet &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;bash-completion&amp;lt;/source&amp;gt; offre la possibilité de compléter les commandes bash à l'aide de la tabulation. Il faut entrer les quelques lignes suivantes dans l'un des fichiers de configuration de bash pour que cela prenne effet.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
if ! shopt -oq posix; then&lt;br /&gt;
  if [ -f /usr/share/bash-completion/bash_completion ]; then&lt;br /&gt;
    . /usr/share/bash-completion/bash_completion&lt;br /&gt;
  elif [ -f /etc/bash_completion ]; then&lt;br /&gt;
    . /etc/bash_completion&lt;br /&gt;
  fi&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Personnalisation du prompt===&lt;br /&gt;
==inputrc==&lt;br /&gt;
===Insensibilité à la casse===&lt;br /&gt;
Rendre insensible l'auto complétion du ''shell Bash'' à la casse (très utile quand on tape vite au clavier et que le système écrit ''/Etc'' au lieu de ''/etc'' et dit &amp;quot;Aucun fichier ou dossier de ce type&amp;quot;).&lt;br /&gt;
 vim ~/.inputrc&lt;br /&gt;
&lt;br /&gt;
Ajouter cette ligne :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
set completion-ignore-case On&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Source de la section===&lt;br /&gt;
http://askubuntu.com/questions/87061/can-i-make-tab-auto-completion-case-insensitive-in-the-terminal&lt;br /&gt;
&lt;br /&gt;
=Redirections=&lt;br /&gt;
==Rediriger plusieurs lignes==&lt;br /&gt;
Pour ce faire nous utiliserons un EOF (End Of File). Il faut précéder et succéder une chaîne de caractère quelconque par des traits de soulignement afin de marquer le début et la fin de notre bloque de texte (à la manière du ''motd'' Cisco).&lt;br /&gt;
&lt;br /&gt;
===Dans un fichier===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ycharbi@XPS13:/tmp$ cat &amp;lt;&amp;lt; '_EOF_' &amp;gt; foo.txt&lt;br /&gt;
&amp;gt; Écrire et&lt;br /&gt;
&amp;gt; terminer par le&lt;br /&gt;
&amp;gt; même symbole&lt;br /&gt;
&amp;gt; _EOF_&lt;br /&gt;
ycharbi@XPS13:/tmp$ cat foo.txt &lt;br /&gt;
Écrire et&lt;br /&gt;
terminer par le&lt;br /&gt;
même symbole&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Dans le shell===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
ycharbi@XPS13:/tmp$ cat &amp;lt;&amp;lt; _EOF_&lt;br /&gt;
&amp;gt; Écrire et&lt;br /&gt;
&amp;gt; terminer par le&lt;br /&gt;
&amp;gt; même symbole&lt;br /&gt;
&amp;gt; _EOF_&lt;br /&gt;
Écrire et&lt;br /&gt;
terminer par le&lt;br /&gt;
même symbole&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Astuce|Le fait de mettre des quottes au mot clé de fin de fichier (''_EOF_'' dans l'exemple, mais pourrai être ''toto'') permet de désactiver l'interprétation ''Bash''. Si vous ne les mettez pas, le ''shell'' interprétera le code que vous entrerez (les variables notamment). À vous de voir ce que vous voulez faire. Ceci est expliqué dans ce [http://tldp.org/LDP/abs/html/here-docs.html chapitre] du guide de programmation ''Bash'' avancé repris par ce [https://stackoverflow.com/questions/2953081/how-can-i-write-a-heredoc-to-a-file-in-bash-script commentaire].}}&lt;br /&gt;
&lt;br /&gt;
===Source de la section===&lt;br /&gt;
* https://www.bggofurther.com/fr/2017/10/write-multiple-lines-to-file-in-bash-script/&lt;br /&gt;
&lt;br /&gt;
=Arguments=&lt;br /&gt;
Voici une liste d'astuces pour récupérer des arguments tapés en ''bash'':&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument !! Signification&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;lt;Échap&amp;gt; + _&amp;lt;/source&amp;gt; || Colle le dernier argument passé à la dernière commande tapée&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;!$&amp;lt;/source&amp;gt; || Équivaut, au moment d'envoyer la commande, au dernier argument passé à la dernière commande tapée&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;!:$&amp;lt;/source&amp;gt; || Équivaut, au moment d'envoyer la commande, à l’énième argument passé à la dernière commande tapée (remplacer le &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;$&amp;lt;/source&amp;gt; par le numéro de l'argument)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;!!&amp;lt;/source&amp;gt; || Équivaut, au moment d'envoyer la commande, à tout les arguments de la dernière commande tapée&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;^toto^titi&amp;lt;/source&amp;gt; || Permet de remplacer ''toto'' par ''titi'' dans la commande précédente (à entrer seul, sans commande ni argument). Un &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;ls /etc&amp;lt;/source&amp;gt; suivi d'un &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;^/etc^/&amp;lt;/source&amp;gt; donnera un &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;ls /&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;~+&amp;lt;/source&amp;gt; || Donne le répertoire courant (est identique à &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;$(pwd)&amp;lt;/source&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;&amp;lt;ctrl&amp;gt; + alt + e&amp;lt;/source&amp;gt; || Déroule la véritable signification d'un alias. Par exemple, si je tape &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;ls&amp;lt;/source&amp;gt; suivi de ce raccourci clavier, j'obtiens &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;ls --color&amp;lt;/source&amp;gt; qui est définit comme alias dans mon &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;.bashrc&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;$_&amp;lt;/source&amp;gt; || Correspond au dernier paramètre de la dernière commande exécuté. La différence avec les motifs présentés plus haut est qu'il utilisable même lors d'un enchaînement de commande comme par [https://www.blog-libre.org/2020/04/17/une-presentation-de-systemd-nspawn/ exemple] &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;mkdir -p ~/tmp/conteneur &amp;amp;&amp;amp; cd $_&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Restriction=&lt;br /&gt;
Il est possible de restreindre l'usage du ''shell'' pour un utilisateur en exécutant &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;bash&amp;lt;/syntaxhighlight&amp;gt;  avec l'option &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;-r&amp;lt;/syntaxhighlight&amp;gt; ou en utilisant &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;/usr/bin/rbash&amp;lt;/syntaxhighlight&amp;gt; (résultat identique).&lt;br /&gt;
&lt;br /&gt;
L'interpréteur ainsi restreint permet de créer un environnement plus contrôlé qu'un interpréteur standard. Il se comporte de même façon que &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;bash&amp;lt;/syntaxhighlight&amp;gt; à la différence des actions suivantes qui sont interdites ou non effectuées :&lt;br /&gt;
* changer de répertoire avec cd ;&lt;br /&gt;
* créer ou détruire les valeurs de SHELL, PATH, HISTFILE, ENV ou BASH_ENV ;&lt;br /&gt;
* indiquer des noms de commandes contenant un / ;&lt;br /&gt;
* indiquer un nom de fichier contenant un / comme argument de la commande interne . ;&lt;br /&gt;
* indiquer un nom de fichier contenant une barre oblique (/) comme argument de la  commande interne history ;&lt;br /&gt;
* indiquer  un  nom de fichier contenant une barre oblique comme argument de l'option -p de la commande interne hash ;&lt;br /&gt;
* importer une définition de fonction dans l'environnement au démarrage ;&lt;br /&gt;
* analyser les valeurs de SHELLOPTS de l'environnement d'interpréteur au démarrage ;&lt;br /&gt;
* rediriger la sortie en utilisant les opérateurs de redirection &amp;gt;, &amp;gt;|, &amp;lt;&amp;gt;, &amp;gt;&amp;amp;, &amp;amp;&amp;gt; et &amp;gt;&amp;gt; ;&lt;br /&gt;
* utiliser la commande interne exec pour remplacer l'interpréteur par une autre commande ;&lt;br /&gt;
* ajouter ou supprimer des commandes internes avec les options -f et -d de la commande interne enable ;&lt;br /&gt;
* utiliser la commande interne enable pour activer les commandes internes de l'interpréteur désactivées ;&lt;br /&gt;
* indiquer l'option -p à la commande interne commande ;&lt;br /&gt;
* supprimer le mode restreint avec set +r ou set +o restricted.&lt;br /&gt;
&lt;br /&gt;
Ces restrictions sont mises en place après la lecture de tous les fichiers d’initialisation.&lt;br /&gt;
&lt;br /&gt;
De fait, il est possible d'utiliser &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;rbash&amp;lt;/syntaxhighlight&amp;gt; comme shell de connexion pour un utilisateur donné (exemple pour &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/passwd&amp;lt;/syntaxhighlight&amp;gt;) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;csv&amp;quot;&amp;gt;&lt;br /&gt;
www-data:x:33:33:www-data:/var/www:/usr/bin/rbash&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sources de la section==&lt;br /&gt;
* http://linuxfr.org/users/postroutine/journaux/bash-et-les-raccourcis-claviers&lt;br /&gt;
* https://askubuntu.com/questions/70750/how-to-get-bash-to-stop-escaping-during-tab-completion&lt;br /&gt;
* https://bugzilla.redhat.com/show_bug.cgi?id=679696&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Rsync&amp;diff=1313</id>
		<title>Rsync</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Rsync&amp;diff=1313"/>
		<updated>2022-02-27T22:30:23Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : /* Transfert via SSH */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:synchronisation]]&lt;br /&gt;
''Rsync'' est un outil de synchronisation de fichiers unidirectionnel (à l'inverse de [[Unison]]) ainsi qu'un protocole à part entière (non chiffré) écoutant sur le port 873/TCP. Il comporte un grand nombre d'options et peut être tunnélisé dans ''SSH'' afin de chiffrer son flux.&lt;br /&gt;
&lt;br /&gt;
{{info|On entend par unidirectionnel le fait que le delta entre deux fichiers soit toujours comparé de la source à la destination et non l'inverse (ce sera toujours la destination qui se ferra écraser - pas de notion de date).}}&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
''Rsync'' est un outil développé en ''Python'' disponible dans la plupart des [[:Category:distributions Linux|distributions Linux]]. Sous ''Debian'', on peut l'obtenir via [[:Category:Apt|Apt]].&lt;br /&gt;
 apt install rsync&lt;br /&gt;
&lt;br /&gt;
=Syntaxe=&lt;br /&gt;
Il est possible d'ajouter un ensemble de paramètres à l'outil afin de répondre à des besoins spécifiques. La commande suit les principes standard de syntaxe pour une commande ''UNIX'', soit :&lt;br /&gt;
&lt;br /&gt;
 rsync [PARAMÈTRES] SOURCE DESTINATION&lt;br /&gt;
&lt;br /&gt;
Lorsque une des opérandes source et/ou destination est distante, il faudra utiliser pour celle-ci une syntaxe de type &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;[&amp;lt;UTILISATEUR&amp;gt;@]&amp;lt;IP&amp;gt;&amp;lt;mode&amp;gt;&amp;lt;module&amp;gt;&amp;lt;/source&amp;gt; où chaque éléments correspondent à :&lt;br /&gt;
&lt;br /&gt;
* '''UTILISATEUR''' : nom de l'utilisateur disant (facultatif, l'utilisateur courant sera alors utilisé)&lt;br /&gt;
* '''IP''' : adresse de la machine distante&lt;br /&gt;
* '''mode''' : détermine l'usage du protocole de transfert avec les valeurs &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;::&amp;lt;/source&amp;gt; et &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;:&amp;lt;/source&amp;gt; correspondants respectivement à ''rsync'' et ''ssh''&lt;br /&gt;
* '''module''' : correspond au partage ''rsync'' dans le cas d'un mode &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;::&amp;lt;/source&amp;gt; ou au chemin distant dans le cas de &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;:&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{attention|Comme de nombreux outils de transferts, les répertoires ne sont pas géré de la même façon si un &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/&amp;lt;/source&amp;gt; a été précisé ou non. Par exemple, un transfert via Rsync du répertoire &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;DOSSIER-SOURCE&amp;lt;/source&amp;gt; vers &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;DOSSIER-DESTINIATION&amp;lt;/source&amp;gt; créera ce dernier avec le contenu du premier alors qu'un &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;DOSSIER-SOURCE/&amp;lt;/source&amp;gt; copiera son contenu dans la destination (ce sera l'équivalent d'un &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;cp DOSSIER-SOURCE/* DOSSIER-DESTINATION&amp;lt;/source&amp;gt; en somme).}}&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
==Paramètres==&lt;br /&gt;
===Maintient des permissions sources===&lt;br /&gt;
 rsync -a SOURCE DESTINATION&lt;br /&gt;
&lt;br /&gt;
===Maintient des permissions de destination===&lt;br /&gt;
 rsync -a -A --no-perms --no-owner --no-group SOURCE DESTINATION&lt;br /&gt;
&lt;br /&gt;
===Transfert via SSH===&lt;br /&gt;
 rsync -a SOURCE utilisateur@IP:DESTINATION&lt;br /&gt;
&lt;br /&gt;
====Sécurisation côté destination====&lt;br /&gt;
'''Sur l'hôte de destination''', il est possible de configurer la cible pour cet utilisateur. Nous utilisons la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;rrsync&amp;lt;/syntaxhighlight&amp;gt; (pour ''restricted rsync'') afin de spécifier celui-ci dans le fichier &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;~/.ssh/authorized_keys&amp;lt;/syntaxhighlight&amp;gt;.&lt;br /&gt;
 command=&amp;quot;rrsync /toto/tata/&amp;quot;,no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-ed25519 clé_publique&lt;br /&gt;
&lt;br /&gt;
Ici, cette utilisateur aura seulement le droit d’exécuter un &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;rsync&amp;lt;/syntaxhighlight&amp;gt; pour synchroniser le dossier &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;/toto/tata/&amp;lt;/syntaxhighlight&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Sur l'hôte source''', le chemin précisé devient alors la nouvelle racine de l'échange.&lt;br /&gt;
Dans l'exemple si dessous, le client utilisera le chemin de destination de la commande suivante.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
rsync [OPTIONS] &amp;lt;SOURCE&amp;gt; &amp;lt;UTILISATEUR&amp;gt;@&amp;lt;ADRESSE&amp;gt;:/&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Transfert via relay SSH===&lt;br /&gt;
L'usage d'un [[Openssh#Relai_SSH|relay SSH]] est utile si la machine est inaccessible directement (''NAT'', pare-feux, clé ''SSH''...).&lt;br /&gt;
 rsync -a -e &amp;quot;ssh -J utilisateur@IPRELAI:PORT&amp;quot; SOURCE utilisateur@IP/:DESTINATION&lt;br /&gt;
&lt;br /&gt;
===Compression===&lt;br /&gt;
 rsync -z SOURCE DESTINATION&lt;br /&gt;
&lt;br /&gt;
===Verbosité===&lt;br /&gt;
 rsync -v --progress SOURCE DESTINATION&lt;br /&gt;
&lt;br /&gt;
===Statistiques===&lt;br /&gt;
 rsync --stats SOURCE DESTINATION&lt;br /&gt;
&lt;br /&gt;
==Usage fréquent==&lt;br /&gt;
Voici la commande que j'utilise souvent pour transférer des fichiers dans mon réseau local via ''rsync/ssh''.&lt;br /&gt;
 rsync -av --progress SOURCE utilisateur@IP/:DESTINATION&lt;br /&gt;
&lt;br /&gt;
=Rsyncd=&lt;br /&gt;
En dehors de son usage courant via ''SSH'', ''Rsync'' peut être utilisé avec le protocole éponyme en mode serveur et client. Ceci est utilisé notamment lors de la synchronisation d'un dépôt ''Debian'' via [[ftpsync]]. Du fait de la transmission de donnée en clair, il n'est pas recommandé de l'utiliser pour autre chose que des données publiques qui verront, en amont, leur intégrité vérifié par un outil comme ''GPG''.&lt;br /&gt;
&lt;br /&gt;
==Partie serveur==&lt;br /&gt;
===Mise en œuvre===&lt;br /&gt;
Activer le démon ''Rsync''&lt;br /&gt;
 sed -i 's/RSYNC_ENABLE=false/RSYNC_ENABLE=true/' /etc/default/rsync&lt;br /&gt;
&lt;br /&gt;
Configurer le démon. Dans l'exemple, j'attribue l'utilisateur ''ftpsync'' ainsi que des partages adaptés pour coller à la documentation idoine. Modifiez selon vos besoins.&lt;br /&gt;
 vim /etc/rsyncd.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uid = ftpsync&lt;br /&gt;
gid = ftpsync&lt;br /&gt;
use chroot = yes&lt;br /&gt;
syslog facility = local5&lt;br /&gt;
&lt;br /&gt;
[debian]&lt;br /&gt;
	path = /var/www/dépôts/debian&lt;br /&gt;
	comment = Dépôt debian&lt;br /&gt;
	read only = true&lt;br /&gt;
&lt;br /&gt;
[debian-security]&lt;br /&gt;
	path = /var/www/dépôts/debian-security&lt;br /&gt;
	comment = Dépôt debian-security&lt;br /&gt;
	read only = true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note : les [[#Syntaxe|modules]] du mode rsync sont définis entre crochet et correspondent aux partages accessibles par les clients.''&lt;br /&gt;
&lt;br /&gt;
Démarrer le service&lt;br /&gt;
 systemctl start rsync.service&lt;br /&gt;
&lt;br /&gt;
===Restriction d'accès===&lt;br /&gt;
Il est possible de limiter l'accès par un couple ''identifiant/mot de passe''. Gardez toutefois à l'esprit que les informations circules en clair (bien que le mot de passe soit haché). Réservez ces méthodes dans un réseau de confiance ou au travers d'un ''VPN'' (comme [[Strongswan|IPSec]] ou [[Wireguard]]).&lt;br /&gt;
&lt;br /&gt;
 vim /etc/rsyncd.secrets&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
toto:quenelleépaulée&lt;br /&gt;
titi:123456789&lt;br /&gt;
tata:c'estlabase&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le fichier de configuration devra alors se voir agrémenté de quelques paramètres supplémentaires. Dans la section globale, la directive &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;strict modes = false&amp;lt;/source&amp;gt; permet de pouvoir lire le fichier de mots passe (sinon une [https://stackoverflow.com/questions/26007928/rsyncd-secrets-file-linux-permission-should-not-be-read-by-group-and-others sécurité] à la con est bogué l'empêche...) ; les paramètres &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;auth users&amp;lt;/source&amp;gt; et &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;secrets file&amp;lt;/source&amp;gt; des modules permettent respectivement d'indiquer les utilisateurs authorisés à se connecter au module ainsi que l'emplacement du fichier des utilisateurs.&lt;br /&gt;
&lt;br /&gt;
Voici le résultat :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uid = ftpsync&lt;br /&gt;
gid = ftpsync&lt;br /&gt;
use chroot = yes&lt;br /&gt;
syslog facility = local5&lt;br /&gt;
strict modes = false&lt;br /&gt;
&lt;br /&gt;
[debian]&lt;br /&gt;
	path = /var/www/dépôts/debian&lt;br /&gt;
	comment = Synchro du répertoire share&lt;br /&gt;
	read only = true&lt;br /&gt;
	auth users = toto,titi,tata&lt;br /&gt;
	secrets file = /etc/rsyncd.secrets&lt;br /&gt;
&lt;br /&gt;
[debian-security]&lt;br /&gt;
	path = /var/www/dépôts/debian-security&lt;br /&gt;
	comment = Synchro du répertoire share&lt;br /&gt;
	read only = true&lt;br /&gt;
	auth users = toto,titi,tata&lt;br /&gt;
	secrets file = /etc/rsyncd.secrets&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redémarrer le service&lt;br /&gt;
 systemctl restart rsync.service&lt;br /&gt;
&lt;br /&gt;
==Partie cliente==&lt;br /&gt;
Le client peut récupérer les fichiers du partage via la commande suivante (les paramètres sont bien sûr facultatifs) :&lt;br /&gt;
 rsync -av --progress IP:/debian-security /tmp/&lt;br /&gt;
&lt;br /&gt;
Si vous avez définit une identification, vous pouvez utiliser la syntaxe suivante :&lt;br /&gt;
&lt;br /&gt;
 rsync -av --progress titi@&amp;lt;IP&amp;gt;::debian-security /tmp/&lt;br /&gt;
&lt;br /&gt;
Le mot de passe vous sera demandé via un prompt dédié. Une [https://unix.stackexchange.com/questions/111526/how-can-i-rsync-without-prompt-for-password-without-using-public-key-authentica variable d'environnement] est également définiçable afin de le renseigner automatiquement sans aucune forme d'intéraction (pratique pour effectuer des transferts automatisés via [[Cron]]) :&lt;br /&gt;
&lt;br /&gt;
 RSYNC_PASSWORD=123456789 rsync -av --progress titi@&amp;lt;IP&amp;gt;::debian-security /tmp/&lt;br /&gt;
&lt;br /&gt;
==Sources de la section==&lt;br /&gt;
* https://www.man7.org/linux/man-pages/man1/rsync.1.html&lt;br /&gt;
* https://doc.ubuntu-fr.org/tutoriel/serveur_de_synchronisation_avec_rsync&lt;br /&gt;
* https://www1.zonewebmaster.eu/serveur-debian-securite/installer-rsync-serveur-synchronisation&lt;br /&gt;
&lt;br /&gt;
=Source=&lt;br /&gt;
* https://linux.die.net/man/1/rsync&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Rsync&amp;diff=1310</id>
		<title>Rsync</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Rsync&amp;diff=1310"/>
		<updated>2022-02-27T22:28:33Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Sécurisation côté destination&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:synchronisation]]&lt;br /&gt;
''Rsync'' est un outil de synchronisation de fichiers unidirectionnel (à l'inverse de [[Unison]]) ainsi qu'un protocole à part entière (non chiffré) écoutant sur le port 873/TCP. Il comporte un grand nombre d'options et peut être tunnélisé dans ''SSH'' afin de chiffrer son flux.&lt;br /&gt;
&lt;br /&gt;
{{info|On entend par unidirectionnel le fait que le delta entre deux fichiers soit toujours comparé de la source à la destination et non l'inverse (ce sera toujours la destination qui se ferra écraser - pas de notion de date).}}&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
''Rsync'' est un outil développé en ''Python'' disponible dans la plupart des [[:Category:distributions Linux|distributions Linux]]. Sous ''Debian'', on peut l'obtenir via [[:Category:Apt|Apt]].&lt;br /&gt;
 apt install rsync&lt;br /&gt;
&lt;br /&gt;
=Syntaxe=&lt;br /&gt;
Il est possible d'ajouter un ensemble de paramètres à l'outil afin de répondre à des besoins spécifiques. La commande suit les principes standard de syntaxe pour une commande ''UNIX'', soit :&lt;br /&gt;
&lt;br /&gt;
 rsync [PARAMÈTRES] SOURCE DESTINATION&lt;br /&gt;
&lt;br /&gt;
Lorsque une des opérandes source et/ou destination est distante, il faudra utiliser pour celle-ci une syntaxe de type &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;[&amp;lt;UTILISATEUR&amp;gt;@]&amp;lt;IP&amp;gt;&amp;lt;mode&amp;gt;&amp;lt;module&amp;gt;&amp;lt;/source&amp;gt; où chaque éléments correspondent à :&lt;br /&gt;
&lt;br /&gt;
* '''UTILISATEUR''' : nom de l'utilisateur disant (facultatif, l'utilisateur courant sera alors utilisé)&lt;br /&gt;
* '''IP''' : adresse de la machine distante&lt;br /&gt;
* '''mode''' : détermine l'usage du protocole de transfert avec les valeurs &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;::&amp;lt;/source&amp;gt; et &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;:&amp;lt;/source&amp;gt; correspondants respectivement à ''rsync'' et ''ssh''&lt;br /&gt;
* '''module''' : correspond au partage ''rsync'' dans le cas d'un mode &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;::&amp;lt;/source&amp;gt; ou au chemin distant dans le cas de &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;:&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{attention|Comme de nombreux outils de transferts, les répertoires ne sont pas géré de la même façon si un &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/&amp;lt;/source&amp;gt; a été précisé ou non. Par exemple, un transfert via Rsync du répertoire &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;DOSSIER-SOURCE&amp;lt;/source&amp;gt; vers &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;DOSSIER-DESTINIATION&amp;lt;/source&amp;gt; créera ce dernier avec le contenu du premier alors qu'un &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;DOSSIER-SOURCE/&amp;lt;/source&amp;gt; copiera son contenu dans la destination (ce sera l'équivalent d'un &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;cp DOSSIER-SOURCE/* DOSSIER-DESTINATION&amp;lt;/source&amp;gt; en somme).}}&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
==Paramètres==&lt;br /&gt;
===Maintient des permissions sources===&lt;br /&gt;
 rsync -a SOURCE DESTINATION&lt;br /&gt;
&lt;br /&gt;
===Maintient des permissions de destination===&lt;br /&gt;
 rsync -a -A --no-perms --no-owner --no-group SOURCE DESTINATION&lt;br /&gt;
&lt;br /&gt;
===Transfert via SSH===&lt;br /&gt;
 rsync -a SOURCE utilisateur@IP:DESTINATION&lt;br /&gt;
&lt;br /&gt;
====Sécurisation côté destination====&lt;br /&gt;
'''Sur l'hôte de destination''', il est possible de configurer la cible pour cet utilisateur. Nous utilisons la commande &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;rrsync&amp;lt;/syntaxhighlight&amp;gt; (pour ''restricted rsync'') afin de spécifier celui-ci dans le fichier &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;~/.ssh/authorized_keys&amp;lt;/syntaxhighlight&amp;gt;.&lt;br /&gt;
 command=&amp;quot;rrsync /toto/tata/&amp;quot;,no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-ed25519 clé_publique&lt;br /&gt;
&lt;br /&gt;
Ici, cette utilisateur aura seulement le droit d’exécuter un &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;rsync&amp;lt;/syntaxhighlight&amp;gt; pour synchroniser le dossier &amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot; inline&amp;gt;/toto/tata/&amp;lt;/syntaxhighlight&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
'''Sur l'hôte source''', le chemin précisé devient alors la nouvelle racine de l'échange.&lt;br /&gt;
Dans l'exemple si dessous, le client utilisera le chemin de destination de la commande suivante.&lt;br /&gt;
 rsync [OPTIONS] &amp;lt;SOURCE&amp;gt; &amp;lt;UTILISATEUR&amp;gt;@&amp;lt;ADRESSE&amp;gt;:/&lt;br /&gt;
&lt;br /&gt;
===Transfert via relay SSH===&lt;br /&gt;
L'usage d'un [[Openssh#Relai_SSH|relay SSH]] est utile si la machine est inaccessible directement (''NAT'', pare-feux, clé ''SSH''...).&lt;br /&gt;
 rsync -a -e &amp;quot;ssh -J utilisateur@IPRELAI:PORT&amp;quot; SOURCE utilisateur@IP/:DESTINATION&lt;br /&gt;
&lt;br /&gt;
===Compression===&lt;br /&gt;
 rsync -z SOURCE DESTINATION&lt;br /&gt;
&lt;br /&gt;
===Verbosité===&lt;br /&gt;
 rsync -v --progress SOURCE DESTINATION&lt;br /&gt;
&lt;br /&gt;
===Statistiques===&lt;br /&gt;
 rsync --stats SOURCE DESTINATION&lt;br /&gt;
&lt;br /&gt;
==Usage fréquent==&lt;br /&gt;
Voici la commande que j'utilise souvent pour transférer des fichiers dans mon réseau local via ''rsync/ssh''.&lt;br /&gt;
 rsync -av --progress SOURCE utilisateur@IP/:DESTINATION&lt;br /&gt;
&lt;br /&gt;
=Rsyncd=&lt;br /&gt;
En dehors de son usage courant via ''SSH'', ''Rsync'' peut être utilisé avec le protocole éponyme en mode serveur et client. Ceci est utilisé notamment lors de la synchronisation d'un dépôt ''Debian'' via [[ftpsync]]. Du fait de la transmission de donnée en clair, il n'est pas recommandé de l'utiliser pour autre chose que des données publiques qui verront, en amont, leur intégrité vérifié par un outil comme ''GPG''.&lt;br /&gt;
&lt;br /&gt;
==Partie serveur==&lt;br /&gt;
===Mise en œuvre===&lt;br /&gt;
Activer le démon ''Rsync''&lt;br /&gt;
 sed -i 's/RSYNC_ENABLE=false/RSYNC_ENABLE=true/' /etc/default/rsync&lt;br /&gt;
&lt;br /&gt;
Configurer le démon. Dans l'exemple, j'attribue l'utilisateur ''ftpsync'' ainsi que des partages adaptés pour coller à la documentation idoine. Modifiez selon vos besoins.&lt;br /&gt;
 vim /etc/rsyncd.conf&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uid = ftpsync&lt;br /&gt;
gid = ftpsync&lt;br /&gt;
use chroot = yes&lt;br /&gt;
syslog facility = local5&lt;br /&gt;
&lt;br /&gt;
[debian]&lt;br /&gt;
	path = /var/www/dépôts/debian&lt;br /&gt;
	comment = Dépôt debian&lt;br /&gt;
	read only = true&lt;br /&gt;
&lt;br /&gt;
[debian-security]&lt;br /&gt;
	path = /var/www/dépôts/debian-security&lt;br /&gt;
	comment = Dépôt debian-security&lt;br /&gt;
	read only = true&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''Note : les [[#Syntaxe|modules]] du mode rsync sont définis entre crochet et correspondent aux partages accessibles par les clients.''&lt;br /&gt;
&lt;br /&gt;
Démarrer le service&lt;br /&gt;
 systemctl start rsync.service&lt;br /&gt;
&lt;br /&gt;
===Restriction d'accès===&lt;br /&gt;
Il est possible de limiter l'accès par un couple ''identifiant/mot de passe''. Gardez toutefois à l'esprit que les informations circules en clair (bien que le mot de passe soit haché). Réservez ces méthodes dans un réseau de confiance ou au travers d'un ''VPN'' (comme [[Strongswan|IPSec]] ou [[Wireguard]]).&lt;br /&gt;
&lt;br /&gt;
 vim /etc/rsyncd.secrets&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
toto:quenelleépaulée&lt;br /&gt;
titi:123456789&lt;br /&gt;
tata:c'estlabase&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Le fichier de configuration devra alors se voir agrémenté de quelques paramètres supplémentaires. Dans la section globale, la directive &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;strict modes = false&amp;lt;/source&amp;gt; permet de pouvoir lire le fichier de mots passe (sinon une [https://stackoverflow.com/questions/26007928/rsyncd-secrets-file-linux-permission-should-not-be-read-by-group-and-others sécurité] à la con est bogué l'empêche...) ; les paramètres &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;auth users&amp;lt;/source&amp;gt; et &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;secrets file&amp;lt;/source&amp;gt; des modules permettent respectivement d'indiquer les utilisateurs authorisés à se connecter au module ainsi que l'emplacement du fichier des utilisateurs.&lt;br /&gt;
&lt;br /&gt;
Voici le résultat :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
uid = ftpsync&lt;br /&gt;
gid = ftpsync&lt;br /&gt;
use chroot = yes&lt;br /&gt;
syslog facility = local5&lt;br /&gt;
strict modes = false&lt;br /&gt;
&lt;br /&gt;
[debian]&lt;br /&gt;
	path = /var/www/dépôts/debian&lt;br /&gt;
	comment = Synchro du répertoire share&lt;br /&gt;
	read only = true&lt;br /&gt;
	auth users = toto,titi,tata&lt;br /&gt;
	secrets file = /etc/rsyncd.secrets&lt;br /&gt;
&lt;br /&gt;
[debian-security]&lt;br /&gt;
	path = /var/www/dépôts/debian-security&lt;br /&gt;
	comment = Synchro du répertoire share&lt;br /&gt;
	read only = true&lt;br /&gt;
	auth users = toto,titi,tata&lt;br /&gt;
	secrets file = /etc/rsyncd.secrets&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Redémarrer le service&lt;br /&gt;
 systemctl restart rsync.service&lt;br /&gt;
&lt;br /&gt;
==Partie cliente==&lt;br /&gt;
Le client peut récupérer les fichiers du partage via la commande suivante (les paramètres sont bien sûr facultatifs) :&lt;br /&gt;
 rsync -av --progress IP:/debian-security /tmp/&lt;br /&gt;
&lt;br /&gt;
Si vous avez définit une identification, vous pouvez utiliser la syntaxe suivante :&lt;br /&gt;
&lt;br /&gt;
 rsync -av --progress titi@&amp;lt;IP&amp;gt;::debian-security /tmp/&lt;br /&gt;
&lt;br /&gt;
Le mot de passe vous sera demandé via un prompt dédié. Une [https://unix.stackexchange.com/questions/111526/how-can-i-rsync-without-prompt-for-password-without-using-public-key-authentica variable d'environnement] est également définiçable afin de le renseigner automatiquement sans aucune forme d'intéraction (pratique pour effectuer des transferts automatisés via [[Cron]]) :&lt;br /&gt;
&lt;br /&gt;
 RSYNC_PASSWORD=123456789 rsync -av --progress titi@&amp;lt;IP&amp;gt;::debian-security /tmp/&lt;br /&gt;
&lt;br /&gt;
==Sources de la section==&lt;br /&gt;
* https://www.man7.org/linux/man-pages/man1/rsync.1.html&lt;br /&gt;
* https://doc.ubuntu-fr.org/tutoriel/serveur_de_synchronisation_avec_rsync&lt;br /&gt;
* https://www1.zonewebmaster.eu/serveur-debian-securite/installer-rsync-serveur-synchronisation&lt;br /&gt;
&lt;br /&gt;
=Source=&lt;br /&gt;
* https://linux.die.net/man/1/rsync&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Apache2&amp;diff=1303</id>
		<title>Apache2</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Apache2&amp;diff=1303"/>
		<updated>2022-02-27T11:40:53Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Ajout création du dossier /srv/httpd&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:service_web]]&lt;br /&gt;
&lt;br /&gt;
=Contrôle d'accès=&lt;br /&gt;
Il est possible de définir un ensemble de règles pour contrôler les accès à un répertoire partagé via ''Apache2''. Ce contrôle se fait soit via la configuration de l'hôte virtuel concerné, soit via un fichier ''.htaccess'', ou bien les deux.&lt;br /&gt;
&lt;br /&gt;
==Interdiction d'accès==&lt;br /&gt;
Pour interdire l'accès à un répertoire, il suffit d'ajouter la section suivante dans l'hôte virtuel concerné :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Directory /var/www/monsite/rep_à_protéger/&amp;gt;&lt;br /&gt;
 Deny from all&lt;br /&gt;
&amp;lt;/Directory&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ceci à un intérêt lorsque des informations présentes dans ledit répertoire ne doivent être accessibles que côté serveur et non client.&lt;br /&gt;
&lt;br /&gt;
Plus de détails peuvent êtres trouvé dans la [http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html#allow documentation d'Apache2].&lt;br /&gt;
&lt;br /&gt;
=Rediriger vers HTTPS=&lt;br /&gt;
Si vous souhaitez que vos clients soient redirigés automatiquement vers la version HTTPS de votre site lorsqu'il tapent juste l'URL de celui-ci (port 80 par défaut dans les navigateurs), il faut simplement mettre cette ligne au début de votre hôte virtuel :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
Redirect permanent / https://votresite.fr/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://www.webrankinfo.com/dossiers/techniques/redirection-http-https&lt;br /&gt;
&lt;br /&gt;
=Activer le HTTP2=&lt;br /&gt;
'''Activer le module'''&lt;br /&gt;
 a2enmod http2&lt;br /&gt;
&lt;br /&gt;
'''Éditer la configuration du site'''&lt;br /&gt;
 vim /etc/apache2/sites-enabled/toto.conf&lt;br /&gt;
et ajouter le paramètre suivant:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
Protocols h2 http/1.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Par exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;VirtualHost *:443&amp;gt;&lt;br /&gt;
  Protocols h2 http/1.1&lt;br /&gt;
  ServerAdmin toi@tes-le-meilleurs.fr&lt;br /&gt;
  ServerName tes-le-meilleurs.fr&lt;br /&gt;
  ...&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Relancer le service Apache'''&lt;br /&gt;
 systemctl restart apache2.service&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://http2.pro/doc/Apache&lt;br /&gt;
&lt;br /&gt;
=Désactiver les signatures=&lt;br /&gt;
&lt;br /&gt;
{{info|Les signatures sont les phrase en bas de page qui indique votre distribution et la version de apache. Ex: &amp;quot;Apache/x.x.x (Debian) Server at domaine.local Port 443&amp;quot;.}}&lt;br /&gt;
&lt;br /&gt;
Éditer le fichier VirtualHost d'apache (pour une configuration spécifique au site)&lt;br /&gt;
&lt;br /&gt;
 vim /etc/apache2/sites-enabled/000-default.conf&lt;br /&gt;
&lt;br /&gt;
ou éditer directement le fichier de configuration global (pour tout les sites)&lt;br /&gt;
&lt;br /&gt;
 vim /etc/apache2/apache2.conf&lt;br /&gt;
&lt;br /&gt;
et ajouter&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
ServerSignature Off&lt;br /&gt;
ServerTokens Prod&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quitter et redémarrer le service ''Apache2'' :&lt;br /&gt;
&lt;br /&gt;
 systemctl restart apache2.service&lt;br /&gt;
&lt;br /&gt;
{{info|&amp;lt;source lang=&amp;quot;apache&amp;quot; inline&amp;gt;ServerSignature Off&amp;lt;/source&amp;gt; désactive la signature visible en bas de page tandis que &amp;lt;source lang=&amp;quot;apache&amp;quot; inline&amp;gt;ServerTokens Prod&amp;lt;/source&amp;gt; désactive les détails sur la version d'apache utilisé dans le code source des pages.}}&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* http://ask.xmodulo.com/turn-off-server-signature-apache-web-server.html&lt;br /&gt;
&lt;br /&gt;
=Désactiver le listage de fichiers=&lt;br /&gt;
Désactiver le listage de fichiers « ''index of'' » dans les répertoires ''WEB''&lt;br /&gt;
&lt;br /&gt;
Désactiver le module ''autoindex''&lt;br /&gt;
&lt;br /&gt;
 a2dismod autoindex&lt;br /&gt;
&lt;br /&gt;
Redémarrer le service apache :&lt;br /&gt;
&lt;br /&gt;
 systemctl restart apache2.service&lt;br /&gt;
&lt;br /&gt;
=Partage WebDAV=&lt;br /&gt;
[https://fr.wikipedia.org/wiki/WebDAV WebDAV] (''Web-based Distributed Authoring and Versioning'') est une extension du protocole ''HTTP'' défini par l{{'}}''IETF'' et normé dans la ''RFC'' [https://tools.ietf.org/html/rfc4918 4918]. Il permet de récupérer, déposer et synchroniser des fichiers (incluant les répertoires) d'un client à un serveur. Son objectif principal est de rendre possible l'écriture de données à travers le ''WEB'' là où seule la lecture était possible via les commandes ''HTTP'' natives (parler de partage de fichier avec la commande ''PUT HTTP'' n'est pas sérieux). On peut le considérer comme le successeur du protocole ''FTP'' tombé en désuétude suite à la multiplication des ''NAT'' sur Internet (qui lui posait problème, surtout dans sa version chiffrée). Enfin, ''WebDAV'' permet à plusieurs utilisateurs d'éditer le contenu d'un répertoire distant simultanément car il sait gérer les droits d'accès aux fichiers en les verrouillant momentanément lors de leur accès en écriture.&lt;br /&gt;
&lt;br /&gt;
==Mise en œuvre==&lt;br /&gt;
&lt;br /&gt;
Sa configuration s'effectue à l'intérieur des balises &amp;lt;source lang=&amp;quot;apache&amp;quot; inline&amp;gt;&amp;lt;Directory&amp;gt;&amp;lt;/source&amp;gt; comme suit :&lt;br /&gt;
&lt;br /&gt;
Activation des modules&lt;br /&gt;
 a2enmod dav dav_fs&lt;br /&gt;
&lt;br /&gt;
Avec les configurations permettant l'authentification ou non suivantes :&lt;br /&gt;
&lt;br /&gt;
Sans authentification&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Directory &amp;quot;Chemin/à/partager&amp;quot;&amp;gt;&lt;br /&gt;
	DAV on&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;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Avec authentification&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Directory &amp;quot;Chemin/à/partager&amp;quot;&amp;gt;&lt;br /&gt;
	Dav on&lt;br /&gt;
	Order Allow,Deny&lt;br /&gt;
	Allow from all&lt;br /&gt;
&lt;br /&gt;
	AuthType Digest&lt;br /&gt;
	AuthName &amp;quot;toto&amp;quot;&lt;br /&gt;
	AuthUserFile &amp;quot;/srv/httpd/utilisateurs.pwd&amp;quot;&lt;br /&gt;
	AuthDigestProvider file&lt;br /&gt;
&lt;br /&gt;
	Require valid-user&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 a2enmod auth_digest&lt;br /&gt;
&lt;br /&gt;
Création de la base utilisateur&lt;br /&gt;
 mkdir -p /srv/httpd&lt;br /&gt;
 htdigest -c /srv/httpd/utilisateurs.pwd realm utilisateur&lt;br /&gt;
 chown -R www-data: /srv/httpd/&lt;br /&gt;
 chmod 500 /srv/httpd/&lt;br /&gt;
 chmod 400 /srv/httpd/utilisateurs.pwd&lt;br /&gt;
&lt;br /&gt;
''Note : &amp;quot;realm&amp;quot; correspond à un nom quelconque qui devra être renseigné dans le paramètre &amp;lt;source lang=&amp;quot;apache&amp;quot; inline&amp;gt;AuthName&amp;lt;/source&amp;gt; (ici &amp;quot;toto&amp;quot;) de l'hôte virtuel Apache permettant à l'utilisateur de savoir quel identifiant rentrer (voir [https://datatracker.ietf.org/doc/html/rfc2617#section-3.2.1 RFC 2617 section 3.2.1])''&lt;br /&gt;
&lt;br /&gt;
Redémarrage du service&lt;br /&gt;
 systemctl restart apache2.service&lt;br /&gt;
&lt;br /&gt;
==Sources de la section==&lt;br /&gt;
* https://httpd.apache.org/docs/2.4/fr/mod/mod_dav.html&lt;br /&gt;
* http://httpd.apache.org/docs/current/howto/auth.html&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=MariaDB_-_Grappe_de_serveurs_avec_Galera&amp;diff=1297</id>
		<title>MariaDB - Grappe de serveurs avec Galera</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=MariaDB_-_Grappe_de_serveurs_avec_Galera&amp;diff=1297"/>
		<updated>2022-02-26T23:33:41Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Correction d'orthographe&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:base_de_données]]&lt;br /&gt;
La mise en œuvre d'une grappe de bases de données ''MariaDB'' peut se mettre en place de différentes manières. Ainsi, il est possible de réaliser une réplication [[MariaDB - Réplication master-master|maître-maître]] (hérité de ''MySQL'') ou bien de passer par la méthode intégrée à l'outil : ''Galera''. Cette méthode propose une meilleur intégration à l'outil tout en étant simple à configurer. Elle répond au même besoin fonctionnel que la première technique.&lt;br /&gt;
&lt;br /&gt;
À titre d'exemple, la synchronisation entre le site https://doc.ycharbi.fr et https://doc.lesmorin.fr se faisait traditionnellement par une réplication maître-maître ''MySQL''. Nous nous sommes aperçus à maintes reprises qu'en l'espace de quelques mois et sans raisons apparentes, la synchronisation entre nos deux serveurs se cassait et nécessitait une intervention manuelle pour régler le problème. Avec ''Galera'', ceci n'est théoriquement pas possible.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
Une grappe ''Galera'' est réalisable à partir de deux machines (ce que nous allons expliquer ici). La configuration doit être cohérente de part et d'autre du dispositif. il est à noter que ''Galera'' est intégré à ''MariaDB'' (depuis la version 10.1). Cela n'a pas toujours été le cas. Il fallait alors installer les paquets &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;mariadb-galera-server&amp;lt;/source&amp;gt; et &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;galera&amp;lt;/source&amp;gt; non présent dans les dépôts ''Debian''.&lt;br /&gt;
&lt;br /&gt;
==Nœud 1 et 2==&lt;br /&gt;
Installation des paquets&lt;br /&gt;
 apt update&lt;br /&gt;
 apt -y install --no-install-recommends mariadb-server mariadb-client&lt;br /&gt;
&lt;br /&gt;
Sécuriser l'installation par défaut&lt;br /&gt;
 mysql_secure_installation&lt;br /&gt;
&lt;br /&gt;
=Configuration=&lt;br /&gt;
==Nœud 1==&lt;br /&gt;
Premièrement, nous allons utiliser des noms en lieu et place des adresses IP pour joindre nos machines afin d'être libre dans d’hypothétiques modifications de ces dernières par la suite.&lt;br /&gt;
 echo &amp;quot;galera1&amp;quot; &amp;gt; /etc/hostname&lt;br /&gt;
 echo -e &amp;quot;10.10.9.1\tgalera1\n10.10.9.2\tgalera2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
La configuration de la grappe ''Galera'' se fait par le fichier suivant :&lt;br /&gt;
 vim /etc/mysql/mariadb.conf.d/50-server.cnf&lt;br /&gt;
&lt;br /&gt;
À la fin du fichier, ajouter une section avec les lignes suivantes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[galera]&lt;br /&gt;
wsrep_on=ON&lt;br /&gt;
wsrep_provider=/usr/lib/galera/libgalera_smm.so&lt;br /&gt;
wsrep_cluster_address=gcomm://galera1,galera2&lt;br /&gt;
binlog_format=row&lt;br /&gt;
default_storage_engine=InnoDB&lt;br /&gt;
innodb_autoinc_lock_mode=2&lt;br /&gt;
bind-address=0.0.0.0&lt;br /&gt;
wsrep_cluster_name=&amp;quot;galera_cluster&amp;quot;&lt;br /&gt;
wsrep_node_address=&amp;quot;galera1&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Nœud 2==&lt;br /&gt;
Ne pas oublier d'appliquer la même correspondance nom/adresse que sur le nœud 1.&lt;br /&gt;
 echo &amp;quot;galera1&amp;quot; &amp;gt; /etc/hostname&lt;br /&gt;
 echo -e &amp;quot;10.10.9.1\tgalera1\n10.10.9.2\tgalera2&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
&lt;br /&gt;
De la même manière, la configuration de la grappe ''Galera'' se fait par le fichier suivant :&lt;br /&gt;
 vim /etc/mysql/mariadb.conf.d/50-server.cnf&lt;br /&gt;
&lt;br /&gt;
À la fin du fichier, ajouter une section avec les lignes suivantes :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
[galera]&lt;br /&gt;
wsrep_on=ON&lt;br /&gt;
wsrep_provider=/usr/lib/galera/libgalera_smm.so&lt;br /&gt;
wsrep_cluster_address=gcomm://galera1,galera2&lt;br /&gt;
binlog_format=row&lt;br /&gt;
default_storage_engine=InnoDB&lt;br /&gt;
innodb_autoinc_lock_mode=2&lt;br /&gt;
bind-address=0.0.0.0&lt;br /&gt;
wsrep_cluster_name=&amp;quot;galera_cluster&amp;quot;&lt;br /&gt;
wsrep_node_address=&amp;quot;galera2&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Démarrage=&lt;br /&gt;
Le démarrage doit être fait sur le nœud 1 et ensuite sur les autres nœuds.&lt;br /&gt;
&lt;br /&gt;
==Nœud 1==&lt;br /&gt;
Il faut démarrer ''MariaDB'' en mode &amp;quot;initialisation&amp;quot; :&lt;br /&gt;
 galera_new_cluster&lt;br /&gt;
&lt;br /&gt;
''Note: Cette commande lance le service &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;mariadb.service&amp;lt;/source&amp;gt;.''&lt;br /&gt;
&lt;br /&gt;
{{info|La commande &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;galera_new_cluster&amp;lt;/source&amp;gt; permet à priori de démarrer le nœud avec le paramètre &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;wsrep_cluster_address=gcomm://&amp;lt;/source&amp;gt;. En d'autre terme, il s'exécute seul afin de s'éviter la recherche d'informations sur un autre nœud.}}&lt;br /&gt;
&lt;br /&gt;
==Nœud 2==&lt;br /&gt;
&lt;br /&gt;
{{attention|Les commandes suivantes sont à réaliser seulement si le nœud 1 est démarré.}}&lt;br /&gt;
&lt;br /&gt;
{{astuce|La commande que l'on va utiliser va bloquer le prompt. Cela peut être lent si nous sommes sur un réseau à faible débit (type ''ADSL''). Pour voir l'avancement du démarrage, il faut lancer une deuxième session ([[Tmux]] peut être utilisé).}}&lt;br /&gt;
&lt;br /&gt;
Nous allons maintenant démarrer le service ''MariaDB'' (la commande risque de prendre du temps !) :&lt;br /&gt;
 systemctl restart mariadb.service&lt;br /&gt;
&lt;br /&gt;
En parallèle, dans une seconde fenêtre, taper la commande suivante pour connaître l'état d'avancement:&lt;br /&gt;
 journalctl -f&lt;br /&gt;
&lt;br /&gt;
Il est ainsi possible d’apercevoir des entrées comportant le mot clé [[rsync]] (l'outil utilisé en arrière plan pour la réplication), ce qui est bon signe !&lt;br /&gt;
&lt;br /&gt;
=Vérification d'état=&lt;br /&gt;
Il est possible d'afficher l'état d'un nœud de la grappe via des commandes ''SQL''. Connaître ces informations peut s'avérer utile en cas de défaillance et permet de mieux appréhender le système. Il s'agit de requêtes ''SQL'' à entrer dans le prompt de ''MariaDB''.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument !! Signification&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;sql&amp;quot; inline&amp;gt;SHOW STATUS LIKE 'wsrep%';&amp;lt;/source&amp;gt; || Toutes les informations. Renvoie un tableau regroupant l’ensemble des informations de la grappe&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;sql&amp;quot; inline&amp;gt;show status like 'wsrep_cluster_size';&amp;lt;/source&amp;gt; || Taille de notre grappe. Renvoie le nombre de machines faisant partie de la grappe&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;sql&amp;quot; inline&amp;gt;show status like 'wsrep_incoming_addresses';&amp;lt;/source&amp;gt; || Adresse des participants. Renvoie l'adresse IP et le port des machines faisant partie de la grappe&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;sql&amp;quot; inline&amp;gt;show status like 'wsrep_local_state_comment';&amp;lt;/source&amp;gt; || État de synchronisation de notre nœud. Renvoie ''Synced'' si tout est bon ou ''Initialized'' si le pair est injoignable&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;sql&amp;quot; inline&amp;gt;show status like 'wsrep_cluster_status';&amp;lt;/source&amp;gt; || Rang du nœud. Renvoie ''Primary'' si la grappe est fonctionnelle, ''non-Primary'' si le nombre de nœud hors service est supérieur à la moitié du nombre total de machines de la grappe (lecture seul) et ''Disconnected'' qui le nœud n'appartient à aucune grappe (état par défaut)&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;source lang=&amp;quot;sql&amp;quot; inline&amp;gt;show status like 'wsrep_cluster_state_uuid';&amp;lt;/source&amp;gt; || UUID de l'état de la grappe&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Cas de coupure=&lt;br /&gt;
La grappe ''MariaDB'' fonctionne comme toute grappe applicative : &lt;br /&gt;
* Si le nombre de nœud hors service est inférieur a la moitié du nombre total de machines de la grappe alors les nœud restant fonctionne normalement&lt;br /&gt;
* Si le nombre de nœud hors service est supérieur a la moitié du nombre total de machines de la grappe alors les nœuds restant passe en lecteur seul&lt;br /&gt;
&lt;br /&gt;
C'est pour cela qu'il est plus agréable d'avoir au minimum 3 nœud dans la grappe.&lt;br /&gt;
&lt;br /&gt;
==Un des nœuds est arrêté proprement==&lt;br /&gt;
Dans ce cas, lors de l'arrêt du nœud, celui-ci notifie les autres participants de son arrêt. Ceux-ci fonctionnent alors normalement sans se soucier de la perte d'un des membres.&lt;br /&gt;
&lt;br /&gt;
Lors de l'allumage du service ''MariaDB'' sur le nœud précédemment éteint, une synchronisation est exécuté entre la machine la plus à jour et le nœud fraîchement démarré.&lt;br /&gt;
&lt;br /&gt;
{{attention|Cette commande peux prendre du temps suivant les modifications effectuées. Vous pouvez contrôler l'état d'avancement avec un &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;journalctl -f&amp;lt;/source&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
==Un des nœuds est arrêté violemment==&lt;br /&gt;
&lt;br /&gt;
{{info|Dans le cas d'un plantage du programme, ''Systemd'' s'occupe de le relancer automatiquement.}}&lt;br /&gt;
&lt;br /&gt;
Tant que le nombre total de machines en service de la grappe est supérieur à la moitié des nœuds déclarés dans celle-ci, il ne se passe rien de particulier. &lt;br /&gt;
&lt;br /&gt;
Si l'arrêt brutal vient à concerner simultanément un nombre de nœuds supérieur à la moitié décrite, les nœuds restant passent en lecture seule le temps de la remise en service des machines tombées.&lt;br /&gt;
&lt;br /&gt;
{{attention|Si cette dernière ne revient jamais, il faudra casser la grappe et la refaire. Il est également possible de faire fonctionner ''MariaDB'' en dehors de la grappe en passant la valeur ''wsrep_on{{=}}ON'' à ''OFF'' du fichier de configuration.}}&lt;br /&gt;
&lt;br /&gt;
==Tous les nœuds sont arrêtés proprement==&lt;br /&gt;
&lt;br /&gt;
{{attention|Ce cas est à éviter le plus possible !}}&lt;br /&gt;
&lt;br /&gt;
Pour remettre la grappe en marche, il faut aller sur chaque nœud et afficher l'état de la grappe de cette manière :&lt;br /&gt;
 cat /var/lib/mysql/grastate.dat&lt;br /&gt;
&lt;br /&gt;
{{astuce|La valeur &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;seqno&amp;lt;/source&amp;gt; donne un numéro de séquence correspondant au niveau de synchronisation entre les nœuds. La valeur la plus élevé correspond au nœud le plus à jour.}}&lt;br /&gt;
&lt;br /&gt;
Le nœud ayant la valeur &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;safe_to_bootstrap: 1&amp;lt;/source&amp;gt; doit initialiser la grappe :&lt;br /&gt;
 galera_new_cluster&lt;br /&gt;
&lt;br /&gt;
{{astuce|Si aucun nœud ne possède cette valeur, il faut la définir manuellement à 1 ou via la commande &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;sed -ie '/safe_to/c\safe_to_bootstarp: 1' /var/lib/mysql/grastate.dat&amp;lt;/source&amp;gt; sur le nœud le plus à jour afin de servir d'étalon aux autres (seule un nœud dont la valeur est a &amp;quot;1&amp;quot; peut exécuter la commande ci-dessus).}}&lt;br /&gt;
&lt;br /&gt;
Si tout se passe bien, le service &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;mariadb.service&amp;lt;/source&amp;gt; est actif sur ce nœud. Dans ce cas, il est possible de le démarrer sur les autres nœuds.&lt;br /&gt;
&lt;br /&gt;
{{attention|Cette commande peux prendre du temps suivant les modifications effectuées. Vous pouvez contrôler l'état d'avancement avec un &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;journalctl -f&amp;lt;/source&amp;gt;.}}&lt;br /&gt;
 systemctl restart mariadb.service&lt;br /&gt;
&lt;br /&gt;
==Tous les nœud sont arrêtés violemment==&lt;br /&gt;
&lt;br /&gt;
''MariaDB'' communique les informations de réplication en multicast sur le port 4567. Lorsque plusieurs nœuds sont démarrés, ils communiques par ce vecteur pour s'accorder et remonter la grappe automatiquement.&lt;br /&gt;
&lt;br /&gt;
Si toutefois la grappe n'est pas remonté automatiquement par ''MariaDB'' :&lt;br /&gt;
* Tuer les processus exécutés par &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;mysqld&amp;lt;/source&amp;gt;&lt;br /&gt;
* Suivre la section [[#Tous%20les%20n%C5%93uds%20sont%20arr%C3%AAt%C3%A9s%20proprement|Tous les nœuds sont arrêtés proprement]]. La différence est probablement le fait qu'aucun nœud n'aura la valeur &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;safe_to_bootstrap: 1&amp;lt;/source&amp;gt;. Dans ce cas, appliquer l'astuce y étant décrite.&lt;br /&gt;
&lt;br /&gt;
=Sources=&lt;br /&gt;
* https://computingforgeeks.com/how-to-setup-mariadb-galera-cluster-on-debian/&lt;br /&gt;
* https://mariadb.com/kb/en/getting-started-with-mariadb-galera-cluster/&lt;br /&gt;
* https://mariadb.com/kb/en/galera-cluster-status-variables/#wsrep_cluster_status&lt;br /&gt;
* https://www.symmcom.com/docs/how-tos/databases/how-to-recover-mariadb-galera-cluster-after-partial-or-full-crash&lt;br /&gt;
* https://easyteam.fr/galera-cluster-mariadb-principes-installation/&lt;br /&gt;
* https://www.debyum.com/restart-galera-cluster-after-reboot-bootstrap-node/&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Cat%C3%A9gorie:Service_ssh&amp;diff=1293</id>
		<title>Catégorie:Service ssh</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Cat%C3%A9gorie:Service_ssh&amp;diff=1293"/>
		<updated>2022-02-26T12:41:04Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Page créée avec « Category:services »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:services]]&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Yubikey&amp;diff=1263</id>
		<title>Yubikey</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Yubikey&amp;diff=1263"/>
		<updated>2021-06-04T06:28:00Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Authentification]]&lt;br /&gt;
&lt;br /&gt;
=Utilisation avec PAM=&lt;br /&gt;
La Yubikey est utilisée pour faire de la double authentification.&lt;br /&gt;
&lt;br /&gt;
Exemple : Quand nous sommes sur le GDM, nous sélectionnons notre utilisateur et notre mot de passe (comme d'habitude) et suite à cela votre Yubikey va clignoter. Il faut donc la toucher pour dire que nous sommes physiquement devant le PC. &lt;br /&gt;
&lt;br /&gt;
Si la clé n'est pas présente ou une autre clé est inséré, il est impossible de ce connecter `Mot de passe échoué`.&lt;br /&gt;
&lt;br /&gt;
Voici comment configurer la Yubikey et PAM pour arriver à ce résultat :&lt;br /&gt;
&lt;br /&gt;
Installation des paquets nécessaires &lt;br /&gt;
 apt install libpam-u2f pamu2fcfg&lt;br /&gt;
&lt;br /&gt;
{{attention|Si vous n'utilisez pas &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; sur votre machine. Les 2 prochaines manipulations sont a faire sur l'utilisateur &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; et sur votre utilisateur standard.}}&lt;br /&gt;
&lt;br /&gt;
Configuration U2F pour l'utilisateur.&lt;br /&gt;
 mkdir -p ${HOME}/.config/Yubico&lt;br /&gt;
&lt;br /&gt;
Insérer votre Yubikey puis taper cette commande&lt;br /&gt;
{{info|Au lancement de cette commande, votre Yubikey va clignoter. Appuyer dessus}} &lt;br /&gt;
 pamu2fcfg -u ${USER} &amp;gt; ${HOME}/.config/Yubico/u2f_keys&lt;br /&gt;
&lt;br /&gt;
Configuration de PAM avec l'utilisateur &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt;.&lt;br /&gt;
 echo &amp;quot;auth required pam_u2f.so&amp;quot; | tee -a /etc/pam.d/common-auth&lt;br /&gt;
&lt;br /&gt;
Déconnecter votre utilisateur pour prendre en charge ces modifications.&lt;br /&gt;
&lt;br /&gt;
Désormais, pour chaque authentification locale (connexion à la console, connexion à l'interface graphique, sudo, verrouillage de l'écran du bureau), vous devrez utiliser votre Yubikey. Notez que l'authentification à distance (connexions SSH) ne sera pas impactée. &lt;br /&gt;
&lt;br /&gt;
=Source=&lt;br /&gt;
https://gist.github.com/jmlemetayer/20e936a2ef4c7e10804a69fdacab9ca4&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Yubikey&amp;diff=1262</id>
		<title>Yubikey</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Yubikey&amp;diff=1262"/>
		<updated>2021-06-04T06:25:32Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Authentification]]&lt;br /&gt;
&lt;br /&gt;
=Utilisation avec PAM=&lt;br /&gt;
La Yubikey est utilisée pour faire de la double authentification.&lt;br /&gt;
&lt;br /&gt;
Exemple : Quand nous sommes sur le GDM, nous sélectionnons notre utilisateur et notre mot de passe (comme d'habitude) et suite à cela votre Yubikey va clignoter. Il faut donc la toucher pour dire que nous sommes physiquement devant le PC. &lt;br /&gt;
&lt;br /&gt;
Si la clé n'est pas présente ou une autre clé est inséré, il est impossible de ce connecter `Mot de passe échoué`.&lt;br /&gt;
&lt;br /&gt;
Voici comment configurer la Yubikey et PAM pour arriver à ce résultat :&lt;br /&gt;
&lt;br /&gt;
Installation des paquets nécessaires &lt;br /&gt;
 apt install libpam-u2f pamu2fcfg&lt;br /&gt;
&lt;br /&gt;
{{attention|Si vous n'utilisez pas &amp;lt;code&amp;gt;sudo&amp;lt;/code&amp;gt; sur votre machine. Les 2 prochaines manipulations sont a faire sur l'utilisateur &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; et sur votre utilisateur standard.}}&lt;br /&gt;
&lt;br /&gt;
Configuration U2F pour l'utilisateur.&lt;br /&gt;
 mkdir -p ${HOME}/.config/Yubico&lt;br /&gt;
&lt;br /&gt;
Insérer votre Yubikey puis taper cette commande&lt;br /&gt;
{{info|Au lancement de cette commande, votre Yubikey va clignoter. Appuyer dessus}} &lt;br /&gt;
 pamu2fcfg -u ${USER} &amp;gt; ${HOME}/.config/Yubico/u2f_keys # Then press the Yubikey button to continue.&lt;br /&gt;
&lt;br /&gt;
Configuration de PAM avec l'utilisateur &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt;.&lt;br /&gt;
 echo &amp;quot;auth required pam_u2f.so&amp;quot; | tee -a /etc/pam.d/common-auth&lt;br /&gt;
&lt;br /&gt;
Déconnecter votre utilisateur pour prendre en charge ces modifications.&lt;br /&gt;
&lt;br /&gt;
Désormais, pour chaque authentification locale (connexion à la console, connexion à l'interface graphique, sudo, verrouillage de l'écran du bureau), vous devrez utiliser votre Yubikey. Notez que l'authentification à distance (connexions SSH) ne sera pas impactée. &lt;br /&gt;
&lt;br /&gt;
=Source=&lt;br /&gt;
https://gist.github.com/jmlemetayer/20e936a2ef4c7e10804a69fdacab9ca4&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Yubikey&amp;diff=1261</id>
		<title>Yubikey</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Yubikey&amp;diff=1261"/>
		<updated>2021-06-04T06:23:21Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Authentification]]&lt;br /&gt;
&lt;br /&gt;
=Utilisation avec PAM=&lt;br /&gt;
La Yubikey est utilisée pour faire de la double authentification.&lt;br /&gt;
&lt;br /&gt;
Exemple : Quand nous sommes sur le GDM, nous sélectionnons notre utilisateur et notre mot de passe (comme d'habitude) et suite à cela votre Yubikey va clignoter. Il faut donc la toucher pour dire que nous sommes physiquement devant le PC. &lt;br /&gt;
&lt;br /&gt;
Si la clé n'est pas présente ou une autre clé est inséré, il est impossible de ce connecter `Mot de passe échoué`.&lt;br /&gt;
&lt;br /&gt;
Voici comment configurer la Yubikey et PAM pour arriver à ce résultat :&lt;br /&gt;
&lt;br /&gt;
Installation des paquets nécessaires &lt;br /&gt;
 apt install libpam-u2f pamu2fcfg&lt;br /&gt;
&lt;br /&gt;
{{attention|Si vous n'utilisez pas `sudo` sur votre machine. Les 2 prochaines manipulations sont a faire sur l'utilisateur `root` et sur votre utilisateur standard.}}&lt;br /&gt;
&lt;br /&gt;
Configuration U2F pour l'utilisateur.&lt;br /&gt;
 mkdir -p ${HOME}/.config/Yubico&lt;br /&gt;
&lt;br /&gt;
Insérer votre Yubikey puis taper cette commande&lt;br /&gt;
{{info|Au lancement de cette commande, votre Yubikey va clignoter. Appuyer dessus}} &lt;br /&gt;
 pamu2fcfg -u ${USER} &amp;gt; ${HOME}/.config/Yubico/u2f_keys # Then press the Yubikey button to continue.&lt;br /&gt;
&lt;br /&gt;
Configuration de PAM avec l'utilisateur `root`.&lt;br /&gt;
 echo &amp;quot;auth required pam_u2f.so&amp;quot; | tee -a /etc/pam.d/common-auth&lt;br /&gt;
&lt;br /&gt;
Déconnecter votre utilisateur pour prendre en charge ces modifications.&lt;br /&gt;
&lt;br /&gt;
Désormais, pour chaque authentification locale (connexion à la console, connexion à l'interface graphique, sudo, verrouillage de l'écran du bureau), vous devrez utiliser votre Yubikey. Notez que l'authentification à distance (connexions SSH) ne sera pas impactée. &lt;br /&gt;
&lt;br /&gt;
=Source=&lt;br /&gt;
https://gist.github.com/jmlemetayer/20e936a2ef4c7e10804a69fdacab9ca4&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Cat%C3%A9gorie:Authentification&amp;diff=1260</id>
		<title>Catégorie:Authentification</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Cat%C3%A9gorie:Authentification&amp;diff=1260"/>
		<updated>2021-06-04T06:18:28Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Page créée avec « Category:Linux »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Linux]]&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Yubikey&amp;diff=1259</id>
		<title>Yubikey</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Yubikey&amp;diff=1259"/>
		<updated>2021-06-04T06:17:31Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Page créée avec « Category:Authentification  =Utilisation d'une Yubikey sous Linux=  ==Utilisation avec PAM== La Yubikey est utilisée pour faire de la double authentification.  Exemple... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Authentification]]&lt;br /&gt;
&lt;br /&gt;
=Utilisation d'une Yubikey sous Linux=&lt;br /&gt;
&lt;br /&gt;
==Utilisation avec PAM==&lt;br /&gt;
La Yubikey est utilisée pour faire de la double authentification.&lt;br /&gt;
&lt;br /&gt;
Exemple : Quand nous sommes sur le GDM, nous sélectionnons notre utilisateur et notre mot de passe (comme d'habitude) et suite à cela votre Yubikey va clignoter. Il faut donc la toucher pour dire que nous sommes physiquement devant le PC. &lt;br /&gt;
&lt;br /&gt;
Si la clé n'est pas présente ou une autre clé est inséré, il est impossible de ce connecter `Mot de passe échoué`.&lt;br /&gt;
&lt;br /&gt;
Voici comment configurer la Yubikey et PAM pour arriver à ce résultat :&lt;br /&gt;
&lt;br /&gt;
Installation des paquets nécessaires &lt;br /&gt;
 apt install libpam-u2f pamu2fcfg&lt;br /&gt;
&lt;br /&gt;
{{attention|Si vous n'utilisez pas `sudo` sur votre machine. Les 2 prochaines manipulations sont a faire sur l'utilisateur `root` et sur votre utilisateur standard.}}&lt;br /&gt;
&lt;br /&gt;
Configuration U2F pour l'utilisateur.&lt;br /&gt;
 mkdir -p ${HOME}/.config/Yubico&lt;br /&gt;
&lt;br /&gt;
Insérer votre Yubikey puis taper cette commande&lt;br /&gt;
{{info|Au lancement de cette commande, votre Yubikey va clignoter. Appuyer dessus}} &lt;br /&gt;
 pamu2fcfg -u ${USER} &amp;gt; ${HOME}/.config/Yubico/u2f_keys # Then press the Yubikey button to continue.&lt;br /&gt;
&lt;br /&gt;
Configuration de PAM avec l'utilisateur `root`.&lt;br /&gt;
 echo &amp;quot;auth required pam_u2f.so&amp;quot; | tee -a /etc/pam.d/common-auth&lt;br /&gt;
&lt;br /&gt;
=Source=&lt;br /&gt;
https://gist.github.com/jmlemetayer/20e936a2ef4c7e10804a69fdacab9ca4&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Installation_debian_luks_via_debootstrap&amp;diff=1112</id>
		<title>Installation debian luks via debootstrap</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Installation_debian_luks_via_debootstrap&amp;diff=1112"/>
		<updated>2019-12-12T11:04:40Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : /* Configuration du système */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:debian]]&lt;br /&gt;
Voici comment installer une Debian Stretch sur un support interne ou externe chiffré avec cryptsetup.&lt;br /&gt;
{{attention|faire une doc sur la création d'un ESP.}}&lt;br /&gt;
=Préparation du disque=&lt;br /&gt;
Installation de l'outil de chiffrement de disque&lt;br /&gt;
 apt install cryptsetup&lt;br /&gt;
Chiffrement de la partition&lt;br /&gt;
 cryptsetup luksFormat -c aes-xts-plain64 -s 512 -h sha512 /dev/sdb2&lt;br /&gt;
Ouverture de la partition&lt;br /&gt;
 cryptsetup luksOpen /dev/sdb2 debsecu&lt;br /&gt;
Formatage de la sous partition (testé également avec btrfs)&lt;br /&gt;
 mkfs.ext4 /dev/mapper/debsecu&lt;br /&gt;
=Installation du système Debian=&lt;br /&gt;
==Installation du système==&lt;br /&gt;
Montage de la partition formaté dans l'étape précédente&lt;br /&gt;
 mount /dev/mapper/debsecu /mnt&lt;br /&gt;
Installation du système de base&lt;br /&gt;
 debootstrap --arch amd64 stretch /mnt http://ftp.fr.debian.org/debian&lt;br /&gt;
==Configuration du système==&lt;br /&gt;
Entrer dans le système&lt;br /&gt;
 chroot /mnt&lt;br /&gt;
'''[chroot]''' Monter les ressources nécessaires pour les installations&lt;br /&gt;
 mount none -t proc /proc&lt;br /&gt;
 mount none -t sysfs /sys&lt;br /&gt;
 mount none -t devpts /dev/pts&lt;br /&gt;
'''[chroot]''' Définition du répertoire utilisateur root&lt;br /&gt;
 export HOME=/root&lt;br /&gt;
'''[chroot]''' Changement temporaire du prompt (un accident est vite arrivé en confondant le prompt du chroot avec celui du root de l'hôte, le changer évite les sueurs froides)&lt;br /&gt;
 export PS1=&amp;quot;\e[01;31m(live):\W \$ \e[00m&amp;quot;&lt;br /&gt;
'''[chroot]''' Mise à jour des paquets&lt;br /&gt;
 apt update&lt;br /&gt;
&lt;br /&gt;
 apt install dialog dbus&lt;br /&gt;
 dbus-uuidgen &amp;gt; /var/lib/dbus/machine-id&lt;br /&gt;
'''[chroot]''' Installation du noyau&lt;br /&gt;
 apt install linux-image-amd64&lt;br /&gt;
'''[chroot]''' Définition du mot de passe root&lt;br /&gt;
 passwd&lt;br /&gt;
'''[chroot]''' Ajout d'un utilisateur&lt;br /&gt;
 adduser toto&lt;br /&gt;
'''[chroot]''' Changement du fuseau horaire&lt;br /&gt;
 dpkg-reconfigure tzdata&lt;br /&gt;
'''[chroot]''' Installer le système en Français&lt;br /&gt;
 apt install locales&lt;br /&gt;
 dpkg-reconfigure locales&lt;br /&gt;
{{info|Cocher '''fr_FR.UTF-8 UTF-8''' et séléctionner '''fr_FR.UTF-8''' sur l'écran suivant.}}&lt;br /&gt;
 apt install console-data&lt;br /&gt;
{{info|Dans '''Choisir un codage clavier dans la liste complète''', sélectionner '''pc / azerty / French / Same as X11 (latin9) / Standard'''.}}&lt;br /&gt;
 apt install keyboard-configuration console-setup&lt;br /&gt;
{{info|Pour '''keyboard-configuration''', séléctionner '''Français - Français (variante obsolète)'''.}}&lt;br /&gt;
Le contenu de &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/default/keyboard&amp;lt;/source&amp;gt; doit être le suivant :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# KEYBOARD CONFIGURATION FILE&lt;br /&gt;
&lt;br /&gt;
# Consult the keyboard(5) manual page.&lt;br /&gt;
&lt;br /&gt;
XKBMODEL=&amp;quot;pc105&amp;quot;&lt;br /&gt;
XKBLAYOUT=&amp;quot;fr&amp;quot;&lt;br /&gt;
XKBVARIANT=&amp;quot;latin9&amp;quot;&lt;br /&gt;
XKBOPTIONS=&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
BACKSPACE=&amp;quot;guess&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Le contenu de &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/default/console-setup&amp;lt;/source&amp;gt; doit être le suivant :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# CONFIGURATION FILE FOR SETUPCON&lt;br /&gt;
&lt;br /&gt;
# Consult the console-setup(5) manual page.&lt;br /&gt;
&lt;br /&gt;
ACTIVE_CONSOLES=&amp;quot;/dev/tty[1-6]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
CHARMAP=&amp;quot;UTF-8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
CODESET=&amp;quot;Lat15&amp;quot;&lt;br /&gt;
FONTFACE=&amp;quot;Fixed&amp;quot;&lt;br /&gt;
FONTSIZE=&amp;quot;8x16&amp;quot;&lt;br /&gt;
&lt;br /&gt;
VIDEOMODE=&lt;br /&gt;
&lt;br /&gt;
# The following is an example how to use a braille font&lt;br /&gt;
# FONT='lat9w-08.psf.gz brl-8x8.psf'&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
'''[chroot]''' Attribuer un mot de passe à root&lt;br /&gt;
 passwd root&lt;br /&gt;
&lt;br /&gt;
==Configuration de l'initrd==&lt;br /&gt;
'''[chroot]''' Installation de l'outil de chiffrement de disque&lt;br /&gt;
 apt install cryptsetup&lt;br /&gt;
'''[chroot]''' Supprimer le fichier de montage des partitions chiffré (il gène la compilation de l'initrd)&lt;br /&gt;
 rm /etc/crypttab&lt;br /&gt;
'''[chroot]''' Créer le fichier suivant contenant les information de votre partition chiffré :&lt;br /&gt;
 echo 'CRYPTOPTS=target=debsecu,source=/dev/disk/by-uuid/&amp;lt;UUID de la partition chiffrée&amp;gt;' &amp;gt; /etc/initramfs-tools/conf.d/cryptroot&lt;br /&gt;
{{info|On comprend avec cette ligne que la référence du disque '''/''' est codé en dur dans l'initrd, ce n'est pas le cas de Archlinux qui récupère cette information du chargeur d'amorçage. On comprend donc que Debian est moins portable que ce dernier car l'initrd doit être recompilé à chaque changement de disque chiffré.}}&lt;br /&gt;
'''[chroot]''' Activation du module&lt;br /&gt;
 echo -e 'aes-x86_64\nsha512-ssse3\nxts\ndm-mod\ndm-crypt' &amp;gt;&amp;gt; etc/initramfs-tools/modules&lt;br /&gt;
'''[chroot]''' Forcer l'utilisation de cryptsetup au démarrage&lt;br /&gt;
 echo 'CRYPTSETUP=y' &amp;gt;&amp;gt; /etc/cryptsetup-initramfs/conf-hook&lt;br /&gt;
'''[chroot]''' Mise à jour de l'inird&lt;br /&gt;
 update-initramfs -u&lt;br /&gt;
'''[chroot]''' Nettoyage du système&lt;br /&gt;
 apt-get clean&lt;br /&gt;
 rm -rf /tmp/*&lt;br /&gt;
 rm /var/lib/dbus/machine-id&lt;br /&gt;
'''[chroot]''' Démontage des systèmes de fichier spéciaux montés&lt;br /&gt;
 umount /proc /sys /dev/pts&lt;br /&gt;
'''[chroot]''' Suppression de l'historique bash&lt;br /&gt;
 history -c&lt;br /&gt;
Quitter le système&lt;br /&gt;
 &amp;lt;ctrl+d&amp;gt;&lt;br /&gt;
==Copie des fichiers de démarrage dans l'ESP==&lt;br /&gt;
Copie de l'initrd et du noyau dans l'ESP&lt;br /&gt;
 mount /dev/sdb1 /media&lt;br /&gt;
 cp /mnt/boot/initrd.img-4.9.0-2-amd64 /media/initrd-debsecu&lt;br /&gt;
 cp /mnt/boot/vmlinuz-4.9.0-2-amd64 /media/vmlinuz-debsecu&lt;br /&gt;
==Installation du chargeur d'amorçage==&lt;br /&gt;
Pour le moment cette section est vide. Une rustine pour ne pas être bloqué en attendant sa rédaction est de se référer au même passage sur l'[[Installation_archlinux_-_UEFI_64bits#Installation_du_chargeur_d.27amor.C3.A7age|installation d'Archlinux sur UEFI 64bits]].&lt;br /&gt;
===Systemd-boot===&lt;br /&gt;
''Note pour documentation ultérieure : options &amp;lt;UUID de la partition ext4&amp;gt;''&lt;br /&gt;
&lt;br /&gt;
===Syslinux===&lt;br /&gt;
===EFI STUB===&lt;br /&gt;
==Finalisation==&lt;br /&gt;
Démontage de la partition&lt;br /&gt;
 umount /mnt&lt;br /&gt;
Fermeture de la partition chiffrée&lt;br /&gt;
 cryptsetup luksClose debsecu&lt;br /&gt;
=Problèmes=&lt;br /&gt;
Il y a plein de raisons de rencontrer des problèmes lors de la configuration de l'initrd. Lorsque une erreur survient au moment de la phase de démarrage, le système s'arrête et rend la main par l'intermédiaire d'un prompt directement dans l'initramfs. À ce stade, on peut récupérer des informations sur les disques ainsi que sur les arguments passés au noyau afin de résoudre les difficultés rencontrées.&lt;br /&gt;
&lt;br /&gt;
Afficher les arguments passés au noyau&lt;br /&gt;
 cat /proc/cmdline&lt;br /&gt;
Afficher les modules compilés dans l'initrd&lt;br /&gt;
 cat /proc/modules&lt;br /&gt;
La commande &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;lsblk&amp;lt;/source&amp;gt; est disponible pour identifier l'UUID des disques et partitions.&lt;br /&gt;
&lt;br /&gt;
Les liens symboliques sous forme d'UUID sont présents dans &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/dev/disk/by-uuid&amp;lt;/source&amp;gt; et pointes vers les périphériques de type bloque correspondants (/dev/sda; /dev/sdb2...).&lt;br /&gt;
{{info|Il est important de rappeler que l'UUID de la partition luks est codé en dur dans l'initrd (contrairement à Archlinux), aussi, l'UUID renseigné dans le fichier &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/initramfs-tools/conf.d/cryptroot&amp;lt;/source&amp;gt; doit être exacte et correspondre à l'UUID de la partition chiffrée. Bien observer les messages d'erreurs, un indice important y est souvant mentionné.}}&lt;br /&gt;
Il est également possible de renseigné le périphérique de type bloque au lieu de l'UUID de la partition luks dans le fichier &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/initramfs-tools/conf.d/cryptroot&amp;lt;/source&amp;gt;, cependant il est important de garder en tête que la nomenclature sda; sdb... change au petit bonheur la chance en fonction de l'orientation de la lune (un coup le disque n°2 s'appel sdb, un autre il est sda...). Donc ça peut avoir pour conséquence que le système, ne trouve pas la partition ext4 contenant le système puisque il ne peut pas trouver le disque chiffré (et donc vous demander la clé de déchiffrement). Un &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;cryptsetup luksOpen /dev/sdb2 debsecu&amp;lt;/source&amp;gt; à la main dans le prompt initramfs suivi d'un &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;exit&amp;lt;/source&amp;gt; suffira à démarrer le système.&lt;br /&gt;
&lt;br /&gt;
L'UUID renseigné dans le chargeur d'amorçage est très important car il permet au noyau de savoir sur quelle partition se trouve le '''/'''. Si l'initrd demande la clé de déchiffrement, que vous avez entré la bonne et que malgré tout le système vous renvoi sur le prompt initramfs c'est que vous vous êtes trompé sur cet UUID.&lt;br /&gt;
=Sources=&lt;br /&gt;
* http://linuxfr.org/users/leryan/journaux/howto-luks-lvm-et-debian-ont-fucke-my-head&lt;br /&gt;
* https://unix.stackexchange.com/questions/178666/sbin-cryptsetup-not-found-on-boot&lt;br /&gt;
* https://www.divingeek.com/chiffrement-ameliore-dun-systeme-linux-avec-luks/&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Script_bash&amp;diff=987</id>
		<title>Script bash</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Script_bash&amp;diff=987"/>
		<updated>2019-02-23T17:20:03Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : /* Exemple */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:programmation]]&lt;br /&gt;
Le [[shell bash]] peut être utilisé pour exécuter des scripts qui peuvent servir à automatiser des tâches manuellement ou de [[cron|façon programmé]].&lt;br /&gt;
&lt;br /&gt;
{{info|Les concepts de programmation ne seront pas abordés dans cette documentation. Cette dernière a seulement pour but de rassembler de la syntaxe pour une réutilisation rapide de code bash.}}&lt;br /&gt;
&lt;br /&gt;
=Commandes basiques=&lt;br /&gt;
Afficher un message&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Mon message&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Afficher un message sans retour chariot&amp;quot;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo -n &amp;quot;Quel est votre âge ? : &amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Affectation de variable&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
maVarable=maValeur&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Appel de variable&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
echo $maVariable&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Lire une entrée clavier et remplir une variable avec&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
read maVariable&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Mettre le résultat d'une commande bash dans une variable&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chercheFichiers=`find / -type f -iname &amp;quot;*.txt&amp;quot; | wc -l`&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Mettre le résultat d'une commande bash dans une variable en la rendant silencieuse&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
chercheFichiers=`find / -type f -iname &amp;quot;*.txt&amp;quot; | wc -l` 2&amp;gt;/dev/null&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Codes de retour=&lt;br /&gt;
Toutes les commandes Linux retournent un code d'erreur compris entre '''0 et 255'''.&lt;br /&gt;
&lt;br /&gt;
Le code '''0''' retourne le drapeau '''vrai'''.&lt;br /&gt;
&lt;br /&gt;
Les codes '''supérieurs''' à '''0''' sont des drapeaux '''faux'''. L'intérêt d'avoir plus de deux états est de pouvoir retourner un message d'erreur personnalisé en fonction de l'erreur du script.&lt;br /&gt;
&lt;br /&gt;
Le code de retour de la dernière commande est stocké dans la variable &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;$?&amp;lt;/source&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Exemple==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
utilisateur@machine:/$ ls /&lt;br /&gt;
bin   etc         initrd.img.old  lost+found  opt   run   sys  var &lt;br /&gt;
boot  home        lib             media       proc  sbin  tmp  vmlinuz&lt;br /&gt;
dev   initrd.img  lib64           mnt         root  srv   usr  vmlinuz.old&lt;br /&gt;
utilisateur@machine:/$ echo $?&lt;br /&gt;
0&lt;br /&gt;
utilisateur@machine:/$ ls /titi&lt;br /&gt;
ls: impossible d'accéder à '/titi': Aucun fichier ou dossier de ce type&lt;br /&gt;
utilisateur@machine:/$ echo $?&lt;br /&gt;
2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On peut également, lors d'une instruction qui est sensé terminer le script, renvoyer un code de retour via la commande:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
exit NUM_CODE&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Les tests=&lt;br /&gt;
Sous Linux, tout est fichier. Lors de l'exécution d'un script, il peut être utile de connaître le type ou l'existence d'un ficher (un dossier est un fichier) avant d'exécuter une action. Les tests seront donc appréciables en combinaison d'une structure conditionnelle ou d'une boucle.&lt;br /&gt;
&lt;br /&gt;
Les tests s'effectuent via la commande &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;test&amp;lt;/source&amp;gt;. Cette commande renvoi un code de retour en fonction de l'issue du test. Lorsque &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;test&amp;lt;/source&amp;gt; est utilisé dans une structure conditionnelle ou une boucle, seul son argument est utilisé, l'appel à la commande étant implicite.&lt;br /&gt;
&lt;br /&gt;
==Test sur des fichiers==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument !! Effet&lt;br /&gt;
|-&lt;br /&gt;
| FICHIER1 -nt FICHIER2 || Vérifie si FICHIER1 est plus récent que FICHIER2 (newer than)&lt;br /&gt;
|-&lt;br /&gt;
| FICHIER1 -ot FICHIER2 || Vérifie si FICHIER1 est plus vieux que FICHIER2 (order than)&lt;br /&gt;
|-&lt;br /&gt;
| -b || Vérifie si le fichier existe et si c'est un fichier spécial en mode bloc&lt;br /&gt;
|-&lt;br /&gt;
| -c || Vérifie si le fichier existe et si c'est un fichier spécial en mode caractère&lt;br /&gt;
|-&lt;br /&gt;
| -d || Vérifie si le fichier existe et si c'est un répertoire&lt;br /&gt;
|-&lt;br /&gt;
| -e || Vérifie si le fichier existe (peu importe le type de fichier)&lt;br /&gt;
|-&lt;br /&gt;
| -f || Vérifie si le fichier existe et si c'est un fichier ordinaire&lt;br /&gt;
|-&lt;br /&gt;
| -g || Vérifie si le fichier existe et si son bit set-GID est positionné&lt;br /&gt;
|-&lt;br /&gt;
| -G || Vérifie si le fichier existe et si il appartient au GID effectif de l'appelant&lt;br /&gt;
|-&lt;br /&gt;
| -h ou -L || Vérifie si le fichier existe et si c'est un lien symolique&lt;br /&gt;
|-&lt;br /&gt;
| -k || Vérifie si le fichier existe et si son bit collant (sticky) est positionné&lt;br /&gt;
|-&lt;br /&gt;
| -O || Vérifie si le fichier existe et si il appartient à l'UID de l'appelant&lt;br /&gt;
|-&lt;br /&gt;
| -p || Vérifie si le fichier existe et si c'est un tube nommé&lt;br /&gt;
|-&lt;br /&gt;
| -r || Vérifie si le fichier existe et si il est lisible&lt;br /&gt;
|-&lt;br /&gt;
| -s || Vérifie si le fichier existe et si il est de taille non nulle&lt;br /&gt;
|-&lt;br /&gt;
| -S || Vérifie si le fichier existe et si c'est un socket&lt;br /&gt;
|-&lt;br /&gt;
| -t || Vérifie si le descripteur de fichier FD est ouvert sur un terminal &lt;br /&gt;
|-&lt;br /&gt;
| -u || Vérifie si le fichier existe et si son bit setuid est positionné&lt;br /&gt;
|-&lt;br /&gt;
| -w || Vérifie si le fichier existe et si il est accessible en écriture&lt;br /&gt;
|-&lt;br /&gt;
| -x || Vérifie si le fichier existe et si c'est exécutable (ou si il peut être parcouru dans le cas d'un répertoire)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Test sur des valeurs==&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Argument !! Équivalent PHP !! Effet&lt;br /&gt;
|-&lt;br /&gt;
| -n || !empty() || La longueur de CHAÎNE est non nulle&lt;br /&gt;
|-&lt;br /&gt;
| -z || empty() ||La longueur de la CHAÎNE est nulle&lt;br /&gt;
|-&lt;br /&gt;
| -eq || == || Test d'égalité&lt;br /&gt;
|-&lt;br /&gt;
| -ne || != || Test d'inégalité&lt;br /&gt;
|-&lt;br /&gt;
| -lt || &amp;lt; || Test d'infériorité absolut&lt;br /&gt;
|-&lt;br /&gt;
| -le || &amp;lt;= || Test d'infériorité&lt;br /&gt;
|-&lt;br /&gt;
| -gt || &amp;gt; || Test de supériorité absolut&lt;br /&gt;
|-&lt;br /&gt;
| -ge || &amp;gt;= || Test de supériorité&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Structures conditionnelles=&lt;br /&gt;
Les structures conditionnelles permettent d'effectuer des instruction en fonction de conditions. Combinés aux tests vus précédemment, elles vont permettres un comportement évolutif du script en fonction des événements qui lui seront présentés.&lt;br /&gt;
&lt;br /&gt;
Il existe deux grand type de structure conditionnelle en bash.&lt;br /&gt;
&lt;br /&gt;
==La structure IF, ELIF, ELSE==&lt;br /&gt;
La syntaxe est similaire aux autres langages. Elle ce présente comme suit :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
 if [ OPTION_DE_TEST FICHIER_À_TESTER ]&lt;br /&gt;
 then&lt;br /&gt;
 	INSTRUCTION1&lt;br /&gt;
 	INSTRUCTION2...&lt;br /&gt;
 elif [ OPTION_DE_TEST FICHIER_À_TESTER ]&lt;br /&gt;
 then&lt;br /&gt;
 	INSTRUCTION1&lt;br /&gt;
 	INSTRUCTION2&lt;br /&gt;
 	INSTRUCTION3...&lt;br /&gt;
 else&lt;br /&gt;
 	INSTRUCTION1&lt;br /&gt;
 fi&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==La structure CASE==&lt;br /&gt;
La syntaxe est similaire à un couple switch/case en PHP. Très utile lorsqu'elle est utilisé avec un &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;read&amp;lt;/source&amp;gt;, elle est plus adapté qu'un enchaînement de &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;elif&amp;lt;/source&amp;gt; lorsqu'il s'agit de contrôler une entré utilisateur en fonction d'un choix proposé. Elle se présente comme suit :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
 case variableRead in&lt;br /&gt;
 	OUI|Oui|oui|o|YES|Yes|yes|y)&lt;br /&gt;
 		INSTRUCTION1&lt;br /&gt;
 		INSTRUCTION2...&lt;br /&gt;
 		;;&lt;br /&gt;
 	NON|Non|non|n|NO|No|no)&lt;br /&gt;
 		INSTRUCTION1&lt;br /&gt;
 		INSTRUCTION2...&lt;br /&gt;
 		;;&lt;br /&gt;
 	*)&lt;br /&gt;
 		INSTRUCTION1...&lt;br /&gt;
 		;;&lt;br /&gt;
 esac&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Boucles=&lt;br /&gt;
Les boucles permettent d'exécuter un ensemble d'instruction de façon répété en fonction d'une condition. Il existe deux types de boucle en bash.&lt;br /&gt;
&lt;br /&gt;
==La boucle FOR==&lt;br /&gt;
La boucle for permet de parcourir une liste de valeurs, elle effectue donc un nombre de tours de boucle qui est connu à l'avance. Elle supporte deux syntaxes.&lt;br /&gt;
&lt;br /&gt;
===Première syntaxe===&lt;br /&gt;
Avec cette syntaxe, &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;for&amp;lt;/source&amp;gt; parcours le contenu d'une liste et se termine lorsque tout les éléments on été parcourus.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
 for $variable in liste_valeurs&lt;br /&gt;
     do instruction(s)&lt;br /&gt;
 done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Exemple====&lt;br /&gt;
On peut utiliser cette façon de faire pour obtenir un comportement similaire à la commande ls.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
 for i in *&lt;br /&gt;
 do&lt;br /&gt;
     echo $i&lt;br /&gt;
 done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dans cet exemple, l'étoile est remplacée par tous les fichiers du répertoire courant, la boucle va donc donner successivement comme valeur à la variable i tous ces noms de fichier. Le corps de la boucle affichant la valeur de la variable i, le nom de tous les fichiers du répertoire courant sont affichés successivement.&lt;br /&gt;
&lt;br /&gt;
===Seconde syntaxe===&lt;br /&gt;
Cette façon de faire se rapproche plus du comportement standard de la boucle &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;for&amp;lt;/source&amp;gt; dans d'autre langages. Ainsi, elle prend 3 arguments. Un compteur qui sera incrémenté à chaque itération; la condition à remplir; l'incrémentation en elle même sous forme d'une opération arithmétique.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot; line&amp;gt;&lt;br /&gt;
 for ((i=0 ; 10 - $i ; i++))&lt;br /&gt;
 	do&lt;br /&gt;
 		echo $i&lt;br /&gt;
 done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==La boucle WHILE et UNTIL==&lt;br /&gt;
La boucle &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;while&amp;lt;/source&amp;gt; exécute un bloc d'instructions tant qu'une certaine condition est satisfaite, lorsque cette condition devient fausse la boucle se termine. Cette boucle permet donc de faire un nombre indéterminé de tours de boucle, voire infini si la condition ne devient jamais fausse.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 while [ $valeur1 -ne $valeur2 ]&lt;br /&gt;
 do&lt;br /&gt;
 	INSTRUCTION1&lt;br /&gt;
 	INSTRUCTION2...&lt;br /&gt;
 done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
La boucle &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;until&amp;lt;/source&amp;gt; est identique à la boucle &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;while&amp;lt;/source&amp;gt; sauf qu'elle est exécutée tant que la condition est fausse.&lt;br /&gt;
&lt;br /&gt;
En dehors d'un script, cette boucle peut exécuter une tache [https://stackoverflow.com/questions/1289026/syntax-for-a-single-line-bash-infinite-while-loop directement dans le shell] pour aller à l'encontre du merdier ambiant sous Linux qui veux tout automatiser sans jamais médiatiser le nom des processus qui casses les couilles (donc bonne chance pour le tuer). Par exemple, sur ma Debian Testing, un adaptateur USB/Ethernet en ''eth0'' n'avait de cesse de se dé-configurer tout seul (et pour le coup ce n'était pas la faute de [[Network manager]]) alors que j'avais un réseau d'admin pour un Raspberry Pi dessus (c'était insupportable d'avoir la connexion SSH qui coupait toute les 10 secondes). Du coup, plutôt que de passer une heure à trouver l'origine de cette merde, un coup de ça:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
while true; do ip a a 172.16.1.120/24 dev eth0 &amp;amp;&amp;amp; ip l set eth0 up; sleep 1; done&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
et ta race le problème.&lt;br /&gt;
&lt;br /&gt;
=Les fonctions=&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# déclaration dune fonction&lt;br /&gt;
maFonction() &lt;br /&gt;
{ local varlocal=&amp;quot;je suis la fonction&amp;quot;&lt;br /&gt;
  echo &amp;quot;$varlocal&amp;quot;&lt;br /&gt;
  echo &amp;quot;Nombres de paramètres : $#&amp;quot;&lt;br /&gt;
  echo $1&lt;br /&gt;
  echo $2&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# appel de ma fonction&lt;br /&gt;
maFonction &amp;quot;Bonjour&amp;quot; &amp;quot;Monde!&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ce qui donne le résultat suivant:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
je suis la fonction&lt;br /&gt;
Nombres de paramètres : 2&lt;br /&gt;
Bonjour&lt;br /&gt;
Monde!&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Source de la section==&lt;br /&gt;
* https://fr.wikibooks.org/wiki/Programmation_Bash/Fonctions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Sources=&lt;br /&gt;
*https://www.gnu.org/software/bash/manual/bashref.html&lt;br /&gt;
*http://ss64.com/bash/test.html&lt;br /&gt;
*http://www.quennec.fr/trucs-astuces/syst%C3%A8mes/gnulinux/programmation-shell-sous-gnulinux/les-bases-de-la-programmation-shell/les-variables-r%C3%A9serv%C3%A9es-du-shell/code-de-retour-dune-commande&lt;br /&gt;
*https://fr.wikibooks.org/wiki/Programmation_Bash/Boucles&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Mime&amp;diff=886</id>
		<title>Mime</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Mime&amp;diff=886"/>
		<updated>2018-08-09T10:42:45Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Page créée avec « Les MIME permet a Linux d'attribuer un type de fichier à une extension de fichier.   Voici quelque exemples:  .txt – text/plain  .html – text/html  .mp3 – audio/mpe... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Les MIME permet a Linux d'attribuer un type de fichier à une extension de fichier. &lt;br /&gt;
&lt;br /&gt;
Voici quelque exemples:&lt;br /&gt;
 .txt – text/plain&lt;br /&gt;
 .html – text/html&lt;br /&gt;
 .mp3 – audio/mpeg3&lt;br /&gt;
 .png – image/png&lt;br /&gt;
 .doc – application/msword&lt;br /&gt;
&lt;br /&gt;
= Définir un nouveau type MIME =&lt;br /&gt;
&lt;br /&gt;
Tout les mimes sont dans des fichier situés dans &amp;lt;code&amp;gt;/usr/share/mime&amp;lt;/code&amp;gt;. Aller dans le répertoire &amp;lt;code&amp;gt;application&amp;lt;/code&amp;gt; si votre nouveau type concerne une application.&lt;br /&gt;
puis créer un nouveau fichier en &amp;lt;code&amp;gt;.xml&amp;lt;/code&amp;gt; :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'&amp;gt;&lt;br /&gt;
  &amp;lt;mime-type type=&amp;quot;application/todo&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;comment&amp;gt;Todos Text file&amp;lt;/comment&amp;gt;&lt;br /&gt;
    &amp;lt;glob pattern=&amp;quot;*.TODO&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;glob pattern=&amp;quot;*.todo&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/mime-type&amp;gt;&lt;br /&gt;
&amp;lt;/mime-info&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* '''mime-type type''' : Définir ici, le nouveau type de fichier que vous voulez&lt;br /&gt;
* '''comment''' : Ajouter un commentaire&lt;br /&gt;
* '''glob pattern''' : définir le ou les extensions de fichier consterné par ce type MIME&lt;br /&gt;
&lt;br /&gt;
Pour prendre en compte le nouveau type MIME, exécuter la commande :&lt;br /&gt;
 # update-mime-database /usr/share/mime&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Cisco_7942&amp;diff=819</id>
		<title>Cisco 7942</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Cisco_7942&amp;diff=819"/>
		<updated>2018-03-09T17:32:22Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : /* Envoi de la configuration SIP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Téléphones ip]]&lt;br /&gt;
=Réinitialisation=&lt;br /&gt;
# Débrancher le téléphone électriquement&lt;br /&gt;
# Rebrancher le téléphone électriquement et maintenir le bouton &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;&lt;br /&gt;
# Lorsque les deux boutons, a droite de l'écran, clignote, taper la combinaison de touche suivante &amp;lt;code&amp;gt;123456789*0#&amp;lt;/code&amp;gt;&lt;br /&gt;
Le téléphone est maintenant réinitialisé.&lt;br /&gt;
&lt;br /&gt;
=Envoi du micrologiciel=&lt;br /&gt;
Après la réinitialisation, le téléphone demande son micrologiciel. Pour lui donner :&lt;br /&gt;
# Créer un serveur DHCP et TFTP (sur le même réseau que votre téléphone) en suivant la documentation du [[Serveur_PXE#Installation_des_services|Serveur PXE]] &lt;br /&gt;
# Télécharger et extraire le micrologiciel dans l'arborescence &amp;lt;code&amp;gt;/srv/tftp/&amp;lt;/code&amp;gt; de votre serveur TFTP.&lt;br /&gt;
# Débrancher le téléphone électriquement&lt;br /&gt;
# Rebrancher le téléphone électriquement&lt;br /&gt;
Une IP sera attribuée par votre DHCP et le téléphone ira télécharger les fichiers nécessaire sur votre serveur TFTP.&lt;br /&gt;
&lt;br /&gt;
Le micrologiciel de votre téléphone est maintenant installé.&lt;br /&gt;
&lt;br /&gt;
=Envoi de la configuration SIP=&lt;br /&gt;
Après une journée de recherche, nous avons trouvé la solution pour configurer le SIP. Cela fonctionne via trois fichiers XML a créer à la racine de votre serveur TFTP. &lt;br /&gt;
&lt;br /&gt;
Dans le fichier &amp;lt;code&amp;gt;XMLDefault.cnf.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Default&amp;gt;&lt;br /&gt;
  &amp;lt;callManagerGroup&amp;gt;&lt;br /&gt;
    &amp;lt;members&amp;gt;&lt;br /&gt;
      &amp;lt;member priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;callManager&amp;gt;&lt;br /&gt;
          &amp;lt;ports&amp;gt;&lt;br /&gt;
            &amp;lt;ethernetPhonePort&amp;gt;2000&amp;lt;/ethernetPhonePort&amp;gt;&lt;br /&gt;
            &amp;lt;mgcpPorts&amp;gt;&lt;br /&gt;
              &amp;lt;listen&amp;gt;2427&amp;lt;/listen&amp;gt;&lt;br /&gt;
              &amp;lt;keepAlive&amp;gt;2428&amp;lt;/keepAlive&amp;gt;&lt;br /&gt;
            &amp;lt;/mgcpPorts&amp;gt;&lt;br /&gt;
          &amp;lt;/ports&amp;gt;&lt;br /&gt;
          &amp;lt;processNodeName&amp;gt;!!!ASTERISK!!!&amp;lt;/processNodeName&amp;gt;&lt;br /&gt;
        &amp;lt;/callManager&amp;gt;&lt;br /&gt;
      &amp;lt;/member&amp;gt;&lt;br /&gt;
    &amp;lt;/members&amp;gt;&lt;br /&gt;
  &amp;lt;/callManagerGroup&amp;gt;&lt;br /&gt;
  &amp;lt;loadInformation434 model=&amp;quot;Cisco 7942&amp;quot;&amp;gt;!!!VERSION!!!&amp;lt;/loadInformation434&amp;gt;&lt;br /&gt;
  &amp;lt;authenticationURL&amp;gt;&amp;lt;/authenticationURL&amp;gt;&lt;br /&gt;
  &amp;lt;directoryURL&amp;gt;&amp;lt;/directoryURL&amp;gt;&lt;br /&gt;
  &amp;lt;idleURL&amp;gt;&amp;lt;/idleURL&amp;gt;&lt;br /&gt;
  &amp;lt;informationURL&amp;gt;&amp;lt;/informationURL&amp;gt;&lt;br /&gt;
  &amp;lt;messagesURL&amp;gt;&amp;lt;/messagesURL&amp;gt;&lt;br /&gt;
  &amp;lt;servicesURL&amp;gt;&amp;lt;/servicesURL&amp;gt;&lt;br /&gt;
&amp;lt;/Default&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Ligne 13 : Remplacer &amp;lt;code&amp;gt;!!!ASTERISK!!!&amp;lt;/code&amp;gt; par l'ip ou le FQDN de votre serveur Asterisk&lt;br /&gt;
* Ligne 18 : Remplacer &amp;lt;code&amp;gt;!!!VERSION!!!&amp;lt;/code&amp;gt; par la version de votre micrologiciel. Vous le trouverez dans la racine de votre serveur TFTP avec la commande &amp;lt;code&amp;gt;ls SIP*.loads| sed 's/\.loads//'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans le fichier &amp;lt;code&amp;gt;dialplan.xml&amp;lt;/code&amp;gt; :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;DIALTEMPLATE&amp;gt;&lt;br /&gt;
  &amp;lt;TEMPLATE MATCH=&amp;quot;...&amp;quot; Timeout=&amp;quot;0&amp;quot; User=&amp;quot;Phone&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/DIALTEMPLATE&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Dans notre cas, nos numéros de téléphones sont composés de trois digits dont le &amp;lt;code&amp;gt;..&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans le fichier &amp;lt;code&amp;gt;SEP&amp;lt;MAC&amp;gt;.cnf.xml&amp;lt;/code&amp;gt; dont &amp;lt;code&amp;gt;&amp;lt;MAC&amp;gt;&amp;lt;/code&amp;gt; correspond à l’adresse MAC de votre téléphone IP :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;device&amp;gt;&lt;br /&gt;
  &amp;lt;deviceProtocol&amp;gt;SIP&amp;lt;/deviceProtocol&amp;gt;&lt;br /&gt;
  &amp;lt;sshUserId&amp;gt;cisco&amp;lt;/sshUserId&amp;gt;&lt;br /&gt;
  &amp;lt;sshPassword&amp;gt;cisco&amp;lt;/sshPassword&amp;gt;&lt;br /&gt;
  &amp;lt;devicePool&amp;gt;&lt;br /&gt;
    &amp;lt;dateTimeSetting&amp;gt;&lt;br /&gt;
      &amp;lt;dateTemplate&amp;gt;D.M.Y&amp;lt;/dateTemplate&amp;gt;&lt;br /&gt;
      &amp;lt;timeZone&amp;gt;E. Europe Standard/Daylight Time&amp;lt;/timeZone&amp;gt;&lt;br /&gt;
      &amp;lt;ntps&amp;gt;&lt;br /&gt;
        &amp;lt;ntp&amp;gt;&lt;br /&gt;
          &amp;lt;name&amp;gt;!!!NTP!!!&amp;lt;/name&amp;gt;&lt;br /&gt;
          &amp;lt;ntpMode&amp;gt;Unicast&amp;lt;/ntpMode&amp;gt;&lt;br /&gt;
        &amp;lt;/ntp&amp;gt;&lt;br /&gt;
      &amp;lt;/ntps&amp;gt;&lt;br /&gt;
    &amp;lt;/dateTimeSetting&amp;gt;&lt;br /&gt;
    &amp;lt;callManagerGroup&amp;gt;&lt;br /&gt;
      &amp;lt;members&amp;gt;&lt;br /&gt;
        &amp;lt;member priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;callManager&amp;gt;&lt;br /&gt;
            &amp;lt;ports&amp;gt;&lt;br /&gt;
              &amp;lt;ethernetPhonePort&amp;gt;2000&amp;lt;/ethernetPhonePort&amp;gt;&lt;br /&gt;
              &amp;lt;sipPort&amp;gt;5060&amp;lt;/sipPort&amp;gt;&lt;br /&gt;
              &amp;lt;securedSipPort&amp;gt;5061&amp;lt;/securedSipPort&amp;gt;&lt;br /&gt;
            &amp;lt;/ports&amp;gt;&lt;br /&gt;
            &amp;lt;processNodeName&amp;gt;!!!ASTERISK!!!&amp;lt;/processNodeName&amp;gt;&lt;br /&gt;
          &amp;lt;/callManager&amp;gt;&lt;br /&gt;
        &amp;lt;/member&amp;gt;&lt;br /&gt;
      &amp;lt;/members&amp;gt;&lt;br /&gt;
    &amp;lt;/callManagerGroup&amp;gt;&lt;br /&gt;
  &amp;lt;/devicePool&amp;gt;&lt;br /&gt;
  &amp;lt;sipProfile&amp;gt;&lt;br /&gt;
    &amp;lt;sipProxies&amp;gt;&lt;br /&gt;
      &amp;lt;backupProxy&amp;gt;&amp;lt;/backupProxy&amp;gt;&lt;br /&gt;
      &amp;lt;backupProxyPort&amp;gt;&amp;lt;/backupProxyPort&amp;gt;&lt;br /&gt;
      &amp;lt;emergencyProxy&amp;gt;&amp;lt;/emergencyProxy&amp;gt;&lt;br /&gt;
      &amp;lt;emergencyProxyPort&amp;gt;&amp;lt;/emergencyProxyPort&amp;gt;&lt;br /&gt;
      &amp;lt;outboundProxy&amp;gt;&amp;lt;/outboundProxy&amp;gt;&lt;br /&gt;
      &amp;lt;outboundProxyPort&amp;gt;&amp;lt;/outboundProxyPort&amp;gt;&lt;br /&gt;
      &amp;lt;registerWithProxy&amp;gt;true&amp;lt;/registerWithProxy&amp;gt;&lt;br /&gt;
    &amp;lt;/sipProxies&amp;gt;&lt;br /&gt;
    &amp;lt;sipCallFeatures&amp;gt;&lt;br /&gt;
      &amp;lt;cnfJoinEnabled&amp;gt;true&amp;lt;/cnfJoinEnabled&amp;gt;&lt;br /&gt;
      &amp;lt;callForwardURI&amp;gt;x-cisco-serviceuri-cfwdall&amp;lt;/callForwardURI&amp;gt;&lt;br /&gt;
      &amp;lt;callPickupURI&amp;gt;x-cisco-serviceuri-pickup&amp;lt;/callPickupURI&amp;gt;&lt;br /&gt;
      &amp;lt;callPickupListURI&amp;gt;x-cisco-serviceuri-opickup&amp;lt;/callPickupListURI&amp;gt;&lt;br /&gt;
      &amp;lt;callPickupGroupURI&amp;gt;x-cisco-serviceuri-gpickup&amp;lt;/callPickupGroupURI&amp;gt;&lt;br /&gt;
      &amp;lt;meetMeServiceURI&amp;gt;x-cisco-serviceuri-meetme&amp;lt;/meetMeServiceURI&amp;gt;&lt;br /&gt;
      &amp;lt;abbreviatedDialURI&amp;gt;x-cisco-serviceuri-abbrdial&amp;lt;/abbreviatedDialURI&amp;gt;&lt;br /&gt;
      &amp;lt;rfc2543Hold&amp;gt;false&amp;lt;/rfc2543Hold&amp;gt;&lt;br /&gt;
      &amp;lt;callHoldRingback&amp;gt;2&amp;lt;/callHoldRingback&amp;gt;&lt;br /&gt;
      &amp;lt;localCfwdEnable&amp;gt;true&amp;lt;/localCfwdEnable&amp;gt;&lt;br /&gt;
      &amp;lt;semiAttendedTransfer&amp;gt;true&amp;lt;/semiAttendedTransfer&amp;gt;&lt;br /&gt;
      &amp;lt;anonymousCallBlock&amp;gt;2&amp;lt;/anonymousCallBlock&amp;gt;&lt;br /&gt;
      &amp;lt;callerIdBlocking&amp;gt;2&amp;lt;/callerIdBlocking&amp;gt;&lt;br /&gt;
      &amp;lt;dndControl&amp;gt;0&amp;lt;/dndControl&amp;gt;&lt;br /&gt;
      &amp;lt;remoteCcEnable&amp;gt;true&amp;lt;/remoteCcEnable&amp;gt;&lt;br /&gt;
    &amp;lt;/sipCallFeatures&amp;gt;&lt;br /&gt;
    &amp;lt;sipStack&amp;gt;&lt;br /&gt;
      &amp;lt;sipInviteRetx&amp;gt;6&amp;lt;/sipInviteRetx&amp;gt;&lt;br /&gt;
      &amp;lt;sipRetx&amp;gt;10&amp;lt;/sipRetx&amp;gt;&lt;br /&gt;
      &amp;lt;timerInviteExpires&amp;gt;180&amp;lt;/timerInviteExpires&amp;gt;&lt;br /&gt;
      &amp;lt;timerRegisterExpires&amp;gt;3600&amp;lt;/timerRegisterExpires&amp;gt;&lt;br /&gt;
      &amp;lt;timerRegisterDelta&amp;gt;5&amp;lt;/timerRegisterDelta&amp;gt;&lt;br /&gt;
      &amp;lt;timerKeepAliveExpires&amp;gt;120&amp;lt;/timerKeepAliveExpires&amp;gt;&lt;br /&gt;
      &amp;lt;timerSubscribeExpires&amp;gt;120&amp;lt;/timerSubscribeExpires&amp;gt;&lt;br /&gt;
      &amp;lt;timerSubscribeDelta&amp;gt;5&amp;lt;/timerSubscribeDelta&amp;gt;&lt;br /&gt;
      &amp;lt;timerT1&amp;gt;500&amp;lt;/timerT1&amp;gt;&lt;br /&gt;
      &amp;lt;timerT2&amp;gt;4000&amp;lt;/timerT2&amp;gt;&lt;br /&gt;
      &amp;lt;maxRedirects&amp;gt;70&amp;lt;/maxRedirects&amp;gt;&lt;br /&gt;
      &amp;lt;remotePartyID&amp;gt;true&amp;lt;/remotePartyID&amp;gt;&lt;br /&gt;
      &amp;lt;userInfo&amp;gt;None&amp;lt;/userInfo&amp;gt;&lt;br /&gt;
    &amp;lt;/sipStack&amp;gt;&lt;br /&gt;
    &amp;lt;autoAnswerTimer&amp;gt;1&amp;lt;/autoAnswerTimer&amp;gt;&lt;br /&gt;
    &amp;lt;autoAnswerAltBehavior&amp;gt;false&amp;lt;/autoAnswerAltBehavior&amp;gt;&lt;br /&gt;
    &amp;lt;autoAnswerOverride&amp;gt;true&amp;lt;/autoAnswerOverride&amp;gt;&lt;br /&gt;
    &amp;lt;transferOnhookEnabled&amp;gt;false&amp;lt;/transferOnhookEnabled&amp;gt;&lt;br /&gt;
    &amp;lt;enableVad&amp;gt;false&amp;lt;/enableVad&amp;gt;&lt;br /&gt;
    &amp;lt;preferredCodec&amp;gt;g711alaw&amp;lt;/preferredCodec&amp;gt;&lt;br /&gt;
    &amp;lt;dtmfAvtPayload&amp;gt;101&amp;lt;/dtmfAvtPayload&amp;gt;&lt;br /&gt;
    &amp;lt;dtmfDbLevel&amp;gt;3&amp;lt;/dtmfDbLevel&amp;gt;&lt;br /&gt;
    &amp;lt;dtmfOutofBand&amp;gt;avt&amp;lt;/dtmfOutofBand&amp;gt;&lt;br /&gt;
    &amp;lt;alwaysUsePrimeLine&amp;gt;false&amp;lt;/alwaysUsePrimeLine&amp;gt;&lt;br /&gt;
    &amp;lt;alwaysUsePrimeLineVoiceMail&amp;gt;false&amp;lt;/alwaysUsePrimeLineVoiceMail&amp;gt;&lt;br /&gt;
    &amp;lt;kpml&amp;gt;3&amp;lt;/kpml&amp;gt;&lt;br /&gt;
    &amp;lt;natEnabled&amp;gt;false&amp;lt;/natEnabled&amp;gt;&lt;br /&gt;
    &amp;lt;natAddress&amp;gt;&amp;lt;/natAddress&amp;gt;&lt;br /&gt;
    &amp;lt;phoneLabel&amp;gt;!!!NOM!!!&amp;lt;/phoneLabel&amp;gt;&lt;br /&gt;
    &amp;lt;stutterMsgWaiting&amp;gt;0&amp;lt;/stutterMsgWaiting&amp;gt;&lt;br /&gt;
    &amp;lt;callStats&amp;gt;false&amp;lt;/callStats&amp;gt;&lt;br /&gt;
    &amp;lt;silentPeriodBetweenCallWaitingBursts&amp;gt;10&amp;lt;/silentPeriodBetweenCallWaitingBursts&amp;gt;&lt;br /&gt;
    &amp;lt;disableLocalSpeedDialConfig&amp;gt;false&amp;lt;/disableLocalSpeedDialConfig&amp;gt;&lt;br /&gt;
    &amp;lt;startMediaPort&amp;gt;16384&amp;lt;/startMediaPort&amp;gt;&lt;br /&gt;
    &amp;lt;stopMediaPort&amp;gt;32766&amp;lt;/stopMediaPort&amp;gt;&lt;br /&gt;
    &amp;lt;sipLines&amp;gt;&lt;br /&gt;
      &amp;lt;line button=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;featureID&amp;gt;9&amp;lt;/featureID&amp;gt;&lt;br /&gt;
        &amp;lt;featureLabel&amp;gt;!!!UTILISATEUR!!!&amp;lt;/featureLabel&amp;gt;&lt;br /&gt;
        &amp;lt;proxy&amp;gt;USECALLMANAGER&amp;lt;/proxy&amp;gt;&lt;br /&gt;
        &amp;lt;port&amp;gt;5060&amp;lt;/port&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;!!!UTILISATEUR!!!&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;displayName&amp;gt;!!!UTILISATEUR!!!&amp;lt;/displayName&amp;gt;&lt;br /&gt;
        &amp;lt;autoAnswer&amp;gt;&lt;br /&gt;
          &amp;lt;autoAnswerEnabled&amp;gt;2&amp;lt;/autoAnswerEnabled&amp;gt;&lt;br /&gt;
        &amp;lt;/autoAnswer&amp;gt;&lt;br /&gt;
        &amp;lt;callWaiting&amp;gt;3&amp;lt;/callWaiting&amp;gt;&lt;br /&gt;
        &amp;lt;authName&amp;gt;!!!UTILISATEUR!!!&amp;lt;/authName&amp;gt;&lt;br /&gt;
        &amp;lt;authPassword&amp;gt;!!!MOTDEPASSE!!!&amp;lt;/authPassword&amp;gt;&lt;br /&gt;
        &amp;lt;sharedLine&amp;gt;false&amp;lt;/sharedLine&amp;gt;&lt;br /&gt;
        &amp;lt;messageWaitingLampPolicy&amp;gt;1&amp;lt;/messageWaitingLampPolicy&amp;gt;&lt;br /&gt;
        &amp;lt;messagesNumber&amp;gt;*97&amp;lt;/messagesNumber&amp;gt;&lt;br /&gt;
        &amp;lt;ringSettingIdle&amp;gt;4&amp;lt;/ringSettingIdle&amp;gt;&lt;br /&gt;
        &amp;lt;ringSettingActive&amp;gt;5&amp;lt;/ringSettingActive&amp;gt;&lt;br /&gt;
        &amp;lt;contact&amp;gt;!!!UTILISATEUR!!!&amp;lt;/contact&amp;gt;&lt;br /&gt;
        &amp;lt;forwardCallInfoDisplay&amp;gt;&lt;br /&gt;
          &amp;lt;callerName&amp;gt;true&amp;lt;/callerName&amp;gt;&lt;br /&gt;
          &amp;lt;callerNumber&amp;gt;true&amp;lt;/callerNumber&amp;gt;&lt;br /&gt;
          &amp;lt;redirectedNumber&amp;gt;true&amp;lt;/redirectedNumber&amp;gt;&lt;br /&gt;
          &amp;lt;dialedNumber&amp;gt;true&amp;lt;/dialedNumber&amp;gt;&lt;br /&gt;
        &amp;lt;/forwardCallInfoDisplay&amp;gt;&lt;br /&gt;
      &amp;lt;/line&amp;gt;&lt;br /&gt;
    &amp;lt;/sipLines&amp;gt;&lt;br /&gt;
    &amp;lt;voipControlPort&amp;gt;5060&amp;lt;/voipControlPort&amp;gt;&lt;br /&gt;
    &amp;lt;dscpForAudio&amp;gt;184&amp;lt;/dscpForAudio&amp;gt;&lt;br /&gt;
    &amp;lt;ringSettingBusyStationPolicy&amp;gt;0&amp;lt;/ringSettingBusyStationPolicy&amp;gt;&lt;br /&gt;
    &amp;lt;dialTemplate&amp;gt;dialplan.xml&amp;lt;/dialTemplate&amp;gt;&lt;br /&gt;
  &amp;lt;/sipProfile&amp;gt;&lt;br /&gt;
  &amp;lt;commonProfile&amp;gt;&lt;br /&gt;
    &amp;lt;phonePassword&amp;gt;1234&amp;lt;/phonePassword&amp;gt;&lt;br /&gt;
    &amp;lt;backgroundImageAccess&amp;gt;true&amp;lt;/backgroundImageAccess&amp;gt;&lt;br /&gt;
    &amp;lt;callLogBlfEnabled&amp;gt;2&amp;lt;/callLogBlfEnabled&amp;gt;&lt;br /&gt;
  &amp;lt;/commonProfile&amp;gt;&lt;br /&gt;
  &amp;lt;loadInformation&amp;gt;!!!VERSION!!!&amp;lt;/loadInformation&amp;gt;&lt;br /&gt;
  &amp;lt;vendorConfig&amp;gt;&lt;br /&gt;
    &amp;lt;disableSpeaker&amp;gt;false&amp;lt;/disableSpeaker&amp;gt;&lt;br /&gt;
    &amp;lt;disableSpeakerAndHeadset&amp;gt;false&amp;lt;/disableSpeakerAndHeadset&amp;gt;&lt;br /&gt;
    &amp;lt;pcPort&amp;gt;1&amp;lt;/pcPort&amp;gt;&lt;br /&gt;
    &amp;lt;settingsAccess&amp;gt;1&amp;lt;/settingsAccess&amp;gt;&lt;br /&gt;
    &amp;lt;garp&amp;gt;0&amp;lt;/garp&amp;gt;&lt;br /&gt;
    &amp;lt;voiceVlanAccess&amp;gt;0&amp;lt;/voiceVlanAccess&amp;gt;&lt;br /&gt;
    &amp;lt;videoCapability&amp;gt;0&amp;lt;/videoCapability&amp;gt;&lt;br /&gt;
    &amp;lt;autoSelectLineEnable&amp;gt;0&amp;lt;/autoSelectLineEnable&amp;gt;&lt;br /&gt;
    &amp;lt;sshAccess&amp;gt;0&amp;lt;/sshAccess&amp;gt;&lt;br /&gt;
    &amp;lt;sshPort&amp;gt;22&amp;lt;/sshPort&amp;gt;&lt;br /&gt;
    &amp;lt;webAccess&amp;gt;0&amp;lt;/webAccess&amp;gt;&lt;br /&gt;
    &amp;lt;spanToPCPort&amp;gt;1&amp;lt;/spanToPCPort&amp;gt;&lt;br /&gt;
    &amp;lt;loggingDisplay&amp;gt;1&amp;lt;/loggingDisplay&amp;gt;&lt;br /&gt;
    &amp;lt;loadServer&amp;gt;&amp;lt;/loadServer&amp;gt;&lt;br /&gt;
  &amp;lt;/vendorConfig&amp;gt;&lt;br /&gt;
  &amp;lt;versionStamp&amp;gt;&amp;lt;/versionStamp&amp;gt;&lt;br /&gt;
  &amp;lt;userLocale&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;French_France&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;langCode&amp;gt;fr&amp;lt;/langCode&amp;gt;&lt;br /&gt;
  &amp;lt;/userLocale&amp;gt;&lt;br /&gt;
  &amp;lt;networkLocale&amp;gt;France&amp;lt;/networkLocale&amp;gt;&lt;br /&gt;
  &amp;lt;networkLocaleInfo&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;France&amp;lt;/name&amp;gt;&lt;br /&gt;
  &amp;lt;/networkLocaleInfo&amp;gt;&lt;br /&gt;
  &amp;lt;deviceSecurityMode&amp;gt;1&amp;lt;/deviceSecurityMode&amp;gt;&lt;br /&gt;
  &amp;lt;authenticationURL&amp;gt;&amp;lt;/authenticationURL&amp;gt;&lt;br /&gt;
  &amp;lt;directoryURL&amp;gt;&amp;lt;/directoryURL&amp;gt;&lt;br /&gt;
  &amp;lt;idleURL&amp;gt;&amp;lt;/idleURL&amp;gt;&lt;br /&gt;
  &amp;lt;informationURL&amp;gt;&amp;lt;/informationURL&amp;gt;&lt;br /&gt;
  &amp;lt;messagesURL&amp;gt;&amp;lt;/messagesURL&amp;gt;&lt;br /&gt;
  &amp;lt;proxyServerURL&amp;gt;&amp;lt;/proxyServerURL&amp;gt;&lt;br /&gt;
  &amp;lt;servicesURL&amp;gt;&amp;lt;/servicesURL&amp;gt;&lt;br /&gt;
  &amp;lt;dscpForSCCPPhoneConfig&amp;gt;96&amp;lt;/dscpForSCCPPhoneConfig&amp;gt;&lt;br /&gt;
  &amp;lt;dscpForSCCPPhoneServices&amp;gt;0&amp;lt;/dscpForSCCPPhoneServices&amp;gt;&lt;br /&gt;
  &amp;lt;dscpForCm2Dvce&amp;gt;96&amp;lt;/dscpForCm2Dvce&amp;gt;&lt;br /&gt;
  &amp;lt;transportLayerProtocol&amp;gt;2&amp;lt;/transportLayerProtocol&amp;gt;&lt;br /&gt;
  &amp;lt;capfAuthMode&amp;gt;0&amp;lt;/capfAuthMode&amp;gt;&lt;br /&gt;
  &amp;lt;capfList&amp;gt;&lt;br /&gt;
    &amp;lt;capf&amp;gt;&lt;br /&gt;
      &amp;lt;phonePort&amp;gt;3804&amp;lt;/phonePort&amp;gt;&lt;br /&gt;
    &amp;lt;/capf&amp;gt;&lt;br /&gt;
  &amp;lt;/capfList&amp;gt;&lt;br /&gt;
  &amp;lt;certHash&amp;gt;&amp;lt;/certHash&amp;gt;&lt;br /&gt;
  &amp;lt;encrConfig&amp;gt;false&amp;lt;/encrConfig&amp;gt;&lt;br /&gt;
&amp;lt;/device&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Via un &amp;quot;rechercher et remplacer&amp;quot; ou à la main, remplacer :&lt;br /&gt;
* &amp;lt;code&amp;gt;!!!NTP!!!&amp;lt;/code&amp;gt; =&amp;gt; l'IP ou le FQDN de votre [[Ntp|Serveur NTP]]&lt;br /&gt;
* &amp;lt;code&amp;gt;!!!ASTERISK!!!&amp;lt;/code&amp;gt; =&amp;gt; l'IP ou le FQDN de votre Asterisk&lt;br /&gt;
* &amp;lt;code&amp;gt;!!!NOM!!!&amp;lt;/code&amp;gt; =&amp;gt; Le nom de votre téléphone&lt;br /&gt;
* &amp;lt;code&amp;gt;!!!UTILISATEUR!!!&amp;lt;/code&amp;gt; =&amp;gt; Le nom d'utilisateur de votre compte configuré sur Asterisk&lt;br /&gt;
* &amp;lt;code&amp;gt;!!!MOTDEPASSE!!!&amp;lt;/code&amp;gt; =&amp;gt; Le mot de passe de votre compte configuré sur Asterisk&lt;br /&gt;
* !!!VERSION!!! =&amp;gt; la version de votre micrologiciel =&amp;gt; &amp;lt;code&amp;gt;ls SIP*.loads| sed 's/\.loads//'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{info|Quand vous sauvegardez vos fichiers de configuration, le téléphone IP va redémarrer automatiquement pour prendre les nouvelles configurations }}&lt;br /&gt;
&lt;br /&gt;
=Astuces sur le téléphone=&lt;br /&gt;
==Passer en mode admin==&lt;br /&gt;
Si vous voulez modifier un paramètre dans le menu de votre Cisco, il faut aller dans le menu et taper la combinaison &amp;lt;code&amp;gt;**#&amp;lt;/code&amp;gt; pour déverrouiller le petit cadenas (en haut à droite de votre écran) puis modifier.&lt;br /&gt;
==Redémarrer le téléphone==&lt;br /&gt;
Pour redémarrer le téléphone correctement , aller dans le menu du téléphone est taper la combinaison &amp;lt;code&amp;gt;**#**&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Liens=&lt;br /&gt;
* Micrologiciel (nécessite un compte Cisco) : https://software.cisco.com/download/navigator.html?mdfid=269065653&amp;amp;flowid=5246&lt;br /&gt;
* Tuto de configuration SIP : https://blog.kmp.or.at/cisco-ip-phone-7942-w-asterisk/&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Cisco_7942&amp;diff=818</id>
		<title>Cisco 7942</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Cisco_7942&amp;diff=818"/>
		<updated>2018-03-09T17:15:49Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Page créée avec « Category:Téléphones ip =Réinitialisation= # Débrancher le téléphone électriquement # Rebrancher le téléphone électriquement et maintenir le bouton &amp;lt;code&amp;gt;#&amp;lt;/c... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Téléphones ip]]&lt;br /&gt;
=Réinitialisation=&lt;br /&gt;
# Débrancher le téléphone électriquement&lt;br /&gt;
# Rebrancher le téléphone électriquement et maintenir le bouton &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;&lt;br /&gt;
# Lorsque les deux boutons, a droite de l'écran, clignote, taper la combinaison de touche suivante &amp;lt;code&amp;gt;123456789*0#&amp;lt;/code&amp;gt;&lt;br /&gt;
Le téléphone est maintenant réinitialisé.&lt;br /&gt;
&lt;br /&gt;
=Envoi du micrologiciel=&lt;br /&gt;
Après la réinitialisation, le téléphone demande son micrologiciel. Pour lui donner :&lt;br /&gt;
# Créer un serveur DHCP et TFTP (sur le même réseau que votre téléphone) en suivant la documentation du [[Serveur_PXE#Installation_des_services|Serveur PXE]] &lt;br /&gt;
# Télécharger et extraire le micrologiciel dans l'arborescence &amp;lt;code&amp;gt;/srv/tftp/&amp;lt;/code&amp;gt; de votre serveur TFTP.&lt;br /&gt;
# Débrancher le téléphone électriquement&lt;br /&gt;
# Rebrancher le téléphone électriquement&lt;br /&gt;
Une IP sera attribuée par votre DHCP et le téléphone ira télécharger les fichiers nécessaire sur votre serveur TFTP.&lt;br /&gt;
&lt;br /&gt;
Le micrologiciel de votre téléphone est maintenant installé.&lt;br /&gt;
&lt;br /&gt;
=Envoi de la configuration SIP=&lt;br /&gt;
Après une journée de recherche, nous avons trouvé la solution pour configurer le SIP. Cela fonctionne via deux fichiers XML a créer à la racine de votre serveur TFTP. &lt;br /&gt;
&lt;br /&gt;
Dans le fichier &amp;lt;code&amp;gt;XMLDefault.cnf.xml&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Default&amp;gt;&lt;br /&gt;
  &amp;lt;callManagerGroup&amp;gt;&lt;br /&gt;
    &amp;lt;members&amp;gt;&lt;br /&gt;
      &amp;lt;member priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;callManager&amp;gt;&lt;br /&gt;
          &amp;lt;ports&amp;gt;&lt;br /&gt;
            &amp;lt;ethernetPhonePort&amp;gt;2000&amp;lt;/ethernetPhonePort&amp;gt;&lt;br /&gt;
            &amp;lt;mgcpPorts&amp;gt;&lt;br /&gt;
              &amp;lt;listen&amp;gt;2427&amp;lt;/listen&amp;gt;&lt;br /&gt;
              &amp;lt;keepAlive&amp;gt;2428&amp;lt;/keepAlive&amp;gt;&lt;br /&gt;
            &amp;lt;/mgcpPorts&amp;gt;&lt;br /&gt;
          &amp;lt;/ports&amp;gt;&lt;br /&gt;
          &amp;lt;processNodeName&amp;gt;!!!ASTERISK!!!&amp;lt;/processNodeName&amp;gt;&lt;br /&gt;
        &amp;lt;/callManager&amp;gt;&lt;br /&gt;
      &amp;lt;/member&amp;gt;&lt;br /&gt;
    &amp;lt;/members&amp;gt;&lt;br /&gt;
  &amp;lt;/callManagerGroup&amp;gt;&lt;br /&gt;
  &amp;lt;loadInformation434 model=&amp;quot;Cisco 7942&amp;quot;&amp;gt;!!!VERSION!!!&amp;lt;/loadInformation434&amp;gt;&lt;br /&gt;
  &amp;lt;authenticationURL&amp;gt;&amp;lt;/authenticationURL&amp;gt;&lt;br /&gt;
  &amp;lt;directoryURL&amp;gt;&amp;lt;/directoryURL&amp;gt;&lt;br /&gt;
  &amp;lt;idleURL&amp;gt;&amp;lt;/idleURL&amp;gt;&lt;br /&gt;
  &amp;lt;informationURL&amp;gt;&amp;lt;/informationURL&amp;gt;&lt;br /&gt;
  &amp;lt;messagesURL&amp;gt;&amp;lt;/messagesURL&amp;gt;&lt;br /&gt;
  &amp;lt;servicesURL&amp;gt;&amp;lt;/servicesURL&amp;gt;&lt;br /&gt;
&amp;lt;/Default&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Ligne 13 : Remplacer &amp;lt;code&amp;gt;!!!ASTERISK!!!&amp;lt;/code&amp;gt; par l'ip ou le FQDN de votre serveur Asterisk&lt;br /&gt;
* Ligne 18 : Remplacer &amp;lt;code&amp;gt;!!!VERSION!!!&amp;lt;/code&amp;gt; par la version de votre micrologiciel. Vous le trouverez dans la racine de votre serveur TFTP avec la commande &amp;lt;code&amp;gt;ls SIP*.loads| sed 's/\.loads//'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dans le fichier &amp;lt;code&amp;gt;SEP&amp;lt;MAC&amp;gt;.cnf.xml&amp;lt;/code&amp;gt; dont &amp;lt;code&amp;gt;&amp;lt;MAC&amp;gt;&amp;lt;/code&amp;gt; correspond à l’adresse MAC de votre téléphone IP :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;device&amp;gt;&lt;br /&gt;
  &amp;lt;deviceProtocol&amp;gt;SIP&amp;lt;/deviceProtocol&amp;gt;&lt;br /&gt;
  &amp;lt;sshUserId&amp;gt;cisco&amp;lt;/sshUserId&amp;gt;&lt;br /&gt;
  &amp;lt;sshPassword&amp;gt;cisco&amp;lt;/sshPassword&amp;gt;&lt;br /&gt;
  &amp;lt;devicePool&amp;gt;&lt;br /&gt;
    &amp;lt;dateTimeSetting&amp;gt;&lt;br /&gt;
      &amp;lt;dateTemplate&amp;gt;D.M.Y&amp;lt;/dateTemplate&amp;gt;&lt;br /&gt;
      &amp;lt;timeZone&amp;gt;E. Europe Standard/Daylight Time&amp;lt;/timeZone&amp;gt;&lt;br /&gt;
      &amp;lt;ntps&amp;gt;&lt;br /&gt;
        &amp;lt;ntp&amp;gt;&lt;br /&gt;
          &amp;lt;name&amp;gt;!!!NTP!!!&amp;lt;/name&amp;gt;&lt;br /&gt;
          &amp;lt;ntpMode&amp;gt;Unicast&amp;lt;/ntpMode&amp;gt;&lt;br /&gt;
        &amp;lt;/ntp&amp;gt;&lt;br /&gt;
      &amp;lt;/ntps&amp;gt;&lt;br /&gt;
    &amp;lt;/dateTimeSetting&amp;gt;&lt;br /&gt;
    &amp;lt;callManagerGroup&amp;gt;&lt;br /&gt;
      &amp;lt;members&amp;gt;&lt;br /&gt;
        &amp;lt;member priority=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
          &amp;lt;callManager&amp;gt;&lt;br /&gt;
            &amp;lt;ports&amp;gt;&lt;br /&gt;
              &amp;lt;ethernetPhonePort&amp;gt;2000&amp;lt;/ethernetPhonePort&amp;gt;&lt;br /&gt;
              &amp;lt;sipPort&amp;gt;5060&amp;lt;/sipPort&amp;gt;&lt;br /&gt;
              &amp;lt;securedSipPort&amp;gt;5061&amp;lt;/securedSipPort&amp;gt;&lt;br /&gt;
            &amp;lt;/ports&amp;gt;&lt;br /&gt;
            &amp;lt;processNodeName&amp;gt;!!!ASTERISK!!!&amp;lt;/processNodeName&amp;gt;&lt;br /&gt;
          &amp;lt;/callManager&amp;gt;&lt;br /&gt;
        &amp;lt;/member&amp;gt;&lt;br /&gt;
      &amp;lt;/members&amp;gt;&lt;br /&gt;
    &amp;lt;/callManagerGroup&amp;gt;&lt;br /&gt;
  &amp;lt;/devicePool&amp;gt;&lt;br /&gt;
  &amp;lt;sipProfile&amp;gt;&lt;br /&gt;
    &amp;lt;sipProxies&amp;gt;&lt;br /&gt;
      &amp;lt;backupProxy&amp;gt;&amp;lt;/backupProxy&amp;gt;&lt;br /&gt;
      &amp;lt;backupProxyPort&amp;gt;&amp;lt;/backupProxyPort&amp;gt;&lt;br /&gt;
      &amp;lt;emergencyProxy&amp;gt;&amp;lt;/emergencyProxy&amp;gt;&lt;br /&gt;
      &amp;lt;emergencyProxyPort&amp;gt;&amp;lt;/emergencyProxyPort&amp;gt;&lt;br /&gt;
      &amp;lt;outboundProxy&amp;gt;&amp;lt;/outboundProxy&amp;gt;&lt;br /&gt;
      &amp;lt;outboundProxyPort&amp;gt;&amp;lt;/outboundProxyPort&amp;gt;&lt;br /&gt;
      &amp;lt;registerWithProxy&amp;gt;true&amp;lt;/registerWithProxy&amp;gt;&lt;br /&gt;
    &amp;lt;/sipProxies&amp;gt;&lt;br /&gt;
    &amp;lt;sipCallFeatures&amp;gt;&lt;br /&gt;
      &amp;lt;cnfJoinEnabled&amp;gt;true&amp;lt;/cnfJoinEnabled&amp;gt;&lt;br /&gt;
      &amp;lt;callForwardURI&amp;gt;x-cisco-serviceuri-cfwdall&amp;lt;/callForwardURI&amp;gt;&lt;br /&gt;
      &amp;lt;callPickupURI&amp;gt;x-cisco-serviceuri-pickup&amp;lt;/callPickupURI&amp;gt;&lt;br /&gt;
      &amp;lt;callPickupListURI&amp;gt;x-cisco-serviceuri-opickup&amp;lt;/callPickupListURI&amp;gt;&lt;br /&gt;
      &amp;lt;callPickupGroupURI&amp;gt;x-cisco-serviceuri-gpickup&amp;lt;/callPickupGroupURI&amp;gt;&lt;br /&gt;
      &amp;lt;meetMeServiceURI&amp;gt;x-cisco-serviceuri-meetme&amp;lt;/meetMeServiceURI&amp;gt;&lt;br /&gt;
      &amp;lt;abbreviatedDialURI&amp;gt;x-cisco-serviceuri-abbrdial&amp;lt;/abbreviatedDialURI&amp;gt;&lt;br /&gt;
      &amp;lt;rfc2543Hold&amp;gt;false&amp;lt;/rfc2543Hold&amp;gt;&lt;br /&gt;
      &amp;lt;callHoldRingback&amp;gt;2&amp;lt;/callHoldRingback&amp;gt;&lt;br /&gt;
      &amp;lt;localCfwdEnable&amp;gt;true&amp;lt;/localCfwdEnable&amp;gt;&lt;br /&gt;
      &amp;lt;semiAttendedTransfer&amp;gt;true&amp;lt;/semiAttendedTransfer&amp;gt;&lt;br /&gt;
      &amp;lt;anonymousCallBlock&amp;gt;2&amp;lt;/anonymousCallBlock&amp;gt;&lt;br /&gt;
      &amp;lt;callerIdBlocking&amp;gt;2&amp;lt;/callerIdBlocking&amp;gt;&lt;br /&gt;
      &amp;lt;dndControl&amp;gt;0&amp;lt;/dndControl&amp;gt;&lt;br /&gt;
      &amp;lt;remoteCcEnable&amp;gt;true&amp;lt;/remoteCcEnable&amp;gt;&lt;br /&gt;
    &amp;lt;/sipCallFeatures&amp;gt;&lt;br /&gt;
    &amp;lt;sipStack&amp;gt;&lt;br /&gt;
      &amp;lt;sipInviteRetx&amp;gt;6&amp;lt;/sipInviteRetx&amp;gt;&lt;br /&gt;
      &amp;lt;sipRetx&amp;gt;10&amp;lt;/sipRetx&amp;gt;&lt;br /&gt;
      &amp;lt;timerInviteExpires&amp;gt;180&amp;lt;/timerInviteExpires&amp;gt;&lt;br /&gt;
      &amp;lt;timerRegisterExpires&amp;gt;3600&amp;lt;/timerRegisterExpires&amp;gt;&lt;br /&gt;
      &amp;lt;timerRegisterDelta&amp;gt;5&amp;lt;/timerRegisterDelta&amp;gt;&lt;br /&gt;
      &amp;lt;timerKeepAliveExpires&amp;gt;120&amp;lt;/timerKeepAliveExpires&amp;gt;&lt;br /&gt;
      &amp;lt;timerSubscribeExpires&amp;gt;120&amp;lt;/timerSubscribeExpires&amp;gt;&lt;br /&gt;
      &amp;lt;timerSubscribeDelta&amp;gt;5&amp;lt;/timerSubscribeDelta&amp;gt;&lt;br /&gt;
      &amp;lt;timerT1&amp;gt;500&amp;lt;/timerT1&amp;gt;&lt;br /&gt;
      &amp;lt;timerT2&amp;gt;4000&amp;lt;/timerT2&amp;gt;&lt;br /&gt;
      &amp;lt;maxRedirects&amp;gt;70&amp;lt;/maxRedirects&amp;gt;&lt;br /&gt;
      &amp;lt;remotePartyID&amp;gt;true&amp;lt;/remotePartyID&amp;gt;&lt;br /&gt;
      &amp;lt;userInfo&amp;gt;None&amp;lt;/userInfo&amp;gt;&lt;br /&gt;
    &amp;lt;/sipStack&amp;gt;&lt;br /&gt;
    &amp;lt;autoAnswerTimer&amp;gt;1&amp;lt;/autoAnswerTimer&amp;gt;&lt;br /&gt;
    &amp;lt;autoAnswerAltBehavior&amp;gt;false&amp;lt;/autoAnswerAltBehavior&amp;gt;&lt;br /&gt;
    &amp;lt;autoAnswerOverride&amp;gt;true&amp;lt;/autoAnswerOverride&amp;gt;&lt;br /&gt;
    &amp;lt;transferOnhookEnabled&amp;gt;false&amp;lt;/transferOnhookEnabled&amp;gt;&lt;br /&gt;
    &amp;lt;enableVad&amp;gt;false&amp;lt;/enableVad&amp;gt;&lt;br /&gt;
    &amp;lt;preferredCodec&amp;gt;g711alaw&amp;lt;/preferredCodec&amp;gt;&lt;br /&gt;
    &amp;lt;dtmfAvtPayload&amp;gt;101&amp;lt;/dtmfAvtPayload&amp;gt;&lt;br /&gt;
    &amp;lt;dtmfDbLevel&amp;gt;3&amp;lt;/dtmfDbLevel&amp;gt;&lt;br /&gt;
    &amp;lt;dtmfOutofBand&amp;gt;avt&amp;lt;/dtmfOutofBand&amp;gt;&lt;br /&gt;
    &amp;lt;alwaysUsePrimeLine&amp;gt;false&amp;lt;/alwaysUsePrimeLine&amp;gt;&lt;br /&gt;
    &amp;lt;alwaysUsePrimeLineVoiceMail&amp;gt;false&amp;lt;/alwaysUsePrimeLineVoiceMail&amp;gt;&lt;br /&gt;
    &amp;lt;kpml&amp;gt;3&amp;lt;/kpml&amp;gt;&lt;br /&gt;
    &amp;lt;natEnabled&amp;gt;false&amp;lt;/natEnabled&amp;gt;&lt;br /&gt;
    &amp;lt;natAddress&amp;gt;&amp;lt;/natAddress&amp;gt;&lt;br /&gt;
    &amp;lt;phoneLabel&amp;gt;!!!NOM!!!&amp;lt;/phoneLabel&amp;gt;&lt;br /&gt;
    &amp;lt;stutterMsgWaiting&amp;gt;0&amp;lt;/stutterMsgWaiting&amp;gt;&lt;br /&gt;
    &amp;lt;callStats&amp;gt;false&amp;lt;/callStats&amp;gt;&lt;br /&gt;
    &amp;lt;silentPeriodBetweenCallWaitingBursts&amp;gt;10&amp;lt;/silentPeriodBetweenCallWaitingBursts&amp;gt;&lt;br /&gt;
    &amp;lt;disableLocalSpeedDialConfig&amp;gt;false&amp;lt;/disableLocalSpeedDialConfig&amp;gt;&lt;br /&gt;
    &amp;lt;startMediaPort&amp;gt;16384&amp;lt;/startMediaPort&amp;gt;&lt;br /&gt;
    &amp;lt;stopMediaPort&amp;gt;32766&amp;lt;/stopMediaPort&amp;gt;&lt;br /&gt;
    &amp;lt;sipLines&amp;gt;&lt;br /&gt;
      &amp;lt;line button=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;featureID&amp;gt;9&amp;lt;/featureID&amp;gt;&lt;br /&gt;
        &amp;lt;featureLabel&amp;gt;!!!UTILISATEUR!!!&amp;lt;/featureLabel&amp;gt;&lt;br /&gt;
        &amp;lt;proxy&amp;gt;USECALLMANAGER&amp;lt;/proxy&amp;gt;&lt;br /&gt;
        &amp;lt;port&amp;gt;5060&amp;lt;/port&amp;gt;&lt;br /&gt;
        &amp;lt;name&amp;gt;!!!UTILISATEUR!!!&amp;lt;/name&amp;gt;&lt;br /&gt;
        &amp;lt;displayName&amp;gt;!!!UTILISATEUR!!!&amp;lt;/displayName&amp;gt;&lt;br /&gt;
        &amp;lt;autoAnswer&amp;gt;&lt;br /&gt;
          &amp;lt;autoAnswerEnabled&amp;gt;2&amp;lt;/autoAnswerEnabled&amp;gt;&lt;br /&gt;
        &amp;lt;/autoAnswer&amp;gt;&lt;br /&gt;
        &amp;lt;callWaiting&amp;gt;3&amp;lt;/callWaiting&amp;gt;&lt;br /&gt;
        &amp;lt;authName&amp;gt;!!!UTILISATEUR!!!&amp;lt;/authName&amp;gt;&lt;br /&gt;
        &amp;lt;authPassword&amp;gt;!!!MOTDEPASSE!!!&amp;lt;/authPassword&amp;gt;&lt;br /&gt;
        &amp;lt;sharedLine&amp;gt;false&amp;lt;/sharedLine&amp;gt;&lt;br /&gt;
        &amp;lt;messageWaitingLampPolicy&amp;gt;1&amp;lt;/messageWaitingLampPolicy&amp;gt;&lt;br /&gt;
        &amp;lt;messagesNumber&amp;gt;*97&amp;lt;/messagesNumber&amp;gt;&lt;br /&gt;
        &amp;lt;ringSettingIdle&amp;gt;4&amp;lt;/ringSettingIdle&amp;gt;&lt;br /&gt;
        &amp;lt;ringSettingActive&amp;gt;5&amp;lt;/ringSettingActive&amp;gt;&lt;br /&gt;
        &amp;lt;contact&amp;gt;!!!UTILISATEUR!!!&amp;lt;/contact&amp;gt;&lt;br /&gt;
        &amp;lt;forwardCallInfoDisplay&amp;gt;&lt;br /&gt;
          &amp;lt;callerName&amp;gt;true&amp;lt;/callerName&amp;gt;&lt;br /&gt;
          &amp;lt;callerNumber&amp;gt;true&amp;lt;/callerNumber&amp;gt;&lt;br /&gt;
          &amp;lt;redirectedNumber&amp;gt;true&amp;lt;/redirectedNumber&amp;gt;&lt;br /&gt;
          &amp;lt;dialedNumber&amp;gt;true&amp;lt;/dialedNumber&amp;gt;&lt;br /&gt;
        &amp;lt;/forwardCallInfoDisplay&amp;gt;&lt;br /&gt;
      &amp;lt;/line&amp;gt;&lt;br /&gt;
    &amp;lt;/sipLines&amp;gt;&lt;br /&gt;
    &amp;lt;voipControlPort&amp;gt;5060&amp;lt;/voipControlPort&amp;gt;&lt;br /&gt;
    &amp;lt;dscpForAudio&amp;gt;184&amp;lt;/dscpForAudio&amp;gt;&lt;br /&gt;
    &amp;lt;ringSettingBusyStationPolicy&amp;gt;0&amp;lt;/ringSettingBusyStationPolicy&amp;gt;&lt;br /&gt;
    &amp;lt;dialTemplate&amp;gt;dialplan.xml&amp;lt;/dialTemplate&amp;gt;&lt;br /&gt;
  &amp;lt;/sipProfile&amp;gt;&lt;br /&gt;
  &amp;lt;commonProfile&amp;gt;&lt;br /&gt;
    &amp;lt;phonePassword&amp;gt;1234&amp;lt;/phonePassword&amp;gt;&lt;br /&gt;
    &amp;lt;backgroundImageAccess&amp;gt;true&amp;lt;/backgroundImageAccess&amp;gt;&lt;br /&gt;
    &amp;lt;callLogBlfEnabled&amp;gt;2&amp;lt;/callLogBlfEnabled&amp;gt;&lt;br /&gt;
  &amp;lt;/commonProfile&amp;gt;&lt;br /&gt;
  &amp;lt;loadInformation&amp;gt;!!!VERSION!!!&amp;lt;/loadInformation&amp;gt;&lt;br /&gt;
  &amp;lt;vendorConfig&amp;gt;&lt;br /&gt;
    &amp;lt;disableSpeaker&amp;gt;false&amp;lt;/disableSpeaker&amp;gt;&lt;br /&gt;
    &amp;lt;disableSpeakerAndHeadset&amp;gt;false&amp;lt;/disableSpeakerAndHeadset&amp;gt;&lt;br /&gt;
    &amp;lt;pcPort&amp;gt;1&amp;lt;/pcPort&amp;gt;&lt;br /&gt;
    &amp;lt;settingsAccess&amp;gt;1&amp;lt;/settingsAccess&amp;gt;&lt;br /&gt;
    &amp;lt;garp&amp;gt;0&amp;lt;/garp&amp;gt;&lt;br /&gt;
    &amp;lt;voiceVlanAccess&amp;gt;0&amp;lt;/voiceVlanAccess&amp;gt;&lt;br /&gt;
    &amp;lt;videoCapability&amp;gt;0&amp;lt;/videoCapability&amp;gt;&lt;br /&gt;
    &amp;lt;autoSelectLineEnable&amp;gt;0&amp;lt;/autoSelectLineEnable&amp;gt;&lt;br /&gt;
    &amp;lt;sshAccess&amp;gt;0&amp;lt;/sshAccess&amp;gt;&lt;br /&gt;
    &amp;lt;sshPort&amp;gt;22&amp;lt;/sshPort&amp;gt;&lt;br /&gt;
    &amp;lt;webAccess&amp;gt;0&amp;lt;/webAccess&amp;gt;&lt;br /&gt;
    &amp;lt;spanToPCPort&amp;gt;1&amp;lt;/spanToPCPort&amp;gt;&lt;br /&gt;
    &amp;lt;loggingDisplay&amp;gt;1&amp;lt;/loggingDisplay&amp;gt;&lt;br /&gt;
    &amp;lt;loadServer&amp;gt;&amp;lt;/loadServer&amp;gt;&lt;br /&gt;
  &amp;lt;/vendorConfig&amp;gt;&lt;br /&gt;
  &amp;lt;versionStamp&amp;gt;&amp;lt;/versionStamp&amp;gt;&lt;br /&gt;
  &amp;lt;userLocale&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;French_France&amp;lt;/name&amp;gt;&lt;br /&gt;
    &amp;lt;langCode&amp;gt;fr&amp;lt;/langCode&amp;gt;&lt;br /&gt;
  &amp;lt;/userLocale&amp;gt;&lt;br /&gt;
  &amp;lt;networkLocale&amp;gt;France&amp;lt;/networkLocale&amp;gt;&lt;br /&gt;
  &amp;lt;networkLocaleInfo&amp;gt;&lt;br /&gt;
    &amp;lt;name&amp;gt;France&amp;lt;/name&amp;gt;&lt;br /&gt;
  &amp;lt;/networkLocaleInfo&amp;gt;&lt;br /&gt;
  &amp;lt;deviceSecurityMode&amp;gt;1&amp;lt;/deviceSecurityMode&amp;gt;&lt;br /&gt;
  &amp;lt;authenticationURL&amp;gt;&amp;lt;/authenticationURL&amp;gt;&lt;br /&gt;
  &amp;lt;directoryURL&amp;gt;&amp;lt;/directoryURL&amp;gt;&lt;br /&gt;
  &amp;lt;idleURL&amp;gt;&amp;lt;/idleURL&amp;gt;&lt;br /&gt;
  &amp;lt;informationURL&amp;gt;&amp;lt;/informationURL&amp;gt;&lt;br /&gt;
  &amp;lt;messagesURL&amp;gt;&amp;lt;/messagesURL&amp;gt;&lt;br /&gt;
  &amp;lt;proxyServerURL&amp;gt;&amp;lt;/proxyServerURL&amp;gt;&lt;br /&gt;
  &amp;lt;servicesURL&amp;gt;&amp;lt;/servicesURL&amp;gt;&lt;br /&gt;
  &amp;lt;dscpForSCCPPhoneConfig&amp;gt;96&amp;lt;/dscpForSCCPPhoneConfig&amp;gt;&lt;br /&gt;
  &amp;lt;dscpForSCCPPhoneServices&amp;gt;0&amp;lt;/dscpForSCCPPhoneServices&amp;gt;&lt;br /&gt;
  &amp;lt;dscpForCm2Dvce&amp;gt;96&amp;lt;/dscpForCm2Dvce&amp;gt;&lt;br /&gt;
  &amp;lt;transportLayerProtocol&amp;gt;2&amp;lt;/transportLayerProtocol&amp;gt;&lt;br /&gt;
  &amp;lt;capfAuthMode&amp;gt;0&amp;lt;/capfAuthMode&amp;gt;&lt;br /&gt;
  &amp;lt;capfList&amp;gt;&lt;br /&gt;
    &amp;lt;capf&amp;gt;&lt;br /&gt;
      &amp;lt;phonePort&amp;gt;3804&amp;lt;/phonePort&amp;gt;&lt;br /&gt;
    &amp;lt;/capf&amp;gt;&lt;br /&gt;
  &amp;lt;/capfList&amp;gt;&lt;br /&gt;
  &amp;lt;certHash&amp;gt;&amp;lt;/certHash&amp;gt;&lt;br /&gt;
  &amp;lt;encrConfig&amp;gt;false&amp;lt;/encrConfig&amp;gt;&lt;br /&gt;
&amp;lt;/device&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Via un &amp;quot;rechercher et remplacer&amp;quot; ou à la main, remplacer :&lt;br /&gt;
* &amp;lt;code&amp;gt;!!!NTP!!!&amp;lt;/code&amp;gt; =&amp;gt; l'IP ou le FQDN de votre [[Ntp|Serveur NTP]]&lt;br /&gt;
* &amp;lt;code&amp;gt;!!!ASTERISK!!!&amp;lt;/code&amp;gt; =&amp;gt; l'IP ou le FQDN de votre Asterisk&lt;br /&gt;
* &amp;lt;code&amp;gt;!!!NOM!!!&amp;lt;/code&amp;gt; =&amp;gt; Le nom de votre téléphone&lt;br /&gt;
* &amp;lt;code&amp;gt;!!!UTILISATEUR!!!&amp;lt;/code&amp;gt; =&amp;gt; Le nom d'utilisateur de votre compte configuré sur Asterisk&lt;br /&gt;
* &amp;lt;code&amp;gt;!!!MOTDEPASSE!!!&amp;lt;/code&amp;gt; =&amp;gt; Le mot de passe de votre compte configuré sur Asterisk&lt;br /&gt;
* !!!VERSION!!! =&amp;gt; la version de votre micrologiciel =&amp;gt; &amp;lt;code&amp;gt;ls SIP*.loads| sed 's/\.loads//'&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{info|Quand vous sauvegardez vos fichiers de configuration, le téléphone IP va redémarrer automatiquement pour prendre les nouvelles configurations }}&lt;br /&gt;
&lt;br /&gt;
=Astuces sur le téléphone=&lt;br /&gt;
==Passer en mode admin==&lt;br /&gt;
Si vous voulez modifier un paramètre dans le menu de votre Cisco, il faut aller dans le menu et taper la combinaison &amp;lt;code&amp;gt;**#&amp;lt;/code&amp;gt; pour déverrouiller le petit cadenas (en haut à droite de votre écran) puis modifier.&lt;br /&gt;
==Redémarrer le téléphone==&lt;br /&gt;
Pour redémarrer le téléphone correctement , aller dans le menu du téléphone est taper la combinaison &amp;lt;code&amp;gt;**#**&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Liens=&lt;br /&gt;
* Micrologiciel (nécessite un compte Cisco) : https://software.cisco.com/download/navigator.html?mdfid=269065653&amp;amp;flowid=5246&lt;br /&gt;
* Tuto de configuration SIP : https://blog.kmp.or.at/cisco-ip-phone-7942-w-asterisk/&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Docker&amp;diff=808</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Docker&amp;diff=808"/>
		<updated>2018-03-07T16:35:59Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:conteneurisation]]&lt;br /&gt;
{{chantier}}&lt;br /&gt;
Docker permet de s’assurer de la portabilité de son application, en fournissant un moyen pour que quel que soit l’environnement d’exécution, son comportement soit le même.&lt;br /&gt;
&lt;br /&gt;
Le conteneur embarque tout l’environnement (bibliothèques, applicatifs, etc.), les développeurs peuvent développer dans un environnement d’exécution exactement identique à celui qui sera en production. Les opérateurs (sysadmin, netadmin) n’ont plus à s’inquiéter du fait qu’une mise à jour d’une dépendance puisse avoir un impact sur les autres applications.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
==Via Script==&lt;br /&gt;
Télécharger Curl&lt;br /&gt;
 apt install curl&lt;br /&gt;
&lt;br /&gt;
Utilisation du script d'installation de Docker&lt;br /&gt;
 curl https://get.docker.com/ | bash&lt;br /&gt;
&lt;br /&gt;
==Via APT==&lt;br /&gt;
Installation des paquets permettant la connexion à un dépôt HTTPS&lt;br /&gt;
 apt install apt-transport-https ca-certificates curl software-properties-common&lt;br /&gt;
Ajout du dépôt dans le ''sources.list''&lt;br /&gt;
 echo -e '#Dépôt docker\ndeb [arch=amd64] https://download.docker.com/linux/debian stretch stable' &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
Téléchargement et importation de la clé GPG du dépôt&lt;br /&gt;
 curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -&lt;br /&gt;
Mise à jour de la base ''apt''&lt;br /&gt;
 apt update&lt;br /&gt;
Installation du démon docker&lt;br /&gt;
 apt install docker-ce&lt;br /&gt;
&lt;br /&gt;
=Droits utilisateurs=&lt;br /&gt;
Si vous voulez utiliser un utilisateur non-root pour l'utilisation de Docker, ajouter le groupe docker a l'utilisateur :&lt;br /&gt;
 usermod -aG docker &amp;lt;UTILISATEUR&amp;gt;&lt;br /&gt;
puis fermer la session (utilisateur) puis l'allumer. &lt;br /&gt;
&lt;br /&gt;
{{attention|D’un point de vue sécurité : donner à un utilisateur l’accès à la commande docker, c’est lui donner un accès root au système hôte (qui exécute le démon docker).}}&lt;br /&gt;
&lt;br /&gt;
=Ou est docker?=&lt;br /&gt;
Le contenue des conteneurs docker et autre configuration sont stockés dans &amp;lt;code&amp;gt;/var/lib/docker&amp;lt;/code&amp;gt;. &lt;br /&gt;
{{astuce|Cette info est donné avec la commande &amp;lt;code&amp;gt;docker info&amp;lt;/code&amp;gt; dans la section &amp;lt;code&amp;gt;Root Dir&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
==Gestion des images==&lt;br /&gt;
===Récupérer une image sur le docker HUB===&lt;br /&gt;
 docker image pull &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
Ici, on va récupérer une image debian&lt;br /&gt;
 docker image pull debian&lt;br /&gt;
en donnant juste le nom &amp;quot;debian&amp;quot;, sans la vesion, docker a charger la dernière version de debian&lt;br /&gt;
Nous pouvons lui précisé la version voulu :&lt;br /&gt;
 docker image pull debian:strech&lt;br /&gt;
&lt;br /&gt;
Nous pouvons aller voir les images disponibles sur le site https://hub.docker.com&lt;br /&gt;
&lt;br /&gt;
===Lister les images===&lt;br /&gt;
 docker images ls&lt;br /&gt;
* &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt; permet de voir toutes les couches&lt;br /&gt;
&lt;br /&gt;
===Rechercher une image===&lt;br /&gt;
 docker search &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suprimer une image===&lt;br /&gt;
 docker rm &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Créer une image a partir d'un conteneur===&lt;br /&gt;
 docker commit &amp;lt;NOM DU CONTENEUR&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
{{attention|Cette pratique n'est pas recomandé, il faut utiliser le dockerfile}}&lt;br /&gt;
&lt;br /&gt;
===Ajouter un tag a l'image===&lt;br /&gt;
 docker image tag &amp;lt;NOM DE L'IMAGE&amp;gt;:&amp;lt;TAG&amp;gt; &amp;lt;NOUVEAU NOM DE L'IMAGE&amp;gt;:&amp;lt;NOUVEAU TAG&amp;gt;&lt;br /&gt;
le tag par defaut est : latest&lt;br /&gt;
&lt;br /&gt;
==Gestion des conteneurs==&lt;br /&gt;
===Lister les conteneurs===&lt;br /&gt;
Liste les conteneurs démarré&lt;br /&gt;
 docker container ls&lt;br /&gt;
ou&lt;br /&gt;
 docker container ps&lt;br /&gt;
ou&lt;br /&gt;
 docker ps&lt;br /&gt;
&lt;br /&gt;
Avec l'argument &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt; nous pouvons voir tous les conteneurs même arrêté.&lt;br /&gt;
&lt;br /&gt;
===Lancer un conteneur===&lt;br /&gt;
 docker container run &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
Exemple:&lt;br /&gt;
&lt;br /&gt;
On va lancer un conteneur qui va instencier debian&lt;br /&gt;
 docker container run debian&lt;br /&gt;
ou&lt;br /&gt;
 docker run debian&lt;br /&gt;
&lt;br /&gt;
Si nous listons les conteneurs, nous ne trouvons pas notre conteneur lancé... avec l'argument &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt;, nous voyons que notre conteneur est arrêté, cela est normal. Car le conteuneur a fini sont execution avec un &amp;quot;exit 0&amp;quot;.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ti&amp;lt;/code&amp;gt; permet d'intergéagire avec le conteneur.&lt;br /&gt;
 docker run -it debian&lt;br /&gt;
* &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt; permet de détacher le conteneur (daemon)&lt;br /&gt;
 docker run -it debian -d&lt;br /&gt;
Si nous listons les conteneurs, nous voyons que celui-ci tourne. Nous voyons aussi qu'il a un nom spécifique.&lt;br /&gt;
* &amp;lt;code&amp;gt;--name&amp;lt;/code&amp;gt; permet de donner un nom personalisé&lt;br /&gt;
* &amp;lt;code&amp;gt;--rm&amp;lt;/code&amp;gt; le conteneur est killé si il est en exit&lt;br /&gt;
&lt;br /&gt;
Nous pouvons modifier la commande par defaut avec cette commande&lt;br /&gt;
  docker run -it debian &amp;lt;COMMANDE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accèder au conteneur===&lt;br /&gt;
 docker container attach &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Démarer un conteneur===&lt;br /&gt;
 docker container start &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Arrêter un conteneur===&lt;br /&gt;
Arrêter le conteneur&lt;br /&gt;
 docker container stop &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
Killer le conteneur&lt;br /&gt;
 docker container kill &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
Killer tous les conteneur arrêté&lt;br /&gt;
 docker container prune&lt;br /&gt;
&lt;br /&gt;
===Lancer une commande au sein du conteneur===&lt;br /&gt;
 docker exec -it &amp;lt;NOM DU CONTENEUR&amp;gt; &amp;lt;COMMANDE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Supprimer un conteneur===&lt;br /&gt;
 docker container rm &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gestion des volumes==&lt;br /&gt;
Par défaut, les données dans Docker sont comme les conteneurs : elles sont éphémères. Il est possible d’avoir un conteneur et de le maintenir “à la main”, comme on le ferait avec une VM. Mais c’est perdre de vue ce qui est à la base de la conception de Docker : l’automatisation, la répétition, et la mutualisation des images de bases.&lt;br /&gt;
&lt;br /&gt;
Une mise à jour d’une image nécéssitera donc un nouveau conteneur pour pouvoir l’utiliser, par défaut avec des données vierges.&lt;br /&gt;
&lt;br /&gt;
Pour répondre à cette problématique de persistance des données, Docker met à disposition un mécanisme de volumes.&lt;br /&gt;
&lt;br /&gt;
Les volumes sont donc persistants.&lt;br /&gt;
&lt;br /&gt;
===Créer un volume===&lt;br /&gt;
 docker volume create &amp;lt;NOM DU VOLUME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Lister les volumes===&lt;br /&gt;
 docker volume ls&lt;br /&gt;
&lt;br /&gt;
===Supprimer un volume===&lt;br /&gt;
 docker volume rm &amp;lt;NOM DU VOLUME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Information sur le volume===&lt;br /&gt;
 docker volume inspect &amp;lt;NOM DU VOLUME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Monter un volume sur un conteneur===&lt;br /&gt;
* Montage read write&lt;br /&gt;
 docker run -it -v &amp;lt;NOM DU VOLUME&amp;gt;:&amp;lt;POINT DE MONTAGE DANS LE CONTENEUR&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
* Montage read-only&lt;br /&gt;
 docker run -it -v &amp;lt;NOM DU VOLUME&amp;gt;:&amp;lt;POINT DE MONTAGE DANS LE CONTENEUR&amp;gt;:ro &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Monter un dossier local sur un conteneur===&lt;br /&gt;
docker run -it -v &amp;lt;REPERTOIRE LOCAL&amp;gt;:&amp;lt;POINT DE MONTAGE DANS LE CONTENEUR&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gestion des réseaux==&lt;br /&gt;
* MODE BRIDGE : par defaut, nommé &amp;quot;docker0&amp;quot;&lt;br /&gt;
* MODE NONRESEAU : pas de reseau&lt;br /&gt;
* MODE CONTENEUR : utilise la pile réseau d'un autre conteneur&lt;br /&gt;
* MODE HOST : voire les interfaces du host&lt;br /&gt;
&lt;br /&gt;
===Créer un réseau===&lt;br /&gt;
 docker network create &amp;lt;NOM DU RESEAU&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Liste les réseau===&lt;br /&gt;
 docker network ls&lt;br /&gt;
&lt;br /&gt;
===Attacher un reseau au conteneur===&lt;br /&gt;
 docker run -itd --name &amp;lt;NOM DU CONTENEUR&amp;gt; --network &amp;lt;NOM DU RESEAU&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Exposition de port réseaux===&lt;br /&gt;
 docker container run -p &amp;lt;PORT HOTE&amp;gt;:&amp;lt;PORT CONTENEUR&amp;gt;/&amp;lt;UDP ou TCP&amp;gt; -d &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Dockerfile=&lt;br /&gt;
Permet de créer sa propre image&lt;br /&gt;
&lt;br /&gt;
==Fichier==&lt;br /&gt;
Créer un fichier &amp;lt;code&amp;gt;Dockerfile&amp;lt;/code&amp;gt;, ici nous allons personnaliser un debian&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#Créer une image a partir de debian jessie&lt;br /&gt;
FORM debian:jessie&lt;br /&gt;
#Informations&lt;br /&gt;
LABEL NOM Nicolas&lt;br /&gt;
#Execute une commande dans l'image&lt;br /&gt;
RUN apt update &amp;amp;&amp;amp; apt install -y vim &lt;br /&gt;
#Copier un fichier dans l'image&lt;br /&gt;
ADD titi /data/&lt;br /&gt;
#Défini une variable d'environement&lt;br /&gt;
ENV CONFIG /etc/&lt;br /&gt;
#Execute cette commande au lancement du conteneur&lt;br /&gt;
RUN /bin/bash&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Construction de l'image==&lt;br /&gt;
aller dans le dossier ou ce trouve votre &amp;lt;code&amp;gt;Dockerfile&amp;lt;/code&amp;gt; et taper cette commande:&lt;br /&gt;
 docker image build -t &amp;lt;NOM DE L'IMAGE&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
=Docker compose=&lt;br /&gt;
==Installation==&lt;br /&gt;
Télécharger le bin de docker-compose&lt;br /&gt;
 curl -L https://github.com/docker/compose/releases/download/1.13.0/docker-compose-`uname -s`-`uname -m` &amp;gt; /usr/local/bin/docker-compose&lt;br /&gt;
&lt;br /&gt;
Le rendre executable&lt;br /&gt;
 chmod +x /usr/local/bin/docker-compose&lt;br /&gt;
&lt;br /&gt;
==Utilisation==&lt;br /&gt;
Préparer un fichier &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt;. Ici on va préparer treafik (un reverse-proxy) :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
version: '2' &lt;br /&gt;
&lt;br /&gt;
services:&lt;br /&gt;
  proxy:&lt;br /&gt;
    image: traefik&lt;br /&gt;
    command: --web --docker --docker.domain=docker.local --logLevel=DEBUG&lt;br /&gt;
    networks:&lt;br /&gt;
      - webgateway&lt;br /&gt;
    ports:&lt;br /&gt;
      - &amp;quot;80:80&amp;quot;&lt;br /&gt;
      - &amp;quot;8080:8080&amp;quot;&lt;br /&gt;
    volumes:&lt;br /&gt;
      - /var/run/docker.sock:/var/run/docker.sock&lt;br /&gt;
      - /root/traefik/traefik.toml:/traefik.toml&lt;br /&gt;
&lt;br /&gt;
networks:&lt;br /&gt;
  webgateway:&lt;br /&gt;
    driver: bridge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour executer docker-compose&lt;br /&gt;
 docker-compose up -d&lt;br /&gt;
&lt;br /&gt;
=Stats=&lt;br /&gt;
Pour voir l'utilisation CPU et RAM des conteneurs&lt;br /&gt;
 docker stats&lt;br /&gt;
&lt;br /&gt;
=Sauvegarde=&lt;br /&gt;
==Exporter==&lt;br /&gt;
 docker container export &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Importer==&lt;br /&gt;
 docker container import &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Log=&lt;br /&gt;
 docker container log &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Publier une image sur son registry=&lt;br /&gt;
==Créer une registry==&lt;br /&gt;
Docker propose une registry dans Docker Hub&lt;br /&gt;
 docker run -p 5000:5000 -v /HDD/LOCAL:/var/lib/registry -d registry&lt;br /&gt;
===Source de la section===&lt;br /&gt;
* https://docs.docker.com/registry/configuration/&lt;br /&gt;
==Envoyer une image==&lt;br /&gt;
changer le tag&lt;br /&gt;
 docker tag httpd-alpine:latest 127.0.0.1:5000/httpd-alpine:latest&lt;br /&gt;
&lt;br /&gt;
puis envoyer&lt;br /&gt;
 docker push 127.0.0.1:5000/httpd-alpine:latest&lt;br /&gt;
&lt;br /&gt;
==Récupérer une image==&lt;br /&gt;
 docker pull 127.0.0.1:5000/httpd-alpine:latest&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Docker&amp;diff=807</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Docker&amp;diff=807"/>
		<updated>2018-03-07T15:46:28Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : /* Publier une image sur son registry */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:conteneurisation]]&lt;br /&gt;
{{chantier}}&lt;br /&gt;
Docker permet de s’assurer de la portabilité de son application, en fournissant un moyen pour que quel que soit l’environnement d’exécution, son comportement soit le même.&lt;br /&gt;
&lt;br /&gt;
Le conteneur embarque tout l’environnement (bibliothèques, applicatifs, etc.), les développeurs peuvent développer dans un environnement d’exécution exactement identique à celui qui sera en production. Les opérateurs (sysadmin, netadmin) n’ont plus à s’inquiéter du fait qu’une mise à jour d’une dépendance puisse avoir un impact sur les autres applications.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
==Via Script==&lt;br /&gt;
Télécharger Curl&lt;br /&gt;
 apt install curl&lt;br /&gt;
&lt;br /&gt;
Utilisation du script d'installation de Docker&lt;br /&gt;
 curl https://get.docker.com/ | bash&lt;br /&gt;
&lt;br /&gt;
==Via APT==&lt;br /&gt;
Installation des paquets permettant la connexion à un dépôt HTTPS&lt;br /&gt;
 apt install apt-transport-https ca-certificates curl software-properties-common&lt;br /&gt;
Ajout du dépôt dans le ''sources.list''&lt;br /&gt;
 echo -e '#Dépôt docker\ndeb [arch=amd64] https://download.docker.com/linux/debian stretch stable' &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
Téléchargement et importation de la clé GPG du dépôt&lt;br /&gt;
 curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -&lt;br /&gt;
Mise à jour de la base ''apt''&lt;br /&gt;
 apt update&lt;br /&gt;
Installation du démon docker&lt;br /&gt;
 apt install docker-ce&lt;br /&gt;
&lt;br /&gt;
=Droits utilisateurs=&lt;br /&gt;
Si vous voulez utiliser un utilisateur non-root pour l'utilisation de Docker, ajouter le groupe docker a l'utilisateur :&lt;br /&gt;
 usermod -aG docker &amp;lt;UTILISATEUR&amp;gt;&lt;br /&gt;
puis fermer la session (utilisateur) puis l'allumer. &lt;br /&gt;
&lt;br /&gt;
{{attention|D’un point de vue sécurité : donner à un utilisateur l’accès à la commande docker, c’est lui donner un accès root au système hôte (qui exécute le démon docker).}}&lt;br /&gt;
&lt;br /&gt;
=Ou est docker?=&lt;br /&gt;
Le contenue des conteneurs docker et autre configuration sont stockés dans &amp;lt;code&amp;gt;/var/lib/docker&amp;lt;/code&amp;gt;. &lt;br /&gt;
{{astuce|Cette info est donné avec la commande &amp;lt;code&amp;gt;docker info&amp;lt;/code&amp;gt; dans la section &amp;lt;code&amp;gt;Root Dir&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
==Gestion des images==&lt;br /&gt;
===Récupérer une image sur le docker HUB===&lt;br /&gt;
 docker image pull &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
Ici, on va récupérer une image debian&lt;br /&gt;
 docker image pull debian&lt;br /&gt;
en donnant juste le nom &amp;quot;debian&amp;quot;, sans la vesion, docker a charger la dernière version de debian&lt;br /&gt;
Nous pouvons lui précisé la version voulu :&lt;br /&gt;
 docker image pull debian:strech&lt;br /&gt;
&lt;br /&gt;
Nous pouvons aller voir les images disponibles sur le site https://hub.docker.com&lt;br /&gt;
&lt;br /&gt;
===Lister les images===&lt;br /&gt;
 docker images ls&lt;br /&gt;
* &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt; permet de voir toutes les couches&lt;br /&gt;
&lt;br /&gt;
===Rechercher une image===&lt;br /&gt;
 docker search &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suprimer une image===&lt;br /&gt;
 docker rm &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Créer une image a partir d'un conteneur===&lt;br /&gt;
 docker commit &amp;lt;NOM DU CONTENEUR&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
{{attention|Cette pratique n'est pas recomandé, il faut utiliser le dockerfile}}&lt;br /&gt;
&lt;br /&gt;
===Ajouter un tag a l'image===&lt;br /&gt;
 docker image tag &amp;lt;NOM DE L'IMAGE&amp;gt;:&amp;lt;TAG&amp;gt; &amp;lt;NOUVEAU NOM DE L'IMAGE&amp;gt;:&amp;lt;NOUVEAU TAG&amp;gt;&lt;br /&gt;
le tag par defaut est : latest&lt;br /&gt;
&lt;br /&gt;
==Gestion des conteneurs==&lt;br /&gt;
===Lister les conteneurs===&lt;br /&gt;
Liste les conteneurs démarré&lt;br /&gt;
 docker container ls&lt;br /&gt;
ou&lt;br /&gt;
 docker container ps&lt;br /&gt;
ou&lt;br /&gt;
 docker ps&lt;br /&gt;
&lt;br /&gt;
Avec l'argument &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt; nous pouvons voir tous les conteneurs même arrêté.&lt;br /&gt;
&lt;br /&gt;
===Lancer un conteneur===&lt;br /&gt;
 docker container run &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
Exemple:&lt;br /&gt;
&lt;br /&gt;
On va lancer un conteneur qui va instencier debian&lt;br /&gt;
 docker container run debian&lt;br /&gt;
ou&lt;br /&gt;
 docker run debian&lt;br /&gt;
&lt;br /&gt;
Si nous listons les conteneurs, nous ne trouvons pas notre conteneur lancé... avec l'argument &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt;, nous voyons que notre conteneur est arrêté, cela est normal. Car le conteuneur a fini sont execution avec un &amp;quot;exit 0&amp;quot;.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ti&amp;lt;/code&amp;gt; permet d'intergéagire avec le conteneur.&lt;br /&gt;
 docker run -it debian&lt;br /&gt;
* &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt; permet de détacher le conteneur (daemon)&lt;br /&gt;
 docker run -it debian -d&lt;br /&gt;
Si nous listons les conteneurs, nous voyons que celui-ci tourne. Nous voyons aussi qu'il a un nom spécifique.&lt;br /&gt;
* &amp;lt;code&amp;gt;--name&amp;lt;/code&amp;gt; permet de donner un nom personalisé&lt;br /&gt;
* &amp;lt;code&amp;gt;--rm&amp;lt;/code&amp;gt; le conteneur est killé si il est en exit&lt;br /&gt;
&lt;br /&gt;
Nous pouvons modifier la commande par defaut avec cette commande&lt;br /&gt;
  docker run -it debian &amp;lt;COMMANDE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accèder au conteneur===&lt;br /&gt;
 docker container attach &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Démarer un conteneur===&lt;br /&gt;
 docker container start &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Arrêter un conteneur===&lt;br /&gt;
Arrêter le conteneur&lt;br /&gt;
 docker container stop &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
Killer le conteneur&lt;br /&gt;
 docker container kill &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
Killer tous les conteneur arrêté&lt;br /&gt;
 docker container prune&lt;br /&gt;
&lt;br /&gt;
===Lancer une commande au sein du conteneur===&lt;br /&gt;
 docker exec -it &amp;lt;NOM DU CONTENEUR&amp;gt; &amp;lt;COMMANDE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Supprimer un conteneur===&lt;br /&gt;
 docker container rm &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gestion des volumes==&lt;br /&gt;
Par défaut, les données dans Docker sont comme les conteneurs : elles sont éphémères. Il est possible d’avoir un conteneur et de le maintenir “à la main”, comme on le ferait avec une VM. Mais c’est perdre de vue ce qui est à la base de la conception de Docker : l’automatisation, la répétition, et la mutualisation des images de bases.&lt;br /&gt;
&lt;br /&gt;
Une mise à jour d’une image nécéssitera donc un nouveau conteneur pour pouvoir l’utiliser, par défaut avec des données vierges.&lt;br /&gt;
&lt;br /&gt;
Pour répondre à cette problématique de persistance des données, Docker met à disposition un mécanisme de volumes.&lt;br /&gt;
&lt;br /&gt;
Les volumes sont donc persistants.&lt;br /&gt;
&lt;br /&gt;
===Créer un volume===&lt;br /&gt;
 docker volume create &amp;lt;NOM DU VOLUME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Lister les volumes===&lt;br /&gt;
 docker volume ls&lt;br /&gt;
&lt;br /&gt;
===Supprimer un volume===&lt;br /&gt;
 docker volume rm &amp;lt;NOM DU VOLUME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Information sur le volume===&lt;br /&gt;
 docker volume inspect &amp;lt;NOM DU VOLUME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Monter un volume sur un conteneur===&lt;br /&gt;
* Montage read write&lt;br /&gt;
 docker run -it -v &amp;lt;NOM DU VOLUME&amp;gt;:&amp;lt;POINT DE MONTAGE DANS LE CONTENEUR&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
* Montage read-only&lt;br /&gt;
 docker run -it -v &amp;lt;NOM DU VOLUME&amp;gt;:&amp;lt;POINT DE MONTAGE DANS LE CONTENEUR&amp;gt;:ro &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Monter un dossier local sur un conteneur===&lt;br /&gt;
docker run -it -v &amp;lt;REPERTOIRE LOCAL&amp;gt;:&amp;lt;POINT DE MONTAGE DANS LE CONTENEUR&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gestion des réseaux==&lt;br /&gt;
* MODE BRIDGE : par defaut, nommé &amp;quot;docker0&amp;quot;&lt;br /&gt;
* MODE NONRESEAU : pas de reseau&lt;br /&gt;
* MODE CONTENEUR : utilise la pile réseau d'un autre conteneur&lt;br /&gt;
* MODE HOST : voire les interfaces du host&lt;br /&gt;
&lt;br /&gt;
===Créer un réseau===&lt;br /&gt;
 docker network create &amp;lt;NOM DU RESEAU&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Liste les réseau===&lt;br /&gt;
 docker network ls&lt;br /&gt;
&lt;br /&gt;
===Attacher un reseau au conteneur===&lt;br /&gt;
 docker run -itd --name &amp;lt;NOM DU CONTENEUR&amp;gt; --network &amp;lt;NOM DU RESEAU&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Exposition de port réseaux===&lt;br /&gt;
 docker container run -p &amp;lt;PORT HOTE&amp;gt;:&amp;lt;PORT CONTENEUR&amp;gt;/&amp;lt;UDP ou TCP&amp;gt; -d &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Dockerfile=&lt;br /&gt;
Permet de créer sa propre image&lt;br /&gt;
&lt;br /&gt;
==Fichier==&lt;br /&gt;
Créer un fichier &amp;lt;code&amp;gt;Dockerfile&amp;lt;/code&amp;gt;, ici nous allons personnaliser un debian&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#Créer une image a partir de debian jessie&lt;br /&gt;
FORM debian:jessie&lt;br /&gt;
#Informations&lt;br /&gt;
LABEL NOM Nicolas&lt;br /&gt;
#Execute une commande dans l'image&lt;br /&gt;
RUN apt update &amp;amp;&amp;amp; apt install -y vim &lt;br /&gt;
#Copier un fichier dans l'image&lt;br /&gt;
ADD titi /data/&lt;br /&gt;
#Défini une variable d'environement&lt;br /&gt;
ENV CONFIG /etc/&lt;br /&gt;
#Execute cette commande au lancement du conteneur&lt;br /&gt;
RUN /bin/bash&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Construction de l'image==&lt;br /&gt;
aller dans le dossier ou ce trouve votre &amp;lt;code&amp;gt;Dockerfile&amp;lt;/code&amp;gt; et taper cette commande:&lt;br /&gt;
 docker image build -t &amp;lt;NOM DE L'IMAGE&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
=Docker compose=&lt;br /&gt;
==Installation==&lt;br /&gt;
Télécharger le bin de docker-compose&lt;br /&gt;
 curl -L https://github.com/docker/compose/releases/download/1.13.0/docker-compose-`uname -s`-`uname -m` &amp;gt; /usr/local/bin/docker-compose&lt;br /&gt;
&lt;br /&gt;
Le rendre executable&lt;br /&gt;
 chmod +x /usr/local/bin/docker-compose&lt;br /&gt;
&lt;br /&gt;
==Utilisation==&lt;br /&gt;
Préparer un fichier &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt;. Ici on va préparer treafik (un reverse-proxy) :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
version: '2' &lt;br /&gt;
&lt;br /&gt;
services:&lt;br /&gt;
  proxy:&lt;br /&gt;
    image: traefik&lt;br /&gt;
    command: --web --docker --docker.domain=docker.local --logLevel=DEBUG&lt;br /&gt;
    networks:&lt;br /&gt;
      - webgateway&lt;br /&gt;
    ports:&lt;br /&gt;
      - &amp;quot;80:80&amp;quot;&lt;br /&gt;
      - &amp;quot;8080:8080&amp;quot;&lt;br /&gt;
    volumes:&lt;br /&gt;
      - /var/run/docker.sock:/var/run/docker.sock&lt;br /&gt;
      - /root/traefik/traefik.toml:/traefik.toml&lt;br /&gt;
&lt;br /&gt;
networks:&lt;br /&gt;
  webgateway:&lt;br /&gt;
    driver: bridge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour executer docker-compose&lt;br /&gt;
 docker-compose up -d&lt;br /&gt;
&lt;br /&gt;
=Stats=&lt;br /&gt;
Pour voir l'utilisation CPU et RAM des conteneurs&lt;br /&gt;
 docker stats&lt;br /&gt;
&lt;br /&gt;
=Sauvegarde=&lt;br /&gt;
==Exporter==&lt;br /&gt;
 docker container export &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Importer==&lt;br /&gt;
 docker container import &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Log=&lt;br /&gt;
 docker container log &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Publier une image sur son registry=&lt;br /&gt;
==Créer une registry==&lt;br /&gt;
Docker propose une registry dans Docker Hub&lt;br /&gt;
 docker run -p 5000:5000 -v /HDD/LOCAL:/tmp/registry -d registry&lt;br /&gt;
&lt;br /&gt;
==Envoyer une image==&lt;br /&gt;
changer le tag&lt;br /&gt;
 docker tag httpd-alpine:latest 127.0.0.1:5000/httpd-alpine:latest&lt;br /&gt;
&lt;br /&gt;
puis envoyer&lt;br /&gt;
 docker push 127.0.0.1:5000/httpd-alpine:latest&lt;br /&gt;
&lt;br /&gt;
==Récupérer une image==&lt;br /&gt;
 docker pull 127.0.0.1:5000/httpd-alpine:latest&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Docker&amp;diff=805</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Docker&amp;diff=805"/>
		<updated>2018-03-07T15:06:09Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:conteneurisation]]&lt;br /&gt;
{{chantier}}&lt;br /&gt;
Docker permet de s’assurer de la portabilité de son application, en fournissant un moyen pour que quel que soit l’environnement d’exécution, son comportement soit le même.&lt;br /&gt;
&lt;br /&gt;
Le conteneur embarque tout l’environnement (bibliothèques, applicatifs, etc.), les développeurs peuvent développer dans un environnement d’exécution exactement identique à celui qui sera en production. Les opérateurs (sysadmin, netadmin) n’ont plus à s’inquiéter du fait qu’une mise à jour d’une dépendance puisse avoir un impact sur les autres applications.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
==Via Script==&lt;br /&gt;
Télécharger Curl&lt;br /&gt;
 apt install curl&lt;br /&gt;
&lt;br /&gt;
Utilisation du script d'installation de Docker&lt;br /&gt;
 curl https://get.docker.com/ | bash&lt;br /&gt;
&lt;br /&gt;
==Via APT==&lt;br /&gt;
Installation des paquets permettant la connexion à un dépôt HTTPS&lt;br /&gt;
 apt install apt-transport-https ca-certificates curl software-properties-common&lt;br /&gt;
Ajout du dépôt dans le ''sources.list''&lt;br /&gt;
 echo -e '#Dépôt docker\ndeb [arch=amd64] https://download.docker.com/linux/debian stretch stable' &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
Téléchargement et importation de la clé GPG du dépôt&lt;br /&gt;
 curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -&lt;br /&gt;
Mise à jour de la base ''apt''&lt;br /&gt;
 apt update&lt;br /&gt;
Installation du démon docker&lt;br /&gt;
 apt install docker-ce&lt;br /&gt;
&lt;br /&gt;
=Droits utilisateurs=&lt;br /&gt;
Si vous voulez utiliser un utilisateur non-root pour l'utilisation de Docker, ajouter le groupe docker a l'utilisateur :&lt;br /&gt;
 usermod -aG docker &amp;lt;UTILISATEUR&amp;gt;&lt;br /&gt;
puis fermer la session (utilisateur) puis l'allumer. &lt;br /&gt;
&lt;br /&gt;
{{attention|D’un point de vue sécurité : donner à un utilisateur l’accès à la commande docker, c’est lui donner un accès root au système hôte (qui exécute le démon docker).}}&lt;br /&gt;
&lt;br /&gt;
=Ou est docker?=&lt;br /&gt;
Le contenue des conteneurs docker et autre configuration sont stockés dans &amp;lt;code&amp;gt;/var/lib/docker&amp;lt;/code&amp;gt;. &lt;br /&gt;
{{astuce|Cette info est donné avec la commande &amp;lt;code&amp;gt;docker info&amp;lt;/code&amp;gt; dans la section &amp;lt;code&amp;gt;Root Dir&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
==Gestion des images==&lt;br /&gt;
===Récupérer une image sur le docker HUB===&lt;br /&gt;
 docker image pull &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
Ici, on va récupérer une image debian&lt;br /&gt;
 docker image pull debian&lt;br /&gt;
en donnant juste le nom &amp;quot;debian&amp;quot;, sans la vesion, docker a charger la dernière version de debian&lt;br /&gt;
Nous pouvons lui précisé la version voulu :&lt;br /&gt;
 docker image pull debian:strech&lt;br /&gt;
&lt;br /&gt;
Nous pouvons aller voir les images disponibles sur le site https://hub.docker.com&lt;br /&gt;
&lt;br /&gt;
===Lister les images===&lt;br /&gt;
 docker images ls&lt;br /&gt;
* &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt; permet de voir toutes les couches&lt;br /&gt;
&lt;br /&gt;
===Rechercher une image===&lt;br /&gt;
 docker search &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suprimer une image===&lt;br /&gt;
 docker rm &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Créer une image a partir d'un conteneur===&lt;br /&gt;
 docker commit &amp;lt;NOM DU CONTENEUR&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
{{attention|Cette pratique n'est pas recomandé, il faut utiliser le dockerfile}}&lt;br /&gt;
&lt;br /&gt;
===Ajouter un tag a l'image===&lt;br /&gt;
 docker image tag &amp;lt;NOM DE L'IMAGE&amp;gt;:&amp;lt;TAG&amp;gt; &amp;lt;NOUVEAU NOM DE L'IMAGE&amp;gt;:&amp;lt;NOUVEAU TAG&amp;gt;&lt;br /&gt;
le tag par defaut est : latest&lt;br /&gt;
&lt;br /&gt;
==Gestion des conteneurs==&lt;br /&gt;
===Lister les conteneurs===&lt;br /&gt;
Liste les conteneurs démarré&lt;br /&gt;
 docker container ls&lt;br /&gt;
ou&lt;br /&gt;
 docker container ps&lt;br /&gt;
ou&lt;br /&gt;
 docker ps&lt;br /&gt;
&lt;br /&gt;
Avec l'argument &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt; nous pouvons voir tous les conteneurs même arrêté.&lt;br /&gt;
&lt;br /&gt;
===Lancer un conteneur===&lt;br /&gt;
 docker container run &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
Exemple:&lt;br /&gt;
&lt;br /&gt;
On va lancer un conteneur qui va instencier debian&lt;br /&gt;
 docker container run debian&lt;br /&gt;
ou&lt;br /&gt;
 docker run debian&lt;br /&gt;
&lt;br /&gt;
Si nous listons les conteneurs, nous ne trouvons pas notre conteneur lancé... avec l'argument &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt;, nous voyons que notre conteneur est arrêté, cela est normal. Car le conteuneur a fini sont execution avec un &amp;quot;exit 0&amp;quot;.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ti&amp;lt;/code&amp;gt; permet d'intergéagire avec le conteneur.&lt;br /&gt;
 docker run -it debian&lt;br /&gt;
* &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt; permet de détacher le conteneur (daemon)&lt;br /&gt;
 docker run -it debian -d&lt;br /&gt;
Si nous listons les conteneurs, nous voyons que celui-ci tourne. Nous voyons aussi qu'il a un nom spécifique.&lt;br /&gt;
* &amp;lt;code&amp;gt;--name&amp;lt;/code&amp;gt; permet de donner un nom personalisé&lt;br /&gt;
* &amp;lt;code&amp;gt;--rm&amp;lt;/code&amp;gt; le conteneur est killé si il est en exit&lt;br /&gt;
&lt;br /&gt;
Nous pouvons modifier la commande par defaut avec cette commande&lt;br /&gt;
  docker run -it debian &amp;lt;COMMANDE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accèder au conteneur===&lt;br /&gt;
 docker container attach &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Démarer un conteneur===&lt;br /&gt;
 docker container start &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Arrêter un conteneur===&lt;br /&gt;
Arrêter le conteneur&lt;br /&gt;
 docker container stop &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
Killer le conteneur&lt;br /&gt;
 docker container kill &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
Killer tous les conteneur arrêté&lt;br /&gt;
 docker container prune&lt;br /&gt;
&lt;br /&gt;
===Lancer une commande au sein du conteneur===&lt;br /&gt;
 docker exec -it &amp;lt;NOM DU CONTENEUR&amp;gt; &amp;lt;COMMANDE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Supprimer un conteneur===&lt;br /&gt;
 docker container rm &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gestion des volumes==&lt;br /&gt;
Par défaut, les données dans Docker sont comme les conteneurs : elles sont éphémères. Il est possible d’avoir un conteneur et de le maintenir “à la main”, comme on le ferait avec une VM. Mais c’est perdre de vue ce qui est à la base de la conception de Docker : l’automatisation, la répétition, et la mutualisation des images de bases.&lt;br /&gt;
&lt;br /&gt;
Une mise à jour d’une image nécéssitera donc un nouveau conteneur pour pouvoir l’utiliser, par défaut avec des données vierges.&lt;br /&gt;
&lt;br /&gt;
Pour répondre à cette problématique de persistance des données, Docker met à disposition un mécanisme de volumes.&lt;br /&gt;
&lt;br /&gt;
Les volumes sont donc persistants.&lt;br /&gt;
&lt;br /&gt;
===Créer un volume===&lt;br /&gt;
 docker volume create &amp;lt;NOM DU VOLUME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Lister les volumes===&lt;br /&gt;
 docker volume ls&lt;br /&gt;
&lt;br /&gt;
===Supprimer un volume===&lt;br /&gt;
 docker volume rm &amp;lt;NOM DU VOLUME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Information sur le volume===&lt;br /&gt;
 docker volume inspect &amp;lt;NOM DU VOLUME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Monter un volume sur un conteneur===&lt;br /&gt;
* Montage read write&lt;br /&gt;
 docker run -it -v &amp;lt;NOM DU VOLUME&amp;gt;:&amp;lt;POINT DE MONTAGE DANS LE CONTENEUR&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
* Montage read-only&lt;br /&gt;
 docker run -it -v &amp;lt;NOM DU VOLUME&amp;gt;:&amp;lt;POINT DE MONTAGE DANS LE CONTENEUR&amp;gt;:ro &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Monter un dossier local sur un conteneur===&lt;br /&gt;
docker run -it -v &amp;lt;REPERTOIRE LOCAL&amp;gt;:&amp;lt;POINT DE MONTAGE DANS LE CONTENEUR&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gestion des réseaux==&lt;br /&gt;
* MODE BRIDGE : par defaut, nommé &amp;quot;docker0&amp;quot;&lt;br /&gt;
* MODE NONRESEAU : pas de reseau&lt;br /&gt;
* MODE CONTENEUR : utilise la pile réseau d'un autre conteneur&lt;br /&gt;
* MODE HOST : voire les interfaces du host&lt;br /&gt;
&lt;br /&gt;
===Créer un réseau===&lt;br /&gt;
 docker network create &amp;lt;NOM DU RESEAU&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Liste les réseau===&lt;br /&gt;
 docker network ls&lt;br /&gt;
&lt;br /&gt;
===Attacher un reseau au conteneur===&lt;br /&gt;
 docker run -itd --name &amp;lt;NOM DU CONTENEUR&amp;gt; --network &amp;lt;NOM DU RESEAU&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Exposition de port réseaux===&lt;br /&gt;
 docker container run -p &amp;lt;PORT HOTE&amp;gt;:&amp;lt;PORT CONTENEUR&amp;gt;/&amp;lt;UDP ou TCP&amp;gt; -d &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Dockerfile=&lt;br /&gt;
Permet de créer sa propre image&lt;br /&gt;
&lt;br /&gt;
==Fichier==&lt;br /&gt;
Créer un fichier &amp;lt;code&amp;gt;Dockerfile&amp;lt;/code&amp;gt;, ici nous allons personnaliser un debian&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#Créer une image a partir de debian jessie&lt;br /&gt;
FORM debian:jessie&lt;br /&gt;
#Informations&lt;br /&gt;
LABEL NOM Nicolas&lt;br /&gt;
#Execute une commande dans l'image&lt;br /&gt;
RUN apt update &amp;amp;&amp;amp; apt install -y vim &lt;br /&gt;
#Copier un fichier dans l'image&lt;br /&gt;
ADD titi /data/&lt;br /&gt;
#Défini une variable d'environement&lt;br /&gt;
ENV CONFIG /etc/&lt;br /&gt;
#Execute cette commande au lancement du conteneur&lt;br /&gt;
RUN /bin/bash&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Construction de l'image==&lt;br /&gt;
aller dans le dossier ou ce trouve votre &amp;lt;code&amp;gt;Dockerfile&amp;lt;/code&amp;gt; et taper cette commande:&lt;br /&gt;
 docker image build -t &amp;lt;NOM DE L'IMAGE&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
=Docker compose=&lt;br /&gt;
==Installation==&lt;br /&gt;
Télécharger le bin de docker-compose&lt;br /&gt;
 curl -L https://github.com/docker/compose/releases/download/1.13.0/docker-compose-`uname -s`-`uname -m` &amp;gt; /usr/local/bin/docker-compose&lt;br /&gt;
&lt;br /&gt;
Le rendre executable&lt;br /&gt;
 chmod +x /usr/local/bin/docker-compose&lt;br /&gt;
&lt;br /&gt;
==Utilisation==&lt;br /&gt;
Préparer un fichier &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt;. Ici on va préparer treafik (un reverse-proxy) :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
version: '2' &lt;br /&gt;
&lt;br /&gt;
services:&lt;br /&gt;
  proxy:&lt;br /&gt;
    image: traefik&lt;br /&gt;
    command: --web --docker --docker.domain=docker.local --logLevel=DEBUG&lt;br /&gt;
    networks:&lt;br /&gt;
      - webgateway&lt;br /&gt;
    ports:&lt;br /&gt;
      - &amp;quot;80:80&amp;quot;&lt;br /&gt;
      - &amp;quot;8080:8080&amp;quot;&lt;br /&gt;
    volumes:&lt;br /&gt;
      - /var/run/docker.sock:/var/run/docker.sock&lt;br /&gt;
      - /root/traefik/traefik.toml:/traefik.toml&lt;br /&gt;
&lt;br /&gt;
networks:&lt;br /&gt;
  webgateway:&lt;br /&gt;
    driver: bridge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour executer docker-compose&lt;br /&gt;
 docker-compose up -d&lt;br /&gt;
&lt;br /&gt;
=Stats=&lt;br /&gt;
Pour voir l'utilisation CPU et RAM des conteneurs&lt;br /&gt;
 docker stats&lt;br /&gt;
&lt;br /&gt;
=Sauvegarde=&lt;br /&gt;
==Exporter==&lt;br /&gt;
 docker container export &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Importer==&lt;br /&gt;
 docker container import &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Log=&lt;br /&gt;
 docker container log &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Publier une image sur son registry=&lt;br /&gt;
changer le tag&lt;br /&gt;
 docker tag httpd-alpine:latest 127.0.0.1:5000/httpd-alpine:latest&lt;br /&gt;
&lt;br /&gt;
puis envoyer&lt;br /&gt;
 docker push 127.0.0.1:5000/httpd-alpine:latest&lt;br /&gt;
&lt;br /&gt;
pour récupréré&lt;br /&gt;
 docker pull 127.0.0.1:5000/httpd-alpine:latest&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Gns3&amp;diff=804</id>
		<title>Gns3</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Gns3&amp;diff=804"/>
		<updated>2018-03-07T15:05:15Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:réseaux_linux]]&lt;br /&gt;
GNS3 est un logiciel de simulation réseau. il peut simuler des matériels de l'équipementier Cisco en exploitant de vrais IOS; exploiter ''qemu'' au travers du framework ''libvirt'' pour émuler des équipements; utiliser Docker ; intégrer des IOS tournant directement sous Linux afin d'ajouter des commutateurs de niveau 3 et plus encore. Nous nous trouvons donc avec des équipements virtuels qui réagissent comme des équipement physiques et qui, après avoir été reliés au monde réel par l'intermédiaire d'un pont sur la carte réseau de l'hôte, peuvent communiquer avec leurs pairs physiques de la même manière que de vrai équipements.&lt;br /&gt;
{{info|Testé avec la version 2.0 sortie le 02/05/2017}}&lt;br /&gt;
&lt;br /&gt;
=Téléchargement=&lt;br /&gt;
GNS3 fait partie de ces logiciels casses couilles qui nécessitent un compte pour être téléchargé. Comme je ne supporte pas cette pratique (d'autant plus que ça ce dit &amp;quot;logiciel libre&amp;quot; - pas très libre comme façon de faire), j'ai donc recensé les liens SourceForge du projet (c'est surtout utile si vous voulez le compiler vous-même ou si vous utiliser Mac OS X ou Windows). Pour les distributions Linux, vous trouverez la plupart du temps un binaire dans les dépôts.&lt;br /&gt;
&lt;br /&gt;
* '''Linux:''' https://sourceforge.net/projects/gns-3/files/Nightly%20Builds/2018-02-28/2.2/GNS3-2.2.0dev1.source.zip/download&lt;br /&gt;
* '''Mac:''' https://sourceforge.net/projects/gns-3/files/Releases/v2.1.3/GNS3-2.1.3.dmg/download&lt;br /&gt;
* '''Windows:''' https://sourceforge.net/projects/gns-3/files/Releases/v2.1.3/GNS3-2.1.3-all-in-one.exe/download&lt;br /&gt;
Dépôt du projet:&lt;br /&gt;
* https://sourceforge.net/projects/gns-3/files&lt;br /&gt;
* https://sourceforge.net/projects/gns-3/files/Nightly%20Builds/2018-02-28&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
La version de GNS3 disponible dans les dépôts Debian est affligeante, il s'agit d'une très ancienne version (elle ne permet même pas de supprimer les câbles que l'on connectes aux équipements...), nous allons donc ajouter le dépôt du projet pour être à jour.&lt;br /&gt;
&lt;br /&gt;
Depuis une installation via debootstrap, le paquet &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;dirmngr&amp;lt;/source&amp;gt; est absent et est nécessaire à l'importation des clés GPG. Il faut l'installer&lt;br /&gt;
 apt install dirmngr&lt;br /&gt;
{{info|Sous Debian Stretch, la dépendance ''libvirt-bin'' ne peut être satisfaite car il s'agit d'un paquet de transition qui s'est vu découpé en deux paquets nommés ''libvirt-daemon-system'' et ''libvirt-clients'' (voir [https://lists.debian.org/debian-user/2016/11/msg00518.html ici]). Le problème c'est que sans un paquet qui s'appel ''libvirt-bin'', GNS3 est impossible à installer (et c'est pas faute d'avoir essayé, merci le gestionnaire de paquet ''apt'' qui sait se comporter comme une grosse merde quand il le faut). J'ai donc mis au point deux solution pour palier au problème. L'une exploite ''apt'' et une bidouille avec son ''sources.list'', l'autre utilise directement ''dpkg'' pour contourner le problème. Je conseil vivement d'utiliser la solution ''apt''.}}&lt;br /&gt;
Le paquet ''telnet'' sera également utile pour la connexion aux équipements virtuels&lt;br /&gt;
 apt install telnet&lt;br /&gt;
&lt;br /&gt;
==Méthode APT==&lt;br /&gt;
Comme nous l'avons vu, le paquet ''libvirt-bin'' n'est pas disponible dans les dépôts Stretch suite à un changement programmé de stratégies de ses mainteneurs. Cependant il est présent dans ceux de Debian Jessie puisque il en été au stade de transition à ce moment là. Jessie n'étant pas très différent de Stretch, il n'y a pas de risques de stabilité en confondant ce paquet avec les autres. Nous allons donc combiner les dépôts de Jessie avec ceux de Stretch pour avoir ce qu'il nous faut. Pas de panique, ''apt'' n'étant pas si mal fait, il prendra toujours les paquets avec un numéros de version plus récent. Ce qui garanti que Seul les paquets absents de Stretch seront piochés dans Jessie.&lt;br /&gt;
&lt;br /&gt;
Ajouter les dépôts de GNS3 et Debian Jessie dans Stretch&lt;br /&gt;
 echo -e '#GNS3\ndeb http://ppa.launchpad.net/gns3/ppa/ubuntu xenial main\n#Debian jessie (pour avoir le paquet libvirt-bin)\ndeb http://ftp.fr.debian.org/debian jessie main' &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
Ajout de la clé GPG des dépôts GNS3&lt;br /&gt;
 apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F88F6D313016330404F710FC9A2FD067A2E3EF7B&lt;br /&gt;
Mise à jour de la base ''apt''&lt;br /&gt;
 apt update&lt;br /&gt;
Installation de GNS3&lt;br /&gt;
 apt install gns3-gui&lt;br /&gt;
Attribution des droits à l'outil ''ubridge''&lt;br /&gt;
 chmod 777 /usr/bin/ubridge&lt;br /&gt;
 setcap cap_net_admin,cap_net_raw=ep /usr/bin/ubridge&lt;br /&gt;
&lt;br /&gt;
==Méthode DPKG==&lt;br /&gt;
Cette méthode a été testé avec GNS3 1.5.3. Elle est fonctionnelle mais en plus de sa lourdeur, elle ne permet pas une monté en version simple. Elle reste toutefois plus abordable que la compilation depuis les sources et a été documenté car je me suis bien fait chier pour la pondre quand j'en avais besoin.&lt;br /&gt;
&lt;br /&gt;
Installation des dépendances de ''gns3-gui'' (j'ai enlevé gns3-server qui réclame ''libvirt-bin'' qui n'existe pas)&lt;br /&gt;
 apt install python3 python3-pyqt5 python3-pyqt5.qtsvg wireshark vinagre libc6 libexpat1 zlib1g&lt;br /&gt;
Installation des dépendances de ''gns3-server'' (j'ai enlevé ''libvirt-bin'' qui n'existe pas)&lt;br /&gt;
 apt install python3 vpcs qemu-system-x86 qemu-system-arm qemu-kvm cpulimit x11vnc xvfb libc6 libexpat1 zlib1g&lt;br /&gt;
Téléchargement des dépendances non disponibles dans les dépôts Debian&lt;br /&gt;
 wget http://ppa.launchpad.net/gns3/ppa/ubuntu/pool/main/d/dynamips/dynamips_0.2.16-1~xenial1_amd64.deb http://ppa.launchpad.net/gns3/ppa/ubuntu/pool/main/u/ubridge/ubridge_0.9.11-1~yakkety_amd64.deb&lt;br /&gt;
Installation manuelle des dépendances non disponibles dans les dépôts Debian (dépot GNS3) pour gns3-server&lt;br /&gt;
 dpkg -i dynamips_0.2.16-1~xenial1_amd64.deb ubridge_0.9.11-1~xenial_amd64.deb&lt;br /&gt;
Installation de ''gns3-server'' sans ''libvirt-bin''&lt;br /&gt;
 dpkg -i --ignore-depends=libvirt-bin gns3-server_1.5.4~xenial1_amd64.deb&lt;br /&gt;
Installation de ''gns3-gui''&lt;br /&gt;
 dpkg -i gns3-gui_1.5.3~xenial5_amd64.deb&lt;br /&gt;
À ce stade nous avons GNS3 d'installé. Ne criez pas victoire trop vite car libvirt-bin, bien que nous ayant bien fiat chier reste un élément indispensable pour émuler les équipements. Il va donc falloir l'installer si on veut bénéficier de l’intérêt de ce logiciel. Pour ce faire, soit vous optez pour l'installation des dépendances de ''libvirt-bin'' ainsi que lui même à la main, soit vous le récupérez depuis les dépôts Jessie comme avec la méthode ''apt''.&lt;br /&gt;
{{astuce|Les dépendances des ''.deb'' se trouvent avec la commande &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;dpkg-deb --info nom.deb&amp;lt;/source&amp;gt;. Lorsque ''apt'' ne veut plus rien savoir et qu'il casse les couille on nettoie tout avec la commande &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;apt --fix-broken install&amp;lt;/source&amp;gt;.}}&lt;br /&gt;
Attribution des droits à l'outil ''ubridge''&lt;br /&gt;
 chmod 777 /usr/bin/ubridge&lt;br /&gt;
 setcap cap_net_admin,cap_net_raw=ep /usr/bin/ubridge&lt;br /&gt;
&lt;br /&gt;
==Ajout d'un IOS Cisco==&lt;br /&gt;
Les IOS Cisco sont disponibles dans [https://{{SERVERNAME}}/fichiers/réseaux/cisco/ios/ nos fichiers]. Il sont à ajouter dans les modèles de routeur (vous trouverez, ce n'est pas très compliqué).&lt;br /&gt;
&lt;br /&gt;
=Lien avec le monde physique=&lt;br /&gt;
Faire son réseau virtuel est intéressant mais pouvoir exploiter ses atouts avec de vrais équipements, c'est encore mieux. Ainsi ont peut considérer sont PC hôte comme une baie avec plein d'équipement que l'on relie au réseau externe. Les possibilités sont infinies...&lt;br /&gt;
&lt;br /&gt;
Pour ce faire, il faut créer une interface de lien local ''tap'' et lui assigner une adresse IP. On ajoutera ensuite un &amp;quot;cloud&amp;quot; dans GNS3 (équipement avec l'icône de nuage) et on le configurera pour ajouter cette interface dans l'onglet ''NIO TAP''. Il faut rentrer le nom de l'interface dans le champ prévu à cet effet : ''tap0''.&lt;br /&gt;
{{info|Avec GNS3 2.0, l'étape avec l'onglet n'est plus nécessaire car le nuage ajoute automatiquement les interfaces qu'il trouve sur l'hôte.}}&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
Installation des dépendances&lt;br /&gt;
 apt install uml-utilities&lt;br /&gt;
Création de l'interface ''tap0'' et attribution d'une adresse IP&lt;br /&gt;
 tunctl -t tap0&lt;br /&gt;
 ip a a 10.200.200.1/30 dev tap0&lt;br /&gt;
 # ou via ifconfig du paquet net-tools&lt;br /&gt;
 # ifconfig tap0 10.200.200.1 netmask 255.255.255.252&lt;br /&gt;
&lt;br /&gt;
==Problèmes==&lt;br /&gt;
Cette étape aussi simple qu'il puisse y paraître peut générer des erreurs bloquantes. Un message disant quand le chemin de ubridge n'est pas valide ou qu'il n'est pas installer peu survenir. C'est un problème de permission (Tapez &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;ub+&amp;lt;tab&amp;gt;&amp;lt;/source&amp;gt; dans un terminal connecté avec l'utilisateur qui doit exécuter GNS3, si bash n'autocomplète pas en ''ubridge'', c'est que &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/usr/bin/ubridge&amp;lt;/source&amp;gt; n'a pas les bons droits. Sinon c'est que c'est un problème inconnu (ce qui ne serai pas surprenant vu comment c'est une galère à installer).&lt;br /&gt;
&lt;br /&gt;
Pour régler ça. Faire ceci:&lt;br /&gt;
 chown yohan:ubridge /usr/bin/ubridge&lt;br /&gt;
 setcap cap_net_admin,cap_net_raw=ep /usr/bin/ubridge&lt;br /&gt;
Ce problème peut également survenir après une mise à jour de GNS3.&lt;br /&gt;
&lt;br /&gt;
=Utilisation des Ios On Unix (IOU)=&lt;br /&gt;
IOS on UNIX est un IOS qui tourne comme un programme sur une distribution Linux (ça aurai dû donc s'appeler IOL, on est d'accord...). L’intérêt de cette solution est quelle permet de s'affranchir de la principale lacune de GNS3: l'impossibilité d'utiliser des commutateurs. Il me semble que sous Windows, GNS3 utilise ''qemu'' pour émuler une distribution Linux afin de faire tourner IOU, ce qui en diminue très grandement l'intérêt (en même temps quelle idée d'utiliser Windows...).&lt;br /&gt;
&lt;br /&gt;
Autre chose: Je n'ai pas réussi à déterminer si l'utilisation des IOU représentait une violation de licence car comme à sont habitude, Cisco pratique l’obscurantisme sur les détails et personne ne semble ce soucier de ce sujet...&lt;br /&gt;
&lt;br /&gt;
Les IOU sont des programmes 32bits (sans commentaires...), on est donc obligé d'ajouter une dépendance i386 dans notre chère distribution amd64.&lt;br /&gt;
 dpkg --add-architecture i386&lt;br /&gt;
&lt;br /&gt;
 apt update&lt;br /&gt;
''Attention si vous utilisez ma documentation sur [[apt-mirror]] et que des erreurs 404 s'affichent dû au fait que vous n'avez pas l'ensemble des dépôts i386 en local (même si c'est des dépôts qui n'ont rien avoir avec la choucroute), je vous recommande de changer de serveur DNS dans &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/resolv.conf&amp;lt;/source&amp;gt; le temps de l'installation sinon vous allez tourner en rond avec des erreurs de dépendance APT bien casse couille (c'est du vécu) sans comprendre la raison de toute cette merde.''&lt;br /&gt;
 apt install libssl1.1:i386&lt;br /&gt;
&lt;br /&gt;
Il faut désormais créer un lien symbolique pour que ce balo d'IOU la trouve (bah oui, c'est trop compliqué de pointer sur la bonne librairie hein, on va laisser l'utilisateur faire le travail à la place des dev de Cisco tien)&lt;br /&gt;
 ln -s /usr/lib/i386-linux-gnu/libcrypto.so.1.1 /usr/lib/libcrypto.so.4&lt;br /&gt;
Pour que IOU fonctionne, il faut une licence, que l'on va devoir générer. Mais avant toute chose il faut faire pointer notre interface de lien local sur notre nom d'hôte ainsi qu'un nom de domaine de chez Cisco (probablement un mécanisme de vérification de licence). Dans mon exemple, mon nom d'hôte est ''debian'', adaptez à votre cas.&lt;br /&gt;
 echo &amp;quot;debian&amp;quot; &amp;gt; /etc/hostname&lt;br /&gt;
 hostname debian&lt;br /&gt;
 echo -e &amp;quot;127.0.0.1 debian\n127.0.0.1 xml.cisco.com&amp;quot; &amp;gt;&amp;gt; /etc/hosts&lt;br /&gt;
Téléchargez le script de génération de licence&lt;br /&gt;
 wget --no-check-certificate https://doc.ycharbi.fr/fichiers/r%c3%a9seaux/cisco/iou/CiscoKeyGen.py&lt;br /&gt;
Générez la licence (python 2 et non 3)&lt;br /&gt;
 python2.7 CiscoKeyGen.py&lt;br /&gt;
Copiez la section suivante dans &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;~/.iourc&amp;lt;/source&amp;gt; (celle du script hein, pas la mienne, sinon ça va pas marcher gros bêta)&lt;br /&gt;
 [license]                                                                               &lt;br /&gt;
 debian = b0acc48944f31bd4;&lt;br /&gt;
Créez le répertoire d'accueil des IOU&lt;br /&gt;
 mkdir ~/GNS3/images/IOU/&lt;br /&gt;
Téléchargez des IOU (avec la commande suivante ou [https://{{SERVERNAME}}/fichiers/r%c3%a9seaux/cisco/iou/ ici])&lt;br /&gt;
 wget --no-check-certificate https://doc.ycharbi.fr/fichiers/r%c3%a9seaux/cisco/iou/i86bi-linux-l2-adventerprisek9-15.1a.bin https://doc.ycharbi.fr/fichiers/r%c3%a9seaux/cisco/iou/i86bi-linux-l3-adventerprisek9-15.2.4M1.bin -P ~/GNS3/images/IOU/&lt;br /&gt;
Les IOU étant des programmes, il faut leur donner les droits d'exécution&lt;br /&gt;
 chmod +x ~utilisateur/GNS3/images/IOU/*.bin&lt;br /&gt;
&lt;br /&gt;
La suite ce passe sous GNS3:&lt;br /&gt;
# Ajouter la licence dans GNS3 &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;Edit &amp;gt; Préférences &amp;gt; IOS on UNIX &amp;gt; Edit | Aller chercher ~/.iourc &amp;gt; Apply&amp;lt;/source&amp;gt;&lt;br /&gt;
# Ensuite, ajouter un modèle IOU dans GNS3 &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;Edit &amp;gt; Préférences &amp;gt; IOS on UNIX &amp;gt; IOU Device &amp;gt; New&amp;lt;/source&amp;gt;&lt;br /&gt;
# Profitez d'un truck qui déchire pour vos archis!&lt;br /&gt;
&lt;br /&gt;
==Sources de la section==&lt;br /&gt;
* '''Principale:''' Principale: https://nlabweb.wordpress.com/2016/04/06/running-cisco-switches-on-gns3/#more-147&lt;br /&gt;
* '''Problème de libcrypto.so.4:''' https://www.youtube.com/watch?v=chcHuF3nEoQ&lt;br /&gt;
* '''CiscoKeyGen:''' https://gist.github.com/paalfe/8edd82f780c650ae2b4a/archive/bd7b6b8a81c338359e6de4ff0ed0def9f7dc9146.zip&lt;br /&gt;
* '''Images IOU:''' https://drive.google.com/file/d/0B8tSmsEbVQs-bjVXY3VqMFJrc1E/view&lt;br /&gt;
==À creuser==&lt;br /&gt;
Se passer de GNS3 pour les IOU: https://myhowtosandprojects.blogspot.fr/2013/08/installing-and-running-iou-checking_10.html&lt;br /&gt;
&lt;br /&gt;
=Utilisation de Docker=&lt;br /&gt;
Docker est une solution de conteneurisation. Il permettra de créer des serveurs et des postes clients virtuelles ainsi que faire des analyses réseaux au sein de l'infra virtuelle. Docker n'est malheureusement pas dans les dépôts Debian. Il faut donc ajouter le dépôt officiel à la main&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
Pour l'installation de Docker, ce référer à la page suivante : [[Docker#Installation|Installation de Docker]]&lt;br /&gt;
&lt;br /&gt;
==Configuration==&lt;br /&gt;
Ajout de l'utilisateur se servant de GNS3 au groupe docker (sinon l'application ne pourra pas se connecter au démon docker pour intéragir avec les conteneurs)&lt;br /&gt;
 usermod -aG docker &amp;lt;VOTRE_UTILISATEUR_DE_GNS3&amp;gt;&lt;br /&gt;
Je n'ai pas trouver comment appliquer ces changements autrement qu'en redémarrant, navré&lt;br /&gt;
 reboot&lt;br /&gt;
Téléchargement d'un conteneur Kalilinux (en root)&lt;br /&gt;
 docker pull gns3/kalilinux&lt;br /&gt;
{{astuce|Il y a un bon nombre de conteneurs téléchargeables dans le [https://hub.docker.com/r/gns3/ dépôt Docker du projet GNS3]. Je vous conseils d'aller y faire un tour.}}&lt;br /&gt;
Il faut maintenant ajouter le conteneur à GNS3 en tant que modèle. Pour ce faire il faut aller dans les paramètres, dans la section dédié à Docker et faire du clickodrôme jusqu'à l'ajout de notre conteneur (le 3ème lien des sources montre la procédure officielle si vraiment vous êtes en galère).&lt;br /&gt;
&lt;br /&gt;
==Problèmes==&lt;br /&gt;
Tout comme ''ubridge'', Docker peut ne pas fonctionner pour cause de permission. Si la commande &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;docker ps&amp;lt;/source&amp;gt; renvoi une erreur de permission en tant que utilisateur utilisant GNS3, c'est qu'il n'appartient pas au groupe ''docker''.&lt;br /&gt;
&lt;br /&gt;
J'ai également eu l'erreur &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;Docker has returned an error: 304 b&amp;lt;/source&amp;gt; avec GNS3 1.5.3. Je n'ai pas eu le temps de résoudre cette erreur qui a été corrigé avec la mise à jour 2.0 de GNS3 et je n'ai pas de piste de résolution (ça semble être le problème de merde bien chiant à régler avec aucune aide sur Internet). Dieu vous garde si vous la rencontrez...&lt;br /&gt;
==Sources==&lt;br /&gt;
* https://store.docker.com/editions/community/docker-ce-server-debian?tab=description&lt;br /&gt;
* http://stackoverflow.com/questions/21871479/docker-cant-connect-to-docker-daemon&lt;br /&gt;
* https://docs.gns3.com/1KGkv1Vm5EgeDusk1qS1svacpuQ1ZUQSVK3XqJ01WKGc/index.html&lt;br /&gt;
* https://hub.docker.com/r/gns3/kalilinux/&lt;br /&gt;
=Sources=&lt;br /&gt;
* http://docs.gns3.com/1QXVIihk7dsOL7Xr7Bmz4zRzTsJ02wklfImGuHwTlaA4/&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Docker&amp;diff=803</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Docker&amp;diff=803"/>
		<updated>2018-03-07T15:03:02Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{chantier}}&lt;br /&gt;
Docker permet de s’assurer de la portabilité de son application, en fournissant un moyen pour que quel que soit l’environnement d’exécution, son comportement soit le même.&lt;br /&gt;
&lt;br /&gt;
Le conteneur embarque tout l’environnement (bibliothèques, applicatifs, etc.), les développeurs peuvent développer dans un environnement d’exécution exactement identique à celui qui sera en production. Les opérateurs (sysadmin, netadmin) n’ont plus à s’inquiéter du fait qu’une mise à jour d’une dépendance puisse avoir un impact sur les autres applications.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
==Via Script==&lt;br /&gt;
Télécharger Curl&lt;br /&gt;
 apt install curl&lt;br /&gt;
&lt;br /&gt;
Utilisation du script d'installation de Docker&lt;br /&gt;
 curl https://get.docker.com/ | bash&lt;br /&gt;
&lt;br /&gt;
==Via APT==&lt;br /&gt;
Installation des paquets permettant la connexion à un dépôt HTTPS&lt;br /&gt;
 apt install apt-transport-https ca-certificates curl software-properties-common&lt;br /&gt;
Ajout du dépôt dans le ''sources.list''&lt;br /&gt;
 echo -e '#Dépôt docker\ndeb [arch=amd64] https://download.docker.com/linux/debian stretch stable' &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
Téléchargement et importation de la clé GPG du dépôt&lt;br /&gt;
 curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -&lt;br /&gt;
Mise à jour de la base ''apt''&lt;br /&gt;
 apt update&lt;br /&gt;
Installation du démon docker&lt;br /&gt;
 apt install docker-ce&lt;br /&gt;
&lt;br /&gt;
=Droits utilisateurs=&lt;br /&gt;
Si vous voulez utiliser un utilisateur non-root pour l'utilisation de Docker, ajouter le groupe docker a l'utilisateur :&lt;br /&gt;
 usermod -aG docker &amp;lt;UTILISATEUR&amp;gt;&lt;br /&gt;
puis fermer la session (utilisateur) puis l'allumer. &lt;br /&gt;
&lt;br /&gt;
{{attention|D’un point de vue sécurité : donner à un utilisateur l’accès à la commande docker, c’est lui donner un accès root au système hôte (qui exécute le démon docker).}}&lt;br /&gt;
&lt;br /&gt;
=Ou est docker?=&lt;br /&gt;
Le contenue des conteneurs docker et autre configuration sont stockés dans &amp;lt;code&amp;gt;/var/lib/docker&amp;lt;/code&amp;gt;. &lt;br /&gt;
{{astuce|Cette info est donné avec la commande &amp;lt;code&amp;gt;docker info&amp;lt;/code&amp;gt; dans la section &amp;lt;code&amp;gt;Root Dir&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
==Gestion des images==&lt;br /&gt;
===Récupérer une image sur le docker HUB===&lt;br /&gt;
 docker image pull &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
Ici, on va récupérer une image debian&lt;br /&gt;
 docker image pull debian&lt;br /&gt;
en donnant juste le nom &amp;quot;debian&amp;quot;, sans la vesion, docker a charger la dernière version de debian&lt;br /&gt;
Nous pouvons lui précisé la version voulu :&lt;br /&gt;
 docker image pull debian:strech&lt;br /&gt;
&lt;br /&gt;
Nous pouvons aller voir les images disponibles sur le site https://hub.docker.com&lt;br /&gt;
&lt;br /&gt;
===Lister les images===&lt;br /&gt;
 docker images ls&lt;br /&gt;
* &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt; permet de voir toutes les couches&lt;br /&gt;
&lt;br /&gt;
===Rechercher une image===&lt;br /&gt;
 docker search &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suprimer une image===&lt;br /&gt;
 docker rm &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Créer une image a partir d'un conteneur===&lt;br /&gt;
 docker commit &amp;lt;NOM DU CONTENEUR&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
{{attention|Cette pratique n'est pas recomandé, il faut utiliser le dockerfile}}&lt;br /&gt;
&lt;br /&gt;
===Ajouter un tag a l'image===&lt;br /&gt;
 docker image tag &amp;lt;NOM DE L'IMAGE&amp;gt;:&amp;lt;TAG&amp;gt; &amp;lt;NOUVEAU NOM DE L'IMAGE&amp;gt;:&amp;lt;NOUVEAU TAG&amp;gt;&lt;br /&gt;
le tag par defaut est : latest&lt;br /&gt;
&lt;br /&gt;
==Gestion des conteneurs==&lt;br /&gt;
===Lister les conteneurs===&lt;br /&gt;
Liste les conteneurs démarré&lt;br /&gt;
 docker container ls&lt;br /&gt;
ou&lt;br /&gt;
 docker container ps&lt;br /&gt;
ou&lt;br /&gt;
 docker ps&lt;br /&gt;
&lt;br /&gt;
Avec l'argument &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt; nous pouvons voir tous les conteneurs même arrêté.&lt;br /&gt;
&lt;br /&gt;
===Lancer un conteneur===&lt;br /&gt;
 docker container run &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
Exemple:&lt;br /&gt;
&lt;br /&gt;
On va lancer un conteneur qui va instencier debian&lt;br /&gt;
 docker container run debian&lt;br /&gt;
ou&lt;br /&gt;
 docker run debian&lt;br /&gt;
&lt;br /&gt;
Si nous listons les conteneurs, nous ne trouvons pas notre conteneur lancé... avec l'argument &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt;, nous voyons que notre conteneur est arrêté, cela est normal. Car le conteuneur a fini sont execution avec un &amp;quot;exit 0&amp;quot;.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ti&amp;lt;/code&amp;gt; permet d'intergéagire avec le conteneur.&lt;br /&gt;
 docker run -it debian&lt;br /&gt;
* &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt; permet de détacher le conteneur (daemon)&lt;br /&gt;
 docker run -it debian -d&lt;br /&gt;
Si nous listons les conteneurs, nous voyons que celui-ci tourne. Nous voyons aussi qu'il a un nom spécifique.&lt;br /&gt;
* &amp;lt;code&amp;gt;--name&amp;lt;/code&amp;gt; permet de donner un nom personalisé&lt;br /&gt;
* &amp;lt;code&amp;gt;--rm&amp;lt;/code&amp;gt; le conteneur est killé si il est en exit&lt;br /&gt;
&lt;br /&gt;
Nous pouvons modifier la commande par defaut avec cette commande&lt;br /&gt;
  docker run -it debian &amp;lt;COMMANDE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accèder au conteneur===&lt;br /&gt;
 docker container attach &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Démarer un conteneur===&lt;br /&gt;
 docker container start &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Arrêter un conteneur===&lt;br /&gt;
Arrêter le conteneur&lt;br /&gt;
 docker container stop &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
Killer le conteneur&lt;br /&gt;
 docker container kill &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
Killer tous les conteneur arrêté&lt;br /&gt;
 docker container prune&lt;br /&gt;
&lt;br /&gt;
===Lancer une commande au sein du conteneur===&lt;br /&gt;
 docker exec -it &amp;lt;NOM DU CONTENEUR&amp;gt; &amp;lt;COMMANDE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Supprimer un conteneur===&lt;br /&gt;
 docker container rm &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gestion des volumes==&lt;br /&gt;
Par défaut, les données dans Docker sont comme les conteneurs : elles sont éphémères. Il est possible d’avoir un conteneur et de le maintenir “à la main”, comme on le ferait avec une VM. Mais c’est perdre de vue ce qui est à la base de la conception de Docker : l’automatisation, la répétition, et la mutualisation des images de bases.&lt;br /&gt;
&lt;br /&gt;
Une mise à jour d’une image nécéssitera donc un nouveau conteneur pour pouvoir l’utiliser, par défaut avec des données vierges.&lt;br /&gt;
&lt;br /&gt;
Pour répondre à cette problématique de persistance des données, Docker met à disposition un mécanisme de volumes.&lt;br /&gt;
&lt;br /&gt;
Les volumes sont donc persistants.&lt;br /&gt;
&lt;br /&gt;
===Créer un volume===&lt;br /&gt;
 docker volume create &amp;lt;NOM DU VOLUME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Lister les volumes===&lt;br /&gt;
 docker volume ls&lt;br /&gt;
&lt;br /&gt;
===Supprimer un volume===&lt;br /&gt;
 docker volume rm &amp;lt;NOM DU VOLUME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Information sur le volume===&lt;br /&gt;
 docker volume inspect &amp;lt;NOM DU VOLUME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Monter un volume sur un conteneur===&lt;br /&gt;
* Montage read write&lt;br /&gt;
 docker run -it -v &amp;lt;NOM DU VOLUME&amp;gt;:&amp;lt;POINT DE MONTAGE DANS LE CONTENEUR&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
* Montage read-only&lt;br /&gt;
 docker run -it -v &amp;lt;NOM DU VOLUME&amp;gt;:&amp;lt;POINT DE MONTAGE DANS LE CONTENEUR&amp;gt;:ro &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Monter un dossier local sur un conteneur===&lt;br /&gt;
docker run -it -v &amp;lt;REPERTOIRE LOCAL&amp;gt;:&amp;lt;POINT DE MONTAGE DANS LE CONTENEUR&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gestion des réseaux==&lt;br /&gt;
* MODE BRIDGE : par defaut, nommé &amp;quot;docker0&amp;quot;&lt;br /&gt;
* MODE NONRESEAU : pas de reseau&lt;br /&gt;
* MODE CONTENEUR : utilise la pile réseau d'un autre conteneur&lt;br /&gt;
* MODE HOST : voire les interfaces du host&lt;br /&gt;
&lt;br /&gt;
===Créer un réseau===&lt;br /&gt;
 docker network create &amp;lt;NOM DU RESEAU&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Liste les réseau===&lt;br /&gt;
 docker network ls&lt;br /&gt;
&lt;br /&gt;
===Attacher un reseau au conteneur===&lt;br /&gt;
 docker run -itd --name &amp;lt;NOM DU CONTENEUR&amp;gt; --network &amp;lt;NOM DU RESEAU&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Exposition de port réseaux===&lt;br /&gt;
 docker container run -p &amp;lt;PORT HOTE&amp;gt;:&amp;lt;PORT CONTENEUR&amp;gt;/&amp;lt;UDP ou TCP&amp;gt; -d &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Dockerfile=&lt;br /&gt;
Permet de créer sa propre image&lt;br /&gt;
&lt;br /&gt;
==Fichier==&lt;br /&gt;
Créer un fichier &amp;lt;code&amp;gt;Dockerfile&amp;lt;/code&amp;gt;, ici nous allons personnaliser un debian&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#Créer une image a partir de debian jessie&lt;br /&gt;
FORM debian:jessie&lt;br /&gt;
#Informations&lt;br /&gt;
LABEL NOM Nicolas&lt;br /&gt;
#Execute une commande dans l'image&lt;br /&gt;
RUN apt update &amp;amp;&amp;amp; apt install -y vim &lt;br /&gt;
#Copier un fichier dans l'image&lt;br /&gt;
ADD titi /data/&lt;br /&gt;
#Défini une variable d'environement&lt;br /&gt;
ENV CONFIG /etc/&lt;br /&gt;
#Execute cette commande au lancement du conteneur&lt;br /&gt;
RUN /bin/bash&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Construction de l'image==&lt;br /&gt;
aller dans le dossier ou ce trouve votre &amp;lt;code&amp;gt;Dockerfile&amp;lt;/code&amp;gt; et taper cette commande:&lt;br /&gt;
 docker image build -t &amp;lt;NOM DE L'IMAGE&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
=Docker compose=&lt;br /&gt;
==Installation==&lt;br /&gt;
Télécharger le bin de docker-compose&lt;br /&gt;
 curl -L https://github.com/docker/compose/releases/download/1.13.0/docker-compose-`uname -s`-`uname -m` &amp;gt; /usr/local/bin/docker-compose&lt;br /&gt;
&lt;br /&gt;
Le rendre executable&lt;br /&gt;
 chmod +x /usr/local/bin/docker-compose&lt;br /&gt;
&lt;br /&gt;
==Utilisation==&lt;br /&gt;
Préparer un fichier &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt;. Ici on va préparer treafik (un reverse-proxy) :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
version: '2' &lt;br /&gt;
&lt;br /&gt;
services:&lt;br /&gt;
  proxy:&lt;br /&gt;
    image: traefik&lt;br /&gt;
    command: --web --docker --docker.domain=docker.local --logLevel=DEBUG&lt;br /&gt;
    networks:&lt;br /&gt;
      - webgateway&lt;br /&gt;
    ports:&lt;br /&gt;
      - &amp;quot;80:80&amp;quot;&lt;br /&gt;
      - &amp;quot;8080:8080&amp;quot;&lt;br /&gt;
    volumes:&lt;br /&gt;
      - /var/run/docker.sock:/var/run/docker.sock&lt;br /&gt;
      - /root/traefik/traefik.toml:/traefik.toml&lt;br /&gt;
&lt;br /&gt;
networks:&lt;br /&gt;
  webgateway:&lt;br /&gt;
    driver: bridge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour executer docker-compose&lt;br /&gt;
 docker-compose up -d&lt;br /&gt;
&lt;br /&gt;
=Stats=&lt;br /&gt;
Pour voir l'utilisation CPU et RAM des conteneurs&lt;br /&gt;
 docker stats&lt;br /&gt;
&lt;br /&gt;
=Sauvegarde=&lt;br /&gt;
==Exporter==&lt;br /&gt;
 docker container export &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Importer==&lt;br /&gt;
 docker container import &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Log=&lt;br /&gt;
 docker container log &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Publier une image sur son registry=&lt;br /&gt;
changer le tag&lt;br /&gt;
 docker tag httpd-alpine:latest 127.0.0.1:5000/httpd-alpine:latest&lt;br /&gt;
&lt;br /&gt;
puis envoyer&lt;br /&gt;
 docker push 127.0.0.1:5000/httpd-alpine:latest&lt;br /&gt;
&lt;br /&gt;
pour récupréré&lt;br /&gt;
 docker pull 127.0.0.1:5000/httpd-alpine:latest&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Docker&amp;diff=802</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Docker&amp;diff=802"/>
		<updated>2018-03-07T14:59:49Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : /* Installation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{chantier}}&lt;br /&gt;
Docker permet de s’assurer de la portabilité de son application, en fournissant un moyen pour que quel que soit l’environnement d’exécution, son comportement soit le même.&lt;br /&gt;
&lt;br /&gt;
Le conteneur embarque tout l’environnement (bibliothèques, applicatifs, etc.), les développeurs peuvent développer dans un environnement d’exécution exactement identique à celui qui sera en production. Les opérateurs (sysadmin, netadmin) n’ont plus à s’inquiéter du fait qu’une mise à jour d’une dépendance puisse avoir un impact sur les autres applications.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
==Via Script==&lt;br /&gt;
Télécharger Curl&lt;br /&gt;
 apt install curl&lt;br /&gt;
&lt;br /&gt;
Utilisation du script d'installation de Docker&lt;br /&gt;
 curl https://get.docker.com/ | bash&lt;br /&gt;
&lt;br /&gt;
Si vous voulez utiliser un utilisateur non-root pour l'utilisation de Docker, ajouter le groupe docker a l'utilisateur :&lt;br /&gt;
 usermod -aG docker &amp;lt;UTILISATEUR&amp;gt;&lt;br /&gt;
puis fermer la session (utilisateur) puis l'allumer. &lt;br /&gt;
&lt;br /&gt;
{{attention|D’un point de vue sécurité : donner à un utilisateur l’accès à la commande docker, c’est lui donner un accès root au système hôte (qui exécute le démon docker).}}&lt;br /&gt;
&lt;br /&gt;
Le contenue des conteneurs docker et autre configuration sont stockés dans &amp;lt;code&amp;gt;/var/lib/docker&amp;lt;/code&amp;gt;. &lt;br /&gt;
{{astuce|Cette info est donné avec la commande &amp;lt;code&amp;gt;docker info&amp;lt;/code&amp;gt; dans la section &amp;lt;code&amp;gt;Root Dir&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
==Via APT==&lt;br /&gt;
Installation des paquets permettant la connexion à un dépôt HTTPS&lt;br /&gt;
 apt install apt-transport-https ca-certificates curl software-properties-common&lt;br /&gt;
Ajout du dépôt dans le ''sources.list''&lt;br /&gt;
 echo -e '#Dépôt docker\ndeb [arch=amd64] https://download.docker.com/linux/debian stretch stable' &amp;gt;&amp;gt; /etc/apt/sources.list&lt;br /&gt;
Téléchargement et importation de la clé GPG du dépôt&lt;br /&gt;
 curl -fsSL https://download.docker.com/linux/debian/gpg | apt-key add -&lt;br /&gt;
Mise à jour de la base ''apt''&lt;br /&gt;
 apt update&lt;br /&gt;
Installation du démon docker&lt;br /&gt;
 apt install docker-ce&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
==Gestion des images==&lt;br /&gt;
===Récupérer une image sur le docker HUB===&lt;br /&gt;
 docker image pull &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
Ici, on va récupérer une image debian&lt;br /&gt;
 docker image pull debian&lt;br /&gt;
en donnant juste le nom &amp;quot;debian&amp;quot;, sans la vesion, docker a charger la dernière version de debian&lt;br /&gt;
Nous pouvons lui précisé la version voulu :&lt;br /&gt;
 docker image pull debian:strech&lt;br /&gt;
&lt;br /&gt;
Nous pouvons aller voir les images disponibles sur le site https://hub.docker.com&lt;br /&gt;
&lt;br /&gt;
===Lister les images===&lt;br /&gt;
 docker images ls&lt;br /&gt;
* &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt; permet de voir toutes les couches&lt;br /&gt;
&lt;br /&gt;
===Rechercher une image===&lt;br /&gt;
 docker search &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suprimer une image===&lt;br /&gt;
 docker rm &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Créer une image a partir d'un conteneur===&lt;br /&gt;
 docker commit &amp;lt;NOM DU CONTENEUR&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
{{attention|Cette pratique n'est pas recomandé, il faut utiliser le dockerfile}}&lt;br /&gt;
&lt;br /&gt;
===Ajouter un tag a l'image===&lt;br /&gt;
 docker image tag &amp;lt;NOM DE L'IMAGE&amp;gt;:&amp;lt;TAG&amp;gt; &amp;lt;NOUVEAU NOM DE L'IMAGE&amp;gt;:&amp;lt;NOUVEAU TAG&amp;gt;&lt;br /&gt;
le tag par defaut est : latest&lt;br /&gt;
&lt;br /&gt;
==Gestion des conteneurs==&lt;br /&gt;
===Lister les conteneurs===&lt;br /&gt;
Liste les conteneurs démarré&lt;br /&gt;
 docker container ls&lt;br /&gt;
ou&lt;br /&gt;
 docker container ps&lt;br /&gt;
ou&lt;br /&gt;
 docker ps&lt;br /&gt;
&lt;br /&gt;
Avec l'argument &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt; nous pouvons voir tous les conteneurs même arrêté.&lt;br /&gt;
&lt;br /&gt;
===Lancer un conteneur===&lt;br /&gt;
 docker container run &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
Exemple:&lt;br /&gt;
&lt;br /&gt;
On va lancer un conteneur qui va instencier debian&lt;br /&gt;
 docker container run debian&lt;br /&gt;
ou&lt;br /&gt;
 docker run debian&lt;br /&gt;
&lt;br /&gt;
Si nous listons les conteneurs, nous ne trouvons pas notre conteneur lancé... avec l'argument &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt;, nous voyons que notre conteneur est arrêté, cela est normal. Car le conteuneur a fini sont execution avec un &amp;quot;exit 0&amp;quot;.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ti&amp;lt;/code&amp;gt; permet d'intergéagire avec le conteneur.&lt;br /&gt;
 docker run -it debian&lt;br /&gt;
* &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt; permet de détacher le conteneur (daemon)&lt;br /&gt;
 docker run -it debian -d&lt;br /&gt;
Si nous listons les conteneurs, nous voyons que celui-ci tourne. Nous voyons aussi qu'il a un nom spécifique.&lt;br /&gt;
* &amp;lt;code&amp;gt;--name&amp;lt;/code&amp;gt; permet de donner un nom personalisé&lt;br /&gt;
* &amp;lt;code&amp;gt;--rm&amp;lt;/code&amp;gt; le conteneur est killé si il est en exit&lt;br /&gt;
&lt;br /&gt;
Nous pouvons modifier la commande par defaut avec cette commande&lt;br /&gt;
  docker run -it debian &amp;lt;COMMANDE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accèder au conteneur===&lt;br /&gt;
 docker container attach &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Démarer un conteneur===&lt;br /&gt;
 docker container start &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Arrêter un conteneur===&lt;br /&gt;
Arrêter le conteneur&lt;br /&gt;
 docker container stop &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
Killer le conteneur&lt;br /&gt;
 docker container kill &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
Killer tous les conteneur arrêté&lt;br /&gt;
 docker container prune&lt;br /&gt;
&lt;br /&gt;
===Lancer une commande au sein du conteneur===&lt;br /&gt;
 docker exec -it &amp;lt;NOM DU CONTENEUR&amp;gt; &amp;lt;COMMANDE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Supprimer un conteneur===&lt;br /&gt;
 docker container rm &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gestion des volumes==&lt;br /&gt;
Par défaut, les données dans Docker sont comme les conteneurs : elles sont éphémères. Il est possible d’avoir un conteneur et de le maintenir “à la main”, comme on le ferait avec une VM. Mais c’est perdre de vue ce qui est à la base de la conception de Docker : l’automatisation, la répétition, et la mutualisation des images de bases.&lt;br /&gt;
&lt;br /&gt;
Une mise à jour d’une image nécéssitera donc un nouveau conteneur pour pouvoir l’utiliser, par défaut avec des données vierges.&lt;br /&gt;
&lt;br /&gt;
Pour répondre à cette problématique de persistance des données, Docker met à disposition un mécanisme de volumes.&lt;br /&gt;
&lt;br /&gt;
Les volumes sont donc persistants.&lt;br /&gt;
&lt;br /&gt;
===Créer un volume===&lt;br /&gt;
 docker volume create &amp;lt;NOM DU VOLUME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Lister les volumes===&lt;br /&gt;
 docker volume ls&lt;br /&gt;
&lt;br /&gt;
===Supprimer un volume===&lt;br /&gt;
 docker volume rm &amp;lt;NOM DU VOLUME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Information sur le volume===&lt;br /&gt;
 docker volume inspect &amp;lt;NOM DU VOLUME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Monter un volume sur un conteneur===&lt;br /&gt;
* Montage read write&lt;br /&gt;
 docker run -it -v &amp;lt;NOM DU VOLUME&amp;gt;:&amp;lt;POINT DE MONTAGE DANS LE CONTENEUR&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
* Montage read-only&lt;br /&gt;
 docker run -it -v &amp;lt;NOM DU VOLUME&amp;gt;:&amp;lt;POINT DE MONTAGE DANS LE CONTENEUR&amp;gt;:ro &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Monter un dossier local sur un conteneur===&lt;br /&gt;
docker run -it -v &amp;lt;REPERTOIRE LOCAL&amp;gt;:&amp;lt;POINT DE MONTAGE DANS LE CONTENEUR&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gestion des réseaux==&lt;br /&gt;
* MODE BRIDGE : par defaut, nommé &amp;quot;docker0&amp;quot;&lt;br /&gt;
* MODE NONRESEAU : pas de reseau&lt;br /&gt;
* MODE CONTENEUR : utilise la pile réseau d'un autre conteneur&lt;br /&gt;
* MODE HOST : voire les interfaces du host&lt;br /&gt;
&lt;br /&gt;
===Créer un réseau===&lt;br /&gt;
 docker network create &amp;lt;NOM DU RESEAU&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Liste les réseau===&lt;br /&gt;
 docker network ls&lt;br /&gt;
&lt;br /&gt;
===Attacher un reseau au conteneur===&lt;br /&gt;
 docker run -itd --name &amp;lt;NOM DU CONTENEUR&amp;gt; --network &amp;lt;NOM DU RESEAU&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Exposition de port réseaux===&lt;br /&gt;
 docker container run -p &amp;lt;PORT HOTE&amp;gt;:&amp;lt;PORT CONTENEUR&amp;gt;/&amp;lt;UDP ou TCP&amp;gt; -d &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Dockerfile=&lt;br /&gt;
Permet de créer sa propre image&lt;br /&gt;
&lt;br /&gt;
==Fichier==&lt;br /&gt;
Créer un fichier &amp;lt;code&amp;gt;Dockerfile&amp;lt;/code&amp;gt;, ici nous allons personnaliser un debian&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#Créer une image a partir de debian jessie&lt;br /&gt;
FORM debian:jessie&lt;br /&gt;
#Informations&lt;br /&gt;
LABEL NOM Nicolas&lt;br /&gt;
#Execute une commande dans l'image&lt;br /&gt;
RUN apt update &amp;amp;&amp;amp; apt install -y vim &lt;br /&gt;
#Copier un fichier dans l'image&lt;br /&gt;
ADD titi /data/&lt;br /&gt;
#Défini une variable d'environement&lt;br /&gt;
ENV CONFIG /etc/&lt;br /&gt;
#Execute cette commande au lancement du conteneur&lt;br /&gt;
RUN /bin/bash&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Construction de l'image==&lt;br /&gt;
aller dans le dossier ou ce trouve votre &amp;lt;code&amp;gt;Dockerfile&amp;lt;/code&amp;gt; et taper cette commande:&lt;br /&gt;
 docker image build -t &amp;lt;NOM DE L'IMAGE&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
=Docker compose=&lt;br /&gt;
==Installation==&lt;br /&gt;
Télécharger le bin de docker-compose&lt;br /&gt;
 curl -L https://github.com/docker/compose/releases/download/1.13.0/docker-compose-`uname -s`-`uname -m` &amp;gt; /usr/local/bin/docker-compose&lt;br /&gt;
&lt;br /&gt;
Le rendre executable&lt;br /&gt;
 chmod +x /usr/local/bin/docker-compose&lt;br /&gt;
&lt;br /&gt;
==Utilisation==&lt;br /&gt;
Préparer un fichier &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt;. Ici on va préparer treafik (un reverse-proxy) :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
version: '2' &lt;br /&gt;
&lt;br /&gt;
services:&lt;br /&gt;
  proxy:&lt;br /&gt;
    image: traefik&lt;br /&gt;
    command: --web --docker --docker.domain=docker.local --logLevel=DEBUG&lt;br /&gt;
    networks:&lt;br /&gt;
      - webgateway&lt;br /&gt;
    ports:&lt;br /&gt;
      - &amp;quot;80:80&amp;quot;&lt;br /&gt;
      - &amp;quot;8080:8080&amp;quot;&lt;br /&gt;
    volumes:&lt;br /&gt;
      - /var/run/docker.sock:/var/run/docker.sock&lt;br /&gt;
      - /root/traefik/traefik.toml:/traefik.toml&lt;br /&gt;
&lt;br /&gt;
networks:&lt;br /&gt;
  webgateway:&lt;br /&gt;
    driver: bridge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour executer docker-compose&lt;br /&gt;
 docker-compose up -d&lt;br /&gt;
&lt;br /&gt;
=Stats=&lt;br /&gt;
Pour voir l'utilisation CPU et RAM des conteneurs&lt;br /&gt;
 docker stats&lt;br /&gt;
&lt;br /&gt;
=Sauvegarde=&lt;br /&gt;
==Exporter==&lt;br /&gt;
 docker container export &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Importer==&lt;br /&gt;
 docker container import &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Log=&lt;br /&gt;
 docker container log &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Publier une image sur son registry=&lt;br /&gt;
changer le tag&lt;br /&gt;
 docker tag httpd-alpine:latest 127.0.0.1:5000/httpd-alpine:latest&lt;br /&gt;
&lt;br /&gt;
puis envoyer&lt;br /&gt;
 docker push 127.0.0.1:5000/httpd-alpine:latest&lt;br /&gt;
&lt;br /&gt;
pour récupréré&lt;br /&gt;
 docker pull 127.0.0.1:5000/httpd-alpine:latest&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Docker&amp;diff=801</id>
		<title>Docker</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Docker&amp;diff=801"/>
		<updated>2018-03-07T14:24:33Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Page créée avec « {{chantier}} Docker permet de s’assurer de la portabilité de son application, en fournissant un moyen pour que quel que soit l’environnement d’exécution, son compo... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{chantier}}&lt;br /&gt;
Docker permet de s’assurer de la portabilité de son application, en fournissant un moyen pour que quel que soit l’environnement d’exécution, son comportement soit le même.&lt;br /&gt;
&lt;br /&gt;
Le conteneur embarque tout l’environnement (bibliothèques, applicatifs, etc.), les développeurs peuvent développer dans un environnement d’exécution exactement identique à celui qui sera en production. Les opérateurs (sysadmin, netadmin) n’ont plus à s’inquiéter du fait qu’une mise à jour d’une dépendance puisse avoir un impact sur les autres applications.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
Télécharger Curl&lt;br /&gt;
 apt install curl&lt;br /&gt;
&lt;br /&gt;
Utilisation du script d'installation de Docker&lt;br /&gt;
 curl https://get.docker.com/ | bash&lt;br /&gt;
&lt;br /&gt;
Si vous voulez utiliser un utilisateur non-root pour l'utilisation de Docker, ajouter le groupe docker a l'utilisateur :&lt;br /&gt;
 usermod -aG docker &amp;lt;UTILISATEUR&amp;gt;&lt;br /&gt;
puis fermer la session (utilisateur) puis l'allumer. &lt;br /&gt;
&lt;br /&gt;
{{attention|D’un point de vue sécurité : donner à un utilisateur l’accès à la commande docker, c’est lui donner un accès root au système hôte (qui exécute le démon docker).}}&lt;br /&gt;
&lt;br /&gt;
Le contenue des conteneurs docker et autre configuration sont stockés dans &amp;lt;code&amp;gt;/var/lib/docker&amp;lt;/code&amp;gt;. &lt;br /&gt;
{{astuce|Cette info est donné avec la commande &amp;lt;code&amp;gt;docker info&amp;lt;/code&amp;gt; dans la section &amp;lt;code&amp;gt;Root Dir&amp;lt;/code&amp;gt;.}}&lt;br /&gt;
&lt;br /&gt;
=Utilisation=&lt;br /&gt;
==Gestion des images==&lt;br /&gt;
===Récupérer une image sur le docker HUB===&lt;br /&gt;
 docker image pull &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
Ici, on va récupérer une image debian&lt;br /&gt;
 docker image pull debian&lt;br /&gt;
en donnant juste le nom &amp;quot;debian&amp;quot;, sans la vesion, docker a charger la dernière version de debian&lt;br /&gt;
Nous pouvons lui précisé la version voulu :&lt;br /&gt;
 docker image pull debian:strech&lt;br /&gt;
&lt;br /&gt;
Nous pouvons aller voir les images disponibles sur le site https://hub.docker.com&lt;br /&gt;
&lt;br /&gt;
===Lister les images===&lt;br /&gt;
 docker images ls&lt;br /&gt;
* &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt; permet de voir toutes les couches&lt;br /&gt;
&lt;br /&gt;
===Rechercher une image===&lt;br /&gt;
 docker search &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Suprimer une image===&lt;br /&gt;
 docker rm &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Créer une image a partir d'un conteneur===&lt;br /&gt;
 docker commit &amp;lt;NOM DU CONTENEUR&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
{{attention|Cette pratique n'est pas recomandé, il faut utiliser le dockerfile}}&lt;br /&gt;
&lt;br /&gt;
===Ajouter un tag a l'image===&lt;br /&gt;
 docker image tag &amp;lt;NOM DE L'IMAGE&amp;gt;:&amp;lt;TAG&amp;gt; &amp;lt;NOUVEAU NOM DE L'IMAGE&amp;gt;:&amp;lt;NOUVEAU TAG&amp;gt;&lt;br /&gt;
le tag par defaut est : latest&lt;br /&gt;
&lt;br /&gt;
==Gestion des conteneurs==&lt;br /&gt;
===Lister les conteneurs===&lt;br /&gt;
Liste les conteneurs démarré&lt;br /&gt;
 docker container ls&lt;br /&gt;
ou&lt;br /&gt;
 docker container ps&lt;br /&gt;
ou&lt;br /&gt;
 docker ps&lt;br /&gt;
&lt;br /&gt;
Avec l'argument &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt; nous pouvons voir tous les conteneurs même arrêté.&lt;br /&gt;
&lt;br /&gt;
===Lancer un conteneur===&lt;br /&gt;
 docker container run &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
Exemple:&lt;br /&gt;
&lt;br /&gt;
On va lancer un conteneur qui va instencier debian&lt;br /&gt;
 docker container run debian&lt;br /&gt;
ou&lt;br /&gt;
 docker run debian&lt;br /&gt;
&lt;br /&gt;
Si nous listons les conteneurs, nous ne trouvons pas notre conteneur lancé... avec l'argument &amp;lt;code&amp;gt;-a&amp;lt;/code&amp;gt;, nous voyons que notre conteneur est arrêté, cela est normal. Car le conteuneur a fini sont execution avec un &amp;quot;exit 0&amp;quot;.&lt;br /&gt;
* &amp;lt;code&amp;gt;-ti&amp;lt;/code&amp;gt; permet d'intergéagire avec le conteneur.&lt;br /&gt;
 docker run -it debian&lt;br /&gt;
* &amp;lt;code&amp;gt;-d&amp;lt;/code&amp;gt; permet de détacher le conteneur (daemon)&lt;br /&gt;
 docker run -it debian -d&lt;br /&gt;
Si nous listons les conteneurs, nous voyons que celui-ci tourne. Nous voyons aussi qu'il a un nom spécifique.&lt;br /&gt;
* &amp;lt;code&amp;gt;--name&amp;lt;/code&amp;gt; permet de donner un nom personalisé&lt;br /&gt;
* &amp;lt;code&amp;gt;--rm&amp;lt;/code&amp;gt; le conteneur est killé si il est en exit&lt;br /&gt;
&lt;br /&gt;
Nous pouvons modifier la commande par defaut avec cette commande&lt;br /&gt;
  docker run -it debian &amp;lt;COMMANDE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Accèder au conteneur===&lt;br /&gt;
 docker container attach &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Démarer un conteneur===&lt;br /&gt;
 docker container start &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Arrêter un conteneur===&lt;br /&gt;
Arrêter le conteneur&lt;br /&gt;
 docker container stop &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
Killer le conteneur&lt;br /&gt;
 docker container kill &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
Killer tous les conteneur arrêté&lt;br /&gt;
 docker container prune&lt;br /&gt;
&lt;br /&gt;
===Lancer une commande au sein du conteneur===&lt;br /&gt;
 docker exec -it &amp;lt;NOM DU CONTENEUR&amp;gt; &amp;lt;COMMANDE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Supprimer un conteneur===&lt;br /&gt;
 docker container rm &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gestion des volumes==&lt;br /&gt;
Par défaut, les données dans Docker sont comme les conteneurs : elles sont éphémères. Il est possible d’avoir un conteneur et de le maintenir “à la main”, comme on le ferait avec une VM. Mais c’est perdre de vue ce qui est à la base de la conception de Docker : l’automatisation, la répétition, et la mutualisation des images de bases.&lt;br /&gt;
&lt;br /&gt;
Une mise à jour d’une image nécéssitera donc un nouveau conteneur pour pouvoir l’utiliser, par défaut avec des données vierges.&lt;br /&gt;
&lt;br /&gt;
Pour répondre à cette problématique de persistance des données, Docker met à disposition un mécanisme de volumes.&lt;br /&gt;
&lt;br /&gt;
Les volumes sont donc persistants.&lt;br /&gt;
&lt;br /&gt;
===Créer un volume===&lt;br /&gt;
 docker volume create &amp;lt;NOM DU VOLUME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Lister les volumes===&lt;br /&gt;
 docker volume ls&lt;br /&gt;
&lt;br /&gt;
===Supprimer un volume===&lt;br /&gt;
 docker volume rm &amp;lt;NOM DU VOLUME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Information sur le volume===&lt;br /&gt;
 docker volume inspect &amp;lt;NOM DU VOLUME&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Monter un volume sur un conteneur===&lt;br /&gt;
* Montage read write&lt;br /&gt;
 docker run -it -v &amp;lt;NOM DU VOLUME&amp;gt;:&amp;lt;POINT DE MONTAGE DANS LE CONTENEUR&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
* Montage read-only&lt;br /&gt;
 docker run -it -v &amp;lt;NOM DU VOLUME&amp;gt;:&amp;lt;POINT DE MONTAGE DANS LE CONTENEUR&amp;gt;:ro &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Monter un dossier local sur un conteneur===&lt;br /&gt;
docker run -it -v &amp;lt;REPERTOIRE LOCAL&amp;gt;:&amp;lt;POINT DE MONTAGE DANS LE CONTENEUR&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Gestion des réseaux==&lt;br /&gt;
* MODE BRIDGE : par defaut, nommé &amp;quot;docker0&amp;quot;&lt;br /&gt;
* MODE NONRESEAU : pas de reseau&lt;br /&gt;
* MODE CONTENEUR : utilise la pile réseau d'un autre conteneur&lt;br /&gt;
* MODE HOST : voire les interfaces du host&lt;br /&gt;
&lt;br /&gt;
===Créer un réseau===&lt;br /&gt;
 docker network create &amp;lt;NOM DU RESEAU&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Liste les réseau===&lt;br /&gt;
 docker network ls&lt;br /&gt;
&lt;br /&gt;
===Attacher un reseau au conteneur===&lt;br /&gt;
 docker run -itd --name &amp;lt;NOM DU CONTENEUR&amp;gt; --network &amp;lt;NOM DU RESEAU&amp;gt; &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Exposition de port réseaux===&lt;br /&gt;
 docker container run -p &amp;lt;PORT HOTE&amp;gt;:&amp;lt;PORT CONTENEUR&amp;gt;/&amp;lt;UDP ou TCP&amp;gt; -d &amp;lt;NOM DE L'IMAGE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Dockerfile=&lt;br /&gt;
Permet de créer sa propre image&lt;br /&gt;
&lt;br /&gt;
==Fichier==&lt;br /&gt;
Créer un fichier &amp;lt;code&amp;gt;Dockerfile&amp;lt;/code&amp;gt;, ici nous allons personnaliser un debian&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#Créer une image a partir de debian jessie&lt;br /&gt;
FORM debian:jessie&lt;br /&gt;
#Informations&lt;br /&gt;
LABEL NOM Nicolas&lt;br /&gt;
#Execute une commande dans l'image&lt;br /&gt;
RUN apt update &amp;amp;&amp;amp; apt install -y vim &lt;br /&gt;
#Copier un fichier dans l'image&lt;br /&gt;
ADD titi /data/&lt;br /&gt;
#Défini une variable d'environement&lt;br /&gt;
ENV CONFIG /etc/&lt;br /&gt;
#Execute cette commande au lancement du conteneur&lt;br /&gt;
RUN /bin/bash&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Construction de l'image==&lt;br /&gt;
aller dans le dossier ou ce trouve votre &amp;lt;code&amp;gt;Dockerfile&amp;lt;/code&amp;gt; et taper cette commande:&lt;br /&gt;
 docker image build -t &amp;lt;NOM DE L'IMAGE&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
=Docker compose=&lt;br /&gt;
==Installation==&lt;br /&gt;
Télécharger le bin de docker-compose&lt;br /&gt;
 curl -L https://github.com/docker/compose/releases/download/1.13.0/docker-compose-`uname -s`-`uname -m` &amp;gt; /usr/local/bin/docker-compose&lt;br /&gt;
&lt;br /&gt;
Le rendre executable&lt;br /&gt;
 chmod +x /usr/local/bin/docker-compose&lt;br /&gt;
&lt;br /&gt;
==Utilisation==&lt;br /&gt;
Préparer un fichier &amp;lt;code&amp;gt;docker-compose.yml&amp;lt;/code&amp;gt;. Ici on va préparer treafik (un reverse-proxy) :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
version: '2' &lt;br /&gt;
&lt;br /&gt;
services:&lt;br /&gt;
  proxy:&lt;br /&gt;
    image: traefik&lt;br /&gt;
    command: --web --docker --docker.domain=docker.local --logLevel=DEBUG&lt;br /&gt;
    networks:&lt;br /&gt;
      - webgateway&lt;br /&gt;
    ports:&lt;br /&gt;
      - &amp;quot;80:80&amp;quot;&lt;br /&gt;
      - &amp;quot;8080:8080&amp;quot;&lt;br /&gt;
    volumes:&lt;br /&gt;
      - /var/run/docker.sock:/var/run/docker.sock&lt;br /&gt;
      - /root/traefik/traefik.toml:/traefik.toml&lt;br /&gt;
&lt;br /&gt;
networks:&lt;br /&gt;
  webgateway:&lt;br /&gt;
    driver: bridge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour executer docker-compose&lt;br /&gt;
 docker-compose up -d&lt;br /&gt;
&lt;br /&gt;
=Stats=&lt;br /&gt;
Pour voir l'utilisation CPU et RAM des conteneurs&lt;br /&gt;
 docker stats&lt;br /&gt;
&lt;br /&gt;
=Sauvegarde=&lt;br /&gt;
==Exporter==&lt;br /&gt;
 docker container export &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Importer==&lt;br /&gt;
 docker container import &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Log=&lt;br /&gt;
 docker container log &amp;lt;NOM DU CONTENEUR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Publier une image sur son registry=&lt;br /&gt;
changer le tag&lt;br /&gt;
 docker tag httpd-alpine:latest 127.0.0.1:5000/httpd-alpine:latest&lt;br /&gt;
&lt;br /&gt;
puis envoyer&lt;br /&gt;
 docker push 127.0.0.1:5000/httpd-alpine:latest&lt;br /&gt;
&lt;br /&gt;
pour récupréré&lt;br /&gt;
 docker pull 127.0.0.1:5000/httpd-alpine:latest&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Open_vSwitch&amp;diff=517</id>
		<title>Open vSwitch</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Open_vSwitch&amp;diff=517"/>
		<updated>2017-06-04T07:28:16Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : /* Configuration du conteneur */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:réseaux_linux]]&lt;br /&gt;
{{attention|'''L'article est en cours de rédaction et d’expérimentation'''}}&lt;br /&gt;
&lt;br /&gt;
[http://openvswitch.org/ Open vSwitch], don son abréviation est OVS, permet de créer des commutateurs virtuels au sein du système d'exploitation. Celui-ci gère les VLANs et les liens Trucks. Ce programme est utile dans plusieurs cas:&lt;br /&gt;
&lt;br /&gt;
*Créer un switch supportant les VLANs a moindre coût (un Raspberry Pi avec des ports Ethernet USB)&lt;br /&gt;
*Gérer le réseau de chaque VMs ou conteneurs comme des machines physiques&lt;br /&gt;
*Communiquer de façon transparente entre un commutateur virtuel et physique&lt;br /&gt;
&lt;br /&gt;
Mon projet personnel consiste a gérer mon réseau de machines virtuelles après un pare-feu qui lui-même est virtualisé.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
&lt;br /&gt;
Open vSwitch est disponible dans [https://packages.debian.org/jessie/openvswitch-switch les dépôts Debian]&lt;br /&gt;
&lt;br /&gt;
 # apt install openvswitch-switch&lt;br /&gt;
&lt;br /&gt;
=Configuration OVS=&lt;br /&gt;
Open vSwitch stock sa configuration dans le fichier &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/openvswitch/conf.db&amp;lt;/source&amp;gt;. Nous allons voir deux façons de le configurer. Dans les deux cas, c'est ce fichier qui viendra se remplir (et c'est celui-ci qu'il faudra supprimer si vous voulez repartir de zéro).&lt;br /&gt;
{{info|Tout au long de la configuration, la commande pour connaître l’état du commutateur virtuel est &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;ovs-vsctl show&amp;lt;/source&amp;gt;.}}&lt;br /&gt;
==Via le fichier interfaces==&lt;br /&gt;
{{attention|Cette partie n'est pas au point. Faites plutôt la méthode en ligne de commande.}}&lt;br /&gt;
Nous allons enregistrer la configuration actuel des interfaces réseaux&lt;br /&gt;
&lt;br /&gt;
 # cp /etc/network/interfaces /etc/network/interfaces.old&lt;br /&gt;
&lt;br /&gt;
{{astuce|Effacer le contenu du fichier /etc/network/interface pour éviter toutes confusions.}}&lt;br /&gt;
&lt;br /&gt;
===Créer un switch virtuel===&lt;br /&gt;
&lt;br /&gt;
Dans le fichier /etc/network/interface ajouter :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Création d'un switch ovs&lt;br /&gt;
allow-ovs br0&lt;br /&gt;
iface br0 inet manual&lt;br /&gt;
	ovs_type OVSBridge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour appliquer les changements, il faut redémarrer le PC.&lt;br /&gt;
&lt;br /&gt;
{{attention|Si vous redémarrez votre machine vous perdez la connexion!}}&lt;br /&gt;
&lt;br /&gt;
===Ajouter un port virtuel au switch===&lt;br /&gt;
&lt;br /&gt;
Toujours dans le fichier /etc/network/interface ajouter :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Ajouter un port virtuel au switch&lt;br /&gt;
allow-ovs vport0&lt;br /&gt;
iface vport0 inet manual&lt;br /&gt;
	ovs_bridge br0&lt;br /&gt;
	ovs_type OVSPort&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajouter une ligne a la configuration du switch pour associer le port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Création d'un switch ovs&lt;br /&gt;
allow-ovs br0&lt;br /&gt;
iface br0 inet manual&lt;br /&gt;
	ovs_type OVSBridge&lt;br /&gt;
	ovs_ports vport0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ajouter un port physique au switch===&lt;br /&gt;
&lt;br /&gt;
Toujours dans le fichier /etc/network/interface ajouter :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Ajouter un port virtuel au switch&lt;br /&gt;
allow-ovs eth0&lt;br /&gt;
iface eth0 inet manual&lt;br /&gt;
	ovs_bridge br0&lt;br /&gt;
	ovs_type OVSPort&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modifier une ligne a la configuration du switch pour associer le port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Création d'un switch ovs&lt;br /&gt;
allow-ovs br0&lt;br /&gt;
iface br0 inet manual&lt;br /&gt;
	ovs_type OVSBridge&lt;br /&gt;
	ovs_ports vport0 eth0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si vous voulez avoir une ip pour votre machine :&lt;br /&gt;
&lt;br /&gt;
DHCP:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Création d'un switch ovs&lt;br /&gt;
allow-ovs br0&lt;br /&gt;
iface br0 inet dhcp&lt;br /&gt;
	ovs_type OVSBridge&lt;br /&gt;
	ovs_ports vport0 eth0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IP statique :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Création d'un switch ovs&lt;br /&gt;
allow-ovs br0&lt;br /&gt;
iface br0 inet static&lt;br /&gt;
	ovs_type OVSBridge&lt;br /&gt;
	ovs_ports vport0 eth0&lt;br /&gt;
	address 10.50.10.44&lt;br /&gt;
	netmask 255.255.255.0&lt;br /&gt;
	gateway 10.50.10.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans ce cas vous pouvez redémarrer votre machine sans perdre la connexion.&lt;br /&gt;
&lt;br /&gt;
==Via la ligne de commande==&lt;br /&gt;
===Création du commutateur virtuel===&lt;br /&gt;
Nous allons créer un pont ''br0'' et configurer l'interface ''eth0'' (notre lien physique vers l’extérieur) pour devenir un port trunk&lt;br /&gt;
 ovs-vsctl add-br br0&lt;br /&gt;
===Création du port trunk===&lt;br /&gt;
Comprenant tout les VLAN&lt;br /&gt;
 ovs-vsctl add-port br0 eth0 vlan_mode=trunk&lt;br /&gt;
transportant uniquement le trafic venant du VLAN 1,10,11 et 100&lt;br /&gt;
 ovs-vsctl add-port br0 eth0 trunks=1,10,11,100&lt;br /&gt;
===Création des ports virtuels===&lt;br /&gt;
''Notez qu'on ne tag pas le vlan1''.&lt;br /&gt;
 ovs-vsctl add-port br0 vlan1 -- set interface vlan1 type=internal&lt;br /&gt;
 ovs-vsctl add-port br0 vlan10 tag=10 -- set interface vlan10 type=internal&lt;br /&gt;
 ovs-vsctl add-port br0 vlan11 tag=11 -- set interface vlan11 type=internal&lt;br /&gt;
 ovs-vsctl add-port br0 vlan100 tag=100 -- set interface vlan100 type=internal&lt;br /&gt;
===Assignation d'une IP aux interfaces de VLAN===&lt;br /&gt;
====Temporaire====&lt;br /&gt;
 ifconfig vlan1 192.168.1.253 netmask 255.255.255.0 up&lt;br /&gt;
 ifconfig vlan10 192.168.10.253 netmask 255.255.255.0 up&lt;br /&gt;
 ifconfig vlan11 192.168.11.253 netmask 255.255.255.0 up&lt;br /&gt;
 ifconfig vlan100 192.168.100.253 netmask 255.255.255.0 up&lt;br /&gt;
====Permanent====&lt;br /&gt;
Pour mettre une IP permanente aux interfaces de VLAN, il suffit de les configurer dans le fichier &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/network/interfaces&amp;lt;/source&amp;gt; les interfaces de VLAN se configurent comme n'importe quelle interface.&lt;br /&gt;
===Script de la section===&lt;br /&gt;
Voici un script sans fioriture et facile à lire qui reprend les commandes vu dans cette section pour tester cette procédure sans vous prendre la tête. Prenez l'habitude de lire le code source d'un script avant de l’exécuter pour éviter toute compromission involontaire.&lt;br /&gt;
&lt;br /&gt;
Télécharger le script depuis [https://{{SERVERNAME}}/fichiers/réseaux/openvswitch/ovs-conf-trunk.sh nos fichiers].&lt;br /&gt;
===Activer le port trunk===&lt;br /&gt;
L'interface ''eth0'' est notre porte de sortie vers le monde physique, elle est configuré en trunk mais n'est pas allumée, ce qui fait que la communication ne peut se faire avec le commutateur matériel. Il faut ajouter une entrée dans le fichier &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/network/interfaces&amp;lt;/source&amp;gt;.&lt;br /&gt;
 allow-hotplug eth0&lt;br /&gt;
 iface eth0 inet manual&lt;br /&gt;
Et monter l'interface&lt;br /&gt;
 ifup eth0&lt;br /&gt;
===Activation du routage===&lt;br /&gt;
Permanent à partir du prochain démarrage&lt;br /&gt;
 echo 'net.ipv4.ip_forward=1' &amp;gt;&amp;gt; /etc/sysctl.conf&lt;br /&gt;
Activation imédiate&lt;br /&gt;
 echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&lt;br /&gt;
=Configuration Cisco=&lt;br /&gt;
Pour configurer un équipement [[:Category:Cisco|Cisco]] via son port console, nous recommandons le logiciel [[Minicom]] sous Linux ou [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html Putty] sous Windows.&lt;br /&gt;
==Configuration==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Switch# conf t&lt;br /&gt;
Switch(config)# hostname 3550-I&lt;br /&gt;
&lt;br /&gt;
3550-I(config)# vlan 10&lt;br /&gt;
3550-I(config-vlan)# vlan 11&lt;br /&gt;
3550-I(config-vlan)# vlan 100&lt;br /&gt;
&lt;br /&gt;
3550-I(config-vlan)# interface g 1/0/1&lt;br /&gt;
3550-I(config-if)# description --- vers Openvswitch ---&lt;br /&gt;
3550-I(config-if)# switchport trunk allowed vlan 1,10,11,100&lt;br /&gt;
3550-I(config-if)# switchport mode trunk&lt;br /&gt;
3550-I(config-if)# no shutdown&lt;br /&gt;
3550-I(config-if)# exit&lt;br /&gt;
&lt;br /&gt;
3550-I(config)# interface vlan 1&lt;br /&gt;
3550-I(config-if)# ip address 192.168.1.254 255.255.255.0&lt;br /&gt;
3550-I(config-if)# no shutdown&lt;br /&gt;
&lt;br /&gt;
3550-I(config)# interface vlan 10&lt;br /&gt;
3550-I(config-if)# ip address 192.168.10.254 255.255.255.0&lt;br /&gt;
3550-I(config-if)# no shutdown&lt;br /&gt;
&lt;br /&gt;
3550-I(config-if)# interface vlan 11&lt;br /&gt;
3550-I(config-if)# ip address 192.168.11.254 255.255.255.00&lt;br /&gt;
3550-I(config-if)# no shutdown&lt;br /&gt;
&lt;br /&gt;
3550-I(config-if)# int vlan 100&lt;br /&gt;
3550-I(config-if)# ip address 192.168.100.254 255.255.255.0&lt;br /&gt;
3550-I(config-if)# no shutdown&lt;br /&gt;
3550-I(config-if)# do write&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==Script de la section==&lt;br /&gt;
Fichier contenant l'ensemble des commandes de la section sans le prompt afin de faire un bête copier/coller.&lt;br /&gt;
&lt;br /&gt;
À télécharger depuis [https://{{SERVERNAME}}/fichiers/réseaux/openvswitch/ovs-cisco-conf-trunk.sh nos fichiers].&lt;br /&gt;
==Test de fonctionnement==&lt;br /&gt;
Pour tester le bon transport des VLAN sur notre lien trunk, nous allons effectuer des pings successifs depuis le commutateur vers les différentes interfaces VLAN d'OVS.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
3550-I#ping 192.168.1.254&lt;br /&gt;
&lt;br /&gt;
Type escape sequence to abort.&lt;br /&gt;
Sending 5, 100-byte ICMP Echos to 192.168.1.254, timeout is 2 seconds:&lt;br /&gt;
!!!!!&lt;br /&gt;
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/203/1007 ms&lt;br /&gt;
3550-I#ping 192.168.10.254&lt;br /&gt;
&lt;br /&gt;
Type escape sequence to abort.&lt;br /&gt;
Sending 5, 100-byte ICMP Echos to 192.168.10.254, timeout is 2 seconds:&lt;br /&gt;
!!!!!&lt;br /&gt;
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/203/1007 ms&lt;br /&gt;
3550-I#ping 192.168.11.254&lt;br /&gt;
&lt;br /&gt;
Type escape sequence to abort.&lt;br /&gt;
Sending 5, 100-byte ICMP Echos to 192.168.11.254, timeout is 2 seconds:&lt;br /&gt;
!!!!!&lt;br /&gt;
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/203/1007 ms&lt;br /&gt;
3550-I#ping 192.168.100.254&lt;br /&gt;
&lt;br /&gt;
Type escape sequence to abort.&lt;br /&gt;
Sending 5, 100-byte ICMP Echos to 192.168.100.254, timeout is 2 seconds:&lt;br /&gt;
!!!!!&lt;br /&gt;
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/203/1007 ms&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=LACP=&lt;br /&gt;
Pour configurer l'agrégation de lien avec un commutateur Cisco, vous pouvez vous référez à [[Lacp - cisco|ce document]].&lt;br /&gt;
==En ligne de commande==&lt;br /&gt;
 ovs-vsctl add-bond br0 bond0 eth0 eth1&lt;br /&gt;
==Via le fichier interfaces==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
iface bond0 inet manual&lt;br /&gt;
	ovs_bonds eth0 eth1&lt;br /&gt;
	ovs_type OVSBond&lt;br /&gt;
	ovs_bridge vmbr0&lt;br /&gt;
	ovs_options lacp=active bond_mode=balance-tcp vlan_mode=trunk&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==Sources de la section==&lt;br /&gt;
*http://blog.scottlowe.org/2012/10/19/link-aggregation-and-lacp-with-open-vswitch/&lt;br /&gt;
&lt;br /&gt;
=LXC dans des VLAN=&lt;br /&gt;
Dans cette section nous allons voir comment faire fonctionner LXC avec Open vSwitch avec une architecture conteneurisé isolé dans des VLAN.&lt;br /&gt;
{{attention|Je part du principe que seul l'étape [[#Configuration Cisco|Configuration Cisco]] a été suivie afin de rendre les sections indépendantes. Il est cependant aisé d'intégrer ce qui va suivre dans ce qui a précédemment été fait.}}&lt;br /&gt;
==Création du commutateur virtuel==&lt;br /&gt;
===Création du pont===&lt;br /&gt;
 ovs-vsctl --may-exist add-br commut0&lt;br /&gt;
===Ajout du port trunk vers l’extérieur===&lt;br /&gt;
 ovs-vsctl add-port commut0 eth0 trunks=10,11,100&lt;br /&gt;
===Activer le port trunk===&lt;br /&gt;
L'interface ''eth0'' est notre porte de sortie vers le monde physique, elle est configuré en trunk mais n'est pas allumée, ce qui fait que la communication ne peut se faire avec le commutateur matériel. Il faut ajouter une entrée dans le fichier &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/network/interfaces&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 allow-hotplug eth0&lt;br /&gt;
 iface eth0 inet manual&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Et monter l'interface&lt;br /&gt;
 ifup eth0&lt;br /&gt;
==Connecter un conteneur LXC à un VLAN==&lt;br /&gt;
===Scripts de configuration réseau===&lt;br /&gt;
Pour que nos conteneurs soient intégrés aux VLAN dé leur démarrage, il faut ajouter leur interface virtuel au commutateur OVS. La difficulté étant que LXC choisi un nom aléatoire pour l'interface virtuel du conteneur à son démarrage, ce qui empêche toute configuration fixe. Pour affecter l'interface du LXC de manière sûr, nous allons créer 2 script qui l'ajoute au commutateur au moment du démarrage et la retire au moment de l'extinction. On en profitera pour étiqueter le bon VLAN à cette interface.&lt;br /&gt;
====Script de démarrage====&lt;br /&gt;
 vim /etc/lxc/ifup&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
ovsCommut=commut0&lt;br /&gt;
TAG=11&lt;br /&gt;
ovs-vsctl --may-exist add-br ${ovsCommut}&lt;br /&gt;
ovs-vsctl --if-exists del-port ${ovsCommut} $5&lt;br /&gt;
ovs-vsctl --may-exist add-port ${ovsCommut} $5&lt;br /&gt;
ovs-vsctl --if-exists set port $5 tag=${TAG}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Script d'extinction====&lt;br /&gt;
 vim /etc/lxc/ifdown&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
ovsCommut=commut0&lt;br /&gt;
ovs-vsctl --if-exists del-port ${ovsCommut} $5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Droits d'accès====&lt;br /&gt;
Il faut rendre ces scripts exécutables&lt;br /&gt;
 chmod +x /etc/lxc/if*&lt;br /&gt;
&lt;br /&gt;
===Configuration du conteneur===&lt;br /&gt;
Nous allons configurer le conteneur pour utiliser ces paramètres&lt;br /&gt;
 vim /var/lib/lxc/&amp;lt;votre_conteneur&amp;gt;/config&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lxc.network.type = veth&lt;br /&gt;
lxc.network.veth.pair = veth001&lt;br /&gt;
lxc.network.flags = up&lt;br /&gt;
&lt;br /&gt;
lxc.network.script.up = /etc/lxc/ifup&lt;br /&gt;
lxc.network.script.down = /etc/lxc/ifdown&lt;br /&gt;
lxc.network.hwaddr = 00:16:3e:15:b3:62&lt;br /&gt;
lxc.network.ipv4 = 192.168.11.10/24&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{astuce|'''&amp;lt;nowiki&amp;gt;lxc.network.veth.pair = veth001&amp;lt;/nowiki&amp;gt;''' permet de nommer l'interface réseau du conteneur côté hôte}}&lt;br /&gt;
&lt;br /&gt;
==Passerelle par défaut==&lt;br /&gt;
À ce stade, notre conteneur est dans le VLAN 11. Il pourra donc communiquer avec les machines se trouvant dans ce même VLAN. Cependant, aucun accès vers d'autre réseaux n'est possible en l'absence d'une passerelle de niveau 3. Nous allons ainsi créer une [https://fr.wikipedia.org/wiki/Switch_virtual_interface interface de VLAN] (ou SVI - Switch Virtual Interface) pour le VLAN 11 afin de permettre une commutation de paquet pour accéder à d'autre réseaux.&lt;br /&gt;
===Création d'une interface VLAN11===&lt;br /&gt;
 ovs-vsctl --may-exist add-port commut0 vlan11 tag=11 -- --if-exists set interface vlan11 type=internal&lt;br /&gt;
===Attribution d'une IP sur la SVI===&lt;br /&gt;
====temporaire====&lt;br /&gt;
 ifconfig vlan11 192.168.11.254/24&lt;br /&gt;
====Permanent====&lt;br /&gt;
 vim /etc/network/interfaces&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
allow-hotplug vlan11&lt;br /&gt;
iface vlan11 inet static&lt;br /&gt;
	address 192.168.11.253&lt;br /&gt;
	netmask 255.255.255.0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Activation de l'interface&lt;br /&gt;
 ifup vlan11&lt;br /&gt;
===Activation du routage===&lt;br /&gt;
Permanent à partir du prochain démarrage&lt;br /&gt;
 echo 'net.ipv4.ip_forward=1' &amp;gt;&amp;gt; /etc/sysctl.conf&lt;br /&gt;
Activation imédiate&lt;br /&gt;
 echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
==Source de la section==&lt;br /&gt;
*http://stackoverflow.com/questions/34021070/lxc-with-open-vswitch#34038873&lt;br /&gt;
=KVM dans des VLAN=&lt;br /&gt;
Veuillez suivre les étapes dans [[Qemu|ce document]] pour utiliser une machine virtuelle KVM dans un VLAN Open vSwitch.&lt;br /&gt;
=Sources=&lt;br /&gt;
* http://brezular.com/2013/12/17/connecting-open-vswitch-running-on-debian-to-cisco-catalyst-3550-via-trunk/&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Open_vSwitch&amp;diff=516</id>
		<title>Open vSwitch</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Open_vSwitch&amp;diff=516"/>
		<updated>2017-06-04T07:27:29Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : /* Configuration du conteneur */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:réseaux_linux]]&lt;br /&gt;
{{attention|'''L'article est en cours de rédaction et d’expérimentation'''}}&lt;br /&gt;
&lt;br /&gt;
[http://openvswitch.org/ Open vSwitch], don son abréviation est OVS, permet de créer des commutateurs virtuels au sein du système d'exploitation. Celui-ci gère les VLANs et les liens Trucks. Ce programme est utile dans plusieurs cas:&lt;br /&gt;
&lt;br /&gt;
*Créer un switch supportant les VLANs a moindre coût (un Raspberry Pi avec des ports Ethernet USB)&lt;br /&gt;
*Gérer le réseau de chaque VMs ou conteneurs comme des machines physiques&lt;br /&gt;
*Communiquer de façon transparente entre un commutateur virtuel et physique&lt;br /&gt;
&lt;br /&gt;
Mon projet personnel consiste a gérer mon réseau de machines virtuelles après un pare-feu qui lui-même est virtualisé.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
&lt;br /&gt;
Open vSwitch est disponible dans [https://packages.debian.org/jessie/openvswitch-switch les dépôts Debian]&lt;br /&gt;
&lt;br /&gt;
 # apt install openvswitch-switch&lt;br /&gt;
&lt;br /&gt;
=Configuration OVS=&lt;br /&gt;
Open vSwitch stock sa configuration dans le fichier &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/openvswitch/conf.db&amp;lt;/source&amp;gt;. Nous allons voir deux façons de le configurer. Dans les deux cas, c'est ce fichier qui viendra se remplir (et c'est celui-ci qu'il faudra supprimer si vous voulez repartir de zéro).&lt;br /&gt;
{{info|Tout au long de la configuration, la commande pour connaître l’état du commutateur virtuel est &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;ovs-vsctl show&amp;lt;/source&amp;gt;.}}&lt;br /&gt;
==Via le fichier interfaces==&lt;br /&gt;
{{attention|Cette partie n'est pas au point. Faites plutôt la méthode en ligne de commande.}}&lt;br /&gt;
Nous allons enregistrer la configuration actuel des interfaces réseaux&lt;br /&gt;
&lt;br /&gt;
 # cp /etc/network/interfaces /etc/network/interfaces.old&lt;br /&gt;
&lt;br /&gt;
{{astuce|Effacer le contenu du fichier /etc/network/interface pour éviter toutes confusions.}}&lt;br /&gt;
&lt;br /&gt;
===Créer un switch virtuel===&lt;br /&gt;
&lt;br /&gt;
Dans le fichier /etc/network/interface ajouter :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Création d'un switch ovs&lt;br /&gt;
allow-ovs br0&lt;br /&gt;
iface br0 inet manual&lt;br /&gt;
	ovs_type OVSBridge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour appliquer les changements, il faut redémarrer le PC.&lt;br /&gt;
&lt;br /&gt;
{{attention|Si vous redémarrez votre machine vous perdez la connexion!}}&lt;br /&gt;
&lt;br /&gt;
===Ajouter un port virtuel au switch===&lt;br /&gt;
&lt;br /&gt;
Toujours dans le fichier /etc/network/interface ajouter :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Ajouter un port virtuel au switch&lt;br /&gt;
allow-ovs vport0&lt;br /&gt;
iface vport0 inet manual&lt;br /&gt;
	ovs_bridge br0&lt;br /&gt;
	ovs_type OVSPort&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajouter une ligne a la configuration du switch pour associer le port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Création d'un switch ovs&lt;br /&gt;
allow-ovs br0&lt;br /&gt;
iface br0 inet manual&lt;br /&gt;
	ovs_type OVSBridge&lt;br /&gt;
	ovs_ports vport0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ajouter un port physique au switch===&lt;br /&gt;
&lt;br /&gt;
Toujours dans le fichier /etc/network/interface ajouter :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Ajouter un port virtuel au switch&lt;br /&gt;
allow-ovs eth0&lt;br /&gt;
iface eth0 inet manual&lt;br /&gt;
	ovs_bridge br0&lt;br /&gt;
	ovs_type OVSPort&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modifier une ligne a la configuration du switch pour associer le port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Création d'un switch ovs&lt;br /&gt;
allow-ovs br0&lt;br /&gt;
iface br0 inet manual&lt;br /&gt;
	ovs_type OVSBridge&lt;br /&gt;
	ovs_ports vport0 eth0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si vous voulez avoir une ip pour votre machine :&lt;br /&gt;
&lt;br /&gt;
DHCP:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Création d'un switch ovs&lt;br /&gt;
allow-ovs br0&lt;br /&gt;
iface br0 inet dhcp&lt;br /&gt;
	ovs_type OVSBridge&lt;br /&gt;
	ovs_ports vport0 eth0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IP statique :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Création d'un switch ovs&lt;br /&gt;
allow-ovs br0&lt;br /&gt;
iface br0 inet static&lt;br /&gt;
	ovs_type OVSBridge&lt;br /&gt;
	ovs_ports vport0 eth0&lt;br /&gt;
	address 10.50.10.44&lt;br /&gt;
	netmask 255.255.255.0&lt;br /&gt;
	gateway 10.50.10.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans ce cas vous pouvez redémarrer votre machine sans perdre la connexion.&lt;br /&gt;
&lt;br /&gt;
==Via la ligne de commande==&lt;br /&gt;
===Création du commutateur virtuel===&lt;br /&gt;
Nous allons créer un pont ''br0'' et configurer l'interface ''eth0'' (notre lien physique vers l’extérieur) pour devenir un port trunk&lt;br /&gt;
 ovs-vsctl add-br br0&lt;br /&gt;
===Création du port trunk===&lt;br /&gt;
Comprenant tout les VLAN&lt;br /&gt;
 ovs-vsctl add-port br0 eth0 vlan_mode=trunk&lt;br /&gt;
transportant uniquement le trafic venant du VLAN 1,10,11 et 100&lt;br /&gt;
 ovs-vsctl add-port br0 eth0 trunks=1,10,11,100&lt;br /&gt;
===Création des ports virtuels===&lt;br /&gt;
''Notez qu'on ne tag pas le vlan1''.&lt;br /&gt;
 ovs-vsctl add-port br0 vlan1 -- set interface vlan1 type=internal&lt;br /&gt;
 ovs-vsctl add-port br0 vlan10 tag=10 -- set interface vlan10 type=internal&lt;br /&gt;
 ovs-vsctl add-port br0 vlan11 tag=11 -- set interface vlan11 type=internal&lt;br /&gt;
 ovs-vsctl add-port br0 vlan100 tag=100 -- set interface vlan100 type=internal&lt;br /&gt;
===Assignation d'une IP aux interfaces de VLAN===&lt;br /&gt;
====Temporaire====&lt;br /&gt;
 ifconfig vlan1 192.168.1.253 netmask 255.255.255.0 up&lt;br /&gt;
 ifconfig vlan10 192.168.10.253 netmask 255.255.255.0 up&lt;br /&gt;
 ifconfig vlan11 192.168.11.253 netmask 255.255.255.0 up&lt;br /&gt;
 ifconfig vlan100 192.168.100.253 netmask 255.255.255.0 up&lt;br /&gt;
====Permanent====&lt;br /&gt;
Pour mettre une IP permanente aux interfaces de VLAN, il suffit de les configurer dans le fichier &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/network/interfaces&amp;lt;/source&amp;gt; les interfaces de VLAN se configurent comme n'importe quelle interface.&lt;br /&gt;
===Script de la section===&lt;br /&gt;
Voici un script sans fioriture et facile à lire qui reprend les commandes vu dans cette section pour tester cette procédure sans vous prendre la tête. Prenez l'habitude de lire le code source d'un script avant de l’exécuter pour éviter toute compromission involontaire.&lt;br /&gt;
&lt;br /&gt;
Télécharger le script depuis [https://{{SERVERNAME}}/fichiers/réseaux/openvswitch/ovs-conf-trunk.sh nos fichiers].&lt;br /&gt;
===Activer le port trunk===&lt;br /&gt;
L'interface ''eth0'' est notre porte de sortie vers le monde physique, elle est configuré en trunk mais n'est pas allumée, ce qui fait que la communication ne peut se faire avec le commutateur matériel. Il faut ajouter une entrée dans le fichier &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/network/interfaces&amp;lt;/source&amp;gt;.&lt;br /&gt;
 allow-hotplug eth0&lt;br /&gt;
 iface eth0 inet manual&lt;br /&gt;
Et monter l'interface&lt;br /&gt;
 ifup eth0&lt;br /&gt;
===Activation du routage===&lt;br /&gt;
Permanent à partir du prochain démarrage&lt;br /&gt;
 echo 'net.ipv4.ip_forward=1' &amp;gt;&amp;gt; /etc/sysctl.conf&lt;br /&gt;
Activation imédiate&lt;br /&gt;
 echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&lt;br /&gt;
=Configuration Cisco=&lt;br /&gt;
Pour configurer un équipement [[:Category:Cisco|Cisco]] via son port console, nous recommandons le logiciel [[Minicom]] sous Linux ou [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html Putty] sous Windows.&lt;br /&gt;
==Configuration==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Switch# conf t&lt;br /&gt;
Switch(config)# hostname 3550-I&lt;br /&gt;
&lt;br /&gt;
3550-I(config)# vlan 10&lt;br /&gt;
3550-I(config-vlan)# vlan 11&lt;br /&gt;
3550-I(config-vlan)# vlan 100&lt;br /&gt;
&lt;br /&gt;
3550-I(config-vlan)# interface g 1/0/1&lt;br /&gt;
3550-I(config-if)# description --- vers Openvswitch ---&lt;br /&gt;
3550-I(config-if)# switchport trunk allowed vlan 1,10,11,100&lt;br /&gt;
3550-I(config-if)# switchport mode trunk&lt;br /&gt;
3550-I(config-if)# no shutdown&lt;br /&gt;
3550-I(config-if)# exit&lt;br /&gt;
&lt;br /&gt;
3550-I(config)# interface vlan 1&lt;br /&gt;
3550-I(config-if)# ip address 192.168.1.254 255.255.255.0&lt;br /&gt;
3550-I(config-if)# no shutdown&lt;br /&gt;
&lt;br /&gt;
3550-I(config)# interface vlan 10&lt;br /&gt;
3550-I(config-if)# ip address 192.168.10.254 255.255.255.0&lt;br /&gt;
3550-I(config-if)# no shutdown&lt;br /&gt;
&lt;br /&gt;
3550-I(config-if)# interface vlan 11&lt;br /&gt;
3550-I(config-if)# ip address 192.168.11.254 255.255.255.00&lt;br /&gt;
3550-I(config-if)# no shutdown&lt;br /&gt;
&lt;br /&gt;
3550-I(config-if)# int vlan 100&lt;br /&gt;
3550-I(config-if)# ip address 192.168.100.254 255.255.255.0&lt;br /&gt;
3550-I(config-if)# no shutdown&lt;br /&gt;
3550-I(config-if)# do write&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==Script de la section==&lt;br /&gt;
Fichier contenant l'ensemble des commandes de la section sans le prompt afin de faire un bête copier/coller.&lt;br /&gt;
&lt;br /&gt;
À télécharger depuis [https://{{SERVERNAME}}/fichiers/réseaux/openvswitch/ovs-cisco-conf-trunk.sh nos fichiers].&lt;br /&gt;
==Test de fonctionnement==&lt;br /&gt;
Pour tester le bon transport des VLAN sur notre lien trunk, nous allons effectuer des pings successifs depuis le commutateur vers les différentes interfaces VLAN d'OVS.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
3550-I#ping 192.168.1.254&lt;br /&gt;
&lt;br /&gt;
Type escape sequence to abort.&lt;br /&gt;
Sending 5, 100-byte ICMP Echos to 192.168.1.254, timeout is 2 seconds:&lt;br /&gt;
!!!!!&lt;br /&gt;
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/203/1007 ms&lt;br /&gt;
3550-I#ping 192.168.10.254&lt;br /&gt;
&lt;br /&gt;
Type escape sequence to abort.&lt;br /&gt;
Sending 5, 100-byte ICMP Echos to 192.168.10.254, timeout is 2 seconds:&lt;br /&gt;
!!!!!&lt;br /&gt;
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/203/1007 ms&lt;br /&gt;
3550-I#ping 192.168.11.254&lt;br /&gt;
&lt;br /&gt;
Type escape sequence to abort.&lt;br /&gt;
Sending 5, 100-byte ICMP Echos to 192.168.11.254, timeout is 2 seconds:&lt;br /&gt;
!!!!!&lt;br /&gt;
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/203/1007 ms&lt;br /&gt;
3550-I#ping 192.168.100.254&lt;br /&gt;
&lt;br /&gt;
Type escape sequence to abort.&lt;br /&gt;
Sending 5, 100-byte ICMP Echos to 192.168.100.254, timeout is 2 seconds:&lt;br /&gt;
!!!!!&lt;br /&gt;
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/203/1007 ms&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=LACP=&lt;br /&gt;
Pour configurer l'agrégation de lien avec un commutateur Cisco, vous pouvez vous référez à [[Lacp - cisco|ce document]].&lt;br /&gt;
==En ligne de commande==&lt;br /&gt;
 ovs-vsctl add-bond br0 bond0 eth0 eth1&lt;br /&gt;
==Via le fichier interfaces==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
iface bond0 inet manual&lt;br /&gt;
	ovs_bonds eth0 eth1&lt;br /&gt;
	ovs_type OVSBond&lt;br /&gt;
	ovs_bridge vmbr0&lt;br /&gt;
	ovs_options lacp=active bond_mode=balance-tcp vlan_mode=trunk&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==Sources de la section==&lt;br /&gt;
*http://blog.scottlowe.org/2012/10/19/link-aggregation-and-lacp-with-open-vswitch/&lt;br /&gt;
&lt;br /&gt;
=LXC dans des VLAN=&lt;br /&gt;
Dans cette section nous allons voir comment faire fonctionner LXC avec Open vSwitch avec une architecture conteneurisé isolé dans des VLAN.&lt;br /&gt;
{{attention|Je part du principe que seul l'étape [[#Configuration Cisco|Configuration Cisco]] a été suivie afin de rendre les sections indépendantes. Il est cependant aisé d'intégrer ce qui va suivre dans ce qui a précédemment été fait.}}&lt;br /&gt;
==Création du commutateur virtuel==&lt;br /&gt;
===Création du pont===&lt;br /&gt;
 ovs-vsctl --may-exist add-br commut0&lt;br /&gt;
===Ajout du port trunk vers l’extérieur===&lt;br /&gt;
 ovs-vsctl add-port commut0 eth0 trunks=10,11,100&lt;br /&gt;
===Activer le port trunk===&lt;br /&gt;
L'interface ''eth0'' est notre porte de sortie vers le monde physique, elle est configuré en trunk mais n'est pas allumée, ce qui fait que la communication ne peut se faire avec le commutateur matériel. Il faut ajouter une entrée dans le fichier &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/network/interfaces&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 allow-hotplug eth0&lt;br /&gt;
 iface eth0 inet manual&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Et monter l'interface&lt;br /&gt;
 ifup eth0&lt;br /&gt;
==Connecter un conteneur LXC à un VLAN==&lt;br /&gt;
===Scripts de configuration réseau===&lt;br /&gt;
Pour que nos conteneurs soient intégrés aux VLAN dé leur démarrage, il faut ajouter leur interface virtuel au commutateur OVS. La difficulté étant que LXC choisi un nom aléatoire pour l'interface virtuel du conteneur à son démarrage, ce qui empêche toute configuration fixe. Pour affecter l'interface du LXC de manière sûr, nous allons créer 2 script qui l'ajoute au commutateur au moment du démarrage et la retire au moment de l'extinction. On en profitera pour étiqueter le bon VLAN à cette interface.&lt;br /&gt;
====Script de démarrage====&lt;br /&gt;
 vim /etc/lxc/ifup&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
ovsCommut=commut0&lt;br /&gt;
TAG=11&lt;br /&gt;
ovs-vsctl --may-exist add-br ${ovsCommut}&lt;br /&gt;
ovs-vsctl --if-exists del-port ${ovsCommut} $5&lt;br /&gt;
ovs-vsctl --may-exist add-port ${ovsCommut} $5&lt;br /&gt;
ovs-vsctl --if-exists set port $5 tag=${TAG}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Script d'extinction====&lt;br /&gt;
 vim /etc/lxc/ifdown&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
ovsCommut=commut0&lt;br /&gt;
ovs-vsctl --if-exists del-port ${ovsCommut} $5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Droits d'accès====&lt;br /&gt;
Il faut rendre ces scripts exécutables&lt;br /&gt;
 chmod +x /etc/lxc/if*&lt;br /&gt;
&lt;br /&gt;
===Configuration du conteneur===&lt;br /&gt;
Nous allons configurer le conteneur pour utiliser ces paramètres&lt;br /&gt;
 vim /var/lib/lxc/&amp;lt;votre_conteneur&amp;gt;/config&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lxc.network.type = veth&lt;br /&gt;
lxc.network.veth.pair = veth001&lt;br /&gt;
lxc.network.flags = up&lt;br /&gt;
&lt;br /&gt;
lxc.network.script.up = /etc/lxc/ifup&lt;br /&gt;
lxc.network.script.down = /etc/lxc/ifdown&lt;br /&gt;
lxc.network.hwaddr = 00:16:3e:15:b3:62&lt;br /&gt;
lxc.network.ipv4 = 192.168.11.10/24&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{astuce|La ligne '''&amp;lt;nowiki&amp;gt;lxc.network.veth.pair = veth001&amp;lt;/nowiki&amp;gt;''' permet de nommer l'interface réseau du conteneur côté hôte}}&lt;br /&gt;
&lt;br /&gt;
==Passerelle par défaut==&lt;br /&gt;
À ce stade, notre conteneur est dans le VLAN 11. Il pourra donc communiquer avec les machines se trouvant dans ce même VLAN. Cependant, aucun accès vers d'autre réseaux n'est possible en l'absence d'une passerelle de niveau 3. Nous allons ainsi créer une [https://fr.wikipedia.org/wiki/Switch_virtual_interface interface de VLAN] (ou SVI - Switch Virtual Interface) pour le VLAN 11 afin de permettre une commutation de paquet pour accéder à d'autre réseaux.&lt;br /&gt;
===Création d'une interface VLAN11===&lt;br /&gt;
 ovs-vsctl --may-exist add-port commut0 vlan11 tag=11 -- --if-exists set interface vlan11 type=internal&lt;br /&gt;
===Attribution d'une IP sur la SVI===&lt;br /&gt;
====temporaire====&lt;br /&gt;
 ifconfig vlan11 192.168.11.254/24&lt;br /&gt;
====Permanent====&lt;br /&gt;
 vim /etc/network/interfaces&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
allow-hotplug vlan11&lt;br /&gt;
iface vlan11 inet static&lt;br /&gt;
	address 192.168.11.253&lt;br /&gt;
	netmask 255.255.255.0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Activation de l'interface&lt;br /&gt;
 ifup vlan11&lt;br /&gt;
===Activation du routage===&lt;br /&gt;
Permanent à partir du prochain démarrage&lt;br /&gt;
 echo 'net.ipv4.ip_forward=1' &amp;gt;&amp;gt; /etc/sysctl.conf&lt;br /&gt;
Activation imédiate&lt;br /&gt;
 echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
==Source de la section==&lt;br /&gt;
*http://stackoverflow.com/questions/34021070/lxc-with-open-vswitch#34038873&lt;br /&gt;
=KVM dans des VLAN=&lt;br /&gt;
Veuillez suivre les étapes dans [[Qemu|ce document]] pour utiliser une machine virtuelle KVM dans un VLAN Open vSwitch.&lt;br /&gt;
=Sources=&lt;br /&gt;
* http://brezular.com/2013/12/17/connecting-open-vswitch-running-on-debian-to-cisco-catalyst-3550-via-trunk/&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Cat%C3%A9gorie:Service_communication&amp;diff=515</id>
		<title>Catégorie:Service communication</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Cat%C3%A9gorie:Service_communication&amp;diff=515"/>
		<updated>2017-06-02T17:56:30Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Page créée avec « Category:services »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:services]]&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Prosody&amp;diff=514</id>
		<title>Prosody</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Prosody&amp;diff=514"/>
		<updated>2017-06-02T17:56:11Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : Page créée avec « Category:service_communication =Sauvegarde= Pour sauvegarder la configuration et les utilisateurs de Prosody, il faut créer une archive avec les dossiers suivant :  {... »&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:service_communication]]&lt;br /&gt;
=Sauvegarde=&lt;br /&gt;
Pour sauvegarder la configuration et les utilisateurs de Prosody, il faut créer une archive avec les dossiers suivant :&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| Configuration || /etc/prosody&lt;br /&gt;
|-&lt;br /&gt;
| Data || /var/lib/prosody&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Liens=&lt;br /&gt;
*Sauvegarde : http://prosody.im/doc/backups&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Open_vSwitch&amp;diff=508</id>
		<title>Open vSwitch</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Open_vSwitch&amp;diff=508"/>
		<updated>2017-05-14T14:39:32Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : /* Script d'extinction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:réseaux_linux]]&lt;br /&gt;
{{attention|'''L'article est en cours de rédaction et d’expérimentation'''}}&lt;br /&gt;
&lt;br /&gt;
[http://openvswitch.org/ Open vSwitch], don son abréviation est OVS, permet de créer des commutateurs virtuels au sein du système d'exploitation. Celui-ci gère les VLANs et les liens Trucks. Ce programme est utile dans plusieurs cas:&lt;br /&gt;
&lt;br /&gt;
*Créer un switch supportant les VLANs a moindre coût (un Raspberry Pi avec des ports Ethernet USB)&lt;br /&gt;
*Gérer le réseau de chaque VMs ou conteneurs comme des machines physiques&lt;br /&gt;
*Communiquer de façon transparente entre un commutateur virtuel et physique&lt;br /&gt;
&lt;br /&gt;
Mon projet personnel consiste a gérer mon réseau de machines virtuelles après un pare-feu qui lui-même est virtualisé.&lt;br /&gt;
&lt;br /&gt;
=Installation=&lt;br /&gt;
&lt;br /&gt;
Open vSwitch est disponible dans [https://packages.debian.org/jessie/openvswitch-switch les dépôts Debian]&lt;br /&gt;
&lt;br /&gt;
 # apt install openvswitch-switch&lt;br /&gt;
&lt;br /&gt;
=Configuration OVS=&lt;br /&gt;
Open vSwitch stock sa configuration dans le fichier &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/openvswitch/conf.db&amp;lt;/source&amp;gt;. Nous allons voir deux façons de le configurer. Dans les deux cas, c'est ce fichier qui viendra se remplir (et c'est celui-ci qu'il faudra supprimer si vous voulez repartir de zéro).&lt;br /&gt;
{{info|Tout au long de la configuration, la commande pour connaître l’état du commutateur virtuel est &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;ovs-vsctl show&amp;lt;/source&amp;gt;.}}&lt;br /&gt;
==Via le fichier interfaces==&lt;br /&gt;
{{attention|Cette partie n'est pas au point. Faites plutôt la méthode en ligne de commande.}}&lt;br /&gt;
Nous allons enregistrer la configuration actuel des interfaces réseaux&lt;br /&gt;
&lt;br /&gt;
 # cp /etc/network/interfaces /etc/network/interfaces.old&lt;br /&gt;
&lt;br /&gt;
{{astuce|Effacer le contenu du fichier /etc/network/interface pour éviter toutes confusions.}}&lt;br /&gt;
&lt;br /&gt;
===Créer un switch virtuel===&lt;br /&gt;
&lt;br /&gt;
Dans le fichier /etc/network/interface ajouter :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Création d'un switch ovs&lt;br /&gt;
allow-ovs br0&lt;br /&gt;
iface br0 inet manual&lt;br /&gt;
	ovs_type OVSBridge&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Pour appliquer les changements, il faut redémarrer le PC.&lt;br /&gt;
&lt;br /&gt;
{{attention|Si vous redémarrez votre machine vous perdez la connexion!}}&lt;br /&gt;
&lt;br /&gt;
===Ajouter un port virtuel au switch===&lt;br /&gt;
&lt;br /&gt;
Toujours dans le fichier /etc/network/interface ajouter :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Ajouter un port virtuel au switch&lt;br /&gt;
allow-ovs vport0&lt;br /&gt;
iface vport0 inet manual&lt;br /&gt;
	ovs_bridge br0&lt;br /&gt;
	ovs_type OVSPort&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ajouter une ligne a la configuration du switch pour associer le port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Création d'un switch ovs&lt;br /&gt;
allow-ovs br0&lt;br /&gt;
iface br0 inet manual&lt;br /&gt;
	ovs_type OVSBridge&lt;br /&gt;
	ovs_ports vport0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Ajouter un port physique au switch===&lt;br /&gt;
&lt;br /&gt;
Toujours dans le fichier /etc/network/interface ajouter :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Ajouter un port virtuel au switch&lt;br /&gt;
allow-ovs eth0&lt;br /&gt;
iface eth0 inet manual&lt;br /&gt;
	ovs_bridge br0&lt;br /&gt;
	ovs_type OVSPort&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Modifier une ligne a la configuration du switch pour associer le port:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Création d'un switch ovs&lt;br /&gt;
allow-ovs br0&lt;br /&gt;
iface br0 inet manual&lt;br /&gt;
	ovs_type OVSBridge&lt;br /&gt;
	ovs_ports vport0 eth0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si vous voulez avoir une ip pour votre machine :&lt;br /&gt;
&lt;br /&gt;
DHCP:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Création d'un switch ovs&lt;br /&gt;
allow-ovs br0&lt;br /&gt;
iface br0 inet dhcp&lt;br /&gt;
	ovs_type OVSBridge&lt;br /&gt;
	ovs_ports vport0 eth0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
IP statique :&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
# Création d'un switch ovs&lt;br /&gt;
allow-ovs br0&lt;br /&gt;
iface br0 inet static&lt;br /&gt;
	ovs_type OVSBridge&lt;br /&gt;
	ovs_ports vport0 eth0&lt;br /&gt;
	address 10.50.10.44&lt;br /&gt;
	netmask 255.255.255.0&lt;br /&gt;
	gateway 10.50.10.1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Dans ce cas vous pouvez redémarrer votre machine sans perdre la connexion.&lt;br /&gt;
&lt;br /&gt;
==Via la ligne de commande==&lt;br /&gt;
===Création du commutateur virtuel===&lt;br /&gt;
Nous allons créer un pont ''br0'' et configurer l'interface ''eth0'' (notre lien physique vers l’extérieur) pour devenir un port trunk&lt;br /&gt;
 ovs-vsctl add-br br0&lt;br /&gt;
===Création du port trunk===&lt;br /&gt;
Comprenant tout les VLAN&lt;br /&gt;
 ovs-vsctl add-port br0 eth0 vlan_mode=trunk&lt;br /&gt;
transportant uniquement le trafic venant du VLAN 1,10,11 et 100&lt;br /&gt;
 ovs-vsctl add-port br0 eth0 trunks=1,10,11,100&lt;br /&gt;
===Création des ports virtuels===&lt;br /&gt;
''Notez qu'on ne tag pas le vlan1''.&lt;br /&gt;
 ovs-vsctl add-port br0 vlan1 -- set interface vlan1 type=internal&lt;br /&gt;
 ovs-vsctl add-port br0 vlan10 tag=10 -- set interface vlan10 type=internal&lt;br /&gt;
 ovs-vsctl add-port br0 vlan11 tag=11 -- set interface vlan11 type=internal&lt;br /&gt;
 ovs-vsctl add-port br0 vlan100 tag=100 -- set interface vlan100 type=internal&lt;br /&gt;
===Assignation d'une IP aux interfaces de VLAN===&lt;br /&gt;
====Temporaire====&lt;br /&gt;
 ifconfig vlan1 192.168.1.253 netmask 255.255.255.0 up&lt;br /&gt;
 ifconfig vlan10 192.168.10.253 netmask 255.255.255.0 up&lt;br /&gt;
 ifconfig vlan11 192.168.11.253 netmask 255.255.255.0 up&lt;br /&gt;
 ifconfig vlan100 192.168.100.253 netmask 255.255.255.0 up&lt;br /&gt;
====Permanent====&lt;br /&gt;
Pour mettre une IP permanente aux interfaces de VLAN, il suffit de les configurer dans le fichier &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/network/interfaces&amp;lt;/source&amp;gt; les interfaces de VLAN se configurent comme n'importe quelle interface.&lt;br /&gt;
===Script de la section===&lt;br /&gt;
Voici un script sans fioriture et facile à lire qui reprend les commandes vu dans cette section pour tester cette procédure sans vous prendre la tête. Prenez l'habitude de lire le code source d'un script avant de l’exécuter pour éviter toute compromission involontaire.&lt;br /&gt;
&lt;br /&gt;
Télécharger le script depuis [https://{{SERVERNAME}}/fichiers/réseaux/openvswitch/ovs-conf-trunk.sh nos fichiers].&lt;br /&gt;
===Activer le port trunk===&lt;br /&gt;
L'interface ''eth0'' est notre porte de sortie vers le monde physique, elle est configuré en trunk mais n'est pas allumée, ce qui fait que la communication ne peut se faire avec le commutateur matériel. Il faut ajouter une entrée dans le fichier &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/network/interfaces&amp;lt;/source&amp;gt;.&lt;br /&gt;
 allow-hotplug eth0&lt;br /&gt;
 iface eth0 inet manual&lt;br /&gt;
Et monter l'interface&lt;br /&gt;
 ifup eth0&lt;br /&gt;
===Activation du routage===&lt;br /&gt;
Permanent à partir du prochain démarrage&lt;br /&gt;
 echo 'net.ipv4.ip_forward=1' &amp;gt;&amp;gt; /etc/sysctl.conf&lt;br /&gt;
Activation imédiate&lt;br /&gt;
 echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&lt;br /&gt;
=Configuration Cisco=&lt;br /&gt;
Pour configurer un équipement [[:Category:Cisco|Cisco]] via son port console, nous recommandons le logiciel [[Minicom]] sous Linux ou [https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html Putty] sous Windows.&lt;br /&gt;
==Configuration==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
Switch# conf t&lt;br /&gt;
Switch(config)# hostname 3550-I&lt;br /&gt;
&lt;br /&gt;
3550-I(config)# vlan 10&lt;br /&gt;
3550-I(config-vlan)# vlan 11&lt;br /&gt;
3550-I(config-vlan)# vlan 100&lt;br /&gt;
&lt;br /&gt;
3550-I(config-vlan)# interface g 1/0/1&lt;br /&gt;
3550-I(config-if)# description --- vers Openvswitch ---&lt;br /&gt;
3550-I(config-if)# switchport trunk allowed vlan 1,10,11,100&lt;br /&gt;
3550-I(config-if)# switchport mode trunk&lt;br /&gt;
3550-I(config-if)# no shutdown&lt;br /&gt;
3550-I(config-if)# exit&lt;br /&gt;
&lt;br /&gt;
3550-I(config)# interface vlan 1&lt;br /&gt;
3550-I(config-if)# ip address 192.168.1.254 255.255.255.0&lt;br /&gt;
3550-I(config-if)# no shutdown&lt;br /&gt;
&lt;br /&gt;
3550-I(config)# interface vlan 10&lt;br /&gt;
3550-I(config-if)# ip address 192.168.10.254 255.255.255.0&lt;br /&gt;
3550-I(config-if)# no shutdown&lt;br /&gt;
&lt;br /&gt;
3550-I(config-if)# interface vlan 11&lt;br /&gt;
3550-I(config-if)# ip address 192.168.11.254 255.255.255.00&lt;br /&gt;
3550-I(config-if)# no shutdown&lt;br /&gt;
&lt;br /&gt;
3550-I(config-if)# int vlan 100&lt;br /&gt;
3550-I(config-if)# ip address 192.168.100.254 255.255.255.0&lt;br /&gt;
3550-I(config-if)# no shutdown&lt;br /&gt;
3550-I(config-if)# do write&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==Script de la section==&lt;br /&gt;
Fichier contenant l'ensemble des commandes de la section sans le prompt afin de faire un bête copier/coller.&lt;br /&gt;
&lt;br /&gt;
À télécharger depuis [https://{{SERVERNAME}}/fichiers/réseaux/openvswitch/ovs-cisco-conf-trunk.sh nos fichiers].&lt;br /&gt;
==Test de fonctionnement==&lt;br /&gt;
Pour tester le bon transport des VLAN sur notre lien trunk, nous allons effectuer des pings successifs depuis le commutateur vers les différentes interfaces VLAN d'OVS.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
3550-I#ping 192.168.1.254&lt;br /&gt;
&lt;br /&gt;
Type escape sequence to abort.&lt;br /&gt;
Sending 5, 100-byte ICMP Echos to 192.168.1.254, timeout is 2 seconds:&lt;br /&gt;
!!!!!&lt;br /&gt;
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/203/1007 ms&lt;br /&gt;
3550-I#ping 192.168.10.254&lt;br /&gt;
&lt;br /&gt;
Type escape sequence to abort.&lt;br /&gt;
Sending 5, 100-byte ICMP Echos to 192.168.10.254, timeout is 2 seconds:&lt;br /&gt;
!!!!!&lt;br /&gt;
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/203/1007 ms&lt;br /&gt;
3550-I#ping 192.168.11.254&lt;br /&gt;
&lt;br /&gt;
Type escape sequence to abort.&lt;br /&gt;
Sending 5, 100-byte ICMP Echos to 192.168.11.254, timeout is 2 seconds:&lt;br /&gt;
!!!!!&lt;br /&gt;
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/203/1007 ms&lt;br /&gt;
3550-I#ping 192.168.100.254&lt;br /&gt;
&lt;br /&gt;
Type escape sequence to abort.&lt;br /&gt;
Sending 5, 100-byte ICMP Echos to 192.168.100.254, timeout is 2 seconds:&lt;br /&gt;
!!!!!&lt;br /&gt;
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/203/1007 ms&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=LACP=&lt;br /&gt;
Pour configurer l'agrégation de lien avec un commutateur Cisco, vous pouvez vous référez à [[Lacp - cisco|ce document]].&lt;br /&gt;
==En ligne de commande==&lt;br /&gt;
 ovs-vsctl add-bond br0 bond0 eth0 eth1&lt;br /&gt;
==Via le fichier interfaces==&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
iface bond0 inet manual&lt;br /&gt;
	ovs_bonds eth0 eth1&lt;br /&gt;
	ovs_type OVSBond&lt;br /&gt;
	ovs_bridge vmbr0&lt;br /&gt;
	ovs_options lacp=active bond_mode=balance-tcp vlan_mode=trunk&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==Sources de la section==&lt;br /&gt;
*http://blog.scottlowe.org/2012/10/19/link-aggregation-and-lacp-with-open-vswitch/&lt;br /&gt;
&lt;br /&gt;
=LXC dans des VLAN=&lt;br /&gt;
Dans cette section nous allons voir comment faire fonctionner LXC avec Open vSwitch avec une architecture conteneurisé isolé dans des VLAN.&lt;br /&gt;
{{attention|Je part du principe que seul l'étape [[#Configuration Cisco|Configuration Cisco]] a été suivie afin de rendre les sections indépendantes. Il est cependant aisé d'intégrer ce qui va suivre dans ce qui a précédemment été fait.}}&lt;br /&gt;
==Création du commutateur virtuel==&lt;br /&gt;
===Création du pont===&lt;br /&gt;
 ovs-vsctl --may-exist add-br commut0&lt;br /&gt;
===Ajout du port trunk vers l’extérieur===&lt;br /&gt;
 ovs-vsctl add-port commut0 eth0 trunks=10,11,100&lt;br /&gt;
===Activer le port trunk===&lt;br /&gt;
L'interface ''eth0'' est notre porte de sortie vers le monde physique, elle est configuré en trunk mais n'est pas allumée, ce qui fait que la communication ne peut se faire avec le commutateur matériel. Il faut ajouter une entrée dans le fichier &amp;lt;source lang=&amp;quot;bash&amp;quot; inline&amp;gt;/etc/network/interfaces&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
 allow-hotplug eth0&lt;br /&gt;
 iface eth0 inet manual&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Et monter l'interface&lt;br /&gt;
 ifup eth0&lt;br /&gt;
==Connecter un conteneur LXC à un VLAN==&lt;br /&gt;
===Scripts de configuration réseau===&lt;br /&gt;
Pour que nos conteneurs soient intégrés aux VLAN dé leur démarrage, il faut ajouter leur interface virtuel au commutateur OVS. La difficulté étant que LXC choisi un nom aléatoire pour l'interface virtuel du conteneur à son démarrage, ce qui empêche toute configuration fixe. Pour affecter l'interface du LXC de manière sûr, nous allons créer 2 script qui l'ajoute au commutateur au moment du démarrage et la retire au moment de l'extinction. On en profitera pour étiqueter le bon VLAN à cette interface.&lt;br /&gt;
====Script de démarrage====&lt;br /&gt;
 vim /etc/lxc/ifup&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
ovsCommut=commut0&lt;br /&gt;
TAG=11&lt;br /&gt;
ovs-vsctl --may-exist add-br ${ovsCommut}&lt;br /&gt;
ovs-vsctl --if-exists del-port ${ovsCommut} $5&lt;br /&gt;
ovs-vsctl --may-exist add-port ${ovsCommut} $5&lt;br /&gt;
ovs-vsctl --if-exists set port $5 tag=${TAG}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
====Script d'extinction====&lt;br /&gt;
 vim /etc/lxc/ifdown&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
ovsCommut=commut0&lt;br /&gt;
ovs-vsctl --if-exists del-port ${ovsCommut} $5&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Droits d'accès====&lt;br /&gt;
Il faut rendre ces scripts exécutables&lt;br /&gt;
 chmod +x /etc/lxc/if*&lt;br /&gt;
&lt;br /&gt;
===Configuration du conteneur===&lt;br /&gt;
Nous allons configurer le conteneur pour utiliser ces paramètres&lt;br /&gt;
 vim /var/lib/lxc/&amp;lt;votre_conteneur&amp;gt;/config&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
lxc.network.type = veth&lt;br /&gt;
lxc.network.flags = up&lt;br /&gt;
&lt;br /&gt;
lxc.network.script.up = /etc/lxc/ifup&lt;br /&gt;
lxc.network.script.down = /etc/lxc/ifdown&lt;br /&gt;
lxc.network.hwaddr = 00:16:3e:15:b3:62&lt;br /&gt;
lxc.network.ipv4 = 192.168.11.10/24&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==Passerelle par défaut==&lt;br /&gt;
À ce stade, notre conteneur est dans le VLAN 11. Il pourra donc communiquer avec les machines se trouvant dans ce même VLAN. Cependant, aucun accès vers d'autre réseaux n'est possible en l'absence d'une passerelle de niveau 3. Nous allons ainsi créer une [https://fr.wikipedia.org/wiki/Switch_virtual_interface interface de VLAN] (ou SVI - Switch Virtual Interface) pour le VLAN 11 afin de permettre une commutation de paquet pour accéder à d'autre réseaux.&lt;br /&gt;
===Création d'une interface VLAN11===&lt;br /&gt;
 ovs-vsctl --may-exist add-port commut0 vlan11 tag=11 -- --if-exists set interface vlan11 type=internal&lt;br /&gt;
===Attribution d'une IP sur la SVI===&lt;br /&gt;
====temporaire====&lt;br /&gt;
 ifconfig vlan11 192.168.11.254/24&lt;br /&gt;
====Permanent====&lt;br /&gt;
 vim /etc/network/interfaces&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
allow-hotplug vlan11&lt;br /&gt;
iface vlan11 inet static&lt;br /&gt;
	address 192.168.11.253&lt;br /&gt;
	netmask 255.255.255.0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Activation de l'interface&lt;br /&gt;
 ifup vlan11&lt;br /&gt;
===Activation du routage===&lt;br /&gt;
Permanent à partir du prochain démarrage&lt;br /&gt;
 echo 'net.ipv4.ip_forward=1' &amp;gt;&amp;gt; /etc/sysctl.conf&lt;br /&gt;
Activation imédiate&lt;br /&gt;
 echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
==Source de la section==&lt;br /&gt;
*http://stackoverflow.com/questions/34021070/lxc-with-open-vswitch#34038873&lt;br /&gt;
=KVM dans des VLAN=&lt;br /&gt;
Veuillez suivre les étapes dans [[Qemu|ce document]] pour utiliser une machine virtuelle KVM dans un VLAN Open vSwitch.&lt;br /&gt;
=Sources=&lt;br /&gt;
* http://brezular.com/2013/12/17/connecting-open-vswitch-running-on-debian-to-cisco-catalyst-3550-via-trunk/&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Qemu&amp;diff=506</id>
		<title>Qemu</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Qemu&amp;diff=506"/>
		<updated>2017-05-14T12:48:37Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : /* Démarrage de la machine virtuelle */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:virtualisation]]&lt;br /&gt;
==Prérequis==&lt;br /&gt;
&lt;br /&gt;
* [[Open vSwitch|L'installation d'Open vSwitch et création d'un  commutateur virtuel]]&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
Qemu est dispnible dans les dépots Debian&lt;br /&gt;
&lt;br /&gt;
 # apt install qemu-system&lt;br /&gt;
&lt;br /&gt;
==Script réseau==&lt;br /&gt;
Pour que la machine virtuelle puise se connecter sur Open vSwitch, des scripts sont a créer.&lt;br /&gt;
&lt;br /&gt;
{{attention|Chaque VLAN doit avoir un script de démarrage de l’interface. le script d’arrêt est commun à tous les VLANs.}}&lt;br /&gt;
&lt;br /&gt;
{{astuce|Les scripts peuvent être dans l'arborescence que vous voulez.}}&lt;br /&gt;
&lt;br /&gt;
===Script de démarrage de l’interface===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
OVSCOMMUT=br0&lt;br /&gt;
OVSTAG=100&lt;br /&gt;
echo &amp;quot;Execution de /etc/qemu/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Allumage de $1 pour l'ajout au pont OVS...&amp;quot;&lt;br /&gt;
ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Ajout de $1 à ${OVSCOMMUT}...&amp;quot;&lt;br /&gt;
ovs-vsctl --may-exist add-br ${OVSCOMMUT}&lt;br /&gt;
ovs-vsctl --if-exists del-port ${OVSCOMMUT} $1&lt;br /&gt;
ovs-vsctl --may-exist add-port ${OVSCOMMUT} $1&lt;br /&gt;
ovs-vsctl --if-exists set port $1 tag=${OVSTAG}&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variables:&lt;br /&gt;
* '''OVSCOMMUT''' : interface de votre commutateur virtuel&lt;br /&gt;
* '''OVSTAG''' : numéro du Vlan&lt;br /&gt;
&lt;br /&gt;
===Script de d'arrêt de l’interface===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
OVSCOMMUT=br0&lt;br /&gt;
echo &amp;quot;Execution de /etc/qemu/qemu-ifdown&amp;quot;&lt;br /&gt;
echo &amp;quot;Arrêt de $1 pour la suppression au pont OVS...&amp;quot;&lt;br /&gt;
ip link set $1 down&lt;br /&gt;
echo &amp;quot;Suppression de $1 à ${OVSCOMMUT}...&amp;quot;&lt;br /&gt;
ovs-vsctl --if-exists del-port ${OVSCOMMUT} $1&lt;br /&gt;
echo &amp;quot;Suppression de $1...&amp;quot;&lt;br /&gt;
ip link delete dev $1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variable:&lt;br /&gt;
* '''OVSCOMMUT''' : interface de votre commutateur virtuel&lt;br /&gt;
&lt;br /&gt;
===Modifier les droits===&lt;br /&gt;
Ajouter les droits d’exécutions aux scripts&lt;br /&gt;
 # chmod +x /etc/qemu/qemu-if*&lt;br /&gt;
&lt;br /&gt;
==Création d'une machine virtuelle==&lt;br /&gt;
&lt;br /&gt;
Création d'un disque virtuel&lt;br /&gt;
&lt;br /&gt;
 # qemu-img create -f qcow2 hdd.qcow2 10G&lt;br /&gt;
&lt;br /&gt;
Paramètres:&lt;br /&gt;
* '''-f qcow2''' : type du disque vituel&lt;br /&gt;
* '''hdd.qcow2''' : nom de l'image disque&lt;br /&gt;
* '''10G''' : taille attribué au disque&lt;br /&gt;
&lt;br /&gt;
==Démarrage de la machine virtuelle==&lt;br /&gt;
&lt;br /&gt;
 # qemu-system-x86_64 -m 1024 -name host1 -net nic,macaddr=52:54:00:12:34:57 -net tap,ifname=host1-eth0,script=/etc/qemu/qemu-ifup,downscript=/etc/qemu/qemu-ifdown --cdrom /srv/iso/debian-live-8.7.1-amd64-lxde-bureau.iso -vnc :6 --enable-kvm -hda /root/hdd.qcow2&lt;br /&gt;
&lt;br /&gt;
Paramètres:&lt;br /&gt;
* '''-m 1024''' : mémoire attribué a la machine virtuelle (en octets)&lt;br /&gt;
* '''-name''' : nom de la machine virtuelle&lt;br /&gt;
* '''-net  nic,macaddr=52:54:00:12:34:57''' : l'adresse MAC de la machine virtuelle ([[Lxc#Script_de_g.C3.A9n.C3.A9ration_d.27adresse_MAC|voir]])&lt;br /&gt;
* '''-net tap,ifname=host1-eth0,script=/etc/qemu/qemu-ifup,downscript=/etc/qemu/qemu-ifdown''' : nom de l'interface réseau sur la machine maître suivie des scripts précédemment créés&lt;br /&gt;
* '''--cdrom /srv/iso/debian-live-8.7.1-amd64-lxde-bureau.iso''' : lien vers l'ISO du CD-ROM&lt;br /&gt;
* '''-vnc :6''' : Utilisation de [https://fr.wikipedia.org/wiki/Virtual_Network_Computing VNC] sur le port 5906&lt;br /&gt;
* '''--enable-kvm''' : Permet la prise en charge des instructions de virtualisation du processeur&lt;br /&gt;
* '''-hda /root/hdd.qcow2''' : lien vers le disque virtuel précédant créé&lt;br /&gt;
&lt;br /&gt;
==Arrêt de la machine virtuelle==&lt;br /&gt;
L’arrêt s'effectue via la fonction dédiée à chaque système émulé. Pour forcer l’extinction, effectuer un &amp;lt;code&amp;gt;CTRL+C&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Source=&lt;br /&gt;
*http://www.innercoder.com/blog/installing-and-configuring-openvswitch-with-qemu-kvm/&lt;br /&gt;
*https://wiki.archlinux.org/index.php/QEMU#Creating_bridge_manually&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Qemu&amp;diff=505</id>
		<title>Qemu</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Qemu&amp;diff=505"/>
		<updated>2017-05-14T12:48:06Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:virtualisation]]&lt;br /&gt;
==Prérequis==&lt;br /&gt;
&lt;br /&gt;
* [[Open vSwitch|L'installation d'Open vSwitch et création d'un  commutateur virtuel]]&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
Qemu est dispnible dans les dépots Debian&lt;br /&gt;
&lt;br /&gt;
 # apt install qemu-system&lt;br /&gt;
&lt;br /&gt;
==Script réseau==&lt;br /&gt;
Pour que la machine virtuelle puise se connecter sur Open vSwitch, des scripts sont a créer.&lt;br /&gt;
&lt;br /&gt;
{{attention|Chaque VLAN doit avoir un script de démarrage de l’interface. le script d’arrêt est commun à tous les VLANs.}}&lt;br /&gt;
&lt;br /&gt;
{{astuce|Les scripts peuvent être dans l'arborescence que vous voulez.}}&lt;br /&gt;
&lt;br /&gt;
===Script de démarrage de l’interface===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
OVSCOMMUT=br0&lt;br /&gt;
OVSTAG=100&lt;br /&gt;
echo &amp;quot;Execution de /etc/qemu/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Allumage de $1 pour l'ajout au pont OVS...&amp;quot;&lt;br /&gt;
ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Ajout de $1 à ${OVSCOMMUT}...&amp;quot;&lt;br /&gt;
ovs-vsctl --may-exist add-br ${OVSCOMMUT}&lt;br /&gt;
ovs-vsctl --if-exists del-port ${OVSCOMMUT} $1&lt;br /&gt;
ovs-vsctl --may-exist add-port ${OVSCOMMUT} $1&lt;br /&gt;
ovs-vsctl --if-exists set port $1 tag=${OVSTAG}&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variables:&lt;br /&gt;
* '''OVSCOMMUT''' : interface de votre commutateur virtuel&lt;br /&gt;
* '''OVSTAG''' : numéro du Vlan&lt;br /&gt;
&lt;br /&gt;
===Script de d'arrêt de l’interface===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
OVSCOMMUT=br0&lt;br /&gt;
echo &amp;quot;Execution de /etc/qemu/qemu-ifdown&amp;quot;&lt;br /&gt;
echo &amp;quot;Arrêt de $1 pour la suppression au pont OVS...&amp;quot;&lt;br /&gt;
ip link set $1 down&lt;br /&gt;
echo &amp;quot;Suppression de $1 à ${OVSCOMMUT}...&amp;quot;&lt;br /&gt;
ovs-vsctl --if-exists del-port ${OVSCOMMUT} $1&lt;br /&gt;
echo &amp;quot;Suppression de $1...&amp;quot;&lt;br /&gt;
ip link delete dev $1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variable:&lt;br /&gt;
* '''OVSCOMMUT''' : interface de votre commutateur virtuel&lt;br /&gt;
&lt;br /&gt;
===Modifier les droits===&lt;br /&gt;
Ajouter les droits d’exécutions aux scripts&lt;br /&gt;
 # chmod +x /etc/qemu/qemu-if*&lt;br /&gt;
&lt;br /&gt;
==Création d'une machine virtuelle==&lt;br /&gt;
&lt;br /&gt;
Création d'un disque virtuel&lt;br /&gt;
&lt;br /&gt;
 # qemu-img create -f qcow2 hdd.qcow2 10G&lt;br /&gt;
&lt;br /&gt;
Paramètres:&lt;br /&gt;
* '''-f qcow2''' : type du disque vituel&lt;br /&gt;
* '''hdd.qcow2''' : nom de l'image disque&lt;br /&gt;
* '''10G''' : taille attribué au disque&lt;br /&gt;
&lt;br /&gt;
==Démarrage de la machine virtuelle==&lt;br /&gt;
&lt;br /&gt;
 # qemu-system-x86_64 -m 1024 -name host1 -net nic,macaddr=52:54:00:12:34:57 -net tap,ifname=host1-eth0,script=/etc/qemu/qemu-ifup,downscript=/etc/qemu/qemu-ifdown --cdrom /srv/iso/debian-live-8.7.1-amd64-lxde-bureau.iso -vnc :6 --enable-kvm -hda /root/hdd.qcow2&lt;br /&gt;
&lt;br /&gt;
Paramètres:&lt;br /&gt;
* '''-m 1024''' : mémoire attribué a la machine virtuelle (en octets)&lt;br /&gt;
* '''-name''' : nom de la machine virtuelle&lt;br /&gt;
* '''-net  nic,macaddr=52:54:00:00:01:00''' : l'adresse MAC de la machine virtuelle ([[Lxc#Script_de_g.C3.A9n.C3.A9ration_d.27adresse_MAC|voir]])&lt;br /&gt;
* '''-net tap,ifname=host1-eth0,script=/etc/qemu/qemu-ifup,downscript=/etc/qemu/qemu-ifdown''' : nom de l'interface réseau sur la machine maître suivie des scripts précédemment créés&lt;br /&gt;
* '''--cdrom /srv/iso/debian-live-8.7.1-amd64-lxde-bureau.iso''' : lien vers l'ISO du CD-ROM&lt;br /&gt;
* '''-vnc :6''' : Utilisation de [https://fr.wikipedia.org/wiki/Virtual_Network_Computing VNC] sur le port 5906&lt;br /&gt;
* '''--enable-kvm''' : Permet la prise en charge des instructions de virtualisation du processeur&lt;br /&gt;
* '''-hda /root/hdd.qcow2''' : lien vers le disque virtuel précédant créé&lt;br /&gt;
&lt;br /&gt;
==Arrêt de la machine virtuelle==&lt;br /&gt;
L’arrêt s'effectue via la fonction dédiée à chaque système émulé. Pour forcer l’extinction, effectuer un &amp;lt;code&amp;gt;CTRL+C&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Source=&lt;br /&gt;
*http://www.innercoder.com/blog/installing-and-configuring-openvswitch-with-qemu-kvm/&lt;br /&gt;
*https://wiki.archlinux.org/index.php/QEMU#Creating_bridge_manually&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Qemu&amp;diff=502</id>
		<title>Qemu</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Qemu&amp;diff=502"/>
		<updated>2017-05-13T23:44:38Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:virtualisation]]&lt;br /&gt;
==Prérequis==&lt;br /&gt;
&lt;br /&gt;
* [[Open vSwitch|L'installation d'Open vSwitch et création d'un  commutateur virtuel]]&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
Qemu est dispnible dans les dépots Debian&lt;br /&gt;
&lt;br /&gt;
 # apt install qemu-system&lt;br /&gt;
&lt;br /&gt;
==Script réseau==&lt;br /&gt;
Pour que la machine virtuelle puise se connecter sur Open vSwitch, des scripts sont a créer.&lt;br /&gt;
&lt;br /&gt;
{{attention|Chaque VLAN doit avoir un script de démarrage de l’interface. le script d’arrêt est commun à tous les VLANs.}}&lt;br /&gt;
&lt;br /&gt;
{{astuce|Les scripts peuvent être dans l'arborescence que vous voulez.}}&lt;br /&gt;
&lt;br /&gt;
===Script de démarrage de l’interface===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
OVSCOMMUT=br0&lt;br /&gt;
OVSTAG=100&lt;br /&gt;
echo &amp;quot;Execution de /etc/qemu/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Allumage de $1 pour l'ajout au pont OVS...&amp;quot;&lt;br /&gt;
ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Ajout de $1 à ${OVSCOMMUT}...&amp;quot;&lt;br /&gt;
ovs-vsctl --may-exist add-br ${OVSCOMMUT}&lt;br /&gt;
ovs-vsctl --if-exists del-port ${OVSCOMMUT} $1&lt;br /&gt;
ovs-vsctl --may-exist add-port ${OVSCOMMUT} $1&lt;br /&gt;
ovs-vsctl --if-exists set port $1 tag=${OVSTAG}&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variables:&lt;br /&gt;
* '''OVSCOMMUT''' : interface de votre commutateur virtuel&lt;br /&gt;
* '''OVSTAG''' : numéro du Vlan&lt;br /&gt;
&lt;br /&gt;
===Script de d'arrêt de l’interface===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
OVSCOMMUT=br0&lt;br /&gt;
echo &amp;quot;Execution de /etc/qemu/qemu-ifdown&amp;quot;&lt;br /&gt;
echo &amp;quot;Arrêt de $1 pour la suppression au pont OVS...&amp;quot;&lt;br /&gt;
ip link set $1 down&lt;br /&gt;
echo &amp;quot;Suppression de $1 à ${OVSCOMMUT}...&amp;quot;&lt;br /&gt;
ovs-vsctl --if-exists del-port ${OVSCOMMUT} $1&lt;br /&gt;
echo &amp;quot;Suppression de $1...&amp;quot;&lt;br /&gt;
ip link delete dev $1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variable:&lt;br /&gt;
* '''OVSCOMMUT''' : interface de votre commutateur virtuel&lt;br /&gt;
&lt;br /&gt;
===Modifier les droits===&lt;br /&gt;
Ajouter les droits d’exécutions aux scripts&lt;br /&gt;
 # chmod +x /etc/qemu/qemu-if*&lt;br /&gt;
&lt;br /&gt;
==Création d'une machine virtuelle==&lt;br /&gt;
&lt;br /&gt;
Création d'un disque virtuel&lt;br /&gt;
&lt;br /&gt;
 # qemu-img create -f qcow2 hdd.qcow2 10G&lt;br /&gt;
&lt;br /&gt;
Paramètres:&lt;br /&gt;
* '''-f qcow2''' : type du disque vituel&lt;br /&gt;
* '''hdd.qcow2''' : nom de l'image disque&lt;br /&gt;
* '''10G''' : taille attribué au disque&lt;br /&gt;
&lt;br /&gt;
==Démarrage de la machine virtuelle==&lt;br /&gt;
&lt;br /&gt;
 # qemu-system-x86_64 -m 1024 -name host1 -net nic -net tap,ifname=host1-eth0,script=/etc/qemu/qemu-ifup,downscript=/etc/qemu/qemu-ifdown --cdrom /srv/iso/debian-live-8.7.1-amd64-lxde-bureau.iso -vnc :6 --enable-kvm -hda /root/hdd.qcow2&lt;br /&gt;
&lt;br /&gt;
Paramètres:&lt;br /&gt;
* '''-m 1024''' : mémoire attribué a la machine virtuelle (en octets)&lt;br /&gt;
* '''-name''' : nom de la machine virtuelle&lt;br /&gt;
* '''-net  nic''' : paramètre essentielle pour le réseau&lt;br /&gt;
* '''-net tap,ifname=host1-eth0,script=/etc/qemu/qemu-ifup,downscript=/etc/qemu/qemu-ifdown''' : nom de l'interface réseau sur la machine maître suivie des scripts précédemment créés&lt;br /&gt;
* '''--cdrom /srv/iso/debian-live-8.7.1-amd64-lxde-bureau.iso''' : lien vers l'ISO du CD-ROM&lt;br /&gt;
* '''-vnc :6''' : Utilisation de [https://fr.wikipedia.org/wiki/Virtual_Network_Computing VNC] sur le port 5906&lt;br /&gt;
* '''--enable-kvm''' : Permet la prise en charge des instructions de virtualisation du processeur&lt;br /&gt;
* '''-hda /root/hdd.qcow2''' : lien vers le disque virtuel précédant créé&lt;br /&gt;
&lt;br /&gt;
==Arrêt de la machine virtuelle==&lt;br /&gt;
L’arrêt s'effectue via la fonction dédiée à chaque système émulé. Pour forcer l’extinction, effectuer un &amp;lt;code&amp;gt;CTRL+C&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Source=&lt;br /&gt;
*http://www.innercoder.com/blog/installing-and-configuring-openvswitch-with-qemu-kvm/&lt;br /&gt;
*https://wiki.archlinux.org/index.php/QEMU#Creating_bridge_manually&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Qemu&amp;diff=501</id>
		<title>Qemu</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Qemu&amp;diff=501"/>
		<updated>2017-05-13T23:30:55Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : /* Script réseau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:virtualisation]]&lt;br /&gt;
==Prérequis==&lt;br /&gt;
&lt;br /&gt;
* [[Open vSwitch|L'installation d'Open vSwitch et création d'un  commutateur virtuel]]&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
Qemu est dispnible dans les dépots Debian&lt;br /&gt;
&lt;br /&gt;
 # apt install qemu-system&lt;br /&gt;
&lt;br /&gt;
==Script réseau==&lt;br /&gt;
Pour que la machine virtuelle puise se connecter sur Open vSwitch, des scripts sont a créer.&lt;br /&gt;
&lt;br /&gt;
{{attention|Chaque VLAN doit avoir un script de démarrage de l’interface. le script d’arrêt est commun à tous les VLANs.}}&lt;br /&gt;
&lt;br /&gt;
{{astuce|Les scripts peuvent être dans l'arborescence que vous voulez.}}&lt;br /&gt;
&lt;br /&gt;
===Script de démarrage de l’interface===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
OVSCOMMUT=br0&lt;br /&gt;
OVSTAG=100&lt;br /&gt;
echo &amp;quot;Execution de /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Allumage de $1 pour l'ajout au pont OVS...&amp;quot;&lt;br /&gt;
ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Ajout de $1 à ${OVSCOMMUT}...&amp;quot;&lt;br /&gt;
ovs-vsctl --may-exist add-br ${OVSCOMMUT}&lt;br /&gt;
ovs-vsctl --if-exists del-port ${OVSCOMMUT} $1&lt;br /&gt;
ovs-vsctl --may-exist add-port ${OVSCOMMUT} $1&lt;br /&gt;
ovs-vsctl --if-exists set port $1 tag=${OVSTAG}&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variables:&lt;br /&gt;
* '''OVSCOMMUT''' : interface de votre commutateur virtuel&lt;br /&gt;
* '''OVSTAG''' : numéro du Vlan&lt;br /&gt;
&lt;br /&gt;
===Script de d'arrêt de l’interface===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sh&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
OVSCOMMUT=br0&lt;br /&gt;
echo &amp;quot;Execution de /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
echo &amp;quot;Arrêt de $1 pour la suppression au pont OVS...&amp;quot;&lt;br /&gt;
ip link set $1 down&lt;br /&gt;
echo &amp;quot;Suppression de $1 à ${OVSCOMMUT}...&amp;quot;&lt;br /&gt;
ovs-vsctl --if-exists del-port ${OVSCOMMUT} $1&lt;br /&gt;
echo &amp;quot;Suppression de $1...&amp;quot;&lt;br /&gt;
ip link delete dev $1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variable:&lt;br /&gt;
* '''OVSCOMMUT''' : interface de votre commutateur virtuel&lt;br /&gt;
&lt;br /&gt;
===Modifier les droits===&lt;br /&gt;
Ajouter les droits d’exécutions aux scripts&lt;br /&gt;
 # chmod +x /etc/qemu/qemu-if*&lt;br /&gt;
&lt;br /&gt;
==Création d'une machine virtuelle==&lt;br /&gt;
&lt;br /&gt;
Création d'un disque virtuel&lt;br /&gt;
&lt;br /&gt;
 # qemu-img create -f qcow2 hdd.qcow2 10G&lt;br /&gt;
&lt;br /&gt;
Paramètres:&lt;br /&gt;
* '''-f qcow2''' : type du disque vituel&lt;br /&gt;
* '''hdd.qcow2''' : nom de l'image disque&lt;br /&gt;
* '''10G''' : taille attribué au disque&lt;br /&gt;
&lt;br /&gt;
==Démarrage de la machine virtuelle==&lt;br /&gt;
&lt;br /&gt;
 # qemu-system-x86_64 -m 1024 -name host1 -net nic,macaddr=52:54:00:00:01:00 -net tap,ifname=r1-eth0,script=/root/qemu-ifup,downscript=/root/qemu-ifdown --cdrom /srv/iso/debian-live-8.7.1-amd64-lxde-bureau.iso -vnc :6 --enable-kvm -hda /root/hdd.qcow2&lt;br /&gt;
&lt;br /&gt;
Paramètres:&lt;br /&gt;
* '''-m 1024''' : mémoire attribué a la machine virtuelle (en octets)&lt;br /&gt;
* '''-name''' : nom de la machine virtuelle&lt;br /&gt;
* '''-net  nic,macaddr=52:54:00:00:01:00''' : l'adresse MAC de la machine virtuelle ([[Lxc#Script_de_g.C3.A9n.C3.A9ration_d.27adresse_MAC|voir]])&lt;br /&gt;
* '''-net tap,ifname=r1-eth0,script=/root/qemu-ifup,downscript=/root/qemu-ifdown''' : nom de l'interface réseau sur la machine maître suivie des scripts précédemment créés&lt;br /&gt;
* '''--cdrom /srv/iso/debian-live-8.7.1-amd64-lxde-bureau.iso''' : lien vers l'ISO du CD-ROM&lt;br /&gt;
* '''-vnc :6''' : Utilisation de [https://fr.wikipedia.org/wiki/Virtual_Network_Computing VNC] sur le port 5906&lt;br /&gt;
* '''--enable-kvm''' : Permet la prise en charge des instructions de virtualisation du processeur&lt;br /&gt;
* '''-hda /root/hdd.qcow2''' : lien vers le disque virtuel précédant créé&lt;br /&gt;
&lt;br /&gt;
==Arrêt de la machine virtuelle==&lt;br /&gt;
L’arrêt s'effectue via la fonction dédiée à chaque système émulé. Pour forcer l’extinction, effectuer un &amp;lt;code&amp;gt;CTRL+C&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Source=&lt;br /&gt;
*http://www.innercoder.com/blog/installing-and-configuring-openvswitch-with-qemu-kvm/&lt;br /&gt;
*https://wiki.archlinux.org/index.php/QEMU#Creating_bridge_manually&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Qemu&amp;diff=500</id>
		<title>Qemu</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Qemu&amp;diff=500"/>
		<updated>2017-05-13T23:26:44Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : /* Source */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:virtualisation]]&lt;br /&gt;
==Prérequis==&lt;br /&gt;
&lt;br /&gt;
* [[Open vSwitch|L'installation d'Open vSwitch et création d'un  commutateur virtuel]]&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
Qemu est dispnible dans les dépots Debian&lt;br /&gt;
&lt;br /&gt;
 # apt install qemu-system&lt;br /&gt;
&lt;br /&gt;
==Script réseau==&lt;br /&gt;
Pour que la machine virtuelle puise se connecter sur Open vSwitch, des scripts sont a créer.&lt;br /&gt;
&lt;br /&gt;
{{attention|Chaque vlan doit avoir un script de démarrage de l’interface. le script d’arrêt est commun a tous les vlans}}&lt;br /&gt;
&lt;br /&gt;
{{astuce|Les scripts peuvent être dans l'arborescence que vous voulez}}&lt;br /&gt;
&lt;br /&gt;
===Script de démarrage de l’interface===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
OVSCOMMUT=br0&lt;br /&gt;
OVSTAG=100&lt;br /&gt;
echo &amp;quot;Execution de /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Allumage de $1 pour l'ajout au pont OVS...&amp;quot;&lt;br /&gt;
ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Ajout de $1 à ${OVSCOMMUT}...&amp;quot;&lt;br /&gt;
ovs-vsctl --may-exist add-br ${OVSCOMMUT}&lt;br /&gt;
ovs-vsctl --if-exists del-port ${OVSCOMMUT} $1&lt;br /&gt;
ovs-vsctl --may-exist add-port ${OVSCOMMUT} $1&lt;br /&gt;
ovs-vsctl --if-exists set port $1 tag=${OVSTAG}&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variables:&lt;br /&gt;
* '''OVSCOMMUT''' : interface de votre commutateur virtuel&lt;br /&gt;
* '''OVSTAG''' : numéro du Vlan&lt;br /&gt;
&lt;br /&gt;
===Script de d'arrêt de l’interface===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
OVSCOMMUT=br0&lt;br /&gt;
echo &amp;quot;Execution de /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
echo &amp;quot;Arrêt de $1 pour la suppression au pont OVS...&amp;quot;&lt;br /&gt;
ip link set $1 down&lt;br /&gt;
echo &amp;quot;Suppression de $1 à ${OVSCOMMUT}...&amp;quot;&lt;br /&gt;
ovs-vsctl --if-exists del-port ${OVSCOMMUT} $1&lt;br /&gt;
echo &amp;quot;Suppression de $1...&amp;quot;&lt;br /&gt;
ip link delete dev $1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variable:&lt;br /&gt;
* '''OVSCOMMUT''' : interface de votre commutateur virtuel&lt;br /&gt;
&lt;br /&gt;
===Modifier les droits===&lt;br /&gt;
Ajouter les droits d’exécutions aux scripts&lt;br /&gt;
 # chmod +x /etc/qemu/qemu-if*&lt;br /&gt;
&lt;br /&gt;
==Création d'une machine virtuelle==&lt;br /&gt;
&lt;br /&gt;
Création d'un disque virtuel&lt;br /&gt;
&lt;br /&gt;
 # qemu-img create -f qcow2 hdd.qcow2 10G&lt;br /&gt;
&lt;br /&gt;
Paramètres:&lt;br /&gt;
* '''-f qcow2''' : type du disque vituel&lt;br /&gt;
* '''hdd.qcow2''' : nom de l'image disque&lt;br /&gt;
* '''10G''' : taille attribué au disque&lt;br /&gt;
&lt;br /&gt;
==Démarrage de la machine virtuelle==&lt;br /&gt;
&lt;br /&gt;
 # qemu-system-x86_64 -m 1024 -name host1 -net nic,macaddr=52:54:00:00:01:00 -net tap,ifname=r1-eth0,script=/root/qemu-ifup,downscript=/root/qemu-ifdown --cdrom /srv/iso/debian-live-8.7.1-amd64-lxde-bureau.iso -vnc :6 --enable-kvm -hda /root/hdd.qcow2&lt;br /&gt;
&lt;br /&gt;
Paramètres:&lt;br /&gt;
* '''-m 1024''' : mémoire attribué a la machine virtuelle (en octets)&lt;br /&gt;
* '''-name''' : nom de la machine virtuelle&lt;br /&gt;
* '''-net  nic,macaddr=52:54:00:00:01:00''' : l'adresse MAC de la machine virtuelle ([[Lxc#Script_de_g.C3.A9n.C3.A9ration_d.27adresse_MAC|voir]])&lt;br /&gt;
* '''-net tap,ifname=r1-eth0,script=/root/qemu-ifup,downscript=/root/qemu-ifdown''' : nom de l'interface réseau sur la machine maître suivie des scripts précédemment créés&lt;br /&gt;
* '''--cdrom /srv/iso/debian-live-8.7.1-amd64-lxde-bureau.iso''' : lien vers l'ISO du CD-ROM&lt;br /&gt;
* '''-vnc :6''' : Utilisation de [https://fr.wikipedia.org/wiki/Virtual_Network_Computing VNC] sur le port 5906&lt;br /&gt;
* '''--enable-kvm''' : Permet la prise en charge des instructions de virtualisation du processeur&lt;br /&gt;
* '''-hda /root/hdd.qcow2''' : lien vers le disque virtuel précédant créé&lt;br /&gt;
&lt;br /&gt;
==Arrêt de la machine virtuelle==&lt;br /&gt;
L’arrêt s'effectue via la fonction dédiée à chaque système émulé. Pour forcer l’extinction, effectuer un &amp;lt;code&amp;gt;CTRL+C&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Source=&lt;br /&gt;
*http://www.innercoder.com/blog/installing-and-configuring-openvswitch-with-qemu-kvm/&lt;br /&gt;
*https://wiki.archlinux.org/index.php/QEMU#Creating_bridge_manually&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Qemu&amp;diff=499</id>
		<title>Qemu</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Qemu&amp;diff=499"/>
		<updated>2017-05-13T23:25:49Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : /* Droits */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:virtualisation]]&lt;br /&gt;
==Prérequis==&lt;br /&gt;
&lt;br /&gt;
* [[Open vSwitch|L'installation d'Open vSwitch et création d'un  commutateur virtuel]]&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
Qemu est dispnible dans les dépots Debian&lt;br /&gt;
&lt;br /&gt;
 # apt install qemu-system&lt;br /&gt;
&lt;br /&gt;
==Script réseau==&lt;br /&gt;
Pour que la machine virtuelle puise se connecter sur Open vSwitch, des scripts sont a créer.&lt;br /&gt;
&lt;br /&gt;
{{attention|Chaque vlan doit avoir un script de démarrage de l’interface. le script d’arrêt est commun a tous les vlans}}&lt;br /&gt;
&lt;br /&gt;
{{astuce|Les scripts peuvent être dans l'arborescence que vous voulez}}&lt;br /&gt;
&lt;br /&gt;
===Script de démarrage de l’interface===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
OVSCOMMUT=br0&lt;br /&gt;
OVSTAG=100&lt;br /&gt;
echo &amp;quot;Execution de /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Allumage de $1 pour l'ajout au pont OVS...&amp;quot;&lt;br /&gt;
ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Ajout de $1 à ${OVSCOMMUT}...&amp;quot;&lt;br /&gt;
ovs-vsctl --may-exist add-br ${OVSCOMMUT}&lt;br /&gt;
ovs-vsctl --if-exists del-port ${OVSCOMMUT} $1&lt;br /&gt;
ovs-vsctl --may-exist add-port ${OVSCOMMUT} $1&lt;br /&gt;
ovs-vsctl --if-exists set port $1 tag=${OVSTAG}&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variables:&lt;br /&gt;
* '''OVSCOMMUT''' : interface de votre commutateur virtuel&lt;br /&gt;
* '''OVSTAG''' : numéro du Vlan&lt;br /&gt;
&lt;br /&gt;
===Script de d'arrêt de l’interface===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
OVSCOMMUT=br0&lt;br /&gt;
echo &amp;quot;Execution de /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
echo &amp;quot;Arrêt de $1 pour la suppression au pont OVS...&amp;quot;&lt;br /&gt;
ip link set $1 down&lt;br /&gt;
echo &amp;quot;Suppression de $1 à ${OVSCOMMUT}...&amp;quot;&lt;br /&gt;
ovs-vsctl --if-exists del-port ${OVSCOMMUT} $1&lt;br /&gt;
echo &amp;quot;Suppression de $1...&amp;quot;&lt;br /&gt;
ip link delete dev $1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variable:&lt;br /&gt;
* '''OVSCOMMUT''' : interface de votre commutateur virtuel&lt;br /&gt;
&lt;br /&gt;
===Modifier les droits===&lt;br /&gt;
Ajouter les droits d’exécutions aux scripts&lt;br /&gt;
 # chmod +x /etc/qemu/qemu-if*&lt;br /&gt;
&lt;br /&gt;
==Création d'une machine virtuelle==&lt;br /&gt;
&lt;br /&gt;
Création d'un disque virtuel&lt;br /&gt;
&lt;br /&gt;
 # qemu-img create -f qcow2 hdd.qcow2 10G&lt;br /&gt;
&lt;br /&gt;
Paramètres:&lt;br /&gt;
* '''-f qcow2''' : type du disque vituel&lt;br /&gt;
* '''hdd.qcow2''' : nom de l'image disque&lt;br /&gt;
* '''10G''' : taille attribué au disque&lt;br /&gt;
&lt;br /&gt;
==Démarrage de la machine virtuelle==&lt;br /&gt;
&lt;br /&gt;
 # qemu-system-x86_64 -m 1024 -name host1 -net nic,macaddr=52:54:00:00:01:00 -net tap,ifname=r1-eth0,script=/root/qemu-ifup,downscript=/root/qemu-ifdown --cdrom /srv/iso/debian-live-8.7.1-amd64-lxde-bureau.iso -vnc :6 --enable-kvm -hda /root/hdd.qcow2&lt;br /&gt;
&lt;br /&gt;
Paramètres:&lt;br /&gt;
* '''-m 1024''' : mémoire attribué a la machine virtuelle (en octets)&lt;br /&gt;
* '''-name''' : nom de la machine virtuelle&lt;br /&gt;
* '''-net  nic,macaddr=52:54:00:00:01:00''' : l'adresse MAC de la machine virtuelle ([[Lxc#Script_de_g.C3.A9n.C3.A9ration_d.27adresse_MAC|voir]])&lt;br /&gt;
* '''-net tap,ifname=r1-eth0,script=/root/qemu-ifup,downscript=/root/qemu-ifdown''' : nom de l'interface réseau sur la machine maître suivie des scripts précédemment créés&lt;br /&gt;
* '''--cdrom /srv/iso/debian-live-8.7.1-amd64-lxde-bureau.iso''' : lien vers l'ISO du CD-ROM&lt;br /&gt;
* '''-vnc :6''' : Utilisation de [https://fr.wikipedia.org/wiki/Virtual_Network_Computing VNC] sur le port 5906&lt;br /&gt;
* '''--enable-kvm''' : Permet la prise en charge des instructions de virtualisation du processeur&lt;br /&gt;
* '''-hda /root/hdd.qcow2''' : lien vers le disque virtuel précédant créé&lt;br /&gt;
&lt;br /&gt;
==Arrêt de la machine virtuelle==&lt;br /&gt;
L’arrêt s'effectue via la fonction dédiée à chaque système émulé. Pour forcer l’extinction, effectuer un &amp;lt;code&amp;gt;CTRL+C&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Source=&lt;br /&gt;
*http://www.innercoder.com/blog/installing-and-configuring-openvswitch-with-qemu-kvm/&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Qemu&amp;diff=498</id>
		<title>Qemu</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Qemu&amp;diff=498"/>
		<updated>2017-05-13T23:25:13Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : /* Script réseau */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:virtualisation]]&lt;br /&gt;
==Prérequis==&lt;br /&gt;
&lt;br /&gt;
* [[Open vSwitch|L'installation d'Open vSwitch et création d'un  commutateur virtuel]]&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
Qemu est dispnible dans les dépots Debian&lt;br /&gt;
&lt;br /&gt;
 # apt install qemu-system&lt;br /&gt;
&lt;br /&gt;
==Script réseau==&lt;br /&gt;
Pour que la machine virtuelle puise se connecter sur Open vSwitch, des scripts sont a créer.&lt;br /&gt;
&lt;br /&gt;
{{attention|Chaque vlan doit avoir un script de démarrage de l’interface. le script d’arrêt est commun a tous les vlans}}&lt;br /&gt;
&lt;br /&gt;
{{astuce|Les scripts peuvent être dans l'arborescence que vous voulez}}&lt;br /&gt;
&lt;br /&gt;
===Script de démarrage de l’interface===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
OVSCOMMUT=br0&lt;br /&gt;
OVSTAG=100&lt;br /&gt;
echo &amp;quot;Execution de /etc/qemu-ifup&amp;quot;&lt;br /&gt;
echo &amp;quot;Allumage de $1 pour l'ajout au pont OVS...&amp;quot;&lt;br /&gt;
ip link set $1 up promisc on&lt;br /&gt;
echo &amp;quot;Ajout de $1 à ${OVSCOMMUT}...&amp;quot;&lt;br /&gt;
ovs-vsctl --may-exist add-br ${OVSCOMMUT}&lt;br /&gt;
ovs-vsctl --if-exists del-port ${OVSCOMMUT} $1&lt;br /&gt;
ovs-vsctl --may-exist add-port ${OVSCOMMUT} $1&lt;br /&gt;
ovs-vsctl --if-exists set port $1 tag=${OVSTAG}&lt;br /&gt;
sleep 2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variables:&lt;br /&gt;
* '''OVSCOMMUT''' : interface de votre commutateur virtuel&lt;br /&gt;
* '''OVSTAG''' : numéro du Vlan&lt;br /&gt;
&lt;br /&gt;
===Script de d'arrêt de l’interface===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
OVSCOMMUT=br0&lt;br /&gt;
echo &amp;quot;Execution de /etc/qemu-ifdown&amp;quot;&lt;br /&gt;
echo &amp;quot;Arrêt de $1 pour la suppression au pont OVS...&amp;quot;&lt;br /&gt;
ip link set $1 down&lt;br /&gt;
echo &amp;quot;Suppression de $1 à ${OVSCOMMUT}...&amp;quot;&lt;br /&gt;
ovs-vsctl --if-exists del-port ${OVSCOMMUT} $1&lt;br /&gt;
echo &amp;quot;Suppression de $1...&amp;quot;&lt;br /&gt;
ip link delete dev $1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variable:&lt;br /&gt;
* '''OVSCOMMUT''' : interface de votre commutateur virtuel&lt;br /&gt;
&lt;br /&gt;
===Droits===&lt;br /&gt;
Ajouter les droits d’exécutions aux scripts&lt;br /&gt;
 # chmod +x /etc/qemu/qemu-if*&lt;br /&gt;
&lt;br /&gt;
==Création d'une machine virtuelle==&lt;br /&gt;
&lt;br /&gt;
Création d'un disque virtuel&lt;br /&gt;
&lt;br /&gt;
 # qemu-img create -f qcow2 hdd.qcow2 10G&lt;br /&gt;
&lt;br /&gt;
Paramètres:&lt;br /&gt;
* '''-f qcow2''' : type du disque vituel&lt;br /&gt;
* '''hdd.qcow2''' : nom de l'image disque&lt;br /&gt;
* '''10G''' : taille attribué au disque&lt;br /&gt;
&lt;br /&gt;
==Démarrage de la machine virtuelle==&lt;br /&gt;
&lt;br /&gt;
 # qemu-system-x86_64 -m 1024 -name host1 -net nic,macaddr=52:54:00:00:01:00 -net tap,ifname=r1-eth0,script=/root/qemu-ifup,downscript=/root/qemu-ifdown --cdrom /srv/iso/debian-live-8.7.1-amd64-lxde-bureau.iso -vnc :6 --enable-kvm -hda /root/hdd.qcow2&lt;br /&gt;
&lt;br /&gt;
Paramètres:&lt;br /&gt;
* '''-m 1024''' : mémoire attribué a la machine virtuelle (en octets)&lt;br /&gt;
* '''-name''' : nom de la machine virtuelle&lt;br /&gt;
* '''-net  nic,macaddr=52:54:00:00:01:00''' : l'adresse MAC de la machine virtuelle ([[Lxc#Script_de_g.C3.A9n.C3.A9ration_d.27adresse_MAC|voir]])&lt;br /&gt;
* '''-net tap,ifname=r1-eth0,script=/root/qemu-ifup,downscript=/root/qemu-ifdown''' : nom de l'interface réseau sur la machine maître suivie des scripts précédemment créés&lt;br /&gt;
* '''--cdrom /srv/iso/debian-live-8.7.1-amd64-lxde-bureau.iso''' : lien vers l'ISO du CD-ROM&lt;br /&gt;
* '''-vnc :6''' : Utilisation de [https://fr.wikipedia.org/wiki/Virtual_Network_Computing VNC] sur le port 5906&lt;br /&gt;
* '''--enable-kvm''' : Permet la prise en charge des instructions de virtualisation du processeur&lt;br /&gt;
* '''-hda /root/hdd.qcow2''' : lien vers le disque virtuel précédant créé&lt;br /&gt;
&lt;br /&gt;
==Arrêt de la machine virtuelle==&lt;br /&gt;
L’arrêt s'effectue via la fonction dédiée à chaque système émulé. Pour forcer l’extinction, effectuer un &amp;lt;code&amp;gt;CTRL+C&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Source=&lt;br /&gt;
*http://www.innercoder.com/blog/installing-and-configuring-openvswitch-with-qemu-kvm/&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
	<entry>
		<id>https://doc.ycharbi.fr/index.php?title=Qemu&amp;diff=497</id>
		<title>Qemu</title>
		<link rel="alternate" type="text/html" href="https://doc.ycharbi.fr/index.php?title=Qemu&amp;diff=497"/>
		<updated>2017-05-13T21:27:36Z</updated>

		<summary type="html">&lt;p&gt;Nmorin : /* Script de d'arrêt de l’interface */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:virtualisation]]&lt;br /&gt;
==Prérequis==&lt;br /&gt;
&lt;br /&gt;
* [[Open vSwitch|L'installation d'Open vSwitch et création d'un  commutateur virtuel]]&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
&lt;br /&gt;
Qemu est dispnible dans les dépots Debian&lt;br /&gt;
&lt;br /&gt;
 # apt install qemu-system&lt;br /&gt;
&lt;br /&gt;
==Script réseau==&lt;br /&gt;
Pour que la machine virtuelle puise se connecter sur Open vSwitch, des scripts sont a créer.&lt;br /&gt;
&lt;br /&gt;
{{attention|Chaque vlan doit avoir un script de démarrage de l’interface. le script d’arrêt est commun a tous les vlans}}&lt;br /&gt;
&lt;br /&gt;
{{astuce|Les scripts peuvent être dans l'arborescence que vous voulez}}&lt;br /&gt;
&lt;br /&gt;
===Script de démarrage de l’interface===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
OVSCOMMUT=br0&lt;br /&gt;
TAG=100&lt;br /&gt;
ovs-vsctl --may-exist add-br ${OVSCOMMUT}&lt;br /&gt;
ovs-vsctl --if-exists del-port ${OVSCOMMUT} $1&lt;br /&gt;
ovs-vsctl --may-exist add-port ${OVSCOMMUT} $1&lt;br /&gt;
ovs-vsctl --if-exists set port $1 tag=${TAG}&lt;br /&gt;
ip link set $1 up&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variables:&lt;br /&gt;
* '''OVSCOMMUT''' : interface de votre commutateur virtuel&lt;br /&gt;
* '''TAG''' : numéro du Vlan&lt;br /&gt;
&lt;br /&gt;
===Script de d'arrêt de l’interface===&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
OVSCOMMUT=br0&lt;br /&gt;
ovs-vsctl --if-exists del-port ${OVSCOMMUT} $1&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Variable:&lt;br /&gt;
* '''OVSCOMMUT''' : interface de votre commutateur virtuel&lt;br /&gt;
&lt;br /&gt;
==Création d'une machine virtuelle==&lt;br /&gt;
&lt;br /&gt;
Création d'un disque virtuel&lt;br /&gt;
&lt;br /&gt;
 # qemu-img create -f qcow2 hdd.qcow2 10G&lt;br /&gt;
&lt;br /&gt;
Paramètres:&lt;br /&gt;
* '''-f qcow2''' : type du disque vituel&lt;br /&gt;
* '''hdd.qcow2''' : nom de l'image disque&lt;br /&gt;
* '''10G''' : taille attribué au disque&lt;br /&gt;
&lt;br /&gt;
==Démarrage de la machine virtuelle==&lt;br /&gt;
&lt;br /&gt;
 # qemu-system-x86_64 -m 1024 -name host1 -net nic,macaddr=52:54:00:00:01:00 -net tap,ifname=r1-eth0,script=/root/qemu-ifup,downscript=/root/qemu-ifdown --cdrom /srv/iso/debian-live-8.7.1-amd64-lxde-bureau.iso -vnc :6 --enable-kvm -hda /root/hdd.qcow2&lt;br /&gt;
&lt;br /&gt;
Paramètres:&lt;br /&gt;
* '''-m 1024''' : mémoire attribué a la machine virtuelle (en octets)&lt;br /&gt;
* '''-name''' : nom de la machine virtuelle&lt;br /&gt;
* '''-net  nic,macaddr=52:54:00:00:01:00''' : l'adresse MAC de la machine virtuelle ([[Lxc#Script_de_g.C3.A9n.C3.A9ration_d.27adresse_MAC|voir]])&lt;br /&gt;
* '''-net tap,ifname=r1-eth0,script=/root/qemu-ifup,downscript=/root/qemu-ifdown''' : nom de l'interface réseau sur la machine maître suivie des scripts précédemment créés&lt;br /&gt;
* '''--cdrom /srv/iso/debian-live-8.7.1-amd64-lxde-bureau.iso''' : lien vers l'ISO du CD-ROM&lt;br /&gt;
* '''-vnc :6''' : Utilisation de [https://fr.wikipedia.org/wiki/Virtual_Network_Computing VNC] sur le port 5906&lt;br /&gt;
* '''--enable-kvm''' : Permet la prise en charge des instructions de virtualisation du processeur&lt;br /&gt;
* '''-hda /root/hdd.qcow2''' : lien vers le disque virtuel précédant créé&lt;br /&gt;
&lt;br /&gt;
==Arrêt de la machine virtuelle==&lt;br /&gt;
L’arrêt s'effectue via la fonction dédiée à chaque système émulé. Pour forcer l’extinction, effectuer un &amp;lt;code&amp;gt;CTRL+C&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=Source=&lt;br /&gt;
*http://www.innercoder.com/blog/installing-and-configuring-openvswitch-with-qemu-kvm/&lt;/div&gt;</summary>
		<author><name>Nmorin</name></author>
	</entry>
</feed>