Inicializando um Knoppix ISO do Grub - device / uri madness

5

Estou tentando inicializar um ISO do Knoppix do Grub da seguinte forma:

loopback loop /boot/iso/knoppix.iso
linux (loop)/boot/isolinux/linux lang=en bootfrom=/mnt-iso//boot/iso/knoppix.iso
initrd (loop)/boot/isolinux/minirt.gz

Minha pergunta é o parâmetro bootfrom . Se eu não incluir a barra dupla, o sistema nunca será inicializado. Ele reclamará que não encontrou a pasta KNOPPIX na unidade (porque está dentro da ISO).

Ele procurará as unidades na tentativa de localizar essa pasta - até o final das quais as unidades aparecerão em /dev/ de sda1 a sdz15 .

  • Se eu incluir a barra dupla no parâmetro bootfrom , ele irá procurar as unidades algumas vezes, então (presumivelmente após a montagem /mnt-iso ) ele irá triunfalmente declarar "Yay! Encontrei em /dev/sdd5/boot/iso/knoppix.iso "
    É claro que, a esta altura, sda1 a sdh15 foram gerados em /dev/ , então isso não pode ser uma coisa boa.

  • Se eu usar bootfrom=/dev/sdd5/boot/iso/knoppix.iso , funcionará imediatamente, mas não posso garantir que será este dispositivo em todos os sistemas. Posso usar o UUID?
    Eu li que no fedora 15 você poderia usar root=live:UUID={uuid}:{isofile} mas este parece não ser o caso mais

  • Por que se comporta de maneira diferente se eu tiver apenas uma barra?

Isso é muito confuso.

Editar: Progresso!

Com o seguinte menuentry eu consegui fazer o knoppix reivindicar para abrir e checar um arquivo ISO, apenas para dizer que ele não consegue encontrar a pasta KNOPPIX nele.

Cannot find KNOPPIX dir in iso image:

loopback loop /boot/iso/knoppix.iso
linux (loop)/boot/isolinux/linux lang=en bootfrom=UUID=<uuid>/boot/iso/knoppix.iso
initrd (loop)/boot/isolinux/minirt.gz

É difícil dizer o que está acontecendo, porque o TTY é pequeno e o texto não quebra.

Editar: Ainda mais progresso. Depois de passar metade do repo do knoppix com um dente fino grep decidi ver se o problema estava no kernel, já que obviamente o resto do sistema não estava sendo carregado de qualquer maneira.

strings linux | grep "Cannot find" - Nenhum resultado

Bem, e sobre initrd.gz? (Note que eu não tenho idéia do que está aqui, eu ouvi em algum lugar que era um pedaço real de memória)

Ooh tem outro arquivo lá ... Ooh tem um sistema de arquivos! O que há nesse arquivo grande chamado init? ...

   if [ ! -r "$BOOTSYS/$knoppix_dir/KNOPPIX" ]; then
    message  "${CRE}${RED}Cannot find $knoppix_dir dir in ISO image ${MAGENTA}${BOOTDEV}${YELLOW}/${BOOTFILE}${NORMAL} "

REALMENTE? Quem na terra faz a mensagem de erro usar uma variável claramente separada da condição?

Tudo bem, pelo menos eu sei a linha exata do problema (591), mas a única maneira de ver isso é uma tentativa extremamente agressiva de mexer com este bash e codificar isso para me deixar passar ... Ou para definir minha partição em questão para sda. E é claro que eu não sei como fazer ainda. Yay! Assim. Como faço para editar init ?

    
por J V 25.11.2013 / 16:41

1 resposta

2

Acontece que o script de inicialização no initramfs do knoppix é um código de espaguete.

Em particular, foi codificado para apenas aceitar dispositivos no formato /dev/sdxy , causando problemas com nomes de caminhos mais longos e UUID.

Acabei de criar um novo initrd, cortar toda a seção e codificar meu UUID para ele. Claro que não é assim tão fácil. O knoppix initrd é tão pequeno que não tem coisas como blkid ou a capacidade de montar por UUID= .

Acabei encontrando o arquivo do dispositivo com fdisk e grep:

message  "${CRE}${RED}This minitrt has been hacked by Jonathan Vollebregt due to the horrific state of the knoppix init. You are about to see a very dirty hack.${NORMAL} "

  echo "Hardcoded identifier awaits: Using fdisk and partition details to match device"
  echo "grepping '/dev/sd.5.+4096.+57935871.+28965888.+83.+Linux'"
  BOOTDEV='fdisk -lu'
  BOOTDEV='echo "$BOOTDEV" | grep -E "^/dev/sd.5.+4096.+57935871.+28965888.+83.+Linux$"'
  BOOTDEV='echo "$BOOTDEV" | grep -o "^/dev/sd.5"'

  if [ -z "$BOOTDEV" ]; then
   echo "Well shit..."
   sleep 1m
  fi

  echo "Device file: $BOOTDEV"
  echo "mkdir -p /mnt-hack"
  mkdir -p "/mnt-hack"
  echo "mount -t ext4 -o ro $BOOTDEV /mnt-hack"
  mount -t ext4 -o ro "$BOOTDEV" "/mnt-hack"

  BOOTFILE="/${BOOTFROM#*/}"
  echo "Stripping also reveals: /$BOOTFILE"
  echo "mount -t iso9660 -o ro /mnt-hack/$BOOTFILE $BOOTSYS"
  mount -t iso9660 -o ro "/mnt-hack/$BOOTFILE" "$BOOTSYS"

  echo "knoppix_dir=$knoppix_dir"
  echo "BOOTSYS=$BOOTSYS"

A partição em questão é de tamanho único, então duvido que colidirá em breve.

    
por 26.11.2013 / 12:38

Tags