iGO no android kitkat 4.x e lollipop 5.x com root

Algumas pessoas gostam de utilizar o programa de GPS iGO nos celulares android, para terem uma opção de navegação completamente offline, em termos de mapas e rotas.

A partir do android kitkat o Google mudou a api que permite o acesso ao cartão SDHC do dispositivo por programas de terceiros, causando alguns problemas relativos a perda de acesso a gravação no cartão de memória.

No caso do iGO algumas pessoas estavam instalando o programa inteiro na memória interna do aparelho, mas isso é só para quem tem dispositivos com muita memória, já que dependendo da configuração de mapas a instalação ocupa facilmente 500M, podendo chegar a 1G.

Fiquei curioso e resolvi fazer uns testes. A instalação ocorria normalmente, mas observei que toda vez que o programa fosse acessado era necessário fazer a configuração inicial (linguagem, escolha de vozes, sistema de medidas, configurações regionais).

Com o adb dei uma olhada no diretório da aplicação (no caso um LG H442f firmware 10f, a localização pode mudar entre diferentes fabricantes e versões de firmware):

C:\adt-bundle-windows-x86-20131030\sdk\platform-tools> .\adb shell
shell@c70ds:/ $ su
su
root@c70ds:/ # cd /data/data/com.navngo.igo.javaclient
cd /data/data/com.navngo.igo.javaclient
root@c70ds:/data/data/com.navngo.igo.javaclient # ls -l
ls -l
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 android_linked_root -> /storage/external_SD/iGO/
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 branding.gro -> /storage/external_SD/iGO/branding.gro
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 branding.zip -> /storage/external_SD/iGO/branding.zip
drwxrwx--x u0_a118  u0_a118           2016-04-21 21:47 cache
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 content -> /storage/external_SD/iGO/content
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 data.gro -> /storage/external_SD/iGO/data.gro
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 data.zip -> /storage/external_SD/iGO/data.zip
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 debug -> /storage/external_SD/iGO/debug
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 gfx -> /storage/external_SD/iGO/gfx
-rw------- u0_a118  u0_a118         2 2016-04-21 21:47 kuka_logger.txt
lrwxrwxrwx install  install           2016-04-22 00:31 lib -> /data/app/com.navngo.igo.javaclient-2/lib/arm
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 license -> /storage/external_SD/iGO/license
-rw------- u0_a118  u0_a118        94 2016-04-21 21:47 monkey.txt
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 save -> /storage/external_SD/iGO/save
-rw------- u0_a118  u0_a118       656 2016-04-21 21:47 sentinel.txt
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 sys.txt -> /storage/external_SD/iGO/sys.txt
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 ui_android -> /storage/external_SD/iGO/ui_android
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 ui_igo9 -> /storage/external_SD/iGO/ui_igo9
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 ux -> /storage/external_SD/iGO/ux

Pode-se observar que a maioria dos arquivos estão com link simbólico, isto é, o arquivo está fisicamente no cartão SDHC (/storage/external_SD) e são referenciados na memória interna, para economizar o armazenamento interno do aparelho.

A informação de link está presente tanto no “l“(ink) das permissões vistas no lado esquerdo (ex.: lrwxrwxrwx) como no símbolo -> do lado direito que aponta onde fisicamente está armazenado o arquivo.

No caso de um aparelho com root fica fácil corrigir o problema, basta trazer o mínimo necessário de arquivos para a memória interna, que são os arquivos que sofrem algum tipo de escrita (preferências, locais favoritos, etc): sys.txt e as pastas android_linked_root e save. Para isso remove-se o link com o comando rm e copia-se o arquivo com o comando cp:

root@c70ds:/data/data/com.navngo.igo.javaclient # rm sys.txt
root@c70ds:/data/data/com.navngo.igo.javaclient # cp /storage/external_SD/iGO/sys.txt .

As pastas android_linked_root e save são removidas com o rm e criadas internamente com o comando mkdir. Basta recriar a pasta save, a pasta android_linked_root é criada de maneira automática pelo programa com todas as permissões e conteúdos necessários quando o iGO é executado pela primeira vez:

root@c70ds:/data/data/com.navngo.igo.javaclient # rm android_linked_root
root@c70ds:/data/data/com.navngo.igo.javaclient # rm save
root@c70ds:/data/data/com.navngo.igo.javaclient # mkdir save

Os arquivos criados e copiados são pertencentes ao usuário que os criou (root), então é necessário corrigir a propriedade para que fique igual ao usuário interno do programa (u0_a118, no exemplo):

...
drwx------ root root 2016-04-22 01:00 save
-rw------- u0_a118 u0_a118 656 2016-04-21 21:47 sentinel.txt
-rwx------ root root 13455 2016-04-22 00:58 sys.txt
...
root@c70ds:/data/data/com.navngo.igo.javaclient # chown -R u0_a118.u0_a118 sys.txt save

Após a correção das permissões temos o seguinte:

drwx------ u0_a118 u0_a118 2016-04-22 01:00 save
-rw------- u0_a118 u0_a118 656 2016-04-21 21:47 sentinel.txt
-rwx------ u0_a118 u0_a118 13455 2016-04-22 00:58 sys.txt

A partir desse momento o iGO passa a funcionar corretamente, não sendo necessário a configuração inicial a cada utilização e a gravação de favoritos e demais personalizações são permanentes.

Windows 2003 travando periodicamente

Um dos servidores em que trabalho travava periodicamente a cada 21 dias. Sem pistas, eu ficava observando e analisando os logs do Eventviewer.

Um dia uma mensagem me chamou a atenção, estava registrada pouco antes primeiros erros no AD, NTFRS e DNS:

Event Type: Error
Event Source: NTDS General
Event Category: Service Control
Event ID: 2103
Date: 11/29/2009
Time: 12:16:22 AM
User: NT AUTHORITY\ANONYMOUS LOGON
Computer: Server
Description:
The Active Directory database has been restored using an unsupported restoration procedure.
Active Directory will be unable to log on users while this condition persists.

Comecei a fazer buscas para esse problema e achei uma solução interessante nesse post e com uma discussão detalhada do que pode causar esse problema:

https://awinish.wordpress.com/2010/12/24/netlogon-paused-issue-resolved/

A solução correta é fazer o demote e promote do servidor em questão no Active Directory

A solução do problema abaixo não é a mais correta do ponto de vista técnico mas é funcional (e rápida):

-Abra o  Regedit no servidor problemático do AD
-Abra HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Parameters
-Encontre a chave Dsa Not Writable=dword:00000004
-Delete a chave completa
-Abra um prompt de comando e desabilite a replicação com o comando:

C:\temp> repadmin /options nome_do_servidor -DISABLE_OUTBOUND_REPL 

-Habilite a replicação com o comando:

C:\temp> repadmin /options nome_do_servidor -DISABLE_INBOUND_REPL 

-Reboot o servidor

A maneira correta é com o demote e promote do servidor em questão, essa informação é um método rápido e não recomendado, apesar de funcional.

VMware – Erro no Event Viewer: Failed registration of app type 2

Estava observando erros frequentes no Event Viewer em alguns servidores Windows 2003 em hosts VMware ESXi 5.x.

A mensagem completa no Event Viewer:

Event Type: Warning
Event Source: VMware Tools
Event Category: None
Event ID: 1000
Date: 16/1/2016
Time: 15:18:23
User: SRV-DESKTOP-REM\user
Computer: SRV-DESKTOP-REM
Description:
[ warning] [vmusr:vmtoolsd] Failed registration of app type 2 (Signals) from plugin unity.

Após muitas informações desencontradas, o problema básico é que o arquivo tools.conf não é criado, é criado vazio ou seu conteúdo (em caso de upgrade do tipo de VM) está com valores incorretos.

Para as versões VMware 5.x o conteúdo correto é o seguinte:

[logging]
log = true

# Enable tools service logging to vmware.log
vmsvc.level = debug
vmsvc.handler = vmx

# Enable new "vmusr" service logging to vmware.log
vmusr.level = error
vmusr.handler = vmx

# Enable "Volume Shadow Copy" service logging to vmware.log
vmvss.level = debug
vmvss.handler = vmx

Ele deve ser salvo com o nome tools.conf na pasta apropriada do OS guest.

Windows XP and Windows Server 2000/2003:

C:\Documents and Settings\All Users\Application Data\VMware\VMware Tools\tools.conf

Windows Vista, Windows 7, and Windows Server 2008  :

C:\ProgramData\VMware\VMware Tools\tools.conf

Linux, Solaris e FreeBSD :

/etc/vmware-tools/tools.conf

Maiores detalhes:

https://communities.vmware.com/thread/419192

http://kb.vmware.com/kb/2036350

Passando uma variável shell Unix para uma query SQL

Resolvi alterar alguns scripts que coletavam dados de arquivos texto de log por meio de querys SQL em um banco de dados.

Os scripts rodam após a meia noite e os dados coletados são do dia anterior.

Não gostei muito da sintaxe dos comandos SQL para selecionar a data do dia anterior, ia ter que deixar os comandos num arquivo .sql externo, queria queries de uma linha dentro do shell.

Criar uma variável com a data do dia anterior é fácil com o uso do comando date em formato AAAA-MM-DD, mas estava com problemas para que o SQL abrisse a variável. A solução é o uso de aspas duplas para a query a ser executada e simples na parte do comando onde a variável deve ser convertida.

#!/bin/sh
 ontem=$(date +%F --date="1 days ago") 
# Extraindo dados do banco de dados MySQL 
/usr/bin/mysql -u db_user -pdb_password -e "select FromHost from SystemEvents WHERE ReceivedAt LIKE '%${ontem}%' " DataBaseName

Análise e visualização de arquivos de log

Por conta de alguns equipamentos remotos que gerencio comecei a fazer a coleta de logs em um único servidor Linux, o problema passou a ser como tratar e visualizar esses logs.

Algumas necessidades são cobertas por scripts que varrem os arquivos e enviam emails automáticos informando situações de maior severidade.

O que eu queria de verdade era poder analisar esses arquivos por meio de uma página onde eu pudesse fazer buscas por horário, equipamento, tipo de erro ou alguma combinação.

Para isso os arquivos deveriam ser consolidados em um banco de dados e uma interface web seria acrescentada.

A necessidade seria coberta com um conjunto de utilitários:

rsyslog – versão mais moderna do syslog original do Linux, com o recurso de acesso a um banco de dados SQL para consolidação dos dados.

MySQL – o banco de dados SQL escolhido. Poderia ser o PostgreSQL

LogAnalyzer – frontend em PHP para visualização e análise dos logs.

rsyslog – Instalação e configuração

A substituição do syslog pelo rsyslog é bem simples, basta instalar o pacote:

Comandos para CentOS e RedHat:

yum install rsyslog rsyslog-mysql

Comandos para Debian e Ubuntu:

apt-get install rsyslog rsyslog-mysql

Como e já tinha o MySQL configurado basta criar o banco de dados para o rsyslog. O rsyslog fornece um script pronto que cria um banco chamado Syslog:

# mysql < /usr/share/doc/rsyslog-mysql-3.22.1/createDB.sql

mysql> grant all on Syslog.* to syslogwriter@localhost identified by 'syslogwriter_password';
mysql> flush privileges ;

 

Como eu já usava o syslog para fazer a coleta copiei o arquivo /etc/syslog.conf para /etc/rsyslog.conf e adicionei adicionei as linhas necessárias para o rsyslog no início do arquivo:

# Use traditional timestamp format
#$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

# Provides kernel logging support (previously done by rklogd)
$ModLoad imklog

# Provides support for local system logging (e.g. via logger command)
$ModLoad imuxsock

# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# provides MySQL database support
$ModLoad ommysql

e no final do arquivo as linhas para acesso ao banco de dados:

# Logging mysql database
*.* >localhost,Syslog,syslogwriter,syslogwriter_password

Baixei e instalei o LogAnalyser

tar zxvf loganalyzer-3.6.5.tar.gz

cd loganalyzer-3.6.5
mkdir /var/www/html/syslog
cp -a src/* /var/www/html/syslog

cd /var/www/html/syslog
touch config.php
chmod 666 config.php

Abra um browser e abra a configuração inicial do LogAnalyzer:

http://localhost/loganalyzer/

Informe o nome do banco de dados, usuário e senha.

O resultado é muito bom:

Podemos selecionar por evento (ssh):

loganalyzer_1

Ter uma visão geral (observe que clicar sobre uma linha permite usar esse evento como filtro):

loganalyzer_2

E a página de estatísticas:

loganalyzer_3

Making a backup of your DD-WRT config

Tremenda dica para fazer um backup das configurações do dd-wrt!:-)

Matt's Entropy

Assuming you have ssh enabled on your DD-WRT, and that your DD-WRT is at ddwrt.lab.test, the following will generate a shell script that can be used to restore your config:

ssh root@ddwrt.lab.test 'nvram show | grep = | cut -d"=" -f 1 | while read key; do echo nvram set $key="$(nvram get $key)"; done' > ddwrt.config

Restore is then simply:

cat ddwrt.config | ssh -q root@ddwrt.lab.test

Ver o post original

Erros do client OpenVPN no Windows

Após instalar o client OpenVPN para Windows (7, 8 e 10) ao se tentar uma conexão é possível observar na janela de execução uma mensagem de erro com o texto “route addition failed using CreateIpForwardEntry”:

Captura de tela 2015-11-29 12.22.43

Para a criação de rotas é necessário direitos de administrador. Alguns sites indicam que o programa OpenVPNgui.exe deve ter suas propriedades alteradas, porém como não é esse o programa que cria as rotas esse método também falha.

Uma opção é alterar as propriedades do programa openvpn.exe.

Captura de tela 2015-11-29 12.25.09

Feche todas as janelas do OpenVPN e OpenVPNgui e clique com o botão direito para abrir o painel de propriedades e selecione a guia de Compatibilidade. Marque “Executar este programa como administrador” e salve.

Captura de tela 2015-11-29 12.24.50

Após essa alteração a janela as rotas são criadas e é possível utilizar o OpenVPN.

Captura de tela 2015-11-29 12.27.17

pfSense – alguns ajustes…

Pesquisando uma solução de firewall encontrei o pfSense, um firewall baseado no Free BSD.

Bastante suporte na comunidade.

Vou anotando aqui algumas coisas que precisei alterar depois da configuração inicial e para as quais não há menu ou opção na página de configuração (Release 2.2.5).

Alterar temporariamente o layout de teclado do padrão americano para o padrão brasileiro:

digitar na linha de comando:

kbdcontrol -l /usr/share/vt/keymaps/br.kbd

Alterar permanentemente o layout de teclado do padrão americano para o padrão brasileiro:

adicionar a seguinte linha ao final do arquivo /root/.profile:

/usr/sbin/kbdcontrol -l /usr/share/vt/keymaps/br.kbd

Se utilizar o OpenVPN não esquecer de adicionar uma regra de NAT no firewall para roteamento dos pacotes que chegam pela VPN (Firewall -> NAT -> Outbound)

Em Modes selecione Manual Outbound Mode. Clique no botão + para adicionar uma regra nova. Os parâmetros que necessitam ser alterados nessa regra são:

Interface. Geralmente WAN.

Source: Network

Address: a faixa de rede que você utilizou para a VPN (ex. 10.10.10.0/24)

Description: uma descrição para que você lembre por que esse NAT está aí :-p (como OpenVPN Gateway Routing).

Salve e aplique a nova regra.

 

 

LG Volt Spirit 4G, erro após colocar firmware stock: Current version is not available for user. Can’t find matched cust for NT-code mcc/mnc [72402],subset[FF]

Adquiri um smartphone LG Volt H442f 4G (modelo vendido no mercado externo como LG Spirit H440). Boa relação custo benefício, mas abarrotado de aplicativos da operadora. Como a operadora deve achar pouco, assim que coloquei o chip do telefone, ainda baixou mais uns.

Percebi que a rotina de apps intrusos não ser fácil e resolvi instalar um firmware stock, sem o bloatware que as operadoras gostam de instalar.

Atualizado o firmware (H442f10b_00.kdz), a seguinte mensagem de erro era apresentada:

Current version is not available for user. Can’t find matched cust for NT-code mcc/mnc [72402],subset[FF]

2015-08-11 23.38.39

A mensagem era incômoda, mas nenhuma funcionalidade do smartphone foi afetada. Procurei como remover isso, mas sem sucesso. Informavam que podia ser algo relacionado a diferença de serviços permitidos pelo firmware e o hardware do aparelho, diferenças entre a região do original do firmware e a de utilização do aparelho (não era o caso, o firmware é para o Brasil e o aparelho é o disponibilizado nas lojas).

O site que deu mais informações sobre o problema foi esse:

http://forum.xda-developers.com/lg-g3/general/how-to-change-region-t2904951

O resumo: a LG não utiliza mais um firmware para cada região onde vende seus aparelhos. Utiliza um único firmware que verifica durante o boot informações regionais obtidas em alguns arquivos internos, seleção de idioma e até o chip da operadora e, reunindo essas informações, escolhe o perfil mais adequado, ou aplica um genérico.

Os parâmetros regionais ficam na pasta /cust, especificamente no arquivo /cust/cust_path_mapping.cfg.

Por exemplo, um arquivo cust_path_mapping.cfg tem esse conteúdo:

20810,FF=/cust/VDF_COM/FR
20810,01=/cust/VDF_COM/LPM

Os dígitos são uma combinação: os três primeiros dígitos são o código do país, os dois seguintes são da operadora e os dígitos após a vírgula, o perfil.

No exemplo acima “208” se refere a França, “10” a operadora Vivendi.

Qualquer país que a informação de país, operadora e vendor (o fornecedor do aparelho, que pode ser um de operadora, bloqueado ou desbloqueado ou um aparelho desbloqueado sem nenhum vínculo de operadora, vendido diretamente pela LG ou seus fornecedores) se referir a “FF” será aplicado o perfil “/cust/VDF_COM/FR”, caso esse código seja “01”, o perfil específico “/cust/VDF_COM/LPM” é aplicado.

A wikipedia tem uma página bem completa com os códigos de país e operadora: https://en.wikipedia.org/wiki/Mobile_country_code

Seguindo a mesma idéia, abri o arquivo /cust/cust_path_mapping.cfg do meu LG Volt e encontrei as seguintes linhas:

FFFFFF,31=/cust/OPEN_COM
FFFFFF,34=/cust/OPEN_COM

Um único perfil é aplicado para dois seletores (“31” e “34”). Como é um único perfil, então foi só adicionar uma linha para a combinação que gera o erro apontando para ele, modificando o arquivo /cust/cust_path_mapping.cfg deixando-o dessa maneira:

FFFFFF,31=/cust/OPEN_COM
FFFFFF,34=/cust/OPEN_COM
72402,FF=/cust/OPEN_COM

Agora não aparece mais a mensagem de erro incômoda de antes.

Para alterar esse arquivo é necessário que tenha sido feito root no aparelho. Para essa versão de firmware o root foi feito com o Kingroot, versão desktop.

Caso vá fazer essa alteração, não se esqueça de fazer backup de todo o conteúdo de seu celular e tenha ferramentas para recuperação em caso de travamentos.

Linux: após reboot não funciona teclado e mouse USB, sem rede

Tive problemas recentemente em duas maquinas rodando Linux (Ubuntu 14.04, especificamente), onde após um reboot uma ficou com rede e mouse e teclado USB inoperantes, a outra sem rede.

Houve alguma alteração na estrutura dos kernels mais recentes (3.13.x) em que alguns drivers de dispositivos foram removidos da imagem genérica para a imagem com extras. E entre alguns drivers estavam os de interface USB e rede😦

Como resolver é relativamente simples: dê um boot na máquina com problemas usando um Live CD, aqueles de teste de instalação. Utilizei um do Ubuntu mesmo.

Após o boot com o CD utilize a opção de TESTE. Você não quer uma nova instalação, quer apenas acesso à partição que apresentou problemas.

Após o sistema subir abra uma janela de terminal e digite alguns comandos:

sudo mount /dev/sda1 /mnt
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt

O primeiro mount foi para a minha partição, utilizo o esquema simplificado e raiz, /boot, /home estão em uma única partição. Caso você utilize esquemas com mais de uma partição você deve montar cada uma delas antes de fazer o chroot.

Após o

sudo chroot /mnt

você estará dentro do seu sistema problemático, bastando apenas reinstalar o kernel com o pacote extra :

sudo apt-get install linux-image-3.13.0-24-generic
sudo apt-get install linux-image-extra-3.13.0-24-generic

No exemplo a versão foi a 3.13.0-24, você deve reinstalar para o seu kernel específico. Verifique sua versão com o seguinte comando:

ls -l /boot/linux-image*

E utilize os números da sua versão.

Referências:

http://askubuntu.com/questions/588380/stuck-on-login-screen-everything-plugged-in-is-unresponsive

http://askubuntu.com/questions/506387/lubuntu-14-04-1-fresh-install-wont-boot-runaway-loop-usb

Matt's Entropy

... seeding /dev/random, one blog post at a time.

Maravilhoso Mundo Novo

De volta ao Paraíso

androideia

Idéias e Android, necessariamente não nessa ordem.

Another Airgun Blog

Idéias e Android, necessariamente não nessa ordem.

Armas de Pressão - Modificações e afins

Metade da graça em atirar está em fazer ajustes na arma.

Seguir

Obtenha todo post novo entregue na sua caixa de entrada.

Junte-se a 156 outros seguidores