Tout d’abord, j’ai suivi le wiki de Gentoo pour installer LXC.
Pensez à activer le use man
c’est très utile.
J’ai simplement appliqué la configuration indiquée sur le wiki.
J’ai fais personnellement le choix d’un conteneur sans privilèges, ce qui implique quelques configurations.
Premièrement, il est impératif de vérifier la présence de subuid et subgid dans les fichiers idoines et de les ajouter si nécessaire.
Ensuite, j’ai ajouté les instructions lxc.idmap
dans ~/.config/lxc/default
.
J’ai choisi une configuration avec des interfaces veth
.
J’ai préféré ne pas défaire les réglages de mes interfaces réseau physiques donc j’ai fais un NAT sur le bridge.
iptables -t nat -A POSTROUTING -o <interface> -j MASQUERADE
iptables -P FORWARD DROP
iptables -A FORWARD -i br0 -j ACCEPT
iptables -A FORWARD -o br0 -j ACCEPT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
J’ai en premier choisi un template à télécharger pour ne pas passer trop de temps sur ce point.
J’ai tenté différentes options :
- Alpine : échec,
keymapp
requiertglibc
. - Debian : j’ai rencontré un problème pour basculer d’utilisateur avec
su - <user>
dont je n’ai pas compris l’origine. Peut-être un effet de bord d’utiliser un conteneur systemd sur un système hôte sur OpenRC. - Devuan : cette fois ci, je n’ai pas rencontré de difficultés.
Cela m’a demandé un peu de recherches. J’ai donc installé x11-apps/xhost
qu’il convient de lancer avec xhost +local:
pour l’activer et xhost -local:
pour le désactiver.
Il sert notamment à partager l’accès de la session X11 hote avec le conteneur.
Ensuite, j’ai lié l’accès au serveur via une option de montage :
lxc.mount.entry = /tmp/.X11-unix tmp/.X11-unix none bind,optional,create=dir,ro
Bien indiquer les variables d’environnement dans le conteneur pour que cela fonctionne : export DISPLAY=:0
Là, aussi ce n’était pas simple. J’ai fais du test catch and retry jusqu’à trouver quelque chose de fonctionnel.
Je dispose déjà des règles udev
de ZSA actives.
J’ai finis par simplement donner beaucoup d’accès à /dev
du fait que lors de la déconnexion et reconnexion, le clavier change d’identifiant sur le bus quand le firmware est flashé.
Voici la liste :
lxc.mount.entry = /dev/ignition_dfu dev/ignition_dfu none bind,optional,create=file
lxc.mount.entry = /dev/hidraw1 dev/hidraw1 none bind,optional,create=file
lxc.mount.entry = /dev/hidraw2 dev/hidraw2 none bind,optional,create=file
lxc.mount.entry = /dev/hidraw3 dev/hidraw3 none bind,optional,create=file
lxc.mount.entry = /dev/hidraw4 dev/hidraw4 none bind,optional,create=file
lxc.mount.entry = /dev/hidraw5 dev/hidraw5 none bind,optional,create=file
lxc.mount.entry = /dev/hidraw6 dev/hidraw6 none bind,optional,create=file
lxc.mount.entry = /dev/hidraw7 dev/hidraw7 none bind,optional,create=file
lxc.mount.entry = /dev/hidraw8 dev/hidraw8 none bind,optional,create=file
lxc.mount.entry = /dev/hidraw9 dev/hidraw9 none bind,optional,create=file
lxc.mount.entry = /dev/bus/usb dev/bus/usb none bind,optional,create=dir
Pour ouvrir un terminal sur le conteneur, j’ai constaté qu’avec lxc-attach
, le conteneur hérite de l’environnement de l’hôte, ce qui créé des dysfonctionnements. Avec l’option --clear-env
il manque également des variables d’environnement indispensables. J’ai donc déterminé qu’il faut ouvrir un terminal de la façon suivante : lxc-attach --clear-env -n <conteneur> -- su - <utilisateur>
. Cela permet de charger l’environnement du système du conteneur.
lxc-attach --clear-env -n <conteneur> -- su -c 'env DISPLAY=:0 ./keymapp' - <utilisateur>
Après toutes ces étapes j’ai pu flasher le firmware sur mon clavier.