wiki:DebianOvh

Installation Debian GNU/Linux sur les machines OVH

Cette documentation explique comment installer à distance une distribution Debian GNU/Linux "vanille" sur un serveur dédié loué chez OVH. Il repose sur les possibilités de netboot côté OVH, et la fonction debootstrap côté Debian.

L'intérêt ?

  • une certaine question de "souverraineté", vous obtenez un niveau de garantie supplémentaire si vous maîtrisez la source et la procédure d'installation de votre OS. Notez qu'OVH reste bien entendu propriétaire du serveur, et gardera peut être un accès root (pour des services de maintenances ou de backup que vous avez loué).
  • les images Debian prêtes à l'emploi chez OVH ne sont pas des "base-install", certains choix et configurations ont déjà été effectués et ils ne vous conviennent peut être pas
  • vous avez une latitude complète pour le partitionnement et la configuration du RAID (soft), avec des outils standards
  • parce qu'on peut le faire !

1. Netboot rescue

Netbooter la machine en mode "rescue" (ou "rescue-pro"): elle boote alors sur un noyau et un filesystem réseaux, et on peut tranquillement travailler sur le disque (partitionner, installer, etc).

Dans le Manager v3, sélectionner le serveur dédié, choisir "Services", puis "Netboot", puis l'option "rescue-pro".

Sur le serveur, exécuter la commande reboot. On doit alors recevoir sous peu un email annonçant que la machine est en mode rescue, et un mot de passe root pour se logger en SSH. On se logge.

2. Partitionnement

RAID soft (1)

Si la machine utilise du RAID soft (cat /proc/mdstat), il faut d'abord arrêter les volumes RAID sous peine d'avoir des disk busy ou autres lors du partitionnement et de la relecture des nouvelles partitions:

# mdadm --stop /dev/md0
...

Partitionnement

Le plus simple est d'utiliser cfdisk. Pour un serveur générique, on va typiquement avoir:

    Name           Flags        Part Type    FS Type               [Label]           Size (MB)
 ------------------------------------------------------------------------------------------------
    sda1           Boot          Primary     Linux raid autodetect [/]               1998.75    
    sda2                         Primary     Linux swap / Solaris                    1003.49
    sda3                         Primary     Linux raid autodetect                   79341.06

C'est à dire: 2GB pour la racine, 1GB pour le swap, et le reste pour les données (/var). Penser à bien spécifier le type de la partition de swap, et positionner le "boot flag" sur la première partition.

Attention: bien utiliser le type Linux raid autodetect pour que les volumes RAIDs soient automatiquement détectés et démarrés au boot du noyau (vital pour un rootfs RAID). En mode "rescue-pro", si vous avez oublié ce flag, vous pouvez démarrer des volumes RAIDs préalablement configurés avec:

# mdadm --assemble -m dev /dev/md0
...

RAID soft (2)

On clone le partitionnement du premier disque sur le deuxième:

# sfdisk -d /dev/sda | sfdisk /dev/sdb

On crée les volumes RAID (mirror) et on les démarre avec la même commande. Exemple:

# mdadm --create /dev/md0 --level=1 --raid-devices=2 --run /dev/sda1 /dev/sdb1
# mdadm --create /dev/md1 --level=1 --raid-devices=2 --run /dev/sda3 /dev/sdb3

On doit les voir en cours de synchronisation avec cat /proc/mdstat. On gagne du temps en ne créant un nouveau volume RAID qu'une fois le volume précédent entièrement synchronisé.

3. Filesystems

On crée les swaps et les filesystems en ext3 journalisé:

# mkswap /dev/sda2
# mkswap /dev/sdb2
# mke2fs -j -L root /dev/md0
# mke2fs -j -L var /dev/md1

Il ne reste plus qu'à les monter selon le même schéma du système final:

# mkdir -p /mnt/target/var
# mount /dev/md0 /mnt/target
# mount /dev/md1 /mnt/target/var

4. Copie du système

Il faut disposer d'un système de base Debian (il s'obtient très facilement avec la commande debootstrap). L'idée est d'avoir un tarball prêt à l'emploi sur un serveur qui dispose d'une bonne bande passante montante (ici "debserv"). On transfère l'archive et on la décompresse avec SSH:

debserv:/tmp/etch# debootstrap etch . http://ftp.fr.debian.org/debian
debserv:/tmp/etch# tar cz * | ssh ns66667.ovh.net tar xzC /mnt/target

5. Configuration du système

Filesystems

On commence par écrire la fstab, dans le cas du RAID soft par exemple:

# cat >/mnt/target/etc/fstab
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0
/dev/md0        /               ext3    defaults,errors=remount-ro 0       1
/dev/md1        /var            ext3    defaults        0       2
/dev/sda2       none            swap    sw              0       0
/dev/sdb2       none            swap    sw              0       0
(Ctrl+D)

Réseau

Ensuite on passe au réseau (infos IP: ifconfig|grep inet, infos passerelle: route -n):

# cat >/mnt/target/etc/network/interfaces
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
        address 99.120.55.116
        gateway 99.120.55.254
        netmask 255.255.255.0
        dns-nameservers 213.186.33.99
(Ctrl+D)
# cat >/mnt/target/etc/resolv.conf
search bearstech.com
nameserver 213.186.33.99
(Ctrl+D)
# cat >/mnt/target/etc/hostname
ovh-custom
(Ctrl+D)
# cat >/mnt/target/etc/hosts
127.0.0.1       localhost.localdomain localhost
99.120.55.116   ovh-custom.bearstech.com ovh-custom
(Ctrl+D)

Note:

  • dans /etc/hostname on ne met que le hostname, pas de domaine
  • le FQDN (tel que retourné par hostname -f) est déduit de la première entrée pour notre IP dans /etc/hosts

APT + Mises à jour

On configure le repository (ici donc pour "Etch" qui est la branche stable du moment):

# cat >mnt/target/etc/apt/sources.list
deb http://mir2.ovh.net/debian/ etch         main contrib
deb http://security.debian.org/ etch/updates main contrib
(Ctrl+D)

Noyau et udev

Vous pouvez vous contenter de netbooter sur le noyau OVH, ce qui reste une solution comfortable et efficace, vu que celui-ci est conçu pour supporter précisément la matériel d'OVH. Toutefois:

  • le composant udev est indispensable, et debootstrap ne l'installe pas (car il est inutile pour un simple environnement "chroot")
  • il n'est pas inutile d'installer aussi le noyau Debian sur le disque, peut être même aurez-vous besoin de spécificités uniquement correctement configurés dans le noyau Debian

Nous proposons une seule manipulation qui installe le noyau Debian sur le disque et implique donc l'installation de udev. Cette étape n'est donc pas optionnelle.

Pour installer un noyau depuis le mode "rescue pro", c'est un peu délicat. Comme udev crée les device nodes à la demande dans le système hôte, ils sont manquant dans le chroot. On doit les copier avant de rentrer dans le chroot:

# cp -a /dev/sd* /dev/scsi /mnt/target/dev
# chroot /mnt/target
target:# mount /proc
target:# aptitude update && aptitude dist-upgrade
target:# aptitude install linux-image-2.6-amd64 grub
target:# mkdir /boot/grub
target:# cp -a /usr/lib/grub/x86_64-pc/* /boot/grub
target:# update-grub
(répondre "y")
target:# cat >>/boot/grub/device.map
(hd0)   /dev/sda
(hd1)   /dev/sdb
(Ctrl+D)
target:# grub
grub> root (hd0,0)
grub> setup (hd0)
grub> setup (hd1)
grub> quit
target:# rm -fr /dev/sd* /dev/scsi

Installs diverses

L'indispensable (SSH+mdadm, éventuellement lvm2):

target:# aptitude install mdadm openssh-server

Les locales: on a souvent du mal à s'en passer, ne serait-ce que pour avoir des terminaux qui gèrent l'UTF-8.

target:# aptitude install locales
target:# dpkg-reconfigure locales
(Sélectionner: en_US.ISO-8859-1, en_US.UTF-8, fr_FR.ISO-8859-1, fr_FR.UTF-8)
(Locale par défaut: en_US.UTF-8)

Configurer correctement la timezone et installer un démon NTP qui marche sans qu'on y pense afin de rester à l'heure:

target:# tzconfig
target:# aptitude install openntpd

Détails importants

  • Définissez un mot de passe root (avec password) ou n'autorisez que l'authentification par clé via SSH
  • Dans /root/.ssh/authorized_keys, on met sa clé publique.
  • Dans /etc/default/rcS, mettre FSCKFIX=yes.
  • Dans /etc/default/bootlogd, mettre BOOTLOGD_ENABLE=yes.

6. Redémarrage

On quitte le chroot et on démonte les partitions proprement.

target:# umount /proc
target:# exit
# umount /mnt/target/var
# umount /mnt/target

Ensuite, dans le manager OVH, on sélectionne le mode "Netboot", on choisit le dernier kernel SMP, on désigne le rootfs (ici /dev/md0). Enfin, on quitte le mode rescue:

# reboot
(exit)

Note: il peut rester des process dans le chroot (surtout des démons (re)démarrés par la maj APT), on peut les identifier avec fuser -m -v /mnt/target.

En cas de pépin

Il ne vous reste plus qu'à repasser en netboot "rescue-pro" et forcer un reboot hard depuis le manager OVH. Soyez rapide, sinon OVH intervient automatiquement pour rebooter la machine au moment où vous vous y attendez le moins. Netbooter en rescue redonne toujours la main sur la machine, et annule le ticket d'intervention si vous êtes assez rapide.

Notes:

  • vous êtes limité à 1 reboot hard par heure.
  • il y a un nouveau mode de netboot "vKVM" qui semble lancer le système dans un QEMU et exporte son display via VNC/SSL (via une applet Java intégrée)
Last modified 10 years ago Last modified on Jul 2, 2008, 4:33:47 PM