quinta-feira, 1 de maio de 2008

Mandriva One no Pendrive



Atenção: As informações contidas neste texto são consideradas obsoletas. Sendo útil apenas como referência histórica.


Mandriva Seed
O Aurelien Lefebvre liberou o Mandriva Seed, que e um programa para copiar o iso do Mandriva One 2009.1 para um pendrive ou similar. Pode ser baixado do diretório devel/tools/ de um dos mirror da mandriva.
ftp://ftp5.gwdg.de/pub/linux/mandriva/mandrivalinux/devel/tools/
Baixe o mandriva-seed.sh, para um diretório no seu sistema que tenha permissão de executar.
Torne-o executável com o comando chmod +x mandriva-seed.sh, e rode com ./mandriva-seed.sh
Precisa estar em um ambiente gráfico.
Uma tela do xterm pedindo password será aberta, digite a senha do root.
Janela do Mandriva Seed, mostrado abaixo, deve aparecer.

Use o botão Browse para escolher a imagem iso previamente baixado.
Plugue o pendrive, e aguarde alguns segundos, que ele vai aparecer na opção Target, caso tenha mais um pendrive, escolha a que vai ser usado.
Agora e só clicar em "Create Live USB" e esperar a conclusão, feito, e só fechar o programa, remover (ou não) o pendrive e fazer o boot por ele.
Não esqueça de fazer um backup do conteudo do pendrive, já que o mesmo será sobre escrito.


Os procedimentos abaixo ainda não foi testando com a versão 2009.1 do Mandriva One.

Indrodução
Mandriva e uma distribuição que se formou pela junção do Mandrake e da Conectiva, A Mandriva vende uma versão especial para ser rodado direto do pendrive, o Mandriva Flash. Infelizmente ela não disponibiliza uma imagem dessa versão para download. O que me motivou a tentar carregar o versão para cd do Mandriva Linux One a partir de um pendrive. Depois de algumas horas de pesquisas (leitura) e tentativas empiricas, resultou nesse artigo.

Material necessário:
Imagem iso do Mandriva Linux One 2008 Spring, que pode ser baixando de
http://www.mandriva.com/ .
Um pendrive ou cartão de memoria com mais de 700MB livres, formatado em fat (fat16 ou fat32 conforme a capacidade da mídia) e que não tenha arquivos importantes.
Um sistema linux (pode ser o próprio Mandriva one), com as seguintes ferramentas:
module-init-tools (depmod) com suporte a zlib
syslinux
kernel com suporte ao squashfs
dosfstools (mkdosfs)
Opcional: install-mbr(1) ou lilo

Procedimentos:
Criar uma partição fat no pendrive, e torna-la ativa (se necessário).
# fdsik /dev/sde

Formatar a partição em fat se necessário, com label MandrivaOne.
# mkdosfs -F16 -n MandrivaOne /dev/sde1
Se o pendrive estiver formatado, somente mude o label para MandrivaOne, que pode ser realizado pelo mlabel (mtools).

Copiar o conteúdo do cdrom do "Mandriva Linux one 2008 spring" para o pendrive.
# cd /media/MandrivaOne
# cp -rv /media/cdrom/ .

Modificando o initrd:
Caso queira, não e necessário realizar esta etapa, veja no final do texto como fazer pelo Windows XP, use o initrd indicado.
O initrd procura o cdrom pelo nome do volume e faz o mount. Temos que mudar a linha que faz a montagem no linuxrc para que em vez do iso9660 use o vfat. A imagem não possui os modulos para montar um sistema de aquivos em vfat, nem os para suporte a discos (HDs e pendrives e similares). Fazendo as devidas adaptações e possivel usar outros sistemas de arquivos, como o ext2, e montar como um branch do unionfs, e ter um sistema gravavel.

Montar o /media/cdrom/loopbacks/distrib.sqfs, squashfs.
# mkdir /mnt/squash
# mount -t squashfs -o ro,loop /media/cdrom/loopbacks/distrib.sqfs /mnt/squash

Descompactar o boot/cdrom/initrd.gz que esta no pendrive
# cd boot/cdrom/
# gzip -d initrd.gz

Montar o initrd
# mkdir /mnt/initrd
# mount -t ext2 -o rw,loop /media/MandrivaOne/boot/cdrom/initrd /mnt/initrd

Copiar os modulos sd_mod,vfat,fat e msdos para o initrd
# cd /mnt/initrd/lib/modules/2.6.24.4-desktop586-1mnb/kernel/fs
# cp -a /mnt/squash/lib/modules/2.6.24.4-desktop586-1mnb/kernel/fs/msdos/ .
# cp -a /mnt/squash/lib/modules/2.6.24.4-desktop586-1mnb/kernel/fs/fat/ .
# cp -a /mnt/squash/lib/modules/2.6.24.4-desktop586-1mnb/kernel/fs/vfat/ .
# cp /mnt/squash/lib/modules/2.6.24.4-desktop586-1mnb/kernel/fs/nls/nls_cp437.ko.gz nls/
# cd ../drivers/scsi/
# cp /mnt/squash/lib/modules/2.6.24.4-desktop586-1mnb/kernel/drivers/scsi/sd_mod.ko.gz .
# cd

Atualizar as dependências dos modulos do kernel
# depmod -a -b /mnt/initrd 2.6.24.4-desktop586-1mnb

Editar o linuxrc que esta no initrd
# cd /mnt/initrd
# (editor predileto) linuxrc
e incluir as seguintes linhas, junto a linhas similares
probe-modules sd_mod
probe-modules nls_cp437
probe-modules vfat
#
mudar a linha
nash-mount -o ro -t iso9660 LABEL=MandrivaOne /live/media
para
nash-mount -o ro -t vfat LABEL=MandrivaOne /live/media
mude o ro para rw caso queira gravar no pendrive enquanto roda o live mandriva.
grave o arquivo e saia do editor.

Desmontar o initrd
# umount /mnt/initrd

compactar o initrd
# cd /media/MandrivaOne/boot/cdrom/
# gzip -9 initrd
Verifique se o initrd.gz esta com a data atualizada.

Instalando o syslinux:
Copiar o boot/cdrom/syslinux.cfg para a raiz do pendrive
# cd /media/MandrivaOne/
# cp boot/cdrom/syslinux.cfg .
# cd

Desmontar o pendrive
# umount /media/MandrivaOne/

Instalar o syslinux, sde1 e a partição no pendrive.
# syslinux /dev/sde1

Como o syslinux esta instalado na partição, e necessário copiar um mbr para o raiz do pendrive.
# cat /usr/lib/syslinux/mbr.bin >/dev/sde
Pode ser que esse mbr não funcione corretamente (tela somente com um cursor piscando), nesse caso e necessário instalar ou um outro, que pode ser feito usando o install-mbr ou pelo lilo
# install-mbr /dev/sde
ou
# lilo -M /dev/sde mbr
Agora, e só testar o boot.
O syslinux não ira mostrar corretamente os menus e o gráficos como no boot pelo cdrom.

Windows XP:
Pelo windows não seria possível fazer algumas das modificações necessárias no initrd, sendo necessário usar um pré modificado.
 
Baixe o initrd modificado desse endereço:
http://_enigma.nobel.com.br_/eeepc/mandriva_initrd.gz
Renomeia para initrd.gz

Baixe o syslinux para o windows
http://syslinux.zytor.com/
http://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-3.63.zip
Descompacte em algum ponto do seu hd, recomendo na raiz de alguma partição.

Em um pendrive formatado em fat (fat16 ou fat32), não pode ser NTFS, mude o nome do volume onde pretende instalar o Mandriva para MANDRIVAONE (propriedades do drive).

Use algum programa que abra aquivos .iso, como o winrar ou um emulador de cdrom, e copie o conteúdo para a raiz do pendrive.
Copie o initrd.gz previamente baixado para o boot/cdrom do pendrive, copie o syslinux.cfg para a raiz o pendrive.

Abra um prompt de comandos, mude para o diretório onde esta o win32/syslinux.exe.
c:\
cd c:\syslinux-3.63\win32
syslinux -m -a U:

onde U: e a letra correspondente ao pendrive.

Não garanto que esse procedimento funcione.


1) install-mbr foi escrito para o projeto Debian por Neil Turton.