Não é possível iniciar automaticamente contêineres LXC criados com o LXD

5

Eu criei um contêiner lxc facilmente com as ferramentas LXD, mas não consegui encontrar uma maneira de iniciá-lo automaticamente na reinicialização. (Ubuntu 15.04)

Para o LXC, é dito que adicionar lxc.start.auto = 1 à configuração do container seria suficiente, mas não consegui encontrar o arquivo de configuração para o container criado com o LXD. Eu tentei

lxc config set my_machine raw.lxc "lxc.start.auto=1"

sem sorte. A configuração é salva, mas o contêiner não foi iniciado ... Alguma idéia?

    
por madpoet 05.05.2015 / 13:54

3 respostas

0

Eu mesmo perguntei aos desenvolvedores do lxc / lxd e parece que não é possível fazer isso com a configuração se o lxd for usado para criar os contêineres. Ainda não está implementado, mas planejado eles dizem ...

O lxd é um pouco diferente dos scripts lxc: ou seja, o diretório padrão dos contêineres é /var/lib/lxd/lxc/ em vez de /var/lib/lxc/ e as configurações do contêiner são mantidas em um db sqlite central em vez de algum arquivo de configuração por contêiner.

Então eu tive que criar um trabalho systemd criando o arquivo: /etc/systemd/system/multi-user.target.wants/lxd-autostart.service com este conteúdo:

[Unit]
Description=Start lxc containers created with lxd
After=lxd.service
Requires=lxd.service

[Service]
ExecStartPre=/usr/local/bin/lxd-autostart-check.sh
ExecStart=/usr/bin/lxc start my_machine
Restart=on-failure

[Install]
WantedBy=multi-user.target

e /usr/local/bin/lxd-autostart-check.sh são:

#!/bin/bash

for i in {1..10}
do
    echo "."
    [ -S /var/lib/lxd/unix.socket ] && exit 0
    sleep 1
done

echo "/var/lib/lxd/unix.socket not detected!"
exit 1
    
por madpoet 05.05.2015 / 15:17
6

Alguns meses depois, agora, o autostart já é suportado (por algum tempo) no próprio lxd. Você pode apenas

lxc init ubuntu u1
lxc config set u1 boot.autostart true

Agora u1 será iniciado automaticamente em cada reinicialização.

    
por Serge 24.10.2015 / 23:06
2

Com base na documentação oficial aqui , a inicialização do contêiner LXC foi projetada usando upstart. A partir de 9 de março de 2015, o Ubuntu 15.04 foi alterado para systemd por padrão. Mais detalhes sobre o impacto dessa mudança e como mudar de systemd para upstart e vice-versa estão disponíveis em esta página.

Para verificar se o seu sistema está usando systemd vs. upstart, você pode testar emitindo o comando sudo initctl version que retornará o upstart se o upstart estiver manipulando o init. Outro método útil é emitir o comando dpkg -S /sbin/init , que lhe dirá qual pacote o instalou (no meu caso, em 14.04, é o upstart). Você pode encontrar mais respostas muito boas sobre como fazer isso com nossos amigos em Unix & amp; Linux. Mais detalhes sobre identificando o sistema init é também disponível.

Para ver se o seu contêiner LXC é iniciado automaticamente na fase inicial, conforme projetado, você pode instalar o pacote upstart-sysv , que removerá o padrão ubuntu e o systemd-sysv (mas não deve remover mais nada. Apresente os desenvolvedores se isso acontecer!), e execute sudo update-initramfs -u. Depois disso, o menu "Opções avançadas" do grub terá uma entrada correspondente "Ubuntu, com Linux ... (systemd)" onde você pode fazer uma inicialização única com o systemd.

Você pode voltar ao systemd instalando systemd-sysv e pacotes do ubuntu-standard .

Outras fontes (não vinculadas em outro lugar):

link

    
por Elder Geek 05.05.2015 / 17:35

Tags