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

Port mirroring em switches com dd-wrt usando o iptables

Ocasionalmente é necessário monitorar o tráfeo de rede de um determinada máquina para a solução de problemas de rede ou verificações de segurança (máquinas comprometidas, sofrendo ataques, verficações de filtros, etc).

Em um ambiente antigo bastava estar no mesmo hub que a máquina em questão, os hubs inefcientes foram quase que totalmente substituídos por switches, que não propagam o tráfego além das máquinas envolvidas ou redes wi-fi em que o tráfego é encriptado, o que impede a análise

Nos switches mais sofisticados existe a função port mirroring, em que o tráfego de uma porta é replicado na porta onde está ligado o computador que irá fazer a análise do tráfego. Em switches mais simples essa função não existe e ainda existe o problema de análise em rede wi-fi, cada vez mais presente.

Esse problema pode ser contornado caso seja utilizado um switch que utilize o firmware dd-wrt, um poderoso firmware baseado em linux com diversos recursos e que utiliza o iptables para a parte de filtragem e roteamento avançada do switch.

Com o iptables é possível manipular o tráfego de maneira que todos os pacotes destinados ou enviados de uma máquina específica sejam replicados para outra máquina, onde poderão ser analisados.

Por exemplo, uma máquina utilizando wi-fi, com endereço IP 192.168.10.9 necessita ter seu tráfego analisado por outra máquina, que tem o endereço IP 192.168.10.111, com interface ethernet. Ambas estão conectadas por um switch com firmware dd-wrt.

No switch com dd-wrt digite o seguinte na janela de comandos e execute:

iptables -t mangle -A POSTROUTING -d 192.168.10.9 -j ROUTE --tee --gw 192.168.10.111
iptables -t mangle -A PREROUTING -s 192.168.10.9 -j ROUTE --tee --gw 192.168.10.111

Dessa maneira, todo o tráfego destinado ao computador 192.168.10.9 é replicado para o computador 192.168.10.111.

Se houver um analisador de pacotes, como o wireshark, faça um filtro para que apenas o IP 192.168.10.9 seja analisado.

Howto: make adb recognize your android device

adb (android debug bridge) is the official tool for android development.

Usually it is activated just by connecting your android device, select USB debugging and verify connection using the “adb devices” command, that should return a list with the serial numbers from the connected devices.

That is the theory. On the real world only devices from established manufacturers as HTC, Motorola, Samsung are recognized automatically… if your device is from some obscure or newcomer manufacturer or even some cheap chinese device you get something like this:

adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached

To your device be recognized it must have it’s identifier added at the adb_usb.ini file.

How to identify the manufacturer:

Conect you device to the USB port on your computer (enable USB debugging).

Linux: type the command lsusb and look the device list


$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 003: ID 10ab:0816 USI Co., Ltd
Bus 002 Device 003: ID 04f2:b1da Chicony Electronics Co., Ltd
Bus 002 Device 004: ID d324:9018

The android device is the last in the list. The first four digits group after ID is VendorID, the code that we need

The example device is a Genesis GT-7250 tablet. The lack of manufacturer description when you use lsusb is typical from rush made chinese devices, that are released without proper care. Usually they just use the base design released by the CPUs and chipset manufacturer.

Windows: open Control Panel -> System and Safety -> System -> Device Manager and look for the properties of a device named as Android Phone or Android ADB Interface.

Right click that device and select Properties. Select the Details tab and the select on the combo box Hardware IDs.

The value at front of the text USB\VID_ is the VendorID.

How to update the file:

Linux: on your home directory there should be a hidden directory named .android, the file adb_usb.ini is inside that directory.

Update that file with your device using the command

echo 0xd324 >> adb_usb.ini

Windows: on your personal folder there should be a folder named .android, the file adb_usb.ini is inside that folder.

Open that file using some editor that has no special format, like notepad and add a line with the VendorID

0xd324

Be sure that USB debugging is enabled on your device and check if your device has been identified:

adb kill-server
* server not running *

adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
1234567890ABCDEF device

If that folder is not present, open a command promp window (Windows Explorer does not create folders whose name start with a dot) and type these commands to create the folder and file:

cd /d %USERPROFILE%
md .android
cd .android
echo 0xd324 >> adb_usb.ini

Done! Now you can use adb and do nice things to your android devices like app development or rooting.

This post is a translation from another post in this blog, since I realized that I was getting many hits looking for that information coming from USA and Europe. I hope that translation makes easier to readers that don’t speak portuguese to use that information. Feel free to suggest corrections on grammar or spelling, since english is not my native language.

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