Imagine que você desenvolveu uma biblioteca lua. Atualmente para qualquer programador usar essa biblioteca é necessário fazer o download dos arquivos fonte, copiá-los para pasta correta e finalmente usá-la em alguma outra aplicação. Dependendo da biblioteca isso pode ser complicado, além disso quando existirem duas ou mais versões diferentes a manutenção dessas versões será muito complicada. O objetivo do LuaRocks é justamente facilitar a instalação e a manutenção de bibliotecas lua fornecendo, inclusive, suporte à versões diferentes de uma mesma biblioteca.
O programa LuaRocks busca rocks de um tipo de repositório -- repositório de rocks -- e instala-os em um outro tipo de repositório -- árvore de instalação. Um repositório de rocks é um diretório que contêm rocks e/ou rockspecs, e um arquivo manifest que cataloga os rocks contidos nele.
O LuaRocks pode ser configurado para usar múltiplas árvores de instalação e múltiplos servidores de rocks, ambos abordados com mais detalhes abaixo.
Publicar um repositório como um servidor de rocks consiste em criar um diretório que contém rocks e um arquivo manifest e disponibilizá-lo online.
O LuaRocks possui 2 comandos principais luarocks e luarocks-admin.
Como dito anteriormente existem 2 tipos de repositórios, o repositório de rocks e a árvore de instalação.
rocks_servers = { --repositório de rocks [[http://luarocks.org/repositories/rocks]], [[/var/www/rocks]], [[http://luarocks.giga.puc-rio.br/]] }
rocks_trees = { --árvore de instalação home..[[/.luarocks]], [[/home/ccpa-auto/luarocks]], home..[[/.luarocks]], [[/usr/local]] }
Abaixo segue uma idéia geral de como fazê-lo, para maiores detalhes clique aqui.
Imagine que você desenvolveu uma biblioteca lua chamada mylib e que você deseja disponibilizá-la para a comunidade pelo LuaRocks. Tudo que você precisa fazer é criar um rockspec com o nome mylib-versao.rockspec, onde versao = X.Y.Z-W.
O rockspec deve ser copiado para a raiz do projeto, por exemplo o comando "ls /home/pablomusa/mylib/" gera:
mylib-1.0.0-0.rockspec src/ tests/ CVS/
Com a biblioteca pronta e o rockspec feito, precisamos criar o pacote (rock) e publicá-lo. Para criar o pacote devemos executar os seguintes comandos a partir do diretório raiz do projeto:
luarocks make mylib-1.0.0-0.rockspec
luarocks pack mylib 1.0.0-0
mv mylib-1.0.0-0.all.rock <pasta_publicacao> # adiciona o pacote ao repositorio de rocks luarocks-admin make_manifest <pasta_publicacao> # atualiza o arquivo de mapeamento de rocks publicados
luarocks make sintra-2.0.0-0.rockspec # instala no seu repositorio proprio de rocks o pacote sintra luarocks pack sintra 2.0.0-0 # gera o arquivo sintra-2.0.0-0.all.rock a partir da instalacao local mv sintra-2.0.0-0.all.rock /var/www/rocks/ # move o arquivo .rock para o nosso servidor de rocks luarocks-admin make_manifest /var/www/rocks # atualiza o nosso servidor de rocks
voce@alfa:~$ cvs checkout -P <projeto> # caso ainda não possua uma cópia local voce@alfa:~$ cvs co -dP <projeto>
version
) quanto no nome do arquivo .rockspec.
Se os números não estiverem iguais, haverá um erro na instalação.
voce@alfa:~/projeto$ mv <projeto>-<versão>.rockspec <projeto>-<nova versão>.rockspec voce@alfa:~/projeto$ cvs remove <projeto>-<versão>.rockspec voce@alfa:~/projeto$ cvs add <projeto>-<nova versão>.rockspec voce@alfa:~/projeto$ cvs commit
voce@alfa:~/projeto$ instala_rock.sh <projeto> <versão>
voce@alfa:~$ ssh prod voce@prod:~$ luarocks install <projeto> # instala na sua árvore de rocks voce@prod:~$ lua -lluarocks.require ~/.luarocks/rocks/<projeto>/<versão>/testes/<arquivo de teste>.lua
voce@alfa:~/projeto$ cvs tag v?_?_? voce@alfa:~/projeto$ luarocks --tree=/home/ccpa-auto/luarocks install <projeto>