Antes de seguir estes passos, por favor, converse com o
portmgr
.
Devido à algumas doações generosas, o
portmgr
não está mais procurando por
empréstimos de sistemas i386™ ou amd64
.
No entanto, nós ainda estamos interessados no empréstimo de
sistemas tier-2
.
O portmgr
ainda está trabalhando para
definir quais são características que um nó necessita possuir
para ser útil.
Capacidade de CPU: qualquer coisa abaixo de 500MHz geralmente não é útil para a compilação de pacotes.
Nós somos capazes de ajustar o número de tarefas enviadas para cada máquina, e nós geralmente ajustamos o número para fazer uso de 100% da CPU.
RAM: O mínimo utilizável é 2G; o ideal é ter 8G ou mais. Normalmente configuramos uma tarefa para cada 512M de RAM.
Disco: É necessário um mínimo de 20G para o sistema de
arquivos e de 32G para a area de swap
.
O desempenho será melhor se múltiplos discos forem
utilizados, e configurados como geom
stripes
. Os dados de desempenho
também estão em fase de definição.
A compilação de pacotes irá estressar as unidades de disco até o seu limite (ou além dele). Esteja consciente do que você está se voluntariando para fazer!
largura de banda de rede: Ainda não existe um estudo preciso, no entanto uma máquina configurada para 8 tarefas simultâneas se mostrou capaz de saturar um link de internet a cabo.
Escolha um hostname
único. Ele não
tem que ser um hostname
resolvível
publicamente (ele pode ser um nome em sua rede
interna).
Por padrão, a compilação de pacotes necessita que as
seguintes portas TCP estejam acessíveis: 22
(ssh
), 414
(infoseek
), e 8649
(ganglia
). Se estas não estiverem
acessíveis, escolha outras e assegure-se de que um túnel
ssh
esteja configurado (veja
abaixo).
(Nota: se você tem mais de uma máquina em seu site,
você vai precisar de uma porta TCP individual para cada
serviço em cada máquina, desta forma serão necessários
túneis ssh
. Portanto, você
provavelmente precisará configurar o redirecionamento de
portas em seu firewall
.)
Decida se você vai inicializar localmente ou via
pxeboot
. Você vai descobrir que é
mais fácil acompanhar as mudanças do
-current
com a última opção,
especialmente se você tem várias máquinas em seu
site.
Escolha um diretório para manter as configurações dos
ports
e os subdiretórios do
chroot
. Pode ser melhor colocá-los em
uma partição dedicada. (Por exemplo:
/usr2/
.)
Crie um diretório para armazenar a árvore dos fontes
do último -current
e sincronize ela com
o repositório. (Uma vez que sua máquina provavelmente
será solicitada para compilar pacotes para o
-current
, o kernel
que ela executa deve estar razoavelmente atualizado com o
bindist
que será exportado por nossos
scripts
.)
Se você está usando pxeboot
: crie
um diretório para armazenar os arquivos de instalação.
Você provavelmente vai querer usar um subdiretório do
/pxeroot
, por exemplo,
/pxeroot/
.
Exporte como ${arch}
-${branch}
DESTDIR
.
Se você está realizando uma compilação para outra
plataforma, que não a instalada na máquina
(cross-building), exporte
TARGET_ARCH
=${arch}
.
O procedimento para compilação cruzada de
ports
ainda não está definido.
Gere um arquivo de configuração para o
kernel
. Inclua o
GENERIC
(ou, se você está usando mais
que 3.5G de memória em um i386™, o
PAE
).
Opção requeridas:
Opções sugeridas:
Para o PAE
, atualmente não é
possível carregar módulos. Portanto, se você está
executando uma arquitetura que suporta emulação binária
do Linux, você precisará adicionar:
Também para o PAE
, a partir de
12/09/2011 você precisa do seguinte. Isso precisa ser
investigado:
Como root
, execute os passos
usuais de compilação, por exemplo:
make -j4 buildworld
make buildkernel KERNCONF=${kernconf}
make installkernel KERNCONF=${kernconf}
make installworld
Os passos de instalação usam o caminho especificado na
da váriavel DESTDIR
.
Personalize os arquivos em etc/
.
O local no qual você fará isso, se no próprio cliente ou
em outra máquina, vai depender se você está usando ou não
o pxeboot
.
Se você está usando pxeboot
: crie
um subdiretório no
chamado ${DESTDIR}
conf/
. Crie um subdiretório
default/etc/
, e (se seu
site
vai hospedar vários nós),
subdiretórios
para os arquivos que vão sobrescrever as configurações
para os ${ip-address}
/etc/hosts
individuais. (Você pode
achar útil criar um link
simbólico de
cada um destes diretórios para um
hostname
.) Copie todo o conteúdo do
para ${DESTDIR}
/etc/default/etc/
; que é onde você
irá editar seus arquivos. Nos diretórios criados para
cada endereço IP, você provavelmente só irá necessitar
personalizar os arquivos
rc.conf
.
Em ambos os casos, execute os seguintes passos:
Crie um usuário e grupo
ports-
.
Adicione o usuário ao grupo
${arch}
wheel
. Ele pode ter um
'*'
no lugar da senha.
Crie o
/home/ports-
e popule o arquivo
${arch}/.ssh/
authorized_keys
com as chaves
ssh apropriadas.
Crie os usuários:
E também os adicione ao arquivo
etc/group
.
Crie os arquivos apropriados em
etc/.ssh/
.
Edite o etc/crontab
e
adicione o seguinte:
Crie um etc/fstab
apropriado. (Se você tem várias máquinas
diferentes, você precisará colocar este arquivo nos
diretórios específicos de cada uma.)
Edite o etc/inetd.conf
e
adicione o seguinte:
Nós utilizamos o timezone UTC
no cluster
:
Crie um etc/rc.conf
apropriado. (Se você está usando
pxeboot
, e tem várias máquinas
diferentes, você precisará colocar este arquivo nos
diretórios específico de cada uma.)
Configurações recomendadas para nós físicos:
${hostname}
"
inetd_enable="YES"
linux_enable="YES"
nfs_client_enable="YES"
ntpd_enable="YES"
ntpdate_enable="YES"
ntpdate_flags="north-america.pool.ntp.org"
sendmail_enable="NONE"
sshd_enable="YES"
sshd_program="/usr/local/sbin/sshd"
gmond_enable="YES"
squid_enable="YES"
squid_chdir="/usr2
/squid/logs
"
squid_pidfile="/usr2
/squid/logs/squid.pid
"Configurações obrigatórias para nós baseados no VMWare:
Configurações recomendadas para nós baseados no VMWare:
/usr2
/squid/logs
"
squid_pidfile="/usr2
/squid/logs/squid.pid
"O ntpd(8) não deve ser habilitado para os nós baseados no VMWare.
Além disso, você pode optar por deixar o
squid desabilitado por
padrão, de modo a não ter um
/
persistente (o que deve economizar tempo na criação da
instância.) O trabalho ainda está em andamento.
usr2
Crie o etc/resolv.conf
, se
necessário.
Modifique o
etc/sysctl.conf
:
/usr2
/%N.core
> kern.sugid_coredump=1
> #debug.witness_ddb=0
> #debug.witness_watch=0
>
> # squid needs a lot of fds (leak?)
> kern.maxfiles=40000
> kern.maxfilesperproc=30000
>
> # Since the NFS root is static we don't need to check frequently for file changes
> # This saves >75% of NFS traffic
> vfs.nfs.access_cache_timeout=300
> debug.debugger_on_panic=1
>
> # For jailing
> security.jail.sysvipc_allowed=1
> security.jail.allow_raw_sockets=1
> security.jail.chflags_allowed=1
> security.jail.enforce_statfs=1
>
> vfs.lookup_shared=1Se desejar, modifique o
etc/syslog.conf
para mudar o
destino dos logs
para
@pointyhat.freebsd.org
.
Instale os seguintes ports
:
Existe um trabalho em andamento para criar um
meta-port
, mas ainda não está
completo.
Customize os arquivos em
usr/local/etc/
. O local no qual
você fará isso, se no próprio cliente ou em outra
máquina, vai depender se você está usando ou não o
pxeboot
.
O truque de usar
subdiretóriosconf
para
sobreescrever as opções padrões é menos eficaz aqui,
pois você precisa copiar todos os subdiretórios do
usr/
. Este é um detalhe da
implementação de como o pxeboot
funciona.
Execute os seguintes passos:
Modifique o
usr/local/etc/gmond.conf
:
${arch}
package build cluster"
> owner = "portmgr@FreeBSD.org"
24c24
< url = "unspecified"
---
> url = "http://pointyhat.freebsd.org"Se existirem máquinas de mais de um
cluster
no mesmo domínio
multicast
(basicamente = LAN),
então altere os grupos de multicast
para valores diferentes (.71, .72, etc).
Crie o
usr/local/etc/rc.d/portbuild.sh
,
usando um valor apropriado para
scratchdir
:
/usr2
ln -sf ${scratchdir}/portbuild /var/
# Identify builds ready for use
cd /var/portbuild/${arch}
for i in */builds/*; do
if [ -f ${i}/.ready ]; then
mkdir /tmp/.setup-${i##*/}
fi
done
# Flag that we are ready to accept jobs
touch /tmp/.boot_finishedModifique o
usr/local/etc/squid/squid.conf
:
Modifique também o usr/local
para
em usr2
cache_dir
,
access_log
,
cache_log
,
cache_store_log
,
pid_filename
,
netdb_filename
,
coredump_dir
.
E finalmente, mude o esquema de armazenamento do
cache_dir
, de
ufs
para aufs
(o qual oferece uma melhor performance).
Configure o ssh
: copie os
arquivos do /etc/ssh
para
/usr/local/etc/ssh
e adicione
NoneEnabled yes
ao
sshd_config
.
Modifique o
usr/local/etc/sudoers
:
${arch}
ALL=(ALL) NOPASSWD: ALLEntre no diretório port/package
que
você escolheu acima, por exemplo,
cd
.
/
usr2
Execute como root:
mkdir portbuild
chown ports-${arch}
:ports-${arch}
portbuild
mkdir pkgbuild
chown ports-${arch}
:ports-${arch}
pkgbuild
mkdir squid
mkdir squid/cache
mkdir squid/logs
chown -R squid:squid squid
Se os clientes preservam o conteúdo do
/var/portbuild
entre as suas
inicializações, então eles também deverão preservar o
/tmp
ou então revalidar as
compilações disponíveis no momento do boot (veja o
script
nas máquinas
amd64
). Eles também devem limpar os
chroots
obsoletos das compilações
anteriores antes de criar o
/tmp/.boot_finished
.
Inicie o cliente.
Como root, crie a estrutura de diretórios do
squid
:
squid -z
Estes passos precisam ser feitos por um
portmgr
, autenticado como o usuário
ports-
,
no ${arch}
pointyhat
.
Se alguma das portas TCP padrão não
estiver disponível (veja acima), você precisará criar um
túnel ssh
para ela e deverá incluí-lo
no crontab
.
Adicione uma entrada em
/home/ports-
para especificar o endereço IP público, a porta TCP para o
${arch}
/.ssh/configssh
, o usuário, e qualquer outra
informação necessária.
Crie o
/var/portbuild/
.
${arch}
/clients/bindist-${hostname}
.tar
Copie um arquivos dos existentes para usar como modelo e descompacte-o em um diretório temporário.
Personalize o etc/resolv.conf
para o site
local.
Personalize o etc/make.conf
para a busca de arquivo no FTP local. Nota: a
anulação da variável
MASTER_SITE_BACKUP
deve ser comum
para todos os nós, mas a primeira entrada em
MASTER_SITE_OVERRIDE
deve ser o
espelho FTP mais próximo. Por exemplo:
.if defined(FETCH_ORIGINAL)
MASTER_SITE_BACKUP=
.else
MASTER_SITE_OVERRIDE= \
ftp://friendly-local-ftp-mirror
/pub/FreeBSD/ports/distfiles/${DIST_SUBDIR}/ \
ftp://${BACKUP_FTP_SITE}/pub/FreeBSD/distfiles/${DIST_SUBDIR}/
.endif
Empacote-o com tar
e mova
para o local correto.
Dica: você precisará de um destes para cada máquina;
no entanto, se você tem várias máquinas no mesmo site, você
deve criar um local específico para este
site
(por exemplo, em
/var/portbuild/conf/clients/
) e criar
um link
simbólico para ele.
Crie o
/var/portbuild/
utilizando um dos existentes como guia. O conteúdo deste
arquivo sobrescreve as configurações de
${arch}
/portbuild-${hostname}
/var/portbuild/
.${arch}
/portbuild.conf
Sugestão de valores:
/usr2
/squid
scratchdir=/usr2
/pkgbuild
client_user=ports-${arch}
sudo_cmd="sudo -H"
rsync_gzip=-z
infoseek_host=localhost
infoseek_port=${tunelled-tcp-port}
Outros valores possíveis:
Os passos abaixo precisam ser executados por um
portmgr
autenticado como
root
no pointyhat
.
Adicione o endereço IP público em
/etc/hosts.allow
. (Lembre-se, várias
máquinas podem estar sob o mesmo endereço IP.)
Adicione uma entrada data_source
para
/usr/local/etc/gmetad.conf
:
data_source "
arch
/location
Package Build Cluster" 30 hostname
Você precisará reiniciar o
gmetad
.
Estes passos precisam ser executados por um
portmgr
autenticado como
ports-
no
arch
pointyhat
.
Certifique-se que o ssh
está
funcionando executando ssh
.
hostname
Crie os arquivos em
/var/portbuild/scripts/
executando
algo como /var/portbuild/scripts/dosetupnode
. Verifique
se os arquivos foram criados no diretório.
arch
major
latest
hostname
Teste as outras portas TCP executando telnet
.
A porta hostname
portnumber
414
(ou seu túnel) deve dar-lhe
algumas linhas com informações de status, incluindo
arch
e osversion
;
A porta 8649
deve retornar um
XML
do
ganglia
.
Esses passos precisam ser executados por um
portmgr
autenticado como
root
no pointyhat
.
Informe o qmanager
sobre o nó.
Por exemplo:
python
path
/qmanager/qclient add
name=uniquename
arch=arch
osversion=osversion
numcpus=number
haszfs=0
online=1
domain=domain
primarypool=package
pools="package all" maxjobs=1
acl="ports-arch
,deny_all"
Este, e outros documentos, podem ser obtidos em ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/
Para perguntas sobre FreeBSD, leia a
documentação antes de contatar
<questions@FreeBSD.org>.
Para perguntas sobre esta documentação, envie e-mail para
<doc@FreeBSD.org>.