Achei que deveria compartilhar algumas informações sobre meu modelo de desenvolvimento pessoal para a membase.
Configurei uma "área restrita" na qual estou fazendo todo o meu desenvolvimento com os seguintes comandos:
trond@opensolaris> pfexec chown trond:staff /source
trond@opensolaris> mkdir /source/membase
trond@opensolaris> cd /source/membase
trond@opensolaris> git clone git://github.com/trondn/tools.git
trond@opensolaris> cd tools/membase
Gosto de manter minhas alterações o mais separadas possível, para reduzir as dependências entre elas. Sempre que estou corrigindo um relatório de bug, faço algo como:
trond@opensolaris> cd bugnnn
trond@opensolaris> ln -s ../Makefile
trond@opensolaris> make
Isso criaria toda a pilha do Membase e colocaria os arquivos em /tmp/membase-build
. Em seguida, eu mudaria meu diretório de trabalho para o módulo em que vou corrigir um bug e (espero) corrigi-lo.
Depois de corrigir o bug (e escrever um caso de teste!), eu confirmaria a alteração e a enviaria para revisão com os seguintes comandos:
trond@opensolaris> git commit -m "bugnnn: blah blah blah"
trond@opensolaris> git for-review
O último comando ali enviaria a alteração para o nosso sistema de revisão, para que Dustin ou outra pessoa possa ler os diffs e aceitar o patch, se gostar dele.
Se você observar o fluxo de trabalho acima, ele parece bem fácil, mas há um pequeno detalhe que é realmente irritante... O Membase é um projeto multiplataforma, portanto, preciso garantir que o código seja compilado e funcione em todas as nossas plataformas. Com o método acima, eu teria que fazer login em outro sistema, configurar tudo e copiar minha alteração para ver se funciona. Para alterações simples que afetam apenas um módulo, eu sempre poderia usar o buildbot ou o Hudson para testá-lo em todas as plataformas, mas isso não funciona se eu fizer uma alteração de interface que afete todos os nossos módulos.
Como sou meio preguiçoso, não quero fazer esse trabalho chato o tempo todo, então, em vez disso, escrevi um script para configurar os códigos-fonte e criar makefiles para que eu possa construir facilmente a mesma árvore de código-fonte em todas as minhas plataformas.
Para que isso funcione, é necessário configurar o compartilhamento em seu sistema de arquivos:
trond@opensolaris> pfexec zfs set sharesmb=name=source rpool/source
Para configurar uma árvore para, digamos, o bug 9999, eu executaria algo como:
Baixar o gancho de confirmação - Ok.
Verificando a libmemcached (Bazaar) - Ok.
Gerar script de configuração - Ok.
Verificando o bucket_engine (git) - Ok.
Verificando o ep-engine (git) - Ok.
Gerar script de configuração - Ok.
Verificando o libconflate (git) - Ok.
Gerar script de configuração - Ok.
Verificando o libvbucket (git) - Ok.
Gerar script de configuração - Ok.
Verificando o memcached (git) - Ok.
Gerar script de configuração - Ok.
Verificando o moxi (git) - Ok.
Gerar script de configuração - Ok.
Verificando o vbucketmigrator (git) - Ok.
Gerar script de configuração - Ok.
Verificando o membase-cli (git) - Ok.
Verificação do ns_server (git) - Ok.
Verificando o memcachetest (git) - Ok.
Gerar script de configuração - Ok.
Configurar a compilação para o SunOS
Isso configurará um ambiente de construção para o Solaris que constrói o membase como uma pilha "multi isa" (32 e 64 bits) em /tmp/membase
. Mas vamos adicionar suporte para minha máquina MacOSX, Ubuntu e Debian também. Como todo o código está localizado em minha máquina opensolaris, preciso usar o comando -s
para que ele saiba onde a fonte está localizada:
Configurar a compilação para o Ubuntu
trond@opensolaris> ./setup.sh -s /net/opensolaris/source/membase/tools/membase -p Darwin bug_9999
Configurar a compilação para Darwin
trond@opensolaris> ./setup.sh -s /net/opensolaris/source/membase/tools/membase -p Debian bug_9999
Configurar a compilação para o Debian
Então, vamos dar uma olhada no bug_9999
diretório:
total 15
drwxr-xr-x 13 trond staff 14 Oct 12 13:35 Darwin
drwxr-xr-x 13 trond staff 14 Oct 12 13:35 Debian
drwxr-xr-x 13 trond staff 14 Oct 12 13:33 src
drwxr-xr-x 4 trond staff 5 Oct 12 13:33 SunOS
drwxr-xr-x 13 trond staff 14 Oct 12 13:35 Ubuntu
Todos os códigos-fonte estão localizados no diretório src, e todos os makefiles para as várias plataformas farão referência a esse código.
Para desenvolver todas as minhas plataformas, estou apenas executando:
trond@opensolaris> ssh debian "cd /net/opensolaris/source/membase/tools/membase/bug_9999/Debian && make" > debian.log 2>&1 &
trond@opensolaris> ssh darwin "cd /net/opensolaris/source/membase/tools/membase/bug_9999/Darwin && make" > darwin.log 2>&1 &
mas eu tenho isso em um script, é claro:
#! /bin/ksh
cd SunOS && gmake > sunos.log 2>&1 &
ssh ubuntu "cd /net/opensolaris/source/membase/tools/membase/bug_9999/Ubuntu && make" > ubuntu.log 2>&1 &
ssh debian "cd /net/opensolaris/source/membase/tools/membase/bug_9999/Debian && make" > debian.log 2>&1 &
ssh darwin "cd /net/opensolaris/source/membase/tools/membase/bug_9999/Darwin && make" > darwin.log 2>&1 &
xterm -T SunOS -e tail -f sunos.log &
xterm -T Ubuntu -e tail -f ubuntu.log &
xterm -T Debian -e tail -f debian.log &
xterm -T MacOS -e tail -f darwin.log &
Infelizmente, não é possível iniciar o membase que acabamos de instalar em /tmp/membase
mas estou trabalhando nisso!