First build

This commit is contained in:
JF
2023-11-13 21:28:26 +01:00
parent 349103b31c
commit 190a0f1ac2
47 changed files with 8405 additions and 1 deletions

View File

@@ -0,0 +1,233 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><link rel="canonical" href="https://docs.savaneprod.fr/Synology/2019-09-01-access-synology-with-ssh-asymetrical-key/" />
<link rel="shortcut icon" href="../../img/favicon.ico" />
<title>Se connecter en SSH au Synology à l'aide d'une clef asymétrique. - Savanewiki</title>
<link rel="stylesheet" href="../../css/theme.css" />
<link rel="stylesheet" href="../../css/theme_extra.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" />
<script>
// Current page data
var mkdocs_page_name = "Se connecter en SSH au Synology \u00e0 l\u0027aide d\u0027une clef asym\u00e9trique.";
var mkdocs_page_input_path = "Synology/2019-09-01-access-synology-with-ssh-asymetrical-key.md";
var mkdocs_page_url = "/Synology/2019-09-01-access-synology-with-ssh-asymetrical-key/";
</script>
<!--[if lt IE 9]>
<script src="../../js/html5shiv.min.js"></script>
<![endif]-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
<script>hljs.highlightAll();</script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="../.." class="icon icon-home"> Savanewiki
</a><div role="search">
<form id ="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" title="Type search term here" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../..">Home</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Synology</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../">Liens relatifs à l'utilisation de Synology DSM.</a>
</li>
<li class="toctree-l1 current"><a class="reference internal current" href="./">Se connecter en SSH au Synology à l'aide d'une clef asymétrique.</a>
<ul class="current">
<li class="toctree-l2"><a class="reference internal" href="#generation-de-la-clef-ssh">Génération de la clef SSH.</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#transfert-de-la-clef-sur-le-synology">Transfert de la clef sur le Synology.</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#modification-de-la-configuration-de-sshd">Modification de la configuration de sshd</a>
<ul>
<li class="toctree-l3"><a class="reference internal" href="#le-serveur-ssh">Le serveur ssh.</a>
</li>
<li class="toctree-l3"><a class="reference internal" href="#redemarrage-du-service-sshd-depuis-linterface-dsm">Redémarrage du service sshd depuis l'interface DSM.</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../2019-12-16-wildcard-lets-encrypt-certificate/">Générer et mettre à jour automatiquement un certificat "wildcard" let's encrypt.</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../2020-12-04-borg-backup/">Sauvegarde externalisée grâce à Borg Backup</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../2021-02-06-restore-time-machine-backup/">Restaurer un mac depuis une sauvegarde Time machine.</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Ansible</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../Ansible/2023-10-01-nextcloud-docker-update-from-ansible/">Mise à jour de Nextcloud docker par Ansible</a>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../about/">About</a>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="Mobile navigation menu">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../..">Savanewiki</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content"><div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../.." class="icon icon-home" aria-label="Docs"></a></li>
<li class="breadcrumb-item">Synology</li>
<li class="breadcrumb-item active">Se connecter en SSH au Synology à l'aide d'une clef asymétrique.</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div class="section" itemprop="articleBody">
<h1 id="se-connecter-en-ssh-au-synology-a-laide-dune-clef-asymetrique">Se connecter en SSH au Synology à l'aide d'une clef asymétrique.</h1>
<h2 id="generation-de-la-clef-ssh">Génération de la clef SSH.</h2>
<ul>
<li>On génère la clef :</li>
</ul>
<pre><code class="language-bash">ssh-keygen -o -b 521 -t ecdsa -C &quot;mon login que je n'ai plus envie de saisir&quot;
</code></pre>
<ul>
<li><code>-t ecdsa</code> pour l'agorithme de signature numérique basé sur une courbe elliptique (Elliptic Curve Digital Signature Algorithm)</li>
<li><code>-b 521</code> pour le nombre de bits.</li>
<li>
<p><code>-C "quelquechose"</code> pour savoir à quoi sert cette clef. Généralement on y met le nom d'utilisateur lié ou une adresse courriel.</p>
</li>
<li>
<p>Quand on exécute la commande :</p>
</li>
</ul>
<pre><code class="language-bash"># 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]-----+
</code></pre>
<p>Ce qu'il est bon de faire. C'est de tout de suite sauvegarder le couple de clef. La privée surtout. Avoir défini un mot de passe sur la clef permet d'augmenter son niveau de protection. Il faut se souvenir du mot de passe, bien entendu.</p>
<h2 id="transfert-de-la-clef-sur-le-synology">Transfert de la clef sur le Synology.</h2>
<ul>
<li>Ça tombe bien. Il existe aussi une commande pour ça.</li>
</ul>
<pre><code class="language-bash">ssh-copy-id -i /home/user/.ssh/syno_key.pub mon-login@mon-syno
</code></pre>
<ul>
<li>
<p>On copie bien la clef publique, hein ! La clef privée est, et doit, restée privée bien au chaud.</p>
</li>
<li>
<p>Particularité du Synology, il stocke la clef à un endroit pas commun :</p>
</li>
</ul>
<pre><code class="language-bash">/var/services/homes/mon-login/.ssh/authorized_keys
</code></pre>
<ul>
<li>Si on veut impressionner, il y a possiblité de transférer la clef de la manière suivante :</li>
</ul>
<pre><code class="language-bash">ssh mon-login@mon-syno &quot;/bin/cat &gt;&gt; /var/services/homes/mon-login/.ssh/authorized_keys&quot; &lt; /home/user/.ssh/syno_key.pub
</code></pre>
<ul>
<li>Vérifier les droits des fichiers :</li>
<li><code>sudo -i</code></li>
<li><code>chmod 711 /var/services/homes/mon-login</code> (755 à l'origine)</li>
<li><code>chmod 700 /var/services/homes/mon-login/.ssh</code> (700 à l'origine)</li>
<li><code>chmod 600 /var/services/homes/mon-login/.ssh/authorized_keys</code> (644 à l'origine)</li>
</ul>
<h2 id="modification-de-la-configuration-de-sshd">Modification de la configuration de sshd</h2>
<h3 id="le-serveur-ssh">Le serveur ssh.</h3>
<p><code>vi /etc/ssh/sshd_config</code>
- Les trois lignes suivantes sont importantes :</p>
<pre><code class="language-bash">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
</code></pre>
<h3 id="redemarrage-du-service-sshd-depuis-linterface-dsm">Redémarrage du service sshd depuis l'interface DSM.</h3>
<p><img alt="Synology control pannel. Where to stop and start sshd service." src="../sshd_restart.png" /></p>
</div>
</div><footer>
<div class="rst-footer-buttons" role="navigation" aria-label="Footer Navigation">
<a href="../" class="btn btn-neutral float-left" title="Liens relatifs à l'utilisation de Synology DSM."><span class="icon icon-circle-arrow-left"></span> Previous</a>
<a href="../2019-12-16-wildcard-lets-encrypt-certificate/" class="btn btn-neutral float-right" title="Générer et mettre à jour automatiquement un certificat "wildcard" let's encrypt.">Next <span class="icon icon-circle-arrow-right"></span></a>
</div>
<hr/>
<div role="contentinfo">
<!-- Copyright etc -->
</div>
Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<div class="rst-versions" role="note" aria-label="Versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span><a href="../" style="color: #fcfcfc">&laquo; Previous</a></span>
<span><a href="../2019-12-16-wildcard-lets-encrypt-certificate/" style="color: #fcfcfc">Next &raquo;</a></span>
</span>
</div>
<script src="../../js/jquery-3.6.0.min.js"></script>
<script>var base_url = "../..";</script>
<script src="../../js/theme_extra.js"></script>
<script src="../../js/theme.js"></script>
<script src="../../search/main.js"></script>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,201 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><link rel="canonical" href="https://docs.savaneprod.fr/Synology/2019-12-16-wildcard-lets-encrypt-certificate/" />
<link rel="shortcut icon" href="../../img/favicon.ico" />
<title>Générer et mettre à jour automatiquement un certificat "wildcard" let's encrypt. - Savanewiki</title>
<link rel="stylesheet" href="../../css/theme.css" />
<link rel="stylesheet" href="../../css/theme_extra.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" />
<script>
// Current page data
var mkdocs_page_name = "G\u00e9n\u00e9rer et mettre \u00e0 jour automatiquement un certificat \"wildcard\" let\u0027s encrypt.";
var mkdocs_page_input_path = "Synology/2019-12-16-wildcard-lets-encrypt-certificate.md";
var mkdocs_page_url = "/Synology/2019-12-16-wildcard-lets-encrypt-certificate/";
</script>
<!--[if lt IE 9]>
<script src="../../js/html5shiv.min.js"></script>
<![endif]-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
<script>hljs.highlightAll();</script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="../.." class="icon icon-home"> Savanewiki
</a><div role="search">
<form id ="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" title="Type search term here" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../..">Home</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Synology</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../">Liens relatifs à l'utilisation de Synology DSM.</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../2019-09-01-access-synology-with-ssh-asymetrical-key/">Se connecter en SSH au Synology à l'aide d'une clef asymétrique.</a>
</li>
<li class="toctree-l1 current"><a class="reference internal current" href="./">Générer et mettre à jour automatiquement un certificat "wildcard" let's encrypt.</a>
<ul class="current">
<li class="toctree-l2"><a class="reference internal" href="#installation-de-acmesh">Installation de acme.sh</a>
</li>
<li class="toctree-l2"><a class="reference internal" href="#mise-a-jour-automatique-du-certificat">Mise à jour automatique du certificat</a>
<ul>
<li class="toctree-l3"><a class="reference internal" href="#chez-gandi">Chez Gandi</a>
</li>
<li class="toctree-l3"><a class="reference internal" href="#le-script-de-mise-a-jour">Le script de mise à jour</a>
</li>
<li class="toctree-l3"><a class="reference internal" href="#la-conf-dans-dsm-dans-le-planificateur-de-taches">La conf dans DSM dans le planificateur de tâches</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../2020-12-04-borg-backup/">Sauvegarde externalisée grâce à Borg Backup</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../2021-02-06-restore-time-machine-backup/">Restaurer un mac depuis une sauvegarde Time machine.</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Ansible</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../Ansible/2023-10-01-nextcloud-docker-update-from-ansible/">Mise à jour de Nextcloud docker par Ansible</a>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../about/">About</a>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="Mobile navigation menu">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../..">Savanewiki</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content"><div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../.." class="icon icon-home" aria-label="Docs"></a></li>
<li class="breadcrumb-item">Synology</li>
<li class="breadcrumb-item active">Générer et mettre à jour automatiquement un certificat "wildcard" let's encrypt.</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div class="section" itemprop="articleBody">
<h1 id="generer-et-mettre-a-jour-automatiquement-un-certificat-wildcard-lets-encrypt">Générer et mettre à jour automatiquement un certificat "wildcard" let's encrypt.</h1>
<h2 id="installation-de-acmesh">Installation de acme.sh</h2>
<pre><code class="language-bash"># 1 - Beeing root
SYNOPATH=&quot;/volume1/something&quot;
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 &quot;admin@savaneprod.fr&quot;
</code></pre>
<p>Sur DSM, les certificats se trouvent dans <code>/usr/syno/etc/certificate/_archive/</code>.</p>
<h2 id="mise-a-jour-automatique-du-certificat">Mise à jour automatique du certificat</h2>
<h3 id="chez-gandi">Chez Gandi</h3>
<p>Utilsation de l'API Gandi : <a href="https://github.com/acmesh-official/acme.sh/wiki/dnsapi#18-use-gandi-livedns-api">https://github.com/acmesh-official/acme.sh/wiki/dnsapi#18-use-gandi-livedns-api</a></p>
<h3 id="le-script-de-mise-a-jour">Le script de mise à jour</h3>
<pre><code class="language-bash">SYNOPATH=&quot;/volume1/something&quot;
jour=$(date +%Y-%m-%d)
file='$SYNOPATH/Certificats/'$jour'.log'
HOME_orig=$HOME
HOME=&quot;$SYNOPATH/Certificats/.acme.sh&quot;
export GANDI_LIVEDNS_KEY=&quot;la clef récupérée chez Gandi&quot;
export SYNO_Certificate=&quot;savaneprod.fr cert&quot;
export SYNO_Create=0
export SYNO_Username=&quot;admin_c_pas_top&quot;
export SYNO_Password=&quot;Un mdp de ouf&quot;
echo &quot;*********************************************&quot; 2&gt;&amp;1 | tee -a $file
echo &quot; Mise à jour du certificat *.savaneprod.fr&quot; 2&gt;&amp;1 | tee -a $file
echo &quot;*********************************************&quot; 2&gt;&amp;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&gt;&amp;1 | tee -a $file
bash $SYNOPATH/Certificats/acme.sh/acme.sh --home $HOME -d savaneprod.fr -d &quot;*.savaneprod.fr&quot; --deploy --deploy-hook synology_dsm --log 2&gt;&amp;1 | tee -a $file
echo &quot;---------------------------------&quot; 2&gt;&amp;1 | tee -a $file
echo &quot; Fin du script de mise à jour.&quot; 2&gt;&amp;1 | tee -a $file
echo &quot;*********************************&quot; 2&gt;&amp;1 | tee -a $file
</code></pre>
<h3 id="la-conf-dans-dsm-dans-le-planificateur-de-taches">La conf dans DSM dans le planificateur de tâches</h3>
<p><img alt="Planificateur de tâche, onglet &quot;General&quot;" src="../task_general-tab.png" /></p>
<p>J'ai finalement décidé de renouveler tous les mois parce que le Synology propose tous les 3 mois mais la durée de vie du certificat est légèrement inférieure. Et je n'ai pas cherché à configurer le renouvellement tous les deux mois.
<img alt="Planificateur de tâches, onglet &quot;Schedule&quot;" src="../task_Schedule-tab.png" /></p>
<p>Exécution du script. Il faut bien entendu que le script ait la permission d'éxécution configurée.
<img alt="Planificateur de tâches, onglet &quot;Task Settings&quot;" src="../task_setting-tab.png" /></p>
</div>
</div><footer>
<div class="rst-footer-buttons" role="navigation" aria-label="Footer Navigation">
<a href="../2019-09-01-access-synology-with-ssh-asymetrical-key/" class="btn btn-neutral float-left" title="Se connecter en SSH au Synology à l'aide d'une clef asymétrique."><span class="icon icon-circle-arrow-left"></span> Previous</a>
<a href="../2020-12-04-borg-backup/" class="btn btn-neutral float-right" title="Sauvegarde externalisée grâce à Borg Backup">Next <span class="icon icon-circle-arrow-right"></span></a>
</div>
<hr/>
<div role="contentinfo">
<!-- Copyright etc -->
</div>
Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<div class="rst-versions" role="note" aria-label="Versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span><a href="../2019-09-01-access-synology-with-ssh-asymetrical-key/" style="color: #fcfcfc">&laquo; Previous</a></span>
<span><a href="../2020-12-04-borg-backup/" style="color: #fcfcfc">Next &raquo;</a></span>
</span>
</div>
<script src="../../js/jquery-3.6.0.min.js"></script>
<script>var base_url = "../..";</script>
<script src="../../js/theme_extra.js"></script>
<script src="../../js/theme.js"></script>
<script src="../../search/main.js"></script>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,241 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><link rel="canonical" href="https://docs.savaneprod.fr/Synology/2020-12-04-borg-backup/" />
<link rel="shortcut icon" href="../../img/favicon.ico" />
<title>Sauvegarde externalisée grâce à Borg Backup - Savanewiki</title>
<link rel="stylesheet" href="../../css/theme.css" />
<link rel="stylesheet" href="../../css/theme_extra.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" />
<script>
// Current page data
var mkdocs_page_name = "Sauvegarde externalis\u00e9e gr\u00e2ce \u00e0 Borg Backup";
var mkdocs_page_input_path = "Synology/2020-12-04-borg-backup.md";
var mkdocs_page_url = "/Synology/2020-12-04-borg-backup/";
</script>
<!--[if lt IE 9]>
<script src="../../js/html5shiv.min.js"></script>
<![endif]-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
<script>hljs.highlightAll();</script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="../.." class="icon icon-home"> Savanewiki
</a><div role="search">
<form id ="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" title="Type search term here" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../..">Home</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Synology</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../">Liens relatifs à l'utilisation de Synology DSM.</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../2019-09-01-access-synology-with-ssh-asymetrical-key/">Se connecter en SSH au Synology à l'aide d'une clef asymétrique.</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../2019-12-16-wildcard-lets-encrypt-certificate/">Générer et mettre à jour automatiquement un certificat "wildcard" let's encrypt.</a>
</li>
<li class="toctree-l1 current"><a class="reference internal current" href="./">Sauvegarde externalisée grâce à Borg Backup</a>
<ul class="current">
<li class="toctree-l2"><a class="reference internal" href="#installation-de-borg-sur-le-synology">Installation de Borg sur le Synology</a>
<ul>
<li class="toctree-l3"><a class="reference internal" href="#le-depot-de-synocommunity">Le dépot de Synocommunity</a>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#script-de-sauvegarde-avec-borg">Script de sauvegarde avec Borg</a>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../2021-02-06-restore-time-machine-backup/">Restaurer un mac depuis une sauvegarde Time machine.</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Ansible</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../Ansible/2023-10-01-nextcloud-docker-update-from-ansible/">Mise à jour de Nextcloud docker par Ansible</a>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../about/">About</a>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="Mobile navigation menu">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../..">Savanewiki</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content"><div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../.." class="icon icon-home" aria-label="Docs"></a></li>
<li class="breadcrumb-item">Synology</li>
<li class="breadcrumb-item active">Sauvegarde externalisée grâce à Borg Backup</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div class="section" itemprop="articleBody">
<h1 id="la-sauvegarde-de-savanecloudfr">La sauvegarde de savanecloud.fr</h1>
<p>J'ai découvert "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écialisés 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ées.
Effectivement. Mais le risque existe. Matérialisé par un cambriolage ou une destruction malencontreuse dudit NAS. Bref. Un jour j'ai eu peur et j'ai pris au sérieux 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.</p>
<ul>
<li>Borg backup : https://github.com/borgbackup/borg/</li>
<li>BorgBase : https://www.borgbase.com</li>
</ul>
<h2 id="installation-de-borg-sur-le-synology">Installation de Borg sur le Synology</h2>
<h3 id="le-depot-de-synocommunity">Le dépot de Synocommunity</h3>
<p>Le paquet n'est pas disponible par défaut dans le dépôt ("repository", dire "ripo" pour les franglophones) de DSM. Pour l'obtenir, il faut ajouter un dépôt depuis les paramètres du gestionnaire de paquets de DSM. Le dépôt que j'utilise est celui de <a href="https://synocommunity.com/">SynoCommunity</a>.
<img alt="Ajout d'un dépôt dans le gestionnaire de paquets de DSM." src="../borg_synocommunity.png" />
Ensuite il suffit de raffraîchir la liste des paquets disponibles et Borg Apparaît. Vous noterez en bas que Borg nécessite Python 3.11, cette dépendance est aussi à installer depuis le dépôt de SynoCommunity.
<img alt="Fiche descriptive du paquet Borg" src="../borg_package.png" /></p>
<h2 id="script-de-sauvegarde-avec-borg">Script de sauvegarde avec Borg</h2>
<pre><code class="language-bash">#!/bin/bash
# borg init --encryption=keyfile-blake2 /volume1/Backup/borgrepolzma/
#Formatage et mise en page
stars='***************************************************************************'
# Pour le calcul d'exécutoin 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&gt;&amp;1 | tee -a $log_file
# Définition des variables d'environnement pour simplifier les commandes
# export BORG_RSH=&lt;clef privée pour sauvegarder sur le serveur distant&gt;
# export BORG_REPO='borgserver:/borgrepo'
export BORG_REPO='borgserver:borgrepo'
export BORG_CACHE_DIR='&lt;emplacement du cache de Borg&gt;'
# Cron n'a pas de $HOME
export HOME=/root
# Suite l'erreur &quot;Attempting to access a previously unknown unencrypted repository!&quot;
# Apparue le 28/05/2020
export BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes
printf '\n%s\n%s\n%s\n' $stars &quot;Début de la sauvegarde &quot; $stars 2&gt;&amp;1 | tee -a $log_file
# Préparation de la sauvegarde du nextcloud
docker exec -tiu www-data nextcloud_app_1 php occ maintenance:mode --on 2&gt;&amp;1 | tee -a $log_file
sleep 1m 2&gt;&amp;1 | tee -a $log_file
# Dump de la base de données Postgres
docker exec -i nextcloud_db_1 /usr/bin/pg_dump -U nextcloud nextcloud | gzip -9 &gt; /volume1/nextcloud/db_dump.sql.gz 2&gt;&amp;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&gt;&amp;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&gt;&amp;1 | tee -a $log_file
printf '\n%s\n%s\n%s\n' $stars &quot;PRUNE&quot; $stars 2&gt;&amp;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&gt;&amp;1 | tee -a $log_file
printf '\n%s\n' '--- Fin de la sauvegarde ---' 2&gt;&amp;1 | tee -a $log_file
printf '\n%s\n%s\n%s\n' $stars &quot;borg info&quot; $stars &gt;&gt; $log_file
# Pour le mail envoyé en fin par le Task Scheduler Synology
/usr/local/bin/borg info borgserver:borgrepo &gt;&gt; $log_file
printf '\n%s\n%s\n%s\n' $stars &quot;...Suppression des logs de plus de 200 jours...&quot; $stars 2&gt;&amp;1 | tee -a $log_file
find /volume1/Backup/logs -mtime +60 -exec rm -f {} \; 2&gt;&amp;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&gt;&amp;1 | tee -a $log_file
# Calcul du temps d'exécution du script
end_time=$(date +%s)
exec_time=$(($end_time - $start_time))
printf '\n%s\n' $stars
TZ='Europe/Paris' printf &quot;L'exécution du script a duré %(%Hh%Mm%Ss)T\n&quot; $exec_time 2&gt;&amp;1 | tee -a $log_file
</code></pre>
<p>Le service qui me permet d'externaliser facilement les sauvegardes, est <a href="https://borgbase.com">BorgBase</a>.</p>
</div>
</div><footer>
<div class="rst-footer-buttons" role="navigation" aria-label="Footer Navigation">
<a href="../2019-12-16-wildcard-lets-encrypt-certificate/" class="btn btn-neutral float-left" title="Générer et mettre à jour automatiquement un certificat "wildcard" let's encrypt."><span class="icon icon-circle-arrow-left"></span> Previous</a>
<a href="../2021-02-06-restore-time-machine-backup/" class="btn btn-neutral float-right" title="Restaurer un mac depuis une sauvegarde Time machine.">Next <span class="icon icon-circle-arrow-right"></span></a>
</div>
<hr/>
<div role="contentinfo">
<!-- Copyright etc -->
</div>
Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<div class="rst-versions" role="note" aria-label="Versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span><a href="../2019-12-16-wildcard-lets-encrypt-certificate/" style="color: #fcfcfc">&laquo; Previous</a></span>
<span><a href="../2021-02-06-restore-time-machine-backup/" style="color: #fcfcfc">Next &raquo;</a></span>
</span>
</div>
<script src="../../js/jquery-3.6.0.min.js"></script>
<script>var base_url = "../..";</script>
<script src="../../js/theme_extra.js"></script>
<script src="../../js/theme.js"></script>
<script src="../../search/main.js"></script>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

View File

@@ -0,0 +1,169 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><link rel="canonical" href="https://docs.savaneprod.fr/Synology/2021-02-06-restore-time-machine-backup/" />
<link rel="shortcut icon" href="../../img/favicon.ico" />
<title>Restaurer un mac depuis une sauvegarde Time machine. - Savanewiki</title>
<link rel="stylesheet" href="../../css/theme.css" />
<link rel="stylesheet" href="../../css/theme_extra.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" />
<script>
// Current page data
var mkdocs_page_name = "Restaurer un mac depuis une sauvegarde Time machine.";
var mkdocs_page_input_path = "Synology/2021-02-06-restore-time-machine-backup.md";
var mkdocs_page_url = "/Synology/2021-02-06-restore-time-machine-backup/";
</script>
<!--[if lt IE 9]>
<script src="../../js/html5shiv.min.js"></script>
<![endif]-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
<script>hljs.highlightAll();</script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href="../.." class="icon icon-home"> Savanewiki
</a><div role="search">
<form id ="rtd-search-form" class="wy-form" action="../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" title="Type search term here" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul>
<li class="toctree-l1"><a class="reference internal" href="../..">Home</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Synology</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../">Liens relatifs à l'utilisation de Synology DSM.</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../2019-09-01-access-synology-with-ssh-asymetrical-key/">Se connecter en SSH au Synology à l'aide d'une clef asymétrique.</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../2019-12-16-wildcard-lets-encrypt-certificate/">Générer et mettre à jour automatiquement un certificat "wildcard" let's encrypt.</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="../2020-12-04-borg-backup/">Sauvegarde externalisée grâce à Borg Backup</a>
</li>
<li class="toctree-l1 current"><a class="reference internal current" href="./">Restaurer un mac depuis une sauvegarde Time machine.</a>
<ul class="current">
</ul>
</li>
</ul>
<p class="caption"><span class="caption-text">Ansible</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../Ansible/2023-10-01-nextcloud-docker-update-from-ansible/">Mise à jour de Nextcloud docker par Ansible</a>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../../about/">About</a>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="Mobile navigation menu">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../..">Savanewiki</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content"><div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="../.." class="icon icon-home" aria-label="Docs"></a></li>
<li class="breadcrumb-item">Synology</li>
<li class="breadcrumb-item active">Restaurer un mac depuis une sauvegarde Time machine.</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div class="section" itemprop="articleBody">
<h1 id="restaurer-un-mac-depuis-une-sauvegarde-time-machine">Restaurer un mac depuis une sauvegarde Time machine.</h1>
<ul>
<li>Accéder au mode de récupération de OS X en restant appuyer sur <code>Commmand +R</code> quand le Mac redémarre et que l'écran est gris.</li>
<li>Quand la fenêtre avec les options apparaît, sélectionner "Utilities" dans la barre de menu et lancer un "Terminal".</li>
<li>Dans le terminal utiliser les commandes suivantes :</li>
</ul>
<pre><code class="language-bash">cd /Volumes
mkdir syno
</code></pre>
<ul>
<li>On monte la sauvegarde Time Machine depuis le partage du NAS Synology en saisissant la commande suivante :</li>
</ul>
<pre><code class="language-bash">mount -t afp afp://timemachine:motdepasse@Savaneprod.local/Time\ Machine /Volumes/syno
</code></pre>
<p>Il est possible que l'adresse IP fonctionne mieux.
- Vérification que le montage a fonctionné.</p>
<pre><code class="language-bash">ls -la syno/
</code></pre>
<ul>
<li>Maintenant on a besoin de monter "sparsebundle" en utilisant <code>hdid</code> (hard drive image driver)</li>
</ul>
<pre><code class="language-bash">hdid nameOfThebundle.backupbundle
</code></pre>
<ul>
<li>Saisir le mot de passe si demandé (si le disque ou la sauvegarde était chiffré.e).</li>
<li>Maintenant quitter le terminal et sélectionner "Restore" depuis Time machine.</li>
<li>La sauvegarde présente sur le NAS doit maintenant être visible. Suivre les instructions données à l'écran.</li>
</ul>
</div>
</div><footer>
<div class="rst-footer-buttons" role="navigation" aria-label="Footer Navigation">
<a href="../2020-12-04-borg-backup/" class="btn btn-neutral float-left" title="Sauvegarde externalisée grâce à Borg Backup"><span class="icon icon-circle-arrow-left"></span> Previous</a>
<a href="../../Ansible/2023-10-01-nextcloud-docker-update-from-ansible/" class="btn btn-neutral float-right" title="Mise à jour de Nextcloud docker par Ansible">Next <span class="icon icon-circle-arrow-right"></span></a>
</div>
<hr/>
<div role="contentinfo">
<!-- Copyright etc -->
</div>
Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<div class="rst-versions" role="note" aria-label="Versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span><a href="../2020-12-04-borg-backup/" style="color: #fcfcfc">&laquo; Previous</a></span>
<span><a href="../../Ansible/2023-10-01-nextcloud-docker-update-from-ansible/" style="color: #fcfcfc">Next &raquo;</a></span>
</span>
</div>
<script src="../../js/jquery-3.6.0.min.js"></script>
<script>var base_url = "../..";</script>
<script src="../../js/theme_extra.js"></script>
<script src="../../js/theme.js"></script>
<script src="../../search/main.js"></script>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

149
site/Synology/index.html Normal file
View File

@@ -0,0 +1,149 @@
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><link rel="canonical" href="https://docs.savaneprod.fr/Synology/" />
<link rel="shortcut icon" href="../img/favicon.ico" />
<title>Liens relatifs à l'utilisation de Synology DSM. - Savanewiki</title>
<link rel="stylesheet" href="../css/theme.css" />
<link rel="stylesheet" href="../css/theme_extra.css" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" />
<script>
// Current page data
var mkdocs_page_name = "Liens relatifs \u00e0 l\u0027utilisation de Synology DSM.";
var mkdocs_page_input_path = "Synology/index.md";
var mkdocs_page_url = "/Synology/";
</script>
<!--[if lt IE 9]>
<script src="../js/html5shiv.min.js"></script>
<![endif]-->
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
<script>hljs.highlightAll();</script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
<div class="wy-side-scroll">
<div class="wy-side-nav-search">
<a href=".." class="icon icon-home"> Savanewiki
</a><div role="search">
<form id ="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" title="Type search term here" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul>
<li class="toctree-l1"><a class="reference internal" href="..">Home</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Synology</span></p>
<ul class="current">
<li class="toctree-l1 current"><a class="reference internal current" href="./">Liens relatifs à l'utilisation de Synology DSM.</a>
<ul class="current">
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="2019-09-01-access-synology-with-ssh-asymetrical-key/">Se connecter en SSH au Synology à l'aide d'une clef asymétrique.</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="2019-12-16-wildcard-lets-encrypt-certificate/">Générer et mettre à jour automatiquement un certificat "wildcard" let's encrypt.</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="2020-12-04-borg-backup/">Sauvegarde externalisée grâce à Borg Backup</a>
</li>
<li class="toctree-l1"><a class="reference internal" href="2021-02-06-restore-time-machine-backup/">Restaurer un mac depuis une sauvegarde Time machine.</a>
</li>
</ul>
<p class="caption"><span class="caption-text">Ansible</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../Ansible/2023-10-01-nextcloud-docker-update-from-ansible/">Mise à jour de Nextcloud docker par Ansible</a>
</li>
</ul>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../about/">About</a>
</li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="Mobile navigation menu">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="..">Savanewiki</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content"><div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href=".." class="icon icon-home" aria-label="Docs"></a></li>
<li class="breadcrumb-item">Synology</li>
<li class="breadcrumb-item active">Liens relatifs à l'utilisation de Synology DSM.</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div class="section" itemprop="articleBody">
<h1 id="liens-relatifs-a-lutilisation-de-synology-dsm">Liens relatifs à l'utilisation de Synology DSM.</h1>
<ul>
<li>Utiliser Dynamic DNS a.k.a DynDNS ou DDNS avec Gandi.net : <a href="https://github.com/EmixamPP/synology-ddns-gandi">https://github.com/EmixamPP/synology-ddns-gandi</a><ul>
<li>Nécessaire lorsque le fournisseur d'accès par lequel le Synology est connecté à Internet ne propose pas d'adresse IP publique fixe. Et lorsque le domaine est géré par Gandi.net .</li>
<li>DSM implémente par défaut ce service pour OHV.</li>
</ul>
</li>
</ul>
</div>
</div><footer>
<div class="rst-footer-buttons" role="navigation" aria-label="Footer Navigation">
<a href=".." class="btn btn-neutral float-left" title="Home"><span class="icon icon-circle-arrow-left"></span> Previous</a>
<a href="2019-09-01-access-synology-with-ssh-asymetrical-key/" class="btn btn-neutral float-right" title="Se connecter en SSH au Synology à l'aide d'une clef asymétrique.">Next <span class="icon icon-circle-arrow-right"></span></a>
</div>
<hr/>
<div role="contentinfo">
<!-- Copyright etc -->
</div>
Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<div class="rst-versions" role="note" aria-label="Versions">
<span class="rst-current-version" data-toggle="rst-current-version">
<span><a href=".." style="color: #fcfcfc">&laquo; Previous</a></span>
<span><a href="2019-09-01-access-synology-with-ssh-asymetrical-key/" style="color: #fcfcfc">Next &raquo;</a></span>
</span>
</div>
<script src="../js/jquery-3.6.0.min.js"></script>
<script>var base_url = "..";</script>
<script src="../js/theme_extra.js"></script>
<script src="../js/theme.js"></script>
<script src="../search/main.js"></script>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB