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

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

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

Varnish en reverse-proxy: le problème des adresses locales

Si vous utilisez nginx ou Apache derrière Varnish, vous aurez remarqué que l’adresse IP du client récupérée est l’adresse locale (ou bien l’adresse du serveur hébergeant Varnish). Cela est le cas parce-que c’est Varnish qui créé la connexion TCP à nginx/apache, et non le client directement. Pour cela, nous allons tout simplement installer un module sur votre serveur Web, pour qui va utiliser une en-tête (X-Forwarded-For) pour connaitre l’IP du client.

Pour nginx

Il nous faut nginx compilé avec le module Real-IP (--with-http_realip_module), ce qui est le cas par défaut dans les paquets CentOS et Debian. Dans le fichier de configuration /etc/nginx/nginx.conf, dans la catégorie http {...}, ajoutez ça:

Redémarrez le serveur nginx, et c’est bon.

Pour Apache

Pour Apache, il faut installer le module RPAF2. Je vous invite à lire l’article très intéressant de wiki.tyk.nu.

facebooktwittergoogle_plusredditpinterestlinkedinmail

Tunnel SSH sur le port 80, utilisant le reverse proxy Varnish

Dans un article précédent, nous avons vu comment créer une connexion SSH à travers un tunnel HTTP, mais le problème est que vous ne pouviez pas utiliser le port 80 si votre serveur hébergeait un serveur HTTP! Nous allons maintenant voir comment mettre en place Varnish, l’un des meilleurs reverse-proxy (qui peut également servir de système de cache), pour utiliser à la fois httptunnel et votre serveur Web.

Mise en place de Varnish

Nous allons commencer par mettre en place Varnish de la façon suivante:

Pour cela, nous allons installer varnish depuis les dépôts. Pour CentOS:

Pour commencer, nous allons modifier le fichier de configuration de Varnish, afin de configurer les différents backends. Nous supposer ceci:

  • Votre serveur Web écoute sur le port 8001
  • Le serveur hts écoute sur le port 8002
    Note: vous pourrez modifier la configuration de votre serveur Web à la fin, si vous souhaitez avoir un minimum de downtime.

Continue reading Tunnel SSH sur le port 80, utilisant le reverse proxy Varnish

facebooktwittergoogle_plusredditpinterestlinkedinmail

MyOnlineSSH: Mise à jour

Le service MyOnlineSSH a été mis à jour. Pour rappel, lors de mon précédent article sur MyOnlineSSH, je vous présentait ce service comme un client SSH Web: vous pouvez vous connecter sur un serveur SSH et utiliser votre navigateur comme terminal, ce qui est extrêmement pratique lorsque vous êtes à un endroit où vous pouvez pas utiliser le port 22 à l’exterieur de votre réseau, et que vous ne souhaitez pas mettre en place un tunnel HTTP par exemple.

Change-log

  • Le Flash Player n’est maintenant plus requis, seules des requêtes GET et POST sont envoyées.
  • Vous pouvez créer plusieurs terminaux simultanés
  • Rapidité beaucoup plus importante.

Si vous avez une quelconque suggestion ou question, n’hésitez pas à me contacter ou à laisser un commentaire sur cet article.

facebooktwittergoogle_plusredditpinterestlinkedinmail