sábado, 26 de agosto de 2017

Autocompletando código Python no Sublime Text

Você pode ter essa funcionalidade com o Anaconda Package.
O pacote Anaconda transforma editor Sublime Text 3 em um IDE de desenvolvimento Python completo.
A instalação é simples utilizando Package Control, usando a opção de menu Preferences > Package Control.


Então escreva anaconda no popup da janela de entrada que acabou de aparecer (que é a paleta de comandos do Sublime Text 3) e pressione <ENTER>:


Anaconda funciona bem sem configuração adicional. Para isto ele utiliza o interpretador Python configurado em seu caminho padrão cujo binário é chamado python. Agora o Sublime Text aceita autocomplete.


Desabilitando "line too long"

A instalação do Anaconda faz com que ele por default verifique o tamanho da linha de código que você está digitando. PEP8 recomenda que a linha tenha no máximo 80 caracteres. Eu particularmente não me preocupo com esta recomendação, e utilizo linhas grandes. Contudo isto significa que o meu texto fica todo marcado. Contudo existe um jeito de desligar isto!


Abra no menu Preferences -> Package Settings -> Anaconda -> Settings - User.
Se você nunca editou este arquivo deve acrescentar o bloco abaixo:

    "pep8_ignore":
    [
        "E501",
    ],
Você pode trocar também o valor default alterando Preferences -> Package Settings -> Anaconda -> Settings - Default. Neste caso provavelmente já existe um bloco "pep8_ignore". Neste caso basta acrescentar a linha com o "501", ficando por exemplo com um bloco como o abaixo:
    "pep8_ignore":
    [
        "E309",
        "E501",
    ],

Como reindentar automaticamente o código com Sublime Text

Basta adicionar esta ligação ao seu arquivo "Key Bindings - User" (dentro do menu de Preferências):

{"keys": ["alt+shift+f"], "command": "reindent", "args": {"single_line": false}}

Você também pode usar o recurso "reindent" através da paleta de comandos.
Ele está disponível no menu Edit > Line > Reindent.
Selecione o texto que deseja indentar antes de usar o item do menu.

Você pode criar uma tecla de atalho para este comando.
Entre na opção Preferences > Keybindings - User.
Acrescente uma linha entre os colchetes que marcam as entradas de configuração do keybinding.
Se você nunca criou uma configuração, sua tela será algo parecida com:

[
  { "keys": ["f10"], "command": "reindent"}
]
A configuração acima irá fazer com que teclando <F10> o texto selecionado será reindentado.

Instalando o docker no Ubuntu 14 e 16

O Docker é um projeto de código aberto que fornece uma plataforma aberta para desenvolvedores e administradores de sistemas para criar, empacotar e executar aplicativos em qualquer lugar como um contêiner leve. O Docker automatiza a implantação de aplicativos dentro de contêineres de software.

Mais informações sobre Docker podem ser encontradas na documentação oficial em https://docs.docker.com/.

É recomendável atualizar o Ubuntu antes de fazer a instalação. Para isto usamos os dois primeiros comandos. O terceiro comando instala o Docker. No Ubuntu 16, o docker pode ser instalado utilizando apt-get.
$ apt-get -y update
$ apt-get -y upgrade
$ apt-get install -y docker.io
Aguarde até que a instalação tenha sido concluída.
Se você estiver utilizando o Ubuntu 14, o instalador automaticamente inicia o serviço do Docker.

Em alguns linuxes é necessário iniciar o Docker com o comando systemctl e ativar o docker para ele seja executado automaticamente durante a inicialização do sistema.
$ systemctl start docker
$ systemctl enable docker
Verificamos a versão do docker para ver se está tudo correto:

$ docker version
Client version: 1.6.2
Client API version: 1.18
Go version (client): go1.2.1
Git commit (client): 7c8fca2
OS/Arch (client): linux/amd64
Server version: 1.6.2
Server API version: 1.18
Go version (server): go1.2.1
Git commit (server): 7c8fca2
OS/Arch (server): linux/amd64
Agora para rodar os comandos do docker é necessário utilizar sudo.
Se você quiser rodar os comandos sem sudo, é necessário acrescentar seu usuário ao grupo docker.

$ export user=`whoami`;sudo -E usermod -a -G docker `whoami`
$ sudo service docker restart


Instalando o Package Control no Sublime Text 3

Depois de instalar o Sublime Text, você vai querer imediatamente utilizar o Package Control.
Como ele você pode instalar e remover os diversos plugins do Sublime.

O método de instalação mais simples é através da console Sublime Text.
A console é acessado através do menu View > Show console.
Isto irá abrir uma linha de comando como mostrado na figura abaixo:

Uma vez aberta a console, cole o código Python mostrado abaixo.
Este código funciona para a versão 3 do Sublime Text.

import urllib.request,os,hashlib; h = 'df21e130d211cfc94d9b0905775a7c0f' + '1e3d39e33b79698005270310898eea76'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)
Clique em <ENTER> para executar.
Após o Sublime terminar a instalar, você poderá acessar pelo menu Preferences > Package Control.

Versões mais novas do Sublime Text

Se você tem uma versão nova do Sublime Text (build 3126 ou superior), você irá achar um jeito ainda mais fácil de instalar. Vá ao menu Tools > Install Package Control. E é só isto!!!

Instalando o Sublime Text 3 no Ubuntu - jeito fácil

O Sublime Text é um editor baste versátil para linux e windows, pois possui muitos pacotes que incrementam o seu funcionamento como um simples editor de texto. Veremos neste post como instalar a versão 3 no Ubuntu.

Para instalar o Sublime Text, adicionamos o repositório, atualizamos o sistema e usamos apt-get install para fazer a instalação. E é isto! Os três passos são então:

$ sudo add-apt-repository ppa:webupd8team/sublime-text-3
$ sudo apt-get update
$ sudo apt-get install sublime-text-installer
Você pode ainda instalar o Sublime baixando o arquivo .deb no site da Sublime.

Provavelmente o próximo passo que você irá fazer é instalar o Package Control.
Veja neste post como fazer isto.

quinta-feira, 24 de agosto de 2017

Instalando o FFmpeg no Ubuntu 14

FFmpeg é um software livre que permite a manipulação de dados multimídia.
Ele é um framework multimídia bastante popular.
O programa é bastante completo, mas não tem interface gráfica (para uns uma vantagem, para outros um aborrecimento).
Ele permite aos usuários decodificar, codificar, transcodificar, fazer mux e demux, stream, filtrar e reproduzir uma grande variedade de formatos de áudio e vídeo.
Uma de suas principais vantagens é que ele suporta formatos bem antigos, obscuras e formatos bem atuais.

Contudo ele está ausente em algumas versões do Ubuntu, tendo sido acrescentado novamente aos repositórios oficiais a partir da versão 15.
Mas se você tem uma versão mais velha, você precisa compilar um ffmpeg ou utilizar as dicas deste post.

Este post se aplica ao Ubuntu 12 e 14

Como instalar o FFmpeg usando o repositório kirillshkrogalev

Para instalar o FFmpeg podemos utilizar o repositório criado por kirillshkrogalev.
Isto nos permite ainda poder receber automaticamente as futuras atualizações do programa.
Você deve fazer os seguintes passos em um terminal:
Precisaremos adicionar o repositório do programa e atualizar o gerenciador de pacotes para que ele identifique o novo repositório.


$ sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next
$ sudo apt-get update -y

Use o comando abaixo para instalar o programa;

$ sudo apt-get install ffmpeg

Você pode utilizar outro repositório para fazer a instalação.
Basta trocar a linha que acrescenta o repositório por:

$ sudo add-apt-repository ppa:mc3man/trusty-media -y

Desinstalando o FFmpeg no Ubuntu

Para desinstalar o FFmpeg, abra um terminal.
Você irá remover o repositório e o programa usando os comando a seguir:

$ sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next --remove
$ sudo apt-get remove ffmpeg
$ sudo apt-get autoremove

Usando Docker para ffmpeg

Pode ser que você não queira instalar o ffmpeg em seu computador, mas queira utilizá-lo.
Um jeito de fazer isto é utilizar um container docker.
Você encontrar neste link do github as instruções para criar o container ffmpeg.

quarta-feira, 23 de agosto de 2017

Acrescentar "abrir terminal" no menu suspenso do nautilus

Quero criar um atalho de teclado para abrir o terminal ao navegar em uma determinada pasta. Este post funciona em computadores com Ubuntu 12, 14, e 16 e nautilus.
Neste caso queremos portanto ao abrir uma pasta que você está navegando no nautilus, ao clicar com o botão direito do mouse, abre um menu suspenso que permite abrir um terminal que inicia naquele diretório.

Isto é simples, mas eu sempre me esqueço do nome do pacote que precisamos instalar.
Precisamos abrir um terminal, instalar o pacote e em seguida reiniciar o Nautilus.
Isto pode ser feito com os dois comandos a seguir:

$ sudo apt-get install nautilus-open-terminal
$ nautilus -q

Se clicarmos com o botão direito do mouse em uma pasta, há a opção "Abrir no terminal".
Observe que <Ctrl + Alt + T> abrirá o terminal sempre no caminho da sua pasta inicial.

domingo, 20 de agosto de 2017

Transformando seu computador em um ponto de acesso de rede sem fio

Você irá precisar de uma placa de rede sem fio instalada e reconhecida pelo seu Linux. Por quê? Eu não entrarei nos detalhes de como fazer seu linux reconhecer sua placa de rede, pois para cada placa de rede funciona diferente.

Primeiro vamos ver se a sua placa aceita ser configurada como ponto de acesso. Para isto precisamos do comando iw. Vamos aproveitar e instalar também o wireless-tools que permite verificar outras informações da rede sem fio.

$ sudo apt-get -y update
$ sudo apt-get install -i iw wireless-tools
$ sudo apt-get install -i hostapd
A terceira linha acima instala o hostapd. O site com a documentação oficial do hostapd pode ser visto clicando neste link. O hostapd é o programa no linux que cria um ponto de acesso sem fio compatível com o protocolo IEEE 802.11 que é utilizado pelos wifi.

Então vamos fazer a verificação. O comando ifconfig mostra as interfaces.
$ ifconfig
eth0      Link encap:Ethernet  Endereço de HW b0:aa:ab:ab:ac:03  
          UP BROADCAST MULTICAST  MTU:1500  Métrica:1
          pacotes RX:0 erros:0 descartados:0 excesso:0 quadro:0
          Pacotes TX:0 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:1000 
          RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

lo        Link encap:Loopback Local  
          inet end.: 127.0.0.1  Masc:255.0.0.0
          endereço inet6: ::1/128 Escopo:Máquina
          UP LOOPBACK RUNNING  MTU:65536  Métrica:1
          pacotes RX:9225 erros:0 descartados:0 excesso:0 quadro:0
          Pacotes TX:9225 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:1 
          RX bytes:153959932 (153.9 MB) TX bytes:153959932 (153.9 MB)

wlan0     Link encap:Ethernet  Endereço de HW b0:aa:ab:ab:ac:03  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Métrica:1
          pacotes RX:196245 erros:0 descartados:0 excesso:0 quadro:0
          Pacotes TX:195998 erros:0 descartados:0 excesso:0 portadora:0
          colisões:0 txqueuelen:1000 
          RX bytes:286319091 (286.3 MB) TX bytes:23147473 (23.1 MB)
No nosso caso já conseguimos identificar a interface de rede que é wlan0. Você pode mandar listar um arquivo de sistema que mostra também informações de rede.

$ cat /proc/net/dev
Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
    lo: 153959932    9225    0    0    0     0          0         0 153959932    9225    0    0    0     0       0          0
 wlan0: 286319091  196245    0    0    0     0          0         0 23147473  195998    0    0    0     0       0          0
  eth0:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0
Que permite ver também as interfaces detectadas e criadas pelo linux.

Agora que já sabemos o nome da interface podemos verificar se ela suporta funcionar como AP.

$ iw phy
Wiphy phy0
 Band 1:
 Supported interface modes:
   * IBSS
   * managed
   * AP
   * AP/VLAN
   * WDS
   * monitor
   * mesh point
   * P2P-client
   * P2P-GO
   * Unknown mode (11)
Usamos o comando iw para obter a informação mostrada acima. Notem que o comando iw retorna muito mais informação que a mostrada acima. De propósito retiramos diversas linhas para não ficar muito grande e para ficar mais fácil mostrar onde está a informação desejada. Como vemos em "Supported interface modes" que AP está listado, então sabemos que podemos utilizar nossa placa para criar um ponto de acesso. E se a saída de seu comando não mostra isto? Então você pode precisar instalar outro driver ou até mesmo trocar de placa.

Vamos garantir que o NetworkManager não irá utilizar esta interface. Para isto é necessário alterar o arquivo /etc/NetworkManager/NetworkManager.conf e acrescentar as seguintes linhas:

[keyfile]
unmanaged-devices=mac:b0:aa:ab:ab:ac:03
Estas duas linhas indicam a seção do arquivo de configuração (que já pode existir no seu caso, confira antes de simplesmente inserir uma nova linha). A segunda linha indica para o NetworkManager que ele não deve controlar a interface com o endereço MAC indicado. Note que este endereço é indicado no comando ifconfig (veja a saída dele acima).

Precisamos criar um arquivo de configuração básico. O local padrão para colocarmos este arquivo é em /etc/hostapd. Vamos ver como criar um ponto de acesso simples com autenticação WPA2-PSK, isto é, um ponto de acesso normal com a maior segurança atual e que usa uma senha para o usuário conectar. Você pode usar o seu editor favorito, lembrando que o arquivo deverá ser criado em /etc/hostapd com o nome hostapd.conf.

interface=wlan0
driver=nl80211
ignore_broadcast_ssid=0
hw_mode=g
channel=1
ssid=meussid
# habilita WPA PSK
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
wpa_passphrase=senhadecriptografia
wme_enabled=1
Os pontos que você deverá verificar estão marcados de outra cor no exemplo acima. Em rosa está o nome da sua interface, normalmente wlan0. Em vermelho é o nome da sua rede sem fio (aquela que suas estações irão ver para se conectar). E em azul é a senha, que você deverá alterar para conter o texto que você achar melhor. O canal indica qual a frequência que seu ponto de acesso irá atuar. Por exemplo, para 2.4GHz os canais no Brasil vão de 1 a 11. Escolha um destes.

Veja se seu Ubuntu ao instalar o hostapd criou também o script de inicialização em /etc/init.d.
Se não criou, você precisar criar algo como mostrado abaixo. Use seu editor favorito, mas lembre que este diretório é acessado pelo root.
#!/bin/sh

### BEGIN INIT INFO
# Provides:  hostapd
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Should-Start:  $network
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop:  0 1 6
# Short-Description: Advanced IEEE 802.11 management daemon
# Description:  Userspace IEEE 802.11 AP and IEEE 802.1X/WPA/WPA2/EAP
#   Authenticator
### END INIT INFO

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON_SBIN=/usr/sbin/hostapd
DAEMON_DEFS=/etc/default/hostapd
DAEMON_CONF=
NAME=hostapd
DESC="advanced IEEE 802.11 management"
PIDFILE=/var/run/hostapd.pid

[ -x "$DAEMON_SBIN" ] || exit 0
[ -s "$DAEMON_DEFS" ] && . /etc/default/hostapd
[ -n "$DAEMON_CONF" ] || exit 0

DAEMON_OPTS="-B -P $PIDFILE $DAEMON_OPTS $DAEMON_CONF"

. /lib/lsb/init-functions

case "$1" in
  start)
 log_daemon_msg "Starting $DESC" "$NAME"
 start-stop-daemon --start --oknodo --quiet --exec "$DAEMON_SBIN" \
  --pidfile "$PIDFILE" -- $DAEMON_OPTS >/dev/null
 log_end_msg "$?"
 ;;
  stop)
 log_daemon_msg "Stopping $DESC" "$NAME"
 start-stop-daemon --stop --oknodo --quiet --exec "$DAEMON_SBIN" \
  --pidfile "$PIDFILE"
 log_end_msg "$?"
 ;;
  reload)
   log_daemon_msg "Reloading $DESC" "$NAME"
 start-stop-daemon --stop --signal HUP --exec "$DAEMON_SBIN" \
  --pidfile "$PIDFILE"
 log_end_msg "$?"
 ;;
  restart|force-reload)
   $0 stop
 sleep 8
 $0 start
 ;;
  status)
 status_of_proc "$DAEMON_SBIN" "$NAME"
 exit $?
 ;;
  *)
 N=/etc/init.d/$NAME
 echo "Usage: $N {start|stop|restart|force-reload|reload|status}" >&2
 exit 1
 ;;
esac

exit 0

Rode service hostapd start para iniciar o AP.
Pronto as suas estações sem fio (notebook, celular, tablet, etc) já podem continuar.

Para que seu computador funcione como um AP completo ainda temos que fazer duas coisas:

  • instalar e configurar um DHCP server, que fornecerá o endereço IP para suas estações
  • instalar e configurar um firewall com NAT para permitir que as estações naveguem.


sábado, 19 de agosto de 2017

Instalar um servidor NIS no CentOS

Neste post vemos como instalar um servidor NIS no CentOS 7.
Este exemplo considera que o DNS está funcionando e que resolve os endereços nis-server.minharede.com. Note que alterarmos o arquivo hosts para garantir que funcionará mesmo sem o DNS. Contudo é muito mais fácil com o DNS, pois todos os seus clientes NIS precisarão deste endereço.
Você pode ler como instalar um cliente NIS em nosso post: Instalar um cliente NIS no CentOS 7.

Instalando

Para o servidor rodar precisamos de dois pacotes. Todos os comandos deste post são executados com um usuário com privéligios administrativos (root).
$ yum -y install ypserv rpcbind
Para o NIS funcionar é necessário criar um domínio NIS. O comando a seguir cria um domínio denominado minharede.com. Troque para o nome que quiser.

$ ypdomainname minharede.com
$ echo "NISDOMAIN=minharede.com" >> /etc/sysconfig/network
Você precisa editar o arquivo securenets para limitar quais as redes podem acessar o NIS. Use o seu editor favorito. Eu sugiro o vim.
$ vi /var/yp/securenets
Neste arquivo, você precisará acrescentar as redes. Basicamente localhost (127.0.0.0) e a rede lan que você está conectado. No nosso caso a rede LAN usa a faixa de endereços 192.168.0.0. Assim no mínimo você precisará das duas linhas a seguir:
# adicionar as faixas de IP que devem acessar o NIS server
# localhost
255.0.0.0       127.0.0.0
# rede LAN
255.255.255.0   192.168.0.0
Para garantir o funcionamento (mesmo sem DNS) sugiro alterar o arquivo hosts. Abra o arquivo com um editor de texto e acrescente a linha que identifica o servidor (no nosso caso ele se chama nis-server).

$ vi /etc/hosts
Acrescentar pelo menos a linha que identifica o servidor:

192.168.0.3   nis-server.minharede.com nis-server
# adicionar também os clientes NIS (se não tiver um DNS)
Para iniciar o servidor NIS e tornar automático sua inicialização no boot:
$ systemctl start rpcbind ypserv ypxfrd yppasswdd
$ systemctl enable rpcbind ypserv ypxfrd yppasswdd
Construimos a base inicial do NIS usando o comando ypinit.
$ /usr/lib64/yp/ypinit -m
At this point, we have to construct a list of the hosts which will run NIS servers. nis-server is in the list of NIS server hosts. Please continue to add the names for the other hosts, one per line. When you are done with the
list, type a <control D>.
next host to add: nis-server.minharede.com
next host to add:# Ctrl + D key
The current list of NIS servers looks like this:
nis-server.minharede.com
Is this correct? [y/n: y] y# y key and Enter
We need a few minutes to build the databases...
Building /var/yp/minharede.com/ypservers...
Running /var/yp/Makefile...
gmake[1]: Entering directory `/var/yp/minharede.com'
Updating passwd.byname...
Updating passwd.byuid...
Updating shadow.byname...
Updating group.byname...
Updating group.bygid...
Updating hosts.byname...
Updating hosts.byaddr...
Updating rpc.byname...
Updating rpc.bynumber...
Updating services.byname...
Updating services.byservicename...
Updating netid.byname...
Updating protocols.bynumber...
Updating protocols.byname...
Updating mail.aliases...
gmake[1]: Leaving directory `/var/yp/minharede.com'
nis-server.minharede.com has been set up as a NIS master server.

Liberando o firewall

Se o firewall estiver sendo executado no computador, o firewall precisa permitir serviços ou portas do NIS. Primeiro precisamos editar o arquivo  /etc/sysconfig/network para definir as portas. Abra-o com o seu editor preferido e acrescente ao final do arquivo as seguintes linhas:

YPSERV_ARGS="-p 944"
YPXFRD_ARGS="-p 945"
O arquivo /etc/sysconfig/yppasswdd também precisa ser editado. Acrescente a linha abaixo no final do arquivo.
YPPASSWDD_ARGS="--port 946"
Vamos liberar agora as portas no firewall
$ systemctl restart rpcbind ypserv ypxfrd yppasswdd
$ firewall-cmd --add-service=rpc-bind --permanent 
$ firewall-cmd --add-port=944/tcp --permanent 
$ firewall-cmd --add-port=944/udp --permanent 
$ firewall-cmd --add-port=945/tcp --permanent 
$ firewall-cmd --add-port=945/udp --permanent 
$ firewall-cmd --add-port=946/udp --permanent 
$ firewall-cmd --reload
Ok. Agora as estações terão acesso aos serviços do NIS server.

Atualizar a base de usuários do NIS

Você precisa compilar a base de usuários sempre que criar, alterar ou remover um usuário.
Isto é feito usando o comando make.

$ cd /var/yp
$ make

Instalando o Java da Oracle no Ubuntu

Neste post vamos ver como instalar o Java (oficial) no Ubuntu.
Os procedimentos mostrados neste post seguem a orientação do pessoal da Web Upd8. Eles possuem um repositório que facilita a instalação do Java no Ubuntu. Se você quiser ver o texto original clique aqui.

Para instalar o Java 8 utilize a sequencia de comandos mostrada a seguir:
┌─ h3dema@casa-desktop:~
└─┤$ sudo add-apt-repository ppa:webupd8team/java
┌─ h3dema@casa-desktop:~
└─┤$ sudo apt-get update -y
┌─ h3dema@casa-desktop:~
└─┤$ echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | sudo /usr/bin/debconf-set-selections
┌─ h3dema@casa-desktop:~
└─┤$ sudo apt-get install -y oracle-java8-installer
┌─ h3dema@casa-desktop:~
└─┤$ sudo apt-get install -y oracle-java8-set-default
Basicamente instalamos o repositório do Web Upd8 e atualizamos a lista local de pacotes.
O terceiro comando não é obrigatório, ele só torna o processo mais fácil.
O quarto comando instala o java 8 e no quinto o Java 8 é colocado como default.
Para testar se a instalação está correta, peça para ver a versão do java default usando:

┌─ h3dema@casa-desktop:~
└─┤$ java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

A instalação do Java 9 é similar.
┌─ h3dema@casa-desktop:~
└─┤$ sudo add-apt-repository ppa:webupd8team/java
┌─ h3dema@casa-desktop:~
└─┤$ sudo apt-get update -y
┌─ h3dema@casa-desktop:~
└─┤$ sudo apt-get install -y oracle-java9-installer
┌─ h3dema@casa-desktop:~
└─┤$ sudo apt-get install -y oracle-java9-set-default
Note que se você executar exatamente os dois conjuntos de comandos indicados acima.
Você terá os Java 8 e Java 9 instalados e o java 9 será o java default.

┌─ h3dema@casa-desktop:~
└─┤$ java -version
java version java version "9"
Java(TM) SE Runtime Environment (build 9+181)
Java HotSpot(TM) 64-Bit Server VM (build 9+181, mixed mode)
Você poderá alterar a qualquer momento o Java default usando update-alternatives:
┌─ h3dema@casa-desktop:~
└─┤$ sudo update-alternatives --config java
Existem 2 escolhas para a alternativa java (disponibiliza /usr/bin/java).

  Selecção   Caminho                                  Prioridade Estado
------------------------------------------------------------
  0            /usr/lib/jvm/java-9-oracle/bin/java       1091      modo automático
  1            /usr/lib/jvm/java-8-oracle/jre/bin/java   1081      modo manual
* 2            /usr/lib/jvm/java-9-oracle/bin/java       1091      modo manual

Pressione enter para manter a escolha actual[*], ou digite o número da selecção:

Assim basta digitar o número da versão que você quer utilizar. Note que update-alternatives pode ser utilizado também para trocar o javac e o jar default.

Verificar o nível de sinal do wifi na linha de comando

Para verificar esta informação você precisará instalar algumas ferramentas de
┌─ h3dema@casa-desktop:~
└─┤$ sudo apt-get install wireless-tools
Tendo instalado este pacote, você deverá usar o comando iwconfig. Ele não precisa de parâmetros.
Minha placa de rede sem fio é ra0. O comando me informa em qual rede estou conectado ("sm").
Como mode é managed, então estou conectado a um access point (AP) cujo endereço MAC está listado como Access Point: 0C:F8:93:A0:81:90. Frequency indica qual a frequência que meu computador está utilizando para comunicar com o AP.


Minha placa de rede fornece três informações sobre o sinal:

  • Link Quality=100/100
  • Signal level:-34 dBm
  • Noise level:-60 dBm

A primeira linha é uma avaliação fornecida pelo fabricante do dispositivo USB sobre a qualidade da minha conexão. No meu caso é 100%. As duas linhas seguintes são os valores, respectivamente, do sinal captado e do ruído captado. Quando maior o valor do sinal (por exemplo, -33, -32 ,-31 ...) melhor e quanto menor o valor do ruído (por exemplo, -61, -62, -63 ....) melhor.


NOTA: os dispositivos de rede sem fio são muito diferentes de fabricante para fabricante e às vezes até mesmo de modelo para modelo. Assim não se assuste se o seu dispositivo não fornecer todas as três informações que eu mostrei. Pode ser que ele não mostre nenhuma informação!



Se você quiser saber mais sobre estas questões de sinal e ruído tem um livro bem legal (mas MUITO técnico) que Wireless Communications: Principles and Practice do Rappaport.


Identificando o seu dispositivo de rede sem fio

No meu caso sei que o meu dispositivo de rede sem fio está instalado na USB.
Portanto posso pedir para listar tudo que está conectado na USB, usando:

┌─ h3dema@casa-desktop:~
└─┤$ lsusb
Este comando irá listar dos os dispositivos encontrados nas portas USB do seu computador.
┌─ h3dema@casa-desktop:~
└─┤$ lsusb
Bus 007 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 003: ID 148f:761a Ralink Technology, Corp. 
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 003: ID 046d:082d Logitech, Inc. HD Pro Webcam C920
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 003: ID 04f3:0103 Elan Microelectronics Corp. ActiveJet K-2024 Multimedia Keyboard
Bus 004 Device 002: ID 04b3:310c IBM Corp. Wheel Mouse
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Posso tentar obter mais informações sobre o dispositivo utilizando o recurso do lsusb que permite identifica qual dispositivo quero ver (-s) e que quero ver mais informações (-v = verbose).

┌─ h3dema@casa-desktop:~
└─┤$ lsusb -v -s 002:003

Bus 002 Device 003: ID 148f:761a Ralink Technology, Corp. 
Couldn't open device, some information will be missing
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.01
  bDeviceClass            0 (Defined at Interface level)
  bDeviceSubClass         0 
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x148f Ralink Technology, Corp.
  idProduct          0x761a 
  bcdDevice            1.00
  iManufacturer           1 
  iProduct                2 
  iSerial                 3 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength           74
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xa0
      (Bus Powered)
      Remote Wakeup
    MaxPower              160mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           8
      bInterfaceClass       255 Vendor Specific Class
      bInterfaceSubClass      2 
      bInterfaceProtocol    255 
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x84  EP 4 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x85  EP 5 IN
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x08  EP 8 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x04  EP 4 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x05  EP 5 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x06  EP 6 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x07  EP 7 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               1
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x09  EP 9 OUT
        bmAttributes            2
          Transfer Type            Bulk
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0200  1x 512 bytes
        bInterval               1
Notem que agora o lsusb me dá um grande quantidade de informações. Talvez a informação mais importante seja o ID. Com ele dá para a gente tentar descobrir o driver correto do dispositivo sem fio.
Procurando agora no Google, a primeira informação já me dá uma dica principalmente porque eu já sei que o dongle USB que eu comprei foi da TP-Link.

Eu tenho um post que mostra como fazer a instalação deste dongle.

quinta-feira, 17 de agosto de 2017

Instalar um cliente NIS no CentOS 7

Instalação do cliente NIS em um computador

Este procedimento serve tanto para servidores quanto estações na rede minharede.com. Os exemplos de configuração abaixo foram realizados no servidor “disk”.

Passo 1) Instalação dos aplicativos

Para criar um cliente NIS, basta instalar ypbind e rpcbind. Este pacotes podem ser instalados usando o yum.
[root@disk etc]# yum -y install ypbind rpcbind

Passo 2) Configurar o domínio do NIS

[root@disk etc]# ypdomainname minharede.com
[root@disk etc]# echo "NISDOMAIN=minharede.com" >> /etc/sysconfig/network

Passo 3) Verificação da configuração do DNS

Precisamos verificar se o cliente acessa as informações de DNS corretamente.

[root@ disk etc]# cat /etc/resolv.conf 
# Generated by NetworkManager
search minharede.com
nameserver 192.168.0.1
Esta configuração considera que você tem um servidor de DNS instalado e configurado no endereço 192.168.0.1. Este servidor deve resolver o endereço disk.minharede.com e nis.minharede.com.

Passo 4) Configuração do acesso NIS

Este passo considera que o servidor NIS está configurado e funcionando no computador nis.minharede.com.

[root@ disk etc]# authconfig --enablenis --nisdomain=minharede.com \
                    --nisserver=nis.minharede --enablemkhomedir --update

Passo 5) Iniciando

Iniciando o cliente NIS e fazendo com que reinicie automaticamente depois de um reboot

[root@ disk etc]# systemctl start rpcbind ypbind 
[root@ disk etc]# systemctl enable rpcbind ypbind 

Testando

a) Verificando o domínio Rode o comando ypwhich. Ele mostra em qual rede você está conectado.

[root@disk sysconfig]# ypwhich 

nis.minharede.com

b) Verificando se consegue obter informações do servidor NIS

[root@disk sysconfig]# ypcat -d 
minharede.com passwd
bob:x:1000:1000::/home/bob:/bin/bash
henriquemoura:x:1011:1011::/home/henriquemoura:/bin/bash

Sua lista pode ser diferente. O importante é conseguir obter os usuários.

c) Você pode realizar um teste completo com yptest. Este comando realiza 9 testes.

Trobleshooting

(a) Se ao chamar ypwhich você obtiver a seguinte mensagem de erro:
can't yp_bind: Reason: Domínio não limitado (not bound)

Você pode criar o arquivo ypbind como mostrado abaixo e reiniciar os serviços.
[root@disk etc]# echo "OTHER_YPBIND_OPTS=\"-no-dbus\"" > /etc/sysconfig/ypbind

(b) Ao rodar o teste completo você pode se deparar com:

Test 3: yp_match WARNING: Chave no está no mapa (Map passwd.byname, key nobody)

Apesar de ser retornado como erro no final do teste, esta condição é somente um alerta que o usuário “nobody” não está configurado no NIS. Será usado o usuário local.

NFS no CentOS 7

Instalando o servidor NFS

Faça o login no seu servidor como usuário root (isto é, com privilégios administrativos). Vamos considerar para este exemplo que o servidor se chama nfs-server.meudominio.com.

$ yum -y install rpcbind nfs-utils
Edite o arquivo /etc/idmapd.conf.
Localiza a linha 5, descomente a linha e troque para o nome do seu dominio (por exemplo, meudominio.com)

Domain = meudominio.com

Edite o arquivo /etc/exports. Vamos por exemplo, exportar o diretório home para toda a rede que está na faixa de endereços 192.168.0.0/24.

# write settings for NFS exports
/home 192.168.0.0/24(rw,no_root_squash)

Os parâmetros rw e no_root_squash controlando o comportamento da exportação do diretório HOME para a rede. O primeiro parâmetro indica que o conteúdo poderá ser lido ou escrito. Se root_squash estiver habilitado, então as requisições do usuário com uid ou gid igual 0, serão mapeadas para um id anônimo. Como usamos no_root_squash, as entradas de root permanecerão do usuário root.
Se você quiser ver mais informações, veja o man neste link. Nele você encontrará uma descrição para todos os parâmetros.

Vamos iniciar o servidor e garantir que ele sempre será reiniciado depois de um reboot.
# systemctl start rpcbind nfs-server
# systemctl enable rpcbind nfs-server
Precisamos alterar as regras de firewall do CentOS para permitir que o serviço seja acessível pela rede:
# firewall-cmd --permanent --zone=public --add-service=nfs
# firewall-cmd --permanent --zone=public --add-service=mountd
# firewall-cmd --permanent --zone=public --add-service=rpc-bind
# firewall-cmd --reload

Instalando um cliente NFS

Faça o login no seu servidor como usuário root (isto é, com privilégios administrativos).

$ yum -y install rpcbind nfs-utils
Edite o arquivo /etc/idmapd.conf.
Localiza a linha 5, descomente a linha e troque para o nome do seu dominio (por exemplo, meudominio.com)

Domain = meudominio.com

Vamos iniciar o serviço e garantir que ele sempre será reiniciado depois de um reboot.
# systemctl start rpcbind
# systemctl enable rpcbind
Agora vamos montar o diretório da rede (no nosso exemplo o diretório /home).

Vamos iniciar o serviço e garantir que ele sempre será reiniciado depois de um reboot.
# mount -t nfs nfs-server.meudominio.com:/home /home


Instalando Ganglia

Ganglia é um sistema de monitoramento para ambiente de computação.
Ele é um sistema distribuído e escalável, podendo funcionar com clusters e grids.
O ganglia baseia-se em um design hierárquico direcionado às federações de clusters.


A instalação do servidor ganglia no ubuntu leva alguns passos

1. criar um usuário

$ adduser ganglia

2. garantir sudo

Devemos garantir que o usuário do ganglia poderá utilizar do comando sudo para suas atividades. Por isto devemos editar o arquivo de SUDOERS, o que pode ser feito pelo comando:

$ visudo


No arquivo, vá para a última linha e adicione:

ganglia    ALL=(ALL:ALL) ALL

3. instalar o programa

A instalação é feita utilizando o apt-get. Note que o ganglia irá instalar o apache também.

$ su - ganglia
$ sudo apt-get update && sudo apt-get -y upgrade
$ sudo apt-get install -y ganglia-monitor rrdtool gmetad ganglia-webfrontend
$ sudo cp /etc/ganglia-webfrontend/apache.conf /etc/apache2/sites-enabled/ganglia.conf

4. editar /etc/ganglia/gmetad.conf

Para criar o ganglia devemos editar o arquivo de configuração.
Neste post consideramos que o domínio será teste.com.br.
Este nó que estamos criando é chamado node01.
Assim dentro do arquivo de configuração, trocar data_source "my cluster" localhost por data_source "teste.com.br" node01.teste.com.br.

Note que seu DNS deve estar configurado para responder aos endereços dos nós, como por exemplo node01.teste.com.br.

5. editar /etc/ganglia/gmond.conf

Localizar dentro do arquivo a palavra cluster.
Trocar a linha name = "unspecified" pelas duas linhas a seguir:
     name = "teste.com.br"
     owner = "clusteradmin"

No mesmo arquivo, localizar udp_send_channel e alterar esta entrada (que tem várias linhas) de forma que ela fique:

udp_send_channel   {
 $mcast_join = 239.2.11.71$# comment out
  host = node01.teste.com.br
  port = 8649
  ttl = 1
}

Logo a seguir, você irá localizar a entrada udp_recv_channel. Ela deve ser alterada também de forma que fique:

udp_recv_channel {
 $mcast_join = 239.2.11.71$# comment out
  port = 8649
 $bind = 239.2.11.71$# comment out
}

Note que se você tem firewall habilitado, você deverá liberar o acesso à porta 80 e 8649.

6. iniciar o serviço

$ sudo service ganglia-monitor restart
$ sudo service gmetad restart
$ sudo service apache2 restart

7. acessar o serviço

Se não houveram erros de configuração, o servidor ganglia está ativo.
O serviço está disponível via web pelo endereço http://node01/ganglia.

Outros nós

Para os demais nodes da rede devemos instalar o programa de monitoramento do ganglia, assim este nó (cliente) irá informar ao servidor (node01) suas informações de operação.
Para instalar, entre no nó cliente (por exemplo, node02.teste.com.br) e faça a instalação utilizando apt-get:

$ sudo apt-get install -y ganglia-monitor
Para configurar o cliente precisamos editar o arquivo /etc/ganglia/gmond.conf.
Localizar deaf = no e trocar por deaf = yes.

Localizar a palavra cluster dentro do mesmo arquivo de configuração.
Trocar a linha name = "unspecified" pelas duas linhas a seguir:
      name = "teste.com.br"
     owner = "clusteradmin"

Localizar a entrada udp_send_channel e fazer com que ela fica como abaixo:

udp_send_channel   {
 $mcast_join = 239.2.11.71$# comment out
  host = node01.teste.com.br
  port = 8649
  ttl = 1
}

No cliente, você deverá comentar completamente a entrada udp_recv_channel, como mostrado abaixo:

/*$# comment out
udp_recv_channel {
 $mcast_join = 239.2.11.71
  port = 8649
 $bind = 239.2.11.71
}
*/$# comment out

Agora basta reiniciar o nó cliente para que o monitor do ganglia passe a funcionar e a enviar as informações ao nó servidor:
$ sudo service ganglia-monitor restart
Aguarde uns instantes e a informação será transmitida para o servidor ganglia (node1).

Se quiser saber mais, um bom livro é Monitoring with Ganglia -- Tracking Dynamic Host and Application Metrics at Scale.

Instalando Java da Oracle no CentOS

Vamos ver neste post como instalar o JAVA 7 (JDK 7u79) no CentOS/RHEL 7/6/5.

Começamos por fazer o download do Java que está disponível no seu site da Oracle.
Vamos baixar o último release da versão do Java.
Quando o download terminar, precisamos extrair os arquivos com comandos fornecidos.
Os procedimentos indicados devem ser realizados como root e você deve ter o programa wget instalado (yum install wget).

# cd /opt/
# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.tar.gz"
# tar xzf jdk-7u79-linux-x64.tar.gz

Para 32 bits
# cd /opt/
# wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-i586.tar.gz"
# tar xzf jdk-7u79-linux-i586.tar.gz

Usamos alternatives para fazer a instalação.

# cd /opt/jdk1.7.0_79/
# alternatives --install /usr/bin/java java /opt/jdk1.7.0_79/bin/java 2
# alternatives --config java
O último comando abre um menu na tela solicitando que você escolha o java que será o default do sistema. O mesmo conjunto de comandos pode ser utilizado para instalar o jar:

# alternatives --install /usr/bin/jar jar /opt/jdk1.7.0_79/bin/jar 2
# alternatives --config jar
e o javac:
# alternatives --install /usr/bin/javac javac /opt/jdk1.7.0_79/bin/javac 2
# alternatives --config javac
O próximo passo é alterar as variáveis de ambiente: JAVA_HOME, PATH e JRE_HOME. Você precisará acrescentar as seguintes linhas no script de inicialização de seu usuário ou do sistema.
Abra o arquivo do script de inicialização e coloque ao final do arquivo as seguintes linhas:
export JAVA_HOME=/opt/jdk1.7.0_79
export JRE_HOME=/opt/jdk1.7.0_79/jre
export PATH=$PATH:/opt/jdk1.7.0_79/bin:/opt/jdk1.7.0_79/jre/bin
Usualmente o arquivo de inicialização do usuário corrente é ~/.bashrc ou ~/.bash_profile.

Para testar se seu java está funcionando, peça para ver a versão do java default.

$ java -version

java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

Desabilitar ModemManager no Ubuntu

 ModemManager provides a unified, high-level interface to control all kinds of modems: 4G/5G modems (LTE/NR) 3G modems NB-IoT / Cat-M1 modul...