Antes de seguir estes passos, por favor, converse com o portmgr.
Nota: 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.
Nota: 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.
Nota: 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/${arch}-${branch}. Exporte como 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}.
Nota: 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:
options NULLFS options TMPFS
Opções sugeridas:
options GEOM_CONCAT options GEOM_STRIPE options SHMMAXPGS=65536 options SEMMNI=40 options SEMMNS=240 options SEMUME=40 options SEMMNU=120 options ALT_BREAK_TO_DEBUGGER
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:
options COMPAT_LINUX options LINPROCFS
Também para o PAE, a partir de 12/09/2011 você precisa do seguinte. Isso precisa ser investigado:
nooption NFSD # New Network Filesystem Server options NFSCLIENT # Network Filesystem Client options NFSSERVER # Network Filesystem Server
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 ${DESTDIR} chamado conf/. Crie um subdiretório default/etc/, e (se seu site vai hospedar vários nós), subdiretórios ${ip-address}/etc/ para os arquivos que vão sobrescrever as configurações para os 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 ${DESTDIR}/etc/ para 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-${arch}. Adicione o usuário ao grupo wheel. Ele pode ter um '*' no lugar da senha.
Crie o /home/ports-${arch}/.ssh/ e popule o arquivo authorized_keys com as chaves ssh apropriadas.
Crie os usuários:
squid:*:100:100::0:0:User &:/usr/local/squid:/bin/sh ganglia:*:102:102::0:0:User &:/usr/local/ganglia:/bin/sh
E também os adicione ao arquivo etc/group.
Crie os arquivos apropriados em etc/.ssh/.
Edite o etc/crontab e adicione o seguinte:
* * * * * root /var/portbuild/scripts/client-metrics
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:
infoseek stream tcp nowait nobody /var/portbuild/scripts/reportload
Nós utilizamos o timezone UTC no cluster:
cp /usr/share/zoneinfo/Etc/UTC etc/localtime
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="${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:
vmware_guest_vmmemctl_enable="YES" vmware_guest_guestd_enable="YES"
Configurações recomendadas para nós baseados no VMWare:
hostname="" ifconfig_em0="DHCP" fsck_y_enable="YES" inetd_enable="YES" linux_enable="YES" nfs_client_enable="YES" 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"
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 /usr2 persistente (o que deve economizar tempo na criação da instância.) O trabalho ainda está em andamento.
Crie o etc/resolv.conf, se necessário.
Modifique o etc/sysctl.conf:
9a10,30 > kern.corefile=/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=1
Se desejar, modifique o etc/syslog.conf para mudar o destino dos logs para @pointyhat.freebsd.org.
Instale os seguintes ports:
net/rsync security/openssh-portable (with HPN on) security/sudo sysutils/ganglia-monitor-core (with GMETAD off) www/squid (with SQUID_AUFS on)
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.
Nota: 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:
21,22c21,22 < name = "unspecified" < owner = "unspecified" --- > name = "${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:
#!/bin/sh # # Configure a package build system post-boot 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_finished
Modifique o usr/local/etc/squid/squid.conf:
288,290c288,290 < #auth_param basic children 5 < #auth_param basic realm Squid proxy-caching web server < #auth_param basic credentialsttl 2 hours --- > auth_param basic children 5 > auth_param basic realm Squid proxy-caching web server > auth_param basic credentialsttl 2 hours 611a612 > acl localnet src 127.0.0.0/255.0.0.0 655a657 > http_access allow localnet 2007a2011 > maximum_object_size 400 MB 2828a2838 > negative_ttl 0 minutes
Modifique também o usr/local para usr2 em 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:
38a39,42 > > # local changes for package building > %wheel ALL=(ALL) ALL > ports-${arch} ALL=(ALL) NOPASSWD: ALL
Entre 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-${arch}, no 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-${arch}/.ssh/config para especificar o endereço IP público, a porta TCP para o ssh, 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/${arch}/portbuild-${hostname} utilizando um dos existentes como guia. O conteúdo deste arquivo sobrescreve as configurações de /var/portbuild/${arch}/portbuild.conf.
Sugestão de valores:
disconnected=1 http_proxy="http://localhost:3128/" squid_dir=/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:
use_md_swap=1 md_size=9g use_zfs=1 scp_cmd="/usr/local/bin/scp" ssh_cmd="/usr/local/bin/ssh"
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-arch no 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 arch major latest hostname. Verifique se os arquivos foram criados no diretório.
Teste as outras portas TCP executando telnet hostname portnumber. A porta 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"
Anterior | Principal | Próxima |
Compilação de Patches Experimentais | Como configurar um novo branch do FreeBSD |
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>.