Você encontrou o TUX?
- por Sergio Prado
Há uns dez dias atrás lancei um desafio para quem quisesse ganhar um convite VIP para o Seminário Linux Embarcado 2011.
O objetivo era encontrar o TUX, nosso querido mascote, dentro de um sistema de arquivos gerado para o kit FriendlyARM mini2440.
O prazo da promoção acabou ontem. Vamos ver então qual seria o processo para encontrar o TUX?
Bom, o primeiro passo seria baixar a imagem do rootfs e tentar montá-la. Com o comando “file“, podemos ver que tipo de rootfs é a imagem:
$ file rootfs rootfs: Linux rev 1.0 ext2 filesystem data, UUID=23d47d40-07f9-459d-8268-2ec2c997e400 |
É um ext2, fácil. Vamos criar um diretório e montá-lo lá dentro:
$ mkdir mnt_rootfs $ sudo mount -t ext2 -o loop rootfs mnt_rootfs/ $ cd mnt_rootfs/ && ls bin dev etc home lib linuxrc lost+found mnt opt proc README root sbin stella sys tmp usr var |
Agora basta vasculhar o sistema de arquivos em busca do TUX. E as pessoas aqui usaram diferentes mecanismos com os comandos “find“, “grep” e “strings“. Eu deixei algumas pistas para facilitar, e aqueles que seguiram as pistas encontraram facilmente. Começando pelo README:
$ cat README "Aquele que por aqui procurar, um arquivo em /var/log podera achar" |
Em “/var/log” temos o arquivo “messages“:
$ cat var/log/messages Jun 21 23:12:16 tux-machine kernel: [ 8601.142496] Empty flash at 0x004dff70 ends at 0x004e0000 Jun 21 23:12:16 tux-machine /sbin/whereis: Eu vi o Tux passando por aqui! Jun 21 23:12:16 tux-machine kernel: [ 8601.142657] Empty flash at 0x0055fffc ends at 0x00560000 |
Bom, o binário “whereis” diz que viu o TUX. Mas não podemos executá-lo diretamente, já que ele foi compilado para a arquitetura ARM:
$ file sbin/whereis sbin/whereis: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), not stripped |
Temos algumas possíveis soluções aqui. Uma delas é simplesmente copiá-lo para o kit mini2440 e executá-lo. Mas não vamos fazer isso já que boa parte dos participantes não possuem o kit. Outra solução seria executá-lo na sua máquina com um emulador como o “qemu“:
$ qemu-arm -L . sbin/whereis Por quem voce esta procurando? |
É claro, precisamos dizer que estamos procurando pelo TUX:
$ qemu-arm -L . sbin/whereis tux Eu vi o Tux! Ele esta fantasiado de gato! |
Você poderia chegar ao mesmo resultado se usasse o comando “strings“:
$ strings sbin/whereis /lib/ld-uClibc.so.0 abort __deregister_frame_info __register_frame_info libc.so.0 printf puts strcasecmp __uClibc_main __exidx_start __exidx_end _edata __bss_start __bss_start__ __bss_end__ __end__ Por quem voce esta procurando? Eu vi o Tux! Ele esta fantasiado de gato! Nao sei quem eh este tal de <%s>! |
Agora, já sabemos que ele esta fantasido de gato, ou melhor, de “cat“! Então encontramos ele facilmente em “bin/cat“:
$ file bin/cat bin/cat: UTF-8 Unicode text $ cat bin/cat ..- - . ' `. '.- . .--. . |: _ | : _ :| |`(@)--`.(@) | : .' `-, : :(_____.-'.' ` : `-.__.-' : ` _. _. . / / `_ ' \ . . : \\ \ . : _ __ .\ . . / : `. \ : / ' : `. . ' ` : : : `. .`_ : : / ' | :' \ . : '__ : .--' \`-._ . .' : `). ..| \ ) : '._.' : ; \-'. ..: / '. \ - ....- | ' -. : _____ | .' ` -. .'-- --`. .' `-- -- Ola! Voce me encontrou! |
Obrigado à todos que participaram, e parabéns às 15 pessoas que encontraram o TUX! Dentre os que encontraram, irei realizar um sorteio via random.org e entrar em contato com o ganhador do convite VIP.
Atualização: O sorteado e ganhador do convite VIP foi o Maurício de Oliveira Pena de Ribeirão Preto/SP. Parabéns Maurício!
Um abraço,
Sergio Prado