Veja o que eu faço para personalizar as imagens do FreeDOS:
-
inicie com uma imagem de disquete inicializável que eu baixei do site do Freedos. Infelizmente, ele está cheio de coisas que eu não preciso apenas para executar algum utilitário único, como um atualizador de BIOS.
-
monte uma cópia dele com:
mkdir -p ./floppy cp -a ./freedos-1440kb.img freedos-empty.img mount -o loop,rw freedos-empty.img ./floppy
-
cd ./floppy
e exclua tudo o que não for necessário. Isso deve acabar com cerca de 1,2 ou 1,3 MB livres na imagem de 1,44 MB. -
cd .. ; umount ./floppy
-
Isso me dá uma imagem inicializável quase vazia, que posso usar para fazer quantas imagens personalizadas eu quiser. Eu então faço uma cópia disso e então copio o que eu preciso para isso. por exemplo,
cp -a ./freedos-empty.img ./freedos-spinrite.img mount -o loop,rw freedos-spinrite.img ./floppy cp spinrite.exe ./floppy umount ./floppy
Esta imagem pode então ser copiada para uma unidade de disquete, unidade flash, etc. cat freedos-spinrite.img > /dev/sdX
(onde sdX
é o nó do dispositivo para seu stick USB). Eu quase nunca me incomodo de fazer isso porque eu nunca consigo encontrar um flash drive usável e vazio quando eu preciso de um .... é também mais trabalho e leva mais tempo do que usar menus grub ou tftp. E é mais lento para inicializar um stick USB do que uma imagem de disco armazenada no disco rígido local ou no meu servidor tftp.
No meu caso, copio para o diretório /boot/images/
e executo update-grub
... e, em seguida, uso scp
para copiá-lo para outras máquinas onde ele possa ser necessário e executar update-grub
neles também via ssh.
Eu também copio para o meu /var/lib/tfptboot/freedos/
e executo um script que escrevi para gerar entradas de menu para todos os arquivos *.img
nesse diretório.
Isso me permite inicializar a imagem freedos do menu grub na inicialização, E pela rede via ipxe e tftp em qualquer máquina que tenha uma opção "inicializar da placa de rede" no momento da inicialização (ou seja, quase todas as máquinas atualmente. Tudo isso se você incluir o fato de que ipxe
também pode ser inicializado a partir do grub).
Eu usei isso para criar imagens inicializáveis para atualização de BIOS em placas-mãe, reflash cartões LSI SAS para o modo de TI e aplicar atualizações de firmware a, por exemplo, alguns discos rígidos da Seagate.
BTW, é por isso que eu gosto de fazer partições /boot
"superdimensionadas" (1 ou 2GB ou mais) - para que eu possa inicializar qualquer imagem de qualquer tamanho "razoável". Também para que eu não fique sem espaço em / boot e tenha que limpar minhas imagens antigas do kernel o tempo todo. Também é útil para, por exemplo, inicializar gparted
ou clonezilla
images.
Coisas extras: configurando o grub
Configurar tftp
para isso é um bom trabalho inicialmente, então não vou entrar nisso aqui (tenho certeza que descrevi o processo em outra resposta neste site, e meus scripts tftp são na minha conta github - mas eu não fiz o upload dos scripts memdisk / freedos), mas há muito pouco que precisa a ser feito para grub
:
- instale
syslinux
(ou, pelo menos, obtenha uma cópia do bináriomemdisk
a partir dele). -
cp memdisk /boot
- mkdir -p / boot / images
- copie seus arquivos de imagem
*.img
,*.iso
inicializáveis para/boot/images
. - copie o script
42_memdisk
(veja abaixo) em/etc/grub.d/
e torne-o executável comchmod +x /etc/grub.d/42_memdisk
- execute
update-grub
como raiz
Nota: os trabalhos acima para o Debian e a maioria das distribuições relacionadas / derivadas como Ubuntu e Mint. Outras distros têm configurações ligeiramente diferentes para grub
, então você teria que ajustar o procedimento de acordo.
memdisk
pode inicializar qualquer imagem de disco que seja inicializável - de imagens de disquete a imagens de CD-ROM / DVD, a imagens de disco rígido.
42_memdisk (este é o script que faz o trabalho de gerar entradas de menu para o grub):
#!/bin/sh
set -e
IMAGES=/boot/images
. /usr/lib/grub/grub-mkconfig_lib
if test -e /boot/memdisk ; then
echo "Found memdisk: $MEMDISKPATH" >&2
MEMDISKPATH="$( make_system_path_relative_to_its_root "/boot/memdisk" )"
find "$IMAGES" -name '*.img' -o -name '*.iso' | sort |
while read image ; do
IMAGEPATH="$( make_system_path_relative_to_its_root "$image" )"
echo "Found image: $IMAGEPATH" >&2
cat << EOF
menuentry "Bootable image: $(basename $IMAGEPATH | sed -E -e 's/\.(img|iso)$//i')" {
EOF
prepare_grub_to_access_device ${GRUB_DEVICE_BOOT} | sed -e 's/^/\t/'
cat << EOF
linux16 $MEMDISKPATH bigraw
initrd16 $IMAGEPATH
}
EOF
done
fi
IIRC, isso é modificado a partir de um script que encontrei em algum lugar anos atrás enquanto pesquisava como fazer coisas assim (não me lembro onde).
Exemplo de saída:
# update-grub
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.14.0-2-amd64
Found initrd image: /boot/initrd.img-4.14.0-2-amd64
Found linux image: /boot/vmlinuz-4.14.0-1-amd64
Found initrd image: /boot/initrd.img-4.14.0-1-amd64
Found linux image: /boot/vmlinuz-4.12.0-2-amd64
Found initrd image: /boot/initrd.img-4.12.0-2-amd64
Found iPXE image: /boot/ipxe.lkrn
Found memtest86 image: /memtest86.bin
Found memtest86+ image: /memtest86+.bin
Found memdisk:
Found image: /images/LSI.img
Found image: /images/Seagate-PH-CC49.img
Found image: /images/fd-asus-m5a97.img
Found image: /images/freedos-empty.img
done