Outils de déploiement
Afin de permettre le développement et les expérimentations autour de OSFS, il est souhaitable d'automatiser autant que possible les phases d'installation et de paramétrage de la plateforme. De plus, il est préférable d'avoir un processus commun entres les différents types de plateforme. Notre choix de plateforme commune réside dans un environnement salt-ready. À partir de cette étape le déploiement et la configuration des systèmes peut être réalisée de manière commune.
Plateforme visée
Cette section reprend les principales étapes de déploiement pour chacune des deux plateformes visées.
Plateforme virtuelle
Le processus décrit dans la suite de cette section vise à mettre en place la plateforme expérimentale décrite précédemment.

Architecture système de la plateforme de développement (virtualisée)
Préparation de l'hyperviseur
Installation de paquets
Les paquets suivants sont nécessaires à la plateforme:
- libvirt-bin: environnement de virtualisation libvirt qui par dépendance déploie aussi QEmu.
- bridge-utils: CLI pratique pour certaine opération sur les bridges.
- salt (dépôt et binaire): infrastructure de configuration et de gestion (détails ici)
- virtinst: pour la construction de VM en ligne de commande
Ce qui se traduit par:
$ sudo apt-get install libvirt-bin bridge-utils $ wget -O - https://repo.saltstack.com/apt/debian/8/amd64/latest/SALTSTACK-GPG-KEY.pub | sudo apt-key add - $ sudo /bin/sh -c 'echo "deb http://repo.saltstack.com/apt/debian/8/amd64/latest jessie main" > /etc/apt/sources.list.d/salt.list' $ sudo apt-get update $ sudo apt-get install salt-ssh salt-master
Paramétrage disque
Afin de permettre un maximum de flexibilité, les unités de stockage sont:
- construite avec LVM,
- puis des snapshot et des merge sont réalisés au cours des divers cycles de développement.
$ sudo lvcreate -n ctrl-1 -L 10G data # création, à partir du VG data, du disque /dev/data/ctrl-1 de 10Go $ sudo lvcreate -n ctrl-1_snap -L 10G -s /dev/data/ctrl-1 # création d'un snapshot COW intégral du disque ctrl-1 nommé ctrl-1_snap $ sudo lvconvert --merge data/ctrl-1_snap # merge du snapshot ctrl-1_snap dans son disque d'origine
Paramétrage réseau
Dans le contexte de la plateforme expérimentale virtuelle, les réseaux, au niveau de l'hyperviseur, sont constitués par des bridges. La mise en place de ces réseaux se fait à l'aide de libvirt. Le paramétrage d'un nouveau réseau se fait à l'aide d'une description en XML
<network> <name>default</name> <forward mode='nat'/> <bridge name='virbr0' stp='on' delay='0'/> <ip address='192.168.122.254' netmask='255.255.255.0'> <dhcp> <range start='192.168.122.100' end='192.168.122.200'/> </dhcp> </ip> </network>
Dans cette description sont spécifiés:
- name: le nom du réseau
- forward: la mise en place d'un NAT pour la sortie du réseau
- bridge: la création du bridge virbr0 pour instancier ce réseau sur l'hyperviseur
- ip: pour définir l'adresse IP du l'interface virbr0
- dhcp: la définition d'un serveur DHCP sur le réseau en cours de création avec la plage d'adresse dynamique
Lorsqu'aucune sortie du réseau n'est voulue, la description XML du réseau peut se réduire à:
<network> <name>data</name> <bridge name='virbr1' stp='on' delay='0'/> </network>
Paramétrage de salt-ssh
Création des VMs
Toujours avec l'aide de la libvirt, les VM sont créées de manière automatique avec:
- virt-install
- une configuration preseed de Debian
Utilisation de virt-install
$ sudo /usr/bin/virt-install \ --name ctrl-1 \ # nom de la VM --ram=4096 \ # quantité de RAM (en Mo) --vcpu=2 \ # nombre de vCPUs --os-type linux \ # définie le type d'OS dans la VM --os-variant debianwheezy \ # définie un sous-type --graphics none \ # pas d'interface graphique --console "pty,target_type=serial" \ # définition et usage de la console sur port série --location "http://ftp.fr.debian.org/debian/dists/jessie/main/installer-amd64/" \ # source d'installation de Debian --initrd-inject=/tmp/preseed \ # localisation du fichier preseed --extra-args "console=ttyS0,115200n8 serial" \ # paramètre noyau pour la déclaration de la console sur port série --noautoconsole \ # pas d'ouverture automatique d'une console pendant l'installation --disk /dev/data/ctrl-1 \ # rattachement du disque /dev/data/ctrl-1 à la VM --network bridge=virbr0 # connection de l'interface réseau à un bridge (virbr0)
Les options --disk et --network peuvent être répétées autant que nécessaire pour disposer de plusieurs disques ou de plusieurs interfaces réseau.
Définition du fichier preseed
Le fichier preseed précédemment fournit à l'installateur est présenté ci-dessous. Il s'agit d'une version allégée du fichier exemple fournit par Debian (ici).
L'objet de ce fichier est de répondre à toutes les questions de l'installateur Debian de manière automatique. En particulier, le fichier contient:
- le nom de la machine
- l'interface réseau sélectionnée ainsi que les paramètres réseaux (en configuration statique)
- la configuration du disque dur
- le choix des paquets à installer
- la mise en place d'une clé publique SSH pour les connexions ultérieures
Dans le contexte de OSFS, le choix est fait de générer autant de fichiers preseed que de systèmes voulus.
# The values can also be preseeded individually for greater flexibility. d-i debian-installer/language string en d-i debian-installer/country string FR d-i debian-installer/locale string en_US.UTF-8 # Keyboard selection. # keymap is an alias for keyboard-configuration/xkb-keymap d-i keyboard-configuration/xkb-keymap select fr d-i keyboard-configuration/toggle select No toggling # Continue the install without loading kernel modules? d-i anna/no_kernel_modules boolean yes # To pick a particular interface instead: d-i netcfg/choose_interface select eth0 # If you prefer to configure the network manually, uncomment this line and # the static network configuration below. d-i netcfg/disable_autoconfig boolean true # Static network configuration. # # IPv4 example d-i netcfg/get_ipaddress string 192.168.122.11 d-i netcfg/get_netmask string 255.255.255.0 d-i netcfg/get_gateway string 192.168.122.254 d-i netcfg/get_nameservers string 192.168.122.254 d-i netcfg/confirm_static boolean true # Any hostname and domain names assigned from dhcp take precedence over # values set here. However, setting the values still prevents the questions # from being shown, even if values come from dhcp. d-i netcfg/get_hostname string ctrl-1 d-i netcfg/get_domain string api.runstack.net # Disable that annoying WEP key dialog. d-i netcfg/wireless_wep string ### Mirror settings # If you select ftp, the mirror/country string does not need to be set. #d-i mirror/protocol string ftp d-i mirror/country string manual d-i mirror/http/hostname string http.us.debian.org d-i mirror/http/directory string /debian # Suite to install. d-i mirror/suite string jessie # Root password, either in clear text d-i passwd/root-password password xxxx d-i passwd/root-password-again password xxxx # To create a normal user account. d-i passwd/user-fullname string cephsrv d-i passwd/username string cephsrv d-i passwd/user-password password xxxx d-i passwd/user-password-again password xxxx ### Clock and time zone setup # Controls whether or not the hardware clock is set to UTC. d-i clock-setup/utc boolean true # You may set this to any valid setting for $TZ; see the contents of # /usr/share/zoneinfo/ for valid values. d-i time/zone string Europe/Paris # Controls whether to use NTP to set the clock during the install d-i clock-setup/ntp boolean true # Alternatively, you may specify a disk to partition. If the system has only # one disk the installer will default to using that, but otherwise the device # name must be given in traditional, non-devfs format (so e.g. /dev/hda or # /dev/sda, and not e.g. /dev/discs/disc0/disc). # For example, to use the first SCSI/SATA hard disk: d-i partman-auto/disk string /dev/vda # In addition, you'll need to specify the method to use. # The presently available methods are: # - regular: use the usual partition types for your architecture # - lvm: use LVM to partition the disk # - crypto: use LVM within an encrypted partition d-i partman-auto/method string lvm # If one of the disks that are going to be automatically partitioned # contains an old LVM configuration, the user will normally receive a # warning. This can be preseeded away... d-i partman-lvm/device_remove_lvm boolean true # The same applies to pre-existing software RAID array: d-i partman-md/device_remove_md boolean true # And the same goes for the confirmation to write the lvm partitions. d-i partman-lvm/confirm boolean true d-i partman-lvm/confirm_nooverwrite boolean true # You can choose one of the three predefined partitioning recipes: # - atomic: all files in one partition # - home: separate /home partition # - multi: separate /home, /usr, /var, and /tmp partitions d-i partman-auto/choose_recipe select multi # This makes partman automatically partition without confirmation, provided # that you told it what to do using one of the methods above. d-i partman-partitioning/confirm_write_new_label boolean true d-i partman/choose_partition select finish d-i partman/confirm boolean true d-i partman/confirm_nooverwrite boolean true d-i partman-basicfilesystems/no_mount_point yes # Next you need to specify the physical partitions that will be used. d-i partman-md/confirm boolean true d-i partman-md/confirm_nooverwrite boolean true # This makes partman automatically partition without confirmation. d-i partman-md/confirm boolean true d-i partman-md/confirm_nooverwrite boolean true d-i partman-partitioning/confirm_write_new_label boolean true d-i partman/choose_partition select finish d-i partman/confirm boolean true d-i partman/confirm_nooverwrite boolean true ### Apt setup # You can choose to install non-free and contrib software. d-i apt-setup/non-free boolean true d-i apt-setup/contrib boolean true d-i apt-setup/services-select multiselect security, updates, backports d-i apt-setup/security_host string security.debian.org # Additional repositories, local[0-9] available d-i apt-setup/local0/repository string \ http://ftp.fr.debian.org/debian/ jessie-backports main contrib non-free d-i apt-setup/local0/comment string Jessie backports ### Package selection tasksel tasksel/first multiselect standard, ssh-server d-i pkgsel/upgrade select full-upgrade # Some versions of the installer can report back on what software you have # installed, and what software you use. The default is not to report back, # but sending reports helps the project determine what software is most # popular and include it on CDs. popularity-contest popularity-contest/participate boolean false d-i grub-installer/only_debian boolean false d-i grub-installer/with_other_os boolean true d-i grub-installer/bootdev string /dev/vda d-i debian-installer/add-kernel-opts string console=ttyS0,115200n8 serial # Avoid that last message about the install being complete. d-i finish-install/reboot_in_progress note # This is how to make the installer shutdown when finished, but not # reboot into the installed system. #d-i debian-installer/exit/halt boolean true # This will power off the machine instead of just halting it. d-i debian-installer/exit/poweroff boolean true d-i preseed/late_command string \ in-target mkdir /root/.ssh ; \ echo "ssh-rsa AAAA..." > /target/root/.ssh/authorized_keys
Plateforme physique

- Nécessité d'un équipement de déploiement
- mise en place dhcp / pxe / tftp boot
Outils OSFS
Afin d'aider et de simplifier la mise en place des testbeds et l'automatisation du déploiement des plateformes, un outils est en cours de développement. L'outils osfs permettra:
- installer les éléments nécessaire au déploiement de la plateforme (virtuelle ou physique)
- générer les fichiers de configurations d'un nouvel environnement
- exécuter les étapes de déploiement ainsi que leurs suivis
- gérer les machines virtuelles d'une plateforme virtuelle
L'aide de la commande est la suivante:
$ osfs.py --help usage: osfs.py [-h] [--cfg CFG] [--env ENV] {env-list,env-setdefault,env-register,env-unregister,env-reset,env-snap,env-rmsnap,env-info,env-build,lv-create,vm-create,vm-destroy,vm-rebuild,vm-reset,vm-snap,salt,salt-run,salt-state} ... positional arguments: {env-list,env-setdefault,env-register,env-unregister,env-reset,env-snap,env-rmsnap,env-info,env-build,lv-create,vm-create,vm-destroy,vm-rebuild,vm-reset,vm-snap,salt,salt-run,salt-state} availables sub-command env-list list of registered environment env-setdefault select a default environment env-register register a new environment env-unregister unregister an existing environment env-reset Reset ALL the VM of an environment env-snap create a new snap of all the VM of an environment env-rmsnap delete a snap for all the VMs env-info info about the current environment env-build build the current environment lv-create create a logical volume in thinpool vm-create create a vm from scratch vm-destroy totally destroy a vm vm-rebuild destroy an create a vm vm-reset reset a vm to its snapshot vm-snap reset a vm to its snapshot salt Run salt cmd salt-run Run salt-rum cmd salt-state Apply salt state to the vm optional arguments: -h, --help show this help message and exit --cfg CFG config file --env ENV select an environment
Installation
Commandes spécifiques: virtualisation
vm-create
vm-destroy
vm-rebuild
vm-reset
vm-snap
Commandes spécifiques: matérielle
Commandes communes
salt
salt-run
salt-state
Première page / Page précédante / Sommaire / Page suivante / Dernière page