by Maniack Crudelis

Into this post we’re going to see how to deploy a YunoHost server into an existing YunoHost server by using LXC in order to configure the guest YunoHost to connect throught ProtonVPN.

The idea is to isolate a service behind a VPN, but still using the convenience of YunoHost. Without affecting the whole server and all the services it provides.

Install LXC

First things first, let’s install LXC:

sudo apt update
sudo apt install lxc lxctl

Host network configuration

Allow the kernel to forward traffic:

echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/lxc_ynh.conf
sudo sysctl -p /etc/sysctl.d/lxc_ynh.conf

Add a bridge to route the traffic between the host and the LXC guest:

sudo nano /etc/network/interfaces.d/lxc_ynh
auto lxc_ynh
    iface lxc_ynh inet static
    bridge_ports none
    bridge_fd 0
    bridge_maxwait 0
    up iptables -A FORWARD -i lxc_ynh -o eth0 -j ACCEPT
    up iptables -A FORWARD -i eth0 -o lxc_ynh -j ACCEPT
    up iptables -t nat -A POSTROUTING -s -j MASQUERADE

Then start the bridge:

sudo ifup lxc_ynh --interfaces=/etc/network/interfaces.d/lxc_ynh

Create the container

Create a minimalist Debian container:

sudo lxc-create -n lxc_ynh -t debian -- -r stretch

Container configuration

The container configuration will be done into the file /var/lib/lxc/lxc_ynh/config

sudo nano /var/lib/lxc/lxc_ynh/config

Remove the line lxc.network.type = empty
And add the following ones:

# Network
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lxc_ynh
lxc.network.name = eth0
lxc.network.hwaddr = 00:FF:AA:00:00:01
lxc.network.ipv4 =
lxc.network.ipv4.gateway =

# Autostart
lxc.start.auto = 1

First steps with the container

Start the LXC container:

sudo lxc-start -n lxc_ynh -d

And update the apt cache (That’s also a way to check if the network is working):

sudo lxc-attach -n lxc_ynh -- apt-get update
If the container fails to resolve domain names, you likely have to change the dns for the next steps.

Go to the file /var/lib/lxc/lxc_ynh/rootfs/etc/resolv.conf and replace by a dns address you want, your gateway is usually a good choice.

Now that the network is working into your container, install the packages needed for a fully working Debian:

sudo lxc-attach -n lxc_ynh -- apt-get install -y aptitude sudo git ssh openssh-server
sudo lxc-attach -n lxc_ynh -- aptitude install -y ~pstandard ~prequired ~pimportant

You now have a perfectly working Debian into a LXC container.
So, now let’s go directly into the container:

sudo lxc-attach -n lxc_ynh -- /bin/bash
This is one of the best way to go into your container to have a proper terminal to work. Could be useful to keep that for further operations.

Install YunoHost into the container

Now that we’re into the container, you’ll notice that the prompt has changed to root@lxc_ynh, we’re going to use that syntax for every command to use into the container.

And first, we’re going to install YunoHost:

root@lxc_ynh:/# git clone https://github.com/YunoHost/install_script /tmp/install_script
root@lxc_ynh:/# cd /tmp/install_script; ./install_yunohost -a
root@lxc_ynh:/# yunohost tools postinstall
root@lxc_ynh:/# yunohost user create MYUSER
Change MYUSER by the name you want for your user.

To ease the usage of a Let’s Encrypt certificate, we’re going to let the host handle it.
First we’re going to share the certificates between the host and the guest by mounting the directory into the container.
In order to do so, we’re going back to the file /var/lib/lxc/lxc_ynh/config

sudo nano /var/lib/lxc/lxc_ynh/config
Please notice that there isn't the prompt root@lxc_ynh as said before. This command has to be executed into the host, not the container.

And add these few lines

# Mount between host and guest
# SSL Certificates
lxc.mount.entry=/etc/yunohost/certs etc/yunohost/certs none bind 0 0

Configure the host to access the container

Into the admin panel of your host YunoHost, add the domain you have chosen for your guest YunoHost during the post install just before.

If has to be the same, otherwise, the redirection and the certificate won't match

And install a Let’s Encrypt certificate for this new domain.

Now, we need to redirect the request to this domain toward the container.
To do that, we’re going to use the easy way by installing the app redirect with the following configuration:

Choose a domain for your redirect: The domain you used for your YunoHost into the container.
Choose a path for your redirect:   /
Redirect destination path:
Redirect type:                     Proxy, insivible [...]. Everybody will be able to access it.
Don't worry about the warning, we're not going to install anything else for that domain into this YunoHost. Everything else will be installed into the guest YunoHost.
If you're not using YunoHost, you should configure the domain yourself and handle the certificate.
For the redirection to the container, you'll need a nginx proxy pass instruction.
Here the nginx config set while using the app redirect_ynh:

location / {
   proxy_redirect    off;
   proxy_set_header  Host $host;
   proxy_set_header  X-Real-IP $remote_addr;
   proxy_set_header  X-Forwarded-Proto $scheme;
   proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header  X-Forwarded-Host $server_name;
   proxy_set_header  X-Forwarded-Port $server_port;

   proxy_http_version 1.1;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "upgrade";

Enjoy it

In order to mount the certificate, and shake up a little bit all the stuff, let’s restart the container:

sudo lxc-stop -n lxc_ynh
sudo lxc-start -n lxc_ynh -d

Now, from a not to bothering browser (be careful with any cache you may have) you should be able to reach your guest YunoHost from the domain name you’ve chosen.

It can be useful to go into private browsing to avoid any cache that would got you some trouble.
While you should reach the portal of your guest YunoHost, you won't be able to reach the admin panel.
Fortunately, you still have the CLI command available.
I hope to find a way to fix that issue...

Configure the container to support a VPN connection

The container is unable to connect to a VPN because it doesn’t have a TUN interface.
We’re going to add that interface, by adding those lines to the config file /var/lib/lxc/lxc_ynh/config:

# VPN specific configuration
lxc.autodev = 1
lxc.cgroup.devices.allow = c 10:200 rwm
lxc.hook.autodev = sh -c "cd ${LXC_ROOTFS_MOUNT}/dev; mkdir -p net; test -e net/tun || mknod net/tun c 10 200"

Then restart the container:

sudo lxc-stop -n lxc_ynh
sudo lxc-start -n lxc_ynh -d

Now that the container can have a VPN client, let’s install the open source CLI client for ProtonVPN into the container:

root@lxc_ynh:/# apt install openvpn dialog python3-pip python3-setuptools
root@lxc_ynh:/# pip3 install protonvpn-cli

Configure the VPN:

root@lxc_ynh:/# sudo protonvpn init
Note that you need sudo here to run the cli ProtonVPN app.

The VPN client is configured, but not yet connected. You can run the command sudo protonvpn status to see that you’re not connected to the VPN.
So first, connect to the VPN:

root@lxc_ynh:/# sudo protonvpn connect -f
root@lxc_ynh:/# sudo protonvpn status
Find all the available commands of the app here.

Your guest YunoHost, into its LXC container is now protected behind the VPN.
But as soon as you will restart the container, the VPN will be disconnected.
To prevent that situation, we’re going to create a systemd config for the ProtonVPN app.
Since a documentation already exist, let’s follow it: https://github.com/ProtonVPN/protonvpn-cli-ng/blob/master/USAGE.md#via-systemd-service

This systemd config has to be added into the LXC container.

You’re all set

Everything should be ok now.
You can restart your container to make sure everything is working and you’re still connected to the VPN.

And now it’s time to install the services you want into your YunoHost https://yunohost.org/#/apps

If you want to use a multimedia app, it can be useful to mount your /home/yunohost.multimedia into the LXC container to share the media between both the host and the guest.

Create first the directory:
sudo mkdir /var/lib/lxc/lxc_ynh/rootfs/home/yunohost.multimedia
And add a mount line into /var/lib/lxc/lxc_ynh/config:
lxc.mount.entry=/home/yunohost.multimedia home/yunohost.multimedia none bind 0 0
Restart the container and that's ok.

Un salon de discussion xmpp se créer simplement en rejoignant une discussion qui n’existe pas encore.
Le créateur du salon en devient le propriétaire.

Il est toutefois possible de nommer, au sein des participants des modérateurs et des propriétaires qui disposeront de droits particuliers sur le salon.

Modérateur et propriétaire

Pour changer le rôle d’un participant, le propriétaire dispose de cette commande:

/affiliate < owner|admin|member|outcast|none> [pseudo1] [pseudo2]

owner” correspond au rôle de propriétaire. Ce qui permet d’avoir tout les droits sur le salon et en particulier sa configuration.
admin” est le rôle de modérateur, qui permet d’administrer les utilisateurs et changer leur rôle. Mais pas de configurer le salon.
member” est le rôle normal de participant.

Un modérateur peux aussi changer le rôle d’un participant avec cette autre commande:

/role < moderator|participant|visitor|none> [pseudo1] [pseudo2]

“moderator” correspond au rôle “admin” précédent.
Tandis que “participant” correspond à “member”.


Propriétaires et modérateurs disposent de diverses commandes pour gérer les utilisateurs et le salon

/ban < utilisateur> [salon]: Bannir un utilisateur d'un salon
/kick < utilisateur> [raison] : Expulser un utilisateur du salon
/topic [nouveau sujet] : Voir ou changer le sujet du salon


Le propriétaire peut également changer la configuration du salon.

/config ou /configure : Configurer un salon de discussions

L’ensemble des commandes disponibles peux être obtenu avec la commande /help



by Maniack Crudelis

Actuellement sur Ubuntu et Debian, je remarque un défaut commun aux 2 distributions, l’accumulation de paquets de dépendances liés à des paquets supprimés.
En effet, lors de la suppression d’un paquet, volontairement ou suite à une mise à jour, les dépendances de ce paquets ne sont pas supprimées. Même si celles-ci ne sont plus nécessaire.

Lors de l’usage d’apt-get en ligne de commande, un message nous informera que des paquets inutiles peuvent être supprimés à l’aide de la commande autoremove.
Mais pour les utilisateurs exploitant uniquement les outils graphiques, aucun avertissement ne signale ces paquets. Et aucun mécanisme ne permet leur suppression automatiquement.

Or, les anciennes version du noyau occupent en moyenne 200mo chacune, ce qui peut saturer rapidement un disque système de faible capacité.

Afin de pallier ce manque et éviter de saturer le disque système, ce tuto propose la mise en place d’un script qui se chargera une fois par mois de nettoyer ces paquets inutiles de façon autonome.
Read more

Logwatch, l’analyseur de log bien pratique et largement utilisé présente toutefois un défaut majeur. Par défaut, il analyse les logs jour par jour uniquement et envoi un rapport chaque matin, cette fréquence d’envoi peut toutefois vite devenir décourageante à lire.

Voyons donc comment configurer logwatch pour qu’il fasse un rapport chaque fin de semaine sur la semaine écoulée.
Read more

1ère partie: Créer une clé USB de maintenance multiboot

Dans cette seconde partie, nous allons voir comment remplacer l’Ubuntu persistant de la Framakey par un Kubuntu live persistant beaucoup plus performant. Nous verrons également comment ajouter à notre clé un BartPE live, puis comment le remplacer par un UBCD4Win live
Read more

Le but de cet article est de réunir sur une clé usb différents live cd de maintenance que j’ai l’habitude d’utiliser sur mes différentes machines.

A l’origine j’utilisais des cd rw pour ces opérations, mais mes cd sont devenus vieillissant à force de réécriture pour basculer d’un live cd à un autre. Je suis finalement passer à un support sur clé USB de petite taille, mais n’en ayant pas beaucoup, je passais encore mon temps à formater la clé pour réinstaller un autre iso à l’aide d’usb-creator.

Finalement, je suis parvenu à réunir tout mes iso sur une seule clé usb et à les faire démarrer à l’aide de grub2.
Voilà donc la procédure pour y parvenir.
Read more

Bien que Mozilla soit sans doute respectueux de la vie privée, l’idée d’un serveur centralisé stockant mes données personnelles me dérange toujours. Puisque Mozilla permet d’utiliser un serveur Sync chez soi, profitant en pour garder nos marques pages à la maison. Tout en sécurisant les échanges via SSL.

Après 3 essais infructueux pour installer ce serveur “simple” d’installation, j’en ressors victorieux à la 4e tentative. Cette méthode d’installation, si elle n’est pas “simple”, permet d’avoir un serveur Sync fonctionnel et sécurisé.
Read more



by Maniack Crudelis

J’utilisais jusqu’à présent un dossier de partage en sshfs, très simple à mettre en œuvre, il nécessitait toutefois un passage systématique par la ligne de commande pour être monté et se montrait capricieux au démontage.
L’usage d’un dossier de partage webdav se montre beaucoup plus agréable, car le montage et le démontage du dossier se font de manière parfaitement transparente et quasi instantanée.
En y ajoutant un soupçon de SSL, nous obtenons un dossier de partage beaucoup plus pratique qu’avec sshfs et parfaitement sécurisé.
Read more

Mise à jour le 16/04/2016

Les fêtes de fin d’années sont passées, avec les nombreuses absences, les cambriolages sont fréquents. Sans empêcher les problèmes, une surveillance vidéo en notre absence permet au moins de savoir ce qui s’y passe. C’est également un bon moyen de garder des traces de tous les mouvements détectés.

Nous utiliserons ici le logiciel motion, qui enregistre des images à intervalle régulier lorsqu’un mouvement est détecté et permet une diffusion du flux vidéo via un mini serveur http.

Cet article présentera comment exploiter motion pour recevoir par mail les images de tout mouvement repéré dans la zone de surveillance tout en ayant la possibilité de consulter le flux de la webcam via un accès sécurisé.
Read more



by Maniack Crudelis

MPD, Music Player Daemon, présente l’avantage de pouvoir tourner sur une machine distante et être exploité par divers clients sur d’autres machines.
Je l’utilise plus particulièrement sur mon serveur câblé aux enceintes pour centraliser la source audio quelque que soit l’ordinateur que j’utilise chez moi.

J’ai récemment été confronté à la problématique de jouer plusieurs sons en même temps, pour ajouter un son d’ambiance et des bruitages à une musique de fond. La solution a donc été de multiplier les instances de MPD.
Des instances multiples de MPD permettent aussi de diffuser plusieurs musiques en streaming selon les utilisateurs ou de diffuser sur plusieurs sorties distinctes.
Read more