« Installer un serveur linux » : différence entre les versions
Aucun résumé des modifications |
|||
| (31 versions intermédiaires par le même utilisateur non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
Notes pour l'installation d'un serveur linux dédié à pmb | Notes pour l'installation d'un serveur linux dédié à pmb | ||
== Installation du serveur == | == Installation du serveur == | ||
* Remplacer les numéros de version php, pmb et le serveur par celles concernées. | |||
* La partie "old-release" n'est à utiliser (et à adapter à la version idoine) que s'il y a incompatibilité entre la dernière version de php et pmb. | |||
* Notes obsolètes : | |||
{{Replier|Pour une version antérieure}} | |||
* La version de pmb compatible avec php7 est annoncée début 2018. | * La version de pmb compatible avec php7 est annoncée début 2018. | ||
* Une version "niglybuild" est disponible sur leur forge. En attendant une version officielle, j'ai installé pmb5 sur un serveur Ubuntu17 avec apache2, MariaDB10 et php5.6 /Fail2ban et UrBackup. Pour permettre aux élèves d'accéder à l'opac, j'ai importé leurs identifiants et mdp par csv. | * Une version "niglybuild" est disponible sur leur forge. En attendant une version officielle, j'ai installé pmb5 sur un serveur Ubuntu17 avec apache2, MariaDB10 et php5.6 /Fail2ban et UrBackup. | ||
* Pour permettre aux élèves d'accéder à l'opac, j'ai importé leurs identifiants et mdp par csv. | |||
https://linuxhint.com/install-php5-ubuntu/ | https://linuxhint.com/install-php5-ubuntu/ | ||
Télécharger ubuntu serveur i386 | Télécharger ubuntu serveur i386 (fait pour pallier une incompatibilité matérielle) | ||
http://old-releases.ubuntu.com/releases/17.10/ubuntu-17.10-server-i386.iso | http://old-releases.ubuntu.com/releases/17.10/ubuntu-17.10-server-i386.iso | ||
{{Replier fin}} | |||
Télécharger une image d'installation du système choisi (Ubuntu et variantes, Ubuntu server,...) | |||
Préparer une clé d'installation : | Préparer une clé d'installation : | ||
https://sourceforge.net/projects/win32diskimager/ | https://sourceforge.net/projects/win32diskimager/ | ||
Démarrer sur la clé usb | Démarrer sur la clé usb et installer le système. | ||
Ne pas indiquer de proxy, le faire à la main par la suite si nécessaire<br> | Ne pas indiquer de proxy, le faire à la main par la suite si nécessaire<br> | ||
(pour apt, éditer ou créer le fichier /etc/apt/apt.conf -> Acquire::http::proxy "http://adresse:port/";) | (pour apt, éditer ou créer le fichier /etc/apt/apt.conf -> Acquire::http::proxy "http://adresse:port/";) | ||
{{Replier|Notes ligne de commande}} | |||
Pour passer en root : | Pour passer en root : | ||
# sudo -i | # sudo -i | ||
| Ligne 25 : | Ligne 31 : | ||
Vérifier la présence d'un paquet : | Vérifier la présence d'un paquet : | ||
# dpkg -l |grep nomDuPaquet (ii si installé) | # dpkg -l |grep nomDuPaquet (ii si installé) | ||
{{Replier fin}} | |||
==== Configuration du clavier (si nécessaire) ==== | |||
# loadkeys fr | # loadkeys fr | ||
# dpkg-reconfigure keyboard-configuration | # dpkg-reconfigure keyboard-configuration | ||
==== vim ==== | |||
# apt-get install vim | # apt-get install vim | ||
Fichier de config : /etc/vim/vimrc | Fichier de config : /etc/vim/vimrc | ||
==== Outils réseau ==== | |||
(si absents lors de l'instal du serveur :) | (si absents lors de l'instal du serveur :) | ||
# apt-get install net-tools | # apt-get install net-tools | ||
==== Configurer la carte réseau ==== | |||
(ou laisser en dhcp et fixer l'adresse à partir du routeur) | (ou laisser en dhcp et fixer l'adresse à partir du routeur) | ||
# vim /etc/network/interfaces | # vim /etc/network/interfaces | ||
| Ligne 47 : | Ligne 52 : | ||
# service networking restart | # service networking restart | ||
==== Serveur ssh ==== | |||
# apt-install openssh-server | # apt-install openssh-server | ||
Configuration : /etc/ssh/sshd_config<br> | Configuration : /etc/ssh/sshd_config<br> | ||
| Ligne 55 : | Ligne 60 : | ||
# ssh (utilisateur)@(adresse_ip) -p (numport) | # ssh (utilisateur)@(adresse_ip) -p (numport) | ||
===== Serveur ftp | ===== Authentification ssh par clé privée ===== | ||
Pour permettre la connexion au serveur depuis une machine identifiée sans avoir à saisir le mot de passe on peut utiliser le mécanisme de la paire clé publique/clé privée. Voir [https://www.remipoignon.fr/authentification-ssh-par-cle-privee/ ici] ou [https://qastack.fr/server/241588/how-to-automate-ssh-login-with-password là]. | |||
On peut ensuite créer un lanceur sur le bureau : | |||
ssh [utilisateur]@[adresse_serveur] | |||
==== Serveur ftp ==== | |||
# apt-get install vsftpd | # apt-get install vsftpd | ||
Configuration : /etc/vsftpd.conf | Configuration : /etc/vsftpd.conf | ||
| Ligne 63 : | Ligne 75 : | ||
# /etc/init.d/vsftp restart | # /etc/init.d/vsftp restart | ||
=== Installation de LAMP | ==== Logiciel de décompression ==== | ||
# apt-get install zip | |||
== Installation de LAMP == | |||
apache - Php - MariaDB | apache - Php - MariaDB | ||
=== | === Installation mariadb === | ||
# apt-get install mariadb-server mariadb-client | # apt-get install mariadb-server mariadb-client | ||
==== Pour les versions obsolètes de php ==== | ==== Pour les versions obsolètes de php ==== | ||
La version de php doit être conforme à celle requise dans pmb. Il faut parfois avoir recours à une version obsolète de php, bien que cela ne soit pas recommandé. Une version de php non conforme provoquera des erreurs lors de l'utilisation de pmb. Le numéro de version de pmb doit correspondre au numéro de version de php (pour les unités). | |||
Ajout du dépôt | Ajout du dépôt | ||
# apt install software-properties-common | # apt install software-properties-common | ||
| Ligne 75 : | Ligne 91 : | ||
# apt-get update | # apt-get update | ||
support php5.6 (mbstring pour phpmyadmin, xsl pour pmb) : | support php5.6 (mbstring pour phpmyadmin, xsl pour pmb 5...) : | ||
# apt-get install php5.6 php5.6-mysql php5.6-mbstring php5.6-xsl | # apt-get install php5.6 php5.6-mysql php5.6-mbstring php5.6-xsl | ||
| Ligne 114 : | Ligne 130 : | ||
== Installation de pmb == | == Installation de pmb == | ||
Voir : https://doc.ubuntu-fr.org/pmb | Voir : https://doc.ubuntu-fr.org/pmb<br> | ||
Pour les pré-requis : https://www.sigb.net//ajax.php?module=cms&categ=document&action=render&id=68 | |||
=== Installation de yaz (recherche externe des notices) === | === Installation de yaz (recherche externe des notices) === | ||
| Ligne 138 : | Ligne 155 : | ||
# echo "<?php phpinfo(); ?>" >> /var/www/html/phpinfo.php | # echo "<?php phpinfo(); ?>" >> /var/www/html/phpinfo.php | ||
* Pour vérifier l'activation des extensions, on passe par un navigateur | |||
http://(adresse_serveur)/pmb/phpinfo.php | <nowiki>http://(adresse_serveur)/pmb/phpinfo.php</nowiki> | ||
* En se référant aux pré-requis, installer et les extensions nécessaires au fonctionnement de pmb | |||
=== Installer pmb === | === Installer pmb === | ||
| Ligne 251 : | Ligne 267 : | ||
doc à : https://wiki.debian-fr.xyz/Fail2ban#fail2ban.conf | doc à : https://wiki.debian-fr.xyz/Fail2ban#fail2ban.conf | ||
# apt-get install fail2ban | # apt-get install fail2ban | ||
Configurer pour filtrer ftp (ssh configuré par défaut) : voir doc | Configurer pour filtrer ftp (ssh configuré par défaut) : voir doc<br> | ||
Dans /etc/fail2ban/jail.conf > | Dans /etc/fail2ban/jail.conf ><br> | ||
bantime = 604800 (1 semaine) | bantime = 604800 (1 semaine) | ||
=== Installation de certbot === | === Installation de certbot === | ||
pour les certificats let's encrypt (accès HTTPS)<br> | |||
Voir : https://certbot.eff.org/lets-encrypt/ubuntufocal-apache | Voir : https://certbot.eff.org/lets-encrypt/ubuntufocal-apache | ||
=== Automatiser la sauvegardes des bases de données === | === Automatiser la sauvegardes des bases de données === | ||
en root | en root : | ||
Créer le dossier /root/scripts | Créer le dossier /root/scripts | ||
# mkdir /root/scripts | # mkdir /root/scripts | ||
Copier le script dans /root/scripts/sav_bdd.sh (sauvegarde toutes les bdd hors celles listées dans databases_exclude list) : | |||
get_databases_to_backup() { | #!/bin/bash | ||
# Script de sauvegarde des bases de données mysql/mariadb | |||
# Les valeurs à paramétrer sont en fin de script dans la fonction main() | |||
get_databases_to_backup() { | |||
mysql_command=$(command -v mysql) | |||
databases_list=$($mysql_command --defaults-file=/etc/mysql/debian.cnf -Bse 'show databases') | |||
for exclude in $databases_exclude_list | |||
do | |||
databases_list=${databases_list//$exclude/} | |||
done | |||
#databases_list="pmb_bosquets" | |||
} | |||
dump_databases() { | |||
ext=".sql.gz" | |||
mysqldump_command=$(command -v mysqldump) | |||
compress_command=$(command -v gzip) | |||
current_date=$(date +%F_%Hh%M) | |||
cd "${backup_folder}" || exit | |||
for database in $databases_list | |||
do | |||
$mysqldump_command --defaults-file=/etc/mysql/debian.cnf "$database" | ${compress_command} > | |||
${database}"_"${current_date}${ext} | |||
echo "Sauvegarde de la base (ou des bases) : ${database}…" | |||
done | |||
echo "$(date +%c): Sauvegarde complete effectuée !" | |||
} | |||
delete_old_backups() { | |||
find_command=$(command -v find) | |||
cd "${backup_folder}" || exit | |||
$find_command ./ -mtime +"${delete_backups_older_than_days}" -type f -exec rm -v {} \; | |||
} | |||
main() { | |||
# toujours exclure information_schema performance_schema de la sauvegarde sinon le script générera des erreurs | |||
databases_exclude_list="mysql phpmyadmin information_schema performance_schema" | |||
# choix du dossier de destination des sauvegardes à ajuster à vos besoins | |||
backup_folder="/media/sf_PartageVM/sav_pmb" | |||
if [ ! -d "$backup_folder" ] ; then | |||
mkdir -p "$backup_folder" | |||
fi | |||
get_databases_to_backup | |||
dump_databases | |||
# nombre de jours pendant lesquels il faut conserver les sauvegardes, -1 si illimité | |||
delete_backups_older_than_days=30 | |||
if [ $delete_backups_older_than_days != "-1" ] ; then | |||
delete_old_backups | |||
fi | |||
} | |||
main | |||
Rendre le fichier lisible/modifiable/executable pour root uniquement : | Rendre le fichier lisible/modifiable/executable pour root uniquement : | ||
# chmod 700 /root/scripts/sav_bdd.sh | # chmod 700 /root/scripts/sav_bdd.sh | ||
Automatiser l'execution tous les mercredis et dimanches à 3h00 du matin : | Automatiser l'execution tous les mercredis et dimanches à 3h00 du matin : | ||
Editer crontab : | |||
# crontab -e | # crontab -e | ||
Ajouter la ligne : (lance le script et envoie la sortie dans sav.log : créer le fichier et adapter le chemin) | |||
0 3 * * wed,sun /root/scripts/sav_bdd.sh >> /media/sf_PartageVM/sav_pmb/log/sav.log | 0 3 * * wed,sun /root/scripts/sav_bdd.sh >> /media/sf_PartageVM/sav_pmb/log/sav.log | ||
Enregistrer puis relancer le service : | |||
# systemctl restart cron | # systemctl restart cron | ||
Pour lister les tâches : | Pour lister les tâches : | ||
# crontab -l | # crontab -l | ||
Pour tester le fonctionnement, on | Pour tester le fonctionnement, on peut ajouter une ligne pour exécuter la tâche dans les minutes qui suivent. La supprimer par la suite. | ||
=== Mises à jour de sécurité automatiques === | === Mises à jour de sécurité automatiques === | ||
voir : https://geekeries.org/2016/04/mises-a-jour-automatiques-de-debian/?cn-reloaded=1 | voir : https://geekeries.org/2016/04/mises-a-jour-automatiques-de-debian/?cn-reloaded=1<br> | ||
et surtout : https://wiki.deimos.fr/Cron-apt_:_Installation_des_mises_%C3%A0_jour_de_s%C3%A9curit%C3%A9_automatique.html | et surtout : https://wiki.deimos.fr/Cron-apt_:_Installation_des_mises_%C3%A0_jour_de_s%C3%A9curit%C3%A9_automatique.html | ||
Installer cron-apt | Installer cron-apt | ||
Créer le fichier /etc/cron-apt/action.d/5-security et y coller le contenu | Créer le fichier /etc/cron-apt/action.d/5-security et y coller le contenu : | ||
upgrade -y -o APT::Get::Show-Upgraded=true | upgrade -y -o APT::Get::Show-Upgraded=true | ||
# Ajouter l'option "-d" pour télécharger uniquement - | # Ajouter l'option "-d" pour télécharger uniquement - utile pour les tests | ||
éditer /etc/apt/sources.list | éditer /etc/apt/sources.list | ||
Copier les lignes contenant 'security' | Copier les lignes contenant 'security' | ||
deb http://fr.archive.ubuntu.com/ubuntu focal-security main restricted | deb http://fr.archive.ubuntu.com/ubuntu focal-security main restricted | ||
# deb-src http://fr.archive.ubuntu.com/ubuntu focal-security main restricted | # deb-src http://fr.archive.ubuntu.com/ubuntu focal-security main restricted | ||
deb http://fr.archive.ubuntu.com/ubuntu focal-security universe | deb http://fr.archive.ubuntu.com/ubuntu focal-security universe | ||
# deb-src http://fr.archive.ubuntu.com/ubuntu focal-security universe | # deb-src http://fr.archive.ubuntu.com/ubuntu focal-security universe | ||
deb http://fr.archive.ubuntu.com/ubuntu focal-security multiverse | deb http://fr.archive.ubuntu.com/ubuntu focal-security multiverse | ||
# deb-src http://fr.archive.ubuntu.com/ubuntu focal-security multiverse | # deb-src http://fr.archive.ubuntu.com/ubuntu focal-security multiverse | ||
et les placer dans un nouveau fichier /etc/apt/sources.list.d/security.list. | et les placer dans un nouveau fichier /etc/apt/sources.list.d/security.list. | ||
| Ligne 367 : | Ligne 384 : | ||
Automatiser la mise à jour -> créer le fichier /etc/cron-apt/config.d/5-security et y coller le contenu | Automatiser la mise à jour -> créer le fichier /etc/cron-apt/config.d/5-security et y coller le contenu | ||
OPTIONS="-o quiet=1 -o APT::Get::List-Cleanup=false -o Dir::Etc::SourceList=/etc/apt/sources.list.d/security.list -o Dir::Etc::SourceParts=\"/dev/null\"" | OPTIONS="-o quiet=1 -o APT::Get::List-Cleanup=false -o | ||
Dir::Etc::SourceList=/etc/apt/sources.list.d/security.list -o Dir::Etc::SourceParts=\"/dev/null\"" | |||
Vérifier le fonctionnement : | Vérifier le fonctionnement : | ||
* Forcer l'exécution : # cron-apt | |||
* Vérifier : # cat /var/log/cron-apt/log | |||
* à comparer avec : # #apt list upgradable | |||
Automatiser les mises à jour : | Automatiser les mises à jour : | ||
Editer le fichier /etc/cron.d/cron-apt et vérifier la présence des lignes | Editer le fichier /etc/cron.d/cron-apt et vérifier la présence des lignes | ||
# Every night at 4 o'clock. | # Every night at 4 o'clock. | ||
0 4 * * * root test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt | 0 4 * * * root test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt | ||
(ou les modifier pour changer les paramètres) | (ou les modifier pour changer les paramètres) | ||
=== Installation d'urbackup === | === Installation d'urbackup === | ||
(sauvegarde automatique de type client-serveur : ici on installe les 2 sur la même machine physique) | '''Non fait sur la version d'août 2021 :''' procédure rendue superflue par l'emploi d'une sauvegarde du serveur virtuel complet dans un cloud par client de synchronisation (qui concerne également la sauvegarde de la base de donnée par script, automatisée par une tâche cron le dimanche et le mercredi à 3h du matin). | ||
(sauvegarde automatique de type client-serveur : ici on installe les 2 sur la même machine physique)<br> | |||
doc à : https://www.urbackup.org/index.html | doc à : https://www.urbackup.org/index.html | ||
Préparer le chemin de sauvegarde : | Préparer le chemin de sauvegarde : | ||
# mkdir /var/sauvegarde (ou /mnt/sauvegarde, ou autre...) | # mkdir /var/sauvegarde (ou /mnt/sauvegarde, ou autre...) | ||
Peut servir de point de montage pour un HD externe... | Peut servir de point de montage pour un HD externe... | ||
Ajout du dépôt et de la clé : | |||
# echo 'deb http://download.opensuse.org/repositories/home:/uroni/Debian_9.0/ /' > /etc/apt/sources.list.d/urbackup-server.list | # echo 'deb http://download.opensuse.org/repositories/home:/uroni/Debian_9.0/ /' > /etc/apt/sources.list.d/urbackup-server.list | ||
# wget -nv https://download.opensuse.org/repositories/home:uroni/Debian_9.0/Release.key -O Release.key | # wget -nv https://download.opensuse.org/repositories/home:uroni/Debian_9.0/Release.key -O Release.key | ||
# apt-key add - < Release.key | # apt-key add - < Release.key | ||
==== Installation de la partie serveur ==== | |||
# apt-get update | # apt-get update | ||
# apt-get install urbackup-server | # apt-get install urbackup-server | ||
Le serveur est accessible à l'adresse : http://( | Le serveur est accessible à l'adresse : http://(adresse_du_serveur):55414 | ||
Réglages > Utilisateur | Réglages > Utilisateur | ||
Ajouter un utilisateur administrateur pour limiter les accès | Ajouter un utilisateur administrateur pour limiter les accès | ||
==== Installation de la partie client ==== | |||
# TF=`mktemp` && wget "https://hndl.urbackup.org/Client/2.1.17/UrBackup%20Client%20Linux%202.1.17.sh" -O $TF && sh $TF; rm $TF | # TF=`mktemp` && wget "https://hndl.urbackup.org/Client/2.1.17/UrBackup%20Client%20Linux%202.1.17.sh" -O $TF && sh $TF; rm $TF | ||
(snapshot mechanism = pas LVM ici) | (snapshot mechanism = pas LVM ici) | ||
Le client est visible immédiatement dans la console de gestion. (Etats : rafraîchir l'affichage) | Le client est visible immédiatement dans la console de gestion. (Etats : rafraîchir l'affichage) | ||
==== Configuration de la sauvegarde de la base de données ==== | |||
Dans /usr/local/etc/urbackup/mariadbdump.conf, mettre | Dans /usr/local/etc/urbackup/mariadbdump.conf, mettre | ||
MARIA_DUMP_ENABLED=1 | MARIA_DUMP_ENABLED=1 | ||
==== Modification du script pour ne sauver que la base pmb (vérifier la pérénité lors d'une mise à jour...) ==== | |||
dans /usr/local/share/urbackup/scripts/mariadbdump : changer | dans /usr/local/share/urbackup/scripts/mariadbdump : changer | ||
--all-databses -> pmb (ou nom de la base de données) | --all-databses -> pmb (ou nom de la base de données) | ||
==== Configuration retenue (enregistrer avant de changer d'onglet) ==== | |||
Réglages > Général | |||
Serveur | |||
Désactiver la sauvegarde d'image disque coché | Désactiver la sauvegarde d'image disque coché | ||
Le reste par défaut | Le reste par défaut | ||
Sauvegarde de fichiers (à adapter à l'usage) : | |||
Intervalle pour la sauvegarde incrémentale de fichers : 72 | Intervalle pour la sauvegarde incrémentale de fichers : 72 | ||
...complète : 30 | ...complète : 30 | ||
Nbre max de sauvegardes de fichiers incrémentielles : 30 | Nbre max de sauvegardes de fichiers incrémentielles : 30 | ||
Nbre min... 10 | Nbre min... 10 | ||
Nbre max de sauvegarde de fichers complètes : 3 | Nbre max de sauvegarde de fichers complètes : 3 | ||
Nmbre min... 2 | Nmbre min... 2 | ||
Répertoires par défaut à sauvegarder : /var/www/html/pmb/opac_css | Répertoires par défaut à sauvegarder : /var/www/html/pmb/opac_css | ||
Seule l'appli pmb nous intéresse ici | |||
Sauvegarde de Volume : | Sauvegarde de Volume : | ||
Intervalle pour les images système Désactiver | Intervalle pour les images système Désactiver | ||
Intervalle pour la sauvegarde image complète Désactiver | Intervalle pour la sauvegarde image complète Désactiver | ||
Droits : par défaut | Droits : par défaut | ||
Client : | Client : | ||
Intervalle de sauvegarde : -> plus de détails | Intervalle de sauvegarde : -> plus de détails | ||
...incrémentielles de fichiers : 1-7/3-4 (tous les jours de 3h à 4h) | ...incrémentielles de fichiers : 1-7/3-4 (tous les jours de 3h à 4h) | ||
...complètes de fichiers : 6-7/3-4 (sa-di, de 3h à 4h) | ...complètes de fichiers : 6-7/3-4 (sa-di, de 3h à 4h) | ||
Le reste par défaut | Le reste par défaut | ||
| Ligne 444 : | Ligne 466 : | ||
Réglages > Email (paramétrage à revoir) | Réglages > Email (paramétrage à revoir) | ||
==== Lancer une sauvegarde complète ==== | |||
Lancer une sauvegarde complète | |||
Etats > | Etats > | ||
Menu déroulant sous le client -> Sauvegarde complète | Menu déroulant sous le client -> Sauvegarde complète<br> | ||
Suivre la progression dans Activités | Suivre la progression dans Activités<br> | ||
Vérifier la sauvegarde dans /var/sauvegarde | Vérifier la sauvegarde dans /var/sauvegarde<br> | ||
Suivre la progression : journaux (ouvre un nouvel onglet) : | Suivre la progression : journaux (ouvre un nouvel onglet) :<br> | ||
Warning : Missing checksum for script ouput for command "mariadbdump.sql" -> normal, le script a été modifié... | Warning : Missing checksum for script ouput for command "mariadbdump.sql" -> normal, le script a été modifié...<br> | ||
203Mo en 3 min | 203Mo en 3 min<br> | ||
Pour naviguer dans la sauvegarde / télécharger : Menu Sauvegardes | Pour naviguer dans la sauvegarde / télécharger : Menu Sauvegardes | ||
== Résolution de problèmes == | |||
=== <font color=blue>Erreur lors de l'enregistrement des emprunts</font> === | |||
Les enregistrements en ligne affichent une erreur mysql (incorrect integer value…), les enregistrement via l'automate de prêt restent muets.<br> | |||
==== En ligne de commande : ==== | |||
~# mysql | |||
MariaDB [(none)]> select @@sql_mode; (affiche le mode en cours) | |||
(MariaDB [(none)]> set global sql_mode='';) | |||
MariaDB [(none)]> set sql_mode=''; | |||
MariaDB [(none)]> quit; | |||
==== Autre solution via phpMyAdmin : ==== | |||
* Se connecter à phpmyadmin | |||
* Menu : Plus > Variables | |||
* Rechercher sql mode | |||
* Éditer et effacer les valeurs ; enregistrer | |||
''Il semblerait qu'il faille refaire la procédure lors des mises à jour.''<br> | |||
<br> | |||
==== Autre solution : modifier my.cnf (''solution retenue'') : ==== | |||
Éditer le fichier :etc/mysql/my.cnf (en mode su) | |||
# nano /etc/mysql/my.cnf | |||
Ajouter les lignes : | |||
[mysqld] | |||
sql_mode="" | |||
Enregistrer. | |||
Relancer le service : | |||
# service mysql restart | |||
Pour vérifier le contenu du paramètre : | |||
# mysql -e "select @@sql_mode;" | |||
Dernière version du 10 avril 2022 à 14:10
Notes pour l'installation d'un serveur linux dédié à pmb
Installation du serveur
* Remplacer les numéros de version php, pmb et le serveur par celles concernées. * La partie "old-release" n'est à utiliser (et à adapter à la version idoine) que s'il y a incompatibilité entre la dernière version de php et pmb.
- Notes obsolètes :
| Pour une version antérieure |
|---|
* La version de pmb compatible avec php7 est annoncée début 2018. * Une version "niglybuild" est disponible sur leur forge. En attendant une version officielle, j'ai installé pmb5 sur un serveur Ubuntu17 avec apache2, MariaDB10 et php5.6 /Fail2ban et UrBackup. * Pour permettre aux élèves d'accéder à l'opac, j'ai importé leurs identifiants et mdp par csv. https://linuxhint.com/install-php5-ubuntu/ Télécharger ubuntu serveur i386 (fait pour pallier une incompatibilité matérielle) http://old-releases.ubuntu.com/releases/17.10/ubuntu-17.10-server-i386.iso |
Télécharger une image d'installation du système choisi (Ubuntu et variantes, Ubuntu server,...)
Préparer une clé d'installation : https://sourceforge.net/projects/win32diskimager/
Démarrer sur la clé usb et installer le système.
Ne pas indiquer de proxy, le faire à la main par la suite si nécessaire
(pour apt, éditer ou créer le fichier /etc/apt/apt.conf -> Acquire::http::proxy "http://adresse:port/";)
| Notes ligne de commande |
|---|
|
Pour passer en root : # sudo -i Vérifier la présence d'un paquet : # dpkg -l |grep nomDuPaquet (ii si installé) |
Configuration du clavier (si nécessaire)
# loadkeys fr # dpkg-reconfigure keyboard-configuration
vim
# apt-get install vim
Fichier de config : /etc/vim/vimrc
Outils réseau
(si absents lors de l'instal du serveur :)
# apt-get install net-tools
Configurer la carte réseau
(ou laisser en dhcp et fixer l'adresse à partir du routeur)
# vim /etc/network/interfaces
terminer par les serveurs de dns (si nécessaire) : dns-nameserver 8.8.8.8 8.8.4.4
# service networking restart
Serveur ssh
# apt-install openssh-server
Configuration : /etc/ssh/sshd_config
Renseigner le port d'écoute
Configurer le routeur (NAT)
Se connecter à une machine distante et tester l'accès par ssh :
# ssh (utilisateur)@(adresse_ip) -p (numport)
Authentification ssh par clé privée
Pour permettre la connexion au serveur depuis une machine identifiée sans avoir à saisir le mot de passe on peut utiliser le mécanisme de la paire clé publique/clé privée. Voir ici ou là.
On peut ensuite créer un lanceur sur le bureau :
ssh [utilisateur]@[adresse_serveur]
Serveur ftp
# apt-get install vsftpd
Configuration : /etc/vsftpd.conf
anonymous_enable=NO write_enable=YES
# /etc/init.d/vsftp restart
Logiciel de décompression
# apt-get install zip
Installation de LAMP
apache - Php - MariaDB
Installation mariadb
# apt-get install mariadb-server mariadb-client
Pour les versions obsolètes de php
La version de php doit être conforme à celle requise dans pmb. Il faut parfois avoir recours à une version obsolète de php, bien que cela ne soit pas recommandé. Une version de php non conforme provoquera des erreurs lors de l'utilisation de pmb. Le numéro de version de pmb doit correspondre au numéro de version de php (pour les unités). Ajout du dépôt
# apt install software-properties-common # add-apt-repository ppa:ondrej/php # apt-get update
support php5.6 (mbstring pour phpmyadmin, xsl pour pmb 5...) :
# apt-get install php5.6 php5.6-mysql php5.6-mbstring php5.6-xsl
Définir le mot de passe root
# service mysql start
A ce stade, on peut entrer en tapant #mysql
# mysql_secure_installation
permet aussi de redéfinir le mot de passe root en cas d'oubli
# service apache2 start
A ce stade, la page d'info Apache est visible dans le navigateur
Paramétrer mysqldump
# vim /etc/mysql/conf.d/mysqldump.cnf
Modifier la ligne :
max_allowed_packet = 256M
Installation de phpMyAdmin
# apt-get install phpmyadmin
Rendre phpmyadmin accessible
Dans /etc/apache2/apache2.conf, ajouter à la fin : Include /etc/phpmyadmin/apache.conf
# echo "Include /etc/phpmyadmin/apache.conf" >> /etc/apache2/apache2.conf # service apache2 restart
Ajout d'un utilisateur mysql
(remplacer login_util et pass_util par des valeurs au choix) # mysql
CREATE USER 'login_util'@'%' IDENTIFIED BY 'pass_util'; GRANT ALL PRIVILEGES ON *.* TO 'login_util'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;
(Ctrl-d pour sortir)
A ce stade, il doit être possible de se connecter à phpmyadmin
Installation de pmb
Voir : https://doc.ubuntu-fr.org/pmb
Pour les pré-requis : https://www.sigb.net//ajax.php?module=cms&categ=document&action=render&id=68
Installation de yaz (recherche externe des notices)
# apt-get install yaz # apt-get install libyaz5-dev php5.6-dev # pecl install yaz
Activer l'extension yaz
# vim /etc/php/5.6/apache2/php.ini
Sous [PHP], ajouter
extension=yaz.so
Enregistrer, puis :
# service apache2 reload
Créer un fichier php pour l'affichage des infos
# vim /var/www/html/pmb/php-info.php
Recopier les lignes :
<?php
phpinfo();
?>
ou
# echo "<?php phpinfo(); ?>" >> /var/www/html/phpinfo.php
- Pour vérifier l'activation des extensions, on passe par un navigateur
http://(adresse_serveur)/pmb/phpinfo.php
- En se référant aux pré-requis, installer et les extensions nécessaires au fonctionnement de pmb
Installer pmb
Copie de la dernière version de pmb dans le dossier /tmp/ Décompression de l'archive dans /var/www/html :
# unzip /tmp/pmb5.0.3.zip -d /var/www/html/
Modifier le propriétaire et le groupe, changer les droits :
# chown -R www-data:www-data /var/www/html/pmb # chmod -R 770 /var/www/html/pmb
Supprimer le fichier zip :
# rm /tmp/pmb5.0.3.zip
Configurer le routeur pour l'accès extérieur (NAT port 80)
Suivre la procédure d'installation de pmb (http://adresse_serveur/pmb/tables/install.php)
Facultatif : pour migrer à partir de l'amonecole
Importer les données
Sur l'amonecole : (si necessaire, redéfinir le mdp root : # mysql_pwd.py)
# ssh bdd # mysqldump -u root -p -single-transaction pmb > /tmp/dump_pmb.sql # Ctrl-d (sortie du conteneur) # mv /opt/lxc/bdd/rootfs/tmp/dump_pmb.sql /tmp/
Sur le serveur pmb :
# scp root@adresse_amonecole:/tmp/dump_pmb.sql /tmp/ # mysql -u (utilisateurRootMysql) -p pmb < /tmp/dump_pmb.sql
On peut effacer le fichier :
# rm /tmp/dump_pmb.sql
* Si nouvelle instal, renseigner les fichiers /includes/db_param.inc.php et /opac_css/opac_db_param.inc.php
(voir readme_first.txt et readme.txt)
* Pas d'affichage des vignettes : vérifier la présence de la biliothèque gd (php(version)-gd)
Se connecter à pmb
première connection : admin/admin Faire les différentes mises à jour successives (ne met que la base à jour)
Si l'affichage dans l'onglet "Circulation" reste vierge :
Administration Outils > paramètres > ldap > accessible : non (0)
Changer le mot de passe admin Tester le fonctionnement en lançant une recherche...
Solution réseau retenue
Serveur pmb parallèle au serveur amonecole, ip par dhcp fixée par le routeur
NAT ports classiques vers le serveur pmb, 500xx vers l'amonecole
Importation des lecteurs
Accès LDAP : aucune des solutions testées n'a abouti -> import des lecteurs par csv :
Création d'une feuille OOCalc
num/nom/pnom/sexe/anaiss/classe/login Copie des données à partir des fichiers d'importation annuelle de l'amonecole
Formules utiles
Pour les mots de passe : # Trier la feuille qui contient les mdp # première cellule : =RECHERCHEV(G2;Sheet1.D$2:E$171;2;0) où G2 contient le login à rechercher Sheet1 : feuille contenant login et mdp D$2:E$71 : matrice login/mdp de la feuille dans laquelle s'effectue la recherche 2 : nḞ de la colonne qui contient la valeur de retour (1Ḟ colonne de la matrice=1) 0 : la matrice est déjà triée # Recopier vers le bas * Extraction de l'année à partir de la date : = ANNEE() * Remplacer sexe : M->1, F ->2 Si(...)
Export de la feuille au format csv (Editer les paramètres du filtre) : SANS EN-TÊTE DE COLONNE
- UTF-8 - Séparateur = ; - Séparateur de texte : aucun (effacer ")
Dans l'interface d'administration de pmb
administration > lecteurs > import
Renseigner les numéros de colonnes pour avoir un affichage correct
Terminer la procédure d'importation
A ce stade, les mots de passe ne fonctionnent pas (!) ils apparaissent en clair dans phpmyadmin
Vérifier url_base dans :
administration > paramètres > paramètres généraux > url_base
Encoder les mots de passe :
administration > outils > nettoyage de base : Encoder les mots de passe lecteurs...
(celle-là, il fallait la trouver ! ;-) )
Tester l'accès à l'OPAC pour un utilisateur enregistré.
Sécurisation du serveur
Ne pas autoriser l'accès en ssh ou ftp à root ou admin
Installation fail2ban (exclusion d'adresses)
doc à : https://wiki.debian-fr.xyz/Fail2ban#fail2ban.conf
# apt-get install fail2ban
Configurer pour filtrer ftp (ssh configuré par défaut) : voir doc
Dans /etc/fail2ban/jail.conf >
bantime = 604800 (1 semaine)
Installation de certbot
pour les certificats let's encrypt (accès HTTPS)
Voir : https://certbot.eff.org/lets-encrypt/ubuntufocal-apache
Automatiser la sauvegardes des bases de données
en root : Créer le dossier /root/scripts
# mkdir /root/scripts
Copier le script dans /root/scripts/sav_bdd.sh (sauvegarde toutes les bdd hors celles listées dans databases_exclude list) :
#!/bin/bash
# Script de sauvegarde des bases de données mysql/mariadb
# Les valeurs à paramétrer sont en fin de script dans la fonction main()
get_databases_to_backup() {
mysql_command=$(command -v mysql)
databases_list=$($mysql_command --defaults-file=/etc/mysql/debian.cnf -Bse 'show databases')
for exclude in $databases_exclude_list
do
databases_list=${databases_list//$exclude/}
done
#databases_list="pmb_bosquets"
}
dump_databases() {
ext=".sql.gz"
mysqldump_command=$(command -v mysqldump)
compress_command=$(command -v gzip)
current_date=$(date +%F_%Hh%M)
cd "${backup_folder}" || exit
for database in $databases_list
do
$mysqldump_command --defaults-file=/etc/mysql/debian.cnf "$database" | ${compress_command} >
${database}"_"${current_date}${ext}
echo "Sauvegarde de la base (ou des bases) : ${database}…"
done
echo "$(date +%c): Sauvegarde complete effectuée !"
}
delete_old_backups() {
find_command=$(command -v find)
cd "${backup_folder}" || exit
$find_command ./ -mtime +"${delete_backups_older_than_days}" -type f -exec rm -v {} \;
}
main() {
# toujours exclure information_schema performance_schema de la sauvegarde sinon le script générera des erreurs
databases_exclude_list="mysql phpmyadmin information_schema performance_schema"
# choix du dossier de destination des sauvegardes à ajuster à vos besoins
backup_folder="/media/sf_PartageVM/sav_pmb"
if [ ! -d "$backup_folder" ] ; then
mkdir -p "$backup_folder"
fi
get_databases_to_backup
dump_databases
# nombre de jours pendant lesquels il faut conserver les sauvegardes, -1 si illimité
delete_backups_older_than_days=30
if [ $delete_backups_older_than_days != "-1" ] ; then
delete_old_backups
fi
}
main
Rendre le fichier lisible/modifiable/executable pour root uniquement :
# chmod 700 /root/scripts/sav_bdd.sh
Automatiser l'execution tous les mercredis et dimanches à 3h00 du matin : Editer crontab :
# crontab -e
Ajouter la ligne : (lance le script et envoie la sortie dans sav.log : créer le fichier et adapter le chemin)
0 3 * * wed,sun /root/scripts/sav_bdd.sh >> /media/sf_PartageVM/sav_pmb/log/sav.log
Enregistrer puis relancer le service :
# systemctl restart cron
Pour lister les tâches :
# crontab -l
Pour tester le fonctionnement, on peut ajouter une ligne pour exécuter la tâche dans les minutes qui suivent. La supprimer par la suite.
Mises à jour de sécurité automatiques
voir : https://geekeries.org/2016/04/mises-a-jour-automatiques-de-debian/?cn-reloaded=1
et surtout : https://wiki.deimos.fr/Cron-apt_:_Installation_des_mises_%C3%A0_jour_de_s%C3%A9curit%C3%A9_automatique.html
Installer cron-apt
Créer le fichier /etc/cron-apt/action.d/5-security et y coller le contenu :
upgrade -y -o APT::Get::Show-Upgraded=true # Ajouter l'option "-d" pour télécharger uniquement - utile pour les tests
éditer /etc/apt/sources.list
Copier les lignes contenant 'security'
deb http://fr.archive.ubuntu.com/ubuntu focal-security main restricted # deb-src http://fr.archive.ubuntu.com/ubuntu focal-security main restricted deb http://fr.archive.ubuntu.com/ubuntu focal-security universe # deb-src http://fr.archive.ubuntu.com/ubuntu focal-security universe deb http://fr.archive.ubuntu.com/ubuntu focal-security multiverse # deb-src http://fr.archive.ubuntu.com/ubuntu focal-security multiverse
et les placer dans un nouveau fichier /etc/apt/sources.list.d/security.list. (On peut les commenter dans le fichier d'origine pour éviter les redondances)
Automatiser la mise à jour -> créer le fichier /etc/cron-apt/config.d/5-security et y coller le contenu
OPTIONS="-o quiet=1 -o APT::Get::List-Cleanup=false -o Dir::Etc::SourceList=/etc/apt/sources.list.d/security.list -o Dir::Etc::SourceParts=\"/dev/null\""
Vérifier le fonctionnement :
- Forcer l'exécution : # cron-apt
- Vérifier : # cat /var/log/cron-apt/log
- à comparer avec : # #apt list upgradable
Automatiser les mises à jour : Editer le fichier /etc/cron.d/cron-apt et vérifier la présence des lignes
# Every night at 4 o'clock. 0 4 * * * root test -x /usr/sbin/cron-apt && /usr/sbin/cron-apt
(ou les modifier pour changer les paramètres)
Installation d'urbackup
Non fait sur la version d'août 2021 : procédure rendue superflue par l'emploi d'une sauvegarde du serveur virtuel complet dans un cloud par client de synchronisation (qui concerne également la sauvegarde de la base de donnée par script, automatisée par une tâche cron le dimanche et le mercredi à 3h du matin).
(sauvegarde automatique de type client-serveur : ici on installe les 2 sur la même machine physique)
doc à : https://www.urbackup.org/index.html
Préparer le chemin de sauvegarde :
# mkdir /var/sauvegarde (ou /mnt/sauvegarde, ou autre...)
Peut servir de point de montage pour un HD externe...
Ajout du dépôt et de la clé :
# echo 'deb http://download.opensuse.org/repositories/home:/uroni/Debian_9.0/ /' > /etc/apt/sources.list.d/urbackup-server.list # wget -nv https://download.opensuse.org/repositories/home:uroni/Debian_9.0/Release.key -O Release.key # apt-key add - < Release.key
Installation de la partie serveur
# apt-get update # apt-get install urbackup-server
Le serveur est accessible à l'adresse : http://(adresse_du_serveur):55414
Réglages > Utilisateur Ajouter un utilisateur administrateur pour limiter les accès
Installation de la partie client
# TF=`mktemp` && wget "https://hndl.urbackup.org/Client/2.1.17/UrBackup%20Client%20Linux%202.1.17.sh" -O $TF && sh $TF; rm $TF
(snapshot mechanism = pas LVM ici)
Le client est visible immédiatement dans la console de gestion. (Etats : rafraîchir l'affichage)
Configuration de la sauvegarde de la base de données
Dans /usr/local/etc/urbackup/mariadbdump.conf, mettre
MARIA_DUMP_ENABLED=1
Modification du script pour ne sauver que la base pmb (vérifier la pérénité lors d'une mise à jour...)
dans /usr/local/share/urbackup/scripts/mariadbdump : changer
--all-databses -> pmb (ou nom de la base de données)
Configuration retenue (enregistrer avant de changer d'onglet)
Réglages > Général Serveur
Désactiver la sauvegarde d'image disque coché Le reste par défaut
Sauvegarde de fichiers (à adapter à l'usage) :
Intervalle pour la sauvegarde incrémentale de fichers : 72 ...complète : 30 Nbre max de sauvegardes de fichiers incrémentielles : 30 Nbre min... 10 Nbre max de sauvegarde de fichers complètes : 3 Nmbre min... 2 Répertoires par défaut à sauvegarder : /var/www/html/pmb/opac_css Seule l'appli pmb nous intéresse ici
Sauvegarde de Volume :
Intervalle pour les images système Désactiver Intervalle pour la sauvegarde image complète Désactiver
Droits : par défaut
Client :
Intervalle de sauvegarde : -> plus de détails ...incrémentielles de fichiers : 1-7/3-4 (tous les jours de 3h à 4h) ...complètes de fichiers : 6-7/3-4 (sa-di, de 3h à 4h)
Le reste par défaut
Réglages > Email (paramétrage à revoir)
Lancer une sauvegarde complète
Etats >
Menu déroulant sous le client -> Sauvegarde complète
Suivre la progression dans Activités
Vérifier la sauvegarde dans /var/sauvegarde
Suivre la progression : journaux (ouvre un nouvel onglet) :
Warning : Missing checksum for script ouput for command "mariadbdump.sql" -> normal, le script a été modifié...
203Mo en 3 min
Pour naviguer dans la sauvegarde / télécharger : Menu Sauvegardes
Résolution de problèmes
Erreur lors de l'enregistrement des emprunts
Les enregistrements en ligne affichent une erreur mysql (incorrect integer value…), les enregistrement via l'automate de prêt restent muets.
En ligne de commande :
~# mysql MariaDB [(none)]> select @@sql_mode; (affiche le mode en cours) (MariaDB [(none)]> set global sql_mode=;) MariaDB [(none)]> set sql_mode=; MariaDB [(none)]> quit;
Autre solution via phpMyAdmin :
* Se connecter à phpmyadmin * Menu : Plus > Variables * Rechercher sql mode * Éditer et effacer les valeurs ; enregistrer
Il semblerait qu'il faille refaire la procédure lors des mises à jour.
Autre solution : modifier my.cnf (solution retenue) :
Éditer le fichier :etc/mysql/my.cnf (en mode su)
# nano /etc/mysql/my.cnf
Ajouter les lignes :
[mysqld] sql_mode=""
Enregistrer. Relancer le service :
# service mysql restart
Pour vérifier le contenu du paramètre :
# mysql -e "select @@sql_mode;"