NAS feito em casa, parte 2 – o Software

No primeiro artigo sobre este assunto eu mencionei a lista de componentes de hardware. Neste artigo irei descrever brevemente o processo de configuração do NAS/Time Capsule de pobre. Caso queira mais informações a respeito de cada processo, verifique as referências no final deste artigo.

Gentoo Linux

Preferencialmente utilizo normalmente Gentoo Linux para servidores. É uma distribuição muito bem projetada e organizada. Seu modelo de configuração e manutenção é bastante consistente e fácil de manter. O único ponto negativo a meu ver é a demora para instalar softwares pois estes devem ser compilados. Esta demora pode ser amenizada com o uso de ccache no portage.

Pré-requisitos

  1. É necessário saber utilizar Linux. Meu propósito aqui não é ensinar todas as tecnologias envolvidas, mas sim, mostrar como configurar o NAS para funcionar parcialmente como um “Time Capsule”;
  2. Linux 2.6.28 ou mais recente. Não testei com versões inferiores;
  3. Netatalk 2.0.3 ou mais recente. Não testei com versões inferiores;
  4. Avahi 0.6.24 ou mais recente. Não testei com versões inferiores;

Primeiros passos

  1. Instalar o Gentoo Linux. A instalação pode parecer complicada, pois por padrão é praticamente toda manual. Existe a opção de utilizar o instalador gráfico existente no LiveCD, mas por uma questão de gosto pessoal eu não utilizo. Para saber mais veja aqui. Eu instalei o Gentoo Linux inteiro no Compact Flash. Como o Compact Flash estava configurado para ser Master no canal IDE, durante toda a instalação ele foi acessado através do dispositivo /dev/hda.
  2. Já que o Compact Flash é um pouco lento para escrita, para otimizar a compilação de programas criei uma partição tmpfs para o diretório de compilação do portage. Meu fstab inclui a linha abaixo:
    1. shm            /var/tmp/portage    tmpfs    nodev,uid=250,gid=250    0 0
  3. Configurei o kernel apropriado para a placa D945GCLF incluindo alguns acessórios USB que pretendo utilizar no futuro (bluetooth e webcam). Se estiver utilizando a mesma placa e quiser poupar tempo, baixe aqui a configuração pronta do kernel 2.6.28 para a placa mãe Intel D945GCLF. Para utilizar a configuração, é só descompactar com gunzip e movê-la para o arquivo .config dentro do diretório de código fonte de seu kernel atual (/usr/src/linux) e prosseguir com a compilação e instalação do kernel. Se estiver utilizando um kernel mais recente, não tem problema, é só utilizar o comando make oldconfig e responder as questões que estiverem faltando configurar.
    1. ATENÇÃO: A configuração de kernel que utilizo não tem habilitado o uso de dispositivos IDE, o que faz com que o Compact Flash seja acessado através do dispositivo /dev/sda ao invés de /dev/hda. Considere isto quando for editar o arquivo /etc/fstab e quando for configurar o Grub.

Configuração do RAID

A placa mãe que utilizei não possui recursos de RAID via hardware, portanto fiz RAID-1 via software com o próprio Linux e mdadm. Para configurar o RAID, faça o seguinte:

  1. Instale o mdadm no Gentoo
    1. emerge mdadm
  2. Crie apenas uma partição em cada um dos HDs de 1.5TB com o tamanho máximo possível. Normalmente eu utilizo o cfdisk para fazer isto:
    1. cfdisk /dev/sdb
    2. cfdisk /dev/sdc
  3. Configure o RAID-1 (espelhamento) com mdadm:
    1. mdadm --create --verbose /dev/md0 --level=1 \
          --raid-devices=2 /dev/sdb1 /dev/sdc1
    2. A combinação de kernel e mdadm que utilizei faz a detecção automática do RAID durante o boot. Isto faz com que não seja necessário nenhum outro passo de configuração do RAID, além do mencionado acima;
    3. Recomendo aguardar o término da reconstrução do RAID-1. Com o hardware que utilizei, a reconstrução levou cerca de 3 horas para terminar. Para saber o estado da reconstrução, monitore o arquivo /proc/mdstat;
  4. Formate a partição do RAID-1 com seu sistema de arquivos preferido. Eu utilizei ext3 neste momento, mas pretendo migrar para ext4 após algumas versões novas de kernel. ;-)
    1. mke2fs -j /dev/md0
  5. Crie o ponto de montagem de sua partição de armazenamento. Eu utilizei um padrão semelhante ao do Mac OS X, criando em /Volumes/Storage:
    1. mkdir -p /Volumes/Storage
  6. Configure o /etc/fstab para montar automaticamente a partição de armazenamento. A linha do meu fstab ficou conforme o exemplo abaixo, já com algumas opções de otimização:
    1. /dev/md0  /Volumes/Storage   ext3   noatime   0 0
  7. Neste ponto recomendo um reboot do servidor, para que seja um teste se as partições serão montadas como esperado.

Netatalk

O Netatalk implementa o protocolo AFP (Apple Filing Protocol) que é um protocolo de rede que oferece serviços de tranferência de arquivos para o Mac OS X. Para aqueles que não estão acostumados com o AFP, ele serve o mesmo propósito que o protocolo SMB da plataforma Windows e o protocolo NFS da plataforma Unix.

Mas então porque não utilizar SMB ou NFS para o Time Capsule? Em teoria todos estes deverão funcionar, no entanto a utilização de AFP trará algumas vantagens futuras, quando o Netatalk 2.1 for lançado.

Compatibilidade do Netatalk com Mac OS X Leopard

A atual versão do Netatalk (2.0.3) implementa a espeficação do AFP 3.1. O Mac OS X Leopard implementa o AFP 3.2. Apesar da diferença ser pequena, é o suficiente para complicar um pouco a configuração desde Time Capsule de pobre. O AFP 3.2 implementa alguns comandos internos novos que só serão implementados na versão 2.1 do Netatalk. Segundo algumas listas de discussões estas funções já foram implementadas no código fonte da árvore HEAD do desenvolvimento do Netatalk. Se quiser arriscar esta versão, será necessário baixar o código através do CVS.

Apesar desta incompatibilidade, é possível utilizar perfeitamente o Netatalk 2.0.x como servidor AFP para o Time Machine. As únicas ressalvas são:

  1. O primeiro backup do Time Machine exige uma intervenção manual para criar uma imagem sparsebundle. Quando chegar a hora irei mostrar como se faz;
  2. Não deixe o disco encher. Alguns rumores espalhados por fóruns na Internet advertem que se o disco encher o backup se auto destruirá. Mais informações aqui. Futuramente pretendo adotar uma das soluções encontradas para evitar este problema e caso consiga, documentarei neste blog.

Instalação e Configuração

  1. Instale o netatalk no Gentoo:
    1. emerge netatalk
  2. Crie o usuário guest que será utilizado sempre que algum Mac tentar conectar no servidor sem utilizar usuário e senha. Este passo não é obrigatório, mas é interessante deixar alguns compartilhamentos acessíveis para visitas, como por exemplo o diretório de Downloads ou de Músicas:
    1. useradd -d /Volumes/Storage/Guest -m -g users -s /bin/false guest
  3. Adicione a linha abaixo no /etc/netatalk/afpd.conf. Esta é a única linha de configuração no arquivo. As demais linhas do arquivo são apenas comentários:
    1. - -transall -uamlist uams_randnum.so,uams_dhx.so,uams_guest.so
          -nosavepassword -advertise_ssh -guestname "guest"
  4. Altere as linhas abaixo do arquivo /etc/netatalk/netatalk.conf conforme exemplificado:
    1. ATALKD_RUN=no
    2. PAPD_RUN=no
    3. CNID_METAD_RUN=yes
    4. AFPD_RUN=yes
    5. TIMELORD_RUN=no
    6. A2BOOT_RUN=no
    7. AFPD_GUEST=guest
  5. Crie os usuários que terão seu diretório home no storage, bem como o diretório de seus backups do Time Machine:
    1. useradd -d /Volumes/Storage/Herbert -m -g users -s /bin/false herbert
    2. passwd herbert
    3. mkdir ~herbert/.TimeMachine/
  6. Configure os compartilhamentos do Netatalk no arquivo /etc/netatalk/AppleVolumes.default. A primeira linha configura o compartilhamento do diretório home de cada usuário. Dependendo de qual usuário utilizar na autenticação via Finder, aparecerá seu respectivo home. A segunda linha configura o diretório .TimeMachine que será utilizado como raiz para os backups:
    1. ~/ "$u" allow:herbert cnidscheme:cdb options:usedots,upriv
    2. ~/.TimeMachine "$u TimeMachine" allow:herbert,fulano
          cnidscheme:cdb options:usedots,upriv
  7. (opcional) Configure outros compartilhamentos, como Downloads, um diretório Shared (compartilhado) para troca de arquivos, etc:
    1. /Volumes/Storage/Downloads $b allow:herbert,fulano,ciclano,guest
          cnidscheme:cdb options:usedots,upriv
    2. /Volumes/Storage/Shared $b allow:herbert,fulano,guest
          cnidscheme:cdb options:usedots,upriv
  8. Execute o netatalk e configure-o para inicializar automaticamente no boot:
    1. /etc/init.d/atalk start
    2. rc-update add atalk default

Neste ponto já é possível acessar os compartilhamentos via rede, mas somente através do Command-K no Finder (ou menu Go -> Connect to Server…).

Avahi

Avahi é um daemon de descoberta de serviços de rede e fará com que o servidor apareça automáticamente no Finder. Para instalá-lo, siga os passos descritos abaixo:

  1. Habilite opções de compilação do avahi:
    1. echo net-dns/avahi howl-compat mdnsresponder-compat dbus \
          >> /etc/portage/package.use
  2. Compile o avahi:
    1. emerge avahi
  3. Crie o arquivo /etc/avahi/services/afpd.service e coloque o conteúdo abaixo:
    1. <?xml version="1.0" standalone='no'?>
      <!DOCTYPE service-group SYSTEM "avahi-service.dtd">
      <service-group>
      	<name replace-wildcards="yes">%h</name>
      	<service>
      		<type>_afpovertcp._tcp</type>
      		<port>548</port>
      	</service>
      	<service>
      		<type>_device-info._tcp</type>
      		<port>0</port>
      		<txt-record>model=AirPort</txt-record>
      	</service>
      </service-group>
      
  4. Execute o avahi e configure-o para executar automaticamente na inicialização do servidor:
    1. /etc/init.d/avahi-daemon start
    2. rc-update add avahi-daemon default

Pronto! Em alguns instantes o Finder de seu Mac deverá exibir o servidor na lista do menu lateral esquerdo. :-)

Sugestões

Caso queira utilizar este storage com Windows, recomendo a instalação do Samba e sua configuração de forma que permita acessar os compartilhamentos da mesma forma que o Netatalk foi configurado.

Em seguida…

No próximo artigo desta série irei descrever o processo para configurar o Time Machine de forma que consiga utilizar o servidor para efetuar seus backups.

Referências

http://www.kremalicious.com/2008/06/ubuntu-as-mac-file-server-and-time-machine-volume/

http://episteme.arstechnica.com/eve/forums/a/tpc/f/942005082731/m/370002065931?r=782005065931#782005065931

http://en.gentoo-wiki.com/wiki/RAID/Software

http://www.gentoo-wiki.info/HOWTO_Share_Directories_via_AFP

http://en.gentoo-wiki.com/wiki/Share_Directories_using_AFP

http://en.wikipedia.org/wiki/Apple_Filing_Protocol

This entry was posted in Apple, Armazenamento, Linux/Unix and tagged , , , , , , , , , . Bookmark the permalink.

One Response to NAS feito em casa, parte 2 – o Software

  1. Diego says:

    Camarada, muito bom a sua série de artigos.

    Eu acho que valeria uma atualização, uma vez que já saiu o Netatalk 2.1.

    Abraços e parabéns.
    Diego

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>