AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 433426
Accepted
pdns
pdns
Asked: 2018-03-26 06:34:18 +0800 CST2018-03-26 06:34:18 +0800 CST 2018-03-26 06:34:18 +0800 CST

Como executar scripts userdata no Custom FreeBSD AMI?

  • 772

Eu li que você só pode executar userdata uma vez em um EC2 AMI. Se você criar uma AMI personalizada a partir de uma instância do EC2, não poderá executar o script userdata nessa AMI personalizada. Em instâncias do Ubuntu, você pode remover /var/lib/cloud/* , criar uma AMI personalizada e executar userdata na AMI personalizada. Não consigo encontrar um equivalente a /var/lib/cloud/* no FreeBSD.

Existe uma maneira de executar userdata no FreeBSD AMI personalizado ou uma alternativa para criar um AMI para que você possa executar scripts de userdata novamente?

Existe #cloud-boothook para Linux, mas para FreeBSD, só encontrei o configinit que não faz o que preciso. Passamos argumentos para os scripts userdata da linha de comando ao iniciar instâncias.

freebsd amazon-ec2
  • 2 2 respostas
  • 936 Views

2 respostas

  • Voted
  1. Best Answer
    jornada
    2018-08-01T20:37:14+08:002018-08-01T20:37:14+08:00

    O FreeBSD AMI na AWS não fornece o mesmo nível de suporte para scripts user_data como outros AMIs. Como você apontou, ele não suporta #cloud-boothookuser_data e ignora qualquer user_data passado após a inicialização.

    Uma solução simples é a seguinte:

    sed -i '' '/KEYWORD: *firstboot$/d' /usr/local/etc/rc.d/ec2_configinit
    

    Isso é um hack - sua instância agora executará todos os scripts user_data, mesmo aqueles sem a #cloud-boothooktag, mas na minha opinião é muito melhor do que o comportamento padrão do script. Observe que sempre é possível desabilitar o ec2_configinitscript completamente desativando-o em /etc/rc.conf.

    • 2
  2. Gunther Schadow
    2020-01-13T17:21:23+08:002020-01-13T17:21:23+08:00

    Eu forneço minha própria resposta, pois a resposta aceita é muito grosseira.

    ATUALIZAÇÃO: Achei a resposta aceita muito grosseira, mas no final, estou usando de qualquer maneira , pois funciona melhor para mim. O restante aqui fornecerá apenas alguns antecedentes adicionais que alguém pode achar útil. A resposta aceita funciona melhor para mim no final porque: (1) me permite sempre executar um script de shell, (2) não faz nada além de processar o arquivo de dados do usuário da maneira que explico abaixo, ( 3) Ainda posso desativá-lo no rc.conf se eu quiser.

    O problema é que, mesmo no Amazon Linux, o script de dados do usuário é executado apenas na primeira inicialização, exceto se você usar o truque MIME multipart/mixed. Você pode procurar https://cloudinit.readthedocs.io/en/latest/topics/format.html , mas estou dando um exemplo de algo que ultrapassa o limite:

    Content-Type: multipart/mixed; boundary="schnipp-schnapp"
    MIME-Version: 1.0
    
    --schnipp-schnapp
    Content-Type: text/cloud-config; charset="us-ascii"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Content-Disposition: attachment; filename="cloud-config.txt"
    
    #cloud-config
    cloud_final_modules:
    - [scripts-user, always]
    
    --schnipp-schnapp
    Content-Type: text/x-shellscript; charset="us-ascii"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Content-Disposition: attachment; filename="user-data.sh"
    
    #!/bin/bash
    echo "Hello World." >> /etc/motd
    
    --schnipp-schnapp
    Content-Type: text/x-shellscript; charset="us-ascii"
    MIME-Version: 1.0
    Content-Transfer-Encoding: 7bit
    Content-Disposition: attachment; filename="another.sh"
    
    #!/bin/bash
    echo "Kilroy was here." >> /etc/motd
    
    --schnipp-schnapp
    Content-Type: image/jpeg
    MIME-Version: 1.0
    Content-Transfer-Encoding: base64
    Content-Disposition: attachment; filename="imput64-8503-small.jpg"
    
    /9j/4AAQSkZJRgABAQEAlgCWAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcU
    FhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgo
    ...
    JFSUkfQjjHr9yT2T9SSSdLS15R/qM64pbLRUcsExOk6axzpxhiQATFSDIB6E68K/c6WlrzEoTypl
    JoceL9zq7NbXis8oopa6RRNUQovmNlCM5IIzxQLkgkD0wQCAFLYaXzKkSSVEkzOZXqJJOUjsfXkf
    cknJOMk++lpa9u+AGkJwsuJACiqCeJGm5pJiZJXBr4Sx04IfzZiS3I9r3/TQakADkD260tLWjxQk
    hE9/tVFgPm8K/9k=
    
    --schnipp-schnapp--
    

    O que descobri foi que os dois scripts são executados em ordem alfabética e a parte da imagem foi simplesmente ignorada.

    A menos que os mantenedores do FreeBSD AMI implementem esse material de várias partes e todas as coisas que ele envolve

    • gancho de texto/nuvem
    • text/cloud-config
    • text/cloud-config-archive
    • texto/jinja2
    • manipulador de texto/parte
    • text/upstart-job
    • text/x-include-once-url
    • text/x-include-url
    • text/x-shellscript

    por que você deseja que todas as outras coisas que o ec2-cloudinit executa sempre assim? Em última análise, você está sozinho.

    Não há realmente nenhum problema em apenas buscar os dados do usuário e decidir o que fazer com eles. Aqui está como você buscá-lo:

    fetch -q -o - http://169.254.169.254/latest/user-data
    

    e assim, se você quiser executá-lo, basta colocá-lo em rc.local:

    fetch -q -o - http://169.254.169.254/latest/user-data |sh 
    

    ou

    fetch -q -o /tmp/user-data.sh http://169.254.169.254/latest/user-data
    mkdir 700 /tmp/user-data.sh
    /tmp/user-data.sh
    

    não é grande coisa realmente. Não tenho certeza se vale a pena suportar a complexa estrutura de várias partes. O FreeBSD AMI faz isso de maneira muito diferente, mais simples e, sem dúvida, muito bem.

    • se começar com hash-bang #! ele será salvo e executado
    • se começar com ">/var/tmp/here" será gravado no destino especificado
    • se começar com ">>/var/tmp/here" será anexado ao destino especificado
    • caso contrário, ele é tratado como um arquivo tar descompactado de scripts de shell, expandido e, em seguida, cada um dos arquivos é executado usando as regras acima.

    Como não é o padrão da AWS, eu simplesmente não me incomodaria com isso. Basta ter um único script e forçá-lo a ser executado em rc.local, ou nem mesmo executado, apenas inspecionado para encontrar algum parâmetro que controle o comportamento de alguma forma.

    • 1

relate perguntas

  • FreeBSD com duas interfaces de rede e domínios diferentes

  • Problemas do Freebsd 11.1 com falha no teste de avaliação do gnu m4

  • Freebsd setfacl

  • ps -vxa não classifica em relação à memória

  • FreeBSD's sh: funções de lista

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    ssh Não é possível negociar: "nenhuma cifra correspondente encontrada", está rejeitando o cbc

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    Como descarregar o módulo do kernel 'nvidia-drm'?

    • 13 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Wong Jia Hau ssh-add retorna com: "Erro ao conectar ao agente: nenhum arquivo ou diretório" 2018-08-24 23:28:13 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST
  • Martin Hope
    Bagas Sanjaya Por que o Linux usa LF como caractere de nova linha? 2017-12-20 05:48:21 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve