Scripts de sauvegardes journalières et hebdomadaires

Bin-Bash, scripts, ligne de commande

J’avais pris cela sur un site, je ne sais plus où et ça a bien fonctionné un certain temps puis plus rien lorsque j’ai passé un des serveurs qui était sous Ubuntu serveur 12.04 sous Debian 8.7

J’ai donc repris en grande partie, même si les bases restent les mêmes. Voici donc la version fonctionnelle.

Sur Debian 8.7

Automatiser les sauvegardes.

Dans cet exemple, il s’agit de sauvegarder chaque jour de la semaine (samedi, dimanche, lundi, mardi, etc.), puis le vendredi soir, on sauvegarde sur le n° de la semaine. Puis on repart sur samedi, dimanche, etc.

Avant tout vous devez définir le « lieux » de sauvegarde, s’agit-il d’un disque dur supplémentaire, d’un disque externe, d’un lieu distant (par ssh ou autres)… Bref vous devrez adapter les scripts à vos choix et besoin.

Il s’agit là d’une idée sur le principe, à chacun de se l’approprier.

Ici je vais partir du principe que j’ai un disque dur chiffré supplémentaire monté sur /mnt/
Il est nommé « save » et le répertoire de sauvegarde est « s_server »

ce qui donne le chemin de sauvegarde « /mnt/save/s_server »

Avant tout, vous devez savoir en quelle langue sont vos jours de la semaine (anglais, français, etc.).

date +%A
vendredi

Le résultat est Français.
Connectez-vous en administrateur.

su root

Créer le script qui créera les répertoires des n° de semaine et les jours de la semaine.

#!/bin/bash
for x in lundi mardi mercredi jeudi vendredi samedi dimanche {01..52}
do
mkdir $x
done

Pourquoi {01..52} et non {1..52}? il suffit de lire le man date

man date
(...)
%V     ISO week number, with Monday as first day of week (01..53)
(...)

On voit donc qu’il faut numéroté de 01 à 52, car la 53ème semaine, lorsqu’elle existe est à cheval entre deux années et c’est donc pas dramatique de rater une semaine.

Rendre le script exécutable et on le place (dans notre exemple plus haut) dans « /mnt/save/s_server/ », puis on l’exécute…

./faire_mkdir.sh

Un petit « ls » pour vérifier que tout est ok.

Nous allons créer un fichier des dossiers à exclure. Si votre sauvegarde est locale, il faudra exclure le dossier de sauvegarde 😉 dans notre cas « /mnt/save/s_server/ » vous pouvez exclure tout ce qui ne vous semble pas judicieux, à vous de voir.

cd /etc/
nano rsync.exclude

On y met tout ce que l’on souhaite exclure.
Ci-dessous « /mnt/ » obligatoire dans l’exemple puisque la sauvegarde ce fait sur « /mnt/save/s_server/ », le reste en fonction de vos besoins.
Faites un copié/collé de ce qu’il y a ci-dessous.

# Mettez ici tous les dossiers que vous souhaitez exclure
# - /boot/
- /media/
- /lost+found/
- /mnt/
- /proc/
- /opt/
- /run/
- /srv/
- /tmp/
- /sys/

Créer les deux scripts ci dessous:

nano /etc/cron.daily/jour.sh

Copié/collé de ce qu’il y a ci-dessous

#!/bin/bash
# On va l'appeler "jour.sh"
# Sauvegarde quotidienne
jour=$(date +%A)
source="/"
destination="/mnt/save/s_server"
rsync -aurov -progress --delete --stats --exclude-from=/etc/rsync.exclude $source $destination/$jour

Ce qui donne le chemin /etc/cron.daily/jour.sh et rendez-le exécutable.

chmod +x /etc/cron.daily/jour.sh

Puis:

nano /etc/cron.weekly/semaine.sh

Copié/collé de ce qu’il y a ci-dessous

#!/bin/bash
# On va l'appeler "semaine.sh"
#  Sauvegarde hebdomadaire
semaine=$(date +%V)
source="/"
destination="/mnt/save/s_server"
rsync -aurov -progress --delete --stats --exclude-from=/etc/rsync.exclude $source $destination/$semaine

Ce qui donne le chemin /etc/cron.weekly/semaine.sh et rendez-le exécutable.

Chmod +x /etc/cron.weekly/semaine.sh

Maintenant il suffit juste de créer la crontab

crontab -e

Choisissez votre interprétateur texte « nano » ou « vi » et copiez les lignes ci-dessous:

PATH=/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/sh
MAILTO=""
# m h  dom mon dow   command
0 23 * * * /etc/cron.daily/jour.sh >/dev/null 2>&1 # JOB_1
30 23 * * 5 /etc/cron.weekly/semaine.sh >/dev/null 2>&1 # JOB_2

Pour Ubuntu ce devrait ressembler à cela:

PATH=/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/sh
MAILTO=""
# m h  dom mon dow   command
0 23 * * * sudo /etc/cron.daily/jour.sh >/dev/null 2>&1 # JOB_1
30 23 * * 5 sudo /etc/cron.weekly/semaine.sh >/dev/null 2>&1 # JOB_2

Ensuite vérifier le lendemain si la sauvegarde à bien fonctionné et revérifiez en fin de semaine.

Geneweb en service et https (suite)

geneweb https stunnel4

Alors bien entendu comme je l’avais dit dans un billet précédent, il suffit d’utiliser Geneweb comme un site lambda avec un script cgi

Sauf que moi je ne souhaite pas l’utiliser ainsi mais en service, via un port dédié.
J’ai donc sur le sujet fait un tutoriel, je l’ai proposé sur une liste de diffusion (mailling list) dédiée à Geneweb. On m’a proposé de le publier sur le site dédié.

Comme je n’avais pas vraiment le temps j’ai juste envoyé une compilation de mes deux tutoriels « https sous Apache – Même à l’école je n’ai jamais eu un A » et « https pour autres ports ou services ex Geneweb – stunnel4« .

Henri G. l’a mis en forme, publié sur le site de geneweb, il en a fait aussi la traduction en anglais, et mis un petit lien de renvoie en fin d’article qui me touche beaucoup.
Un mois plus tard JM fait également une proposition différente de la mienne sur la mailling list, et que je trouve aussi très intéressante.

Il ne s’agit pas d’un tutoriel car je n’ai pas testé, et je n’ai pas envie de modifier la configuration de mon serveur pour tester.
Je le mets pour ceux qui souhaitent tester, creuser, perfectionner, et aussi en pense bête, pour le tester moi-même un jour.
C’est basé sur des certificats auto-signés, ceux qui ont d’autres certificats sauront l’adapter.

La proposition.

JM : (…) un vhost en reverse proxy, comme ça Geneweb n’écoute qu’en local. Ici une vieille configuration éprouvée, pas à jour des dernières modes de Let’s Encrypt & co mais ça donne l’idée. Le passage important est le paragraphe avec RewriteEngine, ProxyPass et ProxyPassReverse – ainsi que le <Proxy *> :

<VirtualHost *:443>
ServerName genealogie.mafamille.org
ServerAdmin admin@mafamille.org
DocumentRoot /home/moi/www/www.mafamille.org/
CustomLog /home/moi/logs/apache2/mafamille.org/access.log combined
RewriteEngine On
ProxyPass / http://serveur.mafamille.com:2317/
ProxyPassReverse / http://serveur.mafamille.com:2317/

   <Proxy *>
        Order deny,allow
        Allow from all
   </Proxy>

SSLEngine               on
SSLCACertificateFile    /etc/apache2/ssl/certs.pem
SSLCertificateFile      /etc/apache2/ssl/apache2.pem
SSLCertificateKeyFile   /etc/apache2/ssl/apache2.key
SSLProtocol             all
SSLCipherSuite          HIGH:MEDIUM

   <directory /home/jim/www/www.mafamille.org/>
        Options None
        AllowOverride None
        Order Deny,Allow
        Allow from all
   </directory>
</VirtualHost>

Mettre des bulles sur votre terminal – Cowsay – Fortune

Mettre des bulles sur votre terminal – CowsayFortune.

Ce n’est pas d’une grande utilité, donc indispensable.
Cowsay permet d’afficher un dessin en caractères ASCII dans votre terminal.
Par défaut il représente un animal qui récite le texte de votre choix.

Voyons un peu cela: On installe

# apt-get install cowsay

Voyons ce que cela donne par défaut:

$ cowsay hello
_______
< hello >
-------
  \   ^__^
   \  (oo)\_______
      (__)\       )\/\
          ||----w |
          ||     ||

A l’installation plusieurs dizaines de fichiers « .cow » sont installés dans /usr/share/cowsay/cows/

Testons-en un au hasard histoire de voir la différence:

$ cowsay -f sodomized-sheep.cow hello
 _______
< hello >
 -------
  \                 __ 
   \               (oo)
    \              (  )
     \             /--\
       __         / \  \ 
      UooU\.'@@@@@@`.\  )
      \__/(@@@@@@@@@@) /
           (@@@@@@@@)(( 
           `YY~~~~YY' \\
            ||    ||   >>

Bon, là c’est un peu cochon… Même s’il s’agit d’un mouton…

Si vous souhaitez qu’un dessin apparaisse de façon aléatoire dès l’ouverture de votre console, il suffit d’ajouter dans votre fichier « .bashrc »

cowsay -f `ls /usr/share/cowsay/cows | sort -R | tail -n 1` "votre_texte_d'accueil"

Explications :
Cowsay prend en argument le résultat d’une commande, ici « ls » sur le répertoire qui suit « /usr/share/cowsay/cows« . « sort -R » mélange le résultat, puis on affiche la dernière ligne par « tail -n 1« . S’en suit le texte de votre choix.
L’un des résultats:

 _______________________
< votre_texte_d'accueil >
 -----------------------
    \
     \
    ^__^         /
    (oo)\_______/  _________
    (__)\       )=(  ____|_ \_____
        ||----w |  \ \     \_____ |
        ||     ||   ||           ||

sima78@hohoho:~$

Si vous souhaitez des citations, vous pouvez combiner Cowsay avec Fortunes qui est un générateur aléatoire de citations. Pour avoir les citations Françaises:

# apt-get install fortunes-fr

Modifiez la dernière ligne que vous avez créée dans votre « .bashrc » par :

cowsay -f `ls /usr/share/cowsay/cows | sort -R | tail -n 1` "fortune -s"

L’option « -s » permet de sélectionner que les citations considérées comme « courtes »
Un des résultats:

 _________________________________________
/ Euclide avait-il raison raison de       \
| définir le nombre : collection d'unités |
| de même espèce ?                        |
|                                         |
| -+- Voltaire, Questions sur             |
\ l'encyclopédie -+-                      /
 -----------------------------------------
    \               ,-----._
  .  \         .  ,'        `-.__,------._
 //   \      __\\'                        `-.
((    _____-'___))                           |
 `:='/     (alf_/                            |
 `.=|      |='                               |
    |)   O |                                  \
    |      |                               /\  \
    |     /                          .    /  \  \
    |    .-..__            ___   .--' \  |\   \  |
   |o o  |     ``--.___.  /   `-'      \  \\   \ |
    `--''        '  .' / /             |  | |   | \
                 |  | / /              |  | |   mmm
                 |  ||  |              | /| |
                 ( .' \ \              || | |
                 | |   \ \            // / /
                 | |    \ \          || |_|
                /  |    |_/         /_|
               /__/
sima78@hohoho:~$

Vous pouvez enrichir votre répertoire /usr/share/cowsay/cows/ par vos propres créations ASCII ou d’autres téléchargées sur le web.

https pour autres ports ou services ex Geneweb – stunnel4

geneweb https stunnel4

Si vous avez une application avec un protocole ne supportant pas SSL, la solution est de l’encapsuler dans un tunnel SSL.
Bien entendu, il s’agit là d’un exemple, qui fonctionne chez-moi, n’hésitez pas à améliorer.

Geneweb en https

Depuis que mon serveur est en https, geneweb restait en http. Geneweb se lance sur mon serveur en service (il est son propre serveur) sur un port dédié. Une des solutions aurait été de l’installer sur /var/www/ avec un script CGI… Ce que je ne souhaitais pas.
Donc mon exemple s’applique à Geneweb, mais en cherchant sur le web, vous trouverez comment encapsuler d’autres protocoles tels que smtp, pop, vpn, imap…
Habituellement, on se connecte sur Geneweb en mode service sur le port 2317 (http://leserveur.net:2317) donc pas en https…

Voyons comment procéder…

sur Ubuntu 16.04 server

Geneweb et Stunnel

Installer Stunnel4

sudo apt-get install stunnel4

On se place dans le répertoire et on se positionne en Root, sinon tapez « sudo » devant chaque ligne.

cd /etc/stunnel
sudo -s

On génère les clés. On peut faire simple avec:

openssl req -new -x509 -nodes -days 365 -out stunnel.pem -keyout stunnel.pem #dans ce cas il faudra en tenir compte lors de la création du fichier « stunnel.conf »

Personnellement, j’ai procédé comme suit:

openssl genrsa -out cle-serveur.key 2048

Signature de la demande de certificat CSR.

openssl req -new -key cle-serveur.key -out demande-certif.csr

Le certificat auto-signé pour un an.

openssl x509 -req -days 365 -in demande-certif.csr -signkey cle-serveur.key -out cert-server.crt

On combine le certificat et la clé dans un même fichier.

cat cleserveur.key > server.pem && cat certserver.crt >> server.pem

On modifie les permissions.

chmod 0600 cert-server.crt cle-serveur.key server.pem

Ensuite je crée le fichier de configuration « stunnel.conf » dans /etc/stunnel/

« ; » signifie que c’est en commentaire, vous pouvez donc « fignoler » la configuration. Je n’ai pas tout traduit par paresse, mais c’est assez transparent.
Utilisez VI, ou nano, ou autre, selon vos habitudes, ici je vais utiliser nano

nano stunnel.conf

Ci-dessous mon fichier stunnel.conf

; **************************************************************************
; * Options générales                                                         *
; **************************************************************************
; Il est recommandé de changer les privilèges utilisateur et groupe
;setuid = stunnel4
;setgid = stunnel4
; un chroot pour un peu plus de sécurité
;chroot = /var/lib/stunnel4/
; Le fichier PID sera créé dans le chroot
;pid = /var/run/stunnel.pid
; Utile de mettre dans les logs pour suivre en cas de bug
foreground = yes
debug = info
output = /var/log/stunnel4/stunnel.log
; Enable FIPS 140-2 mode if needed for compliance
;fips = yes
; **************************************************************************
; * Service defaults may also be specified in individual service sections  *
; **************************************************************************
; Enable support for the insecure SSLv3 protocol
options = -NO_SSLv3
; These options provide additional security at some performance degradation
options = SINGLE_ECDH_USE
options = SINGLE_DH_USE
; **************************************************************************
; * Include all configuration file fragments from the specified folder     *
; **************************************************************************
;include = /etc/stunnel/conf.d
; **************************************************************************
; * Service definitions (remove all services for inetd mode)               *
; **************************************************************************
[geneweb]
accept = 22317
connect = 2317
cert=/etc/stunnel/server.pem
key=/etc/stunnel/cle-serveur.key

On modifie l’utilisateur et le groupe.

cd ..
chown -Rf stunnel4:stunnel4 stunnel/

Maintenant nous allons activer stunnel

nano /etc/default/stunnel4

Modifiez l’option suivante comme ci-dessous :

ENABLED=1

On redémarre Stunnel

/etc/init.d/stunnel4 stop
/etc/init.d/stunnel4 start

ou plus simplement

/etc/init.d/stunnel4 restart

Connexion à Geneweb en https

Sur cette exemple vous pourrez vous connecter sur Geneweb en https avec l’adresse suivante sur votre navigateur:
https://www.votre-verveur.fr:22317

Si vous utilisez iptables ou autre pare-feux, n’oubliez pas de le modifier et/ou si vous êtes auto-hébergé modifiez aussi la redirection de ports sur votre box….

Si vous avez déjà des certificats Let’s Encrypt, je pense que vous pouvez les utiliser en modifiant le fichier stunnel.conf, j’avoue ne pas avoir creusé la question puisque j’informe ceux que j’autorise à se connecter qu’ils doivent accepter le certificat lors du message d’alerte de leur navigateur.

https sous Apache – Même à l’école je n’ai jamais eu un A

https sur serveur Ubuntu facile

Depuis fin décembre le blog est enfin en accès https… Je devais le faire aux vacances de Pâques 2016, j’avais repoussé à juillet, puis aux vacances de la Toussaint.

Oui, je suis un fervent adepte de la procrastination, je suis de ceux qui remettent au sur-lendemain dans l’espoir qu’un autre le fera demain. Mais là, je dois me rendre à l’évidence, jamais personne ne le fera à ma place. Je l’ai donc fait entre Noël et le Jour de l’An.

Une fois fini, je fais un petit test sur SSL Server Test… Et là, j’ai un A!
Certains diront, et à raison, Let’s Encrypt c’est pas non plus le top du top… Ok, mais m@rd@ alors! P#tain j’ai un A! Même à l’école j’ai jamais eu un A, alors laissez-moi savourer ce A.
Je vous mets la capture d’écran pour me la péter vous montrer et ensuite on passe à la configuration.

Résultat d'audit SSL affichant une note globale « A » avec des scores élevés pour le certificat, le support de protocole, l'échange de clés et la force de chiffrement.
Un serveur Apache sécurisé avec Let’s Encrypt obtient la note « A » au test SSL de Qualys SSL Labs.

Ubuntu server 16.04 sous apache

https sous apaches avec Let’s Encrypt

Je commence par installer « git » sur /opt/

sudo -s
apt-get install git
git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt --depth=1

→ « sudo -s » Je ne sais pas combien de sudo je vais devoir taper, sans doute plus de trois, alors « sudo -s »
→ « –depth=1 » Je ne souhaite pas récupérer tout l’historique du site.

Générer les certificats

/opt/letsencrypt/letsencrypt-auto --apache -d domaine.fr -d www.domaine.fr

Si vous avez plusieurs domaines, sinon vous pouvez faire simplement:

/opt/letsencrypt/letsencrypt-auto

Configurer le VirtualHost pour l’accès https

Allez dans /etc/apache2/sites-available et modifier les VirtualHost

cd /etc/apache2/sites-available
nano votredomaineSSL.fr

La configuration que j’ai mise

<VirtualHost *:443>
   ...
      SSLProtocol -ALL -SSLv3 +TLSv1 +TLSv1.1 +TLSv1.2
      SSLHonorCipherOrder On
      SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS

      SSLEngine on
      SSLCertificateFile /etc/letsencrypt/live/domaine.fr /fullchain.pem
      SSLCertificateKeyFile /etc/letsencrypt/live/domaine.fr /privkey.pem
   ...
</VirtualHost>

Configurer le VirtualHost http pour une redirection https

cd /etc/apache2/sites-available
nano votredomaine.fr

La configuration que j’ai mise

<VirtualHost *:80>
...
      RewriteEngine on
      RewriteRule ^ https://www.chispa.fr%{REQUEST_URI} [L,QSA,R=permanent]
...
</VirtualHost>

Renouvellement du certificat

ATTENTION, le certificat n’est valable que 90 jours. On peut le renouveler avec la commande:

/opt/letsencrypt/letsencrypt-auto --apache --renew-by-default -d domaine.fr -d www.domaine.fr

Le mieux est de rendre automatique le renouvellement, heureusement Erika Heidi a créer un script pour nous, il s’agit de le-renew.sh
Je l’ai récupéré, rendu exécutable et mis dans la crontab

curl -L -o /usr/local/sbin/le-renew http://do.co/le-renew
chmod +x /usr/local/sbin/le-renew
crontab -e
0 6 * * 1 /usr/local/sbin/le-renew domaine.fr >> /var/log/le-renew.log

Chaque lundi à 6:00, la validité du certificat en question sera vérifié, s’il est toujours valable, au cas contraire il demandera le renouvellement.

Bon, normalement en bon « copiteur » vous aurez un A, et si en plus vous améliorez, je ne vous en parle même pas! Un A+ ou A++.

Effacer définitivement la mémoire ram et swap – secure-delete

Vous perdez votre ordinateur portable, vous êtes cambriolé et on vous vole votre PC… Vous avez chiffré vos disques ou partitions, c’est déjà une bonne protection pour vos données personnelles, contre l’usurpation d’identité et autres malveillances.

Poussez la protection un peu plus loin… Vous êtes paranoïaque, vous avez sans doute raison, quelqu’un d’aussi pointu que votre niveau de parano peut aller fouiller dans la RAM (mémoire vive), le swap, les clusters du/des disque(s)…

Quelques pistes.

« secure-delete » comporte quatre outils (SRM, SMEM, SFIL et SSWAP), ces outils font par défaut 38 passes sur un cluster…

smem (Secure Memory Wiper) supprime les données dans la RAM.

smem

sswap (Secure Free Space Wiper) permet de faire la même chose que smem mais pour le swap, voir plus bas sswap.

srm (Secure remove) permet de supprimer de manière sécurisée des fichiers ou des répertoires de vos disques durs de façon définitive… En effet avec la commande rm les données supprimées sont récupérables.

srm nom_du_fichier
ou
srm -r nom_du_répertoire

sfill (Secure Free Space Wiper) pour effacer toutes les traces conservées dans l’espace libre des disques durs sans formater les disques durs.

sfill /répertoire

Retour sur la commande sswap. Avant de l’utiliser, il faut démonter la partition swap.
Vous ne savez pas où elle se trouve :

sudo fdisk -l
(…)
Périphérique Amorçage     Start       Fin  Secteurs   Size Id Type
/dev/sda1                  2048 207077375 207075328  98,8G  7 HPFS/NTFS/exFAT
/dev/sda2             812548094 976771071 164222978  78,3G  5 Étendue
/dev/sda3    *        226609152 812546651 585937500 279,4G 83 Linux
/dev/sda5             812548096 970024959 157476864  75,1G 83 Linux
/dev/sda6             970027008 976771071   6744064   3,2G 82 partition d'échange Linux / Solaris
(...)

Dans notre exemple il s’agit de (/dev/sda6), à vous d’ajuster le « /dev/sdxx »
Ensuite, il faut la désactiver :

sudo swapoff /dev/sda6

Puis on peut nettoyer avec la commande sswap :

sudo sswap /dev/sda6

Pour finir, il faut réactiver le swap :

sudo swapon /dev/sda6

A vous de créer un script qui s’exécute à la fermeture de votre session… Bien sûr ; lisez les man(s) de chaque commande.
Pour la suppression de fichiers, vous pouvez aussi « creuser » du côté de la commande « shred« … Bref, à vous de vous approprier et de partager ! 😉

Calculer pi en ligne de commande sous linux

L’idée de départ, est de me créer un tee-shirt sur lequel il y aurait pi suivi de 311 décimales pour en faire un « truc » graphique.

Je passe sur l’aspect graphique souhaité, je vous montrerai peut-être une fois l’œuvre terminée…

Soit! C’est très futile, mais les futilités nous emmènent toujours vers des chemins imprévus, comme l’idée d’en faire un billet.

Bref! Pour ce graphisme, j’ai besoin de pi à 311 décimales derrière la virgule, soit 3,(311chiffres).
Ouvrons un terminal, certains dirons une console… et voici la ligne de commande bash avec le résultat:

echo « scale=311; 4*a(1) » | bc -l

$ echo "scale=311; 4*a(1)" | bc -l
3.141592653589793238462643383279502884197169399375105820974944592307\
81640628620899862803482534211706798214808651328230664709384460955058\
22317253594081284811174502841027019385211055596446229489549303819644\
28810975665933446128475648233786783165271201909145648566923460348610\
45432664821339360726024914127372458700660

Explications:

  • « echo » renvoie un affichage sur console (saisie, écriture, résultats)… Voir Initiation au shell (boucle for, do, done)
  • « scale=x » scale permet d’indiquer le nombre de chiffres après la virgule (remplacer x par le chiffre souhaité)
  • « 4*a(1) » a(1) se base sur la fonction Arc Tangente a(). Cette formule « 4*a(1) », permet entre autres, le calcul du nombre pi.
  • « | » «pipe» redirige le résultat d’une commande dans le flux d’entrée d’une autre commande. Ici la commande suivante sera « bc » qui est une commande de calculatrice «basic calculator»
  • « bc -l » récupère la formule « 4*a(1) » après le « pipe » pour effectuer le calcul. L’option « -l » utilise la librairie mathématique standard (Define the standard math library) qui utilise, entre autres, la fonction Arc Tangente a()… Voire « man bc »

Si l’on met à « scale » un nombre plus « gros », par exemple « 2000 » le temps de réponse est plus long, on peut « mesurer » le temps de réponse avec la commande « time », exemple:

time echo « scale=2000; 4*a(1) » | bc -l

$ time echo "scale=2000; 4*a(1)" | bc -l
3.141592653589793238462643383279502884197169399375105820974944592307\
81640628620899862803482534211706798214808651328230664709384460955058\
22317253594081284811174502841027019385211055596446229489549303819644\
(...)
74427862203919494504712371378696095636437191728746776465757396241389\
086583264599581339047802759008
real    0m2.470s
user    0m2.470s
sys    0m0.001s

Pas forcement utile au quotidien, donc nécessaire!

Décimales – Binaires – C’est simple

Cela ne s’adresse pas aux informaticiens dont on peut supposer que cela n’a plus de secret pour eux. Certains me diront qu’il existe des sites pour faire les conversions…

Soit ! Le but est de comprendre et savoir le faire, d’autant plus que c’est très simple.

Prenons un chiffre binaire « 1 101 101 » que l’on souhaite convertir en un chiffre décimal. Commençons par écrire le chiffre binaire de façon verticale et inversée (le dernier chiffre en haut). On ajoute le signe multiplier « X » et en face, de haut vers le bas on met 2 puissance 0, puis deux puissance 1, puissance 2 et ainsi de suite jusqu’en bas.

On fait la multiplication. Reste plus qu’à additionner tous ces chiffre et on obtient sa valeur en décimales. Exemple ci-dessous :

1 = 1 X 2⁰ =     1
0 = 0 X 2¹ =     0
1 = 1 X 2² =     4
1 = 1 X 2³ =     8
0 = 0 X 2⁴ =     0
1 = 1 X 2⁵ =    32
1 = 1 X 2⁶ =    64
  ________________
Total          109

Maintenant faisons le travail inverse, convertir 315 en binaire. Deux solutions…

Solution 1 :
Chercher la plus grande puissance de 2 contenue dans 315 (2⁸ = 256, 2⁹ = 512) 2⁹ est trop grand, on prend donc 2⁸ la différence est de 59 (voir plus bas pour les puissances 2)
Donc 315 = 2⁸ + 59
La plus grande puissance (pgp) contenue dans 59 est 2⁵ (32) reste 27
315 = 2⁸ + 2⁵ + 27
La pgp contenue dans 27 est 2⁴ (16) reste 11
315 = 2⁸ + 2⁵ + 2⁴ + 11
La pgp contenue dans 11 est  2³ (8) reste 3
315 = 2⁸ + 2⁵ + 2⁴ + 2³ + 3
La pgp contenue dans 3 est 2¹ (2) reste 1 qui est égale 2⁰
315 = 2⁸ + 2⁵ + 2⁴ + 2³ + 2¹ + 2⁰
La transcription ce fait comme ci-dessous, les puissances absentes comptent pour 0

2⁸  2⁷  2⁶  2⁵  2⁴  2³  2²  2¹  2⁰
__________________________________
1   0   0   1   1   1   0   1   1

Soit : 100 111 011

Solution 2 :
Il suffit de diviser le nombre par 2, puis son résultat par 2 et ainsi de suite jusqu’à la dernière division.

conversion décimales binairesIl suffit de reprendre les chiffres dans le sens de la flèche ce qui fait 100 111 011

Puissances de 2 :

2¹           2
2²           4
2³           8
2⁴          16
2⁵          32
2⁶          64
2⁷         128
2⁸         256
2⁹         512
2¹⁰       1024
2¹¹       2048
2¹²       4096
2¹³       8192
2¹⁴      16384
2¹⁵      32768
2¹⁶      65536
2¹⁷     131072
2¹⁸     262144
2¹⁹     524288
2²⁰    1048576
2²¹    2097152
2²²    4194304

Installation de QGIS (Quantum GIS) sur Ubuntu

QGIS – Quantum GIS

Logo de QGis
Logo de QGis

J’ai décidé d’installer QGIS 2.14 (GIS système d’information géographique) sur une Ubuntu, plus par curiosité que par besoin. Si site officiel est riche en documentations, je ne les trouve pas toujours très explicites. Une fois installé, j’ai pu commencer à tester en m’appuyant sur la documentation… Sauf lorsque j’ai voulu importer une cartographie avec des extensions propriétaires, la documentation ne m’a été d’aucune aide. Les options proposées dans l’aide n’y sont pas, où peut-être sont-elles ailleurs, où peut-être la documentation est basée sur version antérieure sans tenir compte de l’évolution…

Bref, voici comment installer le plus simplement possible QGIS 2.14 sur une Ubuntu. Si je persévère, je ferai, peut-être, d’autres tuto sur le sujet ! Cliquer sur lire la suite pour le tutoriel.

Pour commencer, on rajoute les dépôts dans le fichier sources.list

sudo nano /etc/apt/sources.list

Ajoutez les lignes suivantes, bien entendu, si vous avez une Ubuntu « Precise », vous remplacez « trusty » par « precise »

## Pour QGIS
deb http://qgis.org/ubuntugis trusty main
deb-src http://qgis.org/ubuntugis trusty main
deb http://ppa.launchpad.net/ubuntugis/ubuntugis-unstable/ubuntu trusty main

Puis pour mettre à jour les infos sur les paquets.

sudo apt-get update

Si vous avez le message d’erreur ci-dessous, pas de panique…

W: Erreur de GPG : http://qgis.org trusty InRelease : Les signatures suivantes n'ont pas pu être vérifiées car la clé publique n'est pas disponible : NO_PUBKEY 3FF5FFCAD71472C4

Il suffit de vérifier la clé publique dont le n° ici est 3FF5FFCAD71472C4.

sudo wget -O - http://qgis.org/downloads/qgis-2015.gpg.key | gpg --import

Vous devez optenir quelque chose ressemble à ce qui est ci-dessous.

--2016-05-16 11:02:43--  http://qgis.org/downloads/qgis-2015.gpg.key
Résolution de qgis.org (qgis.org)... 104.27.138.220, 104.27.139.220
Connexion vers qgis.org (qgis.org)|104.27.138.220|:80... connecté.
requête HTTP transmise, en attente de la réponse... 200 OK
Taille : 1890 (1,8K) [application/pgp-keys]
Enregistre : «STDOUT»
100%[==================================================================================================>] 1 890       --.-K/s   ds 0s 
2016-05-16 11:02:44 (91,5 MB/s) - envoi vers sortie standard [1890/1890]
gpg: clef D71472C4 : « QGIS Archive Automatic Signing Key (2015) <qgis-developer@lists.osgeo.org> » n'est pas modifiée
gpg: Quantité totale traitée : 1
gpg:              non modifiées : 1

On importe la clé

gpg --export --armor 3FF5FFCAD71472C4 | sudo apt-key add -
sudo apt-get update

Bon, moi j’avais un soucis avec les deux clés…

W: Erreur de GPG : http://ppa.launchpad.net trusty InRelease : Les signatures suivantes n'ont pas pu être vérifiées car la clé publique n'est pas disponible : NO_PUBKEY 089EBE08314DF160

Comme plus haut, on ajoute la clé comme suit.

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 089EBE08314DF160
sudo apt-get update

QGIS est installé, il n’y a plus qu’à en explorer les nombreuses possibilités. Pour cela, QGIS propose un jeu de données « Alaska » inclut toutes les données SIG qui sont utilisées comme exemple et comme aperçus dans le guide de l’utilisateur, mais aussi une petite base de données GRASS ainsi que des exercices…

Geneweb – Généalogie

Geneweb est un logiciel de généalogie, ou plus précisément un serveur de généalogie.

Il s’agit d’un logiciel libre multi-plateforme (linux, bsd, windows, Mac Os X), on y accède via une interface web. On peut l’utiliser en mono poste (localhost) ou l’installer sur un serveur.

Je parle ici de geneweb sous serveur linux, pour ceux sous pc windows, j’imagine que ce doit se faire via mode graphique.
Sur un serveur, deux possibilités d’installation :

  • soit comme un traditionnel site web avec un script cgi.bin accessible via www.nom_du_serveur.fr/votre_cgi.bin/
  • soit en service, il est dans ce cas accessible via www.nom_du_serveur.fr:2317/

Vous pouvez démarrer en partant d’un fichier gedcom ou en partant de zéro.

La création de famille, l’enrichissement de l’arbre se fait simplement en remplissant des champs comme sur l’exemple de saisie ci-dessous :

Capture d'écran du logiciel Geneweb montrant deux formulaires : « Ajouter famille » et « Modifier personne ».
Interface de saisie du logiciel de généalogie Geneweb – Ajout de famille et modification d’une personne.

Les points forts de GeneWeb sont les suivants Interface Web

  • Affichage dynamique
  • Calculs de parenté et de consanguinité
  • Polyglotte
  • Correction d’orthographe
  • Titres de noblesse
  • Mise à jour et protection des informations
  • Personnalisation (couleur de fond, etc)
  • Importation et exportation de fichiers GEDCOM
  • Autres : Historique des mises à jour, Dictionnaire des lieux, Chronique familiale, Forum de la base de données, Statistiques, Anniversaires, Calendriers

Pour certaines tâches spécifiques, si vous avez directement la main sur votre serveur, qu’il est muni d’une interface graphique, d’un écran et un clavier, vous y accéderez par le port 2316 www.localhost:2316/

Si votre serveur est hébergé ou comme moi, n’a pas de clavier, ni écran, ni interface graphique… se sera la ligne de commande.

Amélioration, maintenance.

Le fichier avec l’extension « .gwf » contient la configuration pour une base de données. Si votre arbre s’appelle trucmuche son fichier de configuration sera « trucmuche.gwf ».

Exemple pour trucmuche.gwf

# File generated by "setup"
default_lang=
max_anc_level=10
max_desc_level=14
max_anc_tree=12
max_desc_tree=12
history=yes
images_path=//var/www/geneweb/trucmuche/gw/images/trucmuche/
hide_advanced_request=yes
friend_passwd=NUP[/b0R65,ID2
wizard_passwd=9k?rW_-C/&FyCA
wizard_just_friend=no
hide_private_names=yes
can_send_image=yes
renamed=

Vous y trouvez entre autres le chemin du dossier dans lequel vous souhaitez que vos images soient chargées ainsi que les mots de passe Ami (mode lecture) et Magicien (administrateur)

Spécifier des utilisateurs Amis et Magiciens
Créez 2 fichiers texte avec votre éditeur préféré, le nom et l’extension n’ont pas d’importance, du moins sous linux car je suppose que sous windows l’extension doit avoir son importance, à confimer…
Prenons pour exemple « amitrucmuche.auth » et « magitrucmuche.auth »

Dans le premier, vous mettez « les_noms_amis:mot_de_passe » et sauvegardez dans le même dossier ou se trouve trucmuche.gwf, dans le second, vous faites la même chose avec « les_noms_admin:mot_de_passe ».
Exemple :

pierre:u]<AYj$c*=>''4
paul:$D%E-=B{5m$z,v
jacques:DLX2F_qZx7=Ei#

Puis modifiez dans votre fichier « trucmuche.gwf » les lignes suivantes

#friend_passwd=
#wizard_passwd=
friend_passwd_file= amitrucmuche.auth
wizard_passwd_file=magitrucmuche.auth

Nettoyer la base de données
De temps à autres, et à force d’enrichir, modifier, supprimer… la base de données nécessite d’un nettoyage.

– Nettoyage light, on utilise la commande consang, et c’est tout!

consang trucmuche

– Nettoyage, plus blanc que blanc avec les commandes gwu et gwc, c’est un peu plus long…

gwu trucmuche > trucmuche.gw
gwc trucmuche.gw -o machintruc

Vérifier que « machintruc » est correct et s’il l’est, vous pouvez supprimer trucmuche.gwf, trucmuche.gwo (qui vient d’être créé) et trucmuche.gw (sauf si vous souhaitez le garder comme sauvegarde)

rm -Rf  trucmuche.gwf trucmuche.gwo trucmuche.gw

Puis renommer machintruc

mv machintruc.gwb trucmumuche.gwb

Sauvegarder

gwu trucmumuche > trucmumuche.gw

Restaurer

gwc  trucmumuche.gw -o  trucmumuche

Importer un GEDCOM

ged2gwb trucmuche.ged -o trucmuche

Exporter ver un GEDCOM

gwb2ged trucmuche [options]

Le man pour les options (avec ma modeste traduction)

man gwb2ged
-help  aide de ligne de commande

-o <ged>
       Nom du fichier de sortie (par défaut: a.ged)

-charset [ASCII | ANSEL]:
       Set charset. Par défaut est ASCII. Attention: la valeur ANSEL fonctionne correctement que sur iso-8859-1 bases de données codées.

-o <ged>
       Nom du fichier de sortie (par défaut: a.ged)

-mem   économiser de l'espace mémoire, mais plus lent

-a <1st_name> [num] <nom>
       sélectionnez les ancêtres de

-d <1st_name> [num] <nom>
       sélectionnez les descendants de

-aws <1st_name> [num] <nom>
       sélectionnez les ancêtres de... avec les frères et sœurs

-s <nom>
       sélectionnez ce patronyme (option utilisable plusieurs fois)

-nsp   pas les parents ni conjoints (pour les options -s et -d)

-nn    aucune note (base de données)

-c <num>
       Quand une personne est né il ya moins de <num> années, elle n'est pas exportée sauf si elle est publique. Tous les conjoints et descendants sont également censurés.

Voilà de quoi bien avancer en généalogie avec Geneweb.