Resumo

Este artigo documenta a instalação remota do sistema operacional FreeBSD quando o console do sistema remoto não está disponível. A idéia principal por trás deste artigo é o resultado de uma colaboração com Martin Matuska mm@FreeBSD.org com informações valiosas fornecidas por Paweł Jakub Dawidek pjd@FreeBSD.org.


1. Background

Existem muitos provedores de hospedagem de servidores no mundo, mas poucos deles oferecem suporte oficial ao FreeBSD. Eles geralmente fornecem suporte para uma distribuição Linux® para ser instalada nos servidores que eles oferecem.

Em alguns casos, estas empresas instalarão sua distribuição Linux® preferida se você solicitá-la. Usando esta opção, tentaremos instalar o FreeBSD. Em outros casos, eles podem oferecer um sistema de recuperação para ser usado em uma emergência. É possível usá-la para os nossos propósitos também.

Este artigo aborda as etapas básicas de instalação e configuração necessárias para inicializar uma instalação remota do FreeBSD com suporte para RAID-1 e ZFS.

2. Introdução

Esta seção resumirá o objetivo deste artigo e explicará melhor o que é tratado aqui. As instruções incluídas neste artigo beneficiarão aqueles usuários que usam serviços fornecidos por provedores de colocation que não suportam o FreeBSD.

  1. Como mencionamos na seção Background, muitas das empresas de hospedagem de servidores renomadas fornecem algum tipo de sistema de recuperação, que é inicializado a partir de sua LAN e acessível por SSH. Eles normalmente fornecem esse suporte para ajudar seus clientes a consertar sistemas operacionais quebrados. Como este artigo explicará, é possível instalar o FreeBSD com a ajuda destes sistemas de recuperação.

  2. A próxima seção deste artigo descreverá como configurar e compilar uma versão mínima do FreeBSD na máquina local. Essa versão eventualmente será executada na máquina remota a partir de um ramdisk, o que nos permitirá instalar um sistema operacional completo do FreeBSD a partir de um espelho FTP usando o utilitárioSysinstall.

  3. O restante deste artigo descreverá o procedimento de instalação em si, bem como a configuração do sistema de arquivos ZFS.

2.1. Requisitos

Para continuar com sucesso, você deve:

  • Ter um sistema operacional acessível pela rede com acesso SSH

  • Entender o processo de instalação do FreeBSD

  • Familiarizar-se com o utilitário sysinstall(8)

  • Ter a imagem ISO de instalação do FreeBSD ou o CD de instalação à mão

3. Preparação - mfsBSD

Antes que o FreeBSD possa ser instalado no sistema de destino, é necessário construir a imagem mínima do sistema operacional FreeBSD que será inicializada a partir do disco rígido. Dessa forma, o novo sistema pode ser acessado a partir da rede e o restante da instalação pode ser feito sem acesso remoto ao console do sistema.

O conjunto de ferramentas mfsBSD pode ser usado para construir uma pequena imagem do FreeBSD. Como o nome mfsBSD sugere ("mfs" significa "sistema de arquivos em memória"), a imagem resultante é executada inteiramente de um ramdisk. Graças a este recurso, a manipulação de discos rígidos não será limitada, portanto, será possível instalar um sistema operacional completo do FreeBSD. A página inicial do mfsBSD inclui links para a versão mais recente do conjunto de ferramentas.

Por favor, note que os detalhes de como o mfsBSD funciona internamente e como tudo se encaixa está além do escopo deste artigo. O leitor interessado deve consultar a documentação original do mfsBSD para mais detalhes.

Faça o download e extraia a versão mais recente do mfsBSD e altere seu diretório de trabalho para o diretório em que os scripts mfsBSD residirão:

# fetch http://mfsbsd.vx.sk/release/mfsbsd-2.1.tar.gz
# tar xvzf mfsbsd-2.1.tar.gz
# cd mfsbsd-2.1/

3.1. Configuração do mfsBSD

Antes de inicializar o mfsBSD, algumas opções importantes de configuração precisam ser definidas. O mais importante que temos que acertar é, naturalmente, a configuração da rede. O método mais adequado para configurar opções de rede depende se sabemos de antemão o tipo de interface de rede que usaremos e o driver da interface de rede a ser carregado para o nosso hardware. Vamos ver como o mfsBSD pode ser configurado em ambos os casos.

Outra coisa importante para definir é a senha do usuário root. Isto pode ser feito editando o conf/loader.conf. Por favor, veja os comentários incluídos no arquivo.

3.1.1. O método conf/interfaces.conf

Quando a placa de rede instalada é desconhecida, é possível usar os recursos de detecção automática do mfsBSD. Os scripts de inicialização do mfsBSD podem detectar o driver correto a ser usado, com base no endereço MAC da interface, se configurarmos as seguintes opções em conf/interfaces.conf:

mac_interfaces="ext1"
ifconfig_ext1_mac="00:00:00:00:00:00"
ifconfig_ext1="inet 192.168.0.2/24"

Não esqueça de adicionar a informação defaultrouter ao conf/rc.conf:

defaultrouter="192.168.0.1"

3.1.2. O método conf/rc.conf

Quando o driver da interface de rede é conhecido, é mais conveniente usar conf/rc.conf para opções de rede. A sintaxe deste arquivo é a mesma usada no arquivo padrão rc.conf(5) do FreeBSD.

Por exemplo, se você souber que uma interface de rede re(4) estará disponível, você pode definir as seguintes opções em conf/rc.conf:

defaultrouter="192.168.0.1"
ifconfig_re0="inet 192.168.0.2/24"

3.2. Construindo uma imagem do mfsBSD

O processo de construção de uma imagem mfsBSD é bastante simples.

O primeiro passo é montar o CD de instalação do FreeBSD, ou a imagem ISO de instalação em /cdrom. Por exemplo, neste artigo vamos supor que você tenha baixado o ISO do FreeBSD 10.1-RELEASE. Montar esta imagem ISO no diretório /cdrom é fácil de se fazer com o utilitário mdconfig(8):

# mdconfig -a -t vnode -u 10 -f FreeBSD-10.1-RELEASE-amd64-disc1.iso
# mount_cd9660 /dev/md10 /cdrom

Como as versões recentes do FreeBSD não contêm conjuntos de distribuição regulares, é necessário extrair os arquivos de distribuição do FreeBSD dos arquivos de distribuição localizados na imagem ISO:

# mkdir DIST
# tar -xvf /cdrom/usr/freebsd-dist/base.txz -C DIST
# tar -xvf /cdrom/usr/freebsd-dist/kernel.txz -C DIST

Em seguida, construa a imagem mfsBSD inicializável:

# make BASE=DIST

O make acima deve ser executado a partir do nível superior da árvore de diretórios do mfsBSD, por exemplo, ~/mfsbsd-2.1/.

3.3. Inicializando o mfsBSD

Agora que a imagem mfsBSD está pronta, ela deve ser carregada para o sistema remoto executando o sistema de recuperação ou uma distribuição Linux® pré-instalada. A ferramenta mais adequada para essa tarefa é o scp:

# scp disk.img root@192.168.0.2:.

Para inicializar corretamente a imagem mfsBSD, ela deve ser colocada no primeiro dispositivo (inicializável) da máquina em questão. Isso pode ser feito usando este exemplo, desde que o sda seja o primeiro dispositivo de disco inicializável:

# dd if=/root/disk.img of=/dev/sda bs=1m

Se tudo correu bem, a imagem deve estar agora no MBR do primeiro dispositivo e a máquina pode ser reinicializada. Observe a máquina inicializar corretamente com a ferramenta ping(8). Uma vez que tenha retornado on-line, deve ser possível acessá-la com o ssh(1) como o usuário root usando a senha configurada.

4. Instalação do sistema operacional do FreeBSD

O mfsBSD foi inicializado com sucesso e deve ser possível efetuar login através do ssh(1). Esta seção descreverá como criar e rotular os slices, configurar o gmirror para o RAID-1 e como usar o Sysinstall para instalar uma distribuição mínima do sistema operacional FreeBSD.

4.1. Preparação de Discos Rígidos

A primeira tarefa é alocar espaço em disco para o FreeBSD, ou seja: criar slices e partições. Obviamente, o sistema atualmente em execução é totalmente carregado na memória do sistema e, portanto, não haverá problemas com a manipulação dos discos rígidos. Para completar esta tarefa, é possível usar Sysinstall ou fdisk(8) em conjunto com o bsdlabel(8).

No início, marque todos os discos do sistema como vazios. Repita o seguinte comando para cada disco rígido:

# dd if=/dev/zero of=/dev/ad0 count=2

Em seguida, crie as slices e atribua um label usando sua ferramenta preferida. Embora seja considerado mais fácil usar o Sysinstall, um método poderoso e provavelmente com menos bugs será usar as ferramentas padrões de console UNIX®, como o fdisk(8) e o bsdlabel(8), o qual também será abordado nesta seção. A primeira opção está bem documentada no capítulo Instalando o FreeBSD do Handbook do FreeBSD. Como foi mencionado na introdução, este artigo apresentará como configurar um sistema com recursos RAID-1 e ZFS. Nossa configuração consistirá de uma pequena partição / (root) , de um dataset composto por um /usr e um /var , todos espelhados com o gmirror(8), e o restante do espaço em disco alocado para um sistema de arquivos zpool(8) espelhado do ZFS. Por favor, observe que o sistema de arquivos ZFS será configurado depois que o sistema operacional FreeBSD for instalado e inicializado com sucesso.

O exemplo a seguir descreverá como criar slices e labels, inicializar o gmirror(8) em cada partição e como criar um sistema de arquivos UFS2 em cada partição espelhada:

# fdisk -BI /dev/ad0 (1)
# fdisk -BI /dev/ad1
# bsdlabel -wB /dev/ad0s1 (2)
# bsdlabel -wB /dev/ad1s1
# bsdlabel -e /dev/ad0s1 (3)
# bsdlabel /dev/ad0s1 > /tmp/bsdlabel.txt && bsdlabel -R /dev/ad1s1 /tmp/bsdlabel.txt (4)
# gmirror label root /dev/ad[01]s1a (5)
# gmirror label var /dev/ad[01]s1d
# gmirror label usr /dev/ad[01]s1e
# gmirror label -F swap /dev/ad[01]s1b (6)
# newfs /dev/mirror/root (7)
# newfs /dev/mirror/var
# newfs /dev/mirror/usr
1 Crie uma slice cobrindo todo o disco e inicialize o código de inicialização contido no setor 0 do disco fornecido. Repita este comando para todos os discos rígidos no sistema.
2 Escreva um label padrão para cada disco, incluindo o código de bootstrap.
3 Agora, edite manualmente o label do disco fornecido. Consulte a página de manual do bsdlabel(8) para descobrir como criar partições. Crie as partições a para o sistema de arquivos / (root), b para swap, d para /var, e para /usr e finalmente f, que será usado posteriormente para o ZFS.
4 Importe o label recém-criado para o segundo disco rígido, para que ambos os discos sejam rotulados da mesma maneira.
5 Inicialize o gmirror(8) em cada partição.
6 Note que -F é usado para a partição de swap. Isso instrui o gmirror(8) a assumir que o dispositivo está no estado consistente após a falha de energia/sistema.
7 Crie um sistema de arquivos UFS2 em cada partição espelhada.

4.2. Instalação do sistema

Esta é a parte mais importante. Esta seção irá descrever como instalar a distribuição mínima do FreeBSD nos discos rígidos que preparamos na seção anterior. Para atingir este objetivo, todos os sistemas de arquivos precisam ser montados para que o Sysinstall possa gravar o conteúdo do FreeBSD nos discos rígidos:

# mount /dev/mirror/root /mnt
# mkdir /mnt/var /mnt/usr
# mount /dev/mirror/var /mnt/var
# mount /dev/mirror/usr /mnt/usr

Quando terminar, inicie o sysinstall(8). Selecione a instalação Personalizada no menu principal. Selecione Opções e pressione Enter. Com a ajuda das teclas direcionais, mova o cursor para o item Install Root, pressione Espaço e altere-o para /mnt. Pressione Enter para enviar suas alterações e sair do menu Opções pressionando q.

Note que este passo é muito importante e se for ignorado, o Sysinstall não poderá instalar o FreeBSD.

Vá para o menu Distributions, mova o cursor com as teclas de seta para Minimal e selecione-o pressionando Space. Este artigo usa a distribuição mínima para salvar o tráfego de rede, porque o próprio sistema será instalado por ftp. Saia deste menu escolhendo Exit.

Os menus Partition e Label serão ignorados, pois são inúteis agora.

No menu Media, selecione FTP. Selecione o espelho mais próximo e deixe o Sysinstall assumir que a rede já está configurada. Você retornará ao menu Personalizar.

Finalmente, realize a instalação do sistema selecionando a última opção, Commit. Saia do sysinstall quando terminar a instalação.

4.3. Etapas pós-instalação

O sistema operacional do FreeBSD deve estar instalado agora; no entanto, o processo ainda não está concluído. É necessário executar algumas etapas pós-instalação para permitir que o FreeBSD inicialize no futuro e consiga efetuar o login no sistema.

Você deve agora executar chroot(8) para o sistema recém-instalado para concluir a instalação. Use o seguinte comando:

# chroot /mnt

Para completar nosso objetivo, execute estas etapas:

  • Copie o kernel GENERIC para o diretório /boot/kernel:

    # cp -Rp /boot/GENERIC/* /boot/kernel
  • Crie os arquivos /etc/rc.conf, /etc/resolv.conf e /etc/fstab. Não se esqueça de configurar corretamente as informações de rede e ativar o sshd em /etc/rc.conf. O conteúdo do /etc/fstab será semelhante ao seguinte:

    # Device                Mountpoint      FStype  Options         Dump    Pass#
    /dev/mirror/swap        none            swap    sw              0       0
    /dev/mirror/root        /               ufs     rw              1       1
    /dev/mirror/usr         /usr            ufs     rw              2       2
    /dev/mirror/var         /var            ufs     rw              2       2
    /dev/cd0                /cdrom          cd9660  ro,noauto       0       0
  • Crie o /boot/loader.conf com o seguinte conteúdo:

    geom_mirror_load="YES"
    zfs_load="YES"
  • Execute o seguinte comando, que disponibilizará o ZFS na próxima inicialização:

    # echo 'zfs_enable="YES"' >> /etc/rc.conf
  • Adicione usuários adicionais ao sistema usando a ferramenta adduser(8). Não se esqueça de adicionar um usuário ao grupo wheel para que você possa obter acesso root após a reinicialização.

  • Verifique todas as suas configurações.

O sistema deve estar pronto para a próxima inicialização. Use o comando reboot(8) para reinicializar seu sistema.

5. ZFS

Se o seu sistema sobreviveu à reinicialização, agora deve ser possível efetuar login. Bem-vindo à nova instalação do FreeBSD, executada remotamente sem o uso de um console remoto!

O único passo restante é configurar o zpool(8) e criar algum sistemas de arquivos zfs(8). Criar e administrar o ZFS é muito simples. Primeiro, crie um pool espelhado:

# zpool create tank mirror /dev/ad[01]s1f

Em seguida, crie alguns sistemas de arquivos:

# zfs create tank/ports
# zfs create tank/src
# zfs set compression=gzip tank/ports
# zfs set compression=on tank/src
# zfs set mountpoint=/usr/ports tank/ports
# zfs set mountpoint=/usr/src tank/src

Isso é tudo. Se você está interessado em mais detalhes sobre o ZFSno FreeBSD, por favor consulte a seção ZFS do o Wiki do FreeBSD.