Zoneminder: Substituindo o Unifi NVR

Dessa vez vou escrever sobre como realizei a substituição de um Unifi NVR por uma solução opensource baseada em Debian e Zoneminder.

O Zoneminder é um software de vigilância digital que implementa todas as funções de um NVR convencional e que possui suporte a uma grande variedade de câmeras, sendo esse, o principal fator que me motivou a usá-lo no lugar do hardware da Ubiquiti. O site do Zoneminder pode ser acessado através desse link https://zoneminder.com/ .

O meu cenário inicial era composto por sete câmeras Unifi Video configuradas no NVR e também por uma câmera Axis PTZ m5014 funcionando de forma standalone.

A instalação do Zoneminder foi feita através do repositório com os seguintes passos:

1 – Adicionei o repositório;

echo 'deb http://www.deb-multimedia.org stretch main non-free' >> /etc/apt/sources.list 

apt-get update

wget http://www.deb-multimedia.org/pool/main/d/deb-multimedia-keyring/deb-multimedia-keyring_2016.8.1_all.deb

dpkg -i deb-multimedia-keyring_2016.8.1_all.deb

apt-get update

2 – Instalei os pacotes;

apt-get install php7.0 mysql-server php7.0-mysql php7.0-gd apache2 zoneminder vlc-plugin-base 

3 – Habilitei a configuração do Zoneminder no Apache;

a2enmod cgi 

a2enmod rewrite

a2enconf zoneminder

4 – Ajustei as permissões;

chmod 740 /etc/zm/zm.conf 

chown root:www-data /etc/zm/zm.conf

chown -R www-data:www-data /usr/share/zoneminder/

5 – Ajustei o timezone do PHP;

sed -i "s/;date.timezone =/date.timezone = $(sed 's/\//\\\//' /etc/timezone)/g" /etc/php/7.0/apache2/php.ini

6 – Habilitei e iniciei o serviço do Zoneminder;

systemctl restart apache2 

systemctl enable zoneminder.service

systemctl start zoneminder.service

Depois disso, com a instalação realizada, o Zoneminder ficou disponível no endereço http://ip_do_servidor/zm/ .

Por padrão, o Zoneminder abre com um layout bem simples e sem nenhuma forma de autenticação.

Para melhorar essa configuração, acessei o link options no lado direito superior da tela e, na janela que foi aberta, alterei a opção ZM_CSS para flat na aba display.

A interface flat do Zoneminder.

Já para adicionar a autenticação, cliquei no link options novamente e marquei a opção OPT_USE_AUTH na aba System. A autenticação padrão foi feita com usuário admin e senha admin.

Tela de login do Zoneminder.

E por último, ainda na aba System, ativei a opção OPT_USE_API para ativar o acesso as APIs do Zoneminder.

Para configurar as câmeras Unfi no Zoneminder foi necessário acessar a interface WEB delas e trocar o modo de operação para Standalone.

Câmera Ubiquity em modo Standalone.

Com essa mudança, a câmera ‘entendeu’ que iria trabalhar sozinha, sem um Unifi NVR, e habilitou algumas opções na sua interface…

Entre as novas opções, ficou disponível a URL do stream RTSP da câmera. Foi através dessa URL que a câmera foi configurada no Zoneminder.

No Zoneminder as câmeras são definidas como monitores e podem ser adicionadas com o botão ‘Add New Monitor’ presente na tela inicial.

Tela de configuração da câmera no Zoneminder.

Como a configuração de câmeras no Zoneminder é bem ampla, vou descrever apenas as opções que eu utilizei, outras possibilidades podem ser conferidas nesse link https://zoneminder.readthedocs.io/en/stable/userguide/definemonitor.html .

Para configurar as câmeras Ubiquiti fiz o seguinte:

1 – Na aba General, alterei o Source Type para Ffmpeg e Function para Modect ;

2 – Na aba Source, alterei o Source Path para ‘rtsp://usuario_camera:senha_camera@ip_camera:554/s0’, o Capture Width para 1280 e Capture Height para 720 ;

Salvei e câmera já ficou disponível na tela inicial do Zoneminder.

Para configurar a câmera Axis, primeiro foi necessário ativar a flag OPT_CONTROL nas opções do Zoneminder dentro da aba System . Essa configuração habilita o controle PTZ do Zoneminder.

Feito isso, a configuração da câmera Axis foi feita de forma semelhante a das câmeras Ubiquiti…Porém, o Source Type ficou como remote e, na aba Source, os campos Remote Host Name e Remote Host Path ficaram com os valores ‘usuario:senha@ip_camera’ e ‘/axis-cgi/mjpg/video.cgi’ .

Além disso, na aba Control, foi feita a configuração do PTZ.

No campo Control type foi usado a opção Axis API v2, no campo Control Device foi usado o valor axis-cgi/com/ptz.cgi e no campo Control Address foi usado o valor ‘usuario:password@ip_caminho .’

Uma observação é que, a principio, o controle PTZ dessa câmera não funcionou… Eu não sei se foi algo especifico desse modelo, ou se é algum bug na Axis API, mas o controle PTZ inicialmente não movimentava a câmera… Analisando as requisições que o Zoneminder fazia na API da câmera, notei que um cookie que a câmera usa na sua interface WEB não estava sendo enviado pelo Zoneminder.

Para corrigir isso, fiz uma alteração no código responsável por conversar com a API da câmera… Faça essa alteração apenas se for usar esse modelo.

Fiz um backup do arquivo original:

cp /usr/share/perl5/ZoneMinder/Control/AxisV2.pm ~

Dentro do arquivo /usr/share/perl5/ZoneMinder/Control/AxisV2.pm alterei o conteúdo da sub open para o seguinte:

sub open 
{
my $self = shift;

$self->loadMonitor();

use LWP::UserAgent;
use HTTP::Cookies;

$self->{ua} = LWP::UserAgent->new;

my $cookie_jar = HTTP::Cookies->new();

$self->{ua}->agent( "ZoneMinder Control Agent/".ZoneMinder::Base::ZM_VERSION );

$self->{ua}->cookie_jar( $cookie_jar );

$self->{state} = 'open';
}
Código da Axis API alterado.

Depois de realizar essa alteração, precisei reiniciar o sistema e o controle PTZ começou a funcionar.

Quando o Zoneminder têm mais de uma câmera configurada, os links cycle, montage e montage review ficam disponíveis na parte de cima da tela.

Através desses links é possível configurar uma tela de vigilância com várias câmeras para ser exibida em uma televisão.

No meu caso, eu queria usar um layout de tela com seis câmeras, com cinco delas sendo apresentadas com o mesmo tamanho e uma com um tamanho maior.

Além disso, minha ideia era rotacionar as câmeras de forma automática para que todas elas fossem exibidas no tamanho maior…

Exemplo do layout.

Infelizmente, eu não consegui montar esse layout com as opções do sistema( confesso que eu não me entendi com a ferramenta de montagem ).

Por isso, usei a API do Zoneminder para criar uma pequena aplicação para suprir essa necessidade…

Para quem tiver interesse, o código dessa aplicação está disponível no GitHub nesse link https://github.com/p4ulodi4s/painel-cftv .

Para fazer a instalação é necessário ter o composer, node/npm eo gulp instalados no servidor.

O composer e node/npm estão disponíveis nesses links : https://getcomposer.org/ e https://nodejs.org/

O gulp pode ser instalado com o npm com o comando:

 npm install -g gulp

Os passos para instalação são os seguintes:

1 – Baixar e descompactar o repositório ;

wget https://github.com/p4ulodi4s/painel-cftv/archive/master.zip

unzip master.zip

2 – Mover para a pasta do servidor WEB ;

mv painel-cftv-master/ /var/www/html/painel

3 – Instalar as dependências e rodar o gulp ;

cd /var/www/html/painel

composer install

npm install

gulp

Feito isso, basta acessar o endereço do servidor com o navegador e na tela inicial configurar os dados de autenticação e as câmeras( os ids ) que serão exibidas.

Além da interface web do Zoneminder, também existe o zmNinja, um aplicativo para dispositivos moveis disponível para plataforma Android e IOS.

O zmNinja pode ser baixado através das lojas dos fabricantes nesses links:

https://itunes.apple.com/us/app/zmninja-pro/id1067914954?mt=8

https://play.google.com/store/apps/details?id=com.pliablepixels.zmninja_pro&hl=pt_BR

O desenvolvedor do zmNinja também disponibilizou o código fonte do projeto nesse link: https://github.com/pliablepixels/zmNinja

Apesar do baixo custo do zmNinja nas lojas, como o fonte está disponível, achei melhor fazer o download do código e compilar para a plataforma Android.

Para isso, eu segui os passos do tutorial disponibilizado pelo desenvolvedor nesse link https://zmninja.readthedocs.io/en/latest/guides/source.html .

Para complementar, seguem os passos que realizei para montar e configurar o ambiente para compilação do zmNinja no meu desktop Ubuntu 16.04:

1- Baixei o JDK da Oracle no link https://www.oracle.com/technetwork/java/javase/downloads/jdk12-downloads-5295953.html e instalei o arquivo .deb ;

sudo dpkg -i jdk-12.0.1_linux-x64_bin.deb

2 – Baixei o Android Studio no link https://developer.android.com/studio e instalei o arquivo tar.gz ;

sudo tar -xzvf android-studio-ide-183.5452501-linux.tar.gz -C /opt/ 
sudo /opt/android-studio/bin/studio.sh

3 – Na interface do Android Studio, foi necessário acessar o caminho File > Settings > Appearance & Behavior > System Settings > Android SDK > SDK Platforms e instalar a versão do Android correspondente ao dispotivo onde zmNinja seria instalado ;

4 – Configurei as variáveis de sistema ;

echo "export JAVA_HOME=/usr/local/jdk1.8.0_111/" >>  /home/paulo/.profile 

echo "export ANDROID_HOME=/home/paulo/Android/Sdk/" >> /home/paulo/.profile

source /home/paulo/.profile

Obs. Troque paulo pelo nome do seu usuário : )

5 – Instalei o cordova, ionic e gulp ;

sudo apt-get update 

sudo apt-get install npm

sudo npm install -g cordova

sudo npm install -g ionic

sudo npm install -g gulp

Eu precisei fazer o ajuste de versão mencionado pelo desenvolvedor e explicado nesse link https://iphonedevlog.wordpress.com/2014/06/25/updating-and-reverting-to-different-cordova-phonegap-versions/

6 – Realizei a instalação do cordova com a versão necessária ;

npm install -g cordova@3.4.1-0.1.0

7 – Instalei o git e fiz o clone do projeto do zmNinja ;

sudo apt-get install git 

git clone https://github.com/pliablepixels/zmNinja.git

8 – Na pasta do projeto instalei as dependências ;

npm install @ionic/v1-toolkit --save-dev 

npm install node-sass

npm install async

npm install jshint

npm install ionic cordova platform add android

cordova prepare

Quando o ambiente de compilação ficou pronto usei o seguinte comando para criar( compilar ) o .apk:

./build_android.sh --debug 

Ao final do processo, o arquivo .apk estava disponível em debug_files/android-debug.apk .

Para realizar a instalação do .apk no Android, foi necessário ativar a instalação de fontes desconhecidas no dispositivo e enviar o arquivo para o Android.

Seguem alguns prints com os passos que fiz no meu Android 7.1.1:

Eu coloquei o arquivo .apk do zmNinja em um servidor WEB e fiz o download pelo chrome.

Com o aplicativo instalado, a configuração foi simples, marquei a flag ‘use a autenticação ZM’, cadastrei os dados de autenticação e a URL do Zoneminder:

Configuração do zmNinja.

Grafana no Debian 9

Nesse artigo quero mostrar como instalar e configurar o Grafana no Debian 9. O Grafana é um projeto de código aberto para gestão de métricas e indicadores. Ele pode ser conferido em detalhes no site https://grafana.com/ .

Existem algumas formas de instalar o Grafana no Debian. A instalação pode ser realizada através de um arquivo .deb, de um tar.gz ou usando um repositório apt.

Para instalar através do apt é necessário adicionar o repositório do Grafana com os seguintes comandos:

apt-get update 
apt-get install curl apt-transport-https
echo "deb https://packages.grafana.com/oss/deb stable main" > /etc/apt/sources.list.d/grafana
curl https://packages.grafana.com/gpg.key | sudo apt-key add -
apt-get update

O Grafana pode ser instalado com os seguintes comandos:

apt-get install grafana
systemctl enabled grafana 
systemctl start grafana

Com a instalação concluída, é possível acessar o Grafana na porta 3000 do servidor. Exemplo: http://localhost:3000 .

A porta 3000 pode ser alterada para 80/443, mas também é possível utilizar o Apache2 para fazer um proxy para o Grafana.

Essa configuração do Apache pode ser feita em um virtualhost especifico para que o Grafana responda apenas para um determinado domínio.

Por exemplo, para configurar um virtualhost com o domínio grafana.prminformatica.com.br deve-se criar o arquivo /etc/apache2/sites-available/grafana.conf com o seguinte conteúdo:

<VirtualHost *:80>

    DocumentRoot /var/vhosts/grafana.prminformatica.com.br/html
    ServerName grafana.prminformatica.com.br
    ServerAdmin nome@email.com.br

    ProxyPreserveHost On
    ProxyRequests On
    RewriteRule ^/$ / [R]
    ProxyPass / http://localhost:3000/
    ProxyPassReverse / http://localhost:3000/

    ErrorLog "/var/vhosts/grafana.prminforamatica.com.br/logs/error_log"
    CustomLog "/var/vhosts/grafana.prminformatica.com.br/logs/access_log" common

    <Directory "/var/vhosts/grafana.prminformatica.com.br/html">

        Options FollowSymLinks
        AllowOverride All
        AllowOverrideList All

    </Directory>

</VirtualHost>

É necessário ativar o virtualhost com os comandos:

a2ensite grafana.conf
systemctl reload apache2

E para impedir acesso direto na porta 3000, é possível adicionar regras de firewall semelhantes a essas:

iptables -A INPUT -i lo -j ACCEPT 
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
iptables -A INPUT -p tcp -m tcp --dport 3000 -j DROP

O iptables-persistent pode ser usado para manter as regras após reinicializar o sistema. No Debian, ele está disponível nos repositórios como netfilter-persistent.

Para acessar o Grafana pela primeira vez, deve-se usar o usuário admin com a senha admin. Feito o login, uma nova senha será requisitada.

O dashboard inicial vai mostrar uma tela com os próximos passos para configurar o Grafana: ‘Install Grafana’, ‘Create your first data source’, ‘New dashboard’, ‘Invite your team’ e ‘Install apps and plugins’.

Para esse artigo, os passos ‘Create your first data source’ e ‘New dashboard’ são os mais importantes, através deles, é possível criar um painel para exibir informações de um banco de dados. Já os passos ‘Invite your team’ e ‘Install apps e plugins’ são responsáveis respectivamente por adicionar usuários e instalar plugins. Os plugins podem ser vistos no seguinte endereço: https://grafana.com/plugin

No passo ‘Create your first data source’ é possível configurar acesso a um MySQL. Utilize um usuário do MySQL com acesso apenas aos bancos necessários e somente com permissão de leitura( select ).

Como exemplo, criei um banco com a seguinte tabela:

datasitevisitas
2019-04-01prminformatica5900
2019-04-02prminformatica5205
2019-04-03prminformatica4988
2019-04-04prminformatica5000
2019-04-05prminformatica5630
2019-04-06prminformatica5789
2019-04-07prminformatica5999

No passo ‘New dashboard’, é possível criar um painel para os dados dessa tabela.

Clicando em ‘Add query’ é criada uma consulta no MySQL para que o resultado seja exibido no Grafana.

Uma query possível para a tabela de exemplo é a seguinte:

SELECT
  UNIX_TIMESTAMP(data) as time_sec,
  visitas as value,
  site as metric
FROM visitas
WHERE $__timeFilter(data)
ORDER BY data ASC

Nessa query, o ‘$__timeFilter(data)’ é uma macro do Grafana que automatiza o filtro de intervalo de tempo. Outras macros podem ser vistas aqui: https://grafana.com/docs/features/datasources/mysql/#macros

Com o painel criado, o dashboard vai ter a seguinte aparência:

Podem ser adicionados mais painéis, dashboards e data sources para criar uma solução completa.

Além disso, se não quiser configurar tudo do zero, existem dashboards prontos que podem ser baixados diretamente do site do Grafana. Esses dashboards estão disponíveis no endereço: https://grafana.com/dashboards .

Para finalizar, seguem alguns exemplos:


GNU/Linux – Horário de verão 2018/2019

Fala pessoal, o blog não morreu 🙂


Tendo em vista as mudanças e incertezas sobre o horário de verão desse ano, resolvi escrever esse artigo explicando como configurar o horário de verão manualmente em sistemas GNU/Linux.

O inicio do horário de verão de 2018, inicialmente, estava marcado para começar hoje, mais precisamente na virada do dia 20/10 para o 21/10, mas foi alterado por um decreto para o dia 4/11 e talvez ainda seja alterado novamente, mudando para o dia 18/11.

Penso que ainda existe incerteza sobre quando vai iniciar o horário de verão desse ano, algumas fontes indicam para o dia 4/11, dando a entender que a alteração para o dia 18/11 foi cancelada( ou nunca foi aprovada ) e outras afirmam que a data de inicio é realmente 18/11:

   

Dependendo da distribuição ( e da versão ) que você está utilizando, é provável que a correção para o horário de verão desse ano já esteja disponível, mas se não estiver, ou o inicio do horário de verão seja alterado mais uma vez, é possível utilizar os seguintes passos para configurar o sistema manualmente:

1 – Crie o arquivo /usr/share/zoneinfo/Brazil/verao_2018_19.zic conforme esse exemplo:

 
Rule Brazil 2018 only - Nov  4 00:00 1 S
Rule Brazil 2019 only - Feb 17 00:00 0 -

Zone Brazil/East -3:00 Brazil BR%sT
 

# quando começa o horário de verão ( 4/11 00:00 ) 
Rule Brazil 2018 only - Nov  4 00:00 1 S

# quando termina o horário de verão ( 17/11 00:00, o dia 16 é o ultimo dia com horário de verão )
Rule Brazil 2019 only - Feb 17 00:00 0 -

# qual timezone será alterado na compilação
Zone Brazil/East -3:00 Brazil BR%sT
 

Nesse arquivo, estou configurando o inicio do horário de verão para o dia 4/11 e usando o Brazil/East ( horário de Brasília ), faça os ajustes para a sua necessidade. Outros horários são Brazil/Acre, Brazil/DeNoronha e Brazil/West.

2 – Compile o arquivo criado com o comando zic :


zic /usr/share/zoneinfo/Brazil/verao_2018_19.zic

3 – Consulte se o arquivo compilado foi criado corretamente:

zdump -v /usr/share/zoneinfo/Brazil/East | grep 201[89]

Se você alterou o Brazil/East no arquivo .zic, lembre-se de realizar alteração no restante dos comandos…

A saida do comando deve ser semelhante a essa:

/usr/share/zoneinfo/Brazil/East  Sun Nov  4 02:59:59 2018 UT = Sat Nov  3 23:59:59 2018 -03 isdst=0 gmtoff=-10800
/usr/share/zoneinfo/Brazil/East  Sun Nov  4 03:00:00 2018 UT = Sun Nov  4 01:00:00 2018 -02 isdst=1 gmtoff=-7200
/usr/share/zoneinfo/Brazil/East  Sun Feb 17 01:59:59 2019 UT = Sat Feb 16 23:59:59 2019 -02 isdst=1 gmtoff=-7200
/usr/share/zoneinfo/Brazil/East  Sun Feb 17 02:00:00 2019 UT = Sat Feb 16 23:00:00 2019 -03 isdst=0 gmtoff=-10800

As duas primeiras linhas mostram o inicio do horário de verão e as duas últimas o final.

# ganha uma hora 
Nov  3 23:59:59 2018 -03 
Nov  4 01:00:00 2018 -02 

# perde uma hora
Feb 16 23:59:59 2019 -02 
Feb 16 23:00:00 2019 -03 

4 – Por último, substitua o arquivo localtime pelo novo arquivo compilado:

mv /etc/localtime /etc/localtime.bkp
cp /usr/share/zoneinfo/Brazil/East /etc/localtime

E pronto seu sistema estará configurado.

Em caso de dúvidas, deixe um comentário ou me procure no twitter…

Instalando o FreeRADIUS no Ubuntu 14.04

O FreeRADIUS é um serviço para sistemas Unix like que permite realizar a autenticação, autorização e a contabilidade( AAA – Authentication, Authorization e Accounting ) de usuários de uma rede… Um exemplo de uso do FreeRADIUS é a integração com Mikrotik para fazer a autenticação dos usuários de um hotspot( Wi-Fi ).

Nesse artigo, vou mostrar como instalar, configurar e testar o FreeRADIUS no Ubuntu 14.04. Para maiores informações sobre o que é o FreeRADIUS e o que ele pode fazer, acesse o site do projeto nessa URL: http://freeradius.org/.

Para começar, é necessário atualizar a lista do APT e instalar os pacotes do FreeRADIUS e do MySQL:

 



apt-get update

apt-get install freeradius freeradius-mysql freeradius-utils mysql-server

Obs.: Todos os comandos devem ser realizados através do usuário root.

Obs.: Durante a instalação será necessário cadastrar uma senha para o usuário root do MySQL.

Com os pacotes instalados, primeiro é necessário configurar o MySQL. Execute o comando mysql_secure_installation e responda as perguntas conforme o seguinte exemplo:

 



mysql_secure_installation

#Mudar a senha do root?
Change the root password? [Y/n] n

#Remover usuários anônimos?
Remove anonymous users? [Y/n] y

#Desabilitar acesso do root remotamente?
Disallow root login remotely? [Y/n] y

#Remover o banco de dados de teste?
Remove test database and access to it? [Y/n] y

#Atualizar a tabela de privilégios agora?
Reload privilege tables now? [Y/n] y

Depois, crie um banco de dados e um usuário no MySQL para serem utilizados pelo FreeRADIUS:

 



mysql -u root -p -e "CREATE DATABASE radius"

mysql -u root -p -e "CREATE USER 'usuario_radius'@'localhost' IDENTIFIED BY 'senha'"

mysql -u root -p -e "GRANT ALL PRIVILEGES ON radius.* TO 'usuario_radius'@'localhost'"

service mysql restart

Esses comandos criam o banco de dados ‘radius’ e o usuário ‘usuario_radius’ com a senha ‘senha’.

Com o banco de dados criado, é necessário adicionar as tabelas que serão usadas pelo FreeRADIUS. Isso pode ser feito importando o arquivo /etc/freeradius/sql/mysql/schema.sql e o arquivo /etc/freeradius/sql/mysql/nas.sql para o banco de dados. Para fazer isso, use os seguintes comandos:

 



mysql -u root -p radius < /etc/freeradius/sql/mysql/schema.sql

mysql -u root -p radius < /etc/freeradius/sql/mysql/nas.sql

Com o banco de dados pronto, é possível iniciar a configuração do FreeRADIUS. Como a configuração padrão é bastante abrangente, será necessário fazer apenas pequenas alterações nos arquivos disponibilizados pela instalação.

Primeiro, é necessário cadastrar as informações do banco no arquivo /etc/freeradius/sql.conf. Para o exemplo desse artigo, a configuração é a seguinte:

 


... inicio do arquivo ...

database = "mysql"
#
# Which FreeRADIUS driver to use.
#
driver = "rlm_sql_${database}"

# Connection info:
server = "localhost"
#port = 3306
login = "usuario_radius"
password = "senha"
# Database table configuration for everything except Oracle
radius_db = "radius"

... final do arquivo ...

Ainda no arquivo /etc/freeradius/sql.conf, também é necessário habilitar a leitura dos clientes através do banco de dados, isso é feito retirando o # da frente da seguinte linha:

 


#readclients = yes

Dando continuidade, o próximo passo é habilitar o modulo SQL do FreeRADIUS alterando o arquivo /etc/freeradius/radiusd.conf.

Retire o # da frente dessa linha:

 


... inicio do arquivo ...

# $INCLUDE sql.conf

... final do arquivo ...

Em seguida, é necessário ativar o uso do modulo SQL nas sessões do arquivo /etc/freeradius/sites-available/default . Novamente, basta descomentar as linhas onde aparece a palavra sql, retire o # da frente de linhas iguais a essa:

 



# sql

Com isso, o FreeRADIUS está funcionando e já pode ser testado localmente( a partir da máquina onde está instalado )… Porém, antes de fazer o teste, é necessário adicionar um usuário… Use o seguinte comando para criar o usuário ‘paulo’ com a senha ‘dias’:

 


mysql -u root -p -e "INSERT INTO radcheck( username, attribute, op, value ) VALUES ( 'paulo', 'User-Password', '==', 'dias' )" radius

Reinicie o serviço do FreeRADIUS e execute o comando radtest para testar a autenticação do usuário, assim:

 



service freeradius restart

radtest paulo dias 127.0.0.1 0 testing123

Obs.: Nesse exemplo, o ‘testing123’ é o segredo( senha ) que o cliente localhost precisa enviar para utilizar o FreeRADIUS.

Se a saída do comando radtest, for semelhante a essa abaixo, o FreeRADIUS foi configurado e está funcionando corretamente.

 



rad_recv: Access-Accept packet from host 127.0.0.1 port 1812, id=152, length=20

Como por padrão apenas o cliente localhost está cadastrado, para usar o FreeRADIUS em um roteador, será preciso cadastrá-lo como um cliente no banco de dados. Isso é feito com o seguinte comando:

 



mysql -u root -p -e "INSERT INTO nas( nasname, shortname, secret) VALUES ( '192.168.0.1', 'Roteador principal', 'segredo' ) " radius;

Onde ‘192.168.0.1’ é o IP do cliente, ‘Roteador principal’ é uma identificação para o cliente e ‘segredo’ e a senha que esse cliente terá que enviar junto com as requisições para o FreeRADIUS.

Bom, por enquanto é isso, conforme o tempo permitir vou tentar adicionar mais artigos sobre o FreeRADIUS, se ficou alguma dúvida ou algo não funcionou, deixe um comentário…

Criando um box para o Vagrant

O Vagrant é um projeto que permite gerenciar ambientes virtuais de forma simples e eficiente. Ele possui suporte as principais soluções de virtualização e também para várias ferramentas de provisionamento, como Puppet e Chef·

O Vagrant empacota as máquinas virtuais em boxes que podem ser criados e depois disponibilizados no site oficial do projeto. Nesse artigo, quero mostrar como criar e disponibilizar uma box para o Vagrant. A maneira mais simples de criar um box é a partir de um box já existente, mas vou optar por criar um box do zero.

O site do Vagrant já possui boxes para as distribuições GNU/Linux mais conhecidas… Então, para criar algo diferente, vou utilizar uma distribuição menos conhecida, o Slitaz. Trata-se de uma distribuição independente( não é baseada em outra distribuição ) que na versão mais completa, com ambiente gráfico e outros programas de uso geral, cabe em uma imagem .ISO com menos de 50MB. O trabalho realizado pelos desenvolvedores do Slitaz é excelente e pode ser conferido em detalhes no site http://www.slitaz.org/en/.

Como a ideia é criar um box para o Vagrant, vou utilizar o sabor base do Slitaz que possui apenas o ambiente em modo texto e, consequentemente, uma imagem .ISO ainda menor. O download pode ser feito nesse endereço http://mirror.slitaz.org/iso/4.0/flavors/.

Para configurar o Slitaz como um box, é necessário instalá-lo em uma máquina virtual, instalar um conjunto de pacotes e configurar alguns arquivos. Para iniciar, é necessário ter o Vagrant e o VirtualBox instalados na máquina física.

Supondo que a  máquina física está usando o Debian Jessie  ou uma distribuição Debian-like, a instalação desses pacotes pode ser feita com o seguinte comando:

 
sudo apt-get install vagrant virtualbox

Feito isso, basta criar um máquina no VirtualBox e iniciar a imagem do Slitaz. O processo de boot é extremamente rápido, serão feitas algumas perguntas para localização do ambiente e o sistema já está pronto para ser utilizado. O usuário ‘root’ por padrão usa a senha ‘root’.

Por enquanto o Slitaz está rodando no modo live a partir da imagem .iso, para realizar a instalação, o primeiro passo é particionar o HD. Isso pode ser feito com o comando fdisk, assim:

Observação: Os próximos comandos devem ser executados na máquina virtual do Slitaz.

 
fdisk /dev/sda

No fdisk pressionando ‘m’ as opções disponíveis são listadas. Para criar um partição primaria, pressione ‘n’, depois ‘p’, escolha o número para partição( 1 ), escolha o inicio da partição( 1 ) e o tamanho da partição( +8000M ). Para sair do fdsik e salvar as alterações, pressione ‘w’.

Depois de criar a partição, adicione um sistema de arquivo com o comando:

 
mkfs.ext4 /dev/sda1

O próximo passo é copiar os arquivos do Slitaz para a partição do HD. A partição e o CD do Slitaz( a imagem .ISO que está no VirtualBox ) devem ser montadas com os comandos:

 
mount /dev/sda1 /mnt

mount /dev/cdrom /media/cdrom

Então, para copiar o kernel, faça:

 
mkdir /mnt/boot/

cp -a /dev/cdrom/boot/vmlinuz* /mnt/boot/

Depois, copie e descompacte o filesystem :


cp /media/cdrom/boot/rootfs.gz /mnt/

cd /mnt/

unlzma < rootfs.gz | cpio -id 

rm rootfs.gz init

Feito isso, o Slitaz já está instalado, mas antes de continuar ainda é necessário instalar o GRUB ( a primeira versão, também chamado de GRUB legacy ). Execute o comando:


grub-install --root-directory=/mnt/ /dev/sda

E crie o arquivo de configuração /mnt/boot/grub/menu.lst com o seguinte conteúdo:


timeout 5

default 0

title Slitaz
     root( hd0, 0 )
     kernel /boot/vmlinuz-2.6.37-slitaz root=/dev/sda1 vga=normal

Observação: O root( hd0, 0 ) é referente ao primeiro HD e a primeira partição, ou seja, /dev/sda e /dev/sda1. Se fosse a primeira partição do segundo HD seria root( hd1, 0 ).

O Slitaz e o GRUB estão instalados, retire a imagem do Slitaz do virtualBox e reinicie o sistema com o comando:


reboot

Boot em 4 segundos :O

Com o sistema pronto, agora é possível instalar os pacotes necessários para o Slitaz ser um box do Vagrant:


tazpkg recharge

tazpkg get-install sudo
tazpkg get-install openssh
tazpkg get-install linux-api-headers
tazpkg get-install linux-module-headers
tazpkg get-install dkms
tazpkg get-install bzip2
tazpkg get-install wget
tazpkg get-install bash

Durante a instalação do bash, o sistema vai perguntar se o sh deve ser um link para o bash, certifique-se de responder yes.

Depois, para seguir o padrão dos boxes do Vagrant, é necessário ter um usuário ‘vagrant’ com senha ‘vagrant’ e também alterar a senha do usuário ‘root’ para ‘vagrant’:


adduser vagrant

passwd

O Vagrant conecta no sistema usando SSH sem senha através de chaves, para que isso funcione, é preciso baixar a chave publica para o usuário ‘vagrant’.


mkdir /home/vagrant/.ssh/

wget --no-check-certificate https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub -O /home/vagrant/.ssh/authorized_keys

chown vagrant:vagrant /home/vagrant/.ssh/ -R

chmod 0700 /home/vagrant/.ssh/
chmod 0600 /home/vagrant/.ssh/authorized_keys

O usuário ‘vagrant’ também precisa poder usar o sudo sem senha, isso pode ser configurado com o comando visudo adicionando a linha:


vagrant ALL=(ALL) NOPASSWD: ALL

O próximo passo é instalar os adicionais de convidado do VirtualBox, adicione a imagem de CD na máquina virtual e execute esses comandos para realizar a instalação:


mount /dev/cdrom /media/cdrom

sh /media/cdrom/VBoxLinuxAddtions.run

Feito isso, o sistema já está quase pronto para ser um box, mas antes de terminar é importante adicionar a seguinte linha, sugerida pela equipe do Vagrant, no arquivo /etc/ssh/sshd_config:


UseDNS no

E por último, como o Vagrant utiliza apenas o comando shutdown -h now para desligar o sistema, e esse comando não está presente, de forma nativa no Slitaz( ele usa o poweroff, halt e reboot ), é necessário criar uma alternativa… Um jeito simples, é criar um shell script /sbin/shutdown com o seguinte conteúdo:


#!/bin/bash

if [ $1 = '-h' -a $2 = 'now'] ; then

     poweroff;
     exit 0;

fi

echo 'Only shutdown -h now is implemented';
exit 1;


Observação: Use o comando chmod para dar permissão de execução para o script.

Pronto, com isso, o sistema já está configurado para ser um box do Vagrant. Para terminar, desligue a máquina virtual e na máquina física execute o seguinte comando:


vagrant package --base nome_vm_slitaz

Observação: Substitua nome_vm_slitaz pelo nome da máquina do Slitaz que você criou no VirtualBox.

Com isso, foi criado o box do Slitaz com o nome ‘package.box’. Para testar, utilize os seguintes comandos:


vagrant box add slitaz package.box

vagrant init slitaz

vagrant up

Depois de testar o seu box, se quiser compartilhar, basta criar uma conta nesse link https://atlas.hashicorp.com/account/new.

Então é isso, qualquer dúvida, deixe um comentário e se quiser baixar o meu box do Slitaz, acesse: https://atlas.hashicorp.com/boxes/search?utf8=%E2%9C%93&sort=&provider=&q=p4ulodi4s

Nagios Core no Ubuntu 14.04 – Parte 1

Oi, tudo bem?

Hoje vou iniciar uma serie de artigos sobre como instalar e configurar o Nagios Core através dos repositórios do Ubuntu 14.04. O Nagios é um sistema de monitoramento de rede de código aberto distribuído sob a licença GPL. Ele pode monitorar hosts e serviços, alertando quando ocorrerem problemas e também quando os problemas são resolvidos.

Nesse artigo, quero mostrar como instalar, administrar usuários e monitorar hosts ativos na rede. Para isso, o primeiro passo é executar a instalação com o seguinte comando:

 
sudo apt-get install nagios3 nagios-plugins-extra
 

Durante a instalação será necessário definir uma senha para o usuário padrão do Nagios. O usuário é o nagiosadmin, escolha a senha conforme a sua vontade.

Feito isso, o Nagios já vai estar instalado e funcionando… Utilize o seu navegador( use sempre o firefox 🙂 para acessar a máquina onde o Nagios foi instalado. A URL segue o seguinte padrão: http://ip.da.maquina/nagios3.

A seguinte janela vai requisitar os dados de autenticação:

Forneça o usuário nagiosadmin e a senha que foi cadastrada durante a instalação. Se tudo ocorreu normalmente, uma interface semelhante a essa será exibida:

Com o Nagios instalado é possível criar novos usuários para ter acesso a essa interface WEB. Para isso, utilize o seguinte comando:

 
sudo htpasswd /etc/nagios3/htpasswd.users paulo

Dessa forma, o usuário paulo vai ter acesso a interface WEB do Nagios, mas ainda não vai ter permissões para acessar algumas páginas. Isso ocorre devido as permissões que estão configuradas no arquivo /etc/nagios3/cgi.cfg. Para dar as mesmas permissões do usuário nagiosadmin para o novo usuário, use os seguintes comandos:

 
sudo mv /etc/nagios3/cgi.cfg /etc/nagios3/cgi.bkp

sudo cat /etc/nagios3/cgi.bkp | sed s/=nagiosadmin/=nagiosadmin,paulo/g > /etc/nagios3/cgi.cfg

sudo service nagios3 restart

Obs.: Substitua paulo pelo nome do seu usuário.

Depois de configurar outro usuário com todas as permissões necessárias, recomendo remover o usuário nagiosadmin. Para fazer isso, use o comando:

 
sudo htpasswd -D /etc/nagios3/htpasswd.users nagiosadmin

Para configurar um monitoramento é necessário criar um arquivo dentro da pasta /etc/nagios3/conf.d. Todos os arquivos com a extensão .cfg no interior dessa pasta( e sub-pastas ) serão analisados pelo Nagios. A instalação do Nagios já deixou alguns arquivos preparados. No meu Ubuntu existem os seguintes arquivos:

 
extinfo_nagios2.cfg
generic-host_nagios2.cfg
generic-service_nagios2.cfg
hostgroups_nagios2.cfg
localhost_nagios2.cfg
services_nagios2.cfg
timeperiods_nagios2.cfg

Os arquivos generic-host_nagios2.cfg e generic-service_nagios2.cfg são templates que podem ser utilizados para criar novos monitoramentos de forma simples. Para que o Nagios monitore se um equipamento está conectado na rede( através do protocolo ICMP ) crie o arquivo /etc/nagios3/conf.d/equipamento.cfg com o seguinte conteúdo:

 
define host{
use                 generic-host
host_name           equipamento
alias               equipamento
address             192.168.0.108
}

define service{
use                   generic-service
host_name             equipamento
service_description   PING
check_command         check_ping!550.0,10%!600.0,20%
}

Observação.: Altere o campo address com o endereço IP do seu equipamento

Acessando o link Map no menu da esquerda da interface WEB do Nagios será carregada uma tela semelhante a essa:

Com essa configuração o Nagios vai monitorar e sinalizar na interface WEB se o equipamento for desconectado.

Perceba que o novo monitoramento está utilizando um ícone com o simbolo de interrogação( ? ), mas é possível alterar esse simbolo por outro que identifique o equipamento de uma forma mais adequada. Altere o arquivo /etc/nagios3/conf.d/equipamento.cfg com o seguinte conteúdo:

 
define host{
use                 generic-host
host_name           equipamento
alias               equipamento
address             192.168.0.108
}

define service{
use                   generic-service
host_name             equipamento
service_description   PING
check_command         check_ping!550.0,10%!600.0,20%
}

define hostextinfo{
host_name       equipamento
icon_image      switch.png
icon_image_alt  equipamento
statusmap_image switch.png
}

Para que essa configuração tenha o efeito desejado é necessário colocar a imagem( no exemplo switch.png ) na seguinte pasta: /usr/share/nagios3/htdocs/images/logos/

A próxima imagem é de um sistema que já está em produção, veja como os ícones fornecem uma melhor visão da rede:

Veja que além dos ícones, que identificam os equipamentos, a forma como os equipamento foram organizados oferece um boa visualização dessa rede. Para conseguir esse efeito, é necessário alterar o arquivo /etc/nagios3/conf.d/equipamento.cfg e adicionar o atributo parents na definição do host. Veja:

 
define host{
use                 generic-host
host_name           equipamento
alias               equipamento
address             192.168.0.108
parents             localhost
}

define service{
use                   generic-service
host_name             equipamento
service_description   PING
check_command         check_ping!550.0,10%!600.0,20%
}

define hostextinfo{
host_name       equipamento
icon_image      switch.png
icon_image_alt  equipamento
statusmap_image switch.png
}

Veja a diferença na interface WEB do Nagios:

Dessa forma, fica evidente que o novo equipamento está ligado diretamente no localhost ( no servidor onde o Nagios está instalado ).

Obs.: No atributo parents é especificado o atributo host_name de outro equipamento.

Bom pessoal, esse artigo termina aqui, no próximo quero mostrar como configurar o postifix e receber alertas do Nagios por email. Obrigado e até mais…

LAMP: Ubuntu 14.04, Apache, MySQL e PHP

Oi, tudo bem?

Nesse artigo quero mostrar como instalar o Apache, o MySQL e o PHP no Ubuntu. Para obter esse ambiente é comum utilizar o XAMPP ou alguma aplicação semelhante, mas quero mostrar como instalar cada um deles de forma individual usando os pacotes disponíveis nos repositórios da distribuição. Visto a popularidade das ferramentas que automatizam a instalação desse ambiente, pode parecer que a instalação de cada um desses pacotes seja uma tarefa complicada, mas no Ubuntu, e em qualquer outra distribuição GNU/Linux, esse processo é razoavelmente simples.

Antes de começar, é importante notar que as configurações mostradas nesse artigo são para um ambiente de desenvolvimento, para um ambiente de produção é necessário dar atenção a mais detalhes…

O primeiro passo é atualizar os pacotes com o seguinte comando:

 
sudo apt-get update && sudo apt-get upgrade

Com os pacotes atualizados, instale o Apache através desse comando:


sudo apt-get install apache2
 

Se o Apache foi instalado corretamente, a seguinte página vai ser visualizada na URL http://localhost:

Teste Apache

O próximo passo é instalar o MySQL. A instalação desse pacote pode ser realizada com o seguinte comando:


sudo apt-get install mysql-server
 

Durante a instalação uma tela parecida com a seguinte irá solicitar uma senha para o usuário root do MySQL.

Imagem exemplo da instalação MySQL

Depois da instalação terminar, teste o MySQL efetuando o login com o usuário root:


mysql -u root -p
 

O MySQL solicitará a senha de root que foi definida na instalação. Após informá-la, você verá uma tela como a seguinte:

Imagem exemplo prompt do MySQL

Observação: Para sair do prompt do MySQL digite o comando quit.

Se foi possível realizar o login, o MySQL está instalado corretamente. Porém, é possível acessá-lo apenas da máquina local, se quiser permitir conexões externas é necessário criar o arquivo /etc/mysql/conf.d/allow_external.cnf. com o seguinte conteúdo:


[mysqld]
     bind-address = 0.0.0.0

Agora o Apache e o MySQL já foram instalados, falta apenas o PHP. Para instalá-lo utilize o seguinte comando:

sudo apt-get install php5 php5-mysql

Para testar a instalação do PHP crie o arquivo /var/www/html/teste.php com esse conteúdo:

phpinfo();

Depois, garanta que Apache pode executar o arquivo utilizando o comando:

sudo chmod 755 /var/www/html/teste.php

Se tudo deu certo, uma página semelhante a seguinte vai ser exibida na URL http://localhost/teste.php:

Imagem exemplo PHP

O PHP já está instalado, mas sua configuração padrão está com as mensagens de erro desabilitada. Assim sendo, se houver algum erro no código de um arquivo, você não será avisado. Esse é o comportamento esperado em um ambiente de produção, mas para um ambiente de desenvolvimento é impraticável. Para permitir a exibição de mensagens de erros no PHP é necessário alterar o arquivo /etc/php5/apache2/php.ini.

Nesse arquivo procure por :

display_errors = Off

e altere para:

display_errors = On

Depois de realizar a alteração, reinicie o Apache com o comando:

sudo /etc/init.d/apache2 restart

Feito isso, o PHP vai exibir as mensagens de erro. Faça um teste, altere o arquivo /var/www/html/teste.php com o seguinte conteúdo:

erro_phpinfo();

Pronto, você instalou e configurou o seu LAMP. Porém, ainda é possível adicionar várias bibliotecas para a instalação do PHP. Para verificar uma lista das bibliotecas disponíveis use o comando:

apt-cache search php5

Será exibida uma listagem parecida com essa:

libapache2-mod-php5 - linguagem de scripts imersa em HTML, roda no servidor (módulo Apache 2)
php5 - linguagem de script incorporável em HTML, lado servidor (metapacote)
php5-cgi - server-side, HTML-embedded scripting language (CGI binary)
php5-cli - command-line interpreter for the php5 scripting language
php5-common - arquivos comuns para pacotes construídos a partir do código fonte do php5
php5-curl - CURL module for php5
php5-dbg - Debug symbols for PHP5
php5-dev - Files for PHP5 module development
php5-gd - GD module for php5
php5-gmp - GMP module for php5
php5-json - JSON module for php5
php5-ldap - LDAP module for php5
php5-mysql - MySQL module for php5
php5-odbc - ODBC module for php5
php5-pgsql - PostgreSQL module for php5
php5-pspell - pspell module for php5
php5-readline - Readline module for php5
php5-recode - recode module for php5
php5-snmp - SNMP module for php5
php5-sqlite - SQLite module for php5
php5-tidy - tidy module for php5
php5-xmlrpc - XML-RPC module for php5
php5-xsl - XSL module for php5

Para saber mais sobre um pacote utilize o comando:

apt-cache show nome_pacote

Veja um exemplo:

apt-cache show php5-pgsql

Package: php5-pgsql
Priority: optional
Section: php
Installed-Size: 219
Maintainer: Ubuntu Developers 
Original-Maintainer: Debian PHP Maintainers 
Architecture: amd64
Source: php5
Version: 5.5.9+dfsg-1ubuntu4.14
Depends: libc6 (>= 2.14), libpq5 (>= 9.0~), phpapi-20121212, php5-common (= 5.5.9+dfsg-1ubuntu4.14), ucf
Pre-Depends: dpkg (>= 1.15.7.2~)
Filename: pool/main/p/php5/php5-pgsql_5.5.9+dfsg-1ubuntu4.14_amd64.deb
Size: 51590
MD5sum: 564b17207f9e6a57bd26991fb50891f7
SHA1: 06787910a6d2a0c5718bf140bbec3a1d335c2a12
SHA256: 555463b935011fd772b3b5a717b44513e0a660c71a32caeb186d06c1c9ffce7e
Description-pt_BR: PostgreSQL module for php5
 This package provides a module for PostgreSQL database connections
 directly from PHP scripts.  It also includes the pdo_pgsql module for use
 with the PHP Data Object extension.
 .
 PHP (acrônimo recursivo para PHP: Hypertext Preprocessor) é uma linguagem
 de script de código aberto e propósito geral amplamente utilizada que foi
 especialmente implementada para desenvolvimento web e pode ser embarcada
 dentro do HTML.
Description-md5: 25edec9b992444a2c1634b9545b31326
Homepage: http://www.php.net/
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Origin: Ubuntu
Supported: 5y
...

Se quiser instalar alguns desses pacotes, use o comando:

sudo apt-get install nome_pacote1 nome_pacote2 ...

Veja o exemplo:

sudo apt-get install php5-pgsql php5-sqlite php5-ldap php5-json php5-gd

Inicializando imagem .ISO no GRUB2

Oi, tudo bem? Hoje quero escrever sobre como inicializar uma imagem .ISO de uma distribuição GNU/Linux através do GRUB2.

Vou tentar explicar todo o procedimento necessário para ter uma imagem .ISO de qualquer distribuição GNU/Linux dando Boot através do GRUB2. Porém, antes de iniciar é importante já ter conhecimento básico sobre o funcionamento do GRUB2. Se você não está seguro sobre as caracteristicas do GRUB2, veja esse artigo que escrevi em 2013 http://www.prmjuniorblog.blogspot.com.br/2013/02/configurando-o-grub2-no-debian-squeeze.html.

Sabendo disso, o primeiro passo a ser realizado é verificar a localização de 2 arquivos dentro da imagem .ISO. Os arquivos são vmlinuz e initrd. Para verificar o conteúdo da imagem utilize algum utilitário do tipo desempacotador (ark). Veja um exemplo de uma imagem do Ubuntu Server:

imagem de exemplo do Ubuntu

É importante verificar porquê a localização e as extensões desses arquivos podem mudar dependendo da imagem .ISO. Por exemplo, veja a um imagem do KUbuntu Desktop:

imagem de exemplo do Kubuntu

Perceba pela imagem que para a .ISO do KUbuntu os arquivos vmlinuz e initrd estão dentro da pasta casper.

Sabendo a localização dos arquivos na imagem .ISO, crie uma pasta na raiz do seu sistema e coloque essa imagem dentro dela. Exemplo: /isos/kubuntu-14.04.2-desktop-amd64.iso .

sudo mkdir /isos
sudo mv kubuntu-14.04.2-desktop-amd64.iso /isos/
sudo chmod 755 /isos -R

Feito isso, crie o arquivo /etc/grub.d/99_isos com o seguinte conteúdo:

#!/bin/sh
exec tail -n +3 $0

menuentry "KUbuntu 14.04 ISO" {

        set iso="/isos/kubuntu-14.04.2-desktop-amd64.iso"
        loopback loop (hd0,5)$iso
        linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$iso quiet splash
        initrd (loop)/casper/initrd.lz
}

Veja que vmlinuz, initrd e a pasta casper são referenciados algumas vezes. Faça as substituições conforme os dados da sua imagem .ISO .

Além disso, é necessário alterar a informação (hd0,5) conforme a sua situação. O hd0 faz referência ao primeiro HD( sda ) e 5 faz referência a 5ª partição desse HD( sda5 ). Altere essa informação conforme a partição onde a sua imagem .ISO estiver.

No artigo de 2013 sobre o GRUB2 eu escrevi sobre isso, mas é importante lembrar que o GRUB2 conta os HDs iniciando no zero( 0, 1, 2 …) e as partições iniciando no 1 ( 1, 2, 3 … ).

Depois de realizar todas as alterações necessárias, rode os comandos:

sudo chmod 755 /etc/grub.d/99_isos
sudo update-grub

Pronto reinicie o sistema e acesse alternativa correspondente a .ISO no menu do GRUB.

Eu criei esse artigo devido a uma dúvida que respondi no fórum Viva o Linux, veja: http://www.vivaolinux.com.br/topico/Desktops/Ubuntu-com-Isos/?pagina=1

Qualquer dúvida, deixe um comentário. Até mais…

Configuração de rede no Ubuntu 12.04 – Arquivos

No GNU/Linux (quase)todos os arquivos de configuração estão no diretório /etc/. Nesse artigo quero mostrar os principais arquivos de configuração de rede no Ubuntu 12.04. Basicamente, vou escrever sobre os seguinte arquivos:

  • /etc/hostname
  • /etc/hosts
  • /etc/resolv.conf
  • /etc/nsswitch.conf
  • /etc/network/interfaces

/etc/hostname

Esse arquivo contém o nome do sistema. A sintaxe desse arquivo é extremamente simples, veja:



cat /etc/hostname
paulo-pc

/etc/hosts

Esse arquivo serve para realizar um mapeamento entre endereços IP e nomes de máquinas. Esse arquivo é geralmente usado para identificar máquinas de uma rede local. Nesse arquivo cada linha representa um mapeamento… Seguindo a regra: IP Nome



cat /etc/hosts
127.0.0.1 localhost
127.0.1.1 paulo-pc
#Sistema de registro de atividades
10.11.0.250 sistema

/etc/resolv.conf

Esse arquivo também é utilizado para a resolução de nomes em endereços IP. Porém, nesse arquivo não são realizados mapeamentos manuais. No conteúdo desse arquivo são colocados endereços de servidores de resolução de nomes( DNS ).



cat /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4

Observação 1: Os IPs 8.8.8.8 e 8.8.4.4 são os servidores de resolução de nomes do Google.

/etc/nsswitch.conf

Esse arquivo determina a ordem das pesquisas que serão feitas para resolução de nomes. Por exemplo, no arquivo a seguir será consultado o arquivo /etc/hosts (files) e depois os servidores que estiverem especificados no arquivo /etc/resolv.conf(DNS)


cat /etc/nsswitch.conf
hosts: files dns
networks: files

protocols: db files
services: db files
ethers: db files
rpc: db files

netgroup: nis

/etc/network/interfaces

Nesse arquivo são configuradas as interfaces de rede do sistema. A sintaxe básica desse arquivo é a seguinte:


cat /etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 10.11.0.20
netmask 255.255.255.0
gateway 10.11.0.1

Nesse exemplo temos a configuração para interface de loopback ( sabe quando você acessa localhost no firefox? essa interface é que permite isso) e para interface eth0.

A interface eth0 está configurada com IP fixo, ou seja, a interface eth0 sempre irá utilizar o IP 10.11.0.20, máscara de rede 255.255.255.0 (/24) e gateway 10.11.0.1.

Para configurar a interface eth0 para pegar IP através do serviço de DHCP da rede, utilize a seguinte configuração:


cat /etc/network/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet dhcp

Observação 1: a interface eth0 é a primeira placa de rede cabeada… Se você tiver duas placas de redes, provavelmente você terá a interface eth0 e eth1.

Observação 2: Se a sua placa de rede for wireless, provavelmente você terá a interface wlan0.

Pessoal, em um próximo artigo vou escrever sobre os principais comandos utilizados no Ubuntu para configurar as interfaces de redes. Por agora é isso…

Personalizando o BASH

O BASH é uma interface de interação(shell) e também uma linguagem de programação. Existem outras alternativas de shell, mas no GNU/Linux o BASH é o mais utilizado.

Por ser uma linguagem de programação, obiviamente, o BASH possui suporte a variáveis. Essas variáveis podem ser do tipo local ou global.

As variáveis locais são válidas apenas no shell onde foram criadas, não é possível que um ‘processo filho’ utilize as variáveis locais de um ‘processo pai’. A sintaxe para definir uma variável local é:



nomeVariavel='valor'

Para acessar o valor de uma variável é necessário utilizar o sinal ‘$’, veja um exemplo:



nomeVariavel='valor'

echo $nomeVariavel

# imprime valor

É importante salientar, que diferente de outras linguagens, não deve haver espaços entre o nome da variável, o sinal de igual(=) e o valor da variável.

Para tonar uma variável local acessível para ‘processos filhos’ é utilizado o comando ‘export’, assim:



export nomeVariavel='valor'

As variáveis globais são aquelas acessíveis por todos os porcessos, geralmente essas variáveis contém valores com informações e configurações do BASH. Por exemplo:

  • $PS1 Define a string do prompt do BASH
  • $PATH Define o caminho utilizado para encontrar os programas
  • $HOME Define o diretório home do usuário

O comando ‘env’ lista as variáveis globais e o comando ‘set’ lista todas as variáveis.

Para automatizar a configuração de variáveis é possível utilizar alguns arquivos especiais. São eles:

  • /etc/profile
  • /etc/bashrc
  • ~/.bash_profile
  • ~/.bash_login
  • ~/.profile
  • ~/.bashrc
  • ~/.bash_logout

O arquivo ‘/etc/profile’ é executado durante o processo de autenticação. O arquivo ‘/etc/bashrc’ é executado quando o BASH é inicializado.

Por exemplo, quando é realizado o login através do terminal com ‘ctrl + alt + F2’, o arquivo ‘/etc/profile’ e o arquivo ‘/etc/bashrc’ serão executados porquê ocorreu o login e o bash foi inicializado. Quando é aberto um shell através da interface gráfica( xterm ), apenas o arquivo ‘/etc/bashrc’ será executado porquê o BASH foi inicializado, mas não houve login.

Os arquivos ‘/etc/profile’ e ‘/etc/bashrc’ são executados para todos os usuários, ou seja, a configuração realizada neles ocorre em todos os usuários do sistema. Em alguns casos é necessário realizar configurações especifcas por usuário, para isso existem os arquivos ‘~/.bash_profile’, ‘~/.bash_login’, ‘~/.profile’, ‘~/.bashrc’ e ‘~/.bash_logout’.

Esses arquivos ficam na pasta home de cada usuário. Na maioria das vezes apenas alguns desses arquivos são necessários e realmente estão na pasta home do usuário. Porém, é acerto afirmar que algum deles estará na pasta home de cada usuário do sistema.

Esses arquivos são executados assim:

Depois do ‘/etc/profile’: Primeiramente é procurado o arquivo ‘~/.bash_profile’, se esse não existir, é procurado o ‘~/.bash_login’, se esse também não existir, é procurado ‘~/.bash_login’. Perceba que apenas um desses arquivos será executado… Quando um desses arquivos é encontrado, ele é executado e o BASH para de procurar.

Depois do ‘/etc/bashrc’: ‘~/.bashrc’

Antes do logout: ‘~/.bash_logout’

Esse artigo termina aqui, mas vale lembrar que no Ubuntu existem algumas diferenças… No Ubuntu existe o arquivo ‘/etc/bash.bashrc’ e o arquivo ‘/etc/environment’. Fica como ‘lição de casa’ pesquisar o que cada um deles faz 🙂