[[!toc levels=4]] Bootstrap de uma configuração completa ====================================== Este documento tem como objetivo descrever o **processo de bootstrap** de uma configuração completa de um servidor utilizando o [Padrão Saravá](/). O *processo de bootstrap* pode ser compreendido como "o processo de coordenar diversos processos menores com interdepências, de forma que seja atingida uma configuração sistêmica estável". Para este processo, utilizaremos as seguintes ferramentas: * [Debian GNU/Linux 6.0](http://www.debian.org/releases/squeeze/). * [Linux-VServer](http://linux-vserver.org/) ([pacote do debian](http://packages.debian.org/squeeze/linux-image-2.6-vserver-686)). * [Git](http://git-scm.com/) e [gitosis](http://swik.net/gitosis). * [puppet-bootstrap](http://git.sarava.org/?p=puppet-bootstrap.git;a=summary). * [hydra](http://git.sarava.org/?p=hydra.git;a=summary). Estágios de configuração ------------------------ Os seguintes estágios fazem parte de uma instalação padrão completa: 1. [Instalação do sistema padrão](/install) na máquina hospedeira. 2. [Criação de um vserver padrão](/vservers) para hospedar um nó administrativo. 3. Bootstrap do puppet no vserver administrativo. 1. Pré-requisitos: [Configurações de DNS e Firewall](/puppet). 2. Instalação e configuração do gitosis. 3. Criação de um repositório para o [keyring](https://git.sarava.org/?p=keyringer.git;a=summary). 4. Criação de um repositório com a configuração padrão do puppet. 5. Instalação do puppetmaster com cron para atualização automática do repositório. 6. Clonagem da configuração inicial padrão do puppet. 7. Execução do puppetmaster pela primeira vez. 4. Configuração de backups: 1. Backup local criptografado: 1. Criação de chaves GPG. 2. Configuração do backup local. 2. Backup remoto: 1. Criação de chaves SSH para armazenamento remoto de backup. 2. Configuração do backup remoto. 5. Criação de outros vservers/nós: * Nó de armazenamento ("storage") para agrupamento de backups. * Proxy. * Web. * Test. Configuração do puppet ---------------------- apt-get install puppetmaster puppet git-core openssh-server cd /etc/puppet mkdir modules git init git add . repos="`lynx -dump http://git.sarava.org/?a=project_index | awk '{ print $1 }' | grep ^puppet-`" for repo in $repos; do module="`basename $repo .git | cut -d - -f 2`" if [ ! -d "modules/$module" ]; then git submodule add git://git.sarava.org/puppet-$module.git modules/$module fi done No caso de bootstrap para um novo projeto, substitua as referências de `git.sarava.org` para `git.projeto.org`. Configurando referências remotas em massa ----------------------------------------- # Configuracao origin="sarava.org" remotes="sarava.org:porta" repos="`lynx -dump http://git.$origin/?a=project_index | awk '{ print $1 }' | grep ^puppet-`" # Adicionando referencias for repo in $repos; do module="`basename $repo .git | cut -d - -f 2`" if [ -d "puppet-$module" ]; then cd puppet-$module for remote in $remotes; do ref="`echo $remote | cut -d . -f 1`" domain="`echo remote | cut -d : -f 1`" port="`echo remote | cut -d : -f 2`" git remote add $ref ssh://gitosis@git.$domain:$port/puppet-$module.git git push $ref master done cd .. fi done Mudando referências em submódulos --------------------------------- # Configuracao origin="sarava.org" dest="exemplo.org" cd puppet sed -i -e "s/git.$origin/git.$dest/" .gitmodules cd modules for module in `ls`; do cd $module git remote rm origin git remote add origin git://git.$dest/puppet-$module.git git config branch.master.remote origin git config branch.master.merge refs/heads/master cd .. done Exemplo de criação em massa de módulos -------------------------------------- # Configuracao origin="sarava.org" remotes="sarava.org:porta" mkdir puppet-{ikiwiki,moin,mysql,trac}/manifests -p touch puppet-{ikiwiki,moin,mysql,trac}/manifests/init.pp for module in ikiwiki moin mysql trac; do cd puppet-$module cp ../puppet-git/LICENSE . git init git add . git commit -a -m "Initial import" for remote in $remotes; do ref="`echo $remote | cut -d . -f 1`" domain="`echo remote | cut -d : f 1`" port="`echo remote | cut -d : f 2`" git remote add $ref ssh://gitosis@git.$domain:$port/puppet-$module.git git push $ref master done cd .. done