domingo, 31 de agosto de 2014

Linux - Ambiente de Desenvolvimento - Parte 0

Essa semana ao invés de um passo para frente no nosso ambiente daremos um para trás, o motivo é muito simples "acertar as configurações básicas" senão depois de instalar o Nexus ou o Jenkins poderemos ter vários problemas.

As configurações do ambiente tanto para o servidor quanto para os clientes podem variar muito quanto ao tipo de projeto a ser executado. Porém, iremos trabalhar com um ambiente padrão Java então alguns softwares são necessários que estejam prioritariamente instalados.

Instalação do Java Oracle versão 7.0

É parte essencial do ambiente a instalação correta do Java. Recomenda-se a versão Oracle JDK 1.7, não é recomendável usar a versão OpenJDK por esta apresentar problemas de incompatibilidade com o Nexus.
1. Verificar se já existe uma instalação do Java:
$ java -version
2. Normalmente no Ubuntu se encontra a versão OpenJDK, remover essa versão:
$ sudo apt-get remove --purge openjdk-*
3. Adicionar o repositório necessário para a instalação do Oracle Java:
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo mkdir -p /usr/lib/mozilla/plugins
4. Proceder a instalação do Java 7:
$ sudo apt-get install oracle-java7-installer
5. Testar novamente a instalação:
# java -version

Variável de Ambiente JAVA_HOME

Alguns aplicativos como o Maven necessitam da localização da variável de ambiente JAVA_HOME, então vamos defini-la.
1. Acessar como usuário root:
$ sudo su
2. Editar o script .bashrc no GEdit:
# gedit .bashrc
3. Adicionar as seguintes linhas no final do arquivo:
JAVA_HOME=/usr/lib/jvm/java-7-oracle
export JAVA_HOME
PATH=$PATH:$JAVA_HOME
export PATH
4. Sair do usuário root e do terminal e acessá-lo novamente. Verificar o valor da variável JAVA_HOME:
$ echo $JAVA_HOME

Instalação do Maven 3


Outro aplicativo importante é o Apache Maven que é responsável pela geração dos projetos e disponibilização das bibliotecas.
1. Como todos os comandos devem ser realizados pelo superusuário trocar o usuário corrente:
$ sudo su
2. Instalar o programa gdebi que permite instalar arquivos .deb no Ubuntu:
# apt-get install gdebi
3. Verificar e baixar do seguinte endereço o arquivo .deb com a versão corrente do Maven 3:
http://ppa.launchpad.net/natecarlson/maven3/ubuntu/pool/main/m/maven3
4. Instalar o Maven:
# gdebi maven3_[versão]~ppa1_all.deb
5. Verificar a instalação do Maven:
# mvn3 -version
6. Testar a instalação do Maven:
# rm maven3_[versão]~ppa1_all.deb
7. Porém, por padrão usamos o comando mvn (e muitos programas também, incluindo o Jenkis), então criar um “link simbólico” desse comando, isso é realizado da seguinte forma:
# cd /usr/bin
# ln -s ../share/maven3/bin/mvn ./mvn
8. Retorne ao seu usuário padrão:
# exit
9. Verificar a versão do Maven:
$ mvn -version

Instalação do Apache TomCat nos clientes

Outro aplicativo que deve ser instalado, apenas para os clientes, é o Apache TomCat essencial para projetos Web.
1. Criar uma pasta (por exemplo Aplicativos) na raiz do usuário /home para melhor organizar os produtos:
$ mkdir Aplicativos
2. Baixar a versão corrente do site oficial do TomCat no endereço:
http://tomcat.apache.org/download-80.cgi
3. Selecionar a versão Core – tar.gz para baixar e colocá-la nesta pasta criada.
4. Descompactar com o seguinte comando:
$ tar -xvzf apache-tomcat-[versão].tar.gz
5. Remover o arquivo baixado:
$ rm apache-tomcat-[versão].tar.gz

Configurar o TomCat e o Maven no Eclipse

A parte final dessa instalação é a configuração do TomCat para o Eclipse, lembrar que deve ser a versão "Eclipse for Java EE Developers".

Com o Eclipse aberto selecionar a perspectiva “Java EE” no canto direito. Na janela de baixo aparece a palheta “Servers” (se não aparecer no menu principal selecionar “Window | Show View | Servers”. Pressionar o botão direito do mouse e selecionar “New | Server”. Selecionar “Apache | Tomcat v[versão] Server” e pressionar o botão Next>. Pressionar o botão Browse... e localizar a pasta do TomCat em “Aplicativos | apache-tomcat-[versão]” e pressionar o botão Finish.

Selecionar agora o novo servidor criado e pressionar o botão Start the Server (a seta verde) para iniciar. E assim que mostrar a mensagem na console “Server startup” abrir o navegador e digitar o endereço: http://localhost:8080/.

Pode acontecer de ao abrir o site veja uma página com um Erro 404, não se preocupe pois o TomCat funciona sem problemas, mas se deseja acessar o site inicial do TomCat, parar o servidor e proceder as seguintes configurações:
  1. Pressionar com o botão direito do mouse sobre o servidor criado e acessar "Properties", na opção "General", se o valor da propriedade Location estiver algo como "[workspace metadata]" pressionar o botão Switch Location. Pressionar os botões Apply e OK.
  2. Pressionar um duplo clique no servidor e no grupo "Server Locations" verificar se está selecionada a opção "Use TomCat instalation"
Reiniciar o servidor e a tela principal do TomCat é mostrada sem problemas. Uma opção interessante desta tela é a opção "Manager App" na qual podemos controlar os sites ativos, porém para usá-la e necessário habilitar um usuário, editar o arquivo tomcat-users.xml da pasta ~/Aplicativos/apache-tomcat-[versão]/conf, e completar a seguinte tag:
<tomcat-users>
  <role rolename="manager-gui" />
  <user username="tomcat" password="tomcat" roles="manager-gui" />
</tomcat-users>
Outra configuração importante é configurar o plugin do Maven (já por padrão instalado no Eclipse), acessar “Window | Preferences”, localizar “Maven | Installations”. Pressionar o botão Add... e localizar o seguinte diretório /usr/share/maven3 e pressionar o botão Finish. Deixar selecionado esta versão.

Obrigado e até a próxima
Fernando Anselmo

sábado, 23 de agosto de 2014

Linux - Ambiente de Desenvolvimento - Parte 1

A partir desta postagem mostrarei como criar um ambiente de desenvolvimento completo para o Ubuntu 14.04. Muitos desenvolvedores acreditam que desenvolver aplicativos se restringe apenas a instalar uma IDE (normalmente o Eclipse), porém vejamos alguns problemas que pode ocorrer:
  • Como controlar as versões? Gostaria de obter parte de código que criei para a versão X porém já sobrepus com a versão Y.
  • Como controlar as bibliotecas? Baixamos diversas APIs e muitas delas podem dar incompatibilidade, ou então simplesmente baixar novamente uma mesma biblioteca para diferentes projetos, ou seja, várias cópias de uma mesma biblioteca em partes diferentes do sistema.
  • Aonde está determinada Classe? Peguei um artigo que falava de uma classe X porém qual biblioteca (e suas dependências) devo baixar? Ou será que já tenho?
  • Estou com problemas na integralização pois muitas vezes trabalhamos por partes e criamos os módulos separadamente e temos que ficar compilando tudo (e testando) toda vez que terminamos uma nova versão para saber se está tudo certo.
E isso para citar apenas alguns problemas que podem ocorrer. Resolvi através de várias pesquisas eliminar parte (ou todos) esses problemas que podem acontecer na criação de um projeto por parte do desenvolvedor e chamei isso de Ambiente de Desenvolvimento.

AOS MEUS CRÍTICOS. Antes de mais nada quero dizer que não, isso não é uma ideia original, não é minha e creio que muita gente já faz dessa forma. Resolvi simplesmente expor todo esse processo de forma que qualquer desenvolvedor possa ter acesso a esse valioso conjunto de ferramentas sem ter que ficar com um louco para tentar descobrir a forma de consegui-lo.

A seguinte figura vai ilustrar melhor:


Tudo parte da criação dos fontes por parte do desenvolvedor através do Eclipse, ao ser realizado um commit (não existe uma tradução para essa palavra com o que representa na área de informática e me recuso a usar "comitar") os fontes irão para o repositório que é controlado por um SCV (GitHub ou Subversion). A versão atual é disponibilizada para um SIC (Jenkins) que possui duas ações primordiais: conversar com o GR (Sonatype Nexus) para atualizar ou verificar a necessidade de alguma biblioteca e conversar com o GC (Maven) para a criação de um nova versão do aplicativo.

Não pretendo criar uma única postagem mostrando como instalar todo esse ambiente de uma única vez no Ubuntu e como diria Jack "vamos por partes". Aviso que meu ambiente está configurado para a linguagem Java, porém com as devidas adaptações pode ser expandido para qualquer outra.

Vou partir do pressuposto que temos duas máquinas (uma será o Servidor e a outra o Cliente) já ligadas em rede e com o sistema Ubuntu 14.04 ou superior. E a partir deste ponto iremos baixar, instalar e configurar todos os aplicativos necessários tanto para o Servidor (divida os aplicativos para vários servidores se desejar) como para o Cliente (replique-o para quantos forem necessários).

Parte Servidor - Sistema de Controle de Versão


Tudo aqui será instalado a partir de comandos no terminal (desenvolvedores não podem ter medo de usar o terminal no Linux), não se preocupe pois faremos tudo passo a passo. Peço apenas um pouco de atenção pois alguns comandos precisam da permissão do superusuário (ou seja, o Deus do sistema) e existe a remota possibilidade de corromper qualquer coisa (tenha suas cópias de segurança sempre a mão).

Iremos criar um ambiente local e sem interferências externas e utilizaremos o Subversion, se deseja usar o GitHub recomendo uma visita neste site. É muito importante controlar as versões de publicações de um sistema, podemos consultar o histórico ou retornar uma versão antiga em caso de qualquer problema. Para usarmos o SCV em toda a rede é recomendável instalar um servidor Web Apache que serve como uma "janela Web". Trabalharemos aqui com aplicações Java portanto os nomes dos repositórios devem ser simples (sem acentos ou espaços).

Sigamos os passos para a instalação do SVN e configuração do repositório, abra uma janela de terminal (Ctrl+Alt+T) e digite os seguintes comandos:

1. Instalar o Apache2 para acesso via servidor Web:
$ sudo apt-get install apache2
2. Instalar o Subversion e o módulo de acesso ao Apache:
$ sudo apt-get install subversion libapache2-svn
3. Criar uma pasta de trabalho onde estarão localizados os fontes:
$ mkdir [repositorio]
4. Criar o SVN nesta pasta de trabalho:
$ sudo svnadmin create [repositorio]
5. Fornecer as permissões necessárias de acesso Web para esta pasta:
$ sudo chown -R www-data:www-data [repositorio]
$ sudo chmod -R 770 [repositorio]/
6. Se desejar importar arquivos para a pasta de trabalho (não faça):
$ sudo svn import [origem] file:///[repositorio]
7. Habilitar o módulo do SVN para o Apache:
$ sudo a2enmod dav_svn
8. Editar o arquivo de configuração do módulo:
$ sudo gedit /etc/apache2/mods-available/dav_svn.conf
9. E deixá-lo com a seguinte configuração:
<location /svn/[repositorio] >
  DAV svn
  SVNPath [repositorio]
</location>
10. Reiniciar o serviço do Apache2
$ sudo service apache2 restart
11. Testar o endereço no navegador
http://localhost/svn/[repositorio]/
Pronto pode digitar o comando exit no terminal e voltar a respirar pois se tudo está correto o Subversion foi instalado sem problemas.

Parte Cliente - Configuração no Eclipse


No cliente é necessário instalar o plugin do Subversion no Eclipse. A instalação do Eclipse consiste em realizar o download do aplicativo no site e descompactar em qualquer local (de preferência abaixo da sua pasta \home). Como referência, utilizaremos a versão Luna tipo "Eclipse for Java EE Developers".

No menu principal do Eclipse acessar "Help | Install New Software". Na janela mostrada pressionar o botão Add... e os seguintes dados:

Name: Subversion
Location: http://subclipse.tigris.org/update_1.10.x

Pressionar o botão OK e será mostrada duas opções "Subclipse" e "SVNKit", marcar ambas e pressionar o botão Next>. Na próxima janela é mostrado o que será instalado, pressionar o botão Next>. Se concorda com os termos da licença marque "I accept the terms of the license agreements" e pressionar o botão Finish. Ao término reiniciar o Eclipse para aplicar todas as mudanças.

Novamente com o Eclipse aberto será solicitado sua participação nas pesquisas do Subversion, isso é uma contribuição muito valiosa e é o mínimo para ajudar o projeto a melhorar, deixar marcado e pressionar o botão OK.

Neste ponto pode ocorrer um erro e acusar a falta da biblioteca JavaHL, não se desespere, abrir uma janela de terminal e digitar os seguintes comandos:

1. Tentar localizar se a biblioteca existe em algum lugar do sistema:
$ sudo find / -name libsvnjava
2. Se não existir então instalar:
$ sudo apt-get install libsvn-java
3. Após a instalação, localize-a (com o comando em 1, vamos supor que a resposta seja: /usr/lib/x86_64-linux-gnu/jni/libsvnjavahl-1.so). Anotar o caminho do diretório, na pasta que foi descompactado o Eclipse existe um arquivo chamado eclipse.ini, adicionar ao final deste a seguinte linha:
-Djava.library.path=/usr/lib/x86_64-linux-gnu/jni
Reiniciar o Eclipse e no menu principal selecionar "New | Other...", selecionar a opção "SVN | Checkout Projects from SVN", pressionar o botão Next>. Selecionar "Use existing repository location:" e marcar o endereço "http://[servidor]/svn/[repositorio]". Selecionar a pasta (virtual) para fazer o checkout do projeto e pressionar o botão Finish. Confimar com Yes.

Como teste vamos criar um projeto tradicional, por exemplo, selecionar "Java Project" e pressionar o botão Next>. Digitar o nome do projeto e pressionar o botão Finish. E confimar com OK.

Observar que no projeto criado aparece um * em preto, isso significa que existem dados que não foram versionados no servidor, clique com o botão direito sobre o projeto e selecione Team. Aparece as opções para a realização de um trabalho versionado. Bons códigos.

Obrigado e até a próxima
Fernando Anselmo

sábado, 16 de agosto de 2014

Linux - E assim nasce o Tux...

Acredito que todo o blog que fala a respeito do Linux conta da sua mascote o pinguim com o nome de Tux, ou seja, essa história já foi contada por muitos, porém apenas para deixar registrado nessa minha trilha por esse sistema vamos ouvi-la mais uma vez...

O pinguim que virou um logotipo do Sistema Operacional Linux começou em 1996 onde muitos integrantes da lista chamada "Linux-Kernel" estavam discutindo sobre a criação de um logotipo ou de um mascote que representasse o Linux. Muitas das sugestões eram simples paródias ao logotipo dos sistemas operacionais concorrentes, monstros ou animais selvagens como tubarões e águias. Linus Torvalds acabou entrando nesse debate ao afirmar em uma mensagem que gostava muito de pinguins e só isso foi o suficiente para dar um fim à discussão:

Re: Linux Logo
Linus Torvalds (torvalds@cs.helsinki.fi)
Sun, 12 May 1996 09:39:19 +0300 (EET DST)
.
Umm.. You don't have any gap to fill in.
"Linus likes penguins". That's it. There was even a headline on it in some Linux Journal some time ago (I was bitten by a Killer Penguin in Australia - I'm not kidding). Penguins are fun.

Histórias a parte segundo Jeff Ayers, Linus Torvalds tem uma "fixação por aves marinhas gordas e desprovidas da capacidade de voo!" e o Torvalds reivindica que contraiu uma "pinguinite" após ter sido gentilmente mordiscado por um pinguim: "A pinguinite faz com que passemos as noites acordados só a pensar em pinguins e sentir um grande amor por eles." Essa é uma história meio verdadeira, obviamente a doença de Torvalds é uma piada, porém ele foi mesmo mordido por um pinguim numa visita a Canberra.

Depois disso, várias tentativas foram feitas através de uma espécie de concurso para que a imagem de um pinguim servisse aos propósitos do Linux, até que alguém sugeriu a figura de um "pinguim sustentando o mundo". Novamente em resposta Torvalds declarou que achava interessante que o pinguim tivesse uma imagem simples, tal como um pinguim "gordinho" e com expressão de satisfeito, como se tivesse acabado de comer uma porção de peixes, ele também não achava atraente a ideia de algo agressivo, mas de um pinguim bem simpático, do tipo em que as crianças perguntam: "mamãe, posso ter um desses também?", frisou que agindo dessa forma, as pessoas poderiam começar a criar várias modificações desse pinguim.


O desenho oficial do mascote do Linux foi criado por Larry Ewing em 1996, é um pinguim gorducho que tem um ar satisfeito e saciado. Ele o havia criado usando o programas GIMP versão 0.54.

O Nome Tux

Já o nome Tux Essa é uma questão que ainda gera controvérsias, porém a versão aceitável é a de que o nome veio de "tuxedo", palavra em inglês para o tipo de roupa que no Brasil é conhecido como "smoking" ou "fraque". Isso porque parece que os pinguinsenstão sempre usando esse tipo de vestimenta. No entanto, há quem afirme que o nome também é usado como referência ao nome de Linus Torvalds com Unix: Torvalds UniX.

O que se sabe é que Tux tornou-se num ícone para a comunidade Linux e Open Source tornando-se inclusive muito mais famoso que o Gnu, um pacífico e tímido gnu que representa o Projeto GNU. E pessoalmente essa é a minha versão preferida do Tux:

Obrigado e até a próxima
Fernando Anselmo




sábado, 9 de agosto de 2014

Aprendizado - Imagens valem mais que palavras

Pensando naquele antigo provérbio que imagens valem mais que palavras, resolvi produzir uma série de vídeos aulas para ajudar os iniciantes, no meu canal do YouTube já podem ser encontradas as seguintes:


Gimp Aula 01 - Papel de Parede do Anjo e Minions

Gimp Aula 02 - Aplique o efeito Broken Glass

Gimp Aula 03 - Crie seus Tux Personalizados

Java com BlueJ Aula 02 - Como obter informações

Passeio no Ubuntu 01 - Conhecendo esse sistema operacional

Nessas vídeo aulas prezo apenas por uma única característica: NÃO EDIÇÃO (basta acompanhar a hora do relógio do SO que aparece no canto superior direito). Sempre pretendo gravá-las de uma única vez, sem interrupções, como se realmente lhe estivesse ministrando uma aula. Então traga sua pipoca e seja muito bem vindo.

Obrigado e até a próxima
Fernando Anselmo

domingo, 3 de agosto de 2014

Linux - Qual é a sua família?

Para entrar no mundo Linux primeiro é necessário escolher uma família, a minha é a Debian, mas quais são as outras disponíveis? E o que significa cada uma delas? Com a ajuda do material da Linux Foundation vou tentar explicar e ajudá-lo a entender como é esse mundo.


De pronto observamos que todas as distros do Linux vem de um Kernel único, e isso é muito bom pois o que muda é apenas a forma como o usuário final enxerga sua máquina e pode configurá-la ao seu jeito.

Família Debian

Debian serve de base para várias outras distribuições, incluindo Ubuntu, que serve de base para Linux Mint e outros (Edubuntu por exemplo). É comumente utilizada tanto em servidores e desktops. Debian é um projeto de código aberto puro e se concentra em um aspecto fundamental, estabilidade. Também fornece o maior e mais completo repositório de softwares para seus usuários. Esta família usa o gerenciador de pacotes apt-get baseado em DPKG para instalar, atualizar e remover pacotes no sistema.

Família Fedora

Fedora forma a base para Red Hat Enterprise Linux (RHEL), CentOS, Scientific Linux e Oracle Linux. Essa família contém significativamente mais software do que a versão empresarial da Red Hat. Uma razão para isso é que uma comunidade diversificada está envolvida na construção do Fedora; e não apenas uma empresa. Normalmente o CentOS é usado para atividades como demonstrações e laboratórios, pois está disponível sem nenhum custo para o usuário final e possui um ciclo de lançamento mais longo do que o Fedora (que lança uma nova versão a cada seis meses ou mais), sendo bem mais estável. Já o RHEL é a distribuição mais popular em ambientes corporativos. Esta família usa o gerenciador de pacotes yum baseado em RPM para instalar, atualizar e remover pacotes no sistema

Família SUSE

A relação entre o SUSE, o SUSE Linux Enterprise Server (SLES), e OpenSUSE é semelhante à descrita entre Fedora, Red Hat Enterprise Linux e CentOS. OpenSUSE é a distribuição de referência para esta famíliapara os usuários finais, sem nenhum custo. Os dois produtos são extremamente semelhantes, e qualquer material deste pode normalmente ser aplicada ao SLES sem nenhum problema. Esta família usa o gerenciador de pacotes zypper baseado em RPM para instalar, atualizar e remover pacotes no sistema. Também inclui o aplicativo YaST (outra ferramenta do Sistema) para fins de administração.

Como minha distro é a Ubuntu (Atenção: Ubuntu é uma marca registrada da Canonical Ltd.) vamos a mais alguns detalhes sobre ela, esta distribuição tem como objetivo proporcionar uma boa experiência entre a estabilidade a longo prazo e a facilidade de uso. Recebe a maior parte de seus pacotes da parte estável do Debian, mas também tem acesso a um repositório de software muito grande. Usa a interface gráfica Unity, é baseada no GNOME e difere um pouco visualmente a partir da interface no padrão Debian, bem como outras distribuições.

Obrigado e até a próxima
Fernando Anselmo