Numa rotina de configuração, me deparei na necessidade de instalar um container LXC no Proxmox com Ubuntu 16.04 para rodar uma aplicação através do snapd.
Patativas, lá estou eu realizando a receita de bolo de sempre, e justo no último ingrediente (snapd) encontro um problema na inicialização o serviço, algo parecido com isso:
root@test:/# snap install hello
error: cannot perform the following tasks:
- Mount snap "core" (3017) ([start snap-core-3017.mount] failed with exit status 1: Job for snap-core-3017.mount failed.
See "systemctl status snap-core-3017.mount" and "journalctl -xe" for details.
)
Fazendo uma pesquisa rápida aqui e aqui consegui determinar que a montagem do squashfs em containers não-privilegiados não é possível.
A agora?
Como instalar o snapd em um container LXC
Para podermos instalar snaps através do snapd sem precisar adicionar privilégios elevados ao container seria instalar o pacote squashfuse e configurar o ct para bootar no kernel. Pois bem, missão simples.
Alterar o arquivo conf do container
Primeiro, precisamos adicionar novas linhas de configurações ao arquivo do container desejado, para isso desligue o ct (de preferência) e edite o arquivo localizado em:
ls /etc/pve/lxc/
edite o arquivo .conf do container, no meu caso 105.conf.
nano /etc/pve/lxc/105.conf
Adicione as seguintes linhas após os registros existentes (não altere nenhum outro registro a não ser que você saiba o que esteja fazendo):
# Mounting fuse (for snap squashfs)
lxc.mount.entry = /dev/fuse dev/fuse none bind,create=file,optional
# Mount cgroup in rw to get snaps working
lxc.mount.auto=cgroup:rw
Agora inicie o container!
Instalando os pacotes squashfuse e fuse
Beleza, agora só resta instalar os pacotes squashfuse e fuse no container para completar a missão (e poder rodar o snapd em paz):
sudo apt install squashfuse fuse -y
No meu caso, eu ainda tive de criar o diretório /lib/modules, pois no meu container com Ubuntu 16.04 não existia (confira se exista e pule este comando):
sudo mkdir /lib/modules
Agora você provavelmente poderá rodar o snapd novamente sem dores de cabeça!
systemctl start snapd.service
Caso você não tenha instalado o snapd, a hora é agora:
sudo apt install snapd -y
Esta publicação tem como intuito de arquivar um conhecimento, não é definitiva nem completa. Valeu, falou!
Aproveite e leia Como Configurar os Servidores DNS no Debian com IPv6