Docker running on OVH VPS (Ubuntu 14.04)

Warning. It looks like that it isn’t true anymore for VPS 2016. See this comment.


For testing purpose, you may want to install a Docker server on an OVH VPS. This short article explain you how to make Docker running on a VPS with an Ubuntu 14.04 system (this may be the same for Debian users).

First of all, as we need to use an official kernel, do not use VPS Classic. Only the VPS Cloud that is running on VMWare let you use another kernel instead of there customized one.

Continue reading Docker running on OVH VPS (Ubuntu 14.04)

facebooktwittergoogle_plusredditpinterestlinkedinmail

Gentoo: utiliser le Portage Overlay pour patcher des ebuilds

Dans un article précédent, j’expliquais comment patcher un package Gentoo via le répertoire /etc/portage/patches/. Cependant, pour utiliser cette méthode, il faut que l’ebuild appelle la fonction epatch_user dans le src_prepare.

Lorsque ce n’est pas le cas, vous ne pouvez donc pas utiliser cette méthode. Pour cela, vous pouvez créer votre propre ebuild à partir du tree officiel dans votre portage overlay.

Configurer le portage overlay

Pour configurer le portage overlay, il vous suffit d’ajouter la ligne suivante dans le fichier /etc/make.conf:

Ainsi, votre overlay est situé dans le dossier /usr/local/portage.

Modifier un ebuild

Si par exemple, vous voulez modifier le package dev-php/xdebug, il vous suffit de copier le fichier ebuild dans votre package overlay:

Il vous suffit d’ajouter la fonction post_src_prepare pour y appeler la fonction epatch_user comme ceci:

Ensuite, il faut générer le fichier Manifest grâce à l’outil ebuild:

Maintenant, emerge va tout d’abord récupérer le package depuis vote overlay, et va donc appliquer les patches de votre dossier /etc/portage/patches/dev-php/xdebug/.

facebooktwittergoogle_plusredditpinterestlinkedinmail

Gentoo: utiliser des patches maison avec emerge

Il n’y a pas (ou très peu) de documentation sur comment utiliser vos propres patches sur des packages que vous installez avec emerge sous Gentoo, mais sachez que l’on peut le faire!
En théorie, il suffit d’ajouter votre patch au bon endroit, et emerge va le lire et l’appliquer lors de l’éxécution du src_prepare(). Il y a cependant des exceptions.

La fonction epatch_user

C’est la fonction epatch_user (déclarée dans /usr/portage/eclass/eutils.eclass) qui fait tout le travail. Elle doit être appelée dans le ebuild durant l’exécution du src_prepare.
Elle parcours le dossier /etc/portage/{category}/{package}/ et lance epatch pour appliquer tous les patches (ie tous les fichiers) qui s’y trouvent!
Par conséquent, pour que vous puissiez utiliser cette fonctionnalité, l’ebuild doit être configuré de telle sorte qu’il appelle la fonction epatch_user

Ajouter notre patch

Il suffit d’ajouter le patch dans le répertoire /etc/portage/patches/{category}/{package}, où category est la catégorie de votre package (dev-lang pour PHP par exemple) et package le nom de votre package, avec ou sans numéro de version.
Par exemple, si vous avez un patch xxx.patch pour PHP, copiez-le simplement dans le répertoire /etc/portage/patches/dev-lang/php/, et lorsque emerge préparera la source du ebuild, il appliquera votre patch automatiquement!

:)

facebooktwittergoogle_plusredditpinterestlinkedinmail

Webistrano: Net::SSH::AuthenticationFailed error

Si vous avez une erreur Net::SSH::AuthenticationFailed avec Webistrano (ou Capistrano), vous êtes peut-être en présence du bug de Net::SSH que je vais vous présenter. Avant, vérifiez ces points-ci:

  • Le nom du serveur (et l’IP qui va derrière) est bon.
  • Le nom d’utilisateur est bon.
  • Vous pouvez vous connecter à votre serveur en utilisant ssh user@server.example.com en tant que l’utilisateur qui exécute Webistrano (ie la configuration runner) ou bien l’utilisateur qui lance le cap.

Si vous pouvez vous connecter au serveur avec une paire de clé (ou un mot de passe) depuis votre runner, vous pouvez essayer ce correctif. Sinon, cherchez ailleurs, ça n’est sûrement pas la solution de votre problème. En fait, le problème vient de la librairie Net::SSH de Ruby, qui n’arrive pas à se connecter si on ne lui passe pas l’option de configuration auth_methods.

Pour tester

Pour être sur que le correctif que je vous propose résoudra votre problème, nous allons tester le déploiement en utilisant le fichier CAP directement. En fait, c’est le fichier que Webistrano génère pour que Capistrano déploie votre application.
Ainsi, dans Webistrano, cliquez sur le stage de votre projet, puis Export CAP file. Copiez le contenu de ce fichier dans le répertoire de travail du runner de votre stage. Pour moi, le runner est webistrano, le fichier sera donc ici: /home/webistrano/tmp/test-webistrano.cap.

Ajoutez à votre fichier cap la ligne de configuration suivante, avec la section “TEMPLATE TASKS”.

Note: si vous utilisez une autre méthode d’authentification, changez donc le nom… Vous pourrez trouver une liste exhaustive dans la documentation de Net::SSH.

Ensuite, testez le déploiement avec Capistrano, qui est dans le répertoire des librairies de Webistrano. Dans mon exemple, (où la racine de Webistrano est /home/webistrano), je lance le déploiement comme ceci:

Pour résoudre

Continue reading Webistrano: Net::SSH::AuthenticationFailed error

facebooktwittergoogle_plusredditpinterestlinkedinmail

Gentoo: Pas de fichier de log avec Postfix

Après avoir mis en place Postfix avec Postfixadmin sur un système Gentoo, je me suis rendu compte qu’aucun fichier de log n’était créé par Postfix. En réalité, je n’avais simplement pas installé rsyslog. Vous pouvez l’installer comme ceci:

Éditez maintenant le fichier /etc/rsyslog.conf, et si vous n’avez pas cette ligne, ajoutez-la:

Le fichier de log /var/log/maillog est créé un contiendra maintenant les logs de Postfix.

facebooktwittergoogle_plusredditpinterestlinkedinmail

Redmine (Ruby) `load_missing_constant': Object is not missing constant Issue! (ArgumentError)

Lors de l’installation conjointe de Webistrano (voir Installer Webistrano avec nginx et PostgreSQL sous Gentoo) et de Redmine (voir Installer Redmine avec PostgreSQL) sur un même serveur, Redmine m’as quelque peut surpris on me sortant cette erreur:

Après de nombreuses recherches, j’ai résolu le problème en ajoutant une petite ligne au fichier config/environnement.rb de Redmine:

Après la ligne suivante:

:)

facebooktwittergoogle_plusredditpinterestlinkedinmail

Installer Webistrano avec nginx et PostgreSQL sous Gentoo

Webistrano est une application Web développée en Ruby On Rails permettant le déploiement automatisé de vos applications, qu’elles soient Web ou non. Ainsi, via le front-end Web, vous n’aurez qu’à appuyer sur un bouton pour que Webistrano récupère vos sources depuis un dépôt (svn, git, …) et depuis un répertoire et le déploie sur votre ferme de serveurs, en lançant par exemple les différents tests que vous aurez effectués. Si une erreur apparaît, Webistrano annule tous les changements et laisse l’application fonctionnelle comme elle l’était.

Pour installer Webistrano, vous avez besoin de Ruby On Rails, d’un serveur Web et d’une base de données. Je vais utiliser nginx comme serveur Web et PostgreSQL comme base de données. Je ne vais pas vous expliquer comment installer nginx et PostgreSQL, il y a déjà de très bons articles qui vous l’expliquent.

Installation du Ruby On Rails

Pour installer Ruby On Rails sur Gentoo, rien de plus simple, installer rudy puis le gem rails :

Configuration de la base de données

Nous allons créer une nouvelle base de données pour Webistrano, ainsi qu’un nouvel utilisateur:

Téléchargement et configuration du Webistrano

On va télécharger le tarball de la dernière version de Webistrano depuis le dépôt GitHub et décompressez le à l’endroit que vous souhaitez. Ici, le chemin de Webistrano sera /home/www/webistrano/.

Ensuite, nous allons configurer Webistrano en éditant les fichiers de configuration mais avant il faut les créer à partir des modèles fournis:

Continue reading Installer Webistrano avec nginx et PostgreSQL sous Gentoo

facebooktwittergoogle_plusredditpinterestlinkedinmail

php-fpm segfault at f6 avec APC

En voulant modifier la configuration d’APC, pour augmenter la taille d’un segment de 30M à 64M, j’ai uniquement modifié la directive apc.shm_size. L’opération m’as valu une erreur de segmentation lors du démarrage de php-fpm.

Je me suis donc mis à la tâche de mettre à jour PHP ainsi que tous ces modules PECL sous Gentoo. Une fois la mise à jour s’étant bien passé, APC est à la version 3.1.9 mais php-fpm refuse toujours de démarrer… J’ai donc remis la valeur de apc.shm_size à 30M et php-fpm s’est très bien lancé.

On peut donc vérifier la taille maximum de mémoire partagée allouée par le système de le fichier /proc/sys/kernel/shmmax :

Par conséquent, on peut voir qu’APC n’a pas pu réserver 64M de mémoire partagée, puisque le système lui refuse. Je déplore un peu le manque de message d’erreur et l’erreur de segmentation qui peut provenir de “nul-part” si l’on configure son système automatiquement.

À ce stade vous avez deux possibilités:
Continue reading php-fpm segfault at f6 avec APC

facebooktwittergoogle_plusredditpinterestlinkedinmail

Crypter un mot de passe comme dans /etc/shadow

Petit test pour crypter un mot de passe comme dans le fichier /etc/shadow avec Python! Vous pouvez crypter une chaîne de caractères en utilisant le même SALT, à savoir la clé de cryptage.

Dans une chaine du fichier /etc/shadow, voici un exemple de ligne:

Ici, on peut voir que mon mot de passe personnel est $6$jWp7fotG$ikvxu3kvwbn36XvznP1FHnokYpY/MScI6QjYz.vJJ1r/klF2Nwiv3lkuSvs8hz4fZ08v7OAANFKfOaotPsjL50. Cette chaine signifie que l’encodage utilisé est le numéro 6 ($6$) à savoir le SHA-2, le SALT est jWp7fotG. Vous pouvez retrouver plus d’informations à ce sujet ici.

En utilisant la même clé, on peut donc retrouver le mot de passe, comme ceci!

On vérifie la correspondance:

:-)

facebooktwittergoogle_plusredditpinterestlinkedinmail

C: Régler le problème des defunct process

Lorsque vous développez une application, il est parfois très intéressant d’utiliser des threads ou plusieurs processus pour exécuter plusieurs tâches simultanément. Nous allons ici voir un problème qui arrive lors que l’on utilise plusieurs processus, via un fork(). En effet, en C, la fonction fork permet de créer un nouveau processus, qui devient fils du processus appelant le fork.

Processus zombies (defunct)

Par défaut, lorsque le processus père s’arrête, tous les processus fils s’arrête. À l’inverse, lorsqu’un processus fils s’arrête – via un exit(0); par exemple -, sa mémoire est libérée, il devient un processus zombie (seul le bloc de contrôle reste présent) et le processus père continue de fonctionner.

Ainsi, l’on peut voir de nombreuses lignes marquées par un defunct lorsque l’on liste les processus avec un ps:

C’est parce que le processus père n’écoutes pas le signal SIGCHLD, qui est envoyé par le fils lors de son extinction. Ainsi, en écoutant le signal, le père peut libérer son bloc de contrôle. En C, c’est la fonction waitpid qui nous sera utile.

Une ligne à ajouter

Il n’y a qu’une seule ligne (ainsi qu’un #include) à ajouter à votre code C pour que les processus zombies soient “ramassés” par votre processus père. De temps en temps – l’idéal étant la boucle principale s’il y a -, exécutée cette ligne ci:

Les arguments sont les suivants:

  • WAIT_ANY est la constante permettant de dire que l’on souhaite attendre n’importe quel des processus fils de ce processus. À la place, nous aurions pu mettre le pid d’un processus particulier.
  • NULL permet de ne pas récupérer d’informations de statut du processus.
  • WNOHANG est une option permettant d’exécuter waitpid en mode non-bloquant.

N’oubliez pas d’inclure l’en-tête des fonctions et constantes ainsi:

Ainsi, il ne restera plus de processus zombie, ou defunct.

facebooktwittergoogle_plusredditpinterestlinkedinmail