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
