updated informations; add AH files
parent
93781b5316
commit
f5a1ac55cd
124
config.toml
124
config.toml
|
@ -31,67 +31,13 @@ title = "Stéphane HUC :: IT Log"
|
|||
pre = "fa fa-home"
|
||||
url = "/"
|
||||
weight = 1
|
||||
#[[languages.en.menu.main]]
|
||||
# identifier = "blog"
|
||||
# name = "Blog"
|
||||
# pre = "fa fa-blog"
|
||||
# url = "/posts"
|
||||
# weight = 2
|
||||
[[languages.en.menu.main]]
|
||||
identifier = "dev"
|
||||
name = "Dev"
|
||||
pre = "fa fa-code"
|
||||
url = "/dev"
|
||||
weight = 3
|
||||
[[languages.en.menu.main]]
|
||||
identifier = "bash"
|
||||
name = "Bash"
|
||||
parent = "dev"
|
||||
# pre = "<img alt=\"Logo Bash\" src=\"/svg/bash.svg\" width=\"24\"><!-- integrity=\"sha512-l17tBuaFnyww01uVTbhokdPpf6oQTunSIe62D+8c20c1F3l8/dYpKdVKIOh/YAsBxG+yuWo/W9WyC3y/UR0C+w== sha384-A7jD9sztYeSDySn5C4R2SdHSn5eRfcmgBM5wmhvhu8pZ4Cubgq0mYauGhyL8RaRz sha256-sS2Osxrgn53fpfkdJ2/4+RYBNgFvv3A9PklPmvgy2Gk=\"> -->"
|
||||
url = "/dev/bash"
|
||||
weight = 31
|
||||
#[[languages.en.menu.main]]
|
||||
# identifier = "js"
|
||||
# name = "Javascript"
|
||||
# parent = "dev"
|
||||
# pre = "<img alt=\"Logo Javascript\" src=\"/svg/js.svg\" width=\"24\"><!-- integrity=\"sha512-zkMdi9T2q8jRX5t76TQvPV2JfAUoDdgb0p3JvU7EcEmQHmrGlTcQW5aCgUzHF2WPK9P4cbGnm9f+vqgZp+YF8g== sha384-zXjYrb80BkU2eJ0fGyROj3+fpsNV5GGMCFBuQe+3R3qo7HDYw+YbDS5HpIhAqRv3 sha256-mpNdcze+BktAhCwhPWvz2WsoCcMlY+hY1guYu3HjR70=\"> -->"
|
||||
# url = "/dev/js"
|
||||
# weight = 32
|
||||
#[[languages.en.menu.main]]
|
||||
# identifier = "php"
|
||||
# name = "PHP"
|
||||
# parent = "dev"
|
||||
# pre = "<img alt=\"Logo PHP\" src=\"/svg/php.svg\" width=\"24\"><!-- integrity=\"sha512-MsYw+2YEPPaJ8vs5cZAze8bF7v72cFs4guGYoaROK9A7twUe/P4GPzPS9sMy0q7wIGnnGvlBt9SNEkWG0qJXKw== sha384-Kl8XtZQdEpQDiIOGxv06SAs6cx3XDWJR+D7rtELeGLO2FXyl/TrfL8xWWYtNxAq+ sha256-v4t+SK/pFUGLrXMIPiOqpIakaIxqIpcL/Wr3YRxtKQw=\"> -->"
|
||||
# url = "/dev/php"
|
||||
# weight = 33
|
||||
#[[languages.en.menu.main]]
|
||||
# identifier = "phpclass"
|
||||
# name = "PHP Classes"
|
||||
# parent = "php"
|
||||
# pre = "fab fa-php"
|
||||
# url = "/dev/php/class"
|
||||
# weight = 331
|
||||
#[[languages.en.menu.main]]
|
||||
# identifier = "phpfunc"
|
||||
# name = "PHP Function"
|
||||
# parent = "php"
|
||||
# pre = "fab fa-php"
|
||||
# url = "/dev/php/function"
|
||||
# weight = 332
|
||||
[[languages.en.menu.main]]
|
||||
identifier = "python"
|
||||
name = "Python"
|
||||
parent = "dev"
|
||||
# pre = "<img alt=\"Logo Python\" src=\"/svg/python.svg\" width=\"24\"><!-- integrity=\"sha512-YS2GgMvicTi+2RHJ/B/dbyOsd+qmmzdvRFbi9PkfrUZaT+Eadlo6kJu9vV+XwJ1SK60rf8uswAMaAWxzGOta4A== sha384-YdKYhWfa4MMtzn7OFRmDShh7fsCLYphwbDFhSCUsGtwAoHj7uF2eLdpCE/11nTUE sha256-+8O2mNwRmyVdFvpcJsXLlOPcn50Sbv/qFHet1IF9T6A=\"> -->"
|
||||
url = "/dev/python"
|
||||
weight = 34
|
||||
#[[languages.en.menu.main]]
|
||||
# identifier = "sh"
|
||||
# name = "shell"
|
||||
# parent = "dev"
|
||||
# pre = "<img alt=\"Logo Bash\" src=\"/svg/bash.svg\" width=\"24\"><!-- integrity=\"sha512-l17tBuaFnyww01uVTbhokdPpf6oQTunSIe62D+8c20c1F3l8/dYpKdVKIOh/YAsBxG+yuWo/W9WyC3y/UR0C+w== sha384-A7jD9sztYeSDySn5C4R2SdHSn5eRfcmgBM5wmhvhu8pZ4Cubgq0mYauGhyL8RaRz sha256-sS2Osxrgn53fpfkdJ2/4+RYBNgFvv3A9PklPmvgy2Gk=\"> -->"
|
||||
# url = "/dev/shell"
|
||||
# weight = 35
|
||||
identifier = "blog"
|
||||
name = "Blog"
|
||||
pre = "fa fa-plume"
|
||||
url = "/post"
|
||||
weight = 2
|
||||
|
||||
#[[languages.en.menu.main]]
|
||||
# identifier = "sec"
|
||||
# name = "Security"
|
||||
|
@ -256,60 +202,11 @@ title = "Stéphane HUC :: IT Log"
|
|||
url = "/post"
|
||||
weight = 2
|
||||
[[languages.fr.menu.main]]
|
||||
identifier = "dev"
|
||||
name = "Dev"
|
||||
pre = "fa fa-code"
|
||||
url = "/dev"
|
||||
identifier = "ah"
|
||||
name = "Auto-Hébergement"
|
||||
pre = ""
|
||||
url = "/ah"
|
||||
weight = 3
|
||||
[[languages.fr.menu.main]]
|
||||
identifier = "bash"
|
||||
name = "Bash"
|
||||
parent = "dev"
|
||||
# pre = "<img alt=\"Logo Bash\" src=\"/svg/bash.svg\" width=\"24\"><!-- integrity=\"sha512-l17tBuaFnyww01uVTbhokdPpf6oQTunSIe62D+8c20c1F3l8/dYpKdVKIOh/YAsBxG+yuWo/W9WyC3y/UR0C+w== sha384-A7jD9sztYeSDySn5C4R2SdHSn5eRfcmgBM5wmhvhu8pZ4Cubgq0mYauGhyL8RaRz sha256-sS2Osxrgn53fpfkdJ2/4+RYBNgFvv3A9PklPmvgy2Gk=\"> -->"
|
||||
url = "/dev/bash"
|
||||
weight = 31
|
||||
#[[languages.fr.menu.main]]
|
||||
# identifier = "js"
|
||||
# name = "Javascript"
|
||||
# parent = "dev"
|
||||
# pre = "<img alt=\"Logo Javascript\" src=\"/svg/js.svg\" width=\"24\"><!-- integrity=\"sha512-zkMdi9T2q8jRX5t76TQvPV2JfAUoDdgb0p3JvU7EcEmQHmrGlTcQW5aCgUzHF2WPK9P4cbGnm9f+vqgZp+YF8g== sha384-zXjYrb80BkU2eJ0fGyROj3+fpsNV5GGMCFBuQe+3R3qo7HDYw+YbDS5HpIhAqRv3 sha256-mpNdcze+BktAhCwhPWvz2WsoCcMlY+hY1guYu3HjR70=\"> -->"
|
||||
# url = "/dev/js"
|
||||
# weight = 32
|
||||
[[languages.fr.menu.main]]
|
||||
identifier = "php"
|
||||
name = "PHP"
|
||||
parent = "dev"
|
||||
# pre = "<img alt=\"Logo PHP\" src=\"/svg/php.svg\" width=\"24\"><!-- integrity=\"sha512-MsYw+2YEPPaJ8vs5cZAze8bF7v72cFs4guGYoaROK9A7twUe/P4GPzPS9sMy0q7wIGnnGvlBt9SNEkWG0qJXKw== sha384-Kl8XtZQdEpQDiIOGxv06SAs6cx3XDWJR+D7rtELeGLO2FXyl/TrfL8xWWYtNxAq+ sha256-v4t+SK/pFUGLrXMIPiOqpIakaIxqIpcL/Wr3YRxtKQw=\"> -->"
|
||||
url = "/dev/php"
|
||||
weight = 33
|
||||
#[[languages.fr.menu.main]]
|
||||
# identifier = "phpclass"
|
||||
# name = "PHP Classes"
|
||||
# parent = "php"
|
||||
# pre = "fab fa-php"
|
||||
# url = "/dev/php/class"
|
||||
# weight = 331
|
||||
#[[languages.fr.menu.main]]
|
||||
# identifier = "phpfunc"
|
||||
# name = "PHP Function"
|
||||
# parent = "php"
|
||||
# pre = "fab fa-php"
|
||||
# url = "/dev/php/function"
|
||||
# weight = 332
|
||||
[[languages.fr.menu.main]]
|
||||
identifier = "python"
|
||||
name = "Python"
|
||||
parent = "dev"
|
||||
# pre = "<img alt=\"Logo Python\" src=\"/svg/python.svg\" width=\"24\"><!-- integrity=\"sha512-YS2GgMvicTi+2RHJ/B/dbyOsd+qmmzdvRFbi9PkfrUZaT+Eadlo6kJu9vV+XwJ1SK60rf8uswAMaAWxzGOta4A== sha384-YdKYhWfa4MMtzn7OFRmDShh7fsCLYphwbDFhSCUsGtwAoHj7uF2eLdpCE/11nTUE sha256-+8O2mNwRmyVdFvpcJsXLlOPcn50Sbv/qFHet1IF9T6A=\"> -->"
|
||||
url = "/dev/python"
|
||||
weight = 34
|
||||
#[[languages.fr.menu.main]]
|
||||
# identifier = "sh"
|
||||
# name = "shell"
|
||||
# parent = "dev"
|
||||
# pre = "<img alt=\"Logo Bash\" src=\"/svg/bash.svg\" width=\"24\"><!-- integrity=\"sha512-l17tBuaFnyww01uVTbhokdPpf6oQTunSIe62D+8c20c1F3l8/dYpKdVKIOh/YAsBxG+yuWo/W9WyC3y/UR0C+w== sha384-A7jD9sztYeSDySn5C4R2SdHSn5eRfcmgBM5wmhvhu8pZ4Cubgq0mYauGhyL8RaRz sha256-sS2Osxrgn53fpfkdJ2/4+RYBNgFvv3A9PklPmvgy2Gk=\"> -->"
|
||||
# url = "/dev/shell"
|
||||
# weight = 35
|
||||
[[languages.fr.menu.main]]
|
||||
identifier = "sec"
|
||||
name = "Sécurité"
|
||||
|
@ -637,6 +534,7 @@ title = "Stéphane HUC :: IT Log"
|
|||
enableGitInfo = true
|
||||
enableRobotsTXT = false
|
||||
|
||||
git4Commit = "https://git.huc.fr.eu.org/SH-Hugo/doc.huc.fr.eu.org/commit/"
|
||||
git4MD = "https://git.huc.fr.eu.org/SH-Hugo/doc.huc.fr.eu.org/raw/branch/master/content/"
|
||||
git4RAW = "https://git.huc.fr.eu.org/SH-Hugo/doc.huc.fr.eu.org/raw/branch/master/layouts/shortcodes/"
|
||||
|
||||
|
|
|
@ -0,0 +1,83 @@
|
|||
---
|
||||
aliases: ['/en/dev/python/env-python-openbsd']
|
||||
date: 2019-06-19T12:03:33+02:00
|
||||
description: "How to use virtuals environments Python on OpenBSD with W^X security."
|
||||
draft: false
|
||||
tags: ['Python','Environnement','OpenBSD']
|
||||
title: "Python: virtual environment on OpenBSD"
|
||||
translationKey: "python-env-openbsd"
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
* OS : OpenBSD 6.x
|
||||
|
||||
Since OpenBSD 6.0, `wxallowed` is a mount option, by default on `/usr/local`.
|
||||
|
||||
If the partition has this option, the software is allowed to run from that
|
||||
partition, otherwise it won't be able to run and will issue a `W^X` violation
|
||||
message:
|
||||
|
||||
`$ dmesg | grep wxallowed` <br>
|
||||
`/home/hs/.local/share/virtualenvs/mybeautifullproject-q1koN8ay/bin/python3(26392): W^X binary outside wxallowed mountpoint`
|
||||
|
||||
In fact, since only `/usr/local` had this actived option, if you attempt
|
||||
to run one program, by example on your `$HOME`, this one will not execute. <br>
|
||||
That's the whole problem with Python environments that need to work in
|
||||
your home directory.
|
||||
|
||||
Here the problem with `virtualenv`:
|
||||
|
||||
{{< code "dev-python-env-openbsd-virtualenv-error-permission-denied" sh >}}
|
||||
|
||||
Egual for `pipenv`:
|
||||
|
||||
{{< code "dev-python-env-openbsd-pipenv-failed-create" shell >}}
|
||||
|
||||
## Configuration
|
||||
|
||||
One only little system change will make our lives easier:
|
||||
|
||||
- create a folder user into `/usr/local`, i.e.: <br> `# mkdir -p /usr/local/${my_user}/python`
|
||||
- chown user and group rights: <br> `# chown -R ${my_user}:wheel /usr/local/${my_user}`
|
||||
- create symbolic link: <br> `# ln -s /usr/local/${my_user}/python $home/python`
|
||||
|
||||
*Of course, replace `${my_user}` by your id!* ;-)
|
||||
|
||||
If you use `pipenv`, you need to create a new folder and symlink; read the
|
||||
{{< anchor "TL;DR" tldr >}} below.
|
||||
|
||||
|
||||
## TL;DR
|
||||
|
||||
Replace `${my_user}` by your session id!
|
||||
|
||||
=> For **virtualenv**: <br>
|
||||
`# mkdir -p /usr/local/${my_user}/python` <br>
|
||||
`# chown -R ${my_user}:wheel /usr/local/${my_user}` <br>
|
||||
`# ln -s /usr/local/${my_user}/python $home/python`
|
||||
|
||||
=> For **pipenv**, you need to add more: <br>
|
||||
`$ mkdir /usr/local/$USER/python/virtualenvs` <br>
|
||||
`$ ln -s /usr/local/$USER/python/virtualenvs $HOME/.local/share/virtualenvs`
|
||||
|
||||
## Documentations
|
||||
|
||||
* The **pipenv**: https://pipenv.readthedocs.io/en/latest/
|
||||
* About the mount option **wxallowed**: [EN][1]
|
||||
|
||||
## Aknowledgements
|
||||
|
||||
* This article would not exists without [Xavier][4]…
|
||||
* and, this other [article][5]: "***Using cabal on OpenBSD***"
|
||||
|
||||
|
||||
---
|
||||
|
||||
[1]: https://www.openbsd.org/faq/upgrade60.html
|
||||
[2]: https://wiki.openbsd.fr.eu.org/doku.php/openbsd.org/faq/upgrade60#changement-de-configuration-et-de-syntaxe
|
||||
[3]: https://forum.openbsd.fr.eu.org/showthread.php?tid=2352&pid=18773#pid18773
|
||||
[4]: https://ybad.name/sdj.html
|
||||
[5]: https://deftly.net/posts/2017-10-12-using-cabal-on-openbsd.html
|
||||
|
||||
---
|
|
@ -51,7 +51,7 @@ Let's retrieve the new firmware version:
|
|||
|
||||
- e.g. the current version:
|
||||
|
||||
`# v="22.03.2"`
|
||||
`# v="22.03.4"`
|
||||
|
||||
⇒ for the **Ubiquiti EdgeRouter X** :
|
||||
|
||||
|
@ -65,7 +65,7 @@ And, we check the checksum:<br>
|
|||
`# sha256sum -c sha256sums 2> /dev/null | grep OK`
|
||||
|
||||
⇒ Correct result for **Xiaomi Redmi Router AC2100**: <br>
|
||||
`openwrt-22.03.2-ramips-mt7621-xiaomi_redmi-router-ac2100-squashfs-sysupgrade.bin: OK`
|
||||
`openwrt-22.03.4-ramips-mt7621-xiaomi_redmi-router-ac2100-squashfs-sysupgrade.bin: OK`
|
||||
|
||||
{{< note danger >}}
|
||||
**ATTENTION**: If the verification fails, go to discuss it on the forum!
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
---
|
||||
date: 2021-07-01T18:41:14+01:00
|
||||
description: "Section à-propos d'articles liés à-propos de l'auto-hébergement…"
|
||||
draft: false
|
||||
noindex: true
|
||||
tags: ['AH']
|
||||
title: "Section Auto-Hébergement"
|
||||
---
|
||||
|
||||
Différents articles sur l'auto-hébergement, principalement autour d'OpenBSD
|
||||
|
||||
Ouvrage inspiré par l'excellent :
|
||||
[Héberger un serveur avec OpenBSD](https://si3t.ch/ah/fr/)
|
||||
Qui change + ou - régulièrement d'URL, et qui actuellement s'affiche une
|
||||
seule et même page HTML, créé à l'origine par @prx, Xavier Catron
|
||||
|
||||
Sous [Licence CC By](https://creativecommons.org/licenses/by/4.0/)
|
||||
|
||||
---
|
||||
|
||||
## OpenNTPD
|
||||
|
||||
{{< inside "ah:openntpd" >}}
|
|
@ -0,0 +1,264 @@
|
|||
---
|
||||
categories: ['ah']
|
||||
date: 2023-03-23T14:35:32+01:00
|
||||
description: "Auto-héberger des sites web avec httpd, le serveur web sous OpenBSD, et le configurer pour utiliser des certificats TLS"
|
||||
draft: true
|
||||
include_toc: true
|
||||
show_comments: false
|
||||
tags: ['ah','httpd','TLS']
|
||||
title: "httpd: Hébergement de sites web avec certificats TLS"
|
||||
translationKey: 'ah-openbsd-httpd-tls'
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
Dans le chapitre précédent, nous avons vu comment utiliser basiquement le
|
||||
serveur web natif dans OpenBSD qu'est **httpd** pour gérer des pages HTML.
|
||||
|
||||
Si vous ne l'avez pas lu, retrouvez le : {{< inside "ah/httpd" >}}
|
||||
|
||||
Ci-dessous voyons comment configurer **httpd** pour utiliser des certificats
|
||||
TLS.
|
||||
|
||||
Prévoir un accès avec chiffrement pour votre site n'est pas obligatoire.
|
||||
|
||||
Un certificat sera de toute façon nécessaire dès que vous voudrez chiffrer
|
||||
les échanges, non seulement pour un site web mais aussi pour un serveur
|
||||
mail, par exemple.
|
||||
|
||||
Nous allons utiliser l'autorité de certification gratuite **Let's Encrypt**
|
||||
(https://letsencrypt.org).
|
||||
|
||||
Sous OpenBSD, il existe un client natif sécurisé nommé **acme-client**.
|
||||
Il est possible d'utiliser le logiciel **certbot** mis à disposition par
|
||||
**Let's Encrypt**. Mais veillez à n'utiliser que l'un ou l'autre, et pas
|
||||
les deux en même temps ; ce sont deux outils différents qui n'interagissent
|
||||
pas ensemble.
|
||||
|
||||
## acme-client
|
||||
|
||||
- fichier de configuration : `/etc/acme-client.conf`
|
||||
|
||||
Cet outil va vérifier que vous avez bien accès au domaine pour lequel
|
||||
vous souhaitez un certificat. Il procède ainsi :
|
||||
|
||||
Il demande tout d'abord à letsencrypt un fichier unique, une sorte d'empreinte,
|
||||
qui est enregistrée dans `/var/www/acme`. Ensuite, letsencrypt tente de
|
||||
récupérer ce fichier en allant sur votre site dans le dossier `.well-known/acme-challenge`
|
||||
pour certifier que c'est bien votre serveur qui a fait la demande.
|
||||
Autrement dit, il interroge l'URL `http://chezmoi.tld/.well-known/acme-challenge/unfichiersecret`.
|
||||
S'il y accède, la demande de certificat est acceptée.
|
||||
Puis, le fichier est supprimé.
|
||||
|
||||
Il faut donc rendre disponible le dossier `/var/www/acme`.
|
||||
|
||||
Ajoutons une nouvelle instruction "location" dans votre fichier de configuration
|
||||
du serveur **httpd** :
|
||||
|
||||
```nginx
|
||||
server "chezmoi.tld" {
|
||||
listen on * port 80
|
||||
|
||||
location "/.well-known/acme-challenge/*" {
|
||||
root "/acme"
|
||||
request strip 2
|
||||
}
|
||||
root "/htdocs/super-site"
|
||||
}
|
||||
```
|
||||
|
||||
Quelques explications :
|
||||
|
||||
- `location "/.well-known/acme-challenge/*" {` : Lorsqu'une requête est
|
||||
faite pour une adresse ressemblant à `http://chezmoi.tld/.well-known/acme-challenge/nimportequoi`,
|
||||
alors on applique la configuration qui suit :
|
||||
|
||||
- `root "/acme"` : La nouvelle racine est le dossier /acme.
|
||||
Ce dernier est dans le chroot d'httpd, donc il s'agit bien de `/var/www/acme`.
|
||||
|
||||
- `request strip 2` : On retire de l'URL la partie avec ".well-known/acme-challenge"
|
||||
pour éviter que soit demandé `http://chezmoi.tld/acme/.well-known/acme-challenge`
|
||||
qui n'a rien à voir.
|
||||
|
||||
---
|
||||
|
||||
Le fichier de configuration d'acme-client n'existe pas par défaut. Un example
|
||||
se trouve dans le répertoire `/etc/examples/acme-client.conf`.
|
||||
|
||||
Configurons le fichier, tel que :
|
||||
|
||||
```cfg
|
||||
authority letsencrypt {
|
||||
api url "https://acme-v02.api.letsencrypt.org/directory"
|
||||
account key "/etc/acme/letsencrypt-privkey.pem"
|
||||
}
|
||||
|
||||
authority letsencrypt-staging {
|
||||
api url "https://acme-staging-v02.api.letsencrypt.org/directory"
|
||||
account key "/etc/acme/letsencrypt-staging-privkey.pem"
|
||||
}
|
||||
|
||||
domain chezmoi.tld {
|
||||
alternative names { webmail.chezmoi.tld www.chezmoi.tld }
|
||||
domain key "/etc/ssl/private/chezmoi.tld.key"
|
||||
domain full chain certificate "/etc/ssl/chezmoi.tld.crt"
|
||||
sign with letsencrypt
|
||||
}
|
||||
```
|
||||
|
||||
Quelques explications sur les déclarations suivantes - à remplacer :
|
||||
|
||||
- `chezmoi.tld` par votre nom de domaine.
|
||||
- `alternative names` par les noms de domaines et sous-domaines à certifier.
|
||||
- `domain key` est la déclaration du chemin absolu, dans votre système de
|
||||
fichiers, de la clé privé lié au nom de domaine
|
||||
- `domain full chain certificate` est la déclaration du chemin absolu du
|
||||
certificat serveur lié au nom de domaine. Cette dernière est importante.
|
||||
|
||||
---
|
||||
|
||||
Vérifions la configuration :
|
||||
|
||||
```sh
|
||||
# acme-client -n
|
||||
```
|
||||
|
||||
Si aucun message d'erreur n'est affiché, c'est que c'est bon.
|
||||
|
||||
---
|
||||
|
||||
Maintenant demandons au client-acme de générer les certificats :
|
||||
|
||||
```sh
|
||||
# acme-client -v chezmoi.tld && rcctl reload httpd
|
||||
```
|
||||
|
||||
Conseils :
|
||||
|
||||
- Utiliser la déclaration `sign with letsencrypt-staging` dans le fichier
|
||||
de configuration permet de tester la configuration avec les serveurs
|
||||
de Let's Encrypt. Si la communication avec les serveurs s'exécute bien,
|
||||
les certificats de tests seront générés positivement. Votre configuration
|
||||
sera donc bonne.
|
||||
|
||||
- Ajouter la commande de génération de certificats ci-dessus dans le fichier
|
||||
de cron quotidien. C'est la même pour le renouvellement de ceux-ci.
|
||||
|
||||
### Inclusion configuration acme-client
|
||||
|
||||
L'inclusion de fichiers pour la configuration d'acme-client fonctionne
|
||||
exactement au même principe que pour httpd.
|
||||
|
||||
La première chose est de créer le répertoire `acme-client.d` qui n'existe pas
|
||||
par défaut :
|
||||
|
||||
```sh
|
||||
# mkdir /etc/acme-client.d
|
||||
```
|
||||
|
||||
Puis de créer un fichier de configuration par nom de domaine et d'utiliser
|
||||
dans le fichier principal la directive `include`, tel que :
|
||||
|
||||
- exemple de fichier de configuration pour le domaine **chez-moi.tld**,
|
||||
nommé `/etc/acme-client.d/chez-moi.tld.conf` :
|
||||
|
||||
```cfg
|
||||
domain chezmoi.tld {
|
||||
alternative names { webmail.chezmoi.tld www.chezmoi.tld }
|
||||
domain key "/etc/ssl/private/chezmoi.tld.key"
|
||||
domain full chain certificate "/etc/ssl/chezmoi.tld.crt"
|
||||
sign with letsencrypt
|
||||
}
|
||||
```
|
||||
|
||||
- exemple de réécriture du fichier de configuration d'acme-client :
|
||||
|
||||
```cfg
|
||||
authority letsencrypt {
|
||||
api url "https://acme-v02.api.letsencrypt.org/directory"
|
||||
account key "/etc/acme/letsencrypt-privkey.pem"
|
||||
}
|
||||
|
||||
authority letsencrypt-staging {
|
||||
api url "https://acme-staging-v02.api.letsencrypt.org/directory"
|
||||
account key "/etc/acme/letsencrypt-staging-privkey.pem"
|
||||
}
|
||||
|
||||
include "/etc/acme-client.d/chez-moi.tld.conf"
|
||||
```
|
||||
|
||||
N'oubliez pas de vérifier la configuration…
|
||||
|
||||
## certbot
|
||||
|
||||
**certbot** est l'outil officiel par **Let's Encrypt** pour générer des
|
||||
certificats TLS. Il est disponible en tant que paquet :
|
||||
|
||||
```sh
|
||||
# pkg_add certbot
|
||||
```
|
||||
|
||||
L'utilisation en mode console de **certbot** est simple, néanmoins
|
||||
veillez à ce que le service lié à httpd ne soit pas actif :
|
||||
|
||||
```sh
|
||||
# rcctl stop httpd
|
||||
# certbot certonly --standalone -d chez-moi.tld -d www.chez-moi.tld
|
||||
```
|
||||
|
||||
Si la génération des certificats TLS se termine correctement, il suffit
|
||||
de démarrer à nouveau le service httpd après l'avoir reconfiguré correctement.
|
||||
Voir ci-dessous :
|
||||
|
||||
## httpd configuration
|
||||
|
||||
Maintenant, il est nécessaire de retoucher la configuration du serveur
|
||||
**httpd** pour activer la gestion des certificats TLS :
|
||||
|
||||
```cfg
|
||||
# extrait de /etc/httpd.conf
|
||||
server "chezmoi.tld" {
|
||||
listen on * port 80
|
||||
|
||||
location "/.well-known/acme-challenge/*" {
|
||||
root "/acme"
|
||||
request strip 2
|
||||
}
|
||||
|
||||
# on redirige vers la version https
|
||||
location * { block return 301 "https://$SERVER_NAME$REQUEST_URI" }
|
||||
}
|
||||
|
||||
server "chezmoi.tld" {
|
||||
listen on * tls port 443
|
||||
root "/htdocs/monsupersite"
|
||||
|
||||
tls {
|
||||
certificate "/etc/ssl/chezmoi.tld.crt"
|
||||
key "/etc/ssl/private/chezmoi.tld.key"
|
||||
}
|
||||
hsts
|
||||
|
||||
# n'oubliez pas d'ajouter la configuration
|
||||
# specifique liée à votre site
|
||||
…
|
||||
}
|
||||
```
|
||||
|
||||
Quelques explications :
|
||||
|
||||
- la directive `location * { block return 301 …` permet de rediriger toutes
|
||||
les requêtes faites sur le port 80 vers le service sur le port 443,
|
||||
en HTTPS.
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Licence
|
||||
|
||||
Sous [Licence CC By](https://creativecommons.org/licenses/by/4.0/)
|
||||
- Auteur original : Xavier Catron @prx
|
||||
- Site original : [Héberger un serveur avec OpenBSD](https://si3t.ch/ah/fr/)
|
||||
|
||||
---
|
||||
|
|
@ -0,0 +1,176 @@
|
|||
---
|
||||
categories: ['ah']
|
||||
date: 2023-03-20T12:08:01+01:00
|
||||
description: "Auto-héberger des sites web avec httpd, le serveur web sous OpenBSD"
|
||||
draft: true
|
||||
include_toc: true
|
||||
show_comments: false
|
||||
tags: ['ah','httpd']
|
||||
title: "httpd: Hébergement de sites web"
|
||||
translationKey: 'ah-openbsd-httpd'
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
OpenBSD intègre par défaut un serveur HTTP qui s'appelle tout simplement
|
||||
**httpd**. Il ne propose pas de fonctionnalités exotiques, mais sa légèreté
|
||||
le rend d'autant plus simple à configurer et moins sensible à d'éventuelles
|
||||
failles de sécurité. Il s'avère amplement suffisant dans la plupart des cas.
|
||||
|
||||
Pour des raisons de sécurité, le serveur web httpd sera lancé en chroot
|
||||
dans le dossier `/var/www`.
|
||||
|
||||
En réalité, pour le serveur web, tous les documents qui sont hors du dossier
|
||||
sont totalement inaccessibles. Pour lui, il s'agit de la racine principale `/`.
|
||||
Ce comportement peut être modifié, mais je vous le déconseille !
|
||||
|
||||
## Un simple site statique
|
||||
|
||||
Un "simple site statique" est constitué uniquement de pages {{< abbr "HTML" "HyperText Markup Language" >}}.
|
||||
|
||||
Commençons par créer un dossier qui contiendra les pages du site :
|
||||
|
||||
```sh
|
||||
# mkdir /var/www/htdocs/mon_super_site
|
||||
```
|
||||
|
||||
Maintenant, copiez tous les fichiers HTML dans ce répertoire.
|
||||
|
||||
### Gestion des droits utilisateur web
|
||||
|
||||
L'utilisateur web sous OpenBSD est **www**, le nom du groupe est le même.
|
||||
|
||||
Pour vous assurer que le serveur pourra lire et donc servir vos pages html,
|
||||
il faut changer les droits du propriétaire de ces fichiers pour qu'ils
|
||||
appartiennent au serveur http :
|
||||
|
||||
```
|
||||
# chown -R www:www /var/www/htdocs/mon_super_site
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
- fichier principal de configuration : `/etc/httpd.conf`
|
||||
|
||||
Par défaut, ce fichier n'existe pas. Un fichier d'exemple existe sous
|
||||
`/etc/examples/httpd.conf`, il suffit de le copier dans le répertoire `/etc`.
|
||||
|
||||
Dans notre contexte, faisons simple et écrivons :
|
||||
|
||||
```cfg
|
||||
types { include "/usr/share/misc/mime.types" }
|
||||
|
||||
server "chezmoi.tld" {
|
||||
listen on * port 80
|
||||
root "/htdocs/mon_super_site"
|
||||
}
|
||||
```
|
||||
|
||||
Quelques explications concernant ces directives :
|
||||
|
||||
- `types`: La première ligne permet de préciser les types des fichiers
|
||||
que le serveur pourra avoir à fournir. Ce n'est pas obligatoire, mais ça
|
||||
permet par exemple à un visiteur de voir directement une image dans son
|
||||
navigateur plutôt que de la télécharger lorsqu'il clique dessus.
|
||||
|
||||
- `server` : définit ici le nom de domaine du site web, puis on indique
|
||||
que nous allons configurer ce site en ouvrant une accolade.
|
||||
|
||||
- `listen` : Le serveur écoute les protocoles IPv4 et IPv6 sur le port 80
|
||||
(le port www par défaut).
|
||||
|
||||
- `root` : indique où se trouve la "racine" du site. C'est le dossier
|
||||
contenant les pages HTML. Il est relatif au chroot évoqué plus haut ;
|
||||
on ne note donc pas `/var/www/` devant.
|
||||
|
||||
- httpd lit chacune des déclarations dans l'ordre d'écriture
|
||||
|
||||
---
|
||||
|
||||
La commande suivante permet de vérifier l'écriture du fichier de configuration :
|
||||
|
||||
```sh
|
||||
# httpd -n
|
||||
```
|
||||
|
||||
Exécutez-la après toute modification du fichier de configuration d'httpd,
|
||||
cela assurera la validité de celui-ci. S'il y a une ou plusieurs erreurs,
|
||||
la commande vous en informera.
|
||||
|
||||
### Inclusion
|
||||
|
||||
La configuration du serveur permet l'inclusion de fichiers de configuration
|
||||
secondaires. Ainsi, il est possible de configurer chaque nom de domaine
|
||||
dans son propre fichier de configuration et le "lier" dans le fichier de
|
||||
configuration principal d'httpd. Cela reste aussi valable pour tout élément
|
||||
de configuration qui serait commun à différents domaines.
|
||||
|
||||
La première chose est de créer le répertoire `httpd.d` qui n'existe pas
|
||||
par défaut :
|
||||
|
||||
```sh
|
||||
# mkdir /etc/httpd.d
|
||||
```
|
||||
|
||||
Puis de créer un fichier de configuration par nom de domaine et d'utiliser
|
||||
dans le fichier principal la directive `include`, tel que :
|
||||
|
||||
- exemple de fichier de configuration pour le domaine **chez-moi.tld**,
|
||||
nommé `/etc/httpd.d/chez-moi.tld.conf` :
|
||||
|
||||
```cfg
|
||||
server "chezmoi.tld" {
|
||||
listen on * port 80
|
||||
root "/htdocs/mon_super_site"
|
||||
}
|
||||
```
|
||||
|
||||
- exemple de réécriture du fichier de configuration d'httpd :
|
||||
|
||||
```cfg
|
||||
types { include "/usr/share/misc/mime.types" }
|
||||
|
||||
include "/etc/httpd.d/chez-moi.tld.conf"
|
||||
```
|
||||
|
||||
## Exécution
|
||||
|
||||
Ce service n'est pas actif par défaut ; il est donc nécessaire de le faire
|
||||
puis de le démarrer :
|
||||
|
||||
```sh
|
||||
# rcctl enable httpd
|
||||
# rcctl start httpd
|
||||
```
|
||||
|
||||
Toutes les pages HTML placées dans `/var/www/htdocs/mon_super_site` seront
|
||||
servies.
|
||||
|
||||
## PF
|
||||
|
||||
N'oubliez pas d'ouvrir le port 80 (www) dans le parefeu PF.
|
||||
|
||||
Par exemple :
|
||||
|
||||
```cfg
|
||||
pass in on egress proto tcp to port 80
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Certificats TLS
|
||||
|
||||
Maintenant, voyons comment générer et utiliser des certificats TLS pour
|
||||
chiffrer la communication avec le serveur lié au nom de domaine :
|
||||
|
||||
{{< inside "ah/httpd-tls" >}}
|
||||
|
||||
---
|
||||
|
||||
## Licence
|
||||
|
||||
Sous [Licence CC By](https://creativecommons.org/licenses/by/4.0/)
|
||||
- Auteur original : Xavier Catron @prx
|
||||
- Site original : [Héberger un serveur avec OpenBSD](https://si3t.ch/ah/fr/)
|
||||
|
||||
---
|
|
@ -0,0 +1,71 @@
|
|||
---
|
||||
categories: ['ah']
|
||||
date: 2023-03-20T10:56:11+01:00
|
||||
description: "Auto-héberger un serveur NTP sous OpenBSD"
|
||||
draft: true
|
||||
include_toc: true
|
||||
show_comments: false
|
||||
tags: ['ah','ntpd']
|
||||
title: "OpenNTPD: Un serveur à l'heure (ntpd)"
|
||||
translationKey: 'ah-openbsd-openntpd'
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
Il est essentiel de disposer d'un serveur ayant la date et l'heure justes.
|
||||
|
||||
Afin de maintenir à l'heure votre serveur, utilisons OpenNTPD
|
||||
pour synchroniser l'horloge à intervalles réguliers sur des
|
||||
serveurs de temps de confiance.
|
||||
|
||||
OpenNTPD développé par l'équipe OpenBSD est déjà présent sur votre machine,
|
||||
et actif par défaut, avec les bons paramètres de sécurité.
|
||||
|
||||
## Configuration
|
||||
|
||||
- Fichier de configuration : `/etc/ntpd.conf`
|
||||
|
||||
```cfg
|
||||
# $OpenBSD: ntpd.conf,v 1.16 2019/11/06 19:04:12 deraadt Exp $
|
||||
#
|
||||
# See ntpd.conf(5) and /etc/examples/ntpd.conf
|
||||
|
||||
servers pool.ntp.org
|
||||
server time.cloudflare.com
|
||||
sensor *
|
||||
|
||||
constraint from "9.9.9.9" # quad9 v4 without DNS
|
||||
constraint from "2620:fe::fe" # quad9 v6 without DNS
|
||||
constraints from "www.google.com" # intentionally not 8.8.8.8
|
||||
```
|
||||
|
||||
Pour vérifier la configuration : `ntpd -n`, tel que :
|
||||
|
||||
```sh
|
||||
$ ntpd -n
|
||||
configuration OK
|
||||
```
|
||||
|
||||
## Exécution
|
||||
|
||||
Vérifions le service :
|
||||
|
||||
`# rcctl check ntpd`
|
||||
|
||||
Si le service n'est pas actif, démarrons-le :
|
||||
|
||||
`# rcctl start ntpd`
|
||||
|
||||
---
|
||||
|
||||
Et voilà !
|
||||
|
||||
---
|
||||
|
||||
## Licence
|
||||
|
||||
Sous [Licence CC By](https://creativecommons.org/licenses/by/4.0/)
|
||||
- Auteur original : Xavier Catron @prx
|
||||
- Site original : [Héberger un serveur avec OpenBSD](https://si3t.ch/ah/fr/)
|
||||
|
||||
---
|
|
@ -0,0 +1,63 @@
|
|||
---
|
||||
aliases: ['/fr/dev/php/sitemap-gz']
|
||||
date: 2018-11-13T19:10:51+02:00
|
||||
description: "Générer un fichier sitemap et sa version compressée en PHP 5 et 7"
|
||||
draft: false
|
||||
tags: ['PHP5', 'PHP7', 'sitemap']
|
||||
title: "PHP5|7 : un fichier sitemap.xml, ou sitemap.xml.gz"
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
Ou comment créer un fichier **[sitemap.xml][1]** - ou sa version compressée **sitemap.xml.gz** en PHP.
|
||||
|
||||
## Sitemap.xml basique
|
||||
|
||||
Voyons comment écrire en PHP un sitemap.xml très basique :
|
||||
|
||||
{{< code "dev-php-sitemap-basic" php >}}
|
||||
|
||||
Bien-sûr l'écriture du fichier `sitemap.xml` est basique, non compressé,
|
||||
et ne sert - *dans ce cas* - qu'à indexer le fichier `index.php` - *cas peu utile, avouons-le* !
|
||||
|
||||
## Parcours de répertoire
|
||||
|
||||
Maintenant, admettons que nous avons un répertoire 'outils', dans lequel
|
||||
nous avons différents scripts PHP que nous souhaitons indexer, eux aussi ;)
|
||||
|
||||
Pour cela, nous allons utiliser les Itérateurs par parcourir le répertoire,
|
||||
puis récupérer les informations de fichier par le biais de la classe SPL !
|
||||
|
||||
{{< code "dev-php-sitemap-spl-loop-folders" php >}}
|
||||
|
||||
Bien-sûr, ce code PHP de parcours de dossier et de restitution d'informations
|
||||
fichiers, envoyé dans le flux XML nécessaire, est à intégrer après le code
|
||||
relatif au fichier index et avant le code de fermeture du flux XML.
|
||||
|
||||
## Compression du sitemap.xml
|
||||
|
||||
Maintenant, voyons comment compresser de manière simple et rapide le flux
|
||||
XML pour créer un fichier **sitemap.xml.gz** nécessaire :
|
||||
|
||||
{{< code "dev-php-sitemap-gzencode" php >}}
|
||||
|
||||
Ensuite pour envoyer les données, utilisons les bons entêtes, puis affichons le flux encodé :
|
||||
|
||||
{{< code "dev-php-sitemap-headers" php >}}
|
||||
|
||||
## TL;DR
|
||||
|
||||
Voici la version finale du code PHP pour créer dynamiquement un fichier
|
||||
**sitemap.xml**, et sa version compressée **sitemap.xml.gz** :
|
||||
|
||||
{{< file "dev-php-sitemap-tldr" php "sitemap.php" >}}
|
||||
|
||||
Et, voilà ! :D
|
||||
|
||||
|
||||
|
||||
---
|
||||
|
||||
[1]: https://www.sitemaps.org/fr/
|
||||
|
||||
---
|
|
@ -0,0 +1,50 @@
|
|||
---
|
||||
aliases: ['/fr/dev/shell/split-archive']
|
||||
date: 2017-07-31T00:00:00+01:00
|
||||
description: "Comment découper une archive tar, .gz, .bz dans un shell (Bash, ksh), puis la reconstruire !"
|
||||
draft: false
|
||||
include_toc: true
|
||||
show_comments: false
|
||||
tags: ['shell','archive']
|
||||
title: "Shell : découper/reconstruire une archive…"
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
Le code ci-dessous compresse le fichier archive et le découpe par tranche
|
||||
de 100 Mo, en ajoutant une extension incrémentée alphabétique… <br>
|
||||
*(tel que : `_aa` pour le premier fichier, `_ab` pour le second, `_ac` pour le troisième, etc…)*
|
||||
|
||||
## Découper
|
||||
|
||||
### Découper une archive tar
|
||||
|
||||
Pour découper une archive tar, utilisons le binaire **split** :
|
||||
|
||||
`tar cz fichier | split -b 100m - archive_split.tgz_`
|
||||
|
||||
{{< note warning >}}Attention : sous OpenBSD, tar supporte mal les gros
|
||||
fichiers et se mettra en erreur !{{</note>}}
|
||||
|
||||
### Découper une archive gzip
|
||||
|
||||
Pour découper votre archive au format gzip :
|
||||
|
||||
`gzip -c fichier | split -b 100m - archive_split.gz_`
|
||||
|
||||
## Reconstruire
|
||||
|
||||
Dans un premier temps, il nous faut "concaténer" l'archive, nous utiliserons
|
||||
dans les deux cas l'outil **cat**, puis ensuite il faut la décompresser
|
||||
pour obtenir le(s) fichiers(s) de l'archive.
|
||||
|
||||
### Reconstruire l'archive tar
|
||||
|
||||
`cat archive_split.tgz_* | tar xz`
|
||||
|
||||
### Reconstruire l'archive gzip
|
||||
|
||||
`cat archive_split.gz_* | gunzip -c > fichier`
|
||||
|
||||
---
|
||||
|
|
@ -0,0 +1,89 @@
|
|||
---
|
||||
aliases: ['/fr/dev/python/env-python-openbsd']
|
||||
date: 2019-06-19T12:03:33+02:00
|
||||
description: "Utiliser les environnements Python virtuels sous OpenBSD (W^X)"
|
||||
draft: false
|
||||
tags: ['Python','Environnement','OpenBSD']
|
||||
title: "Python : environnement virtuel sous OpenBSD"
|
||||
translationKey: "python-env-openbsd"
|
||||
---
|
||||
|
||||
## Description
|
||||
|
||||
* OS : OpenBSD 6.x
|
||||
|
||||
Depuis OpenBSD 6.0, l'option de montage `wxallowed` est configuré par
|
||||
défaut sur `/usr/local`. Pour ceux qui ne le savent pas, c'est une protection
|
||||
système. Si la partition a cette option, les logiciels sont autorisés à
|
||||
fonctionner depuis cette partition, sinon ils ne pourront fonctionner et
|
||||
émettront un message de violation `W^X`, tel que :
|
||||
|
||||
`$ dmesg | grep wxallowed` <br>
|
||||
`/home/hs/.local/share/virtualenvs/mybeautifullproject-q1koN8ay/bin/python3(26392): W^X binary outside wxallowed mountpoint`
|
||||
|
||||
De fait, puisque seul `/usr/local` a cette option activée, si vous tentez
|
||||
d'exécuter un programme depuis, par exemple, votre `$HOME`, cela ne fonctionnera
|
||||
pas. Et, c'est tout le problème avec les environnements Python qui doivent
|
||||
fonctionner dans votre répertoire personnel.
|
||||
|
||||
Dans les faits, voici ce qui se passe pour `virtualenv` :
|
||||
|
||||
{{< code "dev-python-env-openbsd-virtualenv-error-permission-denied" shell >}}
|
||||
|
||||
C'est pareil pour `pipenv` :
|
||||
|
||||
{{< code "dev-python-env-openbsd-pipenv-failed-create" shell >}}
|
||||
|
||||
D'autant que ce n'est vraiment pas un problème de droits utilisateurs :
|
||||
|
||||
{{< code "dev-python-env-openbsd-ls-mybeautifull-project" shell >}}
|
||||
|
||||
## Configuration
|
||||
|
||||
Une petite modification système va faciliter notre vie - puisque `/usr/local`
|
||||
est la seule partition autorisée à l'exécution des programmes qui nécessitent
|
||||
la violation `W^X` :
|
||||
|
||||
- Création d'un répertoire utilisateur dedans : <br> `# mkdir -p /usr/local/${my_user}/python`
|
||||
- Attribution des droits utilisateur et groupe correcte : <br> `# chown -R ${my_user}:wheel /usr/local/${my_user}`
|
||||
- Création d'un lien symbolique : <br> `# ln -s /usr/local/${my_user}/python $home/python`
|
||||
|
||||
Remplacez `${my_user}` par votre identifiant de session ;)
|
||||
|
||||
Si vous avez la bonne idée d'utiliser l'outil `pipenv`, il faudra créer
|
||||
un nouveau répertoire et le lier symboliquement ; lisez la section {{< anchor "TL;DR" tldr >}} ci-dessous…
|
||||
|
||||
## TL;DR
|
||||
|
||||
Remplacez ''${my_user}'' par votre identifiant de session !
|
||||
|
||||
=> Pour **virtualenv** : <br>
|
||||
`# mkdir -p /usr/local/${my_user}/python` <br>
|
||||
`# chown -R ${my_user}:wheel /usr/local/${my_user}` <br>
|
||||
`# ln -s /usr/local/${my_user}/python $home/python`
|
||||
|
||||
=> Pour **pipenv**, il faut rajouter à ce qui suit au-dessus : <br>
|
||||
`$ mkdir /usr/local/$USER/python/virtualenvs` <br>
|
||||
`$ ln -s /usr/local/$USER/python/virtualenvs $HOME/.local/share/virtualenvs`
|
||||
|
||||
## Documentations
|
||||
|
||||
* La documentation de **pipenv** - *en anglais* : https://pipenv.readthedocs.io/en/latest/
|
||||
* À-propos de l'option de montage **wxallowed** : le Guide de Migration OpenBSD 5.9 vers 6.0 - [EN][1] / [FR][2]
|
||||
* La [réponse][3] expliquée sur le forum "obsd4*"
|
||||
|
||||
## Remerciements
|
||||
|
||||
* Ce tutoriel n'existerait pas sans [Xavier][4]…
|
||||
* et, sans cet [article][5] anglais, nommé "***Using cabal on OpenBSD***"
|
||||
|
||||
|
||||
---
|
||||
|
||||
[1]: https://www.openbsd.org/faq/upgrade60.html
|
||||
[2]: https://wiki.openbsd.fr.eu.org/doku.php/openbsd.org/faq/upgrade60#changement-de-configuration-et-de-syntaxe
|
||||
[3]: https://forum.openbsd.fr.eu.org/showthread.php?tid=2352&pid=18773#pid18773
|
||||
[4]: https://ybad.name/sdj.html
|
||||
[5]: https://deftly.net/posts/2017-10-12-using-cabal-on-openbsd.html
|
||||
|
||||
---
|
|
@ -63,7 +63,7 @@ Depuis le répertoire `/tmp`, récupèrons la nouvelle version du firmware :
|
|||
|
||||
- e.g. pour la version actuelle :
|
||||
|
||||
`# v="22.03.2"`
|
||||
`# v="22.03.4"`
|
||||
|
||||
⇒ pour le routeur **Ubiquiti EdgeRouter X** :
|
||||
|
||||
|
@ -79,7 +79,7 @@ Puis, nous vérifions la somme de contrôle afin de nous assurer du firmware : <
|
|||
`$ sha256sum -c sha256sums 2> /dev/null | grep OK`
|
||||
|
||||
⇒ Résultat correct pour le routeur **Xiaomi Redmi Router AC2100** : <br>
|
||||
`openwrt-22.03.2-ramips-mt7621-xiaomi_redmi-router-ac2100-squashfs-sysupgrade.bin: OK`
|
||||
`openwrt-22.03.4-ramips-mt7621-xiaomi_redmi-router-ac2100-squashfs-sysupgrade.bin: OK`
|
||||
|
||||
{{< note danger >}}
|
||||
**ATTENTION** : Si la vérification échoue, allez en discuter sur le forum !
|
||||
|
|
|
@ -20,6 +20,9 @@
|
|||
<p class="is-right is-white-50">
|
||||
{{ i18n "countWords" . }}<br>
|
||||
{{ i18n "pTxtSrcMd" }}<a class="raw-src" href="{{ .Site.Params.git4MD }}/{{.Lang}}/{{ .File.Path }}" title="Source Markdown"><i class="fa fa-markdown" aria-hidden="true"></i></a>
|
||||
{{ if .Site.Params.enableGitInfo }}<br>
|
||||
{{ if $.GitInfo }}Commit version : <a href="{{ .Site.Params.git4Commit }}{{ .GitInfo.Hash }}" title="Commit">{{ .GitInfo.AbbreviatedHash }}</a>{{ end }}
|
||||
{{ end }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -5,4 +5,8 @@
|
|||
{{ $d := .Lastmod.Day }} {{ $y := .Lastmod.Year }} {{ $m := i18n .Lastmod.Month }}
|
||||
{{ $dateModified := printf "%d %s %d" $d $m $y }}
|
||||
<i aria-hidden="true" class="fa fa-calendar"></i>
|
||||
<em>{{ i18n "published" . }}<time class="post-date" datetime="{{ $dateTime }}">{{ print $dateCreated }}</time>{{ if gt $dateModifUnix $dateTimeUnix }}{{ T "modified" . }}<time class="post-date" datetime="{{ $dateTimeModif }}">{{ print $dateModified }}</time>{{ end }}<br><i aria-hidden="true" class="fa fa-clock-o"></i> {{ i18n "timeToRead" .ReadingTime }}</em>
|
||||
<em>
|
||||
{{ i18n "published" . }}<time class="post-date" datetime="{{ $dateTime }}">{{ print $dateCreated }}</time>
|
||||
{{ if gt $dateModifUnix $dateTimeUnix }}{{ T "modified" . }}<time class="post-date" datetime="{{ $dateTimeModif }}">{{ print $dateModified }}</time>{{ end }}<br>
|
||||
<i aria-hidden="true" class="fa fa-clock-o"></i> {{ i18n "timeToRead" .ReadingTime }}
|
||||
</em>
|
||||
|
|
Loading…
Reference in New Issue