Erro ao instalar o snapd no Ubuntu em um Container LXC Proxmox
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