Inicialização sem Disco pela Rede (PXE) no Ubuntu 12.04

1. Introdução

O objetivo deste tutorial é descrever a configuração necessária para permitir que um computador cliente realize boot pela rede, carregando uma instalação de sistema operacional que está armazenada em um servidor na mesma subrede. Esse cenário não se trata de thin clients. Uma cópia completa do sistema operacional estará em execução no computador cliente, inclusive os processos das aplicações. Quando se fala em thin client, os processos executam no servidor, o cliente apenas exibe os resultados remotamente.

Para a solução de inicialização sem disco, o cliente precisa suportar boot através do ambiente PXE (Preeboot Execution Environment). Este ambiente é responsável pela configuração da rede e cópia dos arquivos necessários do servidor. Sua ativação é realizada através da configuração das opções de boot na BIOS do computador. A princípio, discos ou outro tipo de armazenamento não são necessários no cliente.

O servidor precisa executar serviços de configuração automática de rede (DHCP) e transferência de arquivos (TFTP) para permitir o uso do PXE pelo cliente. O DHCP fornece um endereço IP ao cliente para permitir a comunicação TCP/UDP. O após a configuração de rede, a transferência de um kernel e de um arquivo initramfs é feita através do TFTP. Com isso a máquina cliente consegue carregar o kernel e o sistema inicializa. Mas para se tornar útil, precisamos de uma instalação completa de uma distribuição Linux. A solução é armazenar essa instalação em um diretório do servidor e compartilhá-la com os clientes através de NFS. Esse detalhe é muito importante, pois exige que o kernel enviado ao cliente tenha suporte à NFS.

O restante do tutorial se organiza da maneira descrita a seguir. Primeiro vamos tratar da configuração do serviços DHCP e TFTP. Em seguida, vamos criar no servidor um diretório com a instalação Linux que será carregada no cliente e configurá-la adequadamente. O próximo passo é a configuração de um kernel para boot no cliente. Por último, daremos boot na máquina cliente. Para todos os propósitos, os comandos são executados no Ubuntu 12.04 LTS AMD64. Usamos um servidor e um cliente para demonstração.

2. Configuração dos Serviços

2.1 Configuração do DHCP

O primeiro passo é definir qual a subrede do ambiente. Para nosso estudo de caso, consideramos a rede 10.0.0.0/255.255.255.0. O servidor terá IP 10.0.0.1 e o cliente terá IP 10.0.0.2. Para configurar a interface do cliente, é preciso colocar as informações abaixo no arquivo /etc/network/interfaces:

iface eth2 inet static
    address 10.0.0.1
    netmask 255.255.255.0
    gateway 10.0.0.1

Substitua eth2 e a faixa IP pelos valores adequados caso necessário. Depois disso, basta reiniciar as interfaces de rede:

~# service networking restart
~# service network-manager restart

Detalhe importante: não coloque ‘auto eth2’ antes da linha começando com ‘iface’. Isso evita que o network-manager tente gerenciar a interface. Com a interface configurada, é hora de instalar e configurar o DHCP.

~# apt-get install dhcp3-server
~# cat /etc/dhcp/dhcpd.conf
allow booting;
allow bootp;
subnet 10.0.0.0 netmask 255.255.255.0 {
  range 10.0.0.2 10.0.0.100;
  option broadcast-address 10.0.0.255;
  option routers 2.xxx;
  option domain-name-servers 8.8.8.8;
  filename "/pxelinux.0";
}
~# service isc-dhcp-server restart
isc-dhcp-server start/running, process 11263

O mais importante é a linha filename “/pxelinux.0”. Ela indica o caminho do arquivo que será transferido ao ambiente PXE do cliente. Este caminho é relativo ao diretório do TFTP, que iremos configurar a seguir. Caso o servidor tenha duas interfaces de rede, talvez seja importante alterar o arquivo /etc/default/isc-dhcp-server para ligar o serviço a apenas uma delas.

2.2 Configuração do TFTP

O TFTP é responsável por transferir os arquivos iniciais ao ambiente PXE. Para instalá-lo, digite os comandos abaixo.

~# apt-get install tftpd-hpa
~# cat /etc/default/tftpd-hpa 
# /etc/default/tftpd-hpa
RUN_DAEMON="yes"
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
~# mkdir /var/lib/tftpboot/pxelinux.cfg

Com isso, os arquivos presentes em /var/lib/tftpboot estarão disponíveis ao PXE. O importante agora é instalar o pacote que contém o sistema básico que será enviado e as ferramentas que permitem a criação de um kernel para o boot do cliente. Vamos aproveitar e instalar também o pacote que dá suporte ao NFS por parte do servidor.

~# apt-get install syslinux 

Podemos agora copiar os arquivos básicos para o diretório do TFTP e configurar o restante da estrutura de diretórios.

~# cp /usr/lib/syslinux/pxelinux.0 /var/lib/tftpboot/
~# mkdir /var/lib/tftpboot/pxelinux.cfg/
~# cat /var/lib/tftpboot/pxelinux.cfg/default
LABEL linux
KERNEL vmlinuz-3.2.0-23-generic-pae 
APPEND root=/dev/nfs initrd=initrd.img-3.2.0-23-generic-pae nfsroot=10.0.0.1:/nfsroot,rw ip=dhcp rw (desde APPEND tudo na mesma linha)

O parâmetro nfsroot na linha APPEND indica onde estará a distribuição Linux. Essa será acessada via o NFS, etapa que iremos configurar na próxima seção. Na pasta /var/lib/tftpboot temos que ter um kernel equivalente às linhas KERNEL e ao campo initrd da linha APPEND. Existem várias maneiras de arranjar um kernel adequado. Na seção 2.4, será detalhado como obter um kernel e um initrd adequados. Lembre-se apenas qual arquivo deve ser alterado com as informações do novo kernel (/var/lib/tftpboot/pxelinux.cfg/default).

2.3 Configuração do NFS

Caso você não tenha instalado o NFS na seção anterior, faça agora com o comando abaixo. Além disso, vamos aproveitar para criar o diretório onde estará a instalação do sistema operacional que será carregado no cliente. Para exportá-lo, precisamos também alterar o arquivo /etc/exports.

~# apt-get install nfs-kernel-server
~# mkdir /nfsroot
~# cat /etc/exports 
/nfsroot             10.0.0.0/255.255.255.0(rw,no_root_squash,async,insecure,no_subtree_check)
~# exportfs -rv
exporting 10.0.0.0/255.255.255.0:/nfsroot

Agora a pasta /nfsroot do servidor está acessível ao cliente. Falta agora colocar uma instalação Linux nela. Isso pode ser feito com o comando abaixo.

:~# debootstrap --arch amd64 precise /nfsroot/

Seria o momento para tomar um café, já que demora bastante. O que o comando debootstrap faz é realizar o download do sistema mínimo para garantir uma inicialização. Sua principal utilização talvez seja permitir executar um ambiente de testes em chroot. Após seu término, devemos entrar no ambiente instalado através do comando chroot.

~# mount -o bind /dev /nfsroot/dev
~# mount -o bind /proc /nfsroot/proc
~# mount -o bind /sys /nfsroot/sys
~# chroot /nfsroot/ 

Assim você estará dentro do console da nova instalação. A primeira sugestão é alterar o hostname. Por padrão, o nome da máquina é o mesmo do servidor. Devemos alterar os arquivos /etc/hostname e /etc/hosts para refletir o novo sistema. No nosso caso, iremos adotar ‘virtual’ como nome da máquina.

~# cat /etc/hostname
virtual
~# cat /etc/hosts   
127.0.0.1	localhost virtual
::1		localhost ip6-localhost ip6-loopback
fe00::0		ip6-localnet
ff00::0		ip6-mcastprefix
ff02::1		ip6-allnodes
ff02::2		ip6-allrouters

Você pode também instalar qualquer pacote que achar necessário com o apt-get. É aconselhável instalar o cliente do nfs.

~# apt-get install nfs-common

A configuração de rede deve ficar assim:

~# cat /etc/network/interfaces 
auto lo
iface lo inet loopback
iface eth0 inet manual

O /etc/fstab deve ficar desta forma:

~# cat /etc/fstab
proc            /proc           proc    defaults       0       0
/dev/nfs       /                nfs     defaults       1       1
none            /tmp            tmpfs   defaults       0       0
none            /var/run        tmpfs   defaults       0       0
none            /var/lock       tmpfs   defaults       0       0
none            /var/tmp        tmpfs   defaults       0       0

Não esqueça também de adicionar pelo menos um usuário ou alterar a senha de root.

~# passwd
~# adduser usuario

Quando terminar a configuração, lembre de desmontar os diretórios /proc, /dev/ e /sys. Para isso você tem que sair do ambiente chroot. Os comandos necessários são mostrados abaixo. Por enquanto, não saia do chroot, pois ele será necessário para a seção 2.4.

~# exit
~# umount  /nfsroot/dev
~# umount  /nfsroot/proc
~# umount  /nfsroot/sys

2.4 Configuração do Kernel do Cliente

Existem várias maneiras de conseguir um kernel adequado. Você pode compilar a partir do zero ou utilizar o kernel pronto do servidor. Nós vamos usar um meio termo. Vamos utilizar um kernel pré-compilado do Ubuntu vamos personalizar o arquivo initrd para conter os módulos da placa de rede da máquina cliente e do NFS.

O ambiente em chroot criado pelo debootstrap não tem kernel instalado. Basta verificar que a pasta /boot está vazia. Vamos instalar um kernel então. Também vamos instalar o pacote initramfs-tools, pois ele será necessário para criar o arquivo initrd personalizado.

~# aptitude install linux-image-3.2.0-23-generic-pae initramfs-tools

Verifique agora a pasta /boot. Você verá os arquivos vmlinuz-3.2.0-23-generic-pae e initrd.img-3.2.0-23-generic-pae. O primeiro vamos utilizar do jeito que está. Agora o segundo precisamos adaptar. Temos que alterar os arquivos /etc/initramfs-tools/initramfs.conf e /etc/initramfs-tools/modules. As versões finais dos arquivos devem ficar como abaixo abaixo:

~# cat /etc/initramfs-tools/initramfs.conf
MODULES=netboot
BUSYBOX=y
COMPCACHE_SIZE=""
COMPRESS=gzip
BOOT=nfs
DEVICE=
NFSROOT=auto
~# cat /etc/initramfs-tools/modules  	 
# Módulo da placa de rede
8139too
# Módulos do NFS
nfsd
nfs
lockd
fscache
auth_rpcgss
nfs_acl
sunrpc

Veja que no arquivo /etc/initramfs-tools/modules você precisa colocar o módulo da placa de rede do cliente. Não existe maneira simples de descobrir isso. Uma solução é inicializar o cliente com um livecd e descobrir essa informação através dos comandos lspsci e lsmod. Os outros módulos são necessários para carregar o sistema de arquivo NFS. Depois disso, o próximo passo é criar o novo initrd. Para isso, execute o comando abaixo.

#~  mkinitramfs -o /boot/initrd.img-3.2.0-23-generic-pae 3.2.0-23-generic-pae

Com isso, os arquivos do diretório estarão atualizados. Agora, saia do chroot como descrito ao final da seção 2.3 e copie os arquivos para o diretório do TFTP com os comandos abaixo.

#~ cp /nfsroot/boot/vmlinuz-3.2.0-23-generic-pae /var/lib/tftpboot
#~ cp /nfsroot/boot/initrd.img-3.2.0-23-generic-pae /var/lib/tftpboot
#~ chmod -R 777 /var/lib/tftpboot

2.5 Conclusão

Para finalizar, reinicie todos os serviços. Configure a BIOS do cliente para dar boot pela rede e reinicie a máquina. Se tudo der certo, rapidamente você estará no console da máquina cliente.

Referências

https://help.ubuntu.com/community/DisklessUbuntuHowto
https://help.ubuntu.com/community/Installation/OnNFSDrivehttps://help.ubuntu.com/community/PXEInstallServer
https://wiki.ubuntu.com/DebootstrapChroot
http://www.vivaolinux.com.br/artigo/Ubuntu-Server-1204-LTS-Como-Servidor-Gateway-e-DHCP/
http://dathan.org/docs/pxe-mini-howto.html
 

Anúncios

Pirataria Oficializada?

Sou um cliente Dell há muito tempo. Meu primeiro notebook foi um Dell Latitude 120L. O segundo foi um Inspiron 1525. Adquirido com recursos próprios, só tenho netbook da Asus que não é da Dell. O que me agradou na marca desde o começo, além da qualidade dos produtos, foi a possibilidade de comprar pela Web sem trauma e o suporte técnico. Este apresentou uma qualidade e profissionalismo que nunca tinha encontrado no Brasil.

Quando meu irmão expressou o desejo de trocar de notebook, prontamente indiquei o Dell Inspiron 14 N4030. Na época, cerca de um ano e meio atrás, era um ótimo custo benefício. Já vinha com um Core i3, novíssima geração, com preço abaixo dos R$ 2.000,00. Não tinha como errar. Comprei a opção de um ano de garantia porque nunca tinha tido problemas com a marca. O notebook chegou rapidamente e meu irmão ficou satisfeito.

No começo do mês, poucos meses após o fim da garantia, o Inspiron começou a ficar muito lento. Depois, uma mensagem de erro de inicialização do Windows começou a surgir quando o aparelho era ligado. A mensagem oferecia a opção de tentar reparar o Windows ou iniciar normalmente. De início, tentamos reparar o Windows. Entretanto, a opção não tinha efeito. A máquina simplesmente reiniciava e retornava à mensagem de erro.

Não vou entrar nos detalhes do diagnóstico, só irei mencionar que após utilizar um CD de recuperação chamado HIREN e realizado os próprios testes presentes na BIOS do Dell, cheguei a conclusão que o problema era bad blocks no disco rígido. Mesmo após correção e marcação dos blocos com defeito. A solução, nem tão cara hoje em dia, foi trocar o HD. Apesar de não estar na garantia, pude fazer a trocar sem problemas. Foi quase como trocar um cartucho de jogo no Mega Drive.

O drama começou quando fui tentar reinstalar o sistema operacional. Como comprei o computador com uma licença, gostaria de reutilizá-la. Trocar o HD não constitui um novo computador, então não haveria problema legal em reutilizar a licença. O problema é que o notebook não veio com nenhuma mídia de instalação. A única maneira de recuperar o sistema seria utilizar uma partição de recuperação que estava no HD danificado. Ou seja, se pifar seu HD e você estiver fora da garantia, recuperar sua licença não será fácil.

A minha primeira atitude foi entrar em contato com a Microsoft. A resposta foi que ela nada poderia fazer. Em detalhes maiores:

Respondendo seu e-mail, de acordo com suas descrições seu produto é pré-instalado pelo Integrador (OEM). Produtos com este tipo de licença recebem configurações específicas por parte do fabricante do computador, pois dessa forma pode ser instalado e utilizado de forma adequada no equipamento onde é pré-instalado.

 Esclarecemos que a Microsoft Brasil não disponibiliza mídias deste tipo de licenciamento para abastecimento, isto deve ser feito pelo integrador (fabricante do equipamento) que fornece ao usuário final uma mídia (CD) de instalação, de restauração do sistema ou o conteúdo da instalação no HD.

 Enfatizamos que existe um contrato assinado entre a Microsoft e os fabricantes de equipamentos, onde o Integrador é quem fornece suporte técnico e uma forma de reinstalação do software.  Assim, para obter a mídia de reposição de seu Windows, solicitamos que contate o responsável por estas configurações, ou seja, o fabricante do equipamento.

Detalhe para “Enfatizamos que existe um contrato assinado entre a Microsoft e os fabricantes de equipamentos, onde o Integrador é quem fornece suporte técnico e uma forma de reinstalação do software.” .  A Dell, por contrato com a Microsoft, precisa fornecer uma maneira de reinstalar o software. Fui então para o live chat do suporte da Dell. Abaixo uma captura de tela no começo da conversa:

Captura de Tela da Conversa

Quando pergunto sobre como fazer a reinstalação, o atendente Gustavo indica o Google como fonte da mídia. Certo, alguém, em 2012, manda outro ser humano procurar no Google por uma mídia. Caro leitor, coloque “Windows 7 Home Basic 64Bits Pt-Br” no Google. Se 90% das respostas na primeira página não forem de pirataria, pago um pão de queijo ao senhor. Como alguém que trabalha com tecnologia, que passa o dia na frente de um computador conectado à Internet, pode pensar o contrário? Na minha humilde opinião, a Dell oficializa pirataria como uma opção de suporte ao não enviar mídias de reinstalação. Claro, depois que instalar o pirata e colocar o serial key anterior, tudo ficará “legalizado”. Porém, até lá estarei exposto aos riscos de baixar uma versão pirata, que já começam nos próprios sites de download.

O pior que tudo isso é desnecessário. Não quer enviar a mídia para todos, legal. O que custa deixar em uma página? Vai facilitar a pirataria? Vejam no Google se isso faz diferença. Acho que o efeito é o contrário. Tenho certeza que outras pessoas com convicções mais fracas já teriam baixado a versão Ultimate do Windows 7 e instalado. Mas sou contra a pirataria, independente de ser usuário Linux e entusiasta Open Source. Gostaria muito de poder instalar uma licença que comprei legalmente no nosso computador. Mas pelo visto a Microsoft e a Dell preferiram institucionalizar a pirataria.

Para quem estiver afim de diversão, no link abaixo a conversa completa.

ConversaComADell

Getúlio

Acabei de ler Getúlio 1882 – 1930. Uma boa leitura, algo que consegui ler até no ônibus durante as viagens Fortaleza-Quixadá. Como o lançamento é recente, não faltam avaliações de gente mais competente em jornais ou outros blogs. Prefiro falar sobre o que aprendi sobre a figura de Getúlio do que sobre os méritos literários do livro.

Não há como falar de Getúlio sem falar do Rio Grande. E não há como falar do Rio Grande de Getúlio sem mencionar a Revolução Federalista. Foi um conflito sangrento logo após a Proclamação da República que dividiu o estado por anos. De um lado, os “maragatos” que faziam oposição ao modelo da república recém criada. Do outro, os “pica-paus”, seguidores de Júlio de Castilhos, governador rio-grandense e vedete do positivismo brasileiro. Com o apoio federal, os “pica-paus” venceram, porém o sangue derramado manchou as relações políticas gaúchas por muito tempo. As estimativas são de 10.000 mortos. O pai de Getúlio, o veterano da Guerra do Paraguai Manoel Vargas, foi “pica-pau” e essa foi a vertente política adotada pela família. Acho que até que o livro poderia dedicar um pouco mais de atenção a Revolução Federalista, mas como é uma biografia de Getúlio, natural considerar que o leitor já tenha conhecimento de eventos importantes da história do Brasil.

Getúlio desenvolveu sua carreira política em um estado onde brigar com a oposição não significava apenas por em risco a governabilidade, pois sempre havia a possibilidade real de desentendimentos levarem a uma guerra civil. Talvez por isso, nos anos posteriores, ele demonstrou uma hesitação em romper abertamente com Washington Luís que quase levou à loucura seus aliados mais próximos, como João Neves da Fontoura e Osvaldo Aranha. E são os capítulos finais, que relatam toda a organização política para formação da Aliança Liberal e do Golpe de 30, que fornecem os momentos mais emocionantes do livre. É possível sentir nas páginas a tensão em que Getúlio se encontrava, forçado a tomar uma posição contra o governo do qual fizera parte como ministro. Para mim, fica sempre a dúvida: era Getúlio muito cauteloso ou um verdadeiro mestre Sith, sempre moldando a realidade de acordo com seus desejos, sem nunca se expor totalmente.

Uma boa leitura. E com certeza irei atrás das outras biografias escritas pelo Lira Neto, em especial a de Padre Cícero.

Greve todo ano?

Um serviço essencial para a população deve sim ter sua tarifa controlada. Entretanto, mesmo que o poder aquisitivo da população cresça, o lucro dos empresários não aumentará. Afinal, ninguém gasta o dinheiro extra do final do mês em viagens de ônibus.

O poder aquisitivo da camada mais pobre da população brasileira cresceu nos últimos anos. Isso, claro, levou a uma inflação um pouco maior. Portanto, é válida a reclamação dos trabalhadores do transporte público por melhores salários.

Em um cenário em que a tarifa não é ditada pelo mercado e há pressão por aumentos por parte dos motoristas e cobradores, a única solução é diminuir o lucro dos empresários. Enquanto tais lucros são exorbitantes, a sociedade bate palmas. Mais se o cenário continuar se repetindo, a tendência é um lucro cada vez menor. Quem vai investir em um negócio no qual a previsão é diminuição de lucro? O jeito vai ser economizar em outras áreas, manter a frota sucateada e as linhas com cada vez menos ônibus.

O que estou querendo dizer que é uma tarifa fixa é uma abominação em uma economia de mercado. Isso todo mundo sabe. Mas também deixá-la flutuar pode ser prejudicial a população. Não conheço o modelo de concessão da prefeitura de Fortaleza. Mas assim como para outros serviços essenciais, é importante ter competição. Talvez contratos mais curtos, divisão de linhas mais lucrativas baseada no desempenho da empresa, não sei qual seria o ideal. Agora enquanto algum dos prefeituráveis não sentar a bunda no escritório e imaginar uma solução, todo ano teremos o mesmo sufoco.

Era após-PC: agonia dos ‘micreiros’?

O pessoal bate muito na Microsoft, mas acho que ela foi responsável por boa parte da liberdade que existe no mundo dos PCs. Nos primórdios, a opção da Apple era vender o kit [soft|hard]ware completo, imutável. Nem sei se na época existia o mercado de peças avulsas. As máquinas eram realizações da visão perfeccionista de Steve Jobs, na qual até os fios tinha que seguir uma disposição estética agradável. A Microsoft apostou que o hardware era commodity, o importante mesmo era o software. O sucesso do Windows garantiu a existência de vários fornecedores de PCs, não tardou para surgir um mercado de peças avulsas, permitindo que adolescentes e pós-adolescentes do mundo inteiro se divertissem montando suas máquinas. No Brasil, essa classe recebeu até o apelido de ‘micreiros’, sendo responsável pelo primeiro computador de muitos usuários.

O mercado cresceu, o país evoluiu e se abriu um pouco mais ao exterior, hoje o ‘micreiro’ não existe mais. É possível comprar um Lenovo (antiga divisão de hardware da IBM) razóavel por R$ 1.200,00. Até as lojinhas antigas se profissionalizaram, algumas até exibem logotipos nas máquinas que vendem. O advento do notebook como computador principal contribuiu para o cenário atual, afinal não dá para comprar peças avulsas e montar um notebook (dá, mas com trabalho ;)). Mesmo assim, ainda dá para comprar a placa mãe, o processador, memória e outras peças e montar seu micro. E nunca foi tão barato fazer isso como hoje.

No mundo após-PC, como ficará a situação dos ‘hobbistas’? Infelizmente, a tendência é ficar cada vez mais complicado. Não dá para montar um notebook, imagine um tablet ou smartphone! E a própria Microsoft, que valorizava o software, acabou adotando a estratégia da concorrência e lançando um casadinho hard+soft como estratégia para o após-PC. Se as máquinas modernas tomarem conta do mercado, qual o incetivo para um fabricante colocar no varejo um processador avulso? Talvez até o conceito de uma placa-mãe deixe de existir! Tente chegar numa loja de informática e comprar um processador ARM Snapdragon. Não vai conseguir, pode ter certeza. O chato dessa situação é que devemos dar adeus aos upgrades. Hoje podemos comprar um bom desktop e depois um ano aumentar a memória, colocar um SSD, e ter uma sobrevida em termos de desempenho. No tablet ou smartphone, o jeito é comprar um novo. O cenário fica até pior se o fabricante se recusar a atualizar o software.

A situação só não é lástima total porque ainda existem projetos voltados a criação de hardware customizado. Por exemplo, o Arduino e o mais recentemente, o Raspberry Pi. Ambos são voltados para um perfil de usuário semelhante ao antigo micreiro, conhecido fuçador. Porém, falta ainda um produto forte criado a partir dessas soluções para justificar a criação de um mercado semelhante à era PC. Se nada do tipo aparecer logo, os projetos perderão fôlego e podem acabar. Ficaríamos então com um mercado sem opção de customização acessível de hardware, totalmente controlado pelos fabricantes, interoperabilidade zero e preço nas alturas.