Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente | |||
musee:tutoriels:faire_un_lxc [13/10/2018 01:02] – ↷ Page déplacée de tutoriels:faire_un_lxc à musee:tutoriels:faire_un_lxc pnahoum | musee:tutoriels:faire_un_lxc [16/10/2018 01:48] (Version actuelle) – ↷ Liens modifiés en raison d'un déplacement. 157.55.39.138 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ======Faire et gérer un Linux Container (LXC) (Ubuntu 17.04)====== | ||
+ | Les Linux Containers permettent de faire des machines virtuelles pour compartimenter vos machines (dans notre cas les serveurs Bor et Heimdall). Ici on va voir comment les mettre en place facilement. | ||
+ | Dans notre réseau, il existe deux types de LXC. Celles connectées sur le réseau ouvert 10.61.16.0/ | ||
+ | =====Configuration du réseau et installation des dépendances===== | ||
+ | <note important> | ||
+ | |||
+ | On va commencer par configurer le réseau de la machine hôte pour pouvoir attribuer une ip à chaque machine virtuelle quand elle seront crées. Ainsi, on crée un bridge **br0** pour le réseau ouvert (16.0) et un bridge **br1** pour le réseau fermé (15.0) sur la machine hôte. La configuration présentée est celle de BOR qui gère le routage (ce qui veut dire que tous les services sur le réseau en 15.0 seront accessibles via son ip 10.61.16.10). Si vous souhaitez une configuration un peu différente, | ||
+ | |||
+ | En règle général, sauf exception (LXC Meili, LXC Calendrier), | ||
+ | |||
+ | $> sudo nano / | ||
+ | |||
+ | <file bash / | ||
+ | source / | ||
+ | |||
+ | # The loopback network interface | ||
+ | auto lo | ||
+ | iface lo inet loopback | ||
+ | |||
+ | # The primary network interface | ||
+ | # This is an autoconfigured IPv6 interface | ||
+ | #auto eno1 | ||
+ | #iface eno1 inet dhcp | ||
+ | |||
+ | #reseau en .16 vers exterieur | ||
+ | auto br0 | ||
+ | iface br0 inet static | ||
+ | address 10.61.16.10 | ||
+ | netmask 255.255.255.0 | ||
+ | gateway 10.61.16.254 | ||
+ | bridge-ifaces eno1 | ||
+ | bridge-ports eno1 | ||
+ | up ifconfig eno1 up | ||
+ | |||
+ | iface eno1 inet manual | ||
+ | |||
+ | #reseau en .15 ferme et relie a aucune interface | ||
+ | auto br1 | ||
+ | iface br1 inet static | ||
+ | address 10.61.15.1 | ||
+ | netmask 255.255.255.0 | ||
+ | network 10.61.15.0 | ||
+ | broadcast 10.61.15.255 | ||
+ | bridge_ports none | ||
+ | |||
+ | </ | ||
+ | |||
+ | Cette configuration précise que l' | ||
+ | |||
+ | On va maintenant installer les dépendances nécéssaires sur la machine qui va héberger les machines virtuelles. | ||
+ | |||
+ | $> sudo apt-get install lxc lxc-templates wget bridge-utils | ||
+ | |||
+ | On va configurer notre réseau manuellement, | ||
+ | |||
+ | $> sudo nano / | ||
+ | Et passez **" | ||
+ | |||
+ | USE_LXC_BRIDGE=" | ||
+ | Maintenant éditez le fichier suivant, pour changer le lien réseau de lxc avec le bridge **br1** que nous avons crée sur la machine hôte. Ce bridge va nous permettre d' | ||
+ | |||
+ | $> sudo nano / | ||
+ | |||
+ | <file bash / | ||
+ | lxc.network.type = veth | ||
+ | lxc.network.link = br1 # Nom de notre bridge | ||
+ | lxc.network.flags = up | ||
+ | lxc.network.hwaddr = 00: | ||
+ | </ | ||
+ | |||
+ | Il est nécéssaire redémarrer la machine pour vérifier que tout fonctionne correctement avant d' | ||
+ | |||
+ | $> sudo reboot | ||
+ | =====Création d'un service sur un Linux Container (LXC)===== | ||
+ | <note important> | ||
+ | ====Création de la machine virtuelle==== | ||
+ | Si vous lisez ceci, je suppose que toutes les dépendances sont installées. On va créer dans cette partie une machine virtuelle à qui on donnera le nom de **bor_apache** (pour un mettre un serveur apache). A vous d' | ||
+ | |||
+ | <note warning> | ||
+ | |||
+ | En tapant cette commande dans la console, vous pouvez voir tous les modèles de système d' | ||
+ | |||
+ | $> sudo ls / | ||
+ | < | ||
+ | lxc-altlinux | ||
+ | |||
+ | <note warning> | ||
+ | Nous allons créer notre machine virtuelle sous Ubuntu, donc on tape cette commande : | ||
+ | |||
+ | $> sudo lxc-create -t ubuntu -n bor_apache -- --packages " | ||
+ | |||
+ | Le paramètre -n précise le nom donné à la machine virtuelle et -t le template sur lequel on sa base pour la créer. Le --packages installe une suite de packets nécéssaires pour la suite. Ensuite, vous verrez un long retour de commande, le temps que la machine se crée, patientez.. | ||
+ | |||
+ | ====Démarrage de la machine virtuelle==== | ||
+ | Pour démarrer la machine que vous venez de créer tapez : | ||
+ | |||
+ | $> sudo lxc-start -n bor_apache -d | ||
+ | Vous pouvez maintenant accéder directement en root à la machine via la commande : | ||
+ | |||
+ | $> sudo lxc-attach -n bor_apache | ||
+ | Vous pouvez maintenant configurer cette machine avec le routeur pour lui attribuer une ip en fonction de son adresse mac, vous pourrez ensuite accéder à cette machine via ssh comme pour toutes les autres, qu' | ||
+ | |||
+ | <note warning> | ||
+ | |||
+ | $> sudo adduser ginfo | ||
+ | $> sudo usermod -g sudo ginfo | ||
+ | $> sudo deluser ubuntu | ||
+ | $> sudo rm -r / | ||
+ | |||
+ | < | ||
+ | |||
+ | ====Configuration du réseau de la machine virtuelle==== | ||
+ | On va commencer par attribuer à notre LXC une ip sur le réseau fermé (la procédure est quasi identique pour rajouter un service sur le réseau ouvert, il faut juste remplacer les 15 par les 16 et surtout faire utiliser aux LXC br0 et non br1). Pour cela, on édite le fichier ''/ | ||
+ | |||
+ | <file bash / | ||
+ | auto lo | ||
+ | iface lo inet loopback | ||
+ | |||
+ | auto eth0 | ||
+ | iface eth0 inet static | ||
+ | address 10.61.15.26 | ||
+ | netmask 255.255.255.0 | ||
+ | dns-nameservers 10.61.15.1 | ||
+ | gateway 10.61.15.1 | ||
+ | </ | ||
+ | |||
+ | ===Etape facultative === | ||
+ | |||
+ | On peut suivre le tutoriel suivant pour rendre notre LXC accessible depuis les PC de l' | ||
+ | |||
+ | ====Régler l' | ||
+ | Par défaut la LXC n'est pas à l' | ||
+ | |||
+ | On commence par entrer dans la LXC et régler l' | ||
+ | |||
+ | $> rm / | ||
+ | $> ln -s / | ||
+ | | ||
+ | On rend ensuite cela définitif en édidant le fichier suivant /// | ||
+ | |||
+ | <file bash / | ||
+ | Europe/ | ||
+ | </ | ||
+ | |||
+ | ====Démarrer la LXC automatiquement au démarrage et modifier ses paramètres==== | ||
+ | |||
+ | Il faut modifier la configuration **/ | ||
+ | $> sudo nano / | ||
+ | Pour démarrer la machine au boot on ajoute la ligne suivante : | ||
+ | $> lxc.start.auto = 1 | ||
+ | Dans ce fichier de configuration on peut en profiter par exemple pour modifier l' | ||
+ | =====Commandes utiles et gestion des linux containers (LXC)===== | ||
+ | ====Voir les informations d'un LXC==== | ||
+ | Pour voir la liste des LXC sur le système : | ||
+ | $> sudo lxc-ls -f | ||
+ | Pour voir la liste des LXC allumées : | ||
+ | $> sudo lxc-ls --active -f | ||
+ | ====Eteindre un LXC==== | ||
+ | Pour éteindre le container **bor_apache** par exemple, tapez : | ||
+ | $> sudo lxc-stop -n bor_apache | ||
+ | ====Détruire un LXC==== | ||
+ | Pour détruire le container **bor_apache** par exemple, tapez : | ||
+ | $> sudo lxc-destroy -n bor_apache | ||
+ | | ||
+ | ====Renommer un LXC==== | ||
+ | Pour renommer le container **pikachu** en **bor_pikachu** par exemple, on commence par arrêter le container : | ||
+ | $> sudo lxc-stop -n pikachu | ||
+ | Ensuite on renomme le dossier contenant le container : | ||
+ | $> sudo mv / | ||
+ | On modifie ensuite le fichier de configuration du container : | ||
+ | $> sudo nano / | ||
+ | Il faut modifier les 3 lignes suivantes en modifiant ici **pikachu** en **bor_pikachu** | ||
+ | lxc.utsname = pikachu | ||
+ | lxc.rootfs = / | ||
+ | lxc.mount = / | ||
+ | <note tip>La deuxième ligne peut contenir //dir//, dans ce cas là ne pas modifier.</ | ||
+ | On finit par redémarrer le container : | ||
+ | $> sudo lxc-start -n bor_pikachu | ||
+ | |||
+ | Ensuite il faut modifier le hostname de la lxc, pour cela **on s'y connecte** et on modifie le fichier /// | ||
+ | $> sudo nano / | ||
+ | Il suffit d'y mettre le nouveau nom, ici **bor_pikachu** par exemple. |