--- title: Instalação Remota do Sistema Operacional FreeBSD Sem um Console Remoto authors: - author: Daniel Gerzo email: danger@FreeBSD.org copyright: 2008 Projeto de Documentação do FreeBSD releaseinfo: "$FreeBSD$" 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: :toc-title: Índice :part-signifier: Parte :chapter-signifier: Capítulo :appendix-caption: Apêndice :table-caption: Tabela :figure-caption: Figura :example-caption: Exemplo ifeval::["{backend}" == "html5"] include::shared/pt-br/urls.adoc[] endif::[] ifeval::["{backend}" == "pdf"] include::../../../../shared/pt-br/urls.adoc[] endif::[] ifeval::["{backend}" == "epub3"] include::../../../../shared/pt-br/urls.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 idéia principal por trás deste artigo é o resultado de uma colaboração com Martin Matuska mailto:mm@FreeBSD.org[mm@FreeBSD.org] com informações valiosas fornecidas por Paweł Jakub Dawidek mailto:pjd@FreeBSD.org[pjd@FreeBSD.org]. ''' toc::[] [[background]] == 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(R) para ser instalada nos servidores que eles oferecem. Em alguns casos, estas empresas instalarão sua distribuição Linux(R) 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. [[intro]] == 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. [.procedure] . Como mencionamos na seção <>, 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. + . 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. . 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 * Familiarizar-se com o utilitário man:sysinstall[8] * Ter a imagem ISO de instalação do FreeBSD ou o CD de instalação à mão [[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. 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 http://mfsbsd.vx.sk/[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: [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 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 [.filename]#conf/loader.conf#. Por favor, veja os comentários incluídos no arquivo. ==== 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 configurarmos 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 esqueça de adicionar a informação `defaultrouter` ao [.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 [.filename]#conf/rc.conf# para 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ê souber que uma interface de rede man:re[4] estará disponível, você pode definir as seguintes opções em [.filename]#conf/rc.conf#: [.programlisting] .... defaultrouter="192.168.0.1" ifconfig_re0="inet 192.168.0.2/24" .... [[mfsbsd-build]] === 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 [.filename]#/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 [.filename]#/cdrom# é fácil de se fazer 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, construa a imagem mfsBSD inicializável: [source,shell] .... # make BASE=DIST .... [NOTE] ==== O make acima deve ser executado 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 carregada para o sistema remoto executando o sistema de recuperação ou uma 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 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 [.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 deve estar agora no MBR do primeiro dispositivo e a máquina pode ser reinicializada. Observe a máquina inicializar corretamente com a ferramenta man:ping[8]. Uma vez que tenha retornado on-line, deve ser possível acessá-la com o man:ssh[1] como o usuário `root` usando a senha configurada. [[installation]] == Instalação do sistema operacional do FreeBSD O mfsBSD foi inicializado com sucesso e deve ser possível efetuar login através do man: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. === 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 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 .... 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(R), como o man:fdisk[8] e o man:bsdlabel[8], o qual também será abordado nesta seção. A primeira opção está bem documentada no capítulo link:{handbook}#install-steps[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 [.filename]#/# (root) , de um dataset composto por um [.filename]#/usr# e um [.filename]#/var# , todos espelhados com o man:gmirror[8], e o restante do espaço em disco alocado para um sistema de arquivos man: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 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 fornecido. Consulte a página de manual do man:bsdlabel[8] para descobrir como criar partições. Crie as partições `a` para o sistema de arquivos [.filename]#/# (root), `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 de swap. Isso instrui o man:gmirror[8] a assumir que o dispositivo está no estado consistente após a 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]#Personalizada# no menu principal. Selecione [.guimenuitem]#Opções# e pressione kbd:[Enter]. Com a ajuda das teclas direcionais, mova o cursor para o 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] ==== Note que este passo é muito importante e se for ignorado, o Sysinstall não poderá instalar o FreeBSD. ==== Vá para o menu [.guimenuitem]#Distributions#, mova o cursor com as teclas de seta para `Minimal` e selecione-o pressionando kbd:[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`. [NOTE] ==== Os menus [.guimenuitem]#Partition# e [.guimenuitem]#Label# serão ignorados, pois são inúteis agora. ==== No menu [.guimenuitem]#Media#, selecione `FTP`. Selecione o espelho mais próximo e deixe o Sysinstall assumir que a rede já está configurada. Você retornará ao menu [.guimenuitem]#Personalizar#. Finalmente, realize a instalação do sistema selecionando a última opção, [.guimenuitem]#Commit#. Saia do sysinstall quando terminar a instalação. === 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 man:chroot[8] para o 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 se esqueça de configurar corretamente as informações de rede e ativar 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 [.filename]#/boot/loader.conf# com o seguinte conteúdo: + [.programlisting] .... geom_mirror_load="YES" zfs_load="YES" .... * Execute o seguinte comando, que disponibilizará o ZFS na próxima inicialização: + [source,shell] .... # echo 'zfs_enable="YES"' >> /etc/rc.conf .... * 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 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 man:reboot[8] para reinicializar seu sistema. [[zfs]] == 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 man:zpool[8] e criar algum sistemas de arquivos man:zfs[8]. Criar e administrar o 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ê está interessado em mais detalhes sobre o ZFSno FreeBSD, por favor consulte a seção https://wiki.freebsd.org/ZFS[ZFS] do o Wiki do FreeBSD.