Eu recomendaria usar o conveniente% alias @reboot
no cron do Ubuntu para execute lxc-autostart
.
Como o usuário que possui o contêiner sem privilégios, execute crontab -e
e adicione a seguinte linha:
@reboot lxc-autostart
No Ubuntu 14.04, criei um contêiner sem privilégios que posso iniciar e parar manualmente.
Mas eu gostaria que isso começasse e parasse junto com o sistema.
Eu adicionei o seguinte à configuração do contêiner:
lxc.start.auto = 1
lxc.start.delay = 5
No entanto, os scripts do sistema não parecem escolher contêineres sem privilégios.
Existe um tópico relacionado a isso no linuxcontainers.org, mas a solução parece estar restrita a root
user.
Existe uma maneira limpa de fazer isso para um usuário não-root (com o consentimento do usuário root)?
Eu recomendaria usar o conveniente% alias @reboot
no cron do Ubuntu para execute lxc-autostart
.
Como o usuário que possui o contêiner sem privilégios, execute crontab -e
e adicione a seguinte linha:
@reboot lxc-autostart
No caso de alguém se deparar com este q & a pela resposta ao início automático de contêineres LXC não privilegiados (eu certamente volto aqui muito), aqui está uma solução que funciona bem e que eu segui para trabalhar no meu servidor:
link por Nicholas J Ingrassellino.
Em suma, envolve a criação de dois scripts e eles trabalham juntos na inicialização para permitir que o LXC inicie os contêineres não privilegiados de cada usuário listado sem ter que realmente efetuar login na conta do usuário; em outras palavras, executar o comando como o usuário com toda a mágica do CGroups intacta. De acordo com as melhores práticas do SO, vou citar os ossos dele aqui, mas vale a pena ler o artigo original dele.
Allow our user account to use the bridge…
echo "$USER veth lxcbr0 1024" | sudo tee -a /etc/lxc/lxc-usernet
Create Upstart script… In
/etc/init/lxc-unprivileged.conf
add…
description "LXC Unprivileged Containers"
author "Mike Bernson <[email protected]>"
start on started lxc
script
USERS="[user]"
for u in $USERS; do
cgm create all lxc$u
cgm chown all lxc$u $(id -u $u) $(id -g $u)
lxc-autostart -L -P /home/$u/.local/share/lxc | while read line;
do
set -- $line
/usr/local/bin/startunprivlxc lxc$u $u $1
sleep $2
done
done
end script
Make sure to replace [user] with your user account.
Create the container start script… In
/usr/local/bin/startunprivlxc
add…
#!/bin/sh
cgm movepid all $1 $$
sudo -iH -u $2 -- lxc-start -n $3 -d
…and make it executable…
sudo chmod +x /usr/local/bin/startunprivlxc
Gostaria apenas de enfatizar que parece funcionar de forma segura, correta e não requer a raiz do SSH nas outras contas de usuário.
Há também mais sobre o assunto (abordando as dicas relacionadas) aqui: link que pode ser útil para entender por que é assim que é.
Eu escrevi um pequeno script para contornar o problema, basta seguir as instruções comentadas.
DESCULPE: respondeu cedo demais. Não funcionou mesmo que lxc-ls mostre "AUTOSTART" como "YES".
Aqui está um link com muito mais informações úteis, e talvez alguém possa fazer uso dele: link
Aterrissei nesta página porque tive o mesmo problema. Depois de ler este tópico, Eu percebi que o lxc-create não pode gravar no diretório "/ var / lib / lxc /" usual se ele não for executado com o sudo.
Eu olhei em volta e localizei os rootfs para o meu contêiner sem privilégios em "~ / .local / share / lxc", e colocando as duas linhas da questão em config naquele diretório.
Eu olhei para o modelo que eu usei, "lxc-download" para a pista, mas eu acho que o caminho foi passado quando "lxc-download" é invocado. Eu não olhei como o sistema procura por contêineres desprivilegiados durante a inicialização.
Estou executando cada contêiner sem privilégios com o mesmo usuário nomeado para melhor isolamento e é assim que eu faço:
#!/bin/bash
LXC_CONTAINERS="container1 container2"
for LXC_CONTAINER in $LXC_CONTAINERS; do
su - $LXC_CONTAINER -c "lxc-start -n $LXC_CONTAINER --logfile /home/$LXC_CONTAINER/.local/share/lxc/lxc-$LXC_CONTAINER.log --logpriority DEBUG"
done
Assumindo (que é a mãe de todas as maneiras de estragar tudo), você está logando como o usuário que "possui" o container lxc não privilegiado, então o seguinte comando deve endereçar o que você está procurando ...
$ echo "lxc-start -n LXC-CONTAINER-NAME -d" >> .bashrc
Isso simplesmente executará o comando acima quando você efetuar login via bash. Isto também está assumindo que bash é o shell de login. Por favor, substitua o nome: LXC-CONTAINER-NAME
pelo nome do seu contêiner LXC que você gostaria de iniciar.
Eu usei uma abordagem diferente e está funcionando
1º Adicione as seguintes entradas no arquivo de configuração do container
lxc.start.auto = 1 lxc.start.delay = 5
2º Crie uma relação de confiança entre o usuário contêiner e ele mesmo no mesmo servidor
userlxc @ GEST-4: ~ $ ssh-keygen -t rsa Gerando pares de chaves rsa pública / privada. Digite o arquivo no qual salvar a chave (/home/userlxc/.ssh/id_rsa): Digite a frase secreta (vazia para nenhuma frase secreta): Digite a mesma senha novamente: Sua identificação foi salva em /home/userlxc/.ssh/id_rsa. Sua chave pública foi salva em /home/userlxc/.ssh/id_rsa.pub. A impressão digital chave é: c9: b4: e1: f3: bf: a3: 25: cc: f8: bc: ser: b6: 80: 39: 59: 98 userlxc @ GEST-AMENCIA-4 A imagem randomart da chave é: + - [RSA 2048] ---- + | | | | | o | | * + | | E S | | = * | | = o =. | | . +. | | oO = oo | + ----------------- +
userlxc @ GEST-4: ~ $ cat .ssh / id_rsa.pub > > .ssh / authorized_keys userlxc @ GEST-4: ~ $ ls -lrt .ssh / authorized_keys -rw-rw-r-- 1 userlxc userlxc 404 19 de novembro 17:23 .ssh / authorized_keys
Verifique a conexão ssh, você tem que ser capaz de usá-lo sem senha Detalhes userlxc @ GEST-4: ~ $ ssh userlxc @ localhost "lxc-ls - fantasia"
EXTLXCCONT01 PARADO - - SIM
UBUSER1404USERCONT01-test STOPPED - - NÃO
UBUSER1404USERLXCCONT01 PARADO - - NÃO
3º Crie uma entrada crontab no proprietário do contêiner
@reboot ssh userlxc @ localhost "lxc-autostart"
Tags lxc ubuntu-14.04