« Installer un serveur linux » : différence entre les versions

De Documentation
Aller à la navigationAller à la recherche
Page créée avec « Notes pour l'installation d'un serveur linux dédié à pmb La version de pmb compatible avec php7 est annoncée début 2018. Une version "niglybuild" est disponible sur… »
 
Aucun résumé des modifications
 
(47 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 ==
  * 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.
  * 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.


La version de pmb compatible avec php7 est annoncée début 2018.  
  https://linuxhint.com/install-php5-ubuntu/
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
{{Replier fin}}


Télécharger ubuntu serveur i386
Télécharger une image d'installation du système choisi (Ubuntu et variantes, Ubuntu server,...)
http://old-releases.ubuntu.com/releases/17.10/ubuntu-17.10-server-i386.iso


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
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 : # sudo -i
Pour passer en root :  
  # sudo -i


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}}


Installations supplémentaires :
==== Configuration du clavier (si nécessaire) ====
Configuration du clavier (si nécessaire)
  # loadkeys fr
# loadkeys fr
  # dpkg-reconfigure keyboard-configuration
# dpkg-reconfigure keyboard-configuration


vim :
==== 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 :)
==== Outils réseau ====
# apt-get install net-tools
(si absents lors de l'instal du serveur :)
apt-
  # 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
==== 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) :
terminer par les serveurs de dns (si nécessaire) :
dns-nameserver 8.8.8.8 8.8.4.4
dns-nameserver 8.8.8.8 8.8.4.4
# service networking restart
  # service networking restart


Serveur ssh :
==== Serveur ssh ====
# apt-install openssh-server
  # apt-install openssh-server
Configuration : /etc/ssh/sshd_config
Configuration : /etc/ssh/sshd_config<br>
Renseigner le port d'écoute
Renseigner le port d'écoute<br>
Configurer le routeur (NAT)
Configurer le routeur (NAT)<br>
Se connecter à une machine distante et tester l'accès par ssh :
Se connecter à une machine distante et tester l'accès par ssh :
# ssh (utilisateur)@(adresse_ip) -p (numport)
  # ssh (utilisateur)@(adresse_ip) -p (numport)


Serveur ftp
===== Authentification ssh par clé privée =====
# apt-get install vsftpd
 
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
Configuration : /etc/vsftpd.conf
Configuration : /etc/vsftpd.conf
anonymous_enable=NO
  anonymous_enable=NO
write_enable=YES
  write_enable=YES
# /etc/init.d/vsftp restart


**********************************
  # /etc/init.d/vsftp restart
Ajout du dépôt
 
# apt install software-properties-common
==== Logiciel de décompression ====
# add-apt-repository ppa:ondrej/php
# apt-get install zip
# apt-get update
 
== Installation de LAMP ==
apache - Php - MariaDB


Serveur web (LAMP) : apache - Php - MariaDB :
=== Installation mariadb ===
  # apt-get install mariadb-server mariadb-client


installation mariadb
==== Pour les versions obsolètes de php ====
# apt-get install mariadb-server mariadb-client
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)
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


Définir le mot de passe root :
==== Définir le mot de passe root ====
# service mysql start
  # 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, on peut entrer en tapant #mysql
  # mysql_secure_installation
permet aussi de redéfinir le mot de passe root en cas d'oubli


***** A ce stade, la page d'info Apache est visible dans le navigateur *****
  # service apache2 start


# vim  /etc/mysql/conf.d/mysqldump.cnf
A ce stade, la page d'info Apache est visible dans le navigateur
max_allowed_packet = 256M


Installation de php My Admin
==== Paramétrer mysqldump ====
# apt-get install phpmyadmin
  # vim  /etc/mysql/conf.d/mysqldump.cnf
Modifier la ligne :
  max_allowed_packet = 256M


=== Installation de phpMyAdmin ===
  # apt-get install phpmyadmin


Rendre phpmyadmin accessible
==== Rendre phpmyadmin accessible ====
Dans /etc/apache2/apache2.conf, ajouter à la fin : Include /etc/phpmyadmin/apache.conf
Dans /etc/apache2/apache2.conf, ajouter à la fin : Include /etc/phpmyadmin/apache.conf
# echo "Include /etc/phpmyadmin/apache.conf" >> /etc/apache2/apache2.conf
  # echo "Include /etc/phpmyadmin/apache.conf" >> /etc/apache2/apache2.conf
# service apache2 restart
  # service apache2 restart


Ajout d'un utilisateur : (remplacer login_util et pass_util par des valeurs au choix)
=== Ajout d'un utilisateur mysql ===
# mysql
(remplacer login_util et pass_util par des valeurs au choix)
  # mysql


CREATE USER 'login_util'@'%' IDENTIFIED BY 'pass_util';
  CREATE USER 'login_util'@'%' IDENTIFIED BY 'pass_util';
GRANT ALL PRIVILEGES ON *.* TO 'login_util'@'%' WITH GRANT OPTION;
  GRANT ALL PRIVILEGES ON *.* TO 'login_util'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
  FLUSH PRIVILEGES;
(Ctrl-d pour sortir)
(Ctrl-d pour sortir)


***** A ce stade, il doit être possible de se connecter à phpmyadmin *****
A ce stade, il doit être possible de se connecter à phpmyadmin


****************************** fin installations supplémentaires
== Installation de 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 pmb
  # apt-get install yaz
**********************************
  # apt-get install libyaz5-dev php5.6-dev
  # pecl install yaz<br>
 
Activer l'extension yaz
  # vim /etc/php/5.6/apache2/php.ini


Installation de yaz (recherche externe des notices) :
# apt-get install yaz
# apt-get install libyaz5-dev php5.6-dev
# pecl install yaz
# vim /etc/php/5.6/apache2/php.ini
Sous [PHP], ajouter
Sous [PHP], ajouter
extension=yaz.so
  extension=yaz.so
# service apache2 reload
Enregistrer, puis :
  # service apache2 reload


Créer un fichier php pour l'affichage des infos
=== Créer un fichier php pour l'affichage des infos ===
# vim /var/www/html/pmb/php-info.php
  # vim /var/www/html/pmb/php-info.php
<?php  
Recopier les lignes :
<?php  
       phpinfo();  
       phpinfo();  
?>
?>
ou
ou
# echo "<?php phpinfo(); ?>" >> /var/www/html/phpinfo.php
  # echo "<?php phpinfo(); ?>" >> /var/www/html/phpinfo.php


Vérifier l'activation de yaz dans un navigateur :
* 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


# apt-get install zip (pour décompresser les fichiers)
=== Installer pmb ===
 
Copie de la dernière version de pmb dans le dossier /tmp/
Copie de la dernière version de pmb dans le dossier /tmp/
Décompression de l'archive dans /var/www/html :
Décompression de l'archive dans /var/www/html :
# unzip /tmp/pmb5.0.3.zip -d /var/www/html/
  # unzip /tmp/pmb5.0.3.zip -d /var/www/html/


Modifier le propriétaire et le groupe, changer les droits :
Modifier le propriétaire et le groupe, changer les droits :
# chown -R www-data:www-data /var/www/html/pmb
  # chown -R www-data:www-data /var/www/html/pmb
# chmod -R 770 /var/www/html/pmb
  # chmod -R 770 /var/www/html/pmb


Supprimer le fichier zip :
Supprimer le fichier zip :
# rm /tmp/pmb5.0.3.zip
  # rm /tmp/pmb5.0.3.zip


Configurer le routeur pour l'accès extérieur (NAT port 80)
Configurer le routeur pour l'accès extérieur (NAT port 80)
Ligne 146 : Ligne 176 :
Suivre la procédure d'installation de pmb (http://adresse_serveur/pmb/tables/install.php)
Suivre la procédure d'installation de pmb (http://adresse_serveur/pmb/tables/install.php)


***** facultatif : pour migrer à partir de l'amonecole
=== Facultatif : pour migrer à partir de l'amonecole ===
importer les données :
 
==== Importer les données ====


Sur l'amonecole :
Sur l'amonecole :
(si necessaire, redéfinir le mdp root : # mysql_pwd.py)
(si necessaire, redéfinir le mdp root : # mysql_pwd.py)


# ssh bdd
  # ssh bdd
# mysqldump -u root -p -single-transaction pmb > /tmp/dump_pmb.sql
  # mysqldump -u root -p -single-transaction pmb > /tmp/dump_pmb.sql
# Ctrl-d (sortie du conteneur)
  # Ctrl-d (sortie du conteneur)
# mv /opt/lxc/bdd/rootfs/tmp/dump_pmb.sql /tmp/
  # mv /opt/lxc/bdd/rootfs/tmp/dump_pmb.sql /tmp/


Sur le serveur pmb :
Sur le serveur pmb :
# scp root@adresse_amonecole:/tmp/dump_pmb.sql /tmp/
  # scp root@adresse_amonecole:/tmp/dump_pmb.sql /tmp/
# mysql -u (utilisateurRootMysql) -p pmb < /tmp/dump_pmb.sql
  # mysql -u (utilisateurRootMysql) -p pmb < /tmp/dump_pmb.sql
On peut effacer le fichier :
On peut effacer le fichier :
# rm /tmp/dump_pmb.sql
  # rm /tmp/dump_pmb.sql


Si nouvelle instal, renseigner les fichiers /includes/db_param.inc.php et /opac_css/opac_db_param.inc.php
  * 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)
(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)
  * Pas d'affichage des vignettes : vérifier la présence de la biliothèque gd (php(version)-gd)
***** fin migration


=== Se connecter à pmb ===
première connection : admin/admin
première connection : admin/admin
Faire les différentes mises à jour successives (ne met que la base à jour)
Faire les différentes mises à jour successives (ne met que la base à jour)


Si l'affichage dans l'onglet "Circulation" reste vierge :
Si l'affichage dans l'onglet "Circulation" reste vierge :
Administration
  Administration
Outils > paramètres > ldap > accessible : non (0)
  Outils > paramètres > ldap > accessible : non (0)


Changer le mot de passe admin
Changer le mot de passe admin
Tester le fonctionnement en lançant une recherche...
Tester le fonctionnement en lançant une recherche...


********************************************* fin pmb
== Solution réseau retenue ==
 
Serveur pmb parallèle au serveur amonecole, ip par dhcp fixée par le routeur<br>
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
NAT ports classiques vers le serveur pmb, 500xx vers l'amonecole


******************* Importation des lecteurs
== Importation des lecteurs ==
Accès LDAP : aucune des solutions testées n'a abouti -> import des lecteurs par csv :
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
=== 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
Copie des données à partir des fichiers d'importation annuelle de l'amonecole


Formules utiles :
=== Formules utiles ===
*Pour les mots de passe :  
  Pour les mots de passe :  
1. Trier la feuille qui contient les mdp
  # Trier la feuille qui contient les mdp
2. première cellule : =RECHERCHEV(G2;Sheet1.D$2:E$171;2;0)
  # première cellule : =RECHERCHEV(G2;Sheet1.D$2:E$171;2;0)
 
G2 contient le login à rechercher
    G2 contient le login à rechercher
Sheet1 : feuille contenant login et mdp
    Sheet1 : feuille contenant login et mdp
D$2:E$71 : matrice login/mdp de la feuille dans laquelle s'effectue la recherche
    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)
    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
    0 : la matrice est déjà triée
3. Recopier vers le bas
  # Recopier vers le bas
 
  * Extraction de l'année à partir de la date :
  = ANNEE()
 
  * Remplacer sexe : M->1, F ->2
  Si(...)


*Extraction de l'année à partir de la date :
Export de la feuille au format csv (Editer les paramètres du filtre) : SANS EN-TÊTE DE COLONNE
= ANNEE()
  - UTF-8
 
  - Séparateur = ;
*Remplacer sexe : M->1, F ->2
  - Séparateur de texte : aucun (effacer ")
Si(...)


Export de la feuille au format csv (Editer les paramètres du filtre) : SANS EN-TÊTE DE COLONNE
=== Dans l'interface d'administration de pmb ===
- UTF-8
- Séparateur = ;
- Séparateur de texte : aucun (effacer ")


Dans l'interface d'administration de pmb :
administration > lecteurs > import<br>
administration > lecteurs > import
Renseigner les numéros de colonnes pour avoir un affichage correct<br>
Renseigner les numéros de colonnes pour avoir un affichage correct
Terminer la procédure d'importation<br>
Terminer la procédure d'importation


A ce stade, les mots de passe ne fonctionnent pas (!) ils apparaissent en clair dans phpmyadmin :
A ce stade, les mots de passe ne fonctionnent pas (!) ils apparaissent en clair dans phpmyadmin<br>
Vérifier url_base dans :
Vérifier url_base dans :<br>
administration > paramètres > paramètres généraux > url_base
  administration > paramètres > paramètres généraux > url_base


Encoder les mots de passe :
Encoder les mots de passe :
administration > outils > nettoyage de base : Encoder les mots de passe lecteurs... (celle-là, il fallait la trouver !)
  administration > outils > nettoyage de base : Encoder les mots de passe lecteurs...<br>
  (celle-là, il fallait la trouver ! ;-) )


Tester l'accès à l'OPAC pour un utilisateur enregistré.
Tester l'accès à l'OPAC pour un utilisateur enregistré.


************************************** fin importation des lecteurs
== Sécurisation du serveur ==
Ne pas autoriser l'accès en ssh ou ftp à root ou admin


Sécurisation du serveur :
=== Installation fail2ban (exclusion d'adresses) ===
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
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)


******************** fin fail2ban
=== Installation de certbot ===
 
pour les certificats let's encrypt (accès HTTPS)<br>
*************************************
installation de certbot pour les certificats let's encrypt (accès HTTPS)
*************************************
Voir : https://certbot.eff.org/lets-encrypt/ubuntufocal-apache
Voir : https://certbot.eff.org/lets-encrypt/ubuntufocal-apache


******************** fin certbot
=== Automatiser la sauvegardes des bases de données ===
 
en root :
*************************************
Automatiser la sauvegardes des bases de données
*************************************
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) :
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é
  #!/bin/bash
    delete_backups_older_than_days=30
  # Script de sauvegarde des bases de données mysql/mariadb
    if [ $delete_backups_older_than_days != "-1" ] ; then
  # Les valeurs à paramétrer sont en fin de script dans la fonction main()
        delete_old_backups
 
    fi
  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


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 :
Ecditer crontab :
Editer crontab :
# crontab -e
  # crontab -e


ajouter la ligne : (lance le script et envoie la sortie dans sav.log : créer le ficier et adapter le chemin)
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 et relancer le service :
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 pet ajouter une ligne pour exécuter la tâche dans les minutes qui suivent. La supprimer par la suite.
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.


******************** fin sauvegardes
=== Mises à jour de sécurité automatiques ===


*************************************
voir : https://geekeries.org/2016/04/mises-a-jour-automatiques-de-debian/?cn-reloaded=1<br>
Mies à jour de sécurités automatique
*************************************
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
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 - utilse pour les tests
  # 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 364 : 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
* Forcer l'exécution : # cron-apt
- vérifier : # cat /var/log/cron-apt/log
* Vérifier : # cat /var/log/cron-apt/log
- à comparer avec : # #apt list upgradable
* à 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)


******************** fin Mises à jour de sécurité automatiques
=== 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)<br>
doc à : https://www.urbackup.org/index.html


*************************************
Installation d'urbackup (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 :
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é :
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 :
==== 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://(adresse du serveur):55414
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 :
==== 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 :
==== 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...) :
==== 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) :
==== Configuration retenue (enregistrer avant de changer d'onglet) ====
Régalges > Général
Réglages > Général
* Serveur
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) :
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 Seule l'appli pmb nous intéresse ici
  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)


************************************** fin configuration retenue
==== 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 .

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;"