Tuesday, November 26, 2013

Criando um pendrive com vários Fedoras Live

O fim de semana passado foi de backups e reinstalações de Fedora aqui em casa, para atualizar os laptops da família. Sim, eu conheço o Fedup, preupgrade e outras formas de atualizar o nosso Sistema Operacional favorito, obrigado. Ainda assim, de tempos em tempos eu gosto de fazer backup, chutar tudo o que tem no disco e reinstalar do zero, para dar uma sensação maior de "alívio refrescante". Cada um sabe de si. :-)

Eu tinha as ISOs Live do Fedora 20 Beta RC5, em 32 e 64 bits, e pensei em dar um jeito de colocar as duas co-existindo no mesmo pendrive, pra facilitar a minha vida (um dos laptops antigos é 32b). Tinha recém tentado usar um DVD multi-Live e multi-arch, do Fedora 19, que o Wolnei Tomazelli havia me dado quando nos encontramos por sorte no aeroporto de Floripa. Infelizmente o DVD estava meio arranhado e travava a instalação no meio do caminho, então decidi começar a usar apenas pendrive mesmo.

Eu já criei outros pendrives com Lives ou Installs do Fedora, usando o comando livecd-iso-to-disk, do pacote livecd-tools, porém nunca com várias versões no mesmo pendrive. No fim o processo não foi totalmente automático como eu esperava, mas também não foi nenhuma dor de cabeça arrumar os detalhes do syslinux (boot loader usado na pendrive). Pra quem nunca mexeu mais diretamente nisso pode ser um bom aprendizado.

Preparando o pendrive

Um ponto importante a se cuidar antes de preparar um pendrive de Fedora, é que grande parte dos pendrives não vem com um MBR apropriado, ou vem com uma descrição da partição meio quebrada que o Sistema Operacional entende porém o BIOS se perde na hora de dar boot. Me desculpem a explicação nada técnica, mas minha impressão é essa e só sei que "formatando resolve". ;-)

Para deixar a pendrive preparada, entre no utilitário Discos (gnome-disks), selecione a pendrive, selecione a partição, desmonte-a (ícone de stop, é um quadradinho preto) se estiver montada, e remova-a (ícone que é um sinal de menos). Depois clique no ícone das engrenagens na parte de cima da janela, que se referem ao disco todo, e formate a pendrive no padrão MBR (compatível com a maioria dos computadores). Isso na verdade só zera a tabela de partições do bichinho, reescrevendo o setor 0.

Depois disso, adicione uma nova partição no padrão FAT, clicando no ícone que é um sinal de mais. Por último, clique no ícone de engrenagem que aparece abaixo da representação do disco, e escolha editar o tipo da partição. Para garantir, mude o tipo da partição para W95 FAT32 LBA (0x0c), e marque a partição como bootável. UFA! Falta pouco.

Os comandos a partir de agora usam o dispositivo /dev/sdb para representar a pendrive. TOME CUIDADO E VERIFIQUE QUAL DISPOSITIVO REPRESENTA A SUA PENDRIVE. Para garantir que o pendrive tenha um MBR que funcione, rode o comando abaixo:

$ sudo dd if=/usr/share/syslinux/mbr.bin of=/dev/sdb

Agora falta apenas colocar o syslinux no bicho. Rode mais este comando:

$ sudo syslinux -i /dev/sdb1

Pronto, finalmente o pendrive está seguramente pronto pra bootar em qualquer máquina. É possível testar o setup até agora usando o qemu, rodando:

$ sudo qemu-kvm -hda /dev/sdb

A janela do qemu vai mostrar o prompt do syslinux (boot:), indicando que o pendrive está bootando corretamente. Feche o qemu e siga adiante.

Gravando as imagens na pendrive

Bom, partindo do ponto em que o pendrive está plugado porém desmontado e pronto pra bootar (lembre de sempre desmontar pelo utilitário Discos ou manualmente no shell), que tu sabes qual é o dispositivo a ser utilizado e que baixastes as ISOs que queres usar, rode estes comandos:

$ sudo   livecd-iso-to-disk   --multi   --livedir   F20_32   \
        Fedora-Live-Desktop-i686-20-Beta-5.iso    /dev/sdb1

$ sudo   livecd-iso-to-disk   --multi   --livedir   F20_64   \
        Fedora-Live-Desktop-x86_64-20-Beta-5.iso    /dev/sdb1

Cada um vai demorar vários minutos, enquanto eles copiam as imagens. Em princípio estaria tudo pronto, porém fica faltando um pedaço que o livecd-iso-to-disk não faz, que é criar uma configuração de syslinux que boote qualquer uma das imagens. Na verdade, neste ponto, a pendrive nem boota corretamente, pois fica no prompt do syslinux sem se ter muito o que fazer ali, a não ser que se saiba de cor a linha gigantesca de boot das imagens Live. O problema é que o livecd-iso-to-disk coloca os diretórios do syslinux dentro do diretório de cada imagem Live, porém quando o syslinux boota ele espera encontrar os seus arquivos de configuração e comandos dentro do diretório syslinux, ou na raiz do pendrive (configuração padrão).

Arrumando a configuração do syslinux

A correção é bem fácil, basta montar a pendrive e copiar o diretório syslinux (copiar, não mover) de um dos diretórios de imagem Live para o raiz do pendrive. Eu copiei o diretório syslinux que achei dentro do F20_64, desmontei e bootei, e funcionou. MAS, funcionou só para as imagens de 64 bits. O problema é que o livecd-iso-to-disk não é esperto o suficiente pra juntar as duas configurações de syslinux das duas imagens Live, então essa tarefa fica pra nós. :)

Dentro do diretório syslinux copiado, haverá um arquivo chamado syslinux.cfg. É este arquivo quem descreve o que o syslinux vai fazer quando boota, inclusive montar o menu que é interpretado pelo vesamenu.c32 do mesmo diretório. Abra esse arquivo no gedit, e passe alguns minutos lendo e entendendo o que ele faz.

Depois de se familiarizar um pouco com a sintaxe, note as linhas que contém "label linux0" e "kernel /F20_64/syslinux/vmlinuz0", por exemplo. Estas são as linhas que descrevem como bootar os kernels e imagens de disco live presentes na pendrive. O que precisamos é abrir o syslinux.cfg da OUTRA imagem live, e copiar estas entradas para o syslinux.cfg global do pendrive. É importante mudar o nome do label, para que o syslinux não se perca. Basta mudar de "label linux0" pra "label linux1".

Na minha pendrive eu copiei também a seção "label basic0" da imagem 32 bits, para ser possível bootar a imagem de 32 bits com driver de vídeo vesa, mudando-a para "basic1". É importante mudar também a descrição das linhas "label" para identificar qual imagem é de 32 bits e qual é de 64 bits.

A primeira parte do syslinux.cfg ficou assim:

label linux0
  menu label ^Start Fedora Live 64b
  kernel /F20_64/syslinux/vmlinuz0
  append initrd=/F20_64/syslinux/initrd0.img root=live:UUID=E6F0-8DA8 rootfstype=vfat ro rd.live.image live_dir=F20_64 quiet  rhgb rd.luks=0 rd.md=0 rd.dm=0
  menu default

label linux1
  menu label ^Start Fedora Live 32b
  kernel /F20_32/syslinux/vmlinuz0
  append initrd=/F20_32/syslinux/initrd0.img root=live:UUID=E6F0-8DA8 rootfstype=vfat ro rd.live.image live_dir=F20_32 quiet  rhgb rd.luks=0 rd.md=0 rd.dm=0

Note como cada label aponta para um diretório específico. Facilita testar com o qemu-kvm (de preferência passando -m 1024 para ele ter bastante memória) até ter certeza que tudo está perfeito.

Adicionando ainda mais uma imagem

Pra completar, resolvi baixar ainda uma terceira imagem Live, dessa vez a Fedora-Live-LXDE-i686-20-Beta-5.iso para testar em sistemas mais antigos. Vamos rever como adicionar ela ao pendrive, que agora terá 3 imagens Live diferentes:

$ sudo   livecd-iso-to-disk   --multi   --livedir   F20_LX32   \
        Fedora-Live-LXDE-i686-20-Beta-5.iso    /dev/sdb1

Quando estiver pronto, monte o pendrive de novo, e faça o esquema de copiar as seções do syslinux.cfg dessa nova imagem para o syslinux.cfg "global" da pendrive. Agora as seções "label linux*" ficaram assim:

label linux0
  menu label ^Start Fedora Live 64b
  kernel /F20_64/syslinux/vmlinuz0
  append initrd=/F20_64/syslinux/initrd0.img root=live:UUID=E6F0-8DA8 rootfstype=vfat ro rd.live.image live_dir=F20_64 quiet  rhgb rd.luks=0 rd.md=0 rd.dm=0
  menu default

label linux1
  menu label ^Start Fedora Live 32b
  kernel /F20_32/syslinux/vmlinuz0
  append initrd=/F20_32/syslinux/initrd0.img root=live:UUID=E6F0-8DA8 rootfstype=vfat ro rd.live.image live_dir=F20_32 quiet  rhgb rd.luks=0 rd.md=0 rd.dm=0

label linux2
  menu label ^Start Fedora Live LXDE 32b
  kernel /F20_LX32/syslinux/vmlinuz0
  append initrd=/F20_LX32/syslinux/initrd0.img root=live:UUID=E6F0-8DA8 rootfstype=vfat ro rd.live.image live_dir=F20_LX32 quiet  rhgb rd.luks=0 rd.md=0 rd.dm=0

A seção que contiver "menu default" será a que estará selecionada por default no menu criado pelo vesamenu.c32 do syslinux. Para finalizar os últimos retoques, se pode remover alguns arquivos agora inúteis, como os "boot.cat", as cópias extras do memtest, etc. Para servir de referência, aqui está o arquivo syslinux.cfg que eu criei até agora, separado com linhas extras pra facilitar a compreensão.

Novamente, lembre de sempre desmontar pelo utilitário Discos ou manualmente no shell, ao invés de "ejetar", pois o "ejetar" desliga o pendrive, e será necessário retirá-lo e plugá-lo novamente, e aí desmontar de novo. :-) E teste sempre com "sudo qemu-kvm -m 1024 -hda /dev/sdb", para facilitar a vida.

Para fazer um pendrive com syslinux ainda mais útil, se pode inclusive copiar alguns módulos extras do syslinux para dentro do diretório syslinux na raiz do pendrive. Eles estão em /usr/share/syslinux e podem ser acessados no prompt de boot do syslinux, quando se sai do menu apertando ESC. No meu pendrive eu copiei também os módulos hdt.c32, ls.c32, meminfo.c32, poweroff.com, reboot.c32 e rosh.c32. Experimentá-los fica como tema para casa. ;-)

Monday, November 11, 2013

TecLand, palestras, Fedora e novos hábitos

Este fim de semana foi bastante corrido mas muito proveitoso. Muita coisa legal aconteceu. Eu e o Marcelo Barbosa participamos do IV Encontro TecLand, com uma palestra sobre Fedora em arquitetura ARM, e o Marcelo também apresentou uma outra palestra sobre o oVirt (nessa eu só dei pitaco). O evento foi ótimo, provavelmente o melhor que o TecLand já fez. O Álisson e o  Éder, do TecLand, e a Fabiane Erlo, da UnC, realizaram um evento muito legal, bem planejado e executado, e com público ao redor de 100 pessoas.

Mas antes e depois do evento aconteceu muita coisa legal também, pois o Marcelo veio aqui pra minha casa já na sexta-feira, então batemos altos papos sobre ARM e etc. Sexta no final da tarde o Álisson passou aqui pra nos pegar, pegamos também o Paulo Klaus e fomos pra Concórdia. Depois de alguns ajustes e testes no auditório da UnC, o Jackson Laskoski e o Adinarte nos levaram pra uma janta buenacha, onde ficamos até meia-noite em altos papos filosóficos e nerds. :)

No sábado rolou o evento lá na UnC, onde tivemos até um tradicional "pão com salsichão" para os participantes, cortesia do Prox. Max Pezzin, apresentações muito legais e um público bem interessado. Terminada a "ordem do dia", voltamos pra Chapecó, e no domingo passeamos bastante com o Marcelo na cidade pra fazer um  pouco de turismo. No meio da tarde resolvemos libertar o laptop do Álisson, que rodava um Windows qualquer, então fomos pra uma sorveteria (estava quente pacas aqui) com um pendrive do Fedora 20 (Beta RC5) e um modem 3G.

Acabamos não apenas ajudando o Álisson a reinstalar seu laptop e fazer tudo funcionar a contento no Fedora 20, mas também aproveitamos para fazer uma longa caminhada batendo papo, onde o Marcelo me deu o caminho das pedras pra virar tradutor do Fedora, e encorajou eu e o Álisson a fazer caminhada e corrida todos os dias para cuidar da saúde física e mental. Eu já comecei hoje mesmo o "novo hábito", saí de casa para caminhar às 6h40 e voltei às 7h40, tendo dado algumas voltas no eco-parque. Já traduzi algumas coisas lá no transifex também. :)

Eu já vinha no ritmo das palestras e apresentações, pois tinha na semana passada conversado com alunos do SENAI e também da UCEFF, aqui em Chapecó. Tinha ficado um tempo sem realizar atividades relacionadas ao Fedora, mas agora retornei à ativa, hehehe. Na conversa da UCEFF eu acabei de vez com meus DVDs do Fedora 18, agora preciso arranjar mais, já do Fedora 20!

Saturday, November 02, 2013

Costumes de quem usa Software Livre: "Hmm alguém já arrumou esse bug"

É engraçado como os sistemas que usamos vão aos poucos moldando nossos hábitos, até para as coisas mais simples. Agora de noite eu resolvi gravar um vídeo da Peppa Pig, no youtube, para a minha filha ver. Ela é fã da Peppa, então é bom ter uma reserva de vídeos guardados para quando não tem Peppa na TV. Achei um vídeo perfeito, de uma hora e pouco, então fui direto no youtube-dl pra gravar:

$ youtube-dl -o peppa-pig.webm 'http://www.youtube.com/watch?v=cgAVKlcs0dc'
[youtube] Setting language
[youtube] cgAVKlcs0dc: Downloading video webpage
[youtube] cgAVKlcs0dc: Downloading video info webpage
[youtube] cgAVKlcs0dc: Extracting video information
[youtube] cgAVKlcs0dc: Encrypted signatures detected.
ERROR: unable to download video


Deu esse erro ali, e eu pensei: "Hmm alguém já deve ter corrigido esse bug!". Mandei um yum update:

$ sudo yum update youtube-dl
...

...
 Updated:
  youtube-dl.noarch 0:2013.10.18.2-1.fc18


E chamei o youtube-dl de novo, confiando que ia funcionar:

$ youtube-dl -o peppa-pig.webm 'http://www.youtube.com/watch?v=cgAVKlcs0dc'
[youtube] Setting language
[youtube] cgAVKlcs0dc: Downloading video webpage
[youtube] cgAVKlcs0dc: Downloading video info webpage
[youtube] cgAVKlcs0dc: Extracting video information
[download] Destination: peppa-pig.webm
[download] 100% of 190.24MiB in 07:40


Não poderia ser mais simples, né? A rapidez e facilidade com que nossos sistemas operacionais livres são atualizados e corrigidos é fantástica! :)