Debugging preseed / late_command para o Ubuntu 16.04 server: tee não encontrado vs diretório inexistente

1

Estou tentando executar o seguinte arquivo preseed em uma máquina do servidor do Ubuntu 16.04 (durante uma compilação do compactador):

d-i preseed/late_command string \
in-target mkdir -v -p -m 0440 "/etc/sudoers.d"; \
in-target echo "%vagrant ALL=(ALL) NOPASSWD: ALL" | tee -a /etc/sudoers.d/vagrant; \
in-target echo "Defaults:vagrant !requiretty" | tee -a /etc/sudoers.d/vagrant; \
in-target chmod 440 /etc/sudoers.d/vagrant;

Em / var / log / installer / syslog eu posso ver o seguinte erro:

log-output: sh:
log-output: tee: not found

Quando eu mudo a parte "| tee -a" para "> >" assim:

d-i preseed/late_command string \
in-target mkdir -v -p -m 0440 "/etc/sudoers.d"; \
in-target echo "%vagrant ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/vagrant; \
in-target echo "Defaults:vagrant !requiretty" >> /etc/sudoers.d/vagrant; \
in-target chmod 440 /etc/sudoers.d/vagrant;

De repente, começa a reclamar que não pode encontrar o diretório, sem dizer nada sobre a linha mkdir - por isso não é nem criar o diretório, nem encontrá-lo:

log-output: sh: can't create /etc/sudoers.d/vagrant: nonexistent directory
log-output: sh: can't create /etc/sudoers.d/vagrant: nonexistent directory
log-output: chmod:
log-output: cannot access '/etc/sudoers.d/vagrant'
log-output: : No such file or directory

Eu tenho procurado outros scripts no github. Também adicionei a seguinte linha ao arquivo preseed.cfg:

d-i pkgsel/include string openssh-server coreutils wget sudo

Eu até tentei instalar o coreutils como um comando no destino, para garantir que o tee esteja disponível. Estive nisso por alguns dias agora, reconstruindo o ubuntu tempo após o tempo, apenas para encontrar os mesmos erros no syslog. Se alguém pudesse lançar alguma luz sobre isso - deve ser algo simples, mas eu não estou vendo isso ...

    
por MetalArend 25.05.2016 / 10:41

3 respostas

1

Você pode usar o Ubiquity em vez do Debian-Installer ( link ), então seu comando seria:

ubiquity  ubiquity/success_command string \
 in-target /bin/mkdir -v -p -m 0440 "/target/etc/sudoers.d"; \
 in-target /bin/echo "%vagrant ALL=(ALL) NOPASSWD: ALL" >> /target/etc/sudoers.d/vagrant; \
 in-target /bin/echo "Defaults:vagrant !requiretty" >> /target/etc/sudoers.d/vagrant; \
 in-target /bin/chmod 440 /target/etc/sudoers.d/vagrant

Ele resolve o "nenhum tal arquivo ou diretório" informado apontando para o lugar certo: / target / etc /

    
por RAAD 27.01.2017 / 20:32
0

Se você preferir usar o debian installer, isso funcionou para mim no servidor 17.10.1 ao adicionar uma chave pública ssh a authorized_keys. Você precisa ter certeza de que o diretório .ssh foi criado antecipadamente.

d-i preseed/late_command string in-target /bin/sh -c 'echo "my string" >> /home/username/.ssh/authorized_keys';

Eu passei cerca de um dia depurando isso e tentei o seguinte com vários resultados. Seria legal se houvesse mais documentação detalhada sobre qual shell é usado no debian installer para as várias diretivas non / 'in-target', mas eu provavelmente não estou olhando no lugar certo.

  1. echo simples no alvo com o caminho simples de authorized_keys:

    in-target echo "my string" >> /home/username/.ssh/authorized_keys;
    

    fornece "diretório não encontrado" em /var/log/installer/syslog

  2. echo simples no destino com o caminho de destino authorized_keys:

    in-target echo "my string" >> /target/home/username/.ssh/authorized_keys;
    

    produz um arquivo blank_keys em branco na máquina de destino e, ao exibir /var/log/installer/syslog , você encontra "minha sequência" em stdout

  3. no destino com o caminho explícito sh -c... e destino authorized_keys:

    in-target /bin/sh -c 'echo "my string" >> /target/home/username/.ssh/authorized_keys';
    

    produz um erro "diretório não encontrado" em /var/log/installer/syslog

Espero que isso economize um pouco de tempo e depuração!

    
por D_________ 04.05.2018 / 17:04
0

Parece não funcionar usar echo em in-target . Para resolver isso tente o seguinte (tentei no Ubuntu 18.04):

d-i preseed/late_command string \
    echo "some text" >> /target/path/to/file.ext ; \
    in-target [some-other-command-in-target]

NOTA:

  • Não use in-target antes da linha
  • Use /target antes do caminho real
  • Em outros comandos, você pode usar principalmente in-target antes da linha
por Sander 03.10.2018 / 10:47