Documentação do Cookutils

SliTaz Cook & Cooker

O Cookutils do SliTaz fornece ferramentas e utilitários que ajudam na construção de pacotes para o SliTaz. Eles são fáceis de usar e aprender, rápidos e leves. Você será capaz de criar pacotes para o SliTaz em apenas alguns comandos. O conjunto cookutils é dividido no estilo BSD, uma ferramenta para cada tarefa, em torno do comando central cook e do Cooker.

O cook compila um receipt e produz um tazpkg. Em torno dele, um punhado de sub-ferramentas focadas lidam com as consultas do wok, o banco de dados de pacotes, a configuração do ambiente de compilação, a compilação em lote, a análise de dependências, a limpeza e a criação de receipts. O Cooker é um robô de compilação com mais automação e pode ser usado como interface para o cook, já que fornece uma interface CGI/web para visualizar logs de forma colorida. Todas as ferramentas compartilham os mesmos arquivos de BD e wok, e todas compartilham listas de pacotes bloqueados e quebrados, assim como atividade.

Para informações técnicas (estilo de código, layout do repositório, etc), consulte o README encontrado na árvore de fontes ou em /usr/share/doc/cookutils.

Visão geral das ferramentas

O conjunto cookutils é composto pelas seguintes ferramentas voltadas ao usuário, todas disponíveis em /usr/bin/:

cook              Compila e empacota um único receipt
cook-all          Compila em lote pacotes de uma lista / cookorder
cook-clean        Apaga arquivos e pastas criados na compilação (taz/, install/, source/)
cook-deps         Analisa dependências em tempo de execução de um pacote compilado
cook-new          Cria um novo esqueleto de pacote no wok
cook-pkgdb        Constrói o BD de pacotes para $PKGS mais split.db / maint.db
cook-setup        Inicializa um chroot de compilação ou ambiente de compilação cruzada
cook-wok          Consultas somente leitura no wok (list / search / uncook / …)
cooker            Robô de compilação com interface web/CGI
cookiso           Construtor de imagem ISO
cooklinux         Wrapper de compilação do kernel
cooks             Compila um pacote mais todos os seus sub-pacotes SPLIT
cross             Construtor de toolchain de compilação cruzada

Toda ferramenta entende help, --help, -h ou usage para sua tela de uso embutida com exemplos.

Para compatibilidade retroativa, cook mantém shims (adaptadores) transparentes para os sub-comandos legados (cook pkgdb, cook list-wok, cook setup, cook new, cook clean-wok, cook all, etc.). Eles exec (executam) a ferramenta cook-* correspondente, para que scripts e hábitos existentes continuem funcionando.

Uso do Cook

O Cook fornece uma pequena ajuda embutida que você pode exibir com o comando usage. Ele também possui opções para executar tarefas especiais em um pacote antes de compilá-lo ou depois. Para obter ajuda e uso:

# cook usage

Como fazer

A primeira coisa que você terá que fazer antes de compilar pacotes é configurar seu ambiente. As 2 formas recomendadas de trabalhar: compilar diretamente no host ou compilar em chroot para proteger seu host. No caso de querer trabalhar em um chroot, você pode instalar e usar o Tazdev para criar um e fazer chroot nele:

# tazdev gen-chroot && tazdev chroot

Por padrão o Tazdev cria um chroot em /home/slitaz/cooking/chroot, mas você pode especificar um caminho personalizado no argumento. A localização do chroot não é importante, quando você estiver no chroot usará caminhos padrão do SliTaz como /home/slitaz/wok para o diretório do wok ou /home/slitaz/log para todos os logs do cook. Como de costume, você pode exibir a ajuda do tazdev com tazdev usage.

Quando você usa um chroot há 2 diretórios especiais montados com a opção bind: src e packages. Os fontes para todos os pacotes são armazenados por padrão em /home/slitaz/src, este diretório é montado no chroot para que as ferramentas possam usá-los. Este método permite compartilhar fontes entre vários chroots, como um para cooking e outro para stable. A localização padrão do diretório de pacotes é: /home/slitaz/[versão]/packages, então eles não ficam no chroot e estão seguros caso o chroot seja removido por engano.

Primeiros passos

O Cook usa o arquivo de configuração /etc/slitaz/cook.conf, se você quiser usar caminhos personalizados para diretórios e arquivos do SliTaz, terá que modificá-lo. O setup cria alguns diretórios e arquivos para manter rastro de atividade e erros, todos os arquivos são arquivos de texto puro que você pode abrir em um editor de texto. Para preparar seu ambiente:

# cook-setup

O comando cook-setup possui uma opção --wok que permite clonar um wok do SliTaz enquanto configura seu ambiente de cook. Mesmo que você ainda não seja um desenvolvedor oficial, pode cloná-lo e usar pacotes existentes como exemplo para criar os seus. Para configurar e clonar o wok cooking padrão ou o wok undigest:

# cook-setup --wok
# cook-setup --undigest

Para ambientes de compilação cruzada, passe a arquitetura alvo:

# cook-setup arm
# cook-setup armv6hf
# cook-setup armv7
# cook-setup x86_64

Opções do cook.conf

Algumas opções globais em /etc/slitaz/cook.conf separam o caso de uso de host de compilação de um chroot de desenvolvedor:

MAKE_BUNDLE="no"      cook-pkgdb constrói bundle.tar.lzma (apenas host de
                      compilação, empacota mirrors upstream + extra.list).
REPOLOGY_CHECK="no"   postcheck consulta repology.org por selos "outdated".
                      Requer wget com suporte a HTTPS.

Ambas padrão para "no", para que um chroot novo não tente acessar a rede durante cook / cook-pkgdb. Hosts de compilação estilo Pascal alternam para "yes". Os padrões de código tratam a ausência graciosamente, então uma instalação atualizada do cookutils com um cook.conf existente funciona sem nenhuma mudança manual.

Teste seu ambiente

O Cook fornece um comando de teste que criará um pacote e o compilará. Isso permite ver se seu ambiente está funcionando e fornece um pacote de exemplo com um receipt. O pacote fictício se chama 'cooktest' e pode ser removido após os testes. Para compilar o pacote de teste:

# cook test

Criar e compilar

Se seu ambiente está configurado corretamente, você pode começar a criar e compilar pacotes do SliTaz a partir do seu wok. Para criar um novo pacote com um receipt vazio (você também pode criar um interativamente):

# cook-new pkgname
# cook-new pkgname --interactive

Se você acabou de criar um novo pacote, terá que editar o receipt com seu editor de texto favorito. Quando o receipt estiver pronto ou se você tiver um pacote existente, pode compilá-lo:

# cook pkgname

Se tudo correr bem, você encontrará seu pacote no diretório $SLITAZ/packages e quaisquer arquivos produzidos em $SLITAZ/wok/pkgname.

Compilar e instalar

Se você quiser compilar e instalar o pacote em um único comando:

# cook pkgname --install

Obter fontes

Se você quiser ou precisar baixar apenas o fonte de um pacote sem compilá-lo, você pode usar a opção --getsrc como abaixo:

# cook pkgname --getsrc

Limpar pacotes

Após a compilação e empacotamento, há vários arquivos no wok que ocupam espaço em disco. Para limpar um único pacote:

# cook pkgname --clean

Você também pode limpar o wok inteiro de uma vez ou apenas remover os fontes para recuperar espaço em disco:

# cook-clean wok
# cook-clean src

Buscar e listar o wok

cook-wok lida com consultas somente leitura no wok. Ele usa grep e, portanto, suporta expressões regulares:

# cook-wok list                  # lista pacotes no wok (filtrado por ARCH)
# cook-wok search libssh         # busca nomes de pacotes
# cook-wok uncook                # inventário completo de pacotes sem tazpkg
# cook-wok wanted gtk            # tarefas do cooker para receipts gtk* (incremental)
# cook-wok build_depends         # idem guiado por BUILD_DEPENDS

Funções de receipt

Muitos pacotes fornecem o mesmo tipo de arquivos, como pacotes *-dev com bibliotecas estáticas, arquivos pkgconfig e cabeçalhos include. O cook fornece uma função para ser usada no genpkg_rules de um receipt:

get_dev_files     : Instala /usr/lib/{lib.*a,pkgconfig} /usr/include

Lista de BD de pacotes

cook-pkgdb gera o banco de dados de pacotes para o diretório $PKGS e atualiza o split.db e maint.db de todo o wok. Isso permite criar um repositório local de pacotes com bastante facilidade e é usado para criar a lista oficial de pacotes do SliTaz encontrada nos mirrors. Para criar uma lista de pacotes e os arquivos de flavors Live:

# cook-pkgdb              # reconstrução completa
# cook-pkgdb --flavors    # reconstrução completa + regenera flavors do TazLiTo
# cook-pkgdb --rmpkg      # reconstrução completa + remove arquivos tazpkg obsoletos
# cook-pkgdb --splitdb    # atualiza apenas $cache/split.db
# cook-pkgdb --maintdb    # atualiza apenas $cache/maint.db

Quando chamado via --flavors, o cook-pkgdb verifica um repositório de flavors em /home/slitaz/flavors e empacota todos os flavors usando a lista de pacotes mais recente disponível.

Compilações em lote

cook-all compila pacotes listados em um arquivo de texto puro, um por linha. Linhas começando com # e linhas em branco são ignoradas. Sem argumento de arquivo, ./cookorder é tentado primeiro, depois /etc/slitaz/cookorder:

# cook-all                       # usa o cookorder padrão
# cook-all my.list                # compila de uma lista personalizada
# cook-all --resume               # reinicia uma reconstrução completa interrompida

A flag --resume pula pacotes que já possuem um diretório taz/, o que permite continuar após uma reconstrução interrompida sem recompilar o que já foi feito.

Dependências em tempo de execução

cook-deps analisa as dependências em tempo de execução de um pacote compilado, lendo seu files.list e resolvendo cada referência de binário, biblioteca compartilhada, pkg-config ou libtool de volta ao pacote que a fornece:

# cook-deps libssh                # saída bonita por sub-pacote
# cook-deps libssh -q             # uma linha por sub-pacote, amigável a máquinas
# cook-deps libssh --incl         # também mostra glibc-base / gcc-lib-base

O Cooker

O Cooker é um Robô de Compilação, sua primeira função é verificar commits em um wok, criar uma cooklist ordenada e compilar todos os pacotes modificados. Ele também pode ser usado como interface para o cook, já que ambos usam os mesmos arquivos. O Cooker também pode ser usado para compilar uma grande lista de pacotes de uma vez, como todos os pacotes de um flavor. O Cooker fornece uma boa interface CGI/Web que funciona por padrão em qualquer sistema SliTaz, já que fornece suporte a CGI via o servidor web Busybox httpd.

O Cooker fornece uma pequena ajuda de uso embutida e opções curtas de comando. Por exemplo, para exibir o uso você pode usar:

# cooker usage
# cooker -u

Configuração do Cooker

Assim como o cook, o Cooker precisa de um ambiente de trabalho antes de começar a usá-lo. A principal diferença com o ambiente do cook é que o Cooker precisa de 2 woks. Um wok Hg limpo como referência e um wok de compilação. Desta forma é fácil comparar ambos os woks e obter modificações. Se você já tem um ambiente de cook, deve mover seu wok antes de configurar o Cooker ou ele reclamará. O setup também instalará um conjunto de pacotes de desenvolvimento que podem ser configurados no arquivo de configuração cook.conf e na variável SETUP_PKGS. Para configurar seu ambiente do cooker:

# cooker setup

Se tudo correr bem, você agora tem 2 woks, pacotes de desenvolvimento base instalados e todos os arquivos necessários criados. O comportamento padrão é verificar por commits, você pode executar um teste:

# cooker

Cook do Cooker

Novamente, 2 formas de trabalhar agora: fazer alterações no wok Hg limpo e lançar o cooker sem nenhum argumento ou compilar pacotes manualmente. O cooker permite compilar um único pacote ou todos os pacotes de uma categoria ou um flavor. Você também pode tentar compilar todos os pacotes não compilados, mas esteja ciente de que o Cooker não foi projetado para lidar com milhares de pacotes.

Para compilar um único pacote, que é o mesmo que cook pkgname mas com mais logs:

# cooker pkg pkgname

Para compilar mais de um pacote de uma vez, você tem diferentes tipos de escolhas. Você pode usar um pacote existente como usado para flavors Live, você também pode usar uma lista personalizada usando os nomes de pacotes listados linha por linha. Finalmente, você pode compilar todos os pacotes de uma categoria.

# cooker flavor [nome]
# cooker list [/caminho/para/cooklist]
# cooker cat [categoria]

O Cooker também permite recompilar uma revisão Hg específica. É útil em produção, para que se o Robô de Compilação foi interrompido enquanto compilava commits, você possa então compilar pacotes manualmente:

# cooker rev 9496

Pacotes bloqueados

O Cook e o Cooker lidam com um arquivo com uma lista de pacotes bloqueados, então eles não compilarão quando commits acontecerem ou se uma cooklist for usada. Isso é muito útil para um Robô de Compilação do Cooker em produção. Quando você bloqueia ou desbloqueia um pacote, pode adicionar uma nota às cooknotes. Exemplo de bloqueio de pacotes:

# cook pkgname --block
# cooker block pkgname
# cooker -n "Nota sobre bloqueio do pkgname"

A lista de pacotes bloqueados também é exibida na interface web do Cooker. Para desbloquear um pacote você deve usar o comando unblock ou a opção cook --unblock:

# cook pkgname --unblock
# cooker unblock pkgname

CGI/Web do Cooker

Para permitir que você visualize arquivos de log de uma forma agradável, mantenha rastro de atividade e ajude a encontrar erros, você pode usar a interface web do Cooker localizada por padrão na pasta /var/www/cooker. Se você não usa um chroot e o servidor web Busybox httpd está rodando, a interface web funcionará sem configuração e deve ser acessível em: http://localhost/cooker/cooker.cgi

Se você usou um ambiente chroot, deve também instalar o cookutils no seu host e modificar a variável de caminho SLITAZ. Uma forma padrão de trabalho é ter um chroot em:

/home/slitaz/cooking/chroot

Com /etc/slitaz/cook.conf modificado como abaixo:

SLITAZ="/home/slitaz/cooking/chroot/home/slitaz"

Nota: Não é obrigatório instalar o cookutils no host para usar a interface web. Se você usa Lighttpd, também pode copiar os arquivos cooker.cgi e style.css, por exemplo, para seu diretório ~/Public e usar um cook.conf personalizado com ele. A vantagem de instalar o cookutils no host é obter atualizações regulares via o gerenciador de pacotes Tazpkg. Digamos que você clonou ou baixou o cookutils:

$ cp -a cookutils/web ~/Public/cgi-bin/cooker
$ cp -f cookutils/configs/cook.conf ~/Public/cgi-bin/cooker

Edite o arquivo de configuração: ~/Public/cgi-bin/cooker/cook.conf para definir seu caminho SLITAZ e pronto!

Cooknotes

O recurso cooknotes permite escrever pequenas notas pessoais sobre empacotamento e é útil para colaboração. O cooknotes foi codificado para permitir que os mantenedores do Robô de Compilação SliTaz compartilhem notas entre si e outros contribuidores. O Cooker pode bloquear a compilação de um pacote ou recompilar pacotes manualmente, por exemplo, é bom fazer uma nota se um pacote está bloqueado para que o mantenedor saiba por que o admin fez isso. As cooknotes são exibidas na interface web e podem ser verificadas a partir da linha de comando:

# cooker note "Pacote pkgname bloqueado devido à alta carga de CPU"
# cooker notes

Cooker como Robô de Compilação

O Cooker é projetado para ser um Robô de Compilação para o SliTaz, isso significa que ele monitora 2 woks, atualiza o wok Hg, obtém as diferenças e compila todos os pacotes que foram commitados. A forma mais segura e limpa de executar o Cooker como Robô de Compilação com cron é usar um ambiente chroot, mas ele pode rodar diretamente no host se você quiser.

Para executar o Cooker automaticamente você deve usar cron do chroot e adicionar uma única linha aos crontabs do root em /var/spool/cron/crontabs. Digamos que você gostaria de executar o Cooker a cada 2 horas:

* */2 * * * /usr/bin/cooker

Cooker BB iniciado no boot

O ambiente do Cooker e a tarefa cron podem ser iniciados automaticamente ao ligar. Você deve ter o cookutils-daemon instalado no host e usar uma instalação padrão do SliTaz para que funcione corretamente (cooking fica em /home/slitaz/cooking). O script daemon montará quaisquer sistemas de arquivos virtuais se necessário, assim como fontes e pacotes. Os arquivos fonte estão em /home/slitaz/src e montados no chroot para que você possa compartilhar fontes de pacotes entre várias versões (stable, cooking, undigest). Se o pacote ainda não está instalado:

# tazpkg get-install cookutils-daemon

Para iniciar o daemon você deve ter uma definição de arquivo cron para o root no chroot, o script daemon funciona como todos os outros daemons do sistema e pode ser manipulado com:

# /etc/init.d/cooker [start|stop|restart]