==== Creation conteneur en utilisant LXD ==== ====== Création d'un conteneur ====== ===== Étapes préliminaires : ===== * Déterminer le hostname du futur conteneur * Déterminer son adresse IPv6 principale en utilisant le [[documentation_technique:plan_adressage]]. Vérifier que l'adresse choisie n'est pas utilisée (au minimum en essayant de la ping6) * Editer la configuration DNS : [[documentation_technique:dns]] ===== Création effective du conteneur ===== Sur l'//hyperviseur// lxd, lancer le script ''%%new-lxc-ct.sh%%'' situé dans /root. Aucun paramètre n'est nécessaire. Le script demande le hostname et l'IPv6 principale a utiliser directement sur la stdin. Ce script crée le conteneur, le démarre, change ses dépots apt, le met à jour, installe python (nécessaire pour qu'ansible fonctionne par la suite) et définie les limites suivantes : * CPU = 1 ( ''%%lxc config set ${hostname} limits.cpu 1%%'') * RAM = 256Mo (''%%lxc config set ${hostname} limits.memory 256MB%%'') * Pas de Swap (''%%lxc config set ${hostname} limits.memory.swap true%%'') * Taille du / = 5Go (''%%lxc config device set ${hostname} root size 5GB%%'') Il est possible d'adapter ces limites après coup si nécessaire, en utilisant les commandes ''%%lxc config ...%%'' . Pour mémoire, la sortie du script quand il s'exécute correctement :
root@karadoc:/root# ./new-lxc-ct.sh CT hostname ? test-doc IPv6 addr ? (ex: 2001:0912:3064:127::1) 2001:912:3064:134::1 Creating test-doc Starting test-doc Get:1 http://ftp.rezopole.net/ubuntu xenial InRelease [247 kB] Get:2 http://ftp.rezopole.net/ubuntu xenial-updates InRelease [102 kB] [...] Fetched 16.3 MB in 6s (2508 kB/s) Reading package lists... Done Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: libpython-stdlib libpython2.7-minimal libpython2.7-stdlib python-minimal python2.7 python2.7-minimal Suggested packages: python-doc python-tk python2.7-doc binutils binfmt-support The following NEW packages will be installed: libpython-stdlib libpython2.7-minimal libpython2.7-stdlib python python-minimal python2.7 python2.7-minimal 0 upgraded, 7 newly installed, 0 to remove and 18 not upgraded. Need to get 3915 kB of archives. After this operation, 16.6 MB of additional disk space will be used. Get:1 http://ftp.rezopole.net/ubuntu xenial-updates/main amd64 libpython2.7-minimal amd64 2.7.12-1ubuntu0~16.04.1 [339 kB] [...] Fetched 3915 kB in 0s (11.8 MB/s) Selecting previously unselected package libpython2.7-minimal:amd64. [...] Device eth0 added to test-doc Fin de l'install, restart CTUne fois le conteneur crée, il doit apparaître dans le résultat de la commande ''%%lxc list%%'' comme "RUNNING". Pour obtenir un prompt sur le conteneur directement depuis l'hyperviseur, on peut utiliser la commande ''%%lxc exec ${HOSTNAME} bash%%'' ====== Mise en place du réseau ====== * Sur l'hyperviseur, éditer le fichier ''%%/etc/bird/bird6.conf%%'', et ajouter dans le "protocol static" une route pour le conteneur nouvellement crée. Ceci permet d'ajouter une route statique vers le /64 du conteneur. Cette même route est ensuite propagée automatiquement vers le routeur Perceval via bgp. * Vérifier la conf de bird6 avec la commande ''%%birdc6 conf check%%'' * Si la conf est ok, lancer la reconfiguration de bird6 avec la commande ''%%birdc6 conf%%'' * Si tous s'est bien passé, le conteneur est joignable depuis Internet (en IPv6) ! Si jamais le conteneur a besoin d'être accédé en IPv4 depuis l'extérieur, sur perceval: * éditer le fichier ''%%/etc/tayga.conf%%'' pour y ajouter une ligne //map// faisant correspondre une IPv4 disponible avec l'ipv6 principale du conteneur. Puis redémarrer taygua ''%%systemctl restart tayga%%'' pour appliquer le changement. * éditer le fichier ''%%/etc/bird/bird.conf%%'' pour y ajouter une route en /32 vers l'interface nat64. Puis vérifier que la conf est syntaxiquement correcte avec ''%%birdc configure check%%''; si c'est le cas, appliquer la conf avec ''%%birdc configure %%'' Dans le cas d'une configuration dual-stack ipv4 et ipv6 ([[documentation_technique:machines:karadoc|karadoc]] par ex) on ne touche pas à bird / tayga et on utilise les résolveurs suivants:
cat /etc/resolv.conf
nameserver 80.67.169.12
nameserver 2a00:5881:8100:1000::3
options timeout:1
====== Normalisation et installation des bases avec ansible ======
Depuis l'hyperviseur, utiliser la commande ''%%lxc exec ${HOSTNAME} bash%%'' pour obtenir un prompt sur notre nouveau conteneur.
Ajouter sa clef ssh, temporairement, au ''%%/root/.ssh/authorized_keys%%'' du conteneur nouvellement crée
Vérifier que l'on parvient à se connecter en SSH depuis sa machine.
Sur sa propre machine, installer ansible et cloner le dépot git qui contient les rôles ansible:
sudo apt install git ansible
mkdir ~/Hadoly
cd ~/Hadoly
git clone https://git.hadoly.fr/CS_CT/ansible_hadoly.git
cd admin/ansible
Editer le fichier ''%%ansible/hosts%%'' et ajouter le nouveau CT dans la section new, en suivant le modèle: ''%%2001:912:3064:XXX ansible_user=root ansible_port=22%%''
Exécuter le playbook ansible //etckeeper.yml//: ''%%ansible-playbook -l new etckeeper.yml%%''
Éditer le fichier ''%%roles/base/vars/main.yml%%'' ajouter la nouvelle machine. Executer le playbook //main.yml// avec la commande ''%%ansible-playbook -l new base.yml%%''
Se connecter au conteneur en SSH avec son compte attitré.
Initialiser son mot de passe sudo avec ''%%sudo passwd-init%%''.
Supprimer sa clef ssh du ''%%/root/.ssh/authorized_keys%%''.
Redémarrer ssh avec ''%%systemctl restart ssh%%''.
A partir de cet instant, il faut se connecter en ssh sur le port **6900**.
Sur sa machine, éditer a nouveau le fichier ''%%ansible/hosts%%'', supprimer l'hote de la section new, le mettre dans la section conteneur avec tous les autres.
'%%git commit%%'' et ''%%git push%%'' pour posser sur le dépot git les modifications liées à l'ajout du nouveau conteneur.
Ne pas oublier d'//etc-commiter// sur toutes les machines où il y a eu des changements de conf.
mettre à jour https://wiki.hadoly.fr/documentation_technique:machines