J'essaie d'installer OpenStack DevStack sur un ordinateur invité LXC. L'un des packages de DevStack nécessite un nouveau module de noyau, mais lorsque j'essaie d'exécuter modprobe sur l'invité LXC, une erreur se produit:
ubuntu@lxc$ Sudo modprobe scsi_transport_iscsi
FATAL: Could not load /lib/modules/3.2.0-48-generic/modules.dep: No such file or directory
Comment puis-je installer ce module pour mon ordinateur invité LXC?
La réponse courte est, vous ne pouvez pas. Les conteneurs LXC partagent leur noyau avec celui de l'hôte et ne sont pas autorisés par défaut à charger des modules (ce qui serait très dangereux).
La recommandation standard consiste à charger tout module sur l'hôte avant de démarrer le conteneur. Vous pouvez le faire avec un bon vieux script d'init ou en utilisant un hook lxc (voir mon post récent ici pour plus de détails: https://www.stgraber.org/2013/12/23/lxc-1- 0-some-more-advanced-container-use / )
Pour les besoins de cette réponse, supposons que votre conteneur s'appelle "foo".
Sur l'hôte, sauvegardez une copie de/var/lib/lxc/foo/config, au cas où mes instructions briseraient quelque chose.
Vous devrez configurer votre conteneur pour conserver la capacité SYS_MODULE. Sachez qu'une telle configuration donne à ce conteneur la possibilité de prendre en charge le noyau et donc l'hôte. Pour ce faire, vous souhaitez modifier la ligne de configuration "lxc.cap.drop" ou "lxc.cap.keep". Si vous exécutez un invité Ubuntu 19.04 créé avec "lxc-create --name foo --template download - ...", alors ...
Le fichier/var/lib/lxc/foo/config contiendra la ligne "lxc.include = /usr/share/lxc/ubuntu.common.conf", le fichier /usr/share/lxc/ubuntu.common.conf sera contient une ligne "lxc.include = /usr/share/lxc/config/common.conf", et le fichier /usr/share/lxc/config/common.conf contiendra une ligne comme celle-ci:
lxc.cap.drop = mac_admin mac_override sys_time sys_module sys_rawio
Vous devez copier cette dernière ligne à la fin de/var/lib/lxc/foo/config (ou n’importe quel endroit après "include /usr/share/lxc/ubuntu.common.conf"), puis supprimer le "sys_module". liste.
mkdir -p/var/lib/lxc/foo/rootfs/lib/modules cp -apr/lib/modules/$ (uname -r)/var/lib/lxc/foo/rootfs/lib/modules /
Le conteneur LXC devrait maintenant pouvoir charger et décharger les modules du noyau.