# 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](/outils/os/proxmox.md) Pour se connecter au Proxmox : ```bash 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) : ```yaml # 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](/infrastructure/services/ldap.md) 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 > :bulb: Pour créer une VM sous nixos référez vous au repos > [nixos](https://gitlab.crans.org/nounous/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](/infrastructure/reseaux/plan.md) > - Ajouter dans la section "hardware" le "Serial Port" avec le numéro 0 ## 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) ```config 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](/infrastructure/reseaux/plan.md). 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` ```txt 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. Cette partie ne fait qu'effleurer le fonctionnement d'Ansible dans l'objectif de terminer l'installation. Pour aller plus loin, vous pouvez regarder cette [documentation](/outils/logiciels/ansible.md). ### 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](https://gitlab.crans.org/nounous/ansible) 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](https://gitlab.crans.org/nounous/ansible) 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 : ```bash 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. ```bash 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](https://gitlab.crans.org/nounous/ansible). 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. > :bulb: 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. :bulb: 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.