documentation/howto/creer_vm_crans.md

8.6 KiB

Guide pour la création de VM interne au Crans

Étape préliminaire

Savoir ce que l'on veut et regarder les besoins du service que l'on souhaite installer

Création de la VM

Se connecter à Proxmox

Proxmox est un logiciel de virtualisation utilisé au Crans, plus d'info ici Proxmox

Pour se connecter au Proxmox :

ssh -NL 8006:localhost:8006 sam.adm.crans.org

Puis connectez-vous https://localhost:8006/ dans votre navigateur open source préféré (Et connectez-vous avec vos identifiants nounous)

Trouvez un identifiant de VM qui n'ai pas déjà pris.

Se connecter au bon LDAP

Se connecter au LDAP à l'aide de shelldap par exemple :

  • wall-e pour adm, (serveur de service)
  • flirt pour adh (service de service)

shelldap -f shelldap_wall-e.rc

Avec le fichier shelldap_wall-e.rc (évidemment modifiez _ton_pseudo avec votre pseudo nounou) :

# Fichier de configuration shelldap admin
# de bleizi/shirenn adapté
server: ldaps://172.16.10.100:636
binddn: uid=_ton_pseudo,ou=passwd,dc=crans,dc=org
basedn: dc=crans,dc=org
promptpass: yes
tls: yes
tls_cacert: /etc/ldap/ldap.pem

"Bind password :" -> Entrez votre mot de passe nounous

Créer l'entrée dans LDAP

Base de navigation dans le LDAP

Les éléments commencent par d sont les dossiers, on peut donc "entrer dans ces dossiers".

Ici le dossier qui nous intéresse est le dossier ou=hosts qui contient les configurations des différentes VM.

Ce sont dans "ces fichiers" de configuration qu'est décrit les la VM. On peut utiliser cat pour regarder leurs contenues, mv pour changer leurs noms ou les déplacer. Pour les éditer la commande est edit. Voir : doc ldap pour en savoir plus à propos du LDAP et de shelldap.

Configuration réseau

Convention du Crans (plus ou moins respecté), si votre id est XYZ (avec X, Y, Z des chiffres):

  • L'adresse IPv4 est alors : 172.16.[vlan].XYZ
  • L'adresse IPv6 est alors : fd00::10:0:ff:fe0X:YZ[vlan]
  • L'adresse MAC est alors : 02:00:00:0X:YZ:[vlan]

Recommendation : pour que ce soit plus simple vous pouvez vous inspirer de la configuration d'une VM pré-existante.

Création de la VM sur Proxmox

💡 Pour créer une VM sous nixos référez vous au repos nixos du Crans

Créer une VM dans Proxmox avec l'ISO Debian. Mettez l'id que vous avez sélectionné précédemment. Et le nom que vous souhaitez donner à la machine (un nom avec une ref obscure ou un nom qui reprends le nom du service qui sera hébergé afin de facilement savoir à quoi sert la VM)

  • Ne pas modifier d'autre option si inconnue
  • Bien spécifier dans l'option Disks où sera stocké la VM : serveur adhérent avec 10TB
  • Entrer la bonne adresse MAC dans le networking
  • Préciser dans Network les réseaux qui vont être utilisés par la VM. Pour cela, regardez cette documentation

Installation de Debian

Config réseaux

Configurez l'interface réseau de la VM (pas de DHCP):

l'IP du serveur lui-même est à entrer manuellement (pas d'autoconf)

Gateway : ipv4 : 172.16.10.101 (bizarre, fournit par routeur sam)

romanesco : ipv4 : 172.16.10.128 (DNS récursif)

hostname : le_nom_de_la machine

Pour plus d'information, regardez cette documentation. En cas de problème, il est possible de le configurer après installation dans /etc/network/interfaces.

Nom de domaine pour les machines adm : adm.crans.org

FQDN : `[nom du service].adm.crans.org`
  • Pour le gestionnaire de paquet, il est possible d'utiliser le mirroir du crans http://mirror.adm.crans.org/debian/. En cas de problème, il est possible de le configurer après installation dans /etc/apt/sources.list.

Installer openssh si pas fait dans l'installateur

Copiez votre clé publique ssh sur la VM fraichement créer via la terminal disponible sur Proxmox (~/.ssh/authorized_keys)

Setup initial de la VM

Pour faciliter le déploiement des VM, le Crans opte pour l'utilisation d'Ansible.

SSH

Avant toutes choses, vérifiez que vous avez bien configuré ssh dans ~/.ssh/config. Pour cela, faites un tour sur la documentation d'Ansible du crans section Configurer la connexion au vlan adm.

La VM étant nouvellement configurer, il n'est possible de se ssh qu'en tant que root. Ainsi, il est nécessaire de copiez votre clé SSH (public) sur le compte root : ssh-copy-id root@[nom_serveur].adm.crans.org

  • À noter : il faut autoriser les connexions ssh en root et interdisez cela dès que cela est fait.

Installation d'Ansible

Installez Ansible sur votre machine ainsi que python3-ldap. En effet, Ansible permet la gestion de toutes les VM depuis son ordinateur.

Téléchargez le dépôt git avec les fichiers Ansible du Crans qui contiennent la configuration de tout les serveurs du Crans.

Il faut alors ajouter la VM nouvellement créer dans Ansible.

Configuration minimale

Cela correspond à la base de toutes les VM du crans. Cela inclut de permettre la connexion ssh par les nounous notamment.

Pour cela, il faut ajouter la VM dans hosts dans la catégorie correspondante (généralement dans [crans_vm]).

Ensuite, ajoutez un fichier host_vars/[serveur].adm.crans.org contenant la configuration réseau (interfaces).

Enfin, il faut rendre le LDAP accessible à votre machine :

ssh -L 1636:wall-e.adm.crans.org:636 wall-e.adm.crans.org

Vérifiez que votre config n'a pas de problème.

plays/root.yml -l [machine a déployer].adm.crans.org --extra-vars='ansible_become_user=root' -u root --check

Une fois que le check n'a plus d'erreur, vous pouvez lancer la même commande sans le --check. Plus d'info sur Ansible dans son guide dédier.

Il se peut qu'une erreur persiste. En effet, avec --check aucune modification n'est appliquée. Donc, si une commande nécessite au préalable qu'une autre ait eu lieu, une erreur peut se produire.

💡 Il sera nécessaire d'entrer votre mot de passe lors de l'apparition de BECOME PASSWORD.

Configurer un service

Tout d'abord, ajoutez le serveur dans group_vars/reverseproxy.yml dans la partie reverseproxy_sites.

  • reverseproxy.yml contient le nom avec lequel le service sera accessible.

Dans all.yml, ajoutez un playbook (au nom du service pour l'identifier plus facilement) et créez un fichier du même nom dans plays (inspirez-vous d'un autre fichier librement car la nomenclature sera similaire).

Le fichier dans plays contient 4 éléments essentiels :

  • l'en-tête #!/usr/bin/env ansible-playbook
  • une petite note explicative (parfois un œuf de Pâques...)
  • hosts: qui correspond à la VM ou groupe de VM pour lequel le script doit s'appliquer (la VM doit être déclarer dans le fichier hosts). Généralement, il s'agira de [nom_vm].adm.crans.org.
  • roles: qui contiendra la (ou les) configuration des services qui seront hébergés sur la VM. Généralement, il s'agira simplement du nom du service qui sera hébergé.

Une fois les rôles créés, il faut créer un dossier du même nom dans le dossier roles (pour chaque rôle précédemment ajouté). Chacun de ces dossiers contient 2 autres dossiers :

  • templates qui contiendra tous les fichiers qui devront être copier sur la machine. Typiquement des fichiers de configuration comme pour nginx ou le motd. À noter que les templates peuvent contenir des variables sous la forme {{ nom_de_la_variable }}, qui sera remplacée au moment de l'exécution d'Ansible. Ces noms de variables sont généralement enregistrés dans group_vars/[nom_service].yml. Si la variable est un secret, il faut alors l'ajouter dans le pass et écrire {{ vault.fichier.secret }}. Les templates sont facultatifs si jamais utilisés.
  • tasks dont le fichier main.yml sera automatiquement exécuté. Il contient toutes les commandes à exécuter pour rendre le service opérationnel. De même que pour templates, il est possible d'utiliser des variables. 💡 Pour utiliser une variable de group_vars/[nom_service].yml, il faut au préalable ajouter dans hosts la catégorie [nom_service] (entre crochets) et le serveur juste en dessous.

Une fois la configuration terminée, ajoutez le playbook dans all.yml, pensez à push les modifications sur le git Ansible et appliquez les modifications sur le serveur.