[Shell] Como procurar em um arquivo por “bolo de laranja”, sem gostar de chocolate?

Posted by Paulo Arruda | Posted in Linux | Posted on 14-12-2011

Tags:, , ,

0

O título pode parecer confuso, mas digamos que você queira procurar com o comando grep a string “bolo de laranja” no arquivo de receitas da sua mãe, mas você não gosta de bolo de laranja com chocolate (te confundi mais ainda não?), e não quer que sejam exibidos resultados como “bolo de laranja com chocolate” (aaah, agora sim!).

Até pouco tempo atrás, poderíamos fazer assim:

grep "bolo de laranja" receitas.txt | grep -v "bolo de laranja com chocolate"

É rude, mas funciona.

Ou você pode fazer isso de forma simples e elegante, usando o suporte (experimental) à expressões regulares do PERL:

grep -P 'bolo de laranja(?<! com chocolate)' receitas.txt

[Shell] Escapando a contrabarra no comando sed

Posted by Paulo Arruda | Posted in Linux | Posted on 14-12-2011

Tags:, , ,

0

Algumas vezes me deparo com algumas strings chatas de substituir via sed:

39\ha.txt

Para substituir o caractere “\” por “:”, por exemplo, basta fazer isso:

echo "39\ha.txt" | sed -e 's@\\@:@g'

E diga adeus aos seus problemas ;)

[Ubuntu] Visualizando todas as dependências de um pacote com o apt-rdepends

Posted by Paulo Arruda | Posted in Linux | Posted on 14-12-2011

Tags:, , , ,

0

Alguma vez você já quis saber de antemão quais são, e quais as versões dos pacotes extras instalados quando você precisou instalar um programa com o apt-get?

Aconteceu comigo ontem.

Os motivos são vários. Talvez você queira saber se a instalação de um pacote instalará outro que é incompatível com algum software que você possui.
Existe uma solução: apt-rdepends

Para instalar:

sudo apt-get install apt-rdepends

Depois é só executar. Exemplo:

sudo apt-rdepends postfix

Lançado o Zimbra Colaboration Server 7

Posted by Paulo Arruda | Posted in Linux, Utilidades | Posted on 23-02-2011

Tags:,

0

Foi lançada este mês a versão 7.0.0 do VMware Zimbra Colaboration Server. Para quem não conhece, o Zimbra é uma plataforma colaborativa Cliente-Servidor, com as funcionalidades de Correio, Mensageiro Instantâneo, Contatos, Agenda, Gerenciador de Tarefas e Porta Arquivos, possibilitando a criação de documentos online (parecido com o google docs).

Segundo a VMware, o lema desta versão é “Compartilhe mais, envie menos“.

Seguem abaixo algumas das novidades mais interessantes que vieram no Zimbra 7 Open Source:

Recursos Administrativos

  • Conta de email para quarentena das mensagens contaminadas por vírus;
  • Possibilidade de controle do tempo de auto-salvamento de rascunho ao digitar emails;
  • Maior controle das listas de distribuição: agora é possível determinar quem poderá enviar emails para certas listas de distribuição;
  • Controle de whitelist/blacklist de SPAM por domínio.

Interface WEB

  • A aplicação “Documentos” foi removida, concentrando tudo no porta-arquivos. Todas as páginas pré existentes em “Documentos” serão migradas automaticamente para o porta-arquivos no ato da atualização do sistema, incluindo a estrutura de pastas e os nomes dos arquivos;
  • Ao digitar um email utilizando o recurso autocompletar, a interface mostrará um botão “+” ao lado do email digitado caso o mesmo seja uma lista, possibilitando assim a visualização dos membros desta lista;
  • Possibilidade de criação de filtros para mensagens enviadas;
  • Possibilidade de recuperação de mensagens que foram apagadas ou excluídas da lixeira (com a ação esvaziar lixeira). Basta clicar com o botão direito na lixeira e selecionar “Recuperar itens Deletados”. Este recurso pode ser habilitado na interface administrativa do Zimbra para cada COS (grupo de usuários);
  • Ao deletar um evento da agenda, uma janela popup aparecerá caso você deseje apagar todos os itens em série;
  • Possibilidade de escolha de qual conta de email receberá os lembretes da agenda e das tarefas;
  • Possibilidade de adicionar múltiplos anexos em uma mensagem de email segurando-se a tecla CTRL;
  • Possibilidade de anexar emails, contatos e arquivos do Porta-Arquivos em uma mensagem;
  • Possibilidade de duplicar eventos da agenda;
  • Porta arquivos com suporte a controle de versão. Usuários podem reverter o arquivo para versões anteriores;
  • Possibilidade de trava de Porta-Arquivos para que um usuário não apague o trabalho do outro;
  • Possibilidade de envio programado de emails. Este recurso pode ser definido por COS;
  • Zimlet LinkedIn, permitindo que um usuário convide outro para participar de sua rede de contatos direto da interface do Zimbra;
  • Assinaturas podem agora ser configuradas por conta, e os usuários podem configurar diferentes assinaturas em uma mensagem, podendo também escolher um contato a ser anexado de acordo com a assinatura escolhida.

Existem muitas outras novidades, que podem ser conferidas nas Notas da Versão (em inglês).

Criando um Storage barato com iSCSI no Debian Squeeze

Posted by Paulo Arruda | Posted in Linux | Posted on 04-02-2011

Tags:, , ,

4

O objetivo deste artigo é preparar vocês para os próximos, onde falarei bastante sobre alta disponibilidade (HA) e virtualização de servidores, e utilizarei os conhecimentos aplicados aqui em alguns tutoriais. O lançamento do Debian Squeeze está bem próximo, então já começarei a basear meus artigos nesta versão ok?  Vamos lá!

Uma grande dificuldade para quem está começando no mundo de infraestrutura é ter a oportunidade de testar seus conhecimentos e fazer experiências utilizando equipamentos caros como um Storage. Mas, felizmente, existe uma forma de criarmos um Storage de baixo custo com aquele computador antigo, de 1GB de RAM, um disco de 1TB e uma placa de rede Gigabit.

Importante:

1) Ao fazer a instalação do Debian Squeeze, certifique-se de deixar uma partição com o maior espaço possível para armazenas os dados, sendo o “disco” do Storage que estamos montando. Por exemplo, em um disco de 1TB, utilize 20GB para o sistema e todo o resto em uma partição no fim do disco.

2) Não é possível montar o mesmo disco iSCSI em mais de um servidor e acessá-lo simultaneamente. Logo, se você planeja conectar vários servidores no nosso Storage, sugiro que divida o espaço livre de armazenamento de acordo com o número de computadores que utilizarão o Storage, em partições lógicas ou utilizando LVM, adaptando os nomes dos dispositivos no procedimento deste tutorial.

3) Para fins didáticos, vou utilizar a partição /dev/sda3 como disco do Storage.

Vamos começar instalando os pacotes necessários:

apt-get install iscsitarget

No momento da criação deste post, não encontrei o pacote iscsitarget-module nos repositórios oficiais do Squeeze, logo, vamos compilar o módulo iSCSI utilizando o module assistant:

apt-get install iscsitarget-source module-assistant
m-a a-i iscsitarget

Se tudo correr bem, você será capaz de carregar o módulo com o comando:

modprobe iscsi_trgt

O serviço iscsitarget vem desabilitado por padrão. Para habilitá-lo, edite o arquivo /etc/default/iscsitarget e troque false por true:

ISCSITARGET_ENABLE=true

Agora vamos criar o target editando o arquivo /etc/iet/ietd.conf. Este arquivo armazena as informações dos discos que serão exportados via iSCSI.

O arquivo original vem com muita coisa comentada, o que pode dificultar seu entendimento. Vamos renomeá-lo e criar um novo.

mv /etc/iet/ietd.conf /etc/iet/ietd.conf.original

Crie o arquivo /etc/iet/ietd.conf com o conteúdo abaixo:

Target storage.2011-02.lan.dominio:disco1
User
Lun 0 Path=/dev/sda3,Type=fileio

O padrão iSCSI define que o “Target name” (o que vem logo depois da palavra Target) deve ser um nome único, seguindo a seguinte sintaxe:

nomeUnico.yyyy-mm.<nome.de.domínio.ao.contrário>[:NomeParaOdisco]

onde yyyy é o ano de criação do disco e mm é o mês.

Por padrão, o iscsitarget do Debian Squeeze aceita conexões provenientes de qualquer endereço IP, conforme visto na última linha do arquivo /etc/iet/initiators.allow. O ideal seria modificar, liberando apenas os IPs que vão ter acesso ao Storage. Basta trocar a linha “ALL ALL” por:

ALL x.x.x.x

trocando “x.x.x.x” pelo IP da máquina que terá acesso ao Storage.

Como o objetivo deste tutorial é ensinar a tecnologia, vamos deixar a configuração do arquivo initiators.allow em “ALL ALL” mesmo. Mas tome o cuidado de modificar esta configuração após seus testes com o iSCSI.

Existem outras formas de configurar este arquivo, por exemplo dando acesso a apenas um dispositivo para um certo IP, ou liberando toda uma rede para acessar o Storage. Para maiores informações, consulte a documentação que se encontra dentro do próprio arquivo /etc/iet/initiators.allow.

Finalizando, vamos reiniciar o serviço!

/etc/init.d/iscsitarget restart

Conferindo se ele está de pé:

netstat -natupe | grep ietd
tcp  0  0 0.0.0.0:3260  0.0.0.0:*  OUÇA  0  31684  11709/ietd
tcp6 0  0 :::3260       :::*       OUÇA  0  31685  11709/ietd

E assim termina nosso tutorial! Em breve publicarei um artigo ensinando a conectar um servidor Linux ao dispositivo criado por nós neste tutorial!

Dúvidas, comentários ou sugestões, serão bem vindas :)

Como restringir alguns usuários do Zimbra a enviar e/ou receber emails apenas para domínios específicos [ATUALIZADO]

Posted by Paulo Arruda | Posted in Linux | Posted on 02-02-2011

Tags:, , , , , ,

12

ATUALIZADO: Este tutorial foi atualizado e testado para a versão 6.xx do Zimbra.

Certa vez um cliente me pediu para restringir apenas alguns usuários do Zimbra a enviar e receber emails apenas para o domínio do correio da empresa. Fuçando na internet, não achei uma documentação que explicasse como fazer ambas as restrições, apenas cada uma separadamente.
Infelizmente, as inúmeras soluções existentes no Wiki do Zimbra não coexistem em paz. Fui procurar ajuda na documentação oficial do Postfix. Resolvi meu problema e vou postar aqui como.

Este tutorial é baseado no Zimbra Colaboration Suite 6 Open Source.

Obs.: Tudo é feito com o usuário ROOT.

Edite o arquivo /opt/zimbra/postfix/conf/main.cf e mude a linha que começa com “smtpd_recipient_restrictions” para:

smtpd_recipient_restrictions = check_recipient_access hash:/opt/zimbra/conf/receber, reject_non_fqdn_recipient, permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination, reject_unlisted_recipient, reject_invalid_hostname, reject_non_fqdn_sender, permit

Agora, adicione as seguintes linhas ao final do mesmo arquivo:

smtpd_sender_restrictions = check_sender_access hash:/opt/zimbra/conf/enviar
restringe_recebimento = check_sender_access hash:/opt/zimbra/conf/dominios, reject
restringe_envio = check_recipient_access hash:/opt/zimbra/conf/dominios, reject
smtpd_restriction_classes = restringe_envio,restringe_recebimento

Edite o arquivo /opt/zimbra/conf/postfix_recipient_restrictions.cf e adicione a linha abaixo no início do arquivo:

check_recipient_access hash:/opt/zimbra/conf/receber

Crie os arquivos enviar, receber e domínios:

touch /opt/zimbra/conf/{enviar,receber,dominios}
chown zimbra.zimbra /opt/zimbra/conf/{enviar,receber,dominios}

Crie o script /opt/zimbra/conf/atualizar.sh com o seguinte conteúdo:

#!/bin/bash
POSTMAP="/opt/zimbra/postfix/sbin/postmap"
cd /opt/zimbra/conf
echo > enviar
echo > receber
echo > dominios
for i in $(cat emails_enviar.txt| grep -v "^#")
do
echo $i restringe_envio >> enviar
done
for i in $(cat emails_receber.txt| grep -v "^#")
do
echo $i restringe_recebimento >> receber
done
for i in $(cat dominios.txt| grep -v "^#")
do
echo $i OK >> dominios
done
$POSTMAP dominios
$POSTMAP enviar
$POSTMAP receber
chown zimbra. enviar* receber* dominios* emails*
su - zimbra -c "zmmtactl stop"
su - zimbra -c "zmmtactl start"

E torne-o executável:

chmod +x /opt/zimbra/conf/atualizar.sh

Agora vamos criar os arquivos que você irá editar toda vez que quiser incluir ou excluir contas restritas e domínios para os quais estas contas restritas poderão interagir recebendo/enviando emails:

ATENÇÃO: os arquivos abaixo NÃO podem ficar vazios.

Crie o arquivo /opt/zimbra/conf/dominios.txt. Neste arquivo você deve colocar os domínios para os quais as contas restritas podem enviar ou receber emails. Exemplo:

suaempresa1.com.br
suaempresa2.com.br

Crie o arquivo /opt/zimbra/conf/emails_enviar.txt. Neste arquivo você deve colocar a lista das contas que só podem enviar emails para os domínios contidos em /opt/zimbra/conf/dominios.txt. Separe cada usuário por linha, respeitando a sintaxe do arquivo. Exemplo:

rh@suaempresa1.com.br
fulano@suaempresa1.com.br
beltrano@suaempresa2.com.br

Por fim, crie o arquivo /opt/zimbra/conf/emails_receber.txt. Neste arquivo, coloque a lista das contas que só podem receber emails dos domínios contidos em /opt/zimbra/conf/dominios.txt. Separe cada usuário por linha, respeitando a sintaxe do arquivo. Exemplo:

rh@suaempresa1.com.br
fulano@suaempresa1.com.br
beltrano@suaempresa2.com.br

Ao final de tudo pronto, rode como ROOT o script criado anteriormente:

/opt/zimbra/conf/atualizar.sh

Espero ter ajudado :)

Qual Linux estou usando?

Posted by Paulo Arruda | Posted in Linux | Posted on 20-07-2009

Tags:, , , , , ,

2

Hoje fui contratado para reconfigurar um Apache. Problema de virtual host. Mas quando caí no shell, a primeira coisa que me perguntei foi: onde está o httpd.conf? Isso depende da distribuição, se ele foi instalado através de um gerenciador de pacotes. Pra descobrir qual distribuição estamos usando é bem facil:

# cat /etc/*release
# cat /etc/motd
# cat /etc/issue
# uname -a

Esses 4 comandos vão te dar uma pista bem próxima, senão exata, de qual distribuição estamos falando. ;)

Eu sei que a dica é simples, mas é o tipo de coisa tão simples que a gente nunca se preocupa em aprender!

Tutorial: Acessando remotamente via VNC um computador com linux que está protegido por um firewall que não é controlado por você

Posted by Paulo Arruda | Posted in Linux | Posted on 14-07-2009

Tags:, , , ,

0

Sim, eu tenho controle sobre o firewall da minha empresa. Mas a questão é: e se eu não tivesse? E se eu fosse um funcionário de outro departamento senão o de informática e precisasse terminar um serviço de casa? Se minha estação de trabalho fosse Windows seria fácil. A solução seria usar o LogmeIn. Mas FELIZMENTE, é Ubuntu. Então vamos lá.

Ingredientes

1. PC no trabalho, com o Ubuntu e o compartilhamento de Área de Trabalho ativado:

Sistema > Preferencias > Área de Trabalho Remota

Deixe como na figura abaixo, setando sua própria senha, é claro:

Preferências da Área de Trabalho Remota

Não esqueça de setar uma senha!

2. PC da minha casa, com Ubuntu e os pacotes openssh-server e xtightvncviewer instalados

Como root, instale os pacotes:

apt-get install openssh-server xtightvncviewer

Procedimento

A mágica funciona assim: você faz uma conexão ssh para o PC da sua casa. Com alguns parâmetros passados na linha de comando do ssh, você consegue fazer com que o ssh-server da sua casa fique escutando em uma determinada porta XXXX com o IP 127.0.0.1, e todo tráfego para o IP 127.0.0.1 na porta XXXX no PC da sua casa será direcionado pelo túnel ssh que liga o PC da sua casa ao PC do seu trabalho (em uma porta específica).

Pareceu complicado? Vamos ver na prática!

1. Do PC do seu trabalho, execute o comando:

ssh -C -N -R 5905:localhost:5900 seuusuario@ip.da.sua.casa

E misteriosamente, nada acontece… o prompt fica piscando…

A explicação:

-C Ativa a compressão dos dados trafegados pela conexão do ssh

-N Faz com que nenhum comando seja executado ao estabelecer a conexão. Ou seja, você não vai cair num shell na sua casa

-R 5905:localhost:5900 Aqui está a mágica. Esta opção diz que todo tráfego realizado em direção ao PC da sua casa, na porta 5905, será redirecionado pelo túnel para o PC do seu trabalho, na porta 5900 (porta padrão do VNC)

Obs.: Por default, o openssh-server da sua casa vai ficar escutando na porta que você indicou apenas na interface de loopback (127.0.0.1 ou localhost)

2. Agora vá pra casa! Quando chegar lá, presumindo que você também instalou o xtightvncviewer como eu escrevi, rode o comando:

xtightvncviewer -encodings tight -quality 7 -compresslevel 9 -depth 8 localhost::5905

Digite a senha que você setou nas Preferências da Área de Trabalho Remota e… Voilá!

Linux: Os 15 comandos que os iniciantes precisam saber

Posted by Paulo Arruda | Posted in Linux | Posted on 13-07-2009

Tags:, , , , , , , , , , , , , ,

2

1. Super usuário – sudo e su

Uma das características principais de segurança do linux é seu sistema de permissão, que restringe bastante quem pode fazer o que. Muitos comandos e operações só estão disponíveis para o usuário root. Se você obter uma resposta como “permissão negada” ao tentar fazer alguma coisa através da linha de comando, você precisa deixar o sistema saber que você tem permissão para fazê-lo, se tornando o super usuário (você vai precisar entrar com a senha de root).

Existem 2 maneiras distintas de se fazer isso. A primeira é o sudo, que permite um usuário a rodar certos comandos pré-definidos com permissões de super usuário. Isso é útil se, por exemplo, você quer que um usuário seja capaz de instalar um programa, mas não tenha a permissão de realizar qualquer outra tarefa de super usuário. Ter acesso ilimitado como root pode permitir que um usuário danifique o sistema se ele não souber o que está fazendo.
O comando sudo só funciona para executar 1 comando de cada vez, da seguinte forma:

sudo comando-para-executar

Ex.: editando um arquivo de configuração do sistema

sudo vim /etc/fstab

O sistema vai pedir a sua senha. A senha que você vai digitar fica invisível, logo, não se desespere se o que você estiver digitando não aparecer. Por default, o comando sudo será bastante limitado à quais comandos são permitidos.

A outra maneira, que eu uso a todo momento, é o comando su. Este comando vai criar uma sessão como root no console atual, dando a você permissões ilimitadas sobre o sistema. Use este comando com muito cuidado!
O seu uso é muito simples. Tudo o que você precisa fazer é digitar su e apertar ENTER.

su

Quando você acabar de realizar todas as tarefas como root, digite exit para finalizar a sessão.

2. Mudando de diretório – cd

Navegar pelos seus arquivos utilizando comandos pode parecer meio complicado, mas é bem fácil, uma vez que você se acostuma com isso. Esse comando, assim como alguns próximos neste artigo, vai permitir que você navegue pelo seu HD através do console sem perder muito tempo.

Para mudar de diretório você deve usar o comando cd, que significa Change Directory.
Ex.:

cd /home

cd /etc

cd /var/log

cd .. Este comando vai te levar para 1 diretório acima do atual

3. Listando arquivos e diretórios – ls

É claro que o maior propósito de se navegar pelo seu HD é a possibilidade de ver quais arquivos/diretórios existem. Usando o comando ls você pode ver o conteúdo do diretório atual (ou qualquer caminho especificado, vide exemplo). Existem dezenas de opções úteis no comando ls, o que significa que você pode dizer ao comando como se comportar quando executado, apenas incluindo um pouquinho de informação extra no comando. Exemplos:

ls Mostra todos os arquivos/pastas EXCETO as escondidas

ls -a Mostra todos os arquivos/pastas, incluindo as escondidas

ls -l Lista com mais detalhes

ls -s Mostra o tamanho dos arquivos

ls -sh Mostra o tamanho dos arquivos numa forma simples de ler

ls -lh Combina -l e -sh

ls –help Lista todas as opções disponíveis

4. Copiando – cp

O comando cp é usado para copiar um arquivo ou diretório.

cp arquivo-origem.txt caminho/de/destino/arquivo.txt

cp -f origem destino Este comando vai forçar sobrescrever no destino sem perguntar.

cp -r pasta-de-origem destino Este comando vai copiar um diretório inteiro, assim como seu conteúdo recursivamente.

cp –help Mostra todas as opções disponíveis.

Lembre-se: Você pode usar mais de uma opção de cada vez. Por exemplo, você pode usar -fr para forçar sobrescrever o destino enquanto faz uma cópia recursiva.

5. Mover – mv

O comando mv funciona de forma parecida ao comando cp, exceto que ele vai deletar os arquivos de origem uma vez que a duplicação estiver completa.

mv arquivo-de-origem.txt caminho/de/destino/arquivo.txt

mv -f origem destino Força sobrescrever sem perguntar.

mv -r pasta-de-origem destino Vai mover o diretório e seu conteúdo recursivamente.

mv –help Mostra todas as opções disponíveis.

6. Deletar – rm

O comando rm é usado para deletar arquivos e diretórios. Sempre seja cauteloso com este comando, especialmente quando você usar a opção force ou recursive.

rm arquivo.txt

rm -f arquivo.txt Força deletar sem pedir confirmação.

rm -r diretório Deleta o diretório e seu conteúdo, recursivamente. USE COM ATENÇÃO!

7. Criar um diretório – mkdir

Criar um diretório é fácil com o comando mkdir:

mkdir nome-do-diretório

8. Criar um novo arquivo – touch

O comando touch vai criar um novo arquivo vazio, ou, se o arquivo já existe, o comando vai atualizar o status acessado/modificado do arquivo.

touch nome-do-arquivo

9. Editor de Texto – vim

O editor de text vim é bem rápido e leve, porém, pode ser um pouco complicado aprender seus comandos. Existem diversos sites que explicam seus comandos. Clique aqui para ver uma lista de sites com informações dobre o Vim.

10. Exibir o conteúdo de um arquivo – cat

Esse comando é bastante simples, mas muito útil para ver rapidamente o conteúdo de um arquivo sem precisar usam um editor.

cat nome-do-arquivo

11. Buscando strings – grep

O comando grep é um pouco mais complexo, mas faz por merecer estar na lista dos 15 principais comandos do linux que você tem que aprender com seu coração! O comando grep vai procurar um arquivo, texto ou qualquer outra entrada e retornar quaisquer linhas que contenham a string que vc especificar. Digamos que você precisa procurar dentro de um arquivo de log por todos os erros que tenham a ver com o mysql. Ao invés de ter que ler todo o arquivo para achar as linhas que você precisa, o grep faz isso por você!

grep ‘mysql’ arquivo-de-log.log

grep -i ‘string’ arquivo Busca a string ‘string’ sem se importar com maiúsculas/minúsculas.

grep ‘string’ arquivo1 arquivo2 arquivo3 Procura em vários arquivos

comando | grep ‘string’ Procura a a string “string” na saída de texto retornada pelo comando “comando”.

grep –help Lista todas as opções disponíveis. E são muitas…

12. Permissões de arquivos – chmod

Algumas vezes você precisa mudar as permissões de um arquivo para que outros usuários e grupos possam ler, escrever ou executar-lo. Existem 2 comandos que servem para isso. O primeiro é o chown, que muda o dono/grupo do arquivo.

chown novo-usuarios arquivo

O segundo comando é o chmod, que permite que você modifique as permissões do arquivo. Exemplos simples:

chmod +x arquivo

chmod 755 arquivo

Para mais informações sobre como usar o comando chmod para mudar permissões específicas baseadas em usuários e grupos, veja este artigo do Wikipédia sobre o chmod.

13. Tabela de processos – top

O comando top é muito útil. Ele vai mostrar os processos que mais consomem recursos, assim como algumas informações como o uso de CPU, uptime, usuários e uso de memória.

14. Ligar/Desligar – shutdown

shutdown now Desliga o sistema imediatamente.

shutdown -t 10 Desliga o sistema em 10 segundos.

shutdown -r now Reinicia o computador.

15. Iniciando e parando serviços

Este comando permite que você inicie, pare ou reinicie serviços do sistema.

/etc/init.d/nome-do-serviço [start|stop|restart]

Ex:

/etc/init.d/httpd start

/etc/init.d/mysql stop

Virtualização com XEN no Debian Etch

Posted by Paulo Arruda | Posted in Linux | Posted on 19-07-2008

Tags:

0

O objetivo deste tutorial é mostrar as instruções passo a passo para instalar o XEN em um Debian Etch pré instalado (sistema básico) e com os repositórios corretamente configurados. Todos os programas utilizados se encontram no repositório do Etch, logo, não será feito uso de arquivos externos, tão pouco será necessário compilar alguma coisa.

Antes de começarmos, vamos a algumas definições utilizadas neste tutorial:

Dom0 -> Máquina hospedeira (host), onde será instalado o Xen Hypervisor

DomU -> Máquinas virtuais, abreviando Unprivileged Domain

LVM -> Acrônimo para a expressão inglesa Logical Volume Management para designar um padrão de gerenciamento de partições em disco IDE/SCSI/FC. Foi desenvolvido inicialmente pela IBM, seguindo-se outras empresa e instituições, como HP e a Open Group.

Ao contrário do método tradicional de particionamento, a implementação LVM cria um grande disco virtual, que pode inclusive ter mais de um dispositivo de armazenamento, e divide em partições virtuais. A grande vantagem é permitir o redimensionamento das áreas de modo dinâmico, ou seja, com o sistema operacional sendo utilizado. (fonte Wikipédia http://pt.wikipedia.org/wiki/LVM)

  1. INSTALAÇÃO

Depois de se logar em um console (modo texto) como ROOT, vamos começar com o Kernel, libc e todas as ferramentas necessárias para o funcionamento do XEN:

lab04est011:~# apt-get install linux-image-2.6-xen-vserver-686 xen-hypervisor-3.0.3-1-i386-pae xen-tools xen-linux-system-2.6.18-4-xen-vserver-686 linux-headers-2.6-xen-vserver-686 libc6-xen bridge-utils lvm2

Agora já temos o XEN Hypervisor instalado, assim como o seu Kernel “patcheado”.

Antes de dar o boot no novo Kernel é necessário alterar algumas configurações em /etc/xen/xend-config.sxp para que a rede das máquinas virtuais funcionem em modo bridge

lab04est011:~# vim /etc/xen/xend-config.sxp

Altere a linha

(network-script network-dummy)

para

(network-script network-bridge)

Agora vamos reiniciar o sistema pelo Kernel do XEN.

lab04est011:~# reboot

Dentro do novo sistema, vamos conferir como ficaram as interfaces de rede pelo comando ifconfig:

lab04est011:~# ifconfig
eth0 Encapsulamento do Link: Ethernet Endereço de HW 00:E0:7D:FB:DA:26
inet end.: 172.16.1.66 Bcast:172.16.1.255 Masc:255.255.255.0
endereço inet6: fe80::2e0:7dff:fefb:da26/64 Escopo:Link
UP BROADCASTRUNNING MULTICAST MTU:1500 Métrica:1
RX packets:345 errors:0 dropped:0 overruns:0 frame:0
TX packets:111 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:37628 (36.7 KiB) TX bytes:15052 (14.6 KiB)

lo Encapsulamento do Link: Loopback Local
inet end.: 127.0.0.1 Masc:255.0.0.0
endereço inet6: ::1/128 Escopo:Máquina
UP LOOPBACKRUNNING MTU:16436 Métrica:1
RX packets:8 errors:0 dropped:0 overruns:0 frame:0
TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:560 (560.0 b) TX bytes:560 (560.0 b)

peth0 Encapsulamento do Link: Ethernet Endereço de HW FE:FF:FF:FF:FF:FF
endereço inet6: fe80::fcff:ffff:feff:ffff/64 Escopo:Link
UP BROADCASTRUNNING NOARP MTU:1500 Métrica:1
RX packets:492 errors:0 dropped:0 overruns:0 frame:0
TX packets:122 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:47544 (46.4 KiB) TX bytes:16658 (16.2 KiB)
IRQ:19 Endereço de E/S:0xe400

vif0.0 Encapsulamento do Link: Ethernet Endereço de HW FE:FF:FF:FF:FF:FF
endereço inet6: fe80::fcff:ffff:feff:ffff/64 Escopo:Link
UP BROADCASTRUNNING NOARP MTU:1500 Métrica:1
RX packets:111 errors:0 dropped:0 overruns:0 frame:0
TX packets:345 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:15052 (14.6 KiB) TX bytes:37628 (36.7 KiB)

xenbr0 Encapsulamento do Link: Ethernet Endereço de HW FE:FF:FF:FF:FF:FF
endereço inet6: fe80::200:ff:fe00:0/64 Escopo:Link
UP BROADCASTRUNNING NOARP MTU:1500 Métrica:1
RX packets:202 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:20653 (20.1 KiB) TX bytes:0 (0.0 b)

lab04est011:~#

peth0 -> interface utilizada para fazer o bridge entre as interfaces virtuais e a interface real

vif0.0 -> interfacel utilizada para que o Dom0 se comunque com a rede.

xenbr0 -> bridge que contém peth0 e vifX.Y

Cada interface de rede de cada máquina virtual criada terá uma interface correspondente no Dom0, chamada de vifX.Y, onde X representa o domínio e Y o número da placa de rede da máquina virtual. Resumindo, a primeira interface de rede da terceira máquina virtual se chamaria vif2.0 no Dom0. A segunda interface de rede da primeira máquina virtual se chamaria vif1.1 no Dom0. E por aí vai… lembre-se que a contagem começa com 0 (zero).

  • CRIANDO O SISTEMA BASE (MODELO)

Vamos gerar um sistema base do Debian e usá-lo como modelo para esta e futuras máquinas virtuais que venham a ser criadas. Para fazer isso, utilizamos a ferramenta debootstrap.

O debootstrap cria uma instalação do Debian (apenas sistema base) em um diretório. Vamos criar uma pasta para receber este sistema base.

lab04est011:~# mkdir base

O debootstrap precisa de uma fonte para baixar os arquivos do sistema básico do debian. Podemos usar o próprio CD1 de instalação do Debian, ou até mesmo um repositório online. Neste tutorial vamos utilizar o CD1 do Debian.

Insira o CD1 do Debian Etch na unidade de cdrom e monte-o em /mnt:

lab04est011:~# mount /dev/cdrom /mnt

Agora vamos criar o sistema base na pasta “base”. Esta operação pode demorar um pouco:

lab04est011:~# debootstrap etch base file:/mnt

E desmontamos o cdrom

lab04est011:~# umount /dev/cdrom

Precisamos configurar alguns arquivos da base que não veem configurados pelo debootstrap. Vamos utilizar os arquivos do Dom0, copiando-os para a base e alterá-los quando necessário, na hora de copiar a base para a partição da máquina virtual:

lab04est011:~# cp /etc/fstab base/etc

lab04est011:~# cp /etc/hosts base/etc

lab04est011:~# cp /etc/apt/* base/etc/apt/

lab04est011:~# cp /etc/network/interfaces base/etc/network/

É preciso copiar os módulos do Kernel do XEN para o sistema base:

lab04est011:~# cp -arpv /lib/modules/2.6.18-6-xen-vserver-686 base/lib/modules/

  • CRIANDO AS MÁQUINAS VIRTUAIS

O primeiro passo é criar os volumes lógicos que vão abrigar as máquinas virtuais. Desmonte a partição que vai receber os volumes lógicos, caso ela esteja montada. Neste exemplo é /dev/hda3.

lab04est011:~# umount /dev/hda3

Obs.: Não podemos esquecer de remover eventuais entradas desta pastição no arquivo /etc/fstab !

Preparando a partição para receber os volumes lógicos:

lab04est011:~# pvcreate /dev/hda3

Criando o grupo lógico chamado VM:

lab04est011:~# vgcreate vm /dev/hda3

Agora vamos criar as partições que vão abrigar nossa primeira máquina virtual (vou chamá-la de VM1). Por questões didáticas de simplificação, criarei a máquina virtual utilizando todos os arquivos em uma única partição. Logo, teremos apenas duas partições: / e SWAP.

Criando a partição “/” com 2Gb em /dev/vm/vm1.raiz:

lab04est011:~# lvcreate -L2G -n vm1.raiz vm

Criando a partição SWAP, com 512Mb em /dev/vm/vm1.swap:

lab04est011:~# lvcreate -L512M -n vm1.swap vm

Criando o sistema de arquivos EXT3 na partição “/”:

lab04est011:~# mkfs.ext3 /dev/vm/vm1.raiz

Setando a partição /dev/vm/vm1.swap como swapspace:

lab04est011:~# mkswap /dev/vm/vm1.swap

Agora vamos montar a partição raiz da máquina virtual em /mnt

lab04est011:~# mount /dev/vm/vm1.raiz /mnt

E copiar o sistema base para a partição

lab04est011:~# cp -arpv base/* /mnt/

Precisamos configurar alguns arquivos na máquina virtual. Mas antes, vamos dar um chroot em /mnt

lab04est011:~# chroot /mnt

Agora vamos atualizar o sistema

lab04est011:~# apt-get update

lab04est011:~# apt-get upgrade

Instalar o pacote libc6-xen, que resolve o bug das mensagens do kernel

lab04est011:~# apt-get install libc6-xen

Agora vamos configurar o /etc/fstab

lab04est011:~# vim /etc/fstab

# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/hda2 / ext3 defaults,errors=remount-ro 0 1
/dev/hda1 none swap sw 0 0
/dev/hdb /media/cdrom0 udf,iso9660 user,noauto 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto 0 0

Este é o arquivo é uma cópia do /etc/fstab do Dom0, lembra? Precisámos editá-lo para que se adeque à realidade da nossa máquina virtual, que possui apenas 2 partições (raiz e swap). Altere o arquivo para que ele fique como o abaixo:

# /etc/fstab: static file system information.
#
# <file system> <mount point> <type> <options> <dump> <pass>
proc /proc proc defaults 0 0
/dev/hda2 / ext3 defaults,errors=remount-ro 0 1
/dev/hda1 none swap sw 0 0

Porque escolhemos /dev/hda1 para swap e /dev/hda2 para raiz?? As partições criadas não eram /dev/vm/vm1.raiz e /dev/vm/vm1.swap???

Calma… isso será explicado no passo de criação do arquivo de inicialização da máquina virtual.

Agora vamos configurar a interface de rede da máquina virtual. edite o arquivo /etc/network/interfaces

lab04est011:~# vim /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet dhcp

Neste tutorial utilizaremos um IP atribuído por um servidor DHCP. Neste caso, a configuração acima está adequada. No caso de usarmos IP fixo, devemos configurar este arquivo conforme abaixo:

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address xxx.xxx.xxx.xxx # ip desejado
netmask xxx.xxx.xxx.xxx # máscara de rede
gateway xxx.xxx.xxx.xxx # ip do gateway

No caso de IP fixo, não podemos esquecer de configurar o arquivo /etc/resolv.conf

lab04est011:~# echo nameserver xxx.xxx.xxx.xxx > /etc/resolv.conf

Onde xxx.xxx.xxx.xxx é o IP do servidor DNS.

Agora vamos configurar o arquivo /etc/hosts

lab04est011:~# vim /etc/hosts

127.0.0.1 localhost
127.0.1.1 lab04est011.local lab04est011

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Altere-o para que fique como abaixo:

127.0.0.1 localhost
127.0.1.1 vm1

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

E por último, vamos definir o hostname com o comando

lab04est011:~# echo vm1 > /etc/hostname

E configurar o locales

lab04est011:~# apt-get install locales

lab04est011:~# dpkg-reconfigure locales

Selecione os locales que desejar. Neste caso utilizaremos os listados abaixo por questão de compatibilidade:

[*] pt_BR ISO-8859-1

[*] pt_BR.UTF-8 UTF-8

Depois escolha como padrão “pt_BR.UTF-8″.

Agora saímos do ambiente chroot e desmontamos a partição /dev/vm/vm1.raiz

lab04est011:~# exit

lab04est011:~# umount /dev/vm/vm1.raiz

Vamos agora criar o script de inicialização da máquina virtual.

Os scripts devem ficar na pasta /etc/xen. Vamos criar um para a nossa “vm1″

lab04est011:~# vim /etc/xen/vm1

name = “vm1″
kernel = “/boot/vmlinuz-2.6.18-6-xen-vserver-686″
ramdisk = “/boot/initrd.img-2.6.18-6-xen-vserver-686″
memory = 128
root = “/dev/hda2 ro”
disk = [ 'phy:/dev/vm/vm1.raiz,hda2,w', 'phy:/dev/vm/vm1.swap,hda1,w' ]
vif = [ 'mac=00:00:00:00:00:01' ]

E finalmente chegou o momento de ligarmos a máquina virtual.

lab04est011:~# xm create -c vm1

Entre com o usuário root. O sistema não vai pedir senha porque a mesma ainda nao foi criada, então criá-la:

vm1:~# passwd

E converter o passwd para shadow

vm1:~# pwconv

E pronto!

Para sair do console da máquina virtual, use a sequência de teclas CTRL+].

Para que a máquina virtual inicia automaticamente a cada boot do Dom0, crie a pasta /etc/xen/auto

lab04est011:~# mkdir /etc/xen/auto

E crie links simbólicos apontando para o script de inicialização da máquina:

lab04est011:~# ln -s /etc/xen/vm1 /etc/xen/auto/vm1

  • ADMINISTRAÇÃO DAS MÁQUINAS VIRTUAIS

Abaixo segue uma lista com alguns comandos para administrar as máquinas virtuais:

Desligando uma máquina virtual:

lab04est011:~# xm shutdown -H vm1

Reiniciando uma máquina virtual:

lab04est011:~# xm reboot vm1

Desligando abruptamente uma máquina virtual:

lab04est011:~# xm destroy vm1

ATENÇÃO: Este comando é equivalente ao desligamento abrupto de uma máquina real (ex faltar luz). Só utilize-o em casos extremos, por exemplo, perda de controle da máquina virtual. O uso deste comando poderá causar danos como o corrompimento do filesystem e a perda de dados.

Listando as máquinas virtuais que estão ligadas:

lab04est011:~# xm list

Ao listar as máquinas, poderão aparecer algumas letras que indicam o estado das
mesmas. As principais são:
­ r (running): indica que a máquina está executando alguma tarefa;
­ b (blocked): indica um bloqueio de atividade, geralmente causado por espera para acesso a
dispositivos;
­ p (paused): indica que a VM sofreu pausa (veja a seguir como estabelecer pausa na
execução);
­ s (shutdown): indica que a máquina está em processo de shutdown;
­ c (crashed): indica que máquina sofreu um “crash”. Essa situação deve ser do conhecimento
do hypervisor para que o estado “c” seja listado;
­ d (dying): indica que a máquina está saindo do ar mas ainda não terminou por algum motivo
temporário. Esse estado geralmente ocorre durate shutdown ou crash da máquina.

Um TOP do sistema e das máquinas virtuais:

lab04est011:~# xm top

Pausar uma máquina virtual:

lab04est011:~# xm pause vm1

Tirar a pausa:

lab04est011:~# xm unpause vm1

Mudar a quantidade de memória da máquina virtual em “tempo de execução”:

lab04est011:~# xm mem-set vm1 512

Para maiores informações, e mais comandos, consulte a documentação do XEN, ou digite:

lab04est011:~# man xm

  • COMANDOS ÚTEIS PARA MANIPULAR VOLUMES LÓGICOS

Listar volumes físicos:

lab04est011:~# pvs

Remover volumes físicos

lab04est011:~# pvremove /dev/hda3

Listar os grupos e as suas informações:

lab04est011:~# vgs

Remover um grupo de volumes:

lab04est011:~# vgremove vm

Listar os volumes lógicos definidos:

lab04est011:~# lvs

Remover um volume lógico:

lab04est011:~# lvremove /dev/vm/vm1.raiz

Renomear um volume lógico:

lab04est011:~# lvrename /dev/vm/vm1.taiz /dev/vm/vm2.raiz

Redimensionar um volume lógico:

lab04est011:~# lvresize -L -5G /dev/vm/vm1.raiz

Obs: Ao redimensionar um volume lógico, parte do sistema de arquivos (caso exista) será perdido. Se não houver dados ou sistema de arquivos, bastará formatar o volume lógico (mkfs.ext3 /dev/vm/vm1.raiz, por exemplo). Caso haja dados, a primeira opção será fazer um backup dos mesmos para um posterior retorno. A segunda opção será redimensionar o sistema de arquivos. Para cada tipo de sistema de arquivos haverá um comando próprio para esta ação. É importante ressaltar que o redimensionamento do sistema de arquivos também poderá causar perda de dados.