Table des matières
Service paste.chapril.org
Introduction
Cette documentation explique comment installer un service, en l’occurrence le paste, sur une nouvelle machine virtuelle de l’infrastructure du Chapril. Ce service fait parti d'un ensemble de services du Chapril. Une partie de sa mise en place est donc similaire aux autres services. Même si l’ensemble de la procédure est traitée, c’est la partie plus spécifique à ce service qui sera la plus détaillée. Par exemple, la création d'une machine virtuelle renvoie sur une autre page et n’est pas détaillée ici. Cette documentation est technique mais se veut accessible avec de bonnes connaissances, notamment en ce qui concerne la ligne de commande.
Ce service est basé sur le logiciel Privatebin. Celui-ci est écrit en PHP et JS. Il est sous licence Zlib/libpng. Le logiciel inclue aussi des bibliothèques sous licences GNU GPLv2 (Rawinflate), BSD 3-clause (Showdown), MIT (base64.js version 1.7, Bootstrap, Identicon, random_compat, composer, kjua, base-x), Apache (prettify.js) and CC-BY (favicon, icon, logo).
Retrouvez la page de présentation du service sur le site www.chapril.org : www.chapril.org/-services-.html.
Site principal : privatebin.info
Source et téléchargement : github.com/PrivateBin/PrivateBin
Machine virtuelle Chapril pour ce service : lamp.cluster.chapril.org
Page principale du service paste Chapril: paste.chapril.org
Aspects techniques
Les données peuvent être stockées en SQL ou en fichier plat. Ici la solution retenue est le fichier plat.
Préparation
Création de la VM avec la procédure Création d'une machine virtuelle « bling ».
Création d'un utilisateur (non indispensable mais fait pour chapril).
useradd pastechaprilorg usermod -a -G www-data pastechaprilorg
Ajouter le module php7.0-gd
apt-get install php7.0-gd
Installation
Déploiement du code
cd /var/www/ wget https://github.com/PrivateBin/PrivateBin/archive/x.x.x.tar.gz tar xf x.x.x.tar.gz && rm x.x.x.tar.gz mv PrivateBin-x.x.x paste.chapril.org chown www-data:www-data -R /var/www/paste.chapril.org
Fichiers de logs
cd /var/log/apache2/ mkdir paste.chapril.org
Configuration d'apache2
Créer le fichier /etc/apache2/sites-avalailable/paste.chapril.org.conf
avec le contenu ci-dessous.
- /etc/apache2/sites-avalailable/paste.chapril.org.conf
<VirtualHost *:80> ServerName paste.chapril.org ServerAdmin webmaster@localhost DocumentRoot /var/www/paste.chapril.org/ php_admin_value open_basedir "/var/www/paste.chapril.org/" <Directory "/var/www/paste.chapril.org/"> AllowOverride All </Directory> ErrorLog ${APACHE_LOG_DIR}/paste.chapril.org/paste.chapril.org-error.log CustomLog ${APACHE_LOG_DIR}/paste.chapril.org/paste.chapril.org-access.log combined-proxy </VirtualHost>
Activation de la configuration
a2ensite paste.chapril.org.conf systemctl reload apache2
Configuration
cd /var/www/paste.chapril.org/cfg cp conf.sample.php conf.php Dans la section [traffic] du fichier conf.php dir = PATH "/var/www/paste.chapril.org/data" Dans la section [purge] du fichier conf.php dir = PATH "data" Dans la section [model_options] du fichier conf.php dir = PATH "data"
Création d’un répertoire pour les données et affectation des droits
cd /var/www/paste.chapril.org mkdir data chown www-data:www-data data chmod -R u+rwX /var/www/paste.chapril.org/data
Création d’un répertoire pour les versions et affectation des droits
cd /var/www/paste.chapril.org mkdir versions chown www-data:www-data versions chmod -R u+rwX /var/www/paste.chapril.org/versions
Rapport d’activité
Créer le répertoire rapport_activite
dans /srv/paste.chapril.org/tools
.
mkdir /srv/paste.chapril.org/tools mkdir /srv/paste.chapril.org/tools/rapport_activite
Copier dans ce répertoire le script rapport_activite.sh
1) et le rendre exécutable 2).
Puis créer la tâche cron en ajoutant un fichier pastechaprilorg
dans /etc/cron.d
avec la ligne suivante :
- /etc/cron.d/pastechaprilorg
1 0 1 * * root /srv/paste.chapril.org/tools/rapport_activite/rapport_activite.sh -p >> /srv/paste.chapril.org/Exploitation/rapport_paste.log 2>&1
Création d’un dossier de projet
Créer le répertoire /srv/paste.chapril.org/Exploitation
avec dedans un fichier rapport_paste.log
.
mkdir /srv/paste.chapril.org/Exploitation touch rapport_paste.log
Monitoring
Mettre dans le répertoire /usr/lib/nagios/plugins/
un fichier check_pastechaprilorg_update
et une copie dans /srv/paste.chapril.org/tools/monitoring/
.
function usage() { echo "Usage : $0" } # if [ "$#" -ne 0 ]; then usage else lastVersion=$(curl -s https://privatebin.info/|grep Current|cut -d' ' -f3|cut -d'<' -f1) currentVersion=$(cd /var/www/paste.chapril.org && git branch | grep '*'|cut -c 11-100 ) #echo $lastVersion #echo $currentVersion if [ $currentVersion = $lastVersion ]; then echo "OK" result=0 else echo "WARNING : new version available, current is $currentVersion, last is $lastVersion." result=1 fi fi exit $result
Modération
Modification de la configuration de base
Pour limiter le nombre de pad et éviter que des pastes restent indéfiniment on modifie le paramètre expiration
3) avec pour valeur par défaut un jour et un maximum d’une semaine (au lieu d’un temps illimité).
Édition du fichier de configuration :
vim /etc/chapril/chapril-paste.conf
- /etc/chapril/chapril-paste.conf
[expire] ; expire value that is selected per default ; make sure the value exists in [expire_options] # default = "1week" default = "1day" [expire_options] ; Set each one of these to the number of seconds in the expiration period, ; or 0 if it should never expire 5min = 300 10min = 600 1hour = 3600 1day = 86400 1week = 604800 ;1month = 2592000 ;1year = 31536000 ;never = 0
Supprimer des pastes en ligne de commande
Les fichiers contenant les pastes sont dans le répertoire /var/www/paste.chapril.org/data
.
Se placer dans le répertoire data/
et lister les fichiers de type fichier.
ls /var/www/paste.chapril.org/data/ find /var/www/paste.chapril.org/data/ -type f
Trouver les fichiers avec expire_date
dans les metadata :
find /var/www/paste.chapril.org/data -type f | tail -n 1000 | xargs -I{} grep expire_date
Commandes utiles
- Compter les pastes
find /var/www/paste.chapril.org/data -type f | wc -l
- Retrouver la date d’un paste avec la commande
date
à partie du timestamp, par exemple :
date -d@1736291828
En retour : mer. 08 janv. 2025 00:17:08 CET
.
- Trouver les tâches cron pour Paste :
rgrep paste /etc/cron*
Installation d’une mise à jour
Mise à jour de Paste
La mise à jour se passe en deux temps :
- Générer le livrable sous forme de tarball (la nouvelle version) sur le poste de travail de l’animsys, cela en utilisant Git, les dépôts de l'April et de Github ainsi qu’en suivant la procédure indiquée.
- Déployer cette tarball sur le serveur. On envoie la tarball par la commande
scp
ou on le récupère avecwget
. Puis on suit également la procédure indiquée.
Remarques :
- On doit aussi envoyer la nouvelle version à la forge April avec un étiquette contenant le mot chapril.
- Si on est deux et à distance, pour travailler on peut partager un screen : le premier utilisateur se connecte en faisant
screen -x
, le deuxième en faisantscreen
.
Générer le « livrable » en local
La première fois
mkdir -p ~/code/chapril/paste-chapril cd ~/code/chapril/paste-chapril/ git clone https://forge.april.org/Chapril/paste.chapril.org-privatebin.git . # ne pas oublier le "." ici git remote add upstream https://github.com/PrivateBin/PrivateBin.git git fetch --all
Les fois suivantes
cd ~/code/chapril/paste-chapril git fetch --all
Trouver le tag de la version qui nous intéresse. C’est probablement le dernier qui nous intéresse, donc on peut l'obtenir avec cette commande :
git tag --sort=v:refname | tail -n 1
Le tail -n 1
est optionnel, on pourrait aussi mettre tail -n 1
pour voir les cinq derniers.
Stockons le numéro de version qui nous intéresse dans une variable, ici la version 1.7.x
pour l'exemple :
export VERSION=1.7.x
Puis se mettre sur la branche paste-chapril
(git checkout
), mettre les deux sources gitub.com
et forge.april.org
ensemble en conservant les personnalisations de forge.april.org
(git rebase
). C'est alors qu'il faut résoudre les éventuels conflits.
cd ~/code/chapril/paste-chapril git checkout main-chapril git rebase ${VERSION?}
Une fois les conflits résolus, on vérifie si les commits Chapril sont présents. Pour cela, voir dans les dernières lignes si les trois commits de personnalisation sont présents.
git log --oneline -n 10
Maintenant on créé une étiquette (tag), puis une archive *.tar.gz
à partir de cette étiquette4) :
git tag ${VERSION?}-chapril git archive --prefix=paste-${VERSION?}-chapril/ -o /tmp/paste-${VERSION?}-chapril.tar.gz ${VERSION?}-chapril
On envoie la nouvelle version locale et l’étiquette vers la forge April avec la commande push
.
Des identifiants utilisateur de la forge April sont demandés.
git push origin # Pousser les changements vers la forge April git push --tags origin # Pousser le tag aussi vers la forge April
En cas d'erreur lors du git push origin :
Si on a un message d'erreur
! [rejected] main-chapril -> main-chapril (non-fast-forward) erreur : impossible de pousser des références vers 'https://forge.april.org/Chapril/paste.chapril.org-privatebin.git'
Il faut faire une tirage du dépôt distant vers le dépôt local
`git pull origin`
Tirage par fusion
`git config pull.rebase=false`
Editer chaque fichier en conflit
`git status`
Ecraser la dernière étiquette (tag)
`git tag -f $VERSION`
Pousser le dépôt local vers le dépôt distant
`git push –tags origin`
Déployer sur la VM Lamp la nouvelle version
Se connecter sur la Vm Lamp.
L’étiquette créé dans la précédente section donne lieu à la création d'une tarball téléchargeable sur la page des tags de la forge.
Stockons une fois de plus le numéro de version qui nous intéresse dans une variable, ici la version 1.7.
x
pour l'exemple :
export VERSION=1.7.x
On extrait alors dans un dossier dédié, dans lequel on doit recopier le fichier conf.php spécifique de Chapril (on ne le copie pas, on créé plutôt un lien symbolique parce qu'on aime créer du lien :) )
cd /var/www/paste.chapril.org/ wget -O versions/paste-${VERSION?}-chapril.tar.gz \ https://forge.april.org/Chapril/paste.chapril.org-privatebin/archive/${VERSION?}-chapril.tar.gz sudo -u www-data tar \ --one-top-level=versions/chapril-paste-${VERSION?} \ --strip-components=1 \ -xavf versions/paste-${VERSION?}-chapril.tar.gz cd versions/chapril-paste-${VERSION?}/cfg/ ln -s /etc/chapril/chapril-paste.conf conf.php
Remarque : Une méthode alternative existe pour la récupération de la tarball. Dans le cas où la commande wget
précédente ne marche pas, on peut envoyer le fichier de la machine locale vers la VM Lamp avec la commande suivante :
scp paste-${VERSION?}-chapril.tar.gz lamp.cluster.chapril.org:/var/www/paste.chapril.org/versions/
On peut maintenant faire la bascule, tout simplement en remplaçant le lien symbolique public_html pour qu’il pointe vers le nouveau dossier. Cela se fait avec la commande de suppression du lien symbolique actuel, puis création du lien symbolique vers la nouvelle version :
cd /var/www/paste.chapril.org/ rm -f public_html ; ln -s versions/chapril-paste-${VERSION?} public_html
On vérifie que l’application fonctionne toujours correctement en visitant paste.chapril.org.
Si besoin, on peut rapidement faire un retour arrière à la version précédente (version 1.7.x
ici), suppression du lien symbolique et création du lien symbolique vers la version précédente avec la commande suivante (remplacer x
par le numéro de la version à restaurer) :
rm -f public_html ; ln -s versions/chapril-paste-1.7.x public_html