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.
-
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.
-
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.
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 no menu principal. Selecione 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 pressionando q.
Note que este passo é muito importante e se for ignorado, o Sysinstall não poderá instalar o FreeBSD. |
Vá para o menu 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 e serão ignorados, pois são inúteis agora. |
No menu FTP
. Selecione o espelho mais próximo e deixe o Sysinstall assumir que a rede já está configurada. Você retornará ao menu .
Finalmente, realize a instalação do sistema selecionando a última opção,
. 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.