Base documentaire GNU/Linux et développement

Fiches techniques pour la configuration de machines GNU/Linux, de réseau et de développement logiciel

Outils pour utilisateurs

Outils du site


administration-systemes:installation-pour-infonuagique

Installation basée sur les images pour l’infonuagique

Principe de fonctionnement

Les distributeurs de systèmes GNU/Linux fournissent des images de systèmes d’exploitation pour les machines virtuelles qui peuvent être utilisées rapidement et de façon souple. On évite ainsi le processus d’installation complet et passe simplement par une étape assez courte de configuration de l’image pour des besoins spécifiques. Ces images sont généralement régénérées régulièrement pour satisfaire ce genre de besoins. Red Hat a fourni une documentation assez riche pour RHEL 7 et donc CentOS.

Préparation de l’environnement

Récupération des images spécialisées pour l’infonuagique

Les images des systèmes d’exploitation pour l’infonuage sont distribuées directement par les distributions GNU/Linux, que ce soit pour CentOS ou Fedora. Ces images ne sont pas utilisables directement, bien qu’elles démarrent correctement. On commence par télécharger l’une de ces images localement. Ici, il s’agit de CentOS 7. Ce lien pointera toujours vers la dernière version disponible.

curl https://cloud.centos.org/centos/7/images/CentOS-7-x86_64-GenericCloud.qcow2.xz -o centos7-server-generic-base.qcow2.xz
unxz centos7-server-generic-base.qcow2.xz

On peut également préférer la version Atomic :

curl http://cloud.centos.org/centos/7/atomic/images/CentOS-Atomic-Host-7-GenericCloud.qcow2.xz -o centos7-atomic-generic-base.qcow2.xz
unxz centos7-atomic-generic-base.qcow2.xz

Si l’on désire créer plusieurs machines virtuelles aux configurations différentes à partir d’une seule image, on pourra choisir de créer des instantanés externes ayant pour base cette image disque. Considérons que l’on est dans le répertoire d’images de libvirt :

qemu-img create -f qcow2 -b originales/centos7-server-generic-base.qcow2 cos3.qcow2

Configuration de cloud-init

cloud-init un programme développé par Canonical pour automatiser le processus de personnalisation des instances de systèmes d’exploitation à leur premier démarrage. Il est largement utilisé par les acteurs des infrastructures en tant que service comme Azure, Amazon ou OpenStack.

cloud-init se base sur des fichiers de configuration qui sont envoyés à la machine virtuelle à son premier démarrage, et permet de la configurer tel que décrit dans le fichier de configuration. Il dispose d’un genre de shebang : « #cloud-config ».

La documentation complète est librement accessible depuis Internet, avec un grand nombre d’exemples et des explications sur son fonctionnement interne. Puisque Openstack n’est pas utilisé, ni aucun autre outil du genre, il va falloir créer un fichier au format ISO (au format ISO 9660) et l’attacher en tant que second disque lors de la création de la machine virtuelle. cloud-init saura trouver sa configuration sur ce système de fichiers. (cf : documentation « NoCloud »).

La configuration est séparée en deux sections :

  • un fichier meta-data présentant les informations relatives aux système ;
  • un fichier user-data pour la configuration du système.

Pour le fichier meta-data :

instance-id: cos1-01
local-hostname: cos

Le processus cloud-init est lancé à chaque démarrage de la machine. Pour désactiver ce comportement, il faut créer le fichier /etc/cloud/cloud-init.disabled sur la machine virtuelle. Cela peut être fait automatiquement dans le fichier user-data, en incluant la section suivante :

bootcmd:
 - [ touch, /etc/cloud/cloud-init.disabled ]

Pour permettre un accès à la console virsh (via virsh console, il faut activer le service correspondant dans l’invité :

bootcmd
 - [ systemctl, enable, serial-getty@ttyS0.service ]

Pour le fichier user-data, plusieurs choix sont possibles :

  • pour n’avoir qu’un utilisateur root, on préfère une connexion SSH seule :
#cloud-config   
users:
  - name: root
    ssh_pwauth: False
    ssh_authorized_keys:
      - ssh-rsa AAAAB3NzaC1yc…
  • Il est possible d’ajouter un ou plusieurs utilisateurs. Il est possible d’ajouter « - default », pour conserver l’utilisateur par défaut. Ce n’est généralement pas utile.  :
#cloud-config
users:
  - name: webmaster
    gecos: Webmaster
    chpasswd: {expire: False}
    ssh_authorized_keys: 
      - ssh-rsa AAAAB3NzaC1y…
  - name: root
    ssh_pwauth: True
    ssh_authorized_keys:
      - ssh-rsa AAAAB3NzaC1y…
  • De même que modifier l’utilisateur par défaut. En utilisant cet utilisateur intermédiaire, il ne sera possible de se connecter à la machine que par lui :
#cloud-config
user: webmaster
gecos: Webmaster
chpasswd: {expire: False}
ssh_pwauth: False
ssh_authorized_keys:
  - ssh-rsa AAAAB3NzaC1y…

D’autres options peuvent être trouvées dans la documentation, comme le fait de mettre le système à jour :

package_upgrade: true

On peut maintenant créer le système de fichier ISO à partir de ces deux fichiers, à l’aide de genisoimage :

genisoimage -output /tmp/cos3-init.iso -volid cidata -joliet -rock user-data meta-data

Démarrage de la machine virtuelle

Ne reste qu’à installer la machine virtuelle :

virt-install --name cos3 \
             --description "CentOS 3" \
             --os-type=Linux --os-variant=centos7.0 \
             --ram=512 --cpu=kvm64 --vcpus=1 \
             --disk path=/home/${USER}/.local/share/libvirt/images/cos3.qcow2 \
             --cdrom /tmp/cos3-init.iso \
             --network bridge=virbrint,model=virtio,mac=52:54:00:00:00:03 \ 
             --noautoconsole

Le nom d’utilisateur par défaut est centos et fait partie du groupe wheel, il peut donc utiliser sudo pour ouvrir une interface en ligne de commandes comme super-utilisateur.

Zone de temps et changement de locale

Pour passer le système en français, on utilise localectl :

localectl set-locale LANG=fr_FR.utf8
localectl set-keymap fr_FR.utf8

Il est également possible de modifier la zone de temps avec timedatectl :

timedatectl set-timezone Europe/Paris

Exemple complet pour le routeur orion

Ci-dessous un exemple complet du fichier cloud-init écrit pour l’instanciation de la machine orion :

  • on supprime l’utilisateur par défaut au profit d’un utilisateur unique auquel on ne peut se connecter que via SSH ;
  • on écrit trois fichiers :
    • le fichier décrivant l’interface eth1, pour le réseau externe,
    • le fichier décrivant l’interface eth0, pour le réseau interne,
    • le fichier de configuration du DHCP.
  • on installe plusieurs paquets nécessaires au rôle d’orion : dhcp, bind, firewalld, NetworkManager ;
  • on met à jour le système ;
  • on exécute diverses commandes pour désactiver cloud-init au prochain démarrage, modifier les locales et la zone temporelle et activer des services au démarrage de la machine.
#cloud-config
users:
  - name: root
    ssh_pwauth: False
    ssh_authorized_keys:
      - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQCnZhZ39DyMgwoJm1RnCL+86OqQS4pR4VDdfi/tNiawtF/DgEynV5X389rnqYwdo/abd9DDJ6tW1gf/Tu6ehDt+9ICPg5UL4dUypDT/v/TIRHzrzRrjRf2qfXqsx6paln3kG8ZqjvG2rb3c3R75E1UjeYmNW+XK5QZ2PSq+3KUGsw==
       
write_files:
-   content: |
        BOOTPROTO=dhcp
        DEVICE=eth1
        USERCTL=no
        HWADDR=52:54:00:00:01:01
        TYPE=Ethernet
        DEFROUTE=yes
        ONBOOT=yes
    path: /etc/sysconfig/network-scripts/ifcfg-eth1
-   content: |
        BOOTPROTO=dhcp
        DEVICE=eth0
        USERCTL=no
        HWADDR=52:54:00:00:01:02
        TYPE=Ethernet
        DEFROUTE=yes
        ONBOOT=yes
    path: /etc/sysconfig/network-scripts/ifcfg-eth0
-   content: |
        default-lease-time 86400;
        max-lease-time 172800;

        subnet 192.168.123.0 netmask 255.255.255.0 {
        
            range 192.168.123.100 192.168.123.250;
            
            # Le serveur de nom est la machine hôte
            option domain-name-servers 172.18.0.254;
            
            # Le routeur est orion
            option routers 192.168.123.253;

            host cos1 { hardware ethernet 52:54:00:00:00:01; fixed-address 192.168.123.1; option host-name "cos1"; }
            host cos2 { hardware ethernet 52:54:00:00:00:02; fixed-address 192.168.123.2; option host-name "cos2"; }
            host cos3 { hardware ethernet 52:54:00:00:00:03; fixed-address 192.168.123.3; option host-name "cos3"; }
            host cos4 { hardware ethernet 52:54:00:00:00:04; fixed-address 192.168.123.4; option host-name "cos4"; }
            host cos5 { hardware ethernet 52:54:00:00:00:05; fixed-address 192.168.123.5; option host-name "cos5"; }
        }
    path: /etc/dhcp/dhcpd.conf

packages:
 - dhcp
 - bind
 - bind-utils
 - firewalld
 - NetworkManager
 - deltarpm

package_upgrade: true

runcmd:
 - [ touch, /etc/cloud/cloud-init.disabled ]
 - [ systemctl, enable, --now, serial-getty@ttyS0.service ]
 - [ timedatectl, set-timezone, Europe/Paris ]
 - [ localectl, set-locale, LANG=fr_FR.utf8 ]
 - [ localectl, set-keymap, fr_FR.utf8 ]
 
bootcmd:
 - [ systemctl, enable, --now, firewalld.service ]
 - [ systemctl, enable, --now, dhcpd.service ]
administration-systemes/installation-pour-infonuagique.txt · Dernière modification: 2018/04/17 08:28 par Guillaume Bernard