Month: February 2014

Como logar automaticamente no console do Linux como root

Se você deseja fazer auto-login no terminal (console) do Linux basta passar o parametro “-l /bin/sh” para o getty executar o shell /bin/sh ao invés do /bin/login e o parametro “-n” para pule o pedido de username para efetuar o login.

Edite o arquivo inittab:

$ sudo vi /etc/inittab

Altere a linha:

1:2345:respawn:/sbin/getty 38400 tty1

Para:

1:2345:respawn:/sbin/getty -n -l /bin/sh -8 38400 tty1

Salve e saia do editor. Reinicie seu computador (placa embarcada) e o sistema automaticamente entrará no console pra você.

Fonte: Esta dica foi uma adaptação desta explicação: http://askubuntu.com/questions/8467/auto-login-to-console-as-root-no-xserver

Fixing libusb-1.0 detection

Today while compiling dfu-utils I faced this error message:

checking for USB... no
configure: error: *** Required libusb-1.0 >= 1.0.0 not installed ***

Even after to install libusb-1.0:

$ sudo apt-get install libusb-1.0-0-dev

the error remains…

Then I decided to take a look at “./configure –help” and saw these options:

  USB_CFLAGS  C compiler flags for USB, overriding pkg-config
  USB_LIBS    linker flags for USB, overriding pkg-config

Let to check where libusb was installed:

$ dpkg -L libusb-1.0-0-dev
...
/usr/include/libusb-1.0/libusb.h
/usr/lib/x86_64-linux-gnu/libusb-1.0.so

Then I decided to setup USB_CFLAGS and USB_LIBS this way:

$ export USB_CFLAGS="-I/usr/include/libusb-1.0"
$ export USB_LIBS="-L/usr/lib/x86_64-linux-gnu"

Now the ./configure executed correctly, but while executing make I got these issues:

  CCLD   dfu-util
main.o: In function `find_dfu_if':
/home/alan/Downloads/dfu-util-0.7/src/main.c:67: undefined reference to `libusb_get_device_descriptor'
/home/alan/Downloads/dfu-util-0.7/src/main.c:72: undefined reference to `libusb_get_config_descriptor'
/home/alan/Downloads/dfu-util-0.7/src/main.c:114: undefined reference to `libusb_free_config_descriptor'
main.o: In function `iterate_dfu_devices':
/home/alan/Downloads/dfu-util-0.7/src/main.c:284: undefined reference to `libusb_get_device_list'
/home/alan/Downloads/dfu-util-0.7/src/main.c:294: undefined reference to `libusb_get_device_descriptor'
/home/alan/Downloads/dfu-util-0.7/src/main.c:291: undefined reference to `libusb_get_bus_number'
/home/alan/Downloads/dfu-util-0.7/src/main.c:292: undefined reference to `libusb_get_device_address'
/home/alan/Downloads/dfu-util-0.7/src/main.c:311: undefined reference to `libusb_free_device_list'
/home/alan/Downloads/dfu-util-0.7/src/main.c:307: undefined reference to `libusb_free_device_list'
main.o: In function `list_dfu_interfaces':
/home/alan/Downloads/dfu-util-0.7/src/main.c:231: undefined reference to `libusb_get_device_list'
/home/alan/Downloads/dfu-util-0.7/src/main.c:238: undefined reference to `libusb_free_device_list'
main.o: In function `get_alt_name':
/home/alan/Downloads/dfu-util-0.7/src/main.c:188: undefined reference to `libusb_get_config_descriptor_by_value'
/home/alan/Downloads/dfu-util-0.7/src/main.c:205: undefined reference to `libusb_free_config_descriptor'
/home/alan/Downloads/dfu-util-0.7/src/main.c:201: undefined reference to `libusb_get_string_descriptor_ascii'
/home/alan/Downloads/dfu-util-0.7/src/main.c:198: undefined reference to `libusb_open'
main.o: In function `get_cached_extra_descriptor':
/home/alan/Downloads/dfu-util-0.7/src/main.c:500: undefined reference to `libusb_get_config_descriptor_by_value'
/home/alan/Downloads/dfu-util-0.7/src/main.c:524: undefined reference to `libusb_free_config_descriptor'
/home/alan/Downloads/dfu-util-0.7/src/main.c:524: undefined reference to `libusb_free_config_descriptor'
main.o: In function `main':
/home/alan/Downloads/dfu-util-0.7/src/main.c:721: undefined reference to `libusb_init'
/home/alan/Downloads/dfu-util-0.7/src/main.c:728: undefined reference to `libusb_set_debug'
/home/alan/Downloads/dfu-util-0.7/src/main.c:758: undefined reference to `libusb_open'
/home/alan/Downloads/dfu-util-0.7/src/main.c:959: undefined reference to `libusb_claim_interface'
/home/alan/Downloads/dfu-util-0.7/src/main.c:965: undefined reference to `libusb_set_interface_alt_setting'
/home/alan/Downloads/dfu-util-0.7/src/main.c:1085: undefined reference to `libusb_get_device_descriptor'
main.o: In function `usb_get_any_descriptor':
/home/alan/Downloads/dfu-util-0.7/src/main.c:439: undefined reference to `libusb_get_device'
/home/alan/Downloads/dfu-util-0.7/src/main.c:445: undefined reference to `libusb_get_active_config_descriptor'
/home/alan/Downloads/dfu-util-0.7/src/main.c:455: undefined reference to `libusb_free_config_descriptor'
main.o: In function `libusb_get_descriptor':
/usr/include/libusb-1.0/libusb.h:1342: undefined reference to `libusb_control_transfer'
main.o: In function `main':
/home/alan/Downloads/dfu-util-0.7/src/main.c:1169: undefined reference to `libusb_close'
/home/alan/Downloads/dfu-util-0.7/src/main.c:1170: undefined reference to `libusb_exit'
/home/alan/Downloads/dfu-util-0.7/src/main.c:802: undefined reference to `libusb_claim_interface'
/home/alan/Downloads/dfu-util-0.7/src/main.c:808: undefined reference to `libusb_set_interface_alt_setting'
/home/alan/Downloads/dfu-util-0.7/src/main.c:834: undefined reference to `libusb_release_interface'
/home/alan/Downloads/dfu-util-0.7/src/main.c:862: undefined reference to `libusb_release_interface'
/home/alan/Downloads/dfu-util-0.7/src/main.c:864: undefined reference to `libusb_close'
/home/alan/Downloads/dfu-util-0.7/src/main.c:900: undefined reference to `libusb_open'
/home/alan/Downloads/dfu-util-0.7/src/main.c:1163: undefined reference to `libusb_reset_device'
/home/alan/Downloads/dfu-util-0.7/src/main.c:840: undefined reference to `libusb_reset_device'
main.o: In function `libusb_get_descriptor':
/usr/include/libusb-1.0/libusb.h:1342: undefined reference to `libusb_control_transfer'
main.o: In function `main':
/home/alan/Downloads/dfu-util-0.7/src/main.c:867: undefined reference to `libusb_exit'
dfuse.o: In function `dfuse_download':
/home/alan/Downloads/dfu-util-0.7/src/dfuse.c:146: undefined reference to `libusb_control_transfer'
dfuse.o: In function `dfuse_upload':
/home/alan/Downloads/dfu-util-0.7/src/dfuse.c:123: undefined reference to `libusb_control_transfer'
dfu.o: In function `dfu_abort':
/home/alan/Downloads/dfu-util-0.7/src/dfu.c:321: undefined reference to `libusb_control_transfer'
dfu.o: In function `dfu_get_state':
/home/alan/Downloads/dfu-util-0.7/src/dfu.c:288: undefined reference to `libusb_control_transfer'
dfu.o: In function `dfu_clear_status':
/home/alan/Downloads/dfu-util-0.7/src/dfu.c:257: undefined reference to `libusb_control_transfer'
dfu.o:/home/alan/Downloads/dfu-util-0.7/src/dfu.c:220: more undefined references to `libusb_control_transfer' follow
collect2: ld returned 1 exit status
make[2]: *** [dfu-util] Error 1

Then I found this suggestion to include “-lusb-1.0” to USB_LIBS:

$ export USB_LIBS="-L/usr/lib/x86_64-linux-gnu -lusb-1.0"
$ make distclean
$ ./configure
$ make
$ sudo make install

Now everything worked fine.

Copy.com uma alternativa ao Dropbox

O Dropbox é muito bom, mas é sempre bom ter alternativas, ter concorrência. Ontem eu conheci o Copy que além de ser uma alternativa ao Google Drive e ao Dropbox permite que você copie seu backup completo do Dropbox ou do Google Drive, muito fácil de usar.

Quem quiser o convite para entrar basta clicar no link abaixo. Você também pode entrar direto no site e registrar, como eu fiz, mas ao invés de ganhar 20GB você ganha apenas 15GB. Toda vez que alguém usar o link abaixo eu ganho mais 5GB.

https://copy.com?r=XEPvPb

Quais pacotes de improdutividade instalar no Linux

Então, Debian instalado, mas e os programas de (im)produtividade pessoal?

O jeito é instalar manualmente os pacotes que não vem por padrão no Debian.

sudo apt-get install \
aircrack-ng \
audacious \
audacity \
blender \
bomberclone \
briquolo \
ccrypt \
dia \
dreamchess \
foobillardplus \
freecad \
gimp \
inkscape \
kcheckers \
kicad \
librecad \
heekscad \
heekscnc \
kismet \
meshlab \
meshmixer \
midori \
morse \
mp3blaster \
openscad \
pidgin \
recordmydesktop \
reaver \
sdcc \
supertuxkart \
supertux \
torcs \
unar \
unetbootin \
virtualbox \
youtube-dl

Estes são os pacotes que estou lembrando no momento, à medida que vou lembrando de outros pacotes ou adicionando aqui.

De volta ao Debian depois de praticamente 10 anos

Hoje resolvi dar adeus ao Ubuntu. Estou usando o Ubuntu há praticamente 10 anos e ele estava me servido bem, porém desde as primeiras versões com o Unity me sentia descontente com este sistema.

Outros motivos como a adoção do Mir ao invés do Wayland me forçaram a pular fora do banco antes que ele se afunde. A ideia da Canonical de usar uma unica interface para vários dispositivos teoricamente é boa, mas esta ideia já se mostrou falha para o caso do Windows 8. Vamos torcer que ela consiga algum resultado melhor que a Microsoft.

Baixei o CD 1 do Debian 7.4 e após instalar o sistema e inicia-lo, vejo que a interface também está diferente, ele usa o Gnome3 ao invés do Gnome 2 (Classic).

Ao invés de tentar deixar o Gnome3 com a aparência e comportamento semelhantes ao do Gnome Classic, como explicado neste link: http://www.datamation.com/open-source/giving-gnome-3-a-gnome-2-look.html resolvi remove-lo e instalar o Mate:

Para remover o gnome3 basta executar:

# apt-get remove gnome-shell

Para instalar o Mate siga as instruções desta página:
http://wiki.mate-desktop.org/download

Como usar o modulo SparkCore – A Saga

Eu fui um dos muitos (mais de 5500) patrocinadores do projeto SparkCore no Kickstarter e fique muito ansioso para que o módulo chegasse logo.

Depois de uma longa espera meu SparkCore chegou e para minha surpresa ele não funcionou como o esperado. Assim que eu liguei ele acendeu na cor magenta (LEDs azul e vermelho acesos) e o aplicativo para Android não reconheceu meu dispositivo.

Tentei todas as dicas do site: https://community.spark.io/t/spark-core-troubleshooting-guide-spark-team/696, mas ele definitivamente não entrava no modo DFU e a função de restaurar configurações de fábrica não dava nenhum resultado. Contactei o pessoal do SparkLab e eles disseram que minha placa era uma das 1% que por algum motivo falhavam durante a produção.

Foi então que resolvi fazer alguma coisa, compilei o firmware deles a partir do código fonte e gravei usando uma placa STM32F4Discovery (st-linkv2) como programador SWD usando o OpenOCD, como expliquei aqui: https://acassis.wordpress.com/2014/01/19/flashing-spark-core-when-dfu-fails/

Este deu algum resultado, mas foi então que meu amigo David Sidrane sugeriu que eu gravasse o bootloader DFU no STM32 e a partir dele gravasse a memória serial flash externa.
Para entrar em modo DFU você deve pressionar ao mesmo tempo os botões MODE e RST, então solte o botão RST e mantenha o MODE pressionado por 3 segundos. E assim eu fiz:

$sudo dfu-util  -d 1d50:607f -a 0 -s 0x08000000 -D bootloader.bin
$sudo dfu-util  -d 1d50:607f -a 0 -s 0x08005000:leave -D core-firmware.bin

Com o bootloader gravado resolvi fazer um backup do conteúdo original da serial flash externa. Para minha surpresa ela estava limpa (cheia de 0xFF) indicando que estivesse formatada. Como eu não formatei, acredito que durante o processo de gravação do firmware na fábrica ela não chegou a ser gravada. Contactei o SparkLab novamente para explicar o problema e eles decidiram me enviar uma placa substituta, mas eu não precisaria mandar de volta a placa que estava comigo.

Após fazer o “backup” resolvi gravar o firmware na serial flash externa e criar os certificados, como explicado nesta página: https://community.spark.io/t/troubleshooting-my-core-is-flashing-yellow-red-lights-after-it-connects-to-wifi/627/2

Criando as chaves do certificado:

openssl genrsa -out core.pem 1024
openssl rsa -in core.pem -pubout -out core_public.pem
openssl rsa -in core.pem -outform DER -out core_private.der

Gravar o firmware na serial flash:

$sudo dfu-util -d 1d50:607f -a 1 -s 0x00020000 -D factory_firmware.bin

Gravar o certificado:

$ sudo dfu-util -d 1d50:607f -a 1 -s 0x00002000 -v -D core_private.der

Gravar a chave pública do servidor:

$ wget https://s3.amazonaws.com/spark-website/cloud_public.der
$ sudo dfu-util -d 1d50:607f -a 1 -s 0x00001000 -v -D cloud_public.der

Só precisei enviar minha chave pública (core_public.pem) e o ID do meu SparkCore para hello@spark.io e depois disso consegui conectar meu roteador wireless e criar as aplicações para a SparkCore.

Nota: Para ler o ID do seu SparkCore você deve entrar em “Listening Mode”, pressione o botão MODE por 3 segundos até o LED do seu módulo ficar azul. Use o minicom ou outro programa configurado para 9600 8N1 e pressione ‘i’ para exibir seu ID.