Installer Docker sur un serveur OVH

Si vous avez un serveur OVH et que vous avez essayé d’installer Docker, vous avez pu vous apercevoir qu’au lancement d’un container nous avons un message d’erreur :

1
Cannot start container […] invalid argument

Le problème ne vient pas de votre distribution mais du noyau linux. Pour une question de performance, OVH installe par defaut un noyau linux compilé et optimisé par leur soin. Le problème, c’est que leur noyau n’intégre par les options nécessaires au bon fonctionnement de Docker (User namespace…).

Il va donc falloir recompiler le noyau, en se basant sur les options choisies par OVH (pour garder l’optimisation) et en rajoutant les options nécessaires. C’est parti.

Préparation avant compilation

Pour rappel, toutes ces commandes seront à lancer avec l’utilisateur root.
Commencez par vérifier que la distribution est à jour.

1
2
# apt-get update
# apt-get upgrade

Pour recompiler le noyau, vous allez avoir besoin de plusieurs librairies. Installez-les

1
# apt-get install make gcc libncurses5-dev lzma dpkg-dev wget

Créez votre répertoire de travail que vous pourrez supprimer à la fin.

1
# mkdir /root/kernel && cd /root/kernel

Téléchargez le kernel officiel que vous allez ensuite compiler. Tant qu’à faire, prenez le dernier (3.18.3 au moment où j’écris ces lignes).

1
# wget -P /root/kernel -c --no-check-certificate https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.3.tar.xz

Décompressez l’archive téléchargée puis placez-vous dans le dossier décompressé qui contient les fichiers permettant la compilation du noyau.

1
# tar xf linux-3.18.3.tar.xz && cd linux-3.18.3

Comme nous l’avons dit, nous allons nous baser sur la configuration du noyau d’OVH pour profiter de tout le travail d’optimisation qu’ils ont fait.
Téléchargez leur fichier de configuration correspondant au noyau que l’on souhaite compiler (3.18.3).

1
# wget -P /root/kernel/linux-3.18.3 -c ftp://ftp.ovh.net/made-in-ovh/bzImage/3.18.3/config-3.18.3-xxxx-std-ipv6-64

Pour utiliser leur configuration, il va falloir renommer leur fichier en .config.

1
# mv config-3.18.3-xxxx-std-ipv6-64 .config

Ca y est, vous pouvez passer à la compilation du noyau.

1
# make menuconfig

Pour la navigation :

  • Déplacez-vous avec les flèches gauche/droite pour sélectionner les options du menu
  • Déplacez-vous avec les flèches haut/bas puis cliquez surpour selectionner les options de configuration
  • Lorsque vous voyez —> c’est qu’il y a un sous-menu. Vous pouvez cliquer surpour vous y rendre. Pour en sortir, il suffit de se rendre sur l’option du menupuis de cliquer sur.

Commençez par charger les options de configuration depuis le fichier d’OVH. Pour cela, rendez-vous sur l’option du menu, cliquez sur, puis recliquez sur.

Il ne vous reste plus qu’à rajouter les options de configuration nécessaires à Docker. Pour cela, activez les options suivantes :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
General setup --->
[*] Control Group support --->
[*] Example debug cgroup subsystem
[*] Freezer cgroup subsystem
[*] Device controller for cgroups
[*] Cpuset support
[*] Include legacy /proc/<pid>/cpuset file
[*] Simple CPU accounting cgroup subsystem
[*] Resource counters
[*] Memory Resource Controller for Control Groups
[*] Memory Resource Controller Swap Extension
[*] Memory Resource Controller Swap Extension enabled[...]
[*] Memory Resource Controller Kernel Memory accountin[...]
[*] Enable perf_event per-cpu per-container group (cgrou[...]
[*] Group CPU scheduler --->
[*] Group scheduling for SCHED_OTHER (NEW)
[*] CPU bandwidth provisioning for FAIR_GROUP_SCHED
[*] Group scheduling for SCHED_RR/FIFO
[*] Block IO controller
[*] Enable Block IO controller debugging
-*- Namespaces support --->
[*] UTS namespace
[*] IPC namespace
[*] User namespace
[*] PID Namespaces
[*] Network namespace
[*] Enable loadable module support
Networking support --->
Networking options --->
<*> 802.1d Ethernet Bridging
[*] IGMP/MLD snooping
[*] VLAN filtering
<*> 802.1Q/802.1ad VLAN Support
[*] GVRP (GARP VLAN Registration Protocol) support
Device Drivers --->
[*] Network device support --->
<*> MAC-VLAN support
<*> MAC-VLAN based tap driver
<*> Virtual ethernet pair device
Character devices --->
-*- Unix98 PTY support
[*] Support multiple instances of devpts

Une fois fini, enregistrez votre fichier de configuration en vous rendant sur l’option du menu. Puis vous pouvez quitter menuconfig.

Compilation

Lancez la compilation. Attention, cela peut prendre plusieurs dizaines de minutes. Pensez donc à adapter le nombre de threads (coeur cpu) alloué à cette tâche pour accélérer la vitesse de compilation.

1
# make KDEB_PKGVERSION=3.18.3.cgroups.1.0 deb-pkg --jobs 4

Une fois fini, le noyau compilé devrait se trouver dans votre dossier /root/kernel sous le nom de :
linux-image-3.18.3-xxxx-std-ipv6-64_3.18.3.cgroups.1.0_amd64.deb

Installation du nouveau noyau

A présent, enlevez le noyau actuel

1
2
3
# mv /boot/bzImage-3.10.23-xxxx-std-ipv6-64 /tmp
# mv /boot/System.map-3.10.23-xxxx-std-ipv6-64 /tmp
# mv /etc/grub.d/06_OVHkernel /tmp

et installez le nouveau.

1
# dpkg -i /root/kernel/linux-image-3.18.3-xxxx-std-ipv6-64_3.18.3.cgroups.1.0_amd64.deb

Voilà, il ne vous reste plus qu’à redémarrer le serveur. Attendez quelques instans avant d’essayer de vous reconnecter en ssh.

1
# reboot

Une dernière vérification pour voir si vous avez la bonne version du kernel : 3.18.3

1
# uname -r

Et pensez à supprimer le dossier de travail qui ne vous sert plus.

1
# cd /root && rm -R kernel/

Voilà, vous pouvez installer Docker en vous basant sur les explications de leur site, et il ne devrait plus y avoir de souci.

Partager