Eureka! Ainda não terminei, mas consegui pela primeira vez iniciar um contêiner. Há algumas coisas que deram errado e descobri que há muitas pessoas com problemas semelhantes. Aqui está um pequeno guia de solução de problemas:
Distribuição / Repositórios
Por causa do feedback mais positivo, decidi começar com um sistema Debian Ubuntu 14.04 debootstrapped. Isso significa que o sistema original não é maior que apenas alguns 100M e não contém muitos pacotes. Eu usei atualizações e fontes de pacotes de segurança e o lpa diário do ppa. Aqui está meu /etc/apt/sources.list:
deb http://de.archive.ubuntu.com/ubuntu trusty main
deb http://de.archive.ubuntu.com/ubuntu trusty-updates main
deb http://security.ubuntu.com/ubuntu trusty-security main
deb http://ppa.launchpad.net/ubuntu-lxc/daily/ubuntu trusty main
Instalação
Em muitos tutoriais, fóruns e relatórios de bugs, encontrei listas de pacotes que precisam ser instalados. Eu não tenho certeza ainda quais desses são importantes, mas aqui está a lista do que eu finalmente instalei (a partir de um sistema 14.04 debootstrapped):
apt-get install bridge-utils cgmanager cloud-image-utils debootstrap distro-info \
distro-info-data euca2ools fuse libaio1 libapparmor1 libcap2 liblxc1 \
libpam-systemd librados2 libseccomp2 libselinux1 libselinux1 lxc python3-lxc \
python-distro-info
Novamente: esta lista provavelmente é mais longa que o necessário. Aqui está o que é realmente importante:
- libpam-systemd: esta biblioteca é importante para as permissões corretas do cgroup. Não vi nenhuma mensagem de erro, mas sem ela o arquivo
/proc/self/cgroup
parecia com8:blkio:/
etc. em vez de8:hugetlb:/user/1000.user/1.session
- fuse: Eu li que é importante para o lxcfs (eu diria que é um bug que o pacote lxcfs não depende dele)
- lxc: o pacote mais importante e o suficiente se você usar somente contêineres sem privilégios
- cgmanager: Ainda estou aprendendo sobre sua função. Btw: o PPA lxc atualmente fornece ambos os pacotes cgmanager-utils (0.27) e cgmanager (0.30). O cgmanager está em conflito com o cgmanager-utils (& lt; & lt; 0.30-1), o que significa que os dois pacotes do mesmo repositório não são compatíveis (possivelmente um erro ). Eu escolhi o cgmanager.
Configuração
Eu tentei muitas dicas de todos os lugares, então ainda não sei o que é importante. Mas aproximadamente eu apenas corri o script da questão. Aproximadamente, é sobre esses arquivos:
- / etc / subuid
- / etc / subgid
- / etc / lxc / lxc-usernet
- ~ / .config / lxc / default.conf
A única coisa adicional que fiz foi a seguinte, porque encontrei a linha em muitos tópicos:
chmod +x /home/testuser/.local/share
Login como usuário
Agora, a coisa mais importante que eu ainda não entendi, mas que arruinou todas as minhas experiências de base de script: Não faça login usando su ou sudo!
Eu demonstro:
root@1404-lxc-test:~# tail -1 /proc/self/cgroup
2:blkio:/user/0.user/1.session
# this is expected. I am root.
root@1404-lxc-test:~# sudo -u testuser -i tail -1 /proc/self/cgroup
2:blkio:/user/0.user/1.session
# here I used sudo to switch user
root@1404-lxc-test:~# su - testuser
testuser@1404-lxc-test:~$ tail -1 /proc/self/cgroup
2:blkio:/user/0.user/1.session
# at least here I expected the correct settings
testuser@1404-lxc-test:~$ exit
root@1404-lxc-test:~# exit
$ ssh testuser@1404-lxc-test
testuser@1404-lxc-test's password:
Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-53-generic x86_64)
testuser@1404-lxc-test:~$ tail -1 /proc/self/cgroup
2:blkio:/user/1000.user/2.session
# now it's correct
Eu ainda não sei o motivo, mas ele deve estar conectado com a libpam-systemd. Obviamente, su
e sudo
ignoram o PAM
E, finalmente, não esqueça de usar os comandos lxc-xxx quando estiver logado como usuário. Eles falharão se você fizer isso como raiz (porque os contêineres de espaço do usuário são armazenados em .local/share/lxc/
em vez de /var/lib/lxc/
Solução de problemas
Esses comandos foram muito úteis para mim:
-
journalctl
(em lançamentos baseados em upstart): Revelou problemas com o cgmanager -
/proc/self/cgroup
-
lxc-start
usando opções-l debug --logfile logfilename.txt
Deixe-me saber o que mais é importante. Eu acho que a comunidade precisa disso.
Créditos
Graças aos seguintes tutoriais:
E para esses relatórios de bugs e tópicos do fórum:
- link
- Estou tentando começar com contêineres do LXC e estou recebendo um problema de permissão para iniciar um contêiner não privilegiado. Como posso corrigir isso?
- link
- link
- link
- e muito mais
Aviso de isenção
Eu escrevi este texto após o primeiro teste bem-sucedido. Mas eu fiz tantas coisas que algumas dessas etapas provavelmente não são necessárias. Vou verificar novamente tudo em um novo sistema em breve.
Atualizar
Todos os itens acima foram feitos com o Ubuntu Trust 14.04 LTS. Agora, acabei de testar o Ubuntu astuto. Até agora eu posso dizer:
- Tudo o que você precisa instalar em cima de um sistema básico de bootstrap:
apt-get install lxc bridge-utils
- Nenhum espelhamento externo é necessário. Use o lxc fornecido pelo Ubuntu
- Eu não toquei mais do que os arquivos a seguir no meu novo sistema:
/etc/subuid
,/etc/subgid
,/etc/lxc/lxc-usernet
, além disso, criei um usuário e preenchai sua página inicial - Conclusão: muito mais fácil, muito mais estável. Para mim é o primeiro lançamento que realmente funciona.
(Wily agora está em versão beta e será lançado em 22 de outubro de 2015)