Instalação Remota do Sistema Operacional FreeBSD Sem um Console Remoto

Daniel Gerzo

Nota Legal

FreeBSD is a registered trademark of the FreeBSD Foundation.

Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this document, and the FreeBSD Project was aware of the trademark claim, the designations have been followed by the “™” or the “®” symbol.

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
1Crie 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.
2Escreva um label padrão para cada disco, incluindo o código de bootstrap.
3Agora, 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.
4Importe o label recém-criado para o segundo disco rígido, para que ambos os discos sejam rotulados da mesma maneira.
5Inicialize o gmirror(8) em cada partição.
6Note 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.
7Crie 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.