Como faço para passar argumentos da linha de comando PXE para um script% post,% post do kickstart?

7

Basicamente eu quero um ARGV como o uso na linha de comando PXE, mas não consigo ver nenhuma documentação para fazer isso.

basicamente eu quero passar algo como

VLAN de HOSTNAME do scientific-linux-6

em seguida, em% pre acertar algumas APIs para obter as informações de rede necessárias para anexá-las à configuração do KS. Essa parte é fácil, se eu tiver os parâmetros.

Finalmente, em% post eu quero começar uma corrida de chef e cinta de boot para o servidor do chef. Isso também precisa saber hostname / domain name (basicamente tem hostname -f não explodir), mas isso não deve ser muito ruim se eu puder completar o acima. Infelizmente, esse era meu objetivo original, mas falhou quando percebi que ainda não tinha o nome do host definido.

Aqui está o que eu aprendi até agora.

$ cat linux-install/msgs/param.msg 



                        09Kernel Parameter Help07

Some kernel parameters can be specified on the command line and will be
passed to the running kernel.  This does not include options to modules
such as ethernet cards or devices such as CD-ROM drives.

To pass an option to the kernel, use the following format:
     0flinux <options>07
If a different installation mode is desired, enter it after the option(s).

For example, to install on a system with 128MB of RAM using expert mode, 
type the following:
     0flinux mem=128M expert07

To pass options to modules, you will need to use the expert mode to disable
PCI autoprobing.  When the installation asks for your device type that needs
an option or parameter passed to it, there will be a place to type those
in at that time. 

Doce !? Então isso significa que no PXE eu posso ir como ...

scientific-linux-6 linux ARGV_APPEND

certo?

Depois de colocar as coisas em% pre e% post, encontrei Esta apresentação e algumas outras menções

Stick this at the top of the %pre section, and it will take anything of the form var=value
from /proc/cmdline and turn it into a variable you can use directly

set -- 'cat /proc/cmdline'

for I in $*; do case "$I" in *=*) eval $I;; esac; done

Então, isso significa que posso dizer

scientific-linux-6 linux HOSTNAME=foo.example.com, VLAN=ddd

certo?

Em seguida, em% pre Isso significa que posso

Acertei minha API para obter IP, máscara, gateway e depois mudei de rede para algo como

network --bootproto=static --ip=10.0.2.15 --netmask=255.255.255.0
 --gateway=10.0.2.254 --nameserver=10.0.2.1

Conforme descrito aqui

Em seguida, isso nos configura em% post para nossa corrida chef-cliente.

Minha pergunta é. Parece que isso vai funcionar? Existe uma maneira melhor? Certamente alguém já fez isso antes?

Atualização (solução implementada com base na resposta)

Na linha de comando do PXE acabei passando opções

$ hotbox linux prefix_varname="foo" prefix_another_var="bar"

(tudo depois que linux é colocado em / proc / cmdline. hotbox foi o rótulo PXE.) Em seguida, em %post eu analisei / proc / cmdline (em Ruby) procurando por todas as variáveis que correspondiam / prefixo _ * / e transformou-os em um hash. Isso leva a passar o chef para uma configuração adicional com base nos resultados de uma solicitação da Web.

Nota: Razor não estava por perto quando eu fiz tudo isso. Eu pessoalmente não estava satisfeito com o barbeador, e ainda estamos usando mais ou menos o método acima.

    
por EnabrenTane 23.03.2012 / 02:11

3 respostas

3

Com opções booleanas simples, eu fiz um grep em /proc/cmdline , o que é muito fácil. Para as opções de valor-chave, o truque set parece útil, embora eu não tenha tentado. Respostas específicas para suas perguntas:

1) Sim, parece que isso vai funcionar. Eu fiz coisas muito parecidas com o kickstart e /proc/cmdline .

2) Não, não acredito que exista um jeito melhor. O kernel expõe suas opções de linha de comando em /proc/cmdline e o kickstart não fornece nenhum mecanismo de alto nível para lidar com opções de linha de comando do kernel.

3) Sim, isso já foi feito antes. Experimente e volte se você não conseguir fazer isso funcionar.

Algumas reflexões adicionais:

1) Não coloque uma vírgula entre as opções da linha de comando (apenas separe-as com espaços).

2) Com o pxelinux, pode ser útil usar uma linha append . Por exemplo:

append initrd=f16-x86_64/initrd.img ks=nfs:server.example.com:/path/to/f16.ks mycustomflag mykey=myval

3) As configurações de rede (como o exemplo do nome do host que você forneceu) geralmente são mais bem atendidas pelo DHCP.

    
por 23.03.2012 / 07:00
2

Consegui fazê-lo funcionar usando os seguintes comandos para analisar todos os pares de valores-chave em variáveis:

# Get the kernel parameters
params='cat /proc/cmdline'
# Split them on spaces
params_split=(${params// / })
# Go through each of them
for p in "${params_split[@]}"; do
  # And if it's a key value pair
  if [[ $p =~ "=" ]]; then
    # And if the key doesn't have a period in it
    p_split=(${p//=/ })
    if [[ !($p_split[0] =~ ".") ]]; then
      # Then set the key to the value
      eval $p;
    fi;
  fi
done
    
por 19.04.2013 / 17:49
0

Isso deve ser

if [[ ! ($p_split[0] =~ ".") ]]; then
      ^^^

E você pode querer cercar isso com:

#raw
...
#end raw

Portanto, não haverá problemas com a interpolação de modelos cobbler / cheetah.

    
por 14.06.2017 / 22:18