2008/07/10


Just works

Estava aqui com uma imagem de um CD feita não sei como, e queria montar no meu sistema usando o velho macete:

mount -o loop


Pra quem não sabe, no Linux vc consegue montar imagens numa boa, não precisa de nenhum aplicativo mágico especial não. Esse programa "mount", é exatamente o mesmo que monta qualquer outro dispositivo no sistema, incluindo seus HDs.

O arquivo da imagem tinha a extensão "iso", mas não funcionou. Resolvi dar uma olhada com hexdump pra ver obtinha alguma luz. Não é nenhuma genialidade minha não, é que às vezes tem uns headers óbvios no começo de arquivos. Por exemplo, em arquivos PNG temos:
00000000 89 50 4e 47 0d 0a 1a 0a 00 00 00 0d 49 48 44 52 |.PNG........IHDR|
00000010 00 00 04 5a 00 00 03 20 08 02 00 00 00 9c 42 91 |...Z... ......B.|
00000020 ed 00 00 00 09 70 48 59 73 00 00 0b 13 00 00 0b |í....pHYs.......|
00000030 13 01 00 9a 9c 18 00 00 00 07 74 49 4d 45 07 d7 |..........tIME.×|


Já nos PDF:
00000000 25 50 44 46 2d 31 2e 33 0d 25 e2 e3 cf d3 0d 0a |%PDF-1.3.%âãÏÓ..|
00000010 36 38 31 20 30 20 6f 62 6a 0d 3c 3c 20 0d 2f 4c |681 0 obj.<< ./L|
00000020 69 6e 65 61 72 69 7a 65 64 20 31 20 0d 2f 4f 20 |inearized 1 ./O |
00000030 36 38 33 20 0d 2f 48 20 5b 20 31 31 31 30 20 31 |683 ./H [ 1110 1|


Perceberam? É óbvio, tem um textinho escrito... Queria ver se tinha algo assim, mas não tinha não, o que tinha era isso:

0000000 ff00 ffff ffff ffff ffff 00ff 0200 0200
0000010 0000 0000 0000 0000 0000 0000 0000 0000
*
0000930 ff00 ffff ffff ffff ffff 00ff 0200 0201
0000940 0000 0000 0000 0000 0000 0000 0000 0000
*
0001260 ff00 ffff ffff ffff ffff 00ff 0200 0202
0001270 0000 0000 0000 0000 0000 0000 0000 0000
*
0001b90 ff00 ffff ffff ffff ffff 00ff 0200 0203
0001ba0 0000 0000 0000 0000 0000 0000 0000 0000
*
(...)
*
00089d0 ff00 ffff ffff ffff ffff 00ff 0200 0215
00089e0 0000 0000 0000 0000 0000 0000 0000 0000
*
0009300 ff00 ffff ffff ffff ffff 00ff 0200 0216
0009310 0000 0009 0000 0009 4301 3044 3130 0001
0009320 4443 522d 4f54 2053 4443 422d 4952 4744
(...)
0009c20 ebc1 1b7c 9558 31ab 976b 5c00 dcf6 0019
0009c30 ff00 ffff ffff ffff ffff 00ff 0200 0217
0009c40 0000 0009 0000 0009 4302 3044 3130 0001
0009c50 4443 522d 4f54 2053 4443 422d 4952 4744
(...)
000a550 02dd bee4 634a 8e1a fa7c fbaf 9560 b68b
000a560 ff00 ffff ffff ffff ffff 00ff 0200 0218
000a570 0000 0009 0000 0009 43ff 3044 3130 0001
000a580 0000 0000 0000 0000 0000 0000 0000 0000
*


Comparei com uma imagem ISO criada por mim mesmo (com genisofs), e não apareceu nada assim...

O que vemos neste arquivo são blocos de 2352 bytes (0x930), com um header de 16 bytes que é um monte de "ff", e um número seqüencial. Achei que tinha cara de algo mais "cru" do que o tal formato iso9660... Talvez fosse o famoso par de arquivos "cue/bin", mas sem o cue acompanhando? Infelizmente não me lembrava de cor do tamanho de um quadro de CD pra saber se era.

Busquei no google, "2352 bytes", já que era um número tão incomum (nada como "2048 bytes", por exemplo), e de fato achei vários sites falando sobre imagens de CD e formatos de CD... Um cara reclamava por exemplo que estava criando uma imagem e ela estava com 2352 bytes a menos do que devia...

No final das contas achei enfim alguém comentando que havia mesmo a possibilidade de se encontrar por aí imagens "bin" sem o "cue", e que tinha que usar um programinha macete pra criar o cue, tipo um tal bin2cue.

Resolvi tentar, porque era a única coisa que faltava. Já tinha inclusive tentado antes converter como se fosse um tal formato ccd.

Mas aí dessa vez procurei no apt por outros programas que pudessem fazer o serviço. E aí apareceram:

cyberon:/home/nwerneck# apt-cache search bin iso cd
bchunk - CD image format conversion from bin/cue to iso/cdr
iat - Converts many CD-ROM image formats to iso9660
mybashburn - Burn data and create songs with interactive dialog box
texlive-latex-extra - TeX Live: LaTeX supplementary packages
arson - KDE frontend for burning CDs


Uau! Peguei o tal iat, rodei, e tchanãnãnã!... Funcionou com perfeição.

Da próxima vez que tiver um mistério desses, é claro, vou tentar antes rodar direto o tal iat, mas vou perder a oportunidade de relembrar que quadros de CD tem 2532 bytes... (Não lembro porquê esse número, vou pesquisar.)

Achei essa história toda um belo exemplo de como ser um pouquinho hacker (não ter medo ou vergonha de brincar com o hexdump), e usar o apt, você pode resolver seus problemas... Do hexdump descobri que o arquivo era um conjunto de pacotes de um tamanho característico de CDs, me confirmando que devia ser mesmo alguma imagem, e mais do que isso, uma imagem "crua", nada muito sofisticado. Isso me deu segurança pra seguir em frente, me garantiu que não era um pau do bittorrent, por exemplo, ou que fosse um arquivo compactado de alguma forma estranha, ou encriptado. Aí no APT descobri um programa excelente pra converter o arquivo, que não vi mencionado em blog nenhum, mas estou mencionando aqui no meu agora.

É isso aí. Usando linux, hexdump, google, apt e o iat, e dando um mount -t iso9660 -o loop, tudo "just works", igual as pessoas acham que apenas certas plataformas alternativas oferecem...

O quão fácil é descobrir o formato de um arquivo no wimdoms, descobrir um programa pra converter ele (tem apt-cache search??) e depois montar? O wirduws só "detecta" coisas manjadas, que ele consiga desenhar o iconezinho, coisas "cadastradas" no sistema... Detecção de formatos é apenas um instrumento de barganha capitalista pra micozofrt, e aliás, freqüentemente a detecção é realizada com base na EXTENSÃO DO NOME DO ARQUIVO, que diga-se de passagem, estava precisamente errada nessa instância.

Me pergunto que não estava assim pra que na máquina de alguém o winpouf "detectasse" que era pra chamar algum programa fodão de montar imagens, e aí esse programa que descobre que não era iso na verdade, e sim outro... É ridículo, um arquivo chamado com um nome errado pras coisas funcionarem redondo. Isso que é "just works"?

No Debian as funcionalidades de procurar programas e montar CD são praticamente "nativas"...