Criando um super computador com Raspberry PI

Tava demorando….

O pessoal da Universidade Southampton (Inglaterra) disponibilizou um tutorial (passo-a-passo) ensinando a criar um supercomputador com o diminuto Raspberry PI.

O tutorial pode ser conferido no link pi supercomputer southampton.

Fontes:

BR-Linux

University of Southampton

Melhorias no controle de SPAM & VIRUS no Zimbra

Integradando SPF, Razor & Pyzor ao SpamAssassin do Zimbra

Instalando spf query

SPF (Sender Policy Framework) é um sistema que tenta prevenir o envio de mensagens forjadas, faz isto através de configurações em seu DNS, quando um e-mail for enviado, o servidor checará as entradas TXT/SPF no seu servidor de DNS, e através dela saberá qual servidor pode entregar mensagens com origem em seu domínio, caso alguém esteja enviando mensagens @seudominio sem ser os servidores citados no registro TXT/SPF o servidor MTA pode ser configurado para recusá-la. É uma maneira bem eficiente de evitar problemas com seu dominio.

Instale a biblioteca para checagem spf

#Debian like

apt-get install libmail-spf-query-perl 

#RedHat like

yum install perl-Mail-SPF perl-Mail-SPF-Query

Instalando o razor2

O Razor2 é um sistema colaborativo, distribuido de filtro para deteccao e controle de spam.

Instale o razor2

#Debian like

apt-get install razor

#RedHat like

yum install perl-Razor-Agent razor-agents

Crie o diretorio do razor

mkdir /opt/zimbra/amavisd/.razor; chown -Rf zimbra:zimbra /opt/zimbra/amavisd/.razor

Agora torne-se zimbra (su zimbra) e crie a conta no razor

razor-admin -home=/opt/zimbra/amavisd/.razor -create
razor-admin -home=/opt/zimbra/amavisd/.razor -discover
razor-admin -home=/opt/zimbra/amavisd/.razor -register

Agora edite o arquivo /opt/zimbra/conf/spamassassin/v310.pre e descomente a linha referente ao razor

loadplugin Mail::SpamAssassin::Plugin::Razor2

Instalando o pyzor

O pyzor é uma rede de sistemas distríbuidos para controle de spam, este utiliza digest de mensagens para fazer análise e identificar o SPAM.

#Debina like

apt-get install pyzor

#RedHat like

wget -q -O – http://www.atomicorp.com/installers/atomic.sh | sh

yum install pyzor

Crie o diretorio do pyzor

mkdir /opt/zimbra/amavisd/.pyzor; chown zimbra:zimbra /opt/zimbra/amavisd/.pyzor

Agora como usuario zimbra (su zimbra)

zimbra@zcs:~/amavisd$ pyzor --homedir /opt/zimbra/amavisd/.pyzor discover
downloading servers from http://pyzor.sourceforge.net/cgi-bin/inform-servers-0-3-x
Traceback (most recent call last):
  File "/usr/bin/pyzor", line 8, in <module>
    pyzor.client.run()
  File "/var/lib/python-support/python2.5/pyzor/client.py", line 1005, in run
    ExecCall().run()
  File "/var/lib/python-support/python2.5/pyzor/client.py", line 184, in run
    self.servers  = self.get_servers(servers_fn)
  File "/var/lib/python-support/python2.5/pyzor/client.py", line 411, in get_servers
    servers.read(open(servers_fn))
  File "/var/lib/python-support/python2.5/pyzor/client.py", line 117, in read
    self.append(pyzor.Address.from_str(line))
  File "/var/lib/python-support/python2.5/pyzor/__init__.py", line 458, in from_str
    fields[1] = int(fields[1])
IndexError: list index out of range

Esse erro é normal, o pyzor tenta baixar o arquivo servers atualizado em http://pyzor.sourceforge.net/cgi-bin/inform-servers-0-3-x porém ele o arquivo não está disponível e retorna o erro.

Para resolver este problema, coloque a linha abaixo no arquivo servers dentro do diretório /opt/zimbra/amavisd/.pyzor, pois ele vai funcionar.

zimbra@zcs:/opt/zimbra$ echo "82.94.255.100:24441" > /opt/zimbra/amavisd/.pyzor/servers

Agora vamos fazer um teste para ver se nosso pyzor consegue se conectar no servidor.

zimbra@zcs:/opt/zimbra/amavisd/.pyzor$ pyzor --homedir /opt/zimbra/amavisd/.pyzor ping
82.94.255.100:24441     (200, 'OK')

Ajustando o spamassassin para trabalhar com razor2 e pyzor

Edite o arquivo /opt/zimbra/conf/spamassassin/local.cf

ok_languages en es
ok_locales en es
trusted_networks 127. 10.70. 192.168.
use_bayes 1
skip_rbl_checks 0
use_razor2 1
dns_available yes 

## Optional Score Increases
## Choose your preferred values...
score SPF_FAIL 10.000
score SPF_HELO_FAIL 10.000
score RAZOR2_CHECK 2.500
score PYZOR_CHECK 2.500
score BAYES_99 4.300
score BAYES_90 3.500
score BAYES_80 3.000
bayes_ignore_header Received: from mail3.example.com
bayes_ignore_header Received: from localhost
bayes_ignore_header Received: from mail1.example.com
bayes_ignore_header Received: from mail2.example.com

Ajustando configurações do amavisd-new

Edite o arquivo /opt/zimbra/conf/amavisd.conf

$sa_tag_level_deflt  = -10.0;  # add spam info headers if at, or above that level
$sa_tag2_level_deflt = 6.6; # add 'spam detected' headers at that level
$sa_kill_level_deflt = 15; # triggers spam evasive actions
$sa_dsn_cutoff_level = 15;    # spam level beyond which a DSN is not sent
$sa_quarantine_cutoff_level = 15;  # spam level beyond which quarantine is off

$sa_mail_body_size_limit = 512*1024; # don't waste time on SA if mail is larger
$sa_local_tests_only = 0;    # only tests which do not require internet access?

Integrando postgrey ao zimbra

O postgrey é uma implementação do conceito “greylist”. Muito eficiente no combate ao SPAM a greylist consiste em uma fila especial para entrega de mensagens, ele funciona da seguinte forma, quando um MTA tentar entregar uma mensagem para o seu servidor MTA o postgrey recusar a mensagem, dando um reject com codigo 550 (ou seja, tente mais tarde), se for um servidor real, configurado de acordo com as RFC’s de SMTP, ele tentará entregar a mensagem novamente depois de algum tempo, na segunda tentativa o postgrey libera o envio. Se for um sistema de SPAM ele simplesmente passa para a próxima mensagem de sua lista e não tenta entregar aquela mensagem que foi rejeitada. O postgrey é um sistema simples, com um conceito simples, porém extremamente funcional e diminui muito SPAM e VIRUS, seu fluxo de mensagens e sua fila vão diminuir bastante.

Veja neste gráfico como diminuiu a quantidade de spam e virus do servidor, analise o antes e depois.

Mailgraph greylisting.png

#Debina like

apt-get install postgrey

#RedHat like

yum install postgrey

Agora vamos configurar o postfix do zimbra para ususá-lo, edite o arquivo

vi /opt/zimbra/conf/postfix_recipient_restrictions.cf

E coloque a linha baixo antes da linha que contem a diretiva permite

check_policy_service inet:127.0.0.1:60000

Parametros de inicializacao do postgrey

Agora vamos ajustar os parametros de incializacao do postgrey, edite o arquivo /etc/defaults/postgrey e substitua

POSTGREY_OPTS="--inet=127.0.0.1:60000"

por

POSTGREY_OPTS="--inet=127.0.0.1:60000 --delay=60 --max-age=30"

Vamos entender o que é o que!

--delay especifica o tempo que um MTA ficara na greylist (por quanto tempo ele vai recusar msgs do mta).
--max-age significa por quanto tempo o postgrey vai manter essas informações em cache

whitelist do postgrey

O postgrey possue 2 tipos de whitelist, uma para clients e outra para recipients, vamos ajustar a whitelist de clients, edite o arquivo /etc/postgrey/whitelist_clients e caso queria colocar parte da esplanada dos ministérios lá, ficaria assim…

# ministerios do brasil 

planejamento.gov.br
comunicacoes.gov.br
mc.gov.br
mct.gov.br
mec.gov.br
desenvolvimento.gov.br
mds.gov.br
cultura.gov.br
cidades.gov.br
agricultura.gov.br
incra.gov.br
in.gov.br
mma.gov.br
mme.gov.br
mpas.gov.br
mre.gov.br
saude.gov.br
turismo.gov.br
presidencia.gov.br
brasil.gov.br
defesa.org.br
fazenda.gov.br
esporte.gov.br
integracao.gov.br
mj.gov.br
mte.gov.br
transportes.gov.br

# entidades com status de ministerio

agu.gov.br
cgu.gov.br
bcb.gov.br
nae.gov.br

# autarquias, agencias e programas ligados a ministerios

iti.gov.br
radiobras.gov.br
ebc.tv.br
onid.org.br
tvbrasil.org.br
serpro.gov.br
dataprev.gov.br

Salve a lista, reinicie o postgrey

/etc/init.d/postgrey restart

ou

invoke-rc.d postgrey restart

pronto, postgrey instalado, configurado e integrado!

referências

Instalando Xen 4.0 no Debian 6 Squeeze – 64 bits

1. Instalação

  •  Instalar o sistema debian 6 64 bits
  •  Atualizar o sistema

apt-get dist-upgrade

  •  Instalar os pacotes necessários

 apt-get install xen-hypervisor-4.0-amd64 linux-image-xen-amd64 xen-tools xen-qemu-dm vncviewer vnc4server xinetd xterm rsync

  • Após instalar o xen, é necessário corrigir a inicialização do mesmo no grub2

mv -i /etc/grub.d/10_linux /etc/grub.d/50_linux && update-grub2

2. Configuração do Xen

  • Criar backup do arquivo de configuração padrão do xen

cp -a /etc/xen/xend-config.sxp /etc/xen/xend-config.sxp.bkp

  • Editar o arquivo /etc/xen/xend-config.sxp como exemplo entre abixo:

(logfile /var/log/xen/xend.log)
#(loglevel DEBUG)

(xend-http-server yes)
(xend-port 8000)
(xend-address localhost)

(xend-unix-server yes)

(network-script ‘network-bridge antispoof=yes’)

(vif-script vif-bridge)

(dom0-min-mem 196)

(enable-dom0-ballooning yes)

(total_available_memory 0)

(dom0-cpus 0)

(vnc-listen ‘0.0.0.0’)
(vncpasswd ‘senha_vnc’)

(keymap ‘pt-br’)

  • Editar o arquivo /etc/xen-tools/xen-tools.conf e verificar se as linhas abaixo estão descomentadas, caso contrário, descomentar:

serial_device = hvc0
serial_device = tty1
disk_device = xvda
pygrub=1

3. Configuração das DomUs Para-Virtualizados (Máquinas Virtuais)

  •  Criar diretório onde ficarão as servidores virtualizados

mkdir -p /nome_do_diretorio/domains

3.1 Configuração de DomU de Servidor existente via rsync

  •  Criar diretórios de virtualização do servidor

mkdir -p /nome_do_diretorio/domains/nome_do_servidor/tmp

  • Criar HD virtual do servidor

cd /nome_do_diretorio/domains/nome_do_servidor

qemu-img create -f raw hd_root.img 50G

mkfs.ext3 -F hd_root.img

qemu-img create -f raw hd_swap.img 2G

mkswap -f hd_swap.img

  •  Criar arquivo de configuração da servidor
  • use o editor de texto de sua preferência
  • cd /nome_do_diretorio/domains/nome_do_servidor
  • vim nome_do_servidor.cfg

import commands
krn_vers = commands.getoutput(‘uname -r’)

name = ‘nome_do_servidor’
builder = ‘linux’
ostype = ‘squeeze’ (Em distribuições debian-like, usar o nome da versão. Em distribuições centos, usar centos-{3,4,5 ou 6}, para demais, consulte tabela)
disk = [
‘file:/nome_do_diretorio/domains/nome_do_servidor/hd_root.img,xvda1,w’,
‘file:/nome_do_diretorio/domains/nome_do_servidor/hd_swap.img,xvda2,w’
]
memory = 1024 (Quantidade de memória)
vcpus = 1 (Quantidade de processadores)
arch = ‘amd64’ (Arquiterura do servidor: i386 ou amd64)
vif = [ ‘bridge=xenbr0’ ]
kernel = ‘/boot/vmlinuz-‘ + krn_vers
ramdisk = ‘/boot/initrd.img-‘ + krn_vers
root = ‘/dev/xvda1 ro’
on_poweroff = ‘destroy’
on_reboot = ‘restart’
on_crash = ‘restart’
extra = ‘xencons=xvc console=xvc0 video=tty’
vfb = [ ‘type=vnc,vncdisplay=X,vnclisten=0.0.0.0,vncpasswd=senha_vnc’ ] (vncdisplay=X é o mesmo que: 590X, ou seja, vncdisplay=1 significa 5901)

  •  Liberar acesso ao servidor xen (Dom0) via rsync para o servidor que esta sendo virtualizado
  • use o editor de texto de sua preferência
  • vim /etc/rsyncd.conf

# arquivo de log
log file = /var/log/rsyncd.log

# host
[nome_do_servidor](modulo_do_servidor)
path = /nome_do_diretorio/domains/nome_do_servidor/tmp
read only = false
uid = root
hosts allow = ip_do_servidor
transfer logging = yes
log format = %t: host %h (%a) %o %f (%l bytes). Total %b bytes.

  • Montar imagem do HD virtual no diretório tmp

cd /nome_do_diretorio/domains/nome_do_servidor

mount -o loop hd_root.img tmp

  • Rsync do servidor para o HD virtual
  • Logar no servidor que esta sendo virtualizado e começar o rsync

rsync -vaH –numeric-ids –stats –progress –exclude “/mnt/*” –exclude “/proc/*” –exclude “/sys/*” –exclude “/tmp/*” –exclude “/var/tmp/*” / ip_do_servidor::modulo_do_servidor

  • Finalizar instalação
  • cd /nome_do_diretorio/domains/nome_do_servidor/tmp
  • use o editor de texto de sua preferência
  • FSTAB – Debian/Ubuntu

vim etc/fstab —  (NÃO COLOCAR “/” ANTES DO ETC

/dev/xvda1       /               ext3    defaults,errors=remount-ro 0       1
/dev/xvda2       none            swap    sw              0       0
proc            /proc           proc    nodev,noexec,nosuid     0       0

  • INITTAB – Debian / CentOS

vim etc/inittab

–Incluir linha–

#Xen
co:2345:respawn:/sbin/agetty 38400 xvc0

  •  EVENT.D – Ubuntu

mkdir etc/event.d

vim etc/event.d/xvc0

# xvc0 Xen Console
# This service maintains a getty on xvc0 from the point the system is
# started until it is shut down again.
start on runlevel 2
start on runlevel 3
stop on runlevel 0
stop on runlevel 1
stop on runlevel 4
stop on runlevel 5
stop on runlevel 6
respawn
exec /sbin/agetty 38400 xvc0

  • Configurar rede, se necessário:

vim etc/network/interfaces

  • Configurar securetty

vim etc/securetty

–Incluir no final do arquivo–

# Xen console
xvc0

  •  Copiar arquivos do kernel

cp -a /lib/modules/$(uname -r) lib/modules

  • Desmontar imagem do HD virtual

cd /nome_do_diretorio/domains/nome_do_servidor

umount tmp

  • Inicializar máquina virtual

xm create -c /nome_do_diretorio/domains/nome_do_servidor

Se a rede foi configurada, o servidor pode ser acessado via ssh

Acesso via VNC, ip_do_servidor:X, onde X faz referência ao vncdisplay informado no arquivo de cfg da máquina virtual

3.2 Configuração de DomU de Servidor novo via debootstrap

  •  Criar diretórios de virtualização do servidor

mkdir -p /nome_do_diretorio/domains/nome_do_servidor/tmp

  •  Criar HD virtual do servidor

cd /nome_do_diretorio/domains/nome_do_servidor

qemu-img create -f raw hd_root.img 50G

mkfs.ext3 -F hd_root.img

qemu-img create -f raw hd_swap.img 2G

mkswap -f hd_swap.img

  • Criar arquivo de configuração da servidor
  • use o editor de texto de sua preferência
  • cd /nome_do_diretorio/domains/nome_do_servidor
  • vim nome_do_servidor.cfg

import commands
krn_vers = commands.getoutput(‘uname -r’)

name = ‘nome_do_servidor’
builder = ‘linux’
ostype = ‘squeeze’ (Em distribuições debian-like, usar o nome da versão. Em distribuições centos, usar centos-{3,4,5 ou 6}, para demais, consulte tabela)
disk = [
‘file:/nome_do_diretorio/domains/nome_do_servidor/hd_root.img,xvda1,w’,
‘file:/nome_do_diretorio/domains/nome_do_servidor/hd_swap.img,xvda2,w’
]
memory = 1024 (Quantidade de memória)
vcpus = 1 (Quantidade de processadores)
arch = ‘amd64’ (Arquiterura do servidor: i386 ou amd64)
vif = [ ‘bridge=xenbr0’ ]
kernel = ‘/boot/vmlinuz-‘ + krn_vers
ramdisk = ‘/boot/initrd.img-‘ + krn_vers
root = ‘/dev/xvda1 ro’
on_poweroff = ‘destroy’
on_reboot = ‘restart’
on_crash = ‘restart’
extra = ‘xencons=xvc console=xvc0 video=tty’
vfb = [ ‘type=vnc,vncdisplay=X,vnclisten=0.0.0.0,vncpasswd=senha_vnc’ ] (vncdisplay=X é o mesmo que: 590X, ou seja, vncdisplay=1 significa 5901)

  •  Inicializar instalação do sistema básico

cd /nome_do_diretorio/domains/nome_do_servidor/tmp
debootstrap –arch amd64 squeeze . http://ftp.debian.org/debian
debootstrap –arch amd64 lucid . http://archive.ubuntu.com/ubuntu

  •  Finalizar instalação
  • cd /nome_do_diretorio/domains/nome_do_servidor/tmp
  • use o editor de texto de sua preferência
  • INITTAB – Debian / CentOS

vim etc/inittab

–Incluir linha–

#Xen
co:2345:respawn:/sbin/agetty 38400 xvc0

  •  EVENT.D – Ubuntu

mkdir etc/event.d

vim etc/event.d/xvc0

# xvc0 Xen Console
# This service maintains a getty on xvc0 from the point the system is
# started until it is shut down again.
start on runlevel 2
start on runlevel 3
stop on runlevel 0
stop on runlevel 1
stop on runlevel 4
stop on runlevel 5
stop on runlevel 6
respawn
exec /sbin/agetty 38400 xvc0

  • Configurar rede, se necessário:

vim etc/network/interfaces

  • Configurar securetty

vim etc/securetty

–Incluir no final do arquivo–

# Xen console
xvc0

  •  Copiar arquivos do kernel

cp -a /lib/modules/$(uname -r) lib/modules

  •  HOSTS

vim etc/hosts

127.0.0.1 localhost.localdomain localhost
ip_do_servidor nome_do_servidor.dominio_do_servidor nome_do_servidor

  •  HOSTNAME

vim etc/hostname

nome_do_servidor

  •  Configurar rede, se necessário

vim etc/network/interfaces

  •  Configurar securetty

vim etc/securetty

–Incluir no final do arquivo–

# Xen console
xvc0

  •  Copiar arquivos do kernel:

cp -a /lib/modules/$(uname -r) lib/modules

Se o sistema de destino não for 64bit, efetuar a cópia dos módulos 64bits

mkdir -p lib64/modules

cp -a /lib64/modules/$(uname -r) lib64/modules

  •  Desmontar imagem do HD virtual

cd /nome_do_diretorio/domains/nome_do_servidor

umount tmp

  •  Inicializar máquina virtual

xm create -c /nome_do_diretorio/domains/nome_do_servidor

Se a rede foi configurada, o servidor pode ser acessado via ssh

Acesso via VNC, ip_do_servidor:X, onde X faz referência ao vncdisplay informado no arquivo de cfg da máquina virtual

4. Bibliografia

Twitter de comandos Unix

O twitter @UnixCommandstem a proposta de reunir dicas de comandos que cabem em uma linha, bem como a de linkar páginas com conteúdo relevante para aumentar a eficiência do trabalho com a shell *nix.

Se você tem mais idéias de comandos ou de posts que possam ser úteis para os usuários de shell Unix e similares, estamos procurando por mais colaboradores. Para contribuir basta twittar para nós um comando. Nós iremos retwittar! Agradecemos antecipadamente aos colaboradores.

[referência: twitter.com]

[referência: facebook.com]

[fonte: br-linux.org]

Instalação do Arch Linux Sem Dor

De acordo com seu Guia de Instalação Oficial, o Arch Linux é uma Distribuição GNU/Linux otimizada e desenvolvida para arquiteturas i686 e x86_64 de forma independente. Para quem não sabe, a ideia inicial para a criação do Arch Linux veio da distribuição Linux chamada CRUX.

O CRUX é uma distribuição GNU/Linux bastante leve, otimizada para arquiteturas i686 e voltada para usuários mais experientes no mundo Linux. O foco principal desta distribuição é “keep it simple”, que reflete em um sistema de pacotes simples baseado em arquivos tar.gz, enquanto seu objetivo secundário é a utilização de novos recursos do Linux, ferramentas inovadoras e bibliotecas. O CRUX utiliza apenas pacotes estáveis na sua instalação, podendo requerer a compilação de alguns aplicativos.

O desenvolvimento do Arch é focado no equilíbrio entre simplicidade, elegância, retidão de código e programas “bleeding edge” (extremamente recentes). Sua leveza e simplicidade o torna fácil de estender e/ou moldar para qualquer tipo de sistema que você esteja construindo.

O Arch Linux é considerado por muitos como um Linux difícil de usar e, principalmente, de instalar. Mas vou provar neste post que isso é uma inverdade, e uma injustiça com essa poderosa distribuição Linux. Por isso, deixe seu medo de lado e saiba que qualquer usuário Linux, independente de seu conhecimento sobre o sistema, pode usar essa poderosa distribuição no seu dia-à-dia, seja no trabalho, em casa, ou mesmo em seus estudos (escola, faculdade).

Fonte: Mind Bending

Navegando anonimamente com TorK

“Todos que navegam na Internet são rastreáveis”.

Pacotes de dados de internet incluem não só os dados reais a serem enviados, mas também os cabeçalhos com informações de roteamento que são usados para orientar os pacotes para seus destinos. Mesmo se você usar criptografia como segurança extra, as informações de roteamento – que não podem ser criptografadas – podem revelar detalhes sobre o que você está fazendo, com quem você está falando, em quais serviços você está conectando, e os dados que você esta acessando. Intermediários (autorizados ou não) podem ver esses os dados e aprender mais sobre você.

Se você quer um nível mais elevado de anonimato, TorK pode fazer o trabalho. Ele usa a rede Tor (The Onion Router)  para oferecer uma maneira mais segura de navegar.

Artigo na íntegra no Linux.com (em Inglês).

Liberada versão 0.7.105 do Distribuição StressLinux

Carsten Schöme anunciou a liberação da release 0.7.105 do StressLinux, uma distribuição linux baseado no openSUSE e dedicada aos usuários que precisam, ou gostam, de testar e monitorar seus sistemas.

Texto do site oficial:

“A nova versão do StressLinux (0.7.105) está pronta para download. O sistema básico é agora o openSUSE 11.4 com drivers de rede atualizados para placas r8101, r8168 e r8169. Os pacotes específicos StressLinux também foram atualizados, bem como, incluidos BusyBox, iperf, lm_sensors, lshw, Memtest86, Memtest86 +, mprime, smartmontools (SVN r3314), x86info e cruncher-y. Há um problema conhecido, Memtest86 + não está funcionando a partir das imagens ISO. Este parece ser um problema entre o novo pacote e o SUSE Studio Build System e será corrigido em uma próxima versão…”

Changelog completo pode ser visto na página do projeto StressLinux.org.

Download:

StressLinux 32bits 0.7.105 (226MB)

StressLinux 64bits 0.7.105 (194MB)

Escritório sem papel com Linux

Seja para combater a desordem ou salvar as florestas, o escritório sem papel tem sido o sonho de muitos usuários de computador, desde o primeiro registro eletrônico. Mas isso permanece indefinido, em grande parte, porque quaisquer que sejam suas intenções, você não pode controlar as ações de outras pessoas, e hoje muitas empresas ainda insistem em enviar faturas e recibos impressos. Pelo menos, você pode dispensar os armários e digitalizar os documentos que você precisa e transformá-los em PDFs de texto, para isso, basta um scanner e um fim de semana para configurar o sistema e começar o trabalho…

OBS: Esse eu vou tentar e crio um post em português com o tutorial…

Artigo na íntegra no Linux.com (em Inglês).

Controle varias terminais ssh em uma unica shell.

Muitas pessoas usam ssh para efetuar login em servidores remotos, copiar arquivos e administração em geral. Para aumentar a produtividade, você pode usar uma ferramenta que permite executar comandos em mais de uma janela de terminal ao mesmo tempo.  As ferramentas Parallel SSH, Cluster SSH e ClusterIt, permitem que você especifíque em uma única janela de terminal e envie para um grupo de terminais onde eles podem ser executados.

Artigo na íntegra no Linux.com (em Inglês).

Controle de versão com CVS + CentOS 5.x

Acabei de precisar reinstalar um servidor de controle de versão para o novo projeto aqui na empresa, e pra minha surpresa, só consegui informações picadas na fonte do saber (Google). Depois de juntar todas as informações num único lugar, consegui criar o novo servidor. Por isso, resolvi postar aqui um tutorial do que foi feito.

Instalação e Configuração

Bom, partindo do princípio que você já esteja com o CentOS 5.x instalado, vamos a instalação do servidor CVS:

yum -y install cvs

Com o CVS instalado, vamos há algumas alterações: (Como tenho mais familiaridade com o VI, vou utilizá-lo nos exemplos, mas você pode utilizar o editor de sua preferência)

cat /etc/xinetd.d/cvs

O arquivo padrão da instalação deve aparecer como abaixo:

# default: off
# description: The CVS service can record the history of your source \
# files. CVS stores all the versions of a file in a single \
# file in a clever way that only stores the differences \
# between versions.
service cvspserver {
disable = yes
port = 2401
socket_type = stream
protocol = tcp
wait = no
user = root
passenv = PATH
server = /usr/bin/cvs
env = HOME=/var/cvs
server_args = -f --allow-root=/var/cvs
pserver
# bind = 127.0.0.1
}

Vamos alterá-lo para as configurações no sistema. No exemplo, vamos supor que o a variável path do nosso repositório seja “/var/repositorio”.

service cvspserver {
disable = no
socket_type = stream
wait = no
user = root
group = users
log_type = FILE /var/log/cvspserver
protocol = tcp
env = '$HOME=/usr/local/cvspserver'
log_on_failure += USERID
port = 2401
server = /usr/bin/cvs
server_args = -f --allow-root=/var/repositorio pserver
}

Após a alteração, precisamos reiniciar o serviço xinetd:

/etc/init.d/xinetd restart

Verificando se iniciou corretamente:

netstat -tap | grep cvs

Deve retornar algo como abaixo:

tcp 0 0 *:cvspserver *:* OUÇA 10426/xinetd

Agora, precisamos exportar a variável de path para que todos os usuários ao logarem no servidor, já tenham a variável inicializada:

echo "export CVSROOT=/var/repositorio" >> /root/.bashrc
echo "export CVSROOT=/var/repositorio" >> /home/usuario/.bashrc

Bom, com tudo feito, precisamos criar o diretório principal do projeto:

#Cria o diretório
mkdir /var/repositorio
#Cria os arquivos de controle do CVS
cvs -d /var/repositorio init
#Torna o grupo USERS (ou o grupo que você escolher) proprietário da pasta
chgrp users /var/repositorio
#Muda as permissões de acesso aos arquivos do diretório
chmod g+srwx /var/repositorio

Por questões de segurança, você pode optar por liberar acesso aos usuários somente para utilização do cvs no servidor, para isso, basta adicionar os usuários no arquivo “/var/repositorio/CVSROOT/passwd”. Para isso, utilizamos o comando:

htpasswd passwd usuario #Onde usuário é o nome do usuário que você deseja adicionar.

Caso, contrário, basta adicionar os usuários normalmente ao sistema Linux, lembrando de exportar a variável $CVSROOT para o .bashrc do diretório home do usuário que você criar:

echo "export CVSROOT=/var/repositorio" >> /home/usuario/.bashrc

Com tudo isso, já temos o servidor CVS com o diretório base do repositório funcionando.

Testes

Agora vamos testar o funcionamento do repositório. Para os testes, vamos supor que estamos lidando com usuários do sistema e que o desktop de trabalho seja Linux.

Primeiro vamos criar um usuário de sistema no servidor cvs e exportar a variável $CVSROOT para o usuário:

adduser fulano
passwd fulano
echo "export CVSROOT=/var/repositorio" >> /home/fulano/.bashrc

Agora, vamos criar uma nova pasta de projeto. No nosso caso, a pasta “teste”.

mkdir /var/repositorio/teste
cvs -d /var/repositorio/teste init
chgrp -R users /var/repositorio/teste
chmod -R g+srwx /var/repositorio/teste

Na estação de trabalho, no console, efetuamos login no cvs para verificar se está funcionando, para isso, precisamos exportar para o bashrc do usuário. Supondo que estamos logados com o usuário(do desktop) fulano, e que o ip do servidor cvs seja 192.168.0.254, temos:

echo "export CVSROOT=:pserver:fulano@172.16.10.154:/var/repositorio" >> /home/fulano/.bashrc
cvs login
cd /opt
cvs checkout teste #Aqui, baixamos a pasta do projeto para dentro da pasta /opt da estação de trabalho, para trabalharmos localmente.

Com a pasta do projeto localmente, vamos criar um arquivo e efetuar o commit no cvs:

cd /opt/teste
#Coloque algum conteúdo no arquivo.
vim teste.txt
#Com esse comando criamos o arquivo no servidor.
cvs add teste.txt
#Altere o conteúdo do arquivo
echo "teste de commit" >> teste.txt
#Atualizando versão do arquivo no servidor
cvs commit teste.txt

Comando úteis do cvs

Principais comandos do CVS:

Comando Descrição Opções mais usadas Exemplo
checkout Baixa do servidor para o diretório local um módulo. cvs checkout meuprojeto
update Atualiza a cópia local com a última versão do servidor. -d (baixa diretórios novos) cvs update -d
commit Envia para o servidor as alterações feitas. -m msg (Utiliza msg como a mensagem que descreve o que foi alterado) cvs commit -m “Implementada funcionalidade X-Y-Z.”
add Adiciona um diretório ao servidor ou programa um arquivo para inclusão no próximo commit. cvs add novodiretorio
remove Marca um arquivo para remoção no próximo commit. Diretórios não podem ser removidos. cvs remove novodiretorio
diff Compara a cópia local com a do servidor (ou duas cópias de releases diferentes no servidor) e exibe as diferenças. -r (Especifica a release que se quer usar na comparação), -u (Altera a forma de exibição.) cvs diff meuarquivo, cvs diff -r 1.1 -r 1.2 meuarquivo
edit Marca o arquivo para edição. cvs edit meuarquivo
unedit Desmarca o arquivo que havia sido marcado para edição, eliminando as alterações feitas. cvs unedit meuarquivo
tag Coloca uma “etiqueta” em uma determinada versão de um módulo. -b (Abre um “branch” a partir desta tag.) cvs tag -b v1_0
log Exibe o histórico de versões de um arquivo, com as mensagens dadas nos commits. cvs log meuarquivo
status Mostra o estado atual. cvs status meuarquivo
import Cria um novo módulo no CVS, importando o diretório local. cvs import meumodulo -m ‘Colocando meumodulo no CVS’ minhaempresa start
export Extrai os arquivos do CVS, sem trazer os arquivos de controle do CVS (ao contrário do checkout). cvs export meuprojeto

Bibliografia

As informações aqui contidas, foram retiradas de fontes na internet e manual do cvs e reorganizadas por mim.

cvs

idevelopment.info

petersonpinheiro.blogspot.con

blogtheunical.com

okitiva.net