https://forge.april.org/Chapril/paste.chapril.org-tools/src/branch/master/rapport_activite/rapport_activite.sh.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 partie 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 JavaScript.
Il est sous licence Zlib/libpng.
Le logiciel inclut 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) et CC-BY (favicon, icône et logotype).
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
Dépôt de l’April : forge.april.org/Chapril/paste.chapril.org-privatebin - forge.april.org/Chapril/paste.chapril.org-tools
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 le 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
Fichier de configuration
Il s'agit du fichier de configuration principal de l'application.
Par défaut il est à cet endroit : /var/www/paste.chapril.org/public_html/cfg/conf.php.
Pour nous, son emplacement est /etc/chapril/chapril-paste.conf, mais on y accède dans l'application par un lien symbolique :
ls -la /var/www/paste.chapril.org/public_html/cfg conf.php -> /etc/chapril/chapril-paste.conf
Configuration du fichier :
cp conf.sample.php conf.php
Dans la section [traffic] :
dir = PATH "/var/www/paste.chapril.org/data_spec/"
Dans la section [model_options] :
dir = PATH "/var/www/paste.chapril.org/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
Personnalisation
Favicon et logo
Les deux fichiers favicon du Chapril (favicon-16x16_chapril.png et favicon-32x32_chapril.png) sont à placer dans le dossier img/.
Mise en place d'un fichier de log
Celui-ci permet de voir l'activité plus facilement, on voit pour chaque accès si il y a une lecture (read) ou une création (create) d'un paste avec la date, l'heure et un identifiant.
Ce fichier se nomme paste.log et se trouve ici : /var/www/paste.chapril.org/.
Pour cela on ajoute une fonction dans le fichier suivant : /var/www/paste.chapril.org/public_html/lib/Data/Filesystem.php.
private function logToChapril($message, $id=null) { $today = date('Y-m-d H:i:s'); $texte_retour="$today $message \t$id\n"; return (bool) file_put_contents("/var/www/paste.chapril.org/paste.log",$texte_retour,FILE_APPEND|LOCK_EX);
Cette fonction est appelée à plusieurs endroits, lors d'une lecture ou d'une création d'un paste.
Texte sur la page d'accueil
Un texte pour le Chapril est affiché sur la page d'accueil.
On le trouve dans le fichier : /var/www/paste.chapril.org/public_html/i18n/fr.json.
PasteChaprilOrg est un pastebin (ou gestionnaire d'extraits de texte et de code source) minimaliste et libre, dans lequel le serveur n'a aucune connaissance des données envoyées.
Les données sont chiffrées ou déchiffrées dans le navigateur par un chiffrement AES 256 bits.
Plus d'informations sur la page du projet.
Rapport d’activité
Ce rapport permet de voir l'activité du service avec différentes informations. Il est généré chaque mois :
- Nombre total de requêtes http
- Nombre de vraies requêtes http
- Nombre de requêtes bot
- Nombre de requêtes http en erreur
- Nombre de pastes créés ce mois
- Nombre de pastes supprimés ce mois
- Nombre de commentaires ce mois
- Nombre de lectures ce mois
- Nombre de lectures ce mois - les commentaires
- Nombre de pastes dans la base actuellement
- Taille totale de la base des pastes
- Nombre d'ipv4 ayant visité le service
- Nombre d'ipv6 ayant visité le service
- Nombre total d'ip ayant visité le service
- Nombre d'ipv4 utilisatrices du service
- Nombre d'ipv6 utilisatrices du service
- Nombre total d'ip utilisatrices du service
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.sh1) et le rendre exécutable2).
Puis créer la tâche Cron en ajoutant un fichier pastechaprilorg dans /etc/cron.d/ avec les lignes suivantes :
- /etc/cron.d/pastechaprilorg
6 0 1 * * root /srv/paste.chapril.org/tools/rapport_activite/rapport_activite.sh -p >> /srv/paste.chapril.org/Exploitation/rapport_paste.log 2>&1 20 0 1 * * root /srv/paste.chapril.org/tools/rapport_activite/update_redmine_ticket.sh >> /var/log/paste_stats.log
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
Maintenance du fichier chapril.log
Pour nettoyer chaque année le fichier paste.log, voici une solution :
cd /var/www/paste.chapril.org/ cat paste.log |grep 2024- > paste_2024.log cat paste.log |grep 2025- > paste_2025.log cat paste_2025.log >> paste.log
On ne garde que l'année en cours dans le fichier paste.log.
Mise en place de rotation du fichier log :
cd /etc/logrotate.d/ vim paste
Contenu du fichier paste :
/var/www/paste.chapril.org/paste.log {
monthly
rotate 12
compress
delaycompress
missingok
notifempty
create 644 root root
}
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 expiration3) 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 métadonnées :
find /var/www/paste.chapril.org/data -type f | tail -n 1000 | xargs -I{} grep expire_date
Nettoyage 4) :
# Compter les fichiers qui ont la metadonnée "expire_date" et qui ont une date d'expiration définie # rgrep expire_date ./ |wc -l # Compter les fichiers qui n'ont pas la metadonnée "expire_date" et qui donc n'ont pas d'expiration rgrep -L expire_date ./ |wc -l # Supprimer (xarg rm) les fichiers sans date d'expiration rgrep -L expire_date ./ |xargs rm # Compter les fichiers modifiés il y a plus de 60 jours find ./ -type f -mtime +60 | wc -l # Supprimer (option -delete) les fichiers modifiés il y a plus de 60 jours find ./ -type f -mtime +60 -delete
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 à partir 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*
Surveillance de l'activité du serveur avec goaccess.
Configuration en décommentant les différents formats souhaités :
vim /etc/goaccess/goaccess.conf
Utilisation :
cd /var/log/apache2/paste.chapril.org/ tail -fn 20 paste.chapril.org-access.log | goaccess
Utilisation alternative :
cd /var/log/apache2/paste.chapril.org/ goaccess paste.chapril.org-access.log
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’animsys5) ;
- Déployer cette tarball sur le serveur6).
chapril.
screen -x, le deuxième en faisant screen.
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 git pull --rebase
Trouver l’étiquette 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.
edit, git add et git rebase –continue).
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 étiquette7) :
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 utilisateurs 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
Éditer chaque fichier en conflit :
git status
Écraser 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 <code> ==== 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 [[https://forge.april.org/Chapril/paste.chapril.org-privatebin/tags|page des étiquettes du dépôt]]. 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 : <code bash> export VERSION=1.7.x
On extrait alors dans un dossier dédié, dans lequel on doit recopier le fichier conf.php spécifique au Chapril 8).
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
Il faut remettre le lien symbolique vers le fichier de configuration /etc/chapril/chapril-paste.conf.
cd versions/chapril-paste-${VERSION?}/cfg/ ln -s /etc/chapril/chapril-paste.conf conf.php
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 répertoire.
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
scp ou on le récupère avec wget puis on suit également la procédure indiquée.