terça-feira, 25 de outubro de 2011

Backup e restauração de arquivos


Fonte: http://www.devin.com.br/backup-e-restauracao-de-arquivos/
Autor:Hugo Cisneiros (Eitch)

Dicas sobre como fazer backups e organizá-los no Linux. Ahhh… Backups, só precisamos dele quando não temos!
A maioria das pessoas costuma não pensar muito em backups, até o momento que acontece alguma coisa com o sistema e os dados são perdidos. Fazer backup é sempre bom, mesmo que for um backup bem simples: melhor prevenir.
Quando se faz uma cópia dos arquivos mais importantes do sistema, vale a pena ressaltar que uma política de backup tem que ser definida antes de tudo. Para que os backups sejam eficientes, é necessário que as cópias dos dados se espalhem o máximo possível. Destinos de backups:
  • Coloque os dados em um disco separado (HD removível ou não);
  • Grave cópias em uma mídia externa (CD, DVD, fita);
  • Transfira cópias pela rede para sistemas que estejam longe;
O terceiro item seria a melhor alternativa, quando se tem uma alta capacidade de transferência entre um destino e outro.
Para fazer os backups, utilizaremos o comando tar. Exemplo:
# mkdir -p /var/lib/backup
# cd /var/lib/backup
# tar -cjf maquina-backup-full-20030212.tar.bz2 /etc /var/named /var/log

Armazenamos os arquivos dos diretórios /etc, /var/named e /var/log no arquivo maquina-backup-full-20030212.tar.bz2, compactado com bzip2. Com este arquivo, teremos um backup completo dos três diretórios especificados.

Mais um exemplo:
# tar -cjf maquina-home-full-20030212.tar.bz2 /home

Este outro arquivo terá o backup do diretório /home, ou seja, o diretório dos usuários do sistema.

Agora vamos supor que algum programa alterou o conteúdo do diretório /etc, adicionando um arquivo chamado teste e modificando o arquivo crontab. Para não ter que fazer um backup completo novamente, podemos incrementar este backup somente com as modificações feitas recentemente. Para isso eu utilizo o seguinte comando:
# find /etc /var/named /var/log -mtime -1 -type f -print | \
  tar -cjf maquina-backup-incremental-20030212.tar.bz2 -T -

O comando find vai procurar por arquivos modificados numa faixa de 1 dia (usado para backups incrementais diários) e armazená-los no arquivo maquina-backup-incremental-20030212.tar.bz2.

Agora um backup feito com os arquivos modificados numa faixa de uma semana:
# find /etc /var/named /var/log -mtime -7 -type f -print | \
  tar -cjf maquina-backup-incremental-20030212.tar.bz2 -T -

Backup Remoto


Fonte: http://www.devin.com.br/backup_remoto/
Autor:Hugo Cisneiros (Eitch)
Um tutorial que explica como fazer um backup simples de arquivos no sistema (backups completos ou diferenciais) e armazenar em um servidor remoto via FTP.

Nem sempre as pessoas pensam em backup, só quando acontece alguma coisa com seu sistema. Um backup sempre é bom, mesmo que for bem simples. Vou apresentar através deste manual algumas formas de se fazer backup de arquivos do sistema Linux, opcionalmente armazenando estas cópias em um servidor remoto via FTP. Com isso os administradores de redes podem centralizer os backups em uma máquina, para depois armazenar ou em uma fita dat, ou em cd-rom, ou seja lá o que for.
Para fazer os backups, utilizaremos o clássico comando “tar“, que serve justamente para isso: armazenar arquivos em um arquivo. Vamos primeiro criar um exemplo de arquivo de backup:
# tar -cf maquina-backup-full-20030212.tar /etc /var/named /var/log
# bzip2 maquina-backup-full-20030212.tar

O que fiz foi armazenar os arquivos dos diretórios “/etc“, “/var/named” e “/var/log” no arquivo maquina-backup-20030212.tar, e depois compactá-lo no formato bzip2 (uma compactação melhor, mas que requer mais processamento), gerando então o arquivo “maquina-backup-20030212.tar.bz2“. Este mesmo comando pode ser feito em uma linha só:
# tar -jcf maquina-backup-full-20030212.tar.bz2 /etc /var/named /var/log

Com este arquivo, teremos um backup completo dos três diretórios especificados. Vamos à mais um exemplo:
# tar -zcf maquina-backup-full-20030212.tar.gz /etc /var/named /var/log
# tar -zcf maquina-home-full-20030212.tar.gz /home

Aqui eu criei dois arquivos. Um arquivo contém o backup que criamos anteriormente, e outro arquivo terá o backup do diretório “/home“, ou seja, o diretório dos usuários do sistema. A diferença aqui é que eu usei a opção “z” e não a “j“. Isso quer dizer que o tar vai usar o programa gzip ao invés do bzip2.

Agora vamos supor que eu alterei o conteúdo do diretório “/etc“, adicionando um arquivo chamado “teste” e modificando o arquivo “crontab“. Para não ter que fazer um backup total novamente, eu posso incrementar este backup somente com as modificações feitas. Para isso eu utilizo o seguinte comando:
# find /etc /var/named /var/log -mtime -1 -type f -print | \
tar zcvf maquina-backup-incremental-20030212.tar.gz -T -

Aqui o Linux vai procurar por arquivos modificados numa faixa de 1 dia (usado para backups incrementais diários) e armazená-los no arquivo “maquina-backup-incremental-20030212.tar.gz“. Vejamos agora um backup feito com os arquivos modificados numa faixa de uma semana:
# find /etc /var/named /var/log -mtime -7 -type f -print | \
tar zcvf maquina-backup-incremental-20030212.tar.gz -T -

Agora se você quiser automatizar, e poupar trabalho, use para a nomeação do arquivo o comando “date“, gerando assim a data no arquivo. Veja o exemplo dessa compactação:
# tar zcf backup-full-`date +%Y%m%d`.tar.gz /etc
# ls
backup-full-20030212.tar.gz

Agora que você já aprendeu a fazer os backups, vamos armazená-lo remotamente. Eu assumo que você já tenha configurado um servidor FTP em outra máquina, se você ainda não fez isso, faça. Depois adicione um usuário com uma certa senha para acessar este ftp. Aqui no tutorial vamos usar como usuário: “backup” e como senha: “segredo“. Utilize o seguinte script para automatizar o processo:
#!/bin/bash
#
DATA=`date +%Y_%m_%d`

# Dados do arquivo de backup
MAQUINA="sakura"
ARQUIVO="backup-full-$MAQUINA-$DATA.tar.gz"
DIRETORIOS="/etc /var/log"

# Dados do servidor FTP
HOST_FTP="192.168.0.1"
USUARIO_FTP="backup"
SENHA_FTP="segredo"

# A partir daqui não precisa mais editar.
# Cria o arquivo .tar.gz no /tmp (Temporário)
cd /tmp
tar zcf /tmp/$ARQUIVO $DIRETORIOS

# Acessa o FTP e coloca os arquivos
ftp -in <<EOF
   open $HOST_FTP
   user $USUARIO_FTP $SENHA_FTP
   bin
   lcd /tmp
   dele $ARQUIVO
   put $ARQUIVO
   bye
EOF

# Remove os arquivos temporarios
rm -rf /tmp/$ARQUIVO

Pronto! Lembre-se de proteger este arquivo aos olhos alheios, porque a senha do usuário do FTP está visível. Este pequeno script shell cria um backup dos diretórios “/etc” e “/var/log“, conecta ao servidor FTP e envia o arquivo. Você só precisará alterar as variáveis do começo do arquivo para as suas necessidades.

Com isso você terá o backup remoto que precisar. Modificando o script você pode criar também backups incrementais, e junto com o crontab, pode programar para as máquinas ficarem fazendo backups diários, semanais, mensais, ou como você quiser. Lembre-se sempre que os backups uma vez na máquina remota, devem ser colocados por segurança em uma mídia como fita DAT ou CD-ROM. Cabe à você decidir :) Bom proveito! Depois criarei mais dicas sobre o assunto.

Instalando o Webmin

Fonte:http://www.devin.com.br/webmin/

Autor:Hugo Cisneiros (Eitch)

Aprenda a fazer a simples instalação do Webmin, um poderoso gerenciador de computador via Web feito em Perl. Ótimo para administrar máquinas e servidores remotamente.

O Webmin é um gerenciador de sistema baseado numa interface web. Com este utilitário você pode administrar suas máquinas pela rede através de um navegador comum. Ele é bem completo e tem módulos para configuração de várias e várias coisas. É uma mão e tanta para os administradores de sistema.

Algumas das tarefas que você pode fazer com o Webmin atualmente:

  • Mudar senhas, configurar o crontab, configurar scripts de inicialização, backup, configuração do pam, quotas, gerência de processos, pacotes, usuários e grupos.
  • Configura e administrar servidores majordomo, cvs, sendmail, qmail, postfix, fetchmail, jabber, samba, postgresql, proftpd, ssh, squid, wu-ftpd, apache, dhcp, dns bind, MySQL.
  • Configura rede, exportações NFS, NIS, PPP, túneis SSL.
  • Adminstração de impressoras, gerenciadores de boot, cd-roms, raid, partições, lvm, clustering.
  • Além de outras coisas como shell via web, gerenciador de arquivos, módulos perl, etc.

Então dá pra ver que o sistema é bem completo né? E ele é também amplamente usado. Vamos através deste tutorial saber como instalar e configurar de um modo bem prático e direto.
Download e Instalação

O download do Webmin pode ser feito a partir do endereço:

A versão que utilizei neste tutorial foi a versão 1.060, em formato .tar.gz. Se você usa uma distribuição que suporte o formato .rpm, seria melhor você utilizar este tipo de formato já que é compatível com o resto do sistema. Mas aqui neste tutorial iremos a partir do código-fonte:

# tar zpfx webmin-1.060.tar.gz
# mv webmin-1.060 /usr
# cd /usr
# ln -s webmin-1.060 webmin

Como você pôde ver nos comandos acima, eu descompactei num diretório qualquer o arquivo .tar.gz e depois movi o conteúdo para o diretório “/usr”. Você escolhe este diretório, e eu escolhei o “/usr”. Depois eu apenas fiz um link simbólico chamado “webmin” para o diretório “webmin-1.060″, para que quando eu atualizar, eu possa manter a versão sem ter que mudar os diretórios (apenas mudo os links para a versão que eu quero que esteja funcionando).


Agora vamos executar o script de instalação do Webmin. Abaixo irei mostrar passo a passo cada uma das perguntas que voc6e deverá responder, explicando elas. Os meus comentários vão estar entre parênteses. Vamos lá:

# cd /usr/webmin
# ./setup.sh
***********************************************************************
* Welcome to the Webmin setup script, version 1.060 *
***********************************************************************
Webmin is a web-based interface that allows Unix-like operating
systems and common Unix services to be easily administered.

Installing Webmin in /usr/local/webmin-1.060 ...

***********************************************************************
Webmin uses separate directories for configuration files and log files.
Unless you want to run multiple versions of Webmin at the same time
you can just accept the defaults.

(Aqui vai ser o diretório com todas as configurações do Webmin. Estas
configurações vão estar sempre disponíveis para todas as versões.
Config file directory [/etc/webmin]: (enter)

(Aqui vai estar o arquivo de log do Webmin, ou seja, o que os usuários
do programa estão fazendo :)
Log file directory [/var/webmin]: (enter)

***********************************************************************
Webmin is written entirely in Perl. Please enter the full path to the
Perl 5 interpreter on your system.

Como eu falei anteriormente, o Webmin é feito em Perl, então ele vai
necessitar do Perl. Aqui você indica onde o Perl está. Geralmente ele
está no /usr/bin/perl mesmo, então não precisamos mudar este valor.
Full path to perl (default /usr/bin/perl): (enter)

Testing Perl ...
Perl seems to be installed ok

***********************************************************************
Operating system name: Redhat Linux
Operating system version: 7.3

***********************************************************************
Webmin uses its own password protected web server to provide access
to the administration programs. The setup script needs to know :
- What port to run the web server on. There must not be another
web server already using this port.
- The login name required to access the web server.
- The password required to access the web server.
- If the webserver should use SSL (if your system supports it).
- Whether to start webmin at boot time.

Aqui dizemos em qual porta o Webmin vai funcionar. Para que assim
você acesse http://maquina:porta e entre no Webmin. A porta 10000 é
um valor saudável, então vamos usar esse valor mesmo.
Web server port (default 10000):

No Login Name você indica o nome do usuário administrador. Coloque
um usuário que você queira, ou coloque admin ou root mesmo.
Login name (default admin):

Agora você digita a senha para o login anterior. E depois novamente
para confirmar.
Login password:
Password again:

A mensagem abaixo indica que o sistema não possui a biblioteca do
Perl para usar SSL. Neste tutorial não vamos usar SSL, então isso não
importa muito. Se você tem essa biblioteca, escolha se você deseja
instalar o Webmin num servidor SSL (encriptado) ou não. Aqui não
usaremos isso, apesar de ser bom :)
The Perl SSLeay library is not installed. SSL not available.

Iniciar o Webmin na hora do boot? Selecione não, vamos colocar uma
linha de comando na inicialização para ficar menos complicado.
Start Webmin at boot time (y/n):

***********************************************************************
Creating web server config files..
..done

Creating access control file..
..done

Inserting path to perl into scripts..

Creating start and stop scripts..
..done

Copying config files..
..done

Creating uninstall script /etc/webmin/uninstall.sh ..
..done

Changing ownership and permissions ..
..done

Running postinstall scripts ..
..done

Attempting to start Webmin mini web server..
Starting Webmin server in /usr/local/webmin-1.060
..done

***********************************************************************
Webmin has been installed and started successfully. Use your web
browser to go to

http://seuhost.de.maquina:10000/

and login with the name and password you entered previously.

Pronto! O Webmin foi instalado com êxito. Agora você já pode usar o Webmin, colocando no seu navegador o endereço que o Webmin disse (http://seuhost.de.maquina:10000/) e colocando o usuário e senha de administrador que você criou. Se você quiser por acaso desinstalar o Webmin, utilize o comando:

/etc/webmin/uninstall.sh

Agora você poderá usufruir das facilidades que o Webmin traz para a administração do seu sistema. No futuro estarei colocando aqui algumas dicas sobre o uso do Webmin. Bom proveito ;)


Cópias remotas de arquivos

Fonte:http://www.devin.com.br/copias-remotas-de-arquivos/
Autor: Hugo Cisneiros (Eitch)
Uma das tarefas mais comuns de um administrador de sistemas é copiar arquivos de uma máquina para outra. Em rede, isto pode ser feito de diversas maneiras, como por exemplo: FTP, HTTP, SSH, RSYNC, entre outros. Este artigo mostra as principais formas de fazer isso. Vou tentar ser o mais direto possível.
Vamos usar aqui dois servidores exemplo:
  • servidor1.example.com (192.168.0.1)
  • servidor2.example.com (192.168.0.2)

SSH

O protocolo do SSH é seguro o suficiente para fazer cópias entre servidores em uma rede e é sempre o protocolo recomendado. Vamos agora para como fazer isso:
Copiando um arquivo simples de uma máquina para outra
servidor1$ scp maluco@servidor2.example.com:~/arquivo.txt ./

O comando acima copia o arquivo.txt do HOME (~) do usuário maluco, do servidor2 para o diretório atual do servidor1. Bem parecido com o comando cp.

Copiando todo um diretório de uma máquina para outra
servidor1$ scp -r maluco@servidor2.example.com:/home/maluco /tmp

Ou seja, copio o diretório maluco do servidor2 para a máquina atual, no diretório /tmp.
servidor1$ scp -Cpr maluco@servidor2.example.com:/home/maluco /tmp

O parâmetro -C agora faz a mesma ação anterior, só que agora compactando os dados antes de enviar pela rede. O ssh usa formato gzip e pode-se usar essa opção caso se queira economizar na banda de rede.

O parâmetro -p preserva todos modos e timestamps de arquivos, ideal para fazer uma cópia mais exata.

Usando o tar e o ssh para cópias mais exatas ainda

Por exemplo, um backup de sistema. O tar é ótimo para criar um arquivamento que preserva todas as permissões, usuários e grupos donos, modos, links simbólicos, etc. Desse jeito dá pra juntar os dois:
servidor1$ tar -cpzf - /etc | ssh maluco@servidor2.example.com "cat > /var/lib/backup/servidor1-etc.tar.gz"

O comando acima vai compactar o diretório /etc, só que ao invés de jogar o resultado em um arquivo, joga como STDIN, que o comando ssh pega e executa no servidor2 o comando cat, que por sua vez pega o STDIN e joga para o arquivo /var/lib/backup/servidor1-etc.tar.gz.

Em outras palavras, ele compacta o diretório /etc e já joga no outro servidor direto. Isso economiza tempo e espaço no servidor origem.
servidor1$ tar -C /home -cpzf - maluco | ssh maluco@servidor2.example.com "tar -C /home -xpzf -"

Agora ao invés de usar o cat, ele jogou diretamente o diretório na máquina remota, descompactado. É parecido com a opção -rp do scp, só que com a vantagem do tar: preserva modos, permissões, donos, links, etc.

Para mais informações sobre STDIN, STDOUT, pipes (|), tenho um outro artigo falando sobre isso.


HTTP e FTP


A primeira coisa que você precisa saber é que eu não vou ensinar a compartilhar os arquivos por HTTP e FTP neste artigo. É um assunto totalmente diferente, então vamos assumir que você já tenha os arquivos servidos via HTTP ou FTP em algum lugar :)

Pra quem já é um pouco acostumado com esses protocolos, um programa sempre vem na mente: wget. Mas além dele também há um comando muito útil para fazer operações mais complexas: o lftp.

Pegando arquivos e páginas via HTTP/FTP
servidor1$ wget -c 'http://servidor2.example.com/arquivo.txt' -O /home/maluco/informacoes.txt

O comando acima pega o arquivo.txt do servidor1 e o escreve (-O) em /home/maluco/informacoes.txt. Se você não especificar o -O, ele coloca no diretório atual com o mesmo nome remoto (no caso, arquivo.txt). O -c é para ele tente continuar um download caso o arquivo já exista, e a não ser que você queira sobrescrever os arquivos destino, é bom sempre usar a opção.
servidor1$ wget -c -r 'http://www.devin.com.br'

Já este vai fazer uma cópia recursiva de todo o site www.devin.com.br. Isso inclui os links e imagens, que o wget pega automaticamente do código HTML.

Mirrors com lftp

E falando em recursividade, o lftp fornece ótimos recursos para fazer este tipo de download. Por exemplo, eu estou afim de criar um espelho interno do repositório de pacotes do CentOS. Vamos supor que eu tenha escolhido o mirror kernel.org, via HTTP:
servidor1$ lftp
lftp :~> open http://mirrors.kernel.org/centos/5.5/os/x86_64/
lftp mirrors.kernel.org:/centos/5.5/os/x86_64> mirror -verbose
[...]

O lftp se encarrega de examinar o diretório e pegar todo o seu conteúdo: arquivos e sub-diretórios, salvando no diretório atual. A opção –verbose vai mostrando na tela o que o lftp está fazendo (analizando os diretórios, baixando os arquivos…).

O mesmo pode ser feito com um comando só, um ótimo jeito para se fazer isso automaticamente em shell-scripts:
servidor1$ lftp -c "open http://mirrors.kernel.org/centos/5.5/os/x86_64/ && mirror --verbose"

Ou seja, com o parâmetro -c, consigo executar os dois comandos (conectar, fazer mirror) de modo não-interativo, e depois ele sai do programa (para não sair, usa-se o -e ao invés de -c). O mirror também analisa e continua os downloads de onde parou, caso precise.

A mesma coisa pode ser feita via FTP, vamos supor agora que é preciso também de usuário e senha…
servidor1$ lftp -c "open ftp://usuario:senha@mirrors.kernel.org/centos/5.5/os/x86_64/ && mirror --verbose"

O lftp ainda suporta uma porrada de opções. São centenas. Nesse caso, a manpage sempre ajuda (man lftp). Uma das opções que eu acho muito legal é a exclude. Com a opção exclude, eu consigo fazer um download recursivo, retirando arquivos com nomes que não quero. Por exemplo:
servidor1$ lftp -c "set mirror:exclude-regex '(\.svn|SRPMS)' && open ftp://mirrors.kernel.org/centos/5.5/os/ && mirror --verbose"

No comando acima, eu estou excluindo qualquer arquivo ou diretório que tenha o contenha o nome .svn ou SRPMS. Isso me faz baixar apenas os diretórios i386 e x86_64. Fácil não? Aí é só usar a imaginação. Os exemplos aqui são muito comuns na hora de criar espelhos de repositórios e arquivos entre sistemas.

Mirror reverso (upload de arquivos)

No caso de mirror de um mirror reverso, ao invés de pegar os arquivos de um sistema remoto, eu coloco os arquivos no sistema remoto. A sintaxe é praticamente a mesma:
servidor1$ lftp -c "lcd /var/lib/backup && open ftp://usuario:senha@servidor2.example.com/backup/ && mirror -R --verbose"

O que mudou aqui: o comando lcd vai para o diretório local, onde os arquivos se encontram. Depois eu abro uma conexão FTP com servidor2.example.com, utilizando um usuário e senha. Em seguida eu faço um mirror reverso (opção -R), que ao invés de fazer download dos arquivos, vai fazer upload. Simples dessa forma.


RSYNC


O rsync foi feito especialmente para você sincronizar os arquivos de dois lugares e por isso ele é otimizado para isso. Geralmente é utilizado para copiar diretórios e seus conteúdos da forma mais exata possível (preservando permissões, modos, timestamps). Além disso, antes de começar a copiar, ele analisa o destino (ou origem, dependendo do caso) e vê o que realmente tem que ser copiado. Se um arquivo já existe no destino, para que copiar de novo?

O rsync pode funcionar via protocolo próprio, ou via ssh. Se existe um servidor rsync, pode-se usar ele. Para criar um, vai um pouco fora do escopo deste artigo, mas não é tão complicado também. Na maioria das vezes, você vai querer usar o rsync via ssh, que é o caso mais comum.

Sincronizando um diretório no servidor remoto
servidor1$ rsync -e "ssh" -avr /var/lib/backup/ maluco@servidor2.example.com:/var/lib/backup/

No comando acima, utilizei o ssh (-e “ssh”) para fazer o transporte. As opções -avr copiam recursivamente (-r), mostrando tudo o que for sendo copiado (-v) e da forma mais exata possível, preservando (-a). Até aí tudo bem…

… Mas preste bastante atenção! O rsync é muito sensível com a barra no final da origem e destino. Então coloque isso na cabeça:


  • Quando não se usa a barra no final, o rsync copia o diretório e todo seu conteúdo;
  • Quando usar a barra no final, o rsync copia apenas o conteúdo do diretório.

Confuso? Eu também fiquei. No exemplo anterior, eu copiei o conteúdo do diretório backup (localizado em /var/lib) para o /var/lib/backup do servidor2. Isso significa que o diretório /var/lib/backup deve existir no servidor2, senão é capaz de dar erro. Ficou assim:
servidor2$ ls /var/lib/backup
1   11  13  15  17  19  20  22  24  26  28  3   31  33  35  37  39  40  42  44  46  48  5   6  8
10  12  14  16  18  2   21  23  25  27  29  30  32  34  36  38  4   41  43  45  47  49  50  7  9

E se eu tirar uma barra?
servidor1$ rsync -e "ssh" -avr /var/lib/backup maluco@servidor2.example.com:/var/lib/backup/

Nesse caso, olha só como ia ficar:
servidor2$ ls /var/lib/backup
backup
servidor2$ ls /var/lib/backup/backup
1   11  13  15  17  19  20  22  24  26  28  3   31  33  35  37  39  40  42  44  46  48  5   6  8
10  12  14  16  18  2   21  23  25  27  29  30  32  34  36  38  4   41  43  45  47  49  50  7  9

Como tirei a barra, ele também copiou o diretório backup, ao invés de apenas seu conteúdo. Então lembre-se sempre… Com barra: só conteúdo; Sem barra: diretório e conteúdo.

Assim como lftp, o rsync também aceita excluir arquivos por nome:
servidor1$ rsync -e "ssh" --exclude='.svn' -avr /var/www/html/aplicacao maluco@servidor2.example.com:/var/www/html

No comando acima, sincronizamos o diretório /var/www/html/aplicacao, mas excluindo qualquer operação com arquivos que tem no nome “.svn“. Uma prática muito comum por aí.

Por padrão, o rsync não remove arquivos e diretórios do destino. Isso significa que a sincronização é apenas em uma mão. Se no servidor1 novos arquivos surgirem, ou arquivos forem modificados, o rsync vai sincronizar. Mas se um arquivo ou diretório for removido, ele não será removido no servidor2. Para resolver isso, usa-se a opção –delete:
servidor1$ rsync -e "ssh" --exclude='.svn' --delete -avr /var/www/html/aplicacao maluco@servidor2.example.com:/var/www/html

Dessa forma você evita de ficar acumulando “lixo” no servidor2.

Há no entanto um problema com este método. O problema é que os dados, enquanto armazenados não estão em criptografados. Se alguém entra e rouba o server, vão ter acesso aos dados. Depois, se alguém rouba o server de backup, não há procedimentos de backup offsite, para guardar o backup fora da empresa. Também dessa forma não há checagem de integridade de dados. Quando se usa um cp para copiar os dados, eles podem chegar do outro lado com defeito e não será feita nenhuma checagem disso (md5checksum) caso a mídia apresente algum defeito, um badblock, etc. O melhor mesmo é usar um sistema de backup, como o Nimbus Opensource Backup, GPL e prevê todas as boas práticas em backup. Está disponível em http://www.trynimbus.com grátis (GPL).

Configurando interfaces de rede manualmente no Centos

Autor:eu próprio.

Tendo como base a interface eth0 (a primeira) devemos aceder ao seguinte da seguinte forma ao à configuração da interface:

vi /etc/sysconfig/network-scripts/ifcfg-eth0

Utilizo o vi para a edição.

Observe a sintaxe abaixo:

DEVICE=eth0
BOOTPROTO=static
DHCPCLASS=
HWADDR=00:31:25:56:A6:B2
IPADDR=192.168.1.181
NETMASK=255.255.255.0
ONBOOT=yes

Fazendo isto (com  sintaxe semelhante) estamos a colocar o ip da interface estaticamente como 192.168.1.181 e dizendo que isto será feito no momento do boot do sistema.

Em seguida entre aqui:

vi /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=CentOS
GATEWAY=192.168.1.230

Aqui definimos a rede com o hostname CentOS e o gateway 192.168.1.230

Após isto reinicie o serviço de rede:

/etc/init.d/network restart

Depois podemos até alterar os dns para acesso a web:

vi /etc/resolv.conf

Neste ficheiro colocamos assim:

nameserver 200.165.132.148
nameserver 200.165.132.155

Este é o modo simples de definir os dns que queremos.

Para concluir ficou assim

FILE:icfg-eth0
DEVICE="eth0"
NM_CONTROLLED="yes"
ONBOOT="yes"
HWADDR=00:0C:29:FC:CC:DB
TYPE=Ethernet
#BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
#novo
BOOTPROTO=static
IPADDR=192.168.1.181
NETMASK=255.255.255.0

FILE:network
NETWORKING=yes
HOSTNAME=CentOS6
#novo
GATEWAY=192.168.1.230

FILE:resolv.conf
nameserver 192.168.1.5
nameserver 192.168.1.230

segunda-feira, 24 de outubro de 2011

Configuração Manual do CentOS– Correr repositório do DVD. Instalando rede manual

Comecei por fazer uma instalação “minimal”  do CentOS 6.0.

Na configuração da rede não me apercebi e a rede ficou  desativada.

Ao correr o ifconfig só me aparecia a interface de loopback.

Pesquisando na net descobri o comando lspci para verificar as característica da placa.

Ao correr o comando lspci dava mensagem de comando inválido ou inexistente.

Descobri que tinha de instalar o pacote pciutils.

Tentei o yum e nada. O primeiro repositório era um site …como não tenho rede o yum dava erro e nada. Há que preparar o yum para correr do dvd.

Mãos à obra…

Primeiramente, precisamos desabilitar todos os repositórios do Yum. Para isso, basta editar todos os arquivos .repo que estiverem no diretório /etc/yum.repos.d/, trocando ou criando todas as ocorrências de enabled=1 por enabled=0.

Podemos fazer isso com um único comando:

# for Arquivo in /etc/yum.repos.d/*.repo

   do

   sed -i 's/\(enabled=\)1/\10/' $Arquivo

   done

Em seguida, verificamos se já existe ou criamos um arquivo media.repo no diretório /etc/yum.repos.d/ com o seguinte conteúdo:

[media]

name=Fedora 7 i386 DVD

baseurl=file:///media/CENTOSDVD/

enabled=1

gpgcheck=0

Basta montar agora o DVD.

# mount /dev/dvd /media/CENTOSDVD

Já podemos correr o YUM. Começamos por limpar a atualizar.

# yum clear

# yum check-update

Está ok podemos agora instalar o pciutils

# yum search pciutils

# yum install pciutils.x386_64

Agora já podemos correr o comando

# lspci |grep net

e ver os dados da nossa placa.

Concluí entretanto que afinal a placa estava instalada. No entanto desligada.

Bastava para isso ter corrido o  comando

# ip link

 image

 

 

 

 

Verificamos que não existe eth0 e que o eht1 está desligado (DOWN)

No ficheiro de configuração da placa eth0  em /etc/sysconfig/network-scripts/ifcfg-eth0 temos

ONBOOT=no

A placa ficava sempre desligada no arranque. Podemos ligá-la desde já com o comando /etc/sysconfig/networking-scripts/ifup-eth e obtemos a seguinte mensagem de erro:

image

 

 

 

isto deve-se ao facto de a placa estar com designada por eth1 e  não por eth0.

Não sei porque isto acontece mas talvez se deva ao que acontece depois de copiarmos ou movermos uma máquina virtual no VM Ware.

Quando iniciamos no VM Ware uma máquina virtul copiada, a primeira pergunta que o VM Ware faz é se copiamos ou movemos a máquina. Consoante a resposta ele mantem o Mac Address da placa de rede ou gera um novo Mac Adreess.

Se respondermos que copiámos, ele gera um novo mac para a placa e aqui que o problema é criado. No ficheiro /etc/sysconfig/network-scripts/ifcfg-eth0  temos a linha com o Mac da placa “HWADDR=00:30:48:56:A6:NE” que depois não coincide com o Mac gerado pelo VM Ware. Julgo que é que provoca a alteração do alias da placa de eth0 para eth1 (mas não tenho a certeza). O Linux sabe quem são as eth’s pelos seus endereços de hardware.

Mude a variável HWADDR no seu arquivo ifcfg-eth0 para compatibiliza-lo com o endereço da VM e pronto..

Além de termos que mudar novamente o name de eth1 para eth0 no arranque, temos também que alterar o mac adreess na variável HWADDR no arquivo ifcfg-eth0 e compatibiliza-lo com o endereço da VM. 

Para testar que funciona podemos para esta sessão alterar o name da placa  eth1 com o seguinte comando:

# ip link set dev eth1 name eth0

# ls –l /sys/class/net

# /etc/init.d/network restart

Devemos no entanto alterar o Mac Address. Para isso devemos consultar o mac da VM. Ver imagens seguintes:

imageimage

O nosso problema continua por resolver. Sempre que reiniciamos o eth1 mantem-se.

Pesquisando na Net descobri onde são guardadas os nomes das interfaces de rede: eth0, eth1 etc. Este arquivo no CentOS é o /etc/udev/rules.d/70-persistent-net.rules.

Para editá-lo utilizei o editor vi:

# vi /etc/udev/rules.d/70-persistent-net.rules

image

 

 

 

 

 

 

 

 

 

 

 

 

Verificamos então que temos dois interfaces com o name “eth0” e com mac address diferentes. Verificamos tb que um dos registos “eth0” tem o mesmo mac address que o “eth1”. Daí os problemas.

Removi as duas primeiras entradas relativas ao eth0 com mac diferente e a relativa ao eth1. Reiniciei a máquina e a rede está up…..

Conclusão:

Quando se diz ao VMWARE que se trata de uma cópia, para que não haja conflitos com a outra máquina virtual ele gera um novo mac address para a placa de rede. Ao gerar um novo mac, o anterior que tinha sido assumido pelo SO deixa de existir.

Como o SO não encontra esse endereço físico, gera um novo interface (eth1) com o novo mac. 

Usando o DVD do Fedora como repositório do Yum

Quando instalamos o Fedora

Usuários Fedora sabem que o Yum busca as informações sobre os pacotes, por padrão, na Internet, de forma que não é possível utilizá-lo sem estar conectado à rede mundial.
Descreverei aqui como utilizar o DVD de instalação do Fedora 7 como repositório do Yum, permitindo usar esse sistema de gerenciamento de pacotes quando a Internet não estiver disponível.
Primeiramente, precisamos desabilitar todos os repositórios do Yum. Para isso, basta editar todos os arquivos .repo que estiverem no diretório /etc/yum.repos.d/, trocando todas as ocorrências de enabled=1 por enabled=0. Podemos fazer isso com um único comando:
# for Arquivo in /etc/yum.repos.d/*.repo

   do
   sed -i 's/\(enabled=\)1/\10/' $Arquivo
   done

Em seguida, criamos um arquivo media.repo no diretório /etc/yum.repos.d/ com o seguinte conteúdo:

[media]

name=Fedora 7 i386 DVD
baseurl=file:///media/Fedora%207%20i386%20DVD/
enabled=1
gpgcheck=0
Nota: na linha 3, %20 é o código ASCII para espaço em branco. Se você colocar Fedora 7 i386 DVD o Yum causará erro. Você também não pode esquecer de colocar a barra (/) no final da URL.

Pronto. Agora, basta adicionar o DVD no drive e tanto o yum quando o Pirut funcionarão perfeitamente, usando os softwares disponíveis no DVD, sem necessidade de conexão à internet ou a uma rede local.

Dispositivos no Linux

Fonte: http://www.devin.com.br/dispositivos/

Autor: Hugo Cisneiros (Eitch)

Os dispositivos são uma coisa que temos que conhecer no Linux, senão agente se perde aos poucos nas configurações mais básicas. Por isso fiz esse tutorial tentando explicar algo sobre eles…

O que são dispositivos?

Um dispositivo é todo o componente de hardware, e do sistema operacional. Um dispositivo é “algo especial” que é compartilhado com o Kernel, ou seja, um exemplo de dispositivo são as impressoras, CD-ROMs, modems, portas, mouse, HDs, etc. No Linux, os dispositivos físicos são tratados como arquivos. Estes arquivos são um tipo especial no sistema de arquivos e se encontram no diretório /dev. Se você der um ls neste diretório, verá que existe um pouquínho de arquivos (Bota pouquinho nisso :)). Cada arquivo neste diretório corresponderá a um dispositivo de acordo com o seu tipo.

Se você usava DOS/Windows antes, você acessava o drive C:, lembra? No Linux não existe isso! Vai ser um dispositivo no lugar… Você vai usar isso o tempo todo, porque você vai mexer com mouse, com impressora, IDE’s, SCSI’s, etc. Então aqui vai alguns arquivos do /dev e seus respectivos dispositivos:

/dev/hdXX

Aqui é correspondete as Interfaces IDEs, ou seja, tudo que tiver conectado nos cabos IDEs :) Exemplos, podemos citar HD’s e CD-ROM’s. O xx significa qual IDE, onde o primeiro x corresponde a qual IDE, e o segundo x (opcional) corresponde a partição. Veja a tabela à seguir:

Dispositivo Descrição
/dev/hda IDE Primária Master
/dev/hda1 Partição 1 da IDE Primária Master
/dev/hda2 Partição 2 da IDE Primária Master
/dev/hdb IDE Primária Slave
/dev/hdb1 Partição 1 da IDE Primária Slave
/dev/hdb2 Partição 2 da IDE Primária Slave
/dev/hdc IDE Secundária Master
/dev/hdc1 Partição 1 da IDE Secundária Master
/dev/hdc2 Partição 2 da IDE Secundária Master
/dev/hdd IDE Secundária Slave
/dev/hdd1 Partição 1 da IDE Secundária Slave
/dev/hdd2 Partição 2 da IDE Secundária Slave

Perceba aqui que cada hdx vai até os números 2, mas não é apenas até o 2, pode ir mais longe. Dependendo de quantas partições tiver o seu HD, pode ser 3, ou 4, ou 9 por exemplo.

/dev/fdX

Aqui é o dispositivo equivalente ao drive de disquete, onde o x corresponde a qual driver. Caso você tenha apenas um drive, esse drive vai ser o /dev/fd0. Se tiver 2 drives, o primeiro será /dev/fd0 e o segundo /dev/fd1, e por aí vai.

/dev/ttyX

Quando você se loga no seu Linux, você acaba de se logar nesse terminal. Ou seja, um terminal serve para voc6e se logar e usar uma shell (interpretador de comandos). O /dev/ttyX corresponde a cada terminal, onde X vai ser substituído pelo número do terminal (são dezenas se quiser). Pode ser /dev/tty1 (Terminal 1), /dev/tty3 (Terminal 3), /dev/tty8 (Terminal 8) e por aí vai… até você enjoar :)

Você também pode se deparar com /dev/ttypX. Neste caso é para terminais acessados por telnet/ssh.

/dev/ttySX

Portas seriais! Na versão 2.2.x do kerne, estas portas seriais correspondem ao modem, ao mouse, e outras coisas ligadas nas ‘COMs’. Veja a tabela:

Dispositivo Descrição
/dev/ttyS0 COM1 (Porta serial 1)
/dev/ttyS1 COM2 (Porta serial 2)
/dev/ttyS2 COM3 (Porta serial 3)
/dev/ttyS3 COM4 (Porta serial 4)

Agora se você usa um kernel velho de versão anterior a 2.2.x, ao invés de ser /dev/ttySX, vai ser /dev/cuaX. Ou seja, você terá os equivalentes como /dev/cua0, /dev/cua1, /dev/cua2 e /dev/cua3. E estes dispositivos /dev/cuaX são usados para determinar os modems.

/dev/lpX

Corresponde a porta da impressora ou porta de um serviço paralelo. X é o número correspondente a porta… 0 = LPT1 por exemplo.

/dev/plipX

Esse dispositivo corresponde a uma conexão de cabo paralelo. O X será o número correspondente a porta, como no exemplo anterior.

/dev/console

Este é um dispositivo especial, simbolizando os consoles (terminais não-gráficos).

/dev/null

Este é um dispositivo nulo, ou seja, tudo que você mandar ou se referir a ele, será nulamente mandado para o inferno :)

Outros

Os dispositivos são muitos e listar todos eles aqui não seria tão legal assim. Você pode explorar o diretório /dev procurando saber sobre eles. Se você por acaso apagou um dispositivo e quer saber como criá-lo, utilize o script /dev/MAKEDEV. Basicamente você usa este script assim:

# /dev/MAKEDEV ttyS3

Isto irá criar o dispositivo ttyS3. Para mais informações sobre a criação de dispositivos, utilize a manpage do MAKEDEV ou do mknod. Na verdade o /dev/MAKEDEV é apenas um script para intermediar o usuário e o comando mknod… O mknod é o que faz o trabalho mais árduo :)


Montando os dispositivos


Primeiro eu espero que você tenha lido sobre o que é um dispositivo. Agora vamos saber como se usar um dispositivo, ou seja, um HD, um disquete, um CD-ROM, etc. O comando que usaremos aqui é o mount, que pelo próprio nome, podemos ver que ele serve para ‘montar’ dispositivos em um certo lugar.


Vamos falar primeiro sobre como montar o disco flexível. Para fazê-lo é o seguinte. O Linux trata todos os seus dispositivos como arquivos device, estes arquivos estão localizados no diretório “/dev”. Para o caso do disco flexível, o Linux trata como /dev/fdx, onde x é o número do dispostivo: o primeiro será fd0, o segundo será fd1, e assim por diante. Aqui no caso, estamos com um driver de disquete, que é o /dev/fd0. Para montar o disco flexível então, colocamos o disquete, e executamos o seguinte comando:

# mount /dev/fd0 /diretorio_onde_o_disco_vai_ser_montado

O diretório_onde_o_disco_vai_ser_montado tem que existir, e tem que estar totalmente vazio. Este diretório, que você pode nomear como quiser funciona como se você estivesse no disquete. Agora se você quer montar outro disquete, você terá que desmontar o disquete montado primeiro, para depois poder montar outro. Para o desmonte, usa-se o comando “umount”:

# umount /dev/fd0 (ou)
# umount /diretorio_onde_o_disco_esta_montado

Você pode também fazer o seguinte, criar um shell script, que se chama, por exemplo de ‘diskon’ (Para ativar) e ‘diskoff’ (Para desativar). Então para melhor utilização, coloque este arquivo em um diretório PATH, ou então coloque o PATH no diretório onde você quiser colocar os scripts.


Agora vamos montar uma partição. É o mesmo esquema de montar o disco flexível, só que o arquivo do dispositivo é diferente. Para partições em um HD IDE, os nomes dos dispositivos são /dev/hdxx, onde o primeiro x é a letra correspondente ao HD (na ordem a, b, c, d, e por aí vai), e o segundo x é correspondente ao número da partição. Para partições em um HD SCSI, os nomes dos dispositivos são /dev/sdxx, onde o primeiro x é a letra correspondente ao HD (na ordem a, b, c, d, e por aí vai), e o segundo x é correspondente ao número da partição. Se eu quero montar a partição /dev/hda2 (HD número 1, partição número 2), eu faço:

# mount /dev/hda2 /diretorio

E para desmontar, usa-se o comando umount:

# umount /dev/hda2 (ou)
# umount /diretorio

Existe também no comando mount, o parâmetro -t, que vai indicar que tipo de sistema de arquivos a partição usa (FAT32, FAT16, minix, ext2, UMSDOS, etc). Se você não colocar esta opção, o comando força uma compatibilidade para a montagem. O recomendado é colocar esta opção, pois às vezes o mount não consegue detectar qual o sistema de arquivos, e gera um erro. Um exemplo do uso da opção -t é:

# mount -t vfat /dev/hda2 /diretorio

Este comando montará uma partição FAT32 em /diretorio. Como eu disse anteriormente, utilizar-se de shell scripts facilita seu trabalho. Agora vamos montar um CD-ROM. O mesmo esquema, só que você deve saber qual o dispositivo referente ao seu CD-ROM, que tem como nome /dev/hdx, onde x é a letra correspondente à posição do CD-ROM na IDE. Para montar um exemplo, façamos:

# mount /dev/cdrom /mnt/cdrom

Para desmontar, a mesma coisa de sempre:

# umount /dev/cdrom (ou)
# umount /mnt/cdrom

Nota: Se você der uma olhada no arquivo /dev/cdrom, você verá que ele não é um dispositivo, e sim um link simbólico para o dispositivo correspondente ao CD-ROM (/dev/hdx). Isso quer dizer que você pode substituir o /dev/cdrom pelo /dev/hdx tranqüilamente, assim como pode também modificar o link simbólico para apontar para outro dispositivo.


Existe outro método de montagem muito mais prático do que os citados acima… É uma pré-configuração de montagem no arquivo /etc/fstab. Este arquivo contém as informações de montagem para os dispositivos e seus diretórios. Por exemplo, quando a sua distribuição inicia, ela procura no /etc/fstab para saber onde está a raiz do seu sistema, e vai montar no /. Também contém informações de montagem para os diretórios especiais como o /proc, e até mesmo para o uso da memória SWAP. Vejamos aqui o meu arquivo /etc/fstab como exemplo para estudarmos ele:

$ cat /etc/fstab
/dev/hda2 swap swap defaults 0 0
/dev/hda5 / reiserfs defaults 0 0
/dev/hda1 /boot ext2 defaults 1 1
/dev/fd0 /mnt/floppy auto user,noauto 0 0
/dev/cdrom /mnt/cdrom iso9660 user,noauto,ro 0 0
none /proc proc defaults 0 0
none /dev/pts devpts gid=5,mode=620 0 0

Viu este exemplo? Por exemplo, peguemos a segunda linha. Esta segunda linha é a minha raiz, que está na partição /dev/hda5, será montada automaticamente (‘defaults’) no diretório “/” durante a inicialização. E esta partição tem o sistema de arquivos ReiserFS. Na primeira temos a montagem da memória SWAP… E vejamos a linha que começa com /dev/cdrom. Aqui facilita as coisas porque os parâmetros ‘user,noauto,ro’ significam que qualquer usuário pode montar o CD-ROM (user), não é montado automaticamente na inicialização (noauto) e é montado como somente leitura. Qual a diferença? O comando mount só pode ser usado pelo root, mas com essa opção no /etc/fstab, um usuário comum pode montar o cd-rom apenas com o comando “mount /mnt/cdrom”, ou “mount /dev/cdrom”. A sintaxe deste arquivo não é muito difícil, e vendo este exemplo aqui, você pode muito bem criar suas próprias configurações para dar mais praticidade no seu uso com os dispositivos no Linux! Mexa à vontade, mas nunca nas linhas que já vêm, pois se não o Linux pode não achar sua partição e poderá não conseguir iniciar o sistema, e você terá de bootar com um bootdisk para consertar isto… Então mexa, mas pense duas vezes antes de mexer :)

Como aceder ao DVD no Linux pela consola (CentOS)

Verificar na diretoria /dev. O diretório dev é o local onde se localizam os arquivos especiais ou os arquivos de dispositivos.

Existem dispositivos que talvez precisem ser criados manualmente no diretório dev para isso existe um comando chamado MAKEDEV, com este comando é possivel criar os arquivos do dispositivo necessário.

O diretório /dev contém arquivos associados a dispositivos físicos. Essa associação visa permitir que os drivers apontem para os dispositivos corretos (essa é uma explicação simplista).
A montagem vale apenas para dispositivos que contenham um sistema de arquivos e consiste em associar um diretório qualquer a um volume formatado (partição, unidade lógica, sistema de arquivos em rede - CIFS ou NFS, p.ex.). Assim, pode-se acessar arquivos daquele volume como se fossem parte do sistema de arquivos raiz (/).
Quanto ao /mnt e ao /media, não existe nada de particular nesses diretórios, a não ser a padronização determinada pelo FHS. A recomendação é que qualquer dispositivo removível seja montado em um subdiretório de /media (/media/floppy para disquetes e /media/cdrom para CDs, p.ex.) e que o diretório /mnt seja usado apenas para montagem temporária (p.ex., para copiar dados para uma partição recém-formatada). Nem todas as distros respeitam essa recomendação.

Assim decobri que no CentOS 6.0 a pasta /dev/dvd é um link para /dev/sr0 . Mas isso não interessa podemos fazer a montagem com /dev/dvd.

Criei uma diretoria em /mnt para o meu DVD:

mkdir /mnt/dvd

De seguida montei o dvd:

mount /dev/dvd /mnt/dvd

Podemos testar fazendo:

ls /mnt/dvd

É tudo…