Gerenciando variáveis de ambiente JAVA_HOME no Mac, Linux, …

Existem diversas formas para gerenciar variáveis de ambiente em sistema Unix, uma forma simples é:

Adicionar ao ficheiro /etc/profile (é preciso ter permissão de root).

Exemplo:

sudo vi /etc/profile

/etc/profile

JAVA_HOME=/opt/java/jdk1.7.0_80
ANT_HOME=/opt/java/apache-ant-1.9.6
M2_HOME=/opt/java/apache-maven-3.3.3

PATH=$PATH:$JAVA_HOME/bin:$ANT_HOME/bin:$M2_HOME/bin

export PATH JAVA_HOME ANT_HOME M2_HOME 

Pronto!

Agora só fazer um reload do ficheiro, para não ter que reiniciar a máquina! :-)

source /etc/profile

Para testar se tudo deu certo. Verificar a versão. Exemplo

java -version
# ant -version
# mvn -version

Fazendo login via ssh sem precisar usar senha

Quando trabalhamos fazendo conexões ssh em servidores remotos várias vezes ao dia via terminal precisamos saber sempre os utilizadores e senhas dos hosts remotos isto se torna um pouco entediante as vezes.

Exemplo, se voce tiver um servidor ssh instalado na sua máquina, pode testa-lo sem precisar se conectar em um servidor remoto, tente:

ssh localhost

Precisou de senha, não é mesmo?

Que tal se não fosse necessário digitar a senha?

Então é para isto que este script serve!

Basta usa-lo: ./sshnologin.sh ipservidorremoto


# Simple script for copy the ssh keys to a remote host.
# autor: matafe
#!/bin/bash

if [ "x$1" = "x" ]; then
echo 'Target hostname or IP required!'
exit 1;
fi

target_host_ip="$1"
file_key_local="~/.ssh/id_rsa.pub"

echo "Coping '$file_key_local' to host '$target_host_ip' ..."
scp ~/.ssh/id_rsa.pub $target_host_ip:~/

echo "Adding keys on remote host '$target_host_ip' ..."
ssh $target_host_ip 'if [ ! -d ~/.ssh ]; then mkdir ~/.ssh; fi; chmod 700 ~/.ssh; cat ~/id_rsa.pub >> ~/.ssh/authorized_keys; chmod 600 ~/.ssh/authorized_keys; rm ~/id_rsa.pub; chmod 750 ~/'

echo "Testing configuration..."
ssh $target_host_ip 'echo "Configuration done!"'

Pode testá-lo, provavelmente agora já não precise mais de senha!

ssh localhost

DICA: Caso queira colocar seu script no path para de qualquer lugar do terminal poder executá-lo. É só criar um link simbólico em “/usr/local/bin“. Lembre de dar permissão de execução para seu script ssh! (chmod 755 /home/mferraz/Dev/Unix/Scripts/sshnologin.sh)

Ex: ./sshnologin.sh

sudo ln -s /home/mferraz/Dev/Unix/Scripts/sshnologin.sh /usr/local/bin/sshnologin.sh

Sei que talvez voce já sabia, mas é bem útil, não? :-)

Criando uma rotina de backup no Mac através de script.

Ja temos várias maneiras de fazer backup dos nossos dados, cada um tem o seu jeito preferido, a sua ferramenta de confiança!

No Mac temos um aplicativo muito bom, a “Máquina do Tempo”, ou “Time Machine”.

Porém neste post vou dar um exemplo, usando o rsync, um software livre encontrado em qualquer distribuição UNIX.

Para instalá-lo, usar o Mac ports, Homebrew ou qualquer gerenciador de software de sua preferência! (Desculpe, não é o objetivo aqui mostrar sua instalação)

A grande vantagem do rsync é que voce pode fazer backup de forma incremental dos seus dados, e não precisa ficar apagando fotos backup antigo (snapshots), caso fique cheio seu HD Externo de backup.

Segue o script run-backup.sh.command :

* O .command é apenas para ficar como um atalho do desktop do meu mac e ser iterativo, pois se fosse apenas o shell script, se eu quisesse ver o resultado deveria executá-lo pelo terminal.


# Simple script for run an incremental backup using rsync unix command.
# autor: matafe
#!/bin/bash

echo "Running My Backup..."

SOURCE_FOLDER="/Users/matafe/"
TARGET_FOLDER="/Volumes/matafe-backup/MyBackup"

EXCLUDE_FILES=('*.class' '*.jasper' '*.log' '.Trash' '.grails' '.jenkins' '.gradle' '.m2' '.ivy2' '.nmp' '.dropbox' 'Library')

TMP_EXCLUDE=""

for i in "${EXCLUDE_FILES[@]}"
do
	TMP_EXCLUDE="$TMP_EXCLUDE --exclude=$i"
done

CMD="rsync -av --progress $TMP_EXCLUDE $SOURCE_FOLDER $TARGET_FOLDER"

echo "$CMD"

eval $CMD

read -p "Press any key to continue... " -n1 -s

echo "Done."

Já é bem auto explicativo, mas ai vai algumas observações:

– De: /Users/matafe/
– Para: /Volumes/matafe-backup/MyBackup
– Irá excluir alguns arquivos: .log, *.class, …. ( não quero copia-los )
– No final ira mostrar o resultado e aguardar por pressionar algum tecla para fechar.

E ai? Qual é a sua ferramenta preferida?

Criando um repositório git privado na nuvem de graça

Neste post irei descrever como se criar um repositório git privado na nuvem de graça usando o serviço de armazenamento Dropbox, poderia ser qualquer um outro, ou até mesmo uma pasta em um servidor remoto, ou até mesmo um disco de backup.

Mas qual a vantagem disto? Pois já temos serviços muito bons que já armazenam meus repositórios na internet, como por exemplo o GitHub ( que por sinal é muito bom! ) porem só para voce armazenar projetos públicos, em que qualquer pessoa poderá ter acesso, a menos que voce pague pelo serviço.

Bom, vamos lá!

Vamos primeiro criar as pasta REMOTA onde vai ficar meu pequeno projeto privado.


# Pastas remotas
[matafe@Mauricios-MacBook-Pro:~ ] $ mkdir -p ~/Dropbox/ProjectsRepositories/myproject.git
[matafe@Mauricios-MacBook-Pro:~ ] $ cd ~/Dropbox/ProjectsRepositories/myproject.git/
[matafe@Mauricios-MacBook-Pro:~/Dropbox/ProjectsRepositories/myproject.git ] $ git --bare init
Initialized empty Git repository in /private/tmp/repo/myproject.git/

Pronto!

Agora vamos criar nosso projeto LOCAL.

#Local
[matafe@Mauricios-MacBook-Pro:~ ] $ mkdir -p ~/MyLocalProjects/
[matafe@Mauricios-MacBook-Pro:~ ] $ cd ~/MyLocalProjects/
# Criando um projeto de exemplo usando o Maven.
[matafe@Mauricios-MacBook-Pro:~/MyLocalProjects ] $ mvn archetype:generate -DgroupId=com.mycompany -DartifactId=myproject -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
[matafe@Mauricios-MacBook-Pro:~/MyLocalProjects ] $ cd myproject
[matafe@Mauricios-MacBook-Pro:~/MyLocalProjects/myproject ] $ git init
[matafe@Mauricios-MacBook-Pro:~/MyLocalProjects/myproject ] $ git add .
[matafe@Mauricios-MacBook-Pro:~/MyLocalProjects/myproject ] $ git commit -m 'initial commit'
[matafe@Mauricios-MacBook-Pro:~/MyLocalProjects/myproject ] $ git remote add origin  ~/Dropbox/ProjectsRepositories/myproject.git
[matafe@Mauricios-MacBook-Pro:~/MyLocalProjects/myproject ] $ git push origin master

Pronto! Seu projeto já esta seguro!

Se quiser do seu computador do trabalho ou de qualquer outro lugar ja pode clonar o seu projeto!

git clone ~/Dropbox/ProjectsRepositories/myproject.git

E então? Foi útil essa dica pra você?

Mudando entre versões do JDK no Mac – OSX

Caso queira manter diferentes versões do Java JDK instalado e ficar alterando entre elas basta usar:

/usr/libexec/java_home -V

Exemplo:

[matafe@Mauricios-MacBook-Pro:~ ] $ java -version

java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b25)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)

[matafe@Mauricios-MacBook-Pro:~ ] $ /usr/libexec/java_home -V

Matching Java Virtual Machines (2):
1.8.0_40, x86_64: "Java SE 8" /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home
1.7.0_79, x86_64: "Java SE 7" /Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home
/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home

[matafe@Mauricios-MacBook-Pro:~ ] $ export JAVA_HOME=$(/usr/libexec/java_home -v1.7.0_79)


[matafe@Mauricios-MacBook-Pro:~ ] $ 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)

Pronto! Mudamos do JDK 1.8.0_40 para o 1.7.0_79

Compactando uma pasta em varios arquivos pelo Terminal no Mac

Para dividir uma pasta ou um arquivo em varios de mesmo tamanho no Mac ( ou Unix ) via terminal basta seguir os comandos:

Neste caso vamos dividir uma pasta de 350mb em 4 ficheiros de no máximo 100mb cada:

matafe@kratos:/tmp/movies$ ls -lh iGenius_How-Steve-Jobs-Changed-the-World/
total 716216
-rwxr-xr-x 1 matafe wheel 350M 15 Set 20:23 igenius.how.steve.jobs.changed.the.world.hdtv.xvid-diverge.avi
-rwxr-xr-x 1 matafe wheel 66K 15 Set 20:23 igenius.how.steve.jobs.changed.the.world.hdtv.xvid-diverge.srt

O primeiro passo é compactar a pasta e seus conteudo em um arquivo zip.
Neste caso vamos gerar o arquivo iGenius-full.zip

matafe@kratos:/tmp/movies$ zip -r iGenius-full.zip iGenius_How-Steve-Jobs-Changed-the-World/
adding: iGenius_How-Steve-Jobs-Changed-the-World/ (stored 0%)
adding: iGenius_How-Steve-Jobs-Changed-the-World/igenius.how.steve.jobs.changed.the.world.hdtv.xvid-diverge.avi (deflated 1%)
adding: iGenius_How-Steve-Jobs-Changed-the-World/igenius.how.steve.jobs.changed.the.world.hdtv.xvid-diverge.srt (deflated 63%)

Em seguida, vamos dividir este arquivo zip gerado em arquivos de 100Mb no máximo cada:

matafe@kratos:/tmp/movies$ zip iGenius-full.zip --out iGenius.zip -s 100m
copying: iGenius_How-Steve-Jobs-Changed-the-World/
copying: iGenius_How-Steve-Jobs-Changed-the-World/igenius.how.steve.jobs.changed.the.world.hdtv.xvid-diverge.avi
copying: iGenius_How-Steve-Jobs-Changed-the-World/igenius.how.steve.jobs.changed.the.world.hdtv.xvid-diverge.srt

Verificando o conteudo da pasta:

matafe@kratos:/tmp/movies$ ls -lh
total 1414880
-rw-r--r-- 1 matafe wheel 345M 15 Set 20:39 iGenius-full.zip
-rw-r--r-- 1 matafe wheel 100M 15 Set 21:02 iGenius.z01
-rw-r--r-- 1 matafe wheel 100M 15 Set 21:02 iGenius.z02
-rw-r--r-- 1 matafe wheel 100M 15 Set 21:02 iGenius.z03
-rw-r--r-- 1 matafe wheel 45M 15 Set 21:02 iGenius.zip
drwxr-xr-x 4 matafe wheel 136B 15 Set 20:34 iGenius_How-Steve-Jobs-Changed-the-World

Pronto os ficheiros iGenius.z* foram gerados com o tamanho definido.

Instalando o TORA com suporte Oracle no Ubuntu 10.04 (Lucid Lynx)

Resolvi escrever este post por causa de um problema que tive ao fazer a instalação do TOra com o suporte a banco de dados Oracle seguindo o tutorial no pythian.

O problema que tive foi ao suporte de characteres  WE8ISO8859P15 pelo pacote Instant Client Light do Oracle.

Entao fiz os seguintes passos:

1 – Obtendo os pacotes:


Crie uma diretorio, onde ficara armazenado o codigo fonte da distribuição do TOra. O Ubuntu 10.04 usa o TOra 2.1.1.

mkdir -p /path/to/deb/source/
cd /path/to/deb/source/
apt-get source tora

Agora obtenha os pacotes do Oracle no site da Oracle.

  • oracle-instantclient11.2-basic-11.2.0.1.0-1.i386.rpm
  • oracle-instantclient11.2-devel-11.2.0.1.0-1.i386.rpm
  • oracle-instantclient11.2-sqlplus-11.2.0.1.0-1.i386.rpm

Obs: Atenção para o primeiro pacote! É o basic e nao o basiclite, como esta no tutorial do pythian

2 – Instalando as bibliotecas necessárias


É necessário instalar algumas bibliotecas de desenvolvimento:

sudo apt-get install libqt3-mt-dev libqt3-compat-headers libqscintilla-dev build-essential g++ gcc autoconf automake flex zlib1g-dev docbook-xsl debhelper alien libaio1 dpatch fakeroot xsltproc texi2html texinfo libqt3-mt-psql libqt3-mt-odbc config-package-dev cmake qt4-dev-tools

Convertendo os pacotes para .deb e instalando direto:

cd /path/to/oracle/rpms
sudo alien -i *386.rpm


3 – Configurando Variáveis de Ambiente


Faça isso no terminal:

export ORACLE_HOME="/usr/lib/oracle/11.2/client"
export LD_LIBRARY_PATH="${ORACLE_HOME}/lib"
export TNS_ADMIN="${ORACLE_HOME}"
export CMAKE_INCLUDE_PATH=/usr/include/oracle/11.2/client

Faça isso para que fique gravado no /etc/profile para caso voce reinicie a maquina nao perder as configurações:

sudo echo export ORACLE_HOME="/usr/lib/oracle/11.2/client" >> /etc/profile
sudo echo export LD_LIBRARY_PATH="${ORACLE_HOME}/lib" >> /etc/profile
sudo echo export TNS_ADMIN="${ORACLE_HOME}" >> /etc/profile


4 – Criando o pacote e Instalando o TOra


Mude para o diretório:

cd /path/to/tora/tora-2.1.1/

Execute o script para criar o pacote.


fakeroot debian/rules binary

Isto ira demorar um pouco dependendo da velocidade do seu sistema. Pronto agora é só instalar

dpkg -i ../tora_2.1.1-1_i386.deb

UPDATE 1 (16/08/2010):

Resolvendo problema de biblioteca “LD_LIBRARY_PATH”

Caso esteja tendo esse problema ao acessar o tora:

tora: error while loading shared libraries: libocci.so.11.1: cannot open shared object file: No such file or directory

As bibliotecas não estão sendo carregadas corretamente, então você terá que usar o ldconfig. Logo faça o seguinte:

1 – Vá para o diretório: /etc/ld.so.conf.d/

cd /etc/ld.so.conf.d/

2 – Crie um arquivo de configuração neste diretório ( exemplo libraries.conf ) e adicione  a seguinte linha, que se refere a pasta onde estão as bibliotecas:

/usr/lib/oracle/11.2/client/lib

3 – Atualize as configurações:

sudo ldconfig -v

Pronto! Agora ja é possivel acessar o TOra tanto do terminal quanto do gnome desktop!

UPDATE 2 (20/08/2010):

TOra nao reconhece o provedor de conexão do Oracle por causa de atualização de Ubuntu.

Caso voce tenha atualizado o kernel do Ubuntu e perdeu o suporte ao Oracle siga novamente os passos:”4- Criando o pacote e Instalando o TOra