==== 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 CT
Une 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