Un monde d'octets

Aller au contenu | Aller au menu | Aller à la recherche

vendredi, mai 1 2020

LXD profile pour process avec video et son

lxc profile create gui
lxc profile edit gui

config:
  environment.DISPLAY: :0
  raw.idmap: both 1000 1000
  user.user-data: |
    runcmd:
      - 'sed -i "s/; enable-shm = yes/enable-shm = no/g" /etc/pulse/client.conf'
      - 'echo export PULSE_SERVER=unix:/tmp/.pulse-native | tee --append /home/ubuntu/.profile'
    packages:
      - x11-apps
      - mesa-utils
      - pulseaudio
description: GUI LXD profile
devices:
  PASocket:
    path: /tmp/.pulse-native
    source: /run/user/1000/pulse/native
    type: disk
  X0:
    path: /tmp/.X11-unix/X0
    source: /tmp/.X11-unix/X0
    type: disk
  mygpu:
    type: gpu
name: gui
used_by:

Il suffit ensuite de créer votre container lxc avec ce profil, et voila !

vendredi, avril 10 2020

Migration de container LXC

Pour des raisons d'optimization, l'ai décidé de déplacer mes container lxc vers un mac book mini reinstallé sous ubuntu.

Préparer le destinaire LXC

lxc config set core.https_address 192.168.1.15
lxc config set core.trust_password <SECRET>

Préparer la source

lxc remote add 192.168.1.15 --password <SECRET>

A partir de la, vous êtes en mesure de contrôle le service lxd distant :

lxc list 192.168.1.15:

Vous pouvez ensuite copier le container en faisant depuis la source :

lxd move --mode=push <container> 192.168.1.15:

jeudi, janvier 23 2020

Lancer un container docker dans lxc

Pour tester mesos et marathon, il me fallait un container lxc qui acccepte de lancer des containers docker. Pour cela il faut autoriser le nesting :

lxc config set methastase security.nesting true

mercredi, septembre 11 2019

LXC : partager un dossier de l'hôte à un container

Il suffit d'ajouter un device de type disque a la configuration du container

exemple :

lxc config device add mycontainer export disk source=/export path=/export

Ici, notre volume s'appellera "export" de type "disk" dont la source est "/expot" et le point de montage "/export" sur le container "mycontainer"

Cependant pour les droits, il faut savoir que si l'uid du container n'a pas l'accès au chemin monté sur l'hôte, ce sera permission denied. Il faut donc voir l'uid reel de l'utilisateur vu par l'hôte et placer des acls.

dimanche, juillet 28 2019

Monter automatiquement un bridge pour lxd

Pour que lxd utilise macvlan, il faut que le bridge wlanbr0 (bridge dépendant de l'interface wlan0 qui est activée par network manager) soit présent !

Pour cela, il suffit de créer le script suivant :

avant netplan : vi /etc/network/if-up.d/lxd
avec netplan : vi /etc/networkd-dispatcher/routable.d/10-lxd

#!/bin/sh

dev=wlx1cbfced1a893
mac=8a:38:2a:cc:d7:99

ip link add brwlan0 link $dev address $mac type macvlan mode bridge
ip link set brwlan0 up

Puis corriger les droits de ce script :

chown root.root /etc/network/if-up.d/lxd
chmod 755 /etc/network/if-up.d/lxd

A chaque nouvelle interface, celui-ci sera appelé. On ne se soucie pas de faire de vérif, car aucune chance que le script down l'interface par accident.

dimanche, juillet 14 2019

Lxc bind to local network

Creation d'une interface br0

Pour br0, nous allons choisir une interface macvlan bridgé, car certains chipset wifi ne supportent pas le bridge classique de linux (bridge-utils), mais de plus, macvlan est bien plus moderne !

ip link add br0 link eth0 address 8a:38:2a:cc:d7:aa type macvlan mode bridge
ip link set br0 up

l'adresse mac est totalement bidonnée mais rien de grave ici ;)

Destruction de l'interface eth0 et linkage a br0

lxc config device remove test-18-10 eth0
lxc config device add test-18-10 eth0 nic name=eth0 nictype=macvlan mode=bridged parent=br0

vendredi, juin 28 2019

Fixer l'ip d'un container lxd

lxc stop <container>
lxc network attach lxdbr0 <container> eth0 eth0
lxc config device set <container> eth0 ipv4.address <ip>
% lxc start <container>

jeudi, mai 9 2019

Calculer l'occupation de tous nos containers lxd

Depuis que mon espace "/var" grossissait sans prévenir, je me suis dit, ca serait quand même bien de voir ce que prends lxd comme place, et même plus précisément chaque container :

sudo du -sh /var/snap/lxd/common/lxd/containers/*/rootfs

Ce qui me laisse à penser que prendre ubuntu ou fedora pour des micro services, c'est pas forcement léger. J'ai essayé Alpine Linux, qui est certes beaucoup plus light (1/50eme), mais pour laquelle beaucoup de choses changent par rapport à une Ubuntu :

exemples :

- bind est lancé en tant que user "named" dans alpine et "bind" dans ubuntu - les chemins de bind sont totalement différent, idem pour la structuration de la configuration - systemctl n'existe pas - bon, la je pinaille, mais c'est pas "apk install" (comme apt install) mais "apk add" - "service openvpn@servername start" ne fonctionne pas, il ne peut être que "service openvpn start"

Bref, beaucoup de petits détails d'administration présents dans certaines distribs, sont ici faites totalement différemment. Je ne dirais pas que c'est moins bien ou mieux, juste différent. Il y'a surement encore beaucoup de différences, mais c'est vrai que pour du micro-services, les gains en tailles apportés par Alpine sont WAOUH :

65M	/var/snap/lxd/common/lxd/containers/openvpn/rootfs
1,1G	/var/snap/lxd/common/lxd/containers/redis/rootfs
  • openvpn est un container Alpine contenant la configuration d'un openvpn et des scripts d'administration
  • redis est un container Ubuntu ne contenant qu'une installation additionnelle des paquets redis

Ca parle de soit ! Maintenant si la taille n'est pas un problème, je préfèrerais une ubuntu (écosystème, préférence personnelle ...), mais Alpine est très utilisé par beaucoup de containers docker sur le hub, ce qui atteste de sa validité pour ces usages.

vendredi, mars 22 2019

Lxc useful commands

Lister les containers qui ont un attribut particulier

ex : security.priviledged=true

lxc list security.privileged=true

Afficher la configuration d'un container

lxc config show <container>

Obtenir un attribut pour un container

lxc config get <container> security.privileged

mercredi, octobre 3 2018

LXD : 101

Installation sur Ubuntu 18.04

apt install lxd lxd-client lxc-utils

Vous devez ensuite initialiser lxd, ce qui aura pour effet de créer un premier volume, nécessaire pour les containers.

lxd init

Lors de la configuration du réseau, lxd essaye de déterminer un range disponible. En cas d'échec, il faudra relancer l'init et saisir une adresse cidr pour paramétrer le bridge. La notation sera "IP de l'interface/Masque". Exemple : 192.168.10.1/24.

Création d'un premier container :

lxc launch ubuntu:bionic/amd64 picsou -p default -p {profile} -p ...

Contrairement à lxc, le container est déjà démarré à cette étape.

lxc list
lxc info {container}

Déposer des fichiers sur un container

Voici comment installer sa clef ssh pour root :

lxc file push ~/.ssh/id_rsa.pub picsou/root/.ssh/authorized_keys

Il faut ensuite corriger les droits du dossier :

echo "chmod 600 /root/.ssh/authorized_keys && sudo chown root: /root/.ssh/authorized_keys" | lxc exec picsou /bin/bash

Destruction d'un container

lxd delete {--force} container

Gestion des profils

lxc profile show profil
lxc profile create profil
lxc profil edit profil [< file.txt]

Pour modifier un attribut de profil, on peut utiliser :

lxc profile set profil attribut valeur

Dépôt d'images

lxc image list images:
lxc image list ubuntu:

Par défaut, on croit que lxc launch ubuntu:bionic/i386 installe une ubuntu bionic ... mais en fait ubuntu: indique le dépôt. Donc pour installer quelque-chose venant du dépôt images, il faut faire :

lxc launch images:alpine/3.6/i386 rushmore

Et voila notre container lxc rushmore est bien un linux alpine 3.6 version i386.

mardi, octobre 2 2018

LXC : 101

Installation sur Ubuntu 18.04

apt install lxd lxd-client lxc-utils

Création d'un premier container :

Exécuter en tant que root (pour ne pas être en mode unpreviligied) ;

lxc-create -t download -n jabu

La liste des distributions, releases et architectures sont listées, et ils vous est demandé laquelle utiliser.

Une fois le container créé, vous pouvez le démarrer comme suit :

lxc-start -n jabu -d

Vérifier le statut d'un container :

lxc-info -n my-container
lxc-ls -f %%

Attention tout ceci c'est LXC, ce qui est inférieur a LXD ! Le prochain post nous indiquera comment faire avec LXD.