    Instalac,ao Remota do Sistema Operacional FreeBSD Sem um Console Remoto

  Daniel Gerzo

     <danger@FreeBSD.org>

   Revisao: 2df4b5dff8

   Copyright (c) 2008 Projeto de Documentac,ao do FreeBSD

   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 "(TM)" or the "(R)"
   symbol.

   2018-09-06 00:50:15 +0000 por Edson Brandi.
   Resumo

   Este artigo documenta a instalac,ao remota do sistema operacional FreeBSD
   quando o console do sistema remoto nao esta disponivel. A ideia principal
   por tras deste artigo e o resultado de uma colaborac,ao com Martin Matuska
   <mm@FreeBSD.org> com informac,oes valiosas fornecidas por Pawel Jakub
   Dawidek <pjd@FreeBSD.org>.

   [ Documento HTML em partes / Documento HTML completo ]

     ----------------------------------------------------------------------

   Indice

   1. Background

   2. Introduc,ao

   3. Preparac,ao - mfsBSD

   4. Instalac,ao do sistema operacional do FreeBSD

   5. ZFS

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 distribuic,ao Linux(R) para ser instalada nos servidores
   que eles oferecem.

   Em alguns casos, estas empresas instalarao sua distribuic,ao Linux(R)
   preferida se voce solicita-la. Usando esta opc,ao, tentaremos instalar o
   FreeBSD. Em outros casos, eles podem oferecer um sistema de recuperac,ao
   para ser usado em uma emergencia. E possivel usa-la para os nossos
   propositos tambem.

   Este artigo aborda as etapas basicas de instalac,ao e configurac,ao
   necessarias para inicializar uma instalac,ao remota do FreeBSD com suporte
   para RAID-1 e ZFS.

2. Introduc,ao

   Esta sec,ao resumira o objetivo deste artigo e explicara melhor o que e
   tratado aqui. As instruc,oes incluidas neste artigo beneficiarao aqueles
   usuarios que usam servic,os fornecidos por provedores de colocation que
   nao suportam o FreeBSD.

    1. Como mencionamos na sec,ao &#8203;&#8203;Background, muitas das
       empresas de hospedagem de servidores renomadas fornecem algum tipo de
       sistema de recuperac,ao, que e inicializado a partir de sua LAN e
       acessivel por SSH. Eles normalmente fornecem esse suporte para ajudar
       seus clientes a consertar sistemas operacionais quebrados. Como este
       artigo explicara, e possivel instalar o FreeBSD com a ajuda destes
       sistemas de recuperac,ao.

    2. A proxima sec,ao deste artigo descrevera como configurar e compilar
       uma versao minima do FreeBSD na maquina local. Essa versao
       eventualmente sera executada na maquina remota a partir de um ramdisk,
       o que nos permitira instalar um sistema operacional completo do
       FreeBSD a partir de um espelho FTPusando o utilitariosysinstall.

    3. O restante deste artigo descrevera o procedimento de instalac,ao em
       si, bem como a configurac,ao do sistema de arquivos ZFS.

  2.1. Requisitos

   Para continuar com sucesso, voce deve:

     * Ter um sistema operacional acessivel pela rede com acesso SSH

     * Entender o processo de instalac,ao do FreeBSD

     * Familiarizar-se com o utilitario sysinstall(8)

     * Ter a imagem ISO de instalac,ao do FreeBSD ou o CD de instalac,ao `a
       mao

3. Preparac,ao - mfsBSD

   Antes que o FreeBSD possa ser instalado no sistema de destino, e
   necessario construir a imagem minima do sistema operacional FreeBSD que
   sera inicializada a partir do disco rigido. Dessa forma, o novo sistema
   pode ser acessado a partir da rede e o restante da instalac,ao 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 memoria"), a imagem resultante e executada inteiramente de um
   ramdisk. Grac,as a este recurso, a manipulac,ao de discos rigidos nao sera
   limitada, portanto, sera possivel instalar um sistema operacional completo
   do FreeBSD. A pagina inicial do mfsBSD inclui links para a versao mais
   recente do conjunto de ferramentas.

   Por favor, note que os detalhes de como o mfsBSD funciona internamente e
   como tudo se encaixa esta alem do escopo deste artigo. O leitor
   interessado deve consultar a documentac,ao original do mfsBSD para mais
   detalhes.

   Fac,a o download e extraia a versao mais recente do mfsBSD e altere seu
   diretorio de trabalho para o diretorio em que os scripts mfsBSD residirao:

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

  3.1. Configurac,ao do mfsBSD

   Antes de inicializar o mfsBSD, algumas opc,oes importantes de
   configurac,ao precisam ser definidas. O mais importante que temos que
   acertar e, naturalmente, a configurac,ao da rede. O metodo mais adequado
   para configurar opc,oes de rede depende se sabemos de antemao 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 e a senha do usuario root. Isto pode
   ser feito editando o conf/loader.conf. Por favor, veja os comentarios
   incluidos no arquivo.

    3.1.1. O metodo conf/interfaces.conf

   Quando a placa de rede instalada e desconhecida, e possivel usar os
   recursos de detecc,ao automatica do mfsBSD. Os scripts de inicializac,ao
   do mfsBSD podem detectar o driver correto a ser usado, com base no
   enderec,o MAC da interface, se configurarmos as seguintes opc,oes em
   conf/interfaces.conf:

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

   Nao esquec,a de adicionar a informac,ao defaultrouter ao conf/rc.conf:

 defaultrouter="192.168.0.1"

    3.1.2. O metodo conf/rc.conf

   Quando o driver da interface de rede e conhecido, e mais conveniente usar
   conf/rc.conf para opc,oes de rede. A sintaxe deste arquivo e a mesma usada
   no arquivo padrao rc.conf (5) do FreeBSD.

   Por exemplo, se voce souber que uma interface de rede re(4) estara
   disponivel, voce pode definir as seguintes opc,oes 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 construc,ao de uma imagem mfsBSD e bastante simples.

   O primeiro passo e montar o CD de instalac,ao do FreeBSD, ou a imagem ISO
   de instalac,ao em /cdrom . Por exemplo, neste artigo vamos supor que voce
   tenha baixado o ISO do FreeBSD 10.1-RELEASE. Montar esta imagem ISO no
   diretorio /cdrom e facil de se fazer com o utilitario mdconfig(8):

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

   Como as versoes recentes do FreeBSD nao contem conjuntos de distribuic,ao
   regulares, e necessario extrair os arquivos de distribuic,ao do FreeBSD
   dos arquivos de distribuic,ao 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 inicializavel:

 # make BASE=DIST

  Nota:

   O make acima deve ser executado a partir do nivel superior da arvore de
   diretorios do mfsBSD, por exemplo, ~/mfsbsd-2.1/.

  3.3. Inicializando o mfsBSD

   Agora que a imagem mfsBSD esta pronta, ela deve ser carregada para o
   sistema remoto executando o sistema de recuperac,ao ou uma distribuic,ao
   Linux(R) pre-instalada. A ferramenta mais adequada para essa tarefa e o
   scp:

 # scp disk.img root@192.168.0.2:.

   Para inicializar corretamente a imagem mfsBSD, ela deve ser colocada no
   primeiro dispositivo (inicializavel) da maquina em questao. Isso pode ser
   feito usando este exemplo, desde que o sda seja o primeiro dispositivo de
   disco inicializavel:

 # 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 maquina pode ser reinicializada. Observe a maquina
   inicializar corretamente com a ferramenta ping (8). Uma vez que tenha
   retornado on-line, deve ser possivel acessa-la com o ssh(1) como o usuario
   root usando a senha configurada.

4. Instalac,ao do sistema operacional do FreeBSD

   O mfsBSD foi inicializado com sucesso e deve ser possivel efetuar login
   atraves do ssh(1). Esta sec,ao descrevera como criar e rotular os slices,
   configurar o gmirror para o RAID-1 e como usar o sysinstall para instalar
   uma distribuic,ao minima do sistema operacional FreeBSD.

  4.1. Preparac,ao de Discos Rigidos

   A primeira tarefa e alocar espac,o em disco para o FreeBSD, ou seja: criar
   slices e partic,oes. Obviamente, o sistema atualmente em execuc,ao e
   totalmente carregado na memoria do sistema e, portanto, nao havera
   problemas com a manipulac,ao dos discos rigidos. Para completar esta
   tarefa, e possivel usar sysinstall ou fdisk(8) em conjunto com o
   bsdlabel(8).

   No inicio, marque todos os discos do sistema como vazios. Repita o
   seguinte comando para cada disco rigido:

 # 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 facil usar o sysinstall, um metodo
   poderoso e provavelmente com menos bugs sera usar as ferramentas padroes
   de console UNIX(R), como o fdisk(8) e o bsdlabel(8), o qual tambem sera
   abordado nesta sec,ao. A primeira opc,ao esta bem documentada no capitulo
   Instalando o FreeBSD do Handbook do FreeBSD. Como foi mencionado na
   introduc,ao, este artigo apresentara como configurar um sistema com
   recursos RAID-1 e ZFS. Nossa configurac,ao consistira de uma pequena
   partic,ao / (root) , de um dataset composto por um /usr e um /var , todos
   espelhados com o gmirror(8), e o restante do espac,o em disco alocado para
   um sistema de arquivos zpool(8) espelhado do ZFS. Por favor, observe que o
   sistema de arquivosZFS sera configurado depois que o sistema operacional
   FreeBSD for instalado e inicializado com sucesso.

   O exemplo a seguir descrevera como criar slices e labels, inicializar o
   gmirror(8) em cada partic,ao e como criar um sistema de arquivos UFS2 em
   cada partic,ao 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 codigo de            
     inicializac,ao contido no setor 0 do disco fornecido. Repita este        
     comando para todos os discos rigidos no sistema.                         
   2 Escreva um label padrao para cada disco, incluindo o codigo de           
     bootstrap.                                                               
   3 Agora, edite manualmente o label do disco fornecido. Consulte a pagina   
     de manual do bsdlabel(8)para descobrir como criar partic,oes. Crie as    
     partic,oes a para o sistema de arquivos / (root) , b para swap, d para   
     /var ,e para /usr e finalmente f, que sera usado posteriormente para o   
     ZFS.                                                                     
   4 Importe o label recem-criado para o segundo disco rigido, para que ambos 
     os discos sejam rotulados da mesma maneira.                              
   5 Inicialize o gmirror(8) em cada partic,ao.                               
   6 Note que -F e usado para a partic,ao de swap. Isso instrui o gmirror(8)  
     a assumir que o dispositivo esta no estado consistente apos a falha de   
     energia/sistema.                                                         
   7 Crie um sistema de arquivos UFS2 em cada partic,ao espelhada.            

  4.2. Instalac,ao do sistema

   Esta e a parte mais importante. Esta sec,ao ira descrever como instalar a
   distribuic,ao minima do FreeBSD nos discos rigidos que preparamos na
   sec,ao anterior. Para atingir este objetivo, todos os sistemas de arquivos
   precisam ser montados para que o sysinstall possa gravar o conteudo do
   FreeBSD nos discos rigidos:

 # 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 instalac,ao
   Personalizada no menu principal. Selecione Opc,oes e pressione Enter. Com
   a ajuda das teclas direcionais, mova o cursor para o item Install Root,
   pressione Espac,o e altere-o para /mnt. Pressione Enter para enviar suas
   alterac,oes e sair do menu Opc,oes pressionando q.

  Atenc,ao:

   Note que este passo e muito importante e se for ignorado, o sysinstall nao
   podera instalar o FreeBSD.

   Va para o menu Distributions, mova o cursor com as teclas de seta para
   Minimal e selecione-o pressionando Space. Este artigo usa a distribuic,ao
   minima para salvar o trafego de rede, porque o proprio sistema sera
   instalado por ftp. Saia deste menu escolhendo Exit.

  Nota:

   Os menus Partition e Label serao ignorados, pois sao inuteis agora.

   No menu Media, selecione FTP. Selecione o espelho mais proximo e deixe o
   sysinstall assumir que a rede ja esta configurada. Voce retornara ao menu
   Personalizar.

   Finalmente, realize a instalac,ao do sistema selecionando a ultima opc,ao,
   Commit. Saia do sysinstall quando terminar a instalac,ao.

  4.3. Etapas pos-instalac,ao

   O sistema operacional do FreeBSD deve estar instalado agora; no entanto, o
   processo ainda nao esta concluido. E necessario executar algumas etapas
   pos-instalac,ao para permitir que o FreeBSD inicialize no futuro e consiga
   efetuar o login no sistema.

   Voce deve agora executar chroot(8) para o sistema recem-instalado para
   concluir a instalac,ao. Use o seguinte comando:

 # chroot /mnt

   Para completar nosso objetivo, execute estas etapas:

     * Copie o kernel GENERIC para o diretorio /boot/kernel:

 # cp -Rp /boot/GENERIC/* /boot/kernel

     * Crie os arquivos /etc/rc.conf, /etc/resolv.conf e /etc/fstab. Nao se
       esquec,a de configurar corretamente as informac,oes de rede e ativar o
       sshd em /etc/rc.conf. O conteudo do /etc/fstab sera 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 conteudo:

 geom_mirror_load="YES"
 zfs_load="YES"

     * Execute o seguinte comando, que disponibilizara o ZFS na proxima
       inicializac,ao:

 # echo 'zfs_enable="YES"' >> /etc/rc.conf

     * Adicione usuarios adicionais ao sistema usando a ferramenta
       adduser(8). Nao se esquec,a de adicionar um usuario ao grupo wheel
       para que voce possa obter acesso root apos a reinicializac,ao.

     * Verifique todas as suas configurac,oes.

   O sistema deve estar pronto para a proxima inicializac,ao. Use o comando
   reboot(8) para reinicializar seu sistema.

5. ZFS

   Se o seu sistema sobreviveu `a reinicializac,ao, agora deve ser possivel
   efetuar login. Bem-vindo `a nova instalac,ao do FreeBSD, executada
   remotamente sem o uso de um console remoto!

   O unico passo restante e configurar o zpool(8) e criar algum sistemas de
   arquivos zfs(8). Criar e administrar o ZFS e 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 e tudo. Se voce esta interessado em mais detalhes sobre o ZFSno
   FreeBSD, por favor consulte a sec,ao ZFS do o Wiki do FreeBSD.
