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 \
flightgear \
foobillardplus \
freecad \
gimp \
inkscape \
kcheckers \
kicad \
librecad \
heekscad \
heekscnc \
kazam \
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.

Open source tracking solutions

Devices:
http://www.ruuvitracker.fi
https://www.kickstarter.com/projects/dsscircuits/open-source-tracking-device
DIY solution using cellphone:
http://www.opengpstracker.org

Protocols:
http://www.opendmtp.org
Not open-source, but open specification:

Click to access GpsGateServerProtocol200.pdf

Servers:
http://www.opengts.org
http://www.traccar.org
For Android or J2ME devices (used OpenCellID to get position from GSM towers as well):
http://www.wannatrak.org

Criando meu CNC passo-a-passo (Parte 1)

Estou montando um CNC para furar placas de circuito impresso, cortar MDF e fresar peças em alumínio.
Em breve vou disponibilizar atualizações sobre o progresso do desenvolvimento, assim outras pessoas que tiverem interesse poderão tentar montar seu próprio CNC.

Eu resolvi usar este modelo como base (sugestão do Bruno Cabral):
http://www.thingiverse.com/thing:41594

Infelizmente as instruções deste autor não são muito detalhadas, então tentarei cobrir esta lacuna que ele deixou.

Primeiramente vamos pelas partes principais: motores, fusos de esferas e o perfil de alumínio.

O motores eu comprei no eBay (NEMA23) deste vendedor:
www.ebay.com/itm/Wholesale-High-quality-NEMA-23-for-287-oz-in-CNC-stepper-motor-Mill-Cut-/131001449585

Os fusos de esferas eu comprei no Aliexpress (80, 50 e 30cm) :

http://www.aliexpress.com/item/1pcs-SFU1605-Ball-Screw-L800mm-1pcs-Ballnut-ends-machining/648181573.html

http://www.aliexpress.com/store/product/1pcs-SFU1605-Ball-Screw-L500mm-1pcs-Ballnut-ends-machining/714447_648089331.html

http://www.aliexpress.com/store/product/High-quality-1pcs-SFU1605-Rolled-C7-Ball-Screw-L300mm-1pcs-Ballnut-ends-machining/714447_639644460.html

Achei que a alfandega iria cobrar imposto pelos fusos, principalmente pelo de 80cm, mas o vendedor do Aliexpress declarou como U$10,00, chegou sem problema. O que paguei pelos três fusos de esferas não daria para comprar um único aqui no Brasil, infelizmente.

O perfil de alumínio (T-Slot 45x45mm) eu comprei da Drygalla por R$ 32,45/m. O legal é que eles já entregam cortados com os comprimentos solicitados.

UPDATE: Como meu amigo Marcelo Barros pediu uma foto ou screenshot, resolvi fazer mais: segue a foto e o link do github onde estou armazenando o projeto:

Foto:
firstcnc

Link do Projeto:
https://github.com/acassis/simplemaker

Testing ikiwiki to generate static wiki pages

Today I decided to test Ikiwiki to generate static HTML pages.

How to install:

$ sudo apt-get install ikiwiki

How to configure:

$ ikiwiki --setup /etc/ikiwiki/auto.setup

How to update modifications after editing HackerPlace.setup file:

$ ikiwiki --setup HackerPlace.setup

Adding a new theme!

I decided to add a night_city theme (other themes: http://ikiwiki.info/theme_market/)

$ git clone git://src.anarcat.ath.cx/night_city
$ sudo mv night_city /usr/share/ikiwiki/themes/

To choose this theme, edit HackerPlace.setup and add:

# theme plugin
# name of theme to enable
theme: night_city

Now update your HTML files enabling theme plugin:

$ ikiwiki --setup HackerPlace.setup --plugin theme