Monthly Archives: décembre 2014

Installer docker sous debian wheezy

Cet article à pour but de décrire comment installer docker sous debian wheezy. Cela n’est pas aussi facile que prévu (j’ai eu des petits soucis avec cgroup)

1 – Installer un kernel > 3.8
Tout d’abord le noyau de debian wheezy n’est pas assez récent pour supporter docker. Heureusement, les backports sont là pour remédier à cela.
Ajouter la ligne suivante dans le fichier /etc/apt/sources.list puis lancer un aptitude update

deb http://http.debian.net/debian wheezy-backports main contrib non-free

Installer le noyau venant des backports :

aptitude install -t wheezy-backports linux-image-amd64

2 – Installer docker
L’installation s’effectue à partir du binaire docker

wget https://get.docker.com/builds/Linux/x86_64/docker-latest -O docker
chmod +x docker

Installer cgroup :

aptitude install cgroup-bin

3 – Lancer docker au boot
Créer le fichier /etc/init.d/docker avec le contenu ci-dessous :

#!/bin/bash
 # /etc/init.d/docker
 #
 ### BEGIN INIT INFO
 # Provides: docker
 # Required-Start: $local_fs $remote_fs $network vboxdrv
 # Should-Start:
 # Should-Stop:
 # Required-Stop:
 # Default-Start: 2 3 4 5
 # Default-Stop: 0 1 6
 # X-Interactive: true
 # Short-Description: Start docker
 # Description: Start docker
 ### END INIT INFO

 #
 # main part
 #
 #PATH=/sbin:/usr/sbin:/usr/bin:/bin
 LOG=/var/log/mydocker.log
DOCKER_CMD_RUN="PATH_TO_DOCKER_BINARY -d &"

cgroupfs_mount() {
 # see also https://github.com/tianon/cgroupfs-mount/blob/master/cgroupfs-mount
 if grep -v '^#' /etc/fstab | grep -q cgroup \
 || [ ! -e /proc/cgroups ] \
 || [ ! -d /sys/fs/cgroup ]; then
 return
 fi
 if ! mountpoint -q /sys/fs/cgroup; then
 mount -t tmpfs -o uid=0,gid=0,mode=0755 cgroup /sys/fs/cgroup
 fi
 (
 cd /sys/fs/cgroup
 for sys in $(awk '!/^#/ { if ($4 == 1) print $1 }' /proc/cgroups); do
 mkdir -p $sys
 if ! mountpoint -q $sys; then
 if ! mount -n -t cgroup -o $sys cgroup $sys; then
 rmdir $sys || true
 fi
 fi
 done
 )
 }

case "$1" in
 start)
 echo `date` echo "Starting docker" >> $LOG
 cgroupfs_mount
 eval $DOCKER_CMD_RUN
 ;;
 stop)
 echo `date` "Stopping docker" >> $LOG
 killall docker
 ;;
 esac

Le script fourni permet de lancer docker avec SysV init. Il faut l’ajouter au boot via la commande

update-rc.d docker defaults

La fonction cgroupfs_mount permet de monter les filesystems cgroup afin d’éviter l’erreur suivante : docker failed to find the cgroup root

Voir stackoverflow si besoin : https://github.com/docker/docker/issues/8791

Changer le répertoire de mysql sous debian wheezy

Voici un petit script avec quelques explications pour changer le répertoire de mysql (datadir) sous debian wheezy.

Explications :

La ligne permettant de changer le répertoire des données de mysql est la ligne contenant datadir dans le fichier /etc/mysql/my.cnf

datadir  = /app/mysql

Une fois cette ligne modifiée, il faut réinstaller la base de données. Redémarrer simplement mysql ne fonctionne pas. La commande mysql_install_db est prévue à cet effet. Elle crée les fichiers et dossiers nécessaires dans le nouveau répertoire.

Après cela, le redémarrage de mysql fonctionnera. Cependant, un message d’erreur apparaitra. La réinstallation de la base n’a pas conservé l’utilisateur dédié à la maintenance

Message d’erreur au lancement de mysql

ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)

La solution consiste à créer l’utilisateur demandé en récupérant le mot de passe dans le fichier /etc/mysql/debian.cnf

Script shell :

#!/bin/bash
/etc/init.d/mysql stop
# Install database in directory configured in my.cnf
mysql_install_db
# Restart mysql
/etc/init.d/mysql start
#Get password from config file
MYSQL_PWD_DEBIAN=`grep password /etc/mysql/debian.cnf | cut -d= -f2 | head -n 1 | tr -d ' '`
echo "Password for debian-sys-maint = $MYSQL_PWD_DEBIAN"
# Create debian user
mysql -u root -e "GRANT ALL PRIVILEGES ON *.* TO 'debian-sys-maint'@'localhost' IDENTIFIED BY '$MYSQL_PWD_DEBIAN';"