--- authors: - author: 'Daniel Gerzo' email: danger@FreeBSD.org copyright: '2008-2021 The FreeBSD Documentation Project' description: 'Este documento descreve a instalação remota do sistema operacional FreeBSD quando o console do sistema remoto não está disponível' tags: ["Remote", "Installation", "FreeBSD"] title: 'Instalação Remota do Sistema Operacional FreeBSD sem um Console Remoto' trademarks: ["freebsd", "general"] --- = Instalação Remota do Sistema Operacional FreeBSD sem um Console Remoto :doctype: article :toc: macro :toclevels: 1 :icons: font :sectnums: :sectnumlevels: 6 :source-highlighter: rouge :experimental: :images-path: articles/remote-install/ ifdef::env-beastie[] ifdef::backend-html5[] include::shared/authors.adoc[] include::shared/mirrors.adoc[] include::shared/releases.adoc[] include::shared/attributes/attributes-{{% lang %}}.adoc[] include::shared/{{% lang %}}/teams.adoc[] include::shared/{{% lang %}}/mailing-lists.adoc[] include::shared/{{% lang %}}/urls.adoc[] :imagesdir: ../../../images/{images-path} endif::[] ifdef::backend-pdf,backend-epub3[] include::../../../../shared/asciidoctor.adoc[] endif::[] endif::[] ifndef::env-beastie[] include::../../../../../shared/asciidoctor.adoc[] endif::[] [.abstract-title] Resumo Este artigo documenta a instalação remota do sistema operacional FreeBSD quando o console do sistema remoto não está disponível. A ideia principal por trás deste artigo é o resultado de uma colaboração com `{mm}`, com valiosa contribuição fornecida por `{pjd}`. ''' toc::[] [[background]] == Background Existem muitos provedores de hospedagem de servidores no mundo, mas muito poucos deles oferecem suporte oficial para o FreeBSD. Geralmente, eles fornecem suporte para uma distribuição Linux(R) a ser instalada nos servidores que oferecem. Em alguns casos, essas empresas podem instalar a distribuição FreeBSD se você solicitar, mesmo que normalmente só ofereçam suporte para distribuições Linux(R). Em outros casos, elas podem oferecer um sistema de resgate que seria usado em uma emergência. É possível usar isso para nossos fins também. Este artigo cobre os passos básicos de instalação e configuração necessários para inicializar uma instalação remota do FreeBSD com capacidades RAID-1 e ZFS. [[intro]] == Introdução Esta seção resumirá o objetivo deste artigo e explicará melhor o que é abordado aqui. As instruções incluídas neste artigo beneficiarão aqueles que utilizam serviços fornecidos por provedores de colocation que não suportam o FreeBSD. [.procedure] ==== . Como mencionamos na seção <>, muitas das empresas de hospedagem de servidores respeitáveis fornecem algum tipo de sistema de resgate, que é iniciado a partir de sua LAN e acessível por SSH. Geralmente, eles fornecem esse suporte para ajudar seus clientes a corrigir sistemas operacionais com problemas. Como este artigo explicará, é possível instalar o FreeBSD com a ajuda desses sistemas de resgate. + . A próxima seção deste artigo descreverá como configurar e compilar um FreeBSD minimalista na máquina local. Essa versão será executada eventualmente na máquina remota a partir de um ramdisk, o que nos permitirá instalar um sistema operacional FreeBSD completo a partir de um espelho FTP usando a ferramenta sysinstall. . O restante deste artigo descreverá o procedimento de instalação em si, bem como a configuração do sistema de arquivos ZFS. ==== [[requirements]] === 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 * Esteja familiarizado com o utilitário man:sysinstall[8] * Tenha a imagem do sistema operacional de instalação do FreeBSD ou o CD em mãos [[preparation]] == 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. A ferramenta mfsBSD pode ser utilizada para construir uma imagem mínima do FreeBSD. Como sugere o nome "mfsBSD" ("mfs" significa "sistema de arquivos de memória"), a imagem resultante é executada totalmente de um ramdisk. Graças a essa característica, a manipulação de discos rígidos não será limitada, tornando possível a instalação de um sistema operacional FreeBSD completo. A http://mfsbsd.vx.sk/[página inicial] do mfsBSD inclui referências para a última versão do conjunto de ferramentas. Por favor, note que os detalhes internos do mfsBSD e como tudo se encaixa estão 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 última versão do mfsBSD e altere seu diretório de trabalho para o diretório onde os scripts do mfsBSD serão armazenados: [source, shell] .... # fetch http://mfsbsd.vx.sk/release/mfsbsd-2.1.tar.gz # tar xvzf mfsbsd-2.1.tar.gz # cd mfsbsd-2.1/ .... [[mfsbsd-config]] === Configuração do mfsBSD Antes de iniciar o mfsBSD, algumas opções de configuração importantes devem ser definidas. A mais importante que devemos acertar é, naturalmente, a configuração de rede. O método mais adequado para configurar as opções de rede depende se sabemos de antemão o tipo de interface de rede que usaremos e o driver de interface de rede a ser carregado para nosso hardware. Veremos como o mfsBSD pode ser configurado em ambos os casos. Outro ponto importante a ser definido é a senha do `root`. Isso pode ser feito editando o arquivo [.filename]#conf/loader.conf#. Por favor, consulte os comentários incluídos. ==== O método [.filename]#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 definirmos as seguintes opções em [.filename]#conf/interfaces.conf#: [.programlisting] .... mac_interfaces="ext1" ifconfig_ext1_mac="00:00:00:00:00:00" ifconfig_ext1="inet 192.168.0.2/24" .... Não se esqueça de adicionar as informações do `defaultrouter` no [.filename]#conf/rc.conf#: [.programlisting] .... defaultrouter="192.168.0.1" .... ==== O Método [.filename]#conf/rc.conf# Quando o driver da interface de rede é conhecido, é mais conveniente usar o arquivo [.filename]#conf/rc.conf# para as opções de rede. A sintaxe deste arquivo é a mesma usada no arquivo padrão man:rc.conf[5] do FreeBSD. Por exemplo, se você sabe que uma interface de rede man:re[4] estará disponível, você pode definir as seguintes opções no [.filename]#conf/rc.conf#: [.programlisting] .... defaultrouter="192.168.0.1" ifconfig_re0="inet 192.168.0.2/24" .... [[mfsbsd-build]] === Construindo uma imagem mfsBSD O processo de construir uma imagem mfsBSD é bastante simples. O primeiro passo é montar o CD de instalação do FreeBSD, ou a imagem ISO de instalação, no diretório [.filename]#/cdrom#. Para fins de exemplo, neste artigo vamos supor que você tenha baixado a imagem ISO do FreeBSD 10.1-RELEASE. Montar esta imagem ISO no diretório [.filename]#/cdrom# é fácil com o utilitário man:mdconfig[8]: [source, shell] .... # 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: [source, shell] .... # mkdir DIST # tar -xvf /cdrom/usr/freebsd-dist/base.txz -C DIST # tar -xvf /cdrom/usr/freebsd-dist/kernel.txz -C DIST .... Em seguida, crie a imagem de inicialização do mfsBSD: [source, shell] .... # make BASE=DIST .... [NOTE] ==== A instrução `make` acima deve ser executada a partir do nível superior da árvore de diretórios do mfsBSD, por exemplo, [.filename]#~/mfsbsd-2.1/#. ==== === Inicializando o mfsBSD Agora que a imagem mfsBSD está pronta, ela deve ser enviada para o sistema remoto que está executando um sistema de resgate ou a distribuição Linux(R) pré-instalada. A ferramenta mais adequada para essa tarefa é o scp: [source, shell] .... # scp disk.img root@192.168.0.2:. .... Para inicializar a imagem do mfsBSD corretamente, ela deve ser colocada no primeiro dispositivo (inicializável) da máquina em questão. Isso pode ser feito usando o seguinte exemplo, supondo que o [.filename]#sda# seja o primeiro dispositivo de disco inicializável: [source, shell] .... # dd if=/root/disk.img of=/dev/sda bs=1m .... Se tudo correu bem, a imagem agora deve estar no MBR do primeiro dispositivo e a máquina pode ser reiniciada. Verifique se a máquina está iniciando corretamente com a ferramenta man:ping[8]. Depois que a máquina voltar on-line, deve ser possível acessá-la via man:ssh[1] como usuário `root` com a senha configurada. [[installation]] == Instalação do Sistema Operacional FreeBSD O mfsBSD foi iniciado com sucesso e deve ser possível fazer login por meio do man:ssh[1]. Esta seção descreverá como criar e rotular slices, configurar o `gmirror` para RAID-1 e como usar o `sysinstall` para instalar uma distribuição mínima do sistema operacional FreeBSD. === Preparação dos 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 está totalmente carregado na memória do sistema e, portanto, não haverá problemas com a manipulação de discos rígidos. Para concluir esta tarefa, é possível usar o `sysinstall` ou o man:fdisk[8] em conjunto com o man:bsdlabel[8]. No início, marque todos os discos do sistema como vazios. Repita o seguinte comando para cada disco rígido: [source, shell] .... # dd if=/dev/zero of=/dev/ad0 count=2 .... O próximo passo é criar slices e rotulá-las com a ferramenta de sua preferência. Embora seja considerado mais fácil usar o `sysinstall`, um método poderoso e provavelmente com menos bugs é usar as ferramentas UNIX(R) padrão baseadas em texto, como o man:fdisk[8] e o man:bsdlabel[8], que também serão abordados nesta seção. A primeira opção está bem documentada no capítulo extref:{handbook}[Instalando o FreeBSD, install-steps] do Handbook do FreeBSD. Como mencionado na introdução, este artigo apresentará como configurar um sistema com capacidades RAID-1 e ZFS. A nossa configuração consistirá em um pequeno man:gmirror[8] para o [.filename]#/# (root), [.filename]#/usr# e [.filename]#/var#, e o restante do espaço em disco será alocado para um sistema de arquivos ZFS espelhado por meio do man:zpool[8]. Por favor, note que o sistema de arquivos ZFS será configurado após a instalação e inicialização bem-sucedidas do sistema operacional FreeBSD. O seguinte exemplo descreverá como criar slices e rótulos, inicializar o man:gmirror[8] em cada partição e como criar um sistema de arquivos UFS2 em cada partição espelhada: [source, shell] .... # fdisk -BI /dev/ad0 <.> # fdisk -BI /dev/ad1 # bsdlabel -wB /dev/ad0s1 <.> # bsdlabel -wB /dev/ad1s1 # bsdlabel -e /dev/ad0s1 <.> # bsdlabel /dev/ad0s1 > /tmp/bsdlabel.txt && bsdlabel -R /dev/ad1s1 /tmp/bsdlabel.txt <.> # gmirror label root /dev/ad[01]s1a <.> # gmirror label var /dev/ad[01]s1d # gmirror label usr /dev/ad[01]s1e # gmirror label -F swap /dev/ad[01]s1b <.> # newfs /dev/mirror/root <.> # newfs /dev/mirror/var # newfs /dev/mirror/usr .... <.> 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. <.> Escreva um label padrão para cada disco, incluindo o código de bootstrap. <.> Agora, edite manualmente o label do disco. Consulte a página do manual man:bsdlabel[8] para descobrir como criar partições. Crie partições `a` para o sistema de arquivos [.filename]#/# (raiz), `b` para swap, `d` para [.filename]#/var#, `e` para [.filename]#/usr# e, finalmente, `f` que será usado posteriormente para o ZFS. <.> Importe o label recém-criado para o segundo disco rígido, para que ambos os discos sejam rotulados da mesma maneira. <.> Inicialize o man:gmirror[8] em cada partição. <.> Note que `-F` é usado para a partição swap. Isso instrui o man:gmirror[8] a assumir que o dispositivo está em um estado consistente após uma falha de energia/sistema. <.> Crie um sistema de arquivos UFS2 em cada partição espelhada. === 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: [source, shell] .... # 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 man:sysinstall[8]. Selecione a instalação [.guimenuitem]#Custom# no menu principal. Selecione [.guimenuitem]#Opções# e pressione kbd:[Enter]. Com a ajuda das teclas de seta, mova o cursor no item `Install Root`, pressione kbd:[Espaço] e altere-o para [.filename]#/mnt#. Pressione kbd:[Enter] para enviar suas alterações e sair do menu [.guimenuitem]#Opções# pressionando kbd:[q]. [WARNING] ==== Observe que este passo é muito importante e, se ignorado, o `sysinstall` será incapaz de instalar o FreeBSD. ==== Vá para o menu [.guimenuitem]#Distributions#, mova o cursor com as teclas de seta para `Minimal` e marque-a pressionando kbd:[Espaço]. Este artigo utiliza a distribuição Minimal para economizar tráfego de rede, pois o próprio sistema será instalado via ftp. Saia deste menu escolhendo `Exit`. [NOTE] ==== Os menus [.guimenuitem]#Partition# e [.guimenuitem]#Label# serão ignorados, pois são inúteis neste momento. ==== Na tela do menu [.guimenuitem]#Media#[/guimenuitem], selecione a opção "FTP". Escolha o espelho mais próximo e deixe que o `sysinstall` assuma que a rede já está configurada. Você será levado de volta ao menu [.guimenuitem]#Custom#. Por fim, execute a instalação do sistema selecionando a última opção, [.guimenuitem]#Commit#. Saia do `sysinstall` quando a instalação for concluída. === Etapas pós-instalação O sistema operacional FreeBSD deve estar instalado agora; no entanto, o processo ainda não está concluído. É necessário realizar algumas etapas pós-instalação para permitir que o FreeBSD seja inicializado no futuro e para poder fazer login no sistema. Agora você deve executar o comando `man:chroot[8]` no sistema recém-instalado para concluir a instalação. Use o seguinte comando: [source, shell] .... # chroot /mnt .... Para completar nosso objetivo, execute estas etapas: * Copie o kernel `GENERIC` para o diretório [.filename]#/boot/kernel#: + [source, shell] .... # cp -Rp /boot/GENERIC/* /boot/kernel .... * Crie os arquivos [.filename]#/etc/rc.conf#, [.filename]#/etc/resolv.conf# e [.filename]#/etc/fstab#. Não esqueça de definir corretamente as informações de rede e habilitar o sshd em [.filename]#/etc/rc.conf#. O conteúdo do [.filename]#/etc/fstab# será semelhante ao seguinte: + [.programlisting] .... # 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 arquivo [.filename]#/boot/loader.conf# com o seguinte conteúdo: + [.programlisting] .... geom_mirror_load="YES" zfs_load="YES" .... * Execute o seguinte comando, que permitirá o ZFS ser utilizado no próximo boot: + [source, shell] .... # sysrc zfs_enable="YES" .... * Adicione usuários adicionais ao sistema usando a ferramenta man:adduser[8]. Não se esqueça de adicionar um usuário ao grupo `wheel` para que possa obter acesso de 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 man:reboot[8] para reiniciar o sistema. [[zfs]] == ZFS Se o seu sistema sobreviveu ao reboot, agora deve ser possível fazer login. Bem-vindo à nova instalação do FreeBSD, realizada remotamente sem o uso de um console remoto! O único passo restante é configurar o man:zpool[8] e criar alguns sistemas de arquivos man:zfs[8]. Criar e administrar ZFS é muito simples. Primeiro, crie um pool espelhado: [source, shell] .... # zpool create tank mirror /dev/ad[01]s1f .... Em seguida, crie alguns sistemas de arquivos: [source, shell] .... # 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ê estiver interessado em mais detalhes sobre o ZFS no FreeBSD, consulte a seção https://wiki.freebsd.org/ZFS[ZFS] do Wiki do FreeBSD.