{"config":{"indexing":"full","lang":["en"],"min_search_length":3,"prebuild_index":false,"separator":"[\\s\\-]+"},"docs":[{"location":"","text":"Savanewiki, le wiki de savaneprod.fr savaneprod.fr a \u00e9t\u00e9 cr\u00e9\u00e9 par curiosit\u00e9 d'abord. Et puis p\u00e9rennis\u00e9 pour garder une souverainet\u00e9 sur la vie num\u00e9rique de la famille qui l'utilise : Un Synology sur lequel est install\u00e9 docker et Nextcloud dedans. Un domaine enregistr\u00e9 chez gandi.net Certificats TLS enregistr\u00e9s chez Let's encrypt . Des courriels g\u00e9r\u00e9s par Migadu . Deux PC sous pop!_os . Un Mac avec un Time Machine qui sauvegarde sur le Synology. Des sauvegardes externalis\u00e9es gr\u00e2ce \u00e0 Borg Backup .","title":"Home"},{"location":"#savanewiki-le-wiki-de-savaneprodfr","text":"savaneprod.fr a \u00e9t\u00e9 cr\u00e9\u00e9 par curiosit\u00e9 d'abord. Et puis p\u00e9rennis\u00e9 pour garder une souverainet\u00e9 sur la vie num\u00e9rique de la famille qui l'utilise : Un Synology sur lequel est install\u00e9 docker et Nextcloud dedans. Un domaine enregistr\u00e9 chez gandi.net Certificats TLS enregistr\u00e9s chez Let's encrypt . Des courriels g\u00e9r\u00e9s par Migadu . Deux PC sous pop!_os . Un Mac avec un Time Machine qui sauvegarde sur le Synology. Des sauvegardes externalis\u00e9es gr\u00e2ce \u00e0 Borg Backup .","title":"Savanewiki, le wiki de savaneprod.fr"},{"location":"about/","text":"Je suis joignable \u00e0 savanewiki.jf[at]savaneprod.fr . Clef PGP: -----BEGIN PGP PUBLIC KEY BLOCK----- xjMEZQNvlxYJKwYBBAHaRw8BAQdADoAhdyJQN7eaezxEuPRgAdwDrTllPt1iSstm FTPsoDDNFUpGIDxqZkBzYXZhbmVwcm9kLmZyPsKJBBMWCAAxFiEEQiGqSUxYk8/C tTXN28NxXcaN35UFAmUDb5cCGwMECwkIBwUVCAkKCwUWAgMBAAAKCRDbw3Fdxo3f lWfLAP4sefmkn1kFT3mS+bgoCyZqsDyHSIt/CRx1TMLxm9GJTAEA1ZbmYj2S1m4I ul91EH9PMCH6cXOw9CTjwW2ehm5f8AnOOARlA2+XEgorBgEEAZdVAQUBAQdAXkK7 YF1FUE93x+RtLhnsZ7UTqXv8197M7LoECRluriEDAQgHwngEGBYIACAWIQRCIapJ TFiTz8K1Nc3bw3Fdxo3flQUCZQNvlwIbDAAKCRDbw3Fdxo3flQgjAP4qdGIlGhH6 MdiKnExcYsqo6JAJjaBU+aHFlonnTzvHmAEAil+lpNdm5oxQ/vGrHHbdXP9CMQSn wQnRURmbliaQWgk= =ob9+ -----END PGP PUBLIC KEY BLOCK-----","title":"About"},{"location":"Ansible/2023-10-01-nextcloud-docker-update-from-ansible/","text":"Mise \u00e0 jour de Nextcloud docker par Ansible Pr\u00e9requis Se connecter en SSH au Synology \u00e0 l\u2019aide d\u2019une clef asym\u00e9trique. Le playbook --- - name: Mise \u00e0 jour du conteneur Nextcloud hosts: savaneprod.fr vars: nc_version: 27.1.3 tasks: - name: Modification de la versions dans le docker-compose ansible.builtin.lineinfile: path: /volume1/nextcloud/docker-compose.yaml backrefs: true backup: false state: present regexp: \"^ image: nextcloud:\" line: \" image: nextcloud:{{ nc_version }}\" - name: \"T\u00e9l\u00e9chargement de l'image nextcloud: {{ nc_version }}\" community.docker.docker_image: # Needed on DSM : pip3 install docker name: nextcloud source: pull tag: '{{ nc_version }}' - name: Compose down & compose up detached # Needed on DSM : pip3 install docker-compose community.docker.docker_compose: project_src: \"/volume1/nextcloud\" recreate: smart - name: Pause de 30 secondes ansible.builtin.pause: seconds: 30 - name: Pause en attendant la remont\u00e9e des conteneurs ansible.builtin.pause: minutes: 2 - name: \"Mise \u00e0 jour de la base de donn\u00e9es\" community.docker.docker_container_exec: container: nextcloud_app_1 tty: true user: www-data command: \"{{ item }}\" loop: - \"php occ db:add-missing-columns\" - \"php occ db:add-missing-indices\" - \"php occ db:add-missing-primary-keys\" - name: Modification du fichier .htaccess pour Mac tags: caldav ansible.builtin.lineinfile: path: /volume1/nextcloud/data/.htaccess backup: false state: present search_string: \"{{ item.search_string }}\" line: \"{{ item.line }}\" loop: - { search_string: 'RewriteRule ^\\.well-known/carddav', line: ' RewriteRule ^\\.well-known/carddav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L]' } - { search_string: 'RewriteRule ^\\.well-known/caldav', line: ' RewriteRule ^\\.well-known/caldav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L]' } => Cette fa\u00e7on de faire renvoi un probl\u00e8me d'int\u00e9grit\u00e9 sur le fichier config.php.","title":"Mise \u00e0 jour de Nextcloud docker par Ansible"},{"location":"Ansible/2023-10-01-nextcloud-docker-update-from-ansible/#mise-a-jour-de-nextcloud-docker-par-ansible","text":"","title":"Mise \u00e0 jour de Nextcloud docker par Ansible"},{"location":"Ansible/2023-10-01-nextcloud-docker-update-from-ansible/#prerequis","text":"Se connecter en SSH au Synology \u00e0 l\u2019aide d\u2019une clef asym\u00e9trique.","title":"Pr\u00e9requis"},{"location":"Ansible/2023-10-01-nextcloud-docker-update-from-ansible/#le-playbook","text":"--- - name: Mise \u00e0 jour du conteneur Nextcloud hosts: savaneprod.fr vars: nc_version: 27.1.3 tasks: - name: Modification de la versions dans le docker-compose ansible.builtin.lineinfile: path: /volume1/nextcloud/docker-compose.yaml backrefs: true backup: false state: present regexp: \"^ image: nextcloud:\" line: \" image: nextcloud:{{ nc_version }}\" - name: \"T\u00e9l\u00e9chargement de l'image nextcloud: {{ nc_version }}\" community.docker.docker_image: # Needed on DSM : pip3 install docker name: nextcloud source: pull tag: '{{ nc_version }}' - name: Compose down & compose up detached # Needed on DSM : pip3 install docker-compose community.docker.docker_compose: project_src: \"/volume1/nextcloud\" recreate: smart - name: Pause de 30 secondes ansible.builtin.pause: seconds: 30 - name: Pause en attendant la remont\u00e9e des conteneurs ansible.builtin.pause: minutes: 2 - name: \"Mise \u00e0 jour de la base de donn\u00e9es\" community.docker.docker_container_exec: container: nextcloud_app_1 tty: true user: www-data command: \"{{ item }}\" loop: - \"php occ db:add-missing-columns\" - \"php occ db:add-missing-indices\" - \"php occ db:add-missing-primary-keys\" - name: Modification du fichier .htaccess pour Mac tags: caldav ansible.builtin.lineinfile: path: /volume1/nextcloud/data/.htaccess backup: false state: present search_string: \"{{ item.search_string }}\" line: \"{{ item.line }}\" loop: - { search_string: 'RewriteRule ^\\.well-known/carddav', line: ' RewriteRule ^\\.well-known/carddav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L]' } - { search_string: 'RewriteRule ^\\.well-known/caldav', line: ' RewriteRule ^\\.well-known/caldav https://%{SERVER_NAME}/remote.php/dav/ [R=301,L]' } => Cette fa\u00e7on de faire renvoi un probl\u00e8me d'int\u00e9grit\u00e9 sur le fichier config.php.","title":"Le playbook"},{"location":"Ansible/2023-11-14-savanewiki-plubication/","text":"Publication du build mkdocs de Savanewiki via Ansible Rsync \u00e9tant compliqu\u00e9 \u00e0 utilser avec Synology. Utiliser Gitea pour t\u00e9l\u00e9charger les fichiers au bon endroit, un peu tordu. J'ai d\u00e9cid\u00e9 d'utiliser Ansible pour publier les builds de Savanewiki. Toujours parce que rsync n'est pas standard avec Synology, je n'ai pas cherch\u00e9 \u00e0 utiliser le module ansible.posix.synchronize . Ce n'est pas tr\u00e8s efficace d'un point de vue du m\u00e9canisme, mais \u00e7a l'est d'un point de vue simplicit\u00e9 et temps de mise en place. Le playbook ansible --- - name: D\u00e9ploiement de SavaneWiki hosts: savaneprod.fr tasks: - name: Remove dest files ansible.builtin.file: path: /volume1/web/docs/ state: absent - name: Copie des fichier de site/ ansible.builtin.copy: dest: /volume1/web/docs/ group: http mode: 600 owner: root src: \"{{ playbook_dir }}/../site/\"","title":"Publication de Savanewiki"},{"location":"Ansible/2023-11-14-savanewiki-plubication/#publication-du-build-mkdocs-de-savanewiki-via-ansible","text":"Rsync \u00e9tant compliqu\u00e9 \u00e0 utilser avec Synology. Utiliser Gitea pour t\u00e9l\u00e9charger les fichiers au bon endroit, un peu tordu. J'ai d\u00e9cid\u00e9 d'utiliser Ansible pour publier les builds de Savanewiki. Toujours parce que rsync n'est pas standard avec Synology, je n'ai pas cherch\u00e9 \u00e0 utiliser le module ansible.posix.synchronize . Ce n'est pas tr\u00e8s efficace d'un point de vue du m\u00e9canisme, mais \u00e7a l'est d'un point de vue simplicit\u00e9 et temps de mise en place.","title":"Publication du build mkdocs de Savanewiki via Ansible"},{"location":"Ansible/2023-11-14-savanewiki-plubication/#le-playbook-ansible","text":"--- - name: D\u00e9ploiement de SavaneWiki hosts: savaneprod.fr tasks: - name: Remove dest files ansible.builtin.file: path: /volume1/web/docs/ state: absent - name: Copie des fichier de site/ ansible.builtin.copy: dest: /volume1/web/docs/ group: http mode: 600 owner: root src: \"{{ playbook_dir }}/../site/\"","title":"Le playbook ansible"},{"location":"Linux/2019-07-09-manipulations-LVM/","text":"Manipulation de volumes LVM Commandes pour avoir des informations sur les volumes : Lister pvscan, vgscan, lvscan Obtenir des informations sur les volumes pvs, vgs, lvs Obtenir des informations sur un volume pvdisplay, vgdisplay, lvdisplay Tout d'abord il faut commencer par le redimensionnement du volume physique pvresize /dev/sdc * Il est inutile de rentrer des option ou des arguments, la commande se charge seule d'effectuer le redimensionnement. Et le V olume G roup prend automatiquement la taille du P hysical V olume. S'il s'agit d'un nouveau volume : * pvcreate /dev/le_volume * vgs pour afficher les Volume groups de la machine * vgextend nom_du_vg /dev/le_volume , asseoit un Volume Group sur deux disques durs. Attention ! Si un disque crash le Volume Group est mort. On d\u00e9sactive le volume logique pour pouvoir travailler dessus. lvchange -a n -> d\u00e9sactiver le volume logique On \u00e9tend le volume logique. Le volume groupe est redimensionn\u00e9 en m\u00eame temps que le volume physique. lvextend -l +100%FREE /dev/vg001/linshare Puis on rend \u00e0 nouveau actif le volume logique : lvchange -a y -> activer le volume logique \u00c0 sa r\u00e9activation, le volume remonte automatiquement selon /etc/fstab Pour finir, on redimensionne le syst\u00e8me de fichier : Attention : La commande de redimensionnement du syst\u00e8me de fichier peut changer en fonction de celui-ci. xfs_growfs /dev/mapper/vg001-linshare dans le cas de CentOS. resize2fs /dev/notre_vg dans le cas d'un syst\u00e8me de fichier en ext .","title":"Manipulations LVM"},{"location":"Linux/2019-07-09-manipulations-LVM/#manipulation-de-volumes-lvm","text":"","title":"Manipulation de volumes LVM"},{"location":"Linux/2019-07-09-manipulations-LVM/#commandes-pour-avoir-des-informations-sur-les-volumes","text":"Lister pvscan, vgscan, lvscan Obtenir des informations sur les volumes pvs, vgs, lvs Obtenir des informations sur un volume pvdisplay, vgdisplay, lvdisplay","title":"Commandes pour avoir des informations sur les volumes :"},{"location":"Linux/2019-07-09-manipulations-LVM/#tout-dabord-il-faut-commencer-par-le-redimensionnement-du-volume-physique","text":"pvresize /dev/sdc * Il est inutile de rentrer des option ou des arguments, la commande se charge seule d'effectuer le redimensionnement. Et le V olume G roup prend automatiquement la taille du P hysical V olume. S'il s'agit d'un nouveau volume : * pvcreate /dev/le_volume * vgs pour afficher les Volume groups de la machine * vgextend nom_du_vg /dev/le_volume , asseoit un Volume Group sur deux disques durs. Attention ! Si un disque crash le Volume Group est mort.","title":"Tout d'abord il faut commencer par le redimensionnement du volume physique"},{"location":"Linux/2019-07-09-manipulations-LVM/#on-desactive-le-volume-logique-pour-pouvoir-travailler-dessus","text":"lvchange -a n -> d\u00e9sactiver le volume logique","title":"On d\u00e9sactive le volume logique pour pouvoir travailler dessus."},{"location":"Linux/2019-07-09-manipulations-LVM/#on-etend-le-volume-logique-le-volume-groupe-est-redimensionne-en-meme-temps-que-le-volume-physique","text":"lvextend -l +100%FREE /dev/vg001/linshare","title":"On \u00e9tend le volume logique. Le volume groupe est redimensionn\u00e9 en m\u00eame temps que le volume physique."},{"location":"Linux/2019-07-09-manipulations-LVM/#puis-on-rend-a-nouveau-actif-le-volume-logique","text":"lvchange -a y -> activer le volume logique \u00c0 sa r\u00e9activation, le volume remonte automatiquement selon /etc/fstab","title":"Puis on rend \u00e0 nouveau actif le volume logique :"},{"location":"Linux/2019-07-09-manipulations-LVM/#pour-finir-on-redimensionne-le-systeme-de-fichier","text":"Attention : La commande de redimensionnement du syst\u00e8me de fichier peut changer en fonction de celui-ci. xfs_growfs /dev/mapper/vg001-linshare dans le cas de CentOS. resize2fs /dev/notre_vg dans le cas d'un syst\u00e8me de fichier en ext .","title":"Pour finir, on redimensionne le syst\u00e8me de fichier :"},{"location":"Synology/","text":"Liens relatifs \u00e0 l'utilisation de Synology DSM. Utiliser Dynamic DNS a.k.a DynDNS ou DDNS avec Gandi.net : https://github.com/EmixamPP/synology-ddns-gandi N\u00e9cessaire lorsque le fournisseur d'acc\u00e8s par lequel le Synology est connect\u00e9 \u00e0 Internet ne propose pas d'adresse IP publique fixe. Et lorsque le domaine est g\u00e9r\u00e9 par Gandi.net . DSM impl\u00e9mente par d\u00e9faut ce service pour OHV.","title":"Liens relatifs \u00e0 l'utilisation de Synology DSM."},{"location":"Synology/#liens-relatifs-a-lutilisation-de-synology-dsm","text":"Utiliser Dynamic DNS a.k.a DynDNS ou DDNS avec Gandi.net : https://github.com/EmixamPP/synology-ddns-gandi N\u00e9cessaire lorsque le fournisseur d'acc\u00e8s par lequel le Synology est connect\u00e9 \u00e0 Internet ne propose pas d'adresse IP publique fixe. Et lorsque le domaine est g\u00e9r\u00e9 par Gandi.net . DSM impl\u00e9mente par d\u00e9faut ce service pour OHV.","title":"Liens relatifs \u00e0 l'utilisation de Synology DSM."},{"location":"Synology/2019-09-01-access-synology-with-ssh-asymetrical-key/","text":"Se connecter en SSH au Synology \u00e0 l'aide d'une clef asym\u00e9trique. G\u00e9n\u00e9ration de la clef SSH. On g\u00e9n\u00e8re la clef : ssh-keygen -o -b 521 -t ecdsa -C \"mon login que je n'ai plus envie de saisir\" -t ecdsa pour l'agorithme de signature num\u00e9rique bas\u00e9 sur une courbe elliptique (Elliptic Curve Digital Signature Algorithm) -b 521 pour le nombre de bits. -C \"quelquechose\" pour savoir \u00e0 quoi sert cette clef. G\u00e9n\u00e9ralement on y met le nom d'utilisateur li\u00e9 ou une adresse courriel. Quand on ex\u00e9cute la commande : # Generating public/private ecdsa key pair. Enter file in which to save the key (/home/user/.ssh/id_ecdsa): /home/user/.ssh/syno_key Enter passphrase (empty for no passphrase): Enter same passphrase again: # Your identification has been saved in /home/user/.ssh/syno_key # Your public key has been saved in /home/user/.ssh/syno_key.pub # The key fingerprint is: # SHA256:IjVg4Tu0/qiLP7MC3TBFluQeEo7jQSWrKu8HgpYLai4 mon login que je n'ai plus envie de saisir # The key's randomart image is: #+---[ECDSA 521]---+ #| oo+Bo | #|.oo*o. | #|ooo.= o | #|o.++ = . | #|oo.+* . S | #|*oo..o . | #|B.... | #|E=o .o | #|==BB. . | #+----[SHA256]-----+ Ce qu'il est bon de faire. C'est de tout de suite sauvegarder le couple de clef. La priv\u00e9e surtout. Avoir d\u00e9fini un mot de passe sur la clef permet d'augmenter son niveau de protection. Il faut se souvenir du mot de passe, bien entendu. Transfert de la clef sur le Synology. \u00c7a tombe bien. Il existe aussi une commande pour \u00e7a. ssh-copy-id -i /home/user/.ssh/syno_key.pub mon-login@mon-syno On copie bien la clef publique, hein ! La clef priv\u00e9e est, et doit, rest\u00e9e priv\u00e9e bien au chaud. Particularit\u00e9 du Synology, il stocke la clef \u00e0 un endroit pas commun : /var/services/homes/mon-login/.ssh/authorized_keys Si on veut impressionner, il y a possiblit\u00e9 de transf\u00e9rer la clef de la mani\u00e8re suivante : ssh mon-login@mon-syno \"/bin/cat >> /var/services/homes/mon-login/.ssh/authorized_keys\" < /home/user/.ssh/syno_key.pub V\u00e9rifier les droits des fichiers : sudo -i chmod 711 /var/services/homes/mon-login (755 \u00e0 l'origine) chmod 700 /var/services/homes/mon-login/.ssh (700 \u00e0 l'origine) chmod 600 /var/services/homes/mon-login/.ssh/authorized_keys (644 \u00e0 l'origine) Modification de la configuration de sshd Le serveur ssh. vi /etc/ssh/sshd_config - Les trois lignes suivantes sont importantes : RSAAuthentication yes PubkeyAuthentication yes # The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 # but this is overridden so installations will only check .ssh/authorized_keys AuthorizedKeysFile .ssh/authorized_keys Red\u00e9marrage du service sshd depuis l'interface DSM.","title":"Se connecter en SSH au Synology \u00e0 l'aide d'une clef asym\u00e9trique."},{"location":"Synology/2019-09-01-access-synology-with-ssh-asymetrical-key/#se-connecter-en-ssh-au-synology-a-laide-dune-clef-asymetrique","text":"","title":"Se connecter en SSH au Synology \u00e0 l'aide d'une clef asym\u00e9trique."},{"location":"Synology/2019-09-01-access-synology-with-ssh-asymetrical-key/#generation-de-la-clef-ssh","text":"On g\u00e9n\u00e8re la clef : ssh-keygen -o -b 521 -t ecdsa -C \"mon login que je n'ai plus envie de saisir\" -t ecdsa pour l'agorithme de signature num\u00e9rique bas\u00e9 sur une courbe elliptique (Elliptic Curve Digital Signature Algorithm) -b 521 pour le nombre de bits. -C \"quelquechose\" pour savoir \u00e0 quoi sert cette clef. G\u00e9n\u00e9ralement on y met le nom d'utilisateur li\u00e9 ou une adresse courriel. Quand on ex\u00e9cute la commande : # Generating public/private ecdsa key pair. Enter file in which to save the key (/home/user/.ssh/id_ecdsa): /home/user/.ssh/syno_key Enter passphrase (empty for no passphrase): Enter same passphrase again: # Your identification has been saved in /home/user/.ssh/syno_key # Your public key has been saved in /home/user/.ssh/syno_key.pub # The key fingerprint is: # SHA256:IjVg4Tu0/qiLP7MC3TBFluQeEo7jQSWrKu8HgpYLai4 mon login que je n'ai plus envie de saisir # The key's randomart image is: #+---[ECDSA 521]---+ #| oo+Bo | #|.oo*o. | #|ooo.= o | #|o.++ = . | #|oo.+* . S | #|*oo..o . | #|B.... | #|E=o .o | #|==BB. . | #+----[SHA256]-----+ Ce qu'il est bon de faire. C'est de tout de suite sauvegarder le couple de clef. La priv\u00e9e surtout. Avoir d\u00e9fini un mot de passe sur la clef permet d'augmenter son niveau de protection. Il faut se souvenir du mot de passe, bien entendu.","title":"G\u00e9n\u00e9ration de la clef SSH."},{"location":"Synology/2019-09-01-access-synology-with-ssh-asymetrical-key/#transfert-de-la-clef-sur-le-synology","text":"\u00c7a tombe bien. Il existe aussi une commande pour \u00e7a. ssh-copy-id -i /home/user/.ssh/syno_key.pub mon-login@mon-syno On copie bien la clef publique, hein ! La clef priv\u00e9e est, et doit, rest\u00e9e priv\u00e9e bien au chaud. Particularit\u00e9 du Synology, il stocke la clef \u00e0 un endroit pas commun : /var/services/homes/mon-login/.ssh/authorized_keys Si on veut impressionner, il y a possiblit\u00e9 de transf\u00e9rer la clef de la mani\u00e8re suivante : ssh mon-login@mon-syno \"/bin/cat >> /var/services/homes/mon-login/.ssh/authorized_keys\" < /home/user/.ssh/syno_key.pub V\u00e9rifier les droits des fichiers : sudo -i chmod 711 /var/services/homes/mon-login (755 \u00e0 l'origine) chmod 700 /var/services/homes/mon-login/.ssh (700 \u00e0 l'origine) chmod 600 /var/services/homes/mon-login/.ssh/authorized_keys (644 \u00e0 l'origine)","title":"Transfert de la clef sur le Synology."},{"location":"Synology/2019-09-01-access-synology-with-ssh-asymetrical-key/#modification-de-la-configuration-de-sshd","text":"","title":"Modification de la configuration de sshd"},{"location":"Synology/2019-09-01-access-synology-with-ssh-asymetrical-key/#le-serveur-ssh","text":"vi /etc/ssh/sshd_config - Les trois lignes suivantes sont importantes : RSAAuthentication yes PubkeyAuthentication yes # The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 # but this is overridden so installations will only check .ssh/authorized_keys AuthorizedKeysFile .ssh/authorized_keys","title":"Le serveur ssh."},{"location":"Synology/2019-09-01-access-synology-with-ssh-asymetrical-key/#redemarrage-du-service-sshd-depuis-linterface-dsm","text":"","title":"Red\u00e9marrage du service sshd depuis l'interface DSM."},{"location":"Synology/2019-12-16-wildcard-lets-encrypt-certificate/","text":"G\u00e9n\u00e9rer et mettre \u00e0 jour automatiquement un certificat \"wildcard\" let's encrypt. Installation de acme.sh # 1 - Beeing root SYNOPATH=\"/volume1/something\" cd $SYNOPATH git clone https://github.com/acmesh-official/acme.sh.git ./acme.sh/acme.sh --install --nocron --home $SYNOPATH/acme.sh/.acme.sh --accountemail \"admin@savaneprod.fr\" Sur DSM, les certificats se trouvent dans /usr/syno/etc/certificate/_archive/ . Mise \u00e0 jour automatique du certificat Chez Gandi Utilsation de l'API Gandi : https://github.com/acmesh-official/acme.sh/wiki/dnsapi#18-use-gandi-livedns-api Le script de mise \u00e0 jour SYNOPATH=\"/volume1/something\" jour=$(date +%Y-%m-%d) file='$SYNOPATH/Certificats/'$jour'.log' HOME_orig=$HOME HOME=\"$SYNOPATH/Certificats/.acme.sh\" export GANDI_LIVEDNS_KEY=\"la clef r\u00e9cup\u00e9r\u00e9e chez Gandi\" export SYNO_Certificate=\"savaneprod.fr cert\" export SYNO_Create=0 export SYNO_Username=\"admin_c_pas_top\" export SYNO_Password=\"Un mdp de ouf\" echo \"*********************************************\" 2>&1 | tee -a $file echo \" Mise \u00e0 jour du certificat *.savaneprod.fr\" 2>&1 | tee -a $file echo \"*********************************************\" 2>&1 | tee -a $file bash $SYNOPATH/Certificats/acme.sh/acme.sh --home $HOME --renew -d savaneprod.fr -d '*.savaneprod.fr' --dns dns_gandi_livedns --force --log 2>&1 | tee -a $file bash $SYNOPATH/Certificats/acme.sh/acme.sh --home $HOME -d savaneprod.fr -d \"*.savaneprod.fr\" --deploy --deploy-hook synology_dsm --log 2>&1 | tee -a $file echo \"---------------------------------\" 2>&1 | tee -a $file echo \" Fin du script de mise \u00e0 jour.\" 2>&1 | tee -a $file echo \"*********************************\" 2>&1 | tee -a $file La conf dans DSM dans le planificateur de t\u00e2ches J'ai finalement d\u00e9cid\u00e9 de renouveler tous les mois parce que le Synology propose tous les 3 mois mais la dur\u00e9e de vie du certificat est l\u00e9g\u00e8rement inf\u00e9rieure. Et je n'ai pas cherch\u00e9 \u00e0 configurer le renouvellement tous les deux mois. Ex\u00e9cution du script. Il faut bien entendu que le script ait la permission d'\u00e9x\u00e9cution configur\u00e9e.","title":"G\u00e9n\u00e9rer et mettre \u00e0 jour automatiquement un certificat \"wildcard\" let's encrypt."},{"location":"Synology/2019-12-16-wildcard-lets-encrypt-certificate/#generer-et-mettre-a-jour-automatiquement-un-certificat-wildcard-lets-encrypt","text":"","title":"G\u00e9n\u00e9rer et mettre \u00e0 jour automatiquement un certificat \"wildcard\" let's encrypt."},{"location":"Synology/2019-12-16-wildcard-lets-encrypt-certificate/#installation-de-acmesh","text":"# 1 - Beeing root SYNOPATH=\"/volume1/something\" cd $SYNOPATH git clone https://github.com/acmesh-official/acme.sh.git ./acme.sh/acme.sh --install --nocron --home $SYNOPATH/acme.sh/.acme.sh --accountemail \"admin@savaneprod.fr\" Sur DSM, les certificats se trouvent dans /usr/syno/etc/certificate/_archive/ .","title":"Installation de acme.sh"},{"location":"Synology/2019-12-16-wildcard-lets-encrypt-certificate/#mise-a-jour-automatique-du-certificat","text":"","title":"Mise \u00e0 jour automatique du certificat"},{"location":"Synology/2019-12-16-wildcard-lets-encrypt-certificate/#chez-gandi","text":"Utilsation de l'API Gandi : https://github.com/acmesh-official/acme.sh/wiki/dnsapi#18-use-gandi-livedns-api","title":"Chez Gandi"},{"location":"Synology/2019-12-16-wildcard-lets-encrypt-certificate/#le-script-de-mise-a-jour","text":"SYNOPATH=\"/volume1/something\" jour=$(date +%Y-%m-%d) file='$SYNOPATH/Certificats/'$jour'.log' HOME_orig=$HOME HOME=\"$SYNOPATH/Certificats/.acme.sh\" export GANDI_LIVEDNS_KEY=\"la clef r\u00e9cup\u00e9r\u00e9e chez Gandi\" export SYNO_Certificate=\"savaneprod.fr cert\" export SYNO_Create=0 export SYNO_Username=\"admin_c_pas_top\" export SYNO_Password=\"Un mdp de ouf\" echo \"*********************************************\" 2>&1 | tee -a $file echo \" Mise \u00e0 jour du certificat *.savaneprod.fr\" 2>&1 | tee -a $file echo \"*********************************************\" 2>&1 | tee -a $file bash $SYNOPATH/Certificats/acme.sh/acme.sh --home $HOME --renew -d savaneprod.fr -d '*.savaneprod.fr' --dns dns_gandi_livedns --force --log 2>&1 | tee -a $file bash $SYNOPATH/Certificats/acme.sh/acme.sh --home $HOME -d savaneprod.fr -d \"*.savaneprod.fr\" --deploy --deploy-hook synology_dsm --log 2>&1 | tee -a $file echo \"---------------------------------\" 2>&1 | tee -a $file echo \" Fin du script de mise \u00e0 jour.\" 2>&1 | tee -a $file echo \"*********************************\" 2>&1 | tee -a $file","title":"Le script de mise \u00e0 jour"},{"location":"Synology/2019-12-16-wildcard-lets-encrypt-certificate/#la-conf-dans-dsm-dans-le-planificateur-de-taches","text":"J'ai finalement d\u00e9cid\u00e9 de renouveler tous les mois parce que le Synology propose tous les 3 mois mais la dur\u00e9e de vie du certificat est l\u00e9g\u00e8rement inf\u00e9rieure. Et je n'ai pas cherch\u00e9 \u00e0 configurer le renouvellement tous les deux mois. Ex\u00e9cution du script. Il faut bien entendu que le script ait la permission d'\u00e9x\u00e9cution configur\u00e9e.","title":"La conf dans DSM dans le planificateur de t\u00e2ches"},{"location":"Synology/2020-12-04-borg-backup/","text":"La sauvegarde de savanecloud.fr J'ai d\u00e9couvert \"Borg\" lors du stage concluant ma formation de reconversion professionnelle. L'outil est simple, efficace, disponible sur Synology DSM et il existe des fournisseurs de services sp\u00e9cialis\u00e9s chez lesquels, on peut externaliser nos sauvegardes. Mais me direz-vous pourquoi externaliser des sauvegardes ? Beh ouais, avec un NAS en RAID 1 j'ai peu de risque de perdre mes donn\u00e9es. Effectivement. Mais le risque existe. Mat\u00e9rialis\u00e9 par un cambriolage ou une destruction malencontreuse dudit NAS. Bref. Un jour j'ai eu peur et j'ai pris au s\u00e9rieux la sauvegarde en dehors du cadre professionnel. Et bien entendu, laisser faire le boulot par Google, Dropbox, feu Hubic ou Microsoft ne me plaisais pas beaucoup. Borg backup : https://github.com/borgbackup/borg/ BorgBase : https://www.borgbase.com Installation de Borg sur le Synology Le d\u00e9pot de Synocommunity Le paquet n'est pas disponible par d\u00e9faut dans le d\u00e9p\u00f4t (\"repository\", dire \"ripo\" pour les franglophones) de DSM. Pour l'obtenir, il faut ajouter un d\u00e9p\u00f4t depuis les param\u00e8tres du gestionnaire de paquets de DSM. Le d\u00e9p\u00f4t que j'utilise est celui de SynoCommunity . Ensuite il suffit de raffra\u00eechir la liste des paquets disponibles et Borg Appara\u00eet. Vous noterez en bas que Borg n\u00e9cessite Python 3.11, cette d\u00e9pendance est aussi \u00e0 installer depuis le d\u00e9p\u00f4t de SynoCommunity. Script de sauvegarde avec Borg #!/bin/bash # borg init --encryption=keyfile-blake2 /volume1/Backup/borgrepolzma/ #Formatage et mise en page stars='***************************************************************************' # Pour le calcul d'ex\u00e9cutoin du script start_time=$(date +%s) log_file='/volume1/Backup/logs/'$(date +%Y-%m-%d--%Hh%M)'_borgbase.log' echo $(date +%d\\ %b\\ %Y\\ %H:%M:%S) 2>&1 | tee -a $log_file # D\u00e9finition des variables d'environnement pour simplifier les commandes # export BORG_RSH= # export BORG_REPO='borgserver:/borgrepo' export BORG_REPO='borgserver:borgrepo' export BORG_CACHE_DIR='' # Cron n'a pas de $HOME export HOME=/root # Suite l'erreur \"Attempting to access a previously unknown unencrypted repository!\" # Apparue le 28/05/2020 export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes printf '\\n%s\\n%s\\n%s\\n' $stars \"D\u00e9but de la sauvegarde \" $stars 2>&1 | tee -a $log_file # Pr\u00e9paration de la sauvegarde du nextcloud docker exec -tiu www-data nextcloud_app_1 php occ maintenance:mode --on 2>&1 | tee -a $log_file sleep 1m 2>&1 | tee -a $log_file # Dump de la base de donn\u00e9es Postgres docker exec -i nextcloud_db_1 /usr/bin/pg_dump -U nextcloud nextcloud | gzip -9 > /volume1/nextcloud/db_dump.sql.gz 2>&1 | tee -a $log_file # Restaurer la BDD # docker exec nextcloud_db_1 pg_restore -U postgres -d nexcloud /backups/db_dump.sql /usr/local/bin/borg create \\ --one-file-system \\ --stats \\ --compression lz4 \\ ::{now:%Y-%m-%d--%Hh%M} \\ /volume1/dir1 \\ /volume1/dir2 \\ /volume1/nextcloud \\ --exclude /volume1/nextcloud/db \\ 2>&1 | tee -a $log_file # ne pas sauvegarder les fichiers du conteneur postgres #--exclude /volume1/nextcloud/db \\ # Fin de la sauvegarde docker exec -tiu www-data nextcloud_app_1 php occ maintenance:mode --off 2>&1 | tee -a $log_file printf '\\n%s\\n%s\\n%s\\n' $stars \"PRUNE\" $stars 2>&1 | tee -a $log_file # Keep 31 end of day, 0 additional end of week archives, and 0 end of month archive /usr/local/bin/borg prune -v --list --stats --keep-daily=31 --keep-weekly=0 --keep-monthly=0 2>&1 | tee -a $log_file printf '\\n%s\\n' '--- Fin de la sauvegarde ---' 2>&1 | tee -a $log_file printf '\\n%s\\n%s\\n%s\\n' $stars \"borg info\" $stars >> $log_file # Pour le mail envoy\u00e9 en fin par le Task Scheduler Synology /usr/local/bin/borg info borgserver:borgrepo >> $log_file printf '\\n%s\\n%s\\n%s\\n' $stars \"...Suppression des logs de plus de 200 jours...\" $stars 2>&1 | tee -a $log_file find /volume1/Backup/logs -mtime +60 -exec rm -f {} \\; 2>&1 | tee -a $log_file timestamp=$(date +%s) TZ='Europe/Paris' printf '%s\\nNous sommes le %(%d %b %Y)T et il est %(%H:%M:%S)T.\\n%s\\n' $stars $timestamp $timestamp $stars 2>&1 | tee -a $log_file # Calcul du temps d'ex\u00e9cution du script end_time=$(date +%s) exec_time=$(($end_time - $start_time)) printf '\\n%s\\n' $stars TZ='Europe/Paris' printf \"L'ex\u00e9cution du script a dur\u00e9 %(%Hh%Mm%Ss)T\\n\" $exec_time 2>&1 | tee -a $log_file Le service qui me permet d'externaliser facilement les sauvegardes, est BorgBase .","title":"Sauvegarde externalis\u00e9e gr\u00e2ce \u00e0 Borg Backup"},{"location":"Synology/2020-12-04-borg-backup/#la-sauvegarde-de-savanecloudfr","text":"J'ai d\u00e9couvert \"Borg\" lors du stage concluant ma formation de reconversion professionnelle. L'outil est simple, efficace, disponible sur Synology DSM et il existe des fournisseurs de services sp\u00e9cialis\u00e9s chez lesquels, on peut externaliser nos sauvegardes. Mais me direz-vous pourquoi externaliser des sauvegardes ? Beh ouais, avec un NAS en RAID 1 j'ai peu de risque de perdre mes donn\u00e9es. Effectivement. Mais le risque existe. Mat\u00e9rialis\u00e9 par un cambriolage ou une destruction malencontreuse dudit NAS. Bref. Un jour j'ai eu peur et j'ai pris au s\u00e9rieux la sauvegarde en dehors du cadre professionnel. Et bien entendu, laisser faire le boulot par Google, Dropbox, feu Hubic ou Microsoft ne me plaisais pas beaucoup. Borg backup : https://github.com/borgbackup/borg/ BorgBase : https://www.borgbase.com","title":"La sauvegarde de savanecloud.fr"},{"location":"Synology/2020-12-04-borg-backup/#installation-de-borg-sur-le-synology","text":"","title":"Installation de Borg sur le Synology"},{"location":"Synology/2020-12-04-borg-backup/#le-depot-de-synocommunity","text":"Le paquet n'est pas disponible par d\u00e9faut dans le d\u00e9p\u00f4t (\"repository\", dire \"ripo\" pour les franglophones) de DSM. Pour l'obtenir, il faut ajouter un d\u00e9p\u00f4t depuis les param\u00e8tres du gestionnaire de paquets de DSM. Le d\u00e9p\u00f4t que j'utilise est celui de SynoCommunity . Ensuite il suffit de raffra\u00eechir la liste des paquets disponibles et Borg Appara\u00eet. Vous noterez en bas que Borg n\u00e9cessite Python 3.11, cette d\u00e9pendance est aussi \u00e0 installer depuis le d\u00e9p\u00f4t de SynoCommunity.","title":"Le d\u00e9pot de Synocommunity"},{"location":"Synology/2020-12-04-borg-backup/#script-de-sauvegarde-avec-borg","text":"#!/bin/bash # borg init --encryption=keyfile-blake2 /volume1/Backup/borgrepolzma/ #Formatage et mise en page stars='***************************************************************************' # Pour le calcul d'ex\u00e9cutoin du script start_time=$(date +%s) log_file='/volume1/Backup/logs/'$(date +%Y-%m-%d--%Hh%M)'_borgbase.log' echo $(date +%d\\ %b\\ %Y\\ %H:%M:%S) 2>&1 | tee -a $log_file # D\u00e9finition des variables d'environnement pour simplifier les commandes # export BORG_RSH= # export BORG_REPO='borgserver:/borgrepo' export BORG_REPO='borgserver:borgrepo' export BORG_CACHE_DIR='' # Cron n'a pas de $HOME export HOME=/root # Suite l'erreur \"Attempting to access a previously unknown unencrypted repository!\" # Apparue le 28/05/2020 export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes printf '\\n%s\\n%s\\n%s\\n' $stars \"D\u00e9but de la sauvegarde \" $stars 2>&1 | tee -a $log_file # Pr\u00e9paration de la sauvegarde du nextcloud docker exec -tiu www-data nextcloud_app_1 php occ maintenance:mode --on 2>&1 | tee -a $log_file sleep 1m 2>&1 | tee -a $log_file # Dump de la base de donn\u00e9es Postgres docker exec -i nextcloud_db_1 /usr/bin/pg_dump -U nextcloud nextcloud | gzip -9 > /volume1/nextcloud/db_dump.sql.gz 2>&1 | tee -a $log_file # Restaurer la BDD # docker exec nextcloud_db_1 pg_restore -U postgres -d nexcloud /backups/db_dump.sql /usr/local/bin/borg create \\ --one-file-system \\ --stats \\ --compression lz4 \\ ::{now:%Y-%m-%d--%Hh%M} \\ /volume1/dir1 \\ /volume1/dir2 \\ /volume1/nextcloud \\ --exclude /volume1/nextcloud/db \\ 2>&1 | tee -a $log_file # ne pas sauvegarder les fichiers du conteneur postgres #--exclude /volume1/nextcloud/db \\ # Fin de la sauvegarde docker exec -tiu www-data nextcloud_app_1 php occ maintenance:mode --off 2>&1 | tee -a $log_file printf '\\n%s\\n%s\\n%s\\n' $stars \"PRUNE\" $stars 2>&1 | tee -a $log_file # Keep 31 end of day, 0 additional end of week archives, and 0 end of month archive /usr/local/bin/borg prune -v --list --stats --keep-daily=31 --keep-weekly=0 --keep-monthly=0 2>&1 | tee -a $log_file printf '\\n%s\\n' '--- Fin de la sauvegarde ---' 2>&1 | tee -a $log_file printf '\\n%s\\n%s\\n%s\\n' $stars \"borg info\" $stars >> $log_file # Pour le mail envoy\u00e9 en fin par le Task Scheduler Synology /usr/local/bin/borg info borgserver:borgrepo >> $log_file printf '\\n%s\\n%s\\n%s\\n' $stars \"...Suppression des logs de plus de 200 jours...\" $stars 2>&1 | tee -a $log_file find /volume1/Backup/logs -mtime +60 -exec rm -f {} \\; 2>&1 | tee -a $log_file timestamp=$(date +%s) TZ='Europe/Paris' printf '%s\\nNous sommes le %(%d %b %Y)T et il est %(%H:%M:%S)T.\\n%s\\n' $stars $timestamp $timestamp $stars 2>&1 | tee -a $log_file # Calcul du temps d'ex\u00e9cution du script end_time=$(date +%s) exec_time=$(($end_time - $start_time)) printf '\\n%s\\n' $stars TZ='Europe/Paris' printf \"L'ex\u00e9cution du script a dur\u00e9 %(%Hh%Mm%Ss)T\\n\" $exec_time 2>&1 | tee -a $log_file Le service qui me permet d'externaliser facilement les sauvegardes, est BorgBase .","title":"Script de sauvegarde avec Borg"},{"location":"Synology/2021-02-06-restore-time-machine-backup/","text":"Restaurer un mac depuis une sauvegarde Time machine. Acc\u00e9der au mode de r\u00e9cup\u00e9ration de OS X en restant appuyer sur Commmand +R quand le Mac red\u00e9marre et que l'\u00e9cran est gris. Quand la fen\u00eatre avec les options appara\u00eet, s\u00e9lectionner \"Utilities\" dans la barre de menu et lancer un \"Terminal\". Dans le terminal utiliser les commandes suivantes : cd /Volumes mkdir syno On monte la sauvegarde Time Machine depuis le partage du NAS Synology en saisissant la commande suivante : mount -t afp afp://timemachine:motdepasse@Savaneprod.local/Time\\ Machine /Volumes/syno Il est possible que l'adresse IP fonctionne mieux. - V\u00e9rification que le montage a fonctionn\u00e9. ls -la syno/ Maintenant on a besoin de monter \"sparsebundle\" en utilisant hdid (hard drive image driver) hdid nameOfThebundle.backupbundle Saisir le mot de passe si demand\u00e9 (si le disque ou la sauvegarde \u00e9tait chiffr\u00e9.e). Maintenant quitter le terminal et s\u00e9lectionner \"Restore\" depuis Time machine. La sauvegarde pr\u00e9sente sur le NAS doit maintenant \u00eatre visible. Suivre les instructions donn\u00e9es \u00e0 l'\u00e9cran.","title":"Restaurer un mac depuis une sauvegarde Time machine."},{"location":"Synology/2021-02-06-restore-time-machine-backup/#restaurer-un-mac-depuis-une-sauvegarde-time-machine","text":"Acc\u00e9der au mode de r\u00e9cup\u00e9ration de OS X en restant appuyer sur Commmand +R quand le Mac red\u00e9marre et que l'\u00e9cran est gris. Quand la fen\u00eatre avec les options appara\u00eet, s\u00e9lectionner \"Utilities\" dans la barre de menu et lancer un \"Terminal\". Dans le terminal utiliser les commandes suivantes : cd /Volumes mkdir syno On monte la sauvegarde Time Machine depuis le partage du NAS Synology en saisissant la commande suivante : mount -t afp afp://timemachine:motdepasse@Savaneprod.local/Time\\ Machine /Volumes/syno Il est possible que l'adresse IP fonctionne mieux. - V\u00e9rification que le montage a fonctionn\u00e9. ls -la syno/ Maintenant on a besoin de monter \"sparsebundle\" en utilisant hdid (hard drive image driver) hdid nameOfThebundle.backupbundle Saisir le mot de passe si demand\u00e9 (si le disque ou la sauvegarde \u00e9tait chiffr\u00e9.e). Maintenant quitter le terminal et s\u00e9lectionner \"Restore\" depuis Time machine. La sauvegarde pr\u00e9sente sur le NAS doit maintenant \u00eatre visible. Suivre les instructions donn\u00e9es \u00e0 l'\u00e9cran.","title":"Restaurer un mac depuis une sauvegarde Time machine."}]}