preload

ago 26

Hi,

Depois que começamos a programar “de verdade” (corporativamente ou não… rsrs!), percebemos a necessidade de controlar “as versões” do software em questão. Não simplesmente editando e salvando seus ultimos “codes”. É ai que entra o CVS (Concurrent Versions System).

Imagine você terminar aquele projeto/software e no momento da entrega precisar modificar o código, implementar mais alguma função. Tranquilo! Mas depois, percebe que não era bem aquilo que você queria, era melhor deixar do jeito que estava… iii… Neste caso o CVS controla as versões editadas do seu projeto/software permitindo que você possa acessar os antigos códigos. Ótimo!

Outra situação é você desenvolver um software em conjunto com amigos da faculdade e seu “brother” adicionar alguns trechos de códigos “bugados” e ir passear… o que fazer? Ir no CVS e buscar as versões do código antes de seu “brother” ter feito a m*rda! ;)

O que veremos neste post?

- Instalar e configurar o CVS servidor.
- Alguns comando básicos do CVS cliente no próprio linux.

*** Instalando e configurando o CVS

Para este post usei o Debian Lenny. Let´s go…

~$
~$ sudo apt-get install cvs

Depois de instalado o CVS (neste caso ele instala o servidor e cliente), na versão em questão é a 1.12.13 ele cria um repositório padrão em /srv/cvs.

No nosso exemplo vamos apagar o repositório padrão e criar um novo em /home/cvs.

~$
~$ sudo rm -rf /srv

Agora vamos editar o arquivo de configuração principal do cvs: /etc/cvs-pserver.conf

~$
~$ sudo vi /etc/cvs-pserver.conf

CVS_PSERV_REPOS=”/home/cvs”
CVS_PSERV_LIMIT_MEM=hard
CVS_PSERV_LIMIT_DATA=hard
CVS_PSERV_LIMIT_CORE=0
CVS_PSERV_LIMIT_CPU=hard

Neste arquivo modifique a linha CVS_PSERV_REPOS com o diretório do seu repositório de projetos.

Você pode criar mais de um repositório, usando , (vírgula) entre os diretórios:
CVS_PSERV_REPOS=”/home/cvs,/home/meusprojetos”
Neste caso temos 2 repositórios! ;)

Depois de criado o repositório, vamos criar o diretório e efetuar as devidas permissões.

~$
~$ sudo mkdir /home/cvs
~$ sudo chmod -R 775 /home/cvs
~$ sudo chown root:src -R /home/cvs
~$ sudo chmod g+s /home/cvs

1. Criamos o diretório /home/cvs

2. Damos permissão 775 ao diretório do nosso repositório.

3. Setamos o dono root e grupo src para o diretório.

4. Usando o gid bit para o grupo src, assim, todo o usuário do sistema (/etc/passwd) que estiver no grupo src poderão escrever no diretório.

Pronto! Com estas configurações básicas já podemos executar nosso servidor CVS. Mas… o CVS é um serviço que não roda em standalone, assim, ele usa o inetd para executar o serviço. Vamos, então, adicionar as configs do CVS no inetd:

~$
~$ sudo vi /etc/inetd.conf

Adicione a linha abaixo:
cvspserver stream tcp nowait root /usr/sbin/tcpd /usr/sbin/cvs-pserver

~$ sudo /etc/init.d/openbsd-inetd start

Ok! O CVS já está executando via inetd. O CVS usa as portas 2401/tcp e 2401/udp, então – caso necessário -, libere estas portas no seu firewall.

Com o CVS funcionando, vamos criar o base de diretórios e arquivos do nosso repositório em /home/cvs.

~$
~$ cvs -d /home/cvs init

Assim, ele cria o diretório CVSROOT no nosso repositório, contendo as conf necessárias para o mesmo. Vamos ver alguns comandos básicos e como proceder em situações do dia a dia.

Adicionar permissão a um usuário para escrever no repositório:

~$
~$ sudo addgroup usuario src

Conectando remotamente via cvs (no linux/debian):

~$
~$ export CVSROOT=:pserver:usuario@ipdoservidorCVS:/home/cvs
~$ cvs login

Sim, parece estranho. Mas o cliente cvs no linux necessida de uma variável CVSROOT para conectar a um determinado host/servidor. Para simplificar o processo você pode criar a variável CVSROOT no .profile do seu usuário.

Importando um projeto e versionando:

~$
~$ cd /home/bleno/projetos/ListaEncadeada
~$ cvs import ListaEncadeada ProjetoListaEncadeada v1 start

Neste caso, importei o diretório ListaEncadeada usando o nome ProjetoListaEncadeada chamando de versão “v1″. Assim, o diretório local ListaEncadeada foi importado em /home/cvs/ProjetoListaEncadeada no servidor CVS.

O CVS cliente pedirá uma mansagem descritiva sobre seu “import”, você informa a descrição e sai com o um simples :x (by vi editor!).

Vamos supor que depois de 2 dias de trabalho árduo saio a versão “v2″ deste projeto. Para importar a nova versão, conectamos ao servidor CVS como descrito acima e importando a nova versão:

~$
~$ cvs import ListaEncadeada ProjetoListaEncadeada v2

Trabalhando com arquivos no CVS cliente no Linux!

Vamos supor que você está em uma outra máquina e queira um cópia do ProjetoListaEncadeada, simples: conecte-se ao servidor CVS como descrito acima e:

~$
~$ cd /home/outramaquina/projetos
~$ cvs checkout ProjetoListaEncadeada

Assim você tem uma cópia da ultima versão do ProjetoListaEncadeada. Depois de editar o projeto você deseja fazer o upload dos arquivos novos, então:

~$
~$ cvs update

O update faz com que o cvs marque os arquivos locais modificados para depois enviar para o servidor. Depois de marcados com o update:

~$
~$ cvs commit

Pronto, os novos arquivos modificados são enviados para o servidor! Lembre-se que todo o processo usando o CVS cliente deve-se está conectado o CVS servidor.

Suponto que há um novo arquivo “classeNos.java” criado no ProjetoListaEncadeada que você quer adicionar, fazemos:

~$
~$ cvs add classeNos.java

Ah, você lembrou que este novo arquivo não é mais necessário no ProjetoListaEncadeada, fazemos:

~$
~$ rm classeNos.java
~$ cvs remove classeNos.java
~$ cvs commit

Pronto! Desta forma quando alguem que faz parte do ProjetoListaEncadeada der um “checkout” as novas modificações serão replicadas para ele! Rulez!!!

Verificando logs

Conectado ao CVS server via CVS cliente no linux, você pode verificar os logs as versões de um determinado projeto:

~$
~$ cvs log | less

Ele vai mostar o log das ultimas modificações do projeto em questão. O less é para a amostragem ficar mais amigável =)

~$
~$ cvs annotate | less

Mostra as anotações, linha a linha, com detalhes sobre o usuário e data das modificações. Por exemplo, você quer saber quem modificou codificou em 26 de agosto na versão v2 do ProjetoListaEncadeada:

~$
~$ cvs annotade | grep v1 | grep “26-Aug-09″

Ai vai a sua criatividade para filtrar a pesquisa do log.

Para mais comandos do CVS cliente no linux:

~$
~$ cvs –help-commands

Realmente o CVS é show de bola. Atualmente existe o SVN que o Dr. Google utiliza no code.google.com, mas sinceramente, não me adaptei bem (rsrs!). Em breve um post sobre SVN! ;)

Marcadores:
ago 07

Hi,

LAMP: Linux, Apache, MySQL e PHP. Realmente um assunto batido na internet. Decidi fazer este artigo de uma forma simples, mas que deixe um LAMP funcional. Este artigo está baseado em uma Debian Lenny estável!

1. Instalando o Apache

~$
~$ sudo apt-cache search apache2
apache2 – Apache HTTP Server metapackage

Ok, temos o pacote, vamos a instalação:

~$
~$ sudo apt-get install apache2

Depois de instalado o apache está pronto para ser usado, use seu browser de preferência em http://127.0.0.1 e veja a mensagem de “It Works”.

2. Entendendo o básico da configuração do apache2

O apache2 fica instalado em /etc/apache2/. Neste diretório temos os seguintes arquivos e diretórios responsáveis pela configuração do apache2:

apache2.conf: Arquivo principal da configuração do apache2.
envvars: Arquivo resposável pelas variáveis do apache2 no sistema.
httpd.conf: Arquivo para suas configurações locais (pessoais).
ports.conf: Arquivo resposável pela configuração das portas do apache2.
conf.d: Diretório que contem os scripts iniciados com o apache2.
mods-available: Diretório contendo os módulos disponíveis.
mods-enabled: Diretório contendo os módulos usados no momento pelo apache2.
sites-available: Diretório com os scripts de configuração dos “sites” disponíveis.
sites-enabled: Diretório com os “sites” ativos no apache2.

Depois da versão 2.x , o apache vem com o modelo de organização dos arquivos de configuração e “sites” mais eficiente. Com a ídeia de *-available e *-enabled podemos controlar melhor uma maior quantidade de arquivos.

Por exemplo, no diretório mods-available temos todos os módulos disponíveis para serem usados no apache, ou seja, este diretório não é lido (reconhecido pelo apache) em sua inicialização. O diretório mods-enabled sim. Neste diretório – comumente – temos links simbólicos para os módulos que desejamos usar no apache2.

Vamos exemplificar, existe em mods-available um módulo disponível chamado ldap.load (na verdade este é um simples script para o apache2) que habilita o ldap. Para ativar este módulo você só precisa criar um link simbólico no diretório mods-enabled, vejamos:

~$
~$ cd /etc/apache2/
~$ ls mods-available | grep ldap
ldap.load
~$ cd mods-enabled
~$ sudo ln -s ../mods-available/ldap.load ldap.load

Simples, desta forma criamos um link simbólico para o módulo disponível “ldap”.

A configuração de “sites” para o apache2 também segue a mesma linha de raciocínio: *-available para “sites” disponíveis e *-enabled para “sites” que estão em uso!

Vamos a um sites exemplo, quero criar um “site” em nosso servidor com o caminho http://127.0.0.1/meuprojetos/ onde os arquivos de “meusprojetos” estarão em /home/bleno/projetos/meusprojetos/ vejamos:

~$
~$ cd /etc/apache2/sites-available/
~$ sudo cat > meusprojetos
Alias /meusprojetos/ “/home/bleno/projetos/meusprojetos/”
<Directory “/home/bleno/projetos/meusprojetos/”>
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
[Ctrl+C]
~$ cd ../sites-enabled/
~$ sudo ln -s ../sites-available/meusprojetos meusprojetos

Pronto, o que fizemos foi criar o arquivo de configuração do “site” meusprojetos e criar (ativar) o arquivo de configuração para o apache2 (em sites-enabled).

Os arquivos de configuração de sites podem ser bem mais complexos que este simples exemplo acima, onde cabe um único post sobre os mesmos. Vas vamos entender este arquivo de configuração simples:

Alias /meusprojetos/ “/home/bleno/projetos/meusprojetos/”

Nesta primeira linda definimos o alias (apelido) do site para o apache2 e o diretório onde está o “site”. Simples.

<Directory “/home/bleno/projetos/meusprojetos/”>

Aqui definimos a tag <Directory …> onde vamos passar as configurações do apache2 para o diretório em questão.

Options Indexes MultiViews FollowSymLinks

Aqui passamos as opções (Options) gerais do diretório onde:

Indexes: Esta diretiva informa ao apache2 que se não encontrar nenhuma arquivo conhecido (html, htm, php e etc… definido em “DirectoryIndex” no apache2.conf), o apache2 cria uma lista dos arquivos existente no diretório atual.
MultiViews: Habilita negociação de conteúdo. Permitindo o envio de um arquivo no idioma do navegador do cliente.
FollowSymLinks: O apache2 vai seguir os links simbólicos para este diretório.

AllowOverride None

O apache2 não vai procurar o arquivo .htaccess para este “site” (diretório).

Order allow,deny
Allow from all

Libera acesso a qualquer máquina para este “site” (diretório).

Apache previamente configurado, é só reiniciar o serviço para ativar as novas configurações. Só para lembrar:

~$
~$ sudo /etc/init.d/apache2 restart

Obs: É possível que o apache retorne um erro como  o abaixo ao reiniciar o serviço:

Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1 for ServerName

Como o erro informa, não existe um “nome de dominio” para o servidor, então, ele está assumindo um “ServerName” 127.0.1.1. Para resolver isso, edite seu apache2.conf e adicione o seu “ServerName” (nome do servidor):

~$
~$ vi /etc/apache2/apache2.conf
Adicione a seguinte linha ao seu arquivo de configuração:

ServerName www.nomedoservidor.bla.bla…

Pronto, apache instalado e com uma configuração básica, vamos ao php5. Let´s go…

3. Instalação do php5 para o apache2

Aqui o processo é simples, praticamente automático para a instalação, precisaremos dos seguintes pacotes:

php5
libapache2-mod-php5

Então, instale-os:

~$
~$ sudo apt-get install php5 libapache2-mod-php5

Depois de instalado o php5 se aloja em /etc/php5/ onde temos 2 diretórios: apache2 e conf.d

Para testar o phh5 com o apache2, iremos criar um arquivo em /var/www/ (que é o diretório “base” do apache2… lembra do “It Works”, ele está aqui… é o diretório raiz do apache2) com o nome de teste.php para testar o php5:

~$
~$ cd /var/www/
~$ cat > teste.php
<?php
phpinfo();
?>
[Ctrl+C]

Pronto, criamos o arquivo. Para testar, com seu browser preferido acesse http://127.0.0.1/teste.php, provavelmente vai abrir as configurações atuais do php5.

4. Instalando e configurando o MySQL

Para instalar o MySQL precisaremos dos seguintes pacotes:

mysql-server
mysql-client
php5-mysql

Instalando:

~$
~$ sudo apt-get install mysql-server mysql-client php5-mysql

Depois de instalado o mysql fica alojado em /etc/mysql/ onde temos o arquivo my.cnf que é o arquivo de configuração padrão do banco de dados.

Praticamente a instalação do Apache, PHP5 e MySQL foi abordada até aqui, veremos só algumas dicas:

*** Criando usuário “root” e password para o mysql e acesso externo (remoto):

Acesse seu mysql:

~$
~$ sudo mysql -u root

Crie sua senha e dê permissão para todos os hosts:

mysql> GRANT ALL ON *.* TO ‘root’@'%’ IDENTIFIED BY ’suasenha’;
mysql> flush privileges;
mysql> exit

O % informa que qualquer ip (host) pode se conectar via usuário root.

Agora edite seu arquivo my.cnf:

~$
~$ cd /etc/mysql/
~$ sudo vi my.cnf

Edite a configuração da linha bind-address para:

bind-address = 0.0.0.0

Assim o mysql vai receber conexões de todos os ips e todas as interfaces de rede (caso queira, você pode restringir a que ip o mysql vai receber conexões).

Comente a linha de configuração skip-external-locking com um # na frente do mesmo, para ele “pular o bloqueiro externo”.

Pronto, reinicie os serviçõs, o mysql já estará recendo conexões remotas!

*** Instalando o PhpMyAdmin

O PhpMyAdmin é um ótimo gerenciador do banco de dados MySQL via web feito em php, assim você pode administrar o MySQL de forma simples e via browser. Para instalar, simples:

~$
~$ sudo apt-get install phpmyadmin

Ele fica alojado em /etc/phpmyadmin/ onde contém os seus arquivos de configuração.

Lembre-se de reiniciar o apache2 para efetivar as configurações dos novos pacotes instalados. Teste seu PhpMyAdmin em http://127.0.0.1/phpmyadmin/

Espero que tenha gostado, o Apache, Php e MySQL são assuntos muito extensos, seus arquivos de configuração permitem várias combinações. Existe muito material bom na internet. Pesquise mais sobre os mesmos.

;)

Marcadores:
jul 25

Hi,

Uma dica simples, as vezes temos alguns serviços executando no boot do debian que não achamos necessário, há 3 meios simples de desativá-los:

Modo 1 (não aconselhável):

~$
~$ cd /etc/init.d/
~$ chmod -x serviço
Desta forma você retira a permissão de execução do script no boot, mas desta forma pode gerar efeitos colaterais.

Modo 2 (usando o update-rc.d):

~$
~$ sudo update-rc.d -f serviço remove
Usando o comando update-rc.d consegue-se desativar o serviço de forma segura.

Modo 3 (usando o rcconf):

~$
~$ sudo apt-get install rcconf
~$ sudo rcconf
Este aplicativo – amigável – desativa o serviço de forma segura, recomendo ;)

Espero ter ajudado! ;)

Marcadores:
jul 23

Hi,

Estes dias virtualizei um server linux, distro debian. Depois da configuração básica “ziquei” do ipv6.

O ipv6 estava ativo e ficaria ativo sem uso. Pessoalmente não gosto de nada habilitado (serviço, config…) que o servidor não necessite para executar suas funcionalidades.

Solução: criar um arquivo no modprobe.d, dar permissão de execução e desabilitar os módulos sem uso (ipv6) via alias, vejamos:

~$
~$ cd /etc/modprobe.d/
~$ sudo touch mod_inativos
~$ sudo chmod +x mod_inativos

Agora editamos o arquivo e adicionamos os alias necessários para desabilitar o ipv6:

~$
~$ sudo vi mod_inativos

Adicione as linhas abaixo:

alias net-pf-10 off
alias ipv6 off

Pronto, reinicie o sistema ;)

Marcadores:
mar 01

Veja a análise do recém lançado Debian 5.0 Lenny feito pela Linux Magazine: http://linuxmagazine.uol.com.br/materia/analise_do_debian_50_lenny

;)

Marcadores:

2006 - 2009 (c) bleno.org
100% Compatível com Mozilla Firefox