Package maintainer guide (Português)

From ParabolaWiki
Jump to: navigation, search

Bem vindo ao a do Mantenedor de Pacotes do Parábola GNU/Linux

Este artículo mostra os passos necessários para começar a trabalhar com nossos repositórios. Se você vai fazer uma nova substituição livre para algum pacote, consulte a nossa guia para a criação de substitutos livres.

Em primeiro lugar, trate de ir pelo canal #parabola e cadastrar-se a lista de discussão dev list . Se acontece alguma coisa importante, você pode encontrar ali.

Além disso, você tem que se cadastrar no seguimento de incidências, para que a gente possa te dar tarefas ou você puder escolher alguns pela sua conta.

1 Ferramentas

Instale libretools. Também isto irá instalar o ssh, rsync, git e devtools, que são as ferramentas necessárias para o pacote.

 # pacman -Sy libretools devtools
Nota: devtools são um conjunto de scripts utilizados pelos desenvolvedores do Arch para facilitar as suas tarefas, pelo qual necessitamos estas ferramentas para o chroot desde ali. O Libretools é feito por nós aqui no Parabola :)
Aviso: Você vai ter que editar o arquivo /etc/libretools.conf e configurar o ambiente de empacotamento antes de utilizar o libretools

2 Editando /etc/libretools.conf

A configuração para o libretools está em

File: /etc/libretools.conf
## Blacklist URL
BLACKLIST=http://repo.parabolagnulinux.org/docs/blacklist.txt

# Diff tool (vimdiff, gvimdiff, meld, etc)
DIFFTOOL=vimdiff

# The dir where you work on
WORKDIR=/home/$USER/packages
# The repos you'll be packaging for
# Tip: As early repos take precedence on $REPOS loops, you can use this as
# inverted order of precedence. Put testing repos first so fullpkg find new
# PKGBUILDs first, for instance.
REPOS=('core' 'extra' 'community' 'libre' 'libre-testing' 'social' 'sugar')

# The architectures
ARCHES=('i686' 'x86_64' 'mips64el' 'any')

## The directory where the chroots are stored
CHROOTDIR=/home/chroot

## The working chroot
# A chroot is useful to build packages isolated from the current system and avoid
# unwanted (as in not in dependencies) automatic library linking 
CHROOT=root

## Obtains CacheDir from pacman.conf
CACHEDIR=`grep "^#\?CacheDir" /etc/pacman.conf | cut -d'=' -f2`

## Parabola hostname (should be the same used on ssh_config
PARABOLAHOST=parabola

## Run a command before releasing a package (ie. SSH connection, SSH tunnel, etc.)
HOOKPRERELEASE="ssh -fN parabola"

## Server destination of libre packages
# Don't change unless you know what you're doing and you won't screw
# anything ;)
LIBREDESTDIR=/srv/http/repo/public

## ABSLibre
ABSLIBREGIT=http://projects.parabolagnulinux.org/abslibre.git

## Commit Command
## Should be git or hg
## Uncomment only one of those
#COMMITCMD=git
#COMMITCMD=hg

## Build cmd for fullpkg-ng
## Uncomment one of those or make one of your choice
FULLBUILDCMD="sudo libremakepkg -cumL -M --noconfirm -M --nocheck"
#FULLBUILDCMD="here is a place for cross-compiling build cmd"

## Toru
# Section for toru's vars
TORUPATH=/var/lib/libretools/toru

## Package signing
# Leave commented to disable signing
#SIGEXT=".sig"
#SIGID="0xYOURID"

# Checks if vars aren't empty

for VAR in CHROOTDIR CHROOT CACHEDIR PARABOLAHOST LIBREDESTDIR \
    BLACKLIST WORKDIR REPOS ARCHES ABSLIBREGIT \
    COMMITCMD DIFFTOOL FULLBUILDCMD; do

    ret=0
    [[ -z ${!VAR} ]] && {
        echo "Configure $VAR var in /etc/libretools.conf"
        ret=1
    }
    [ $ret -ne 0 ] && exit 1 
done

source /usr/bin/libremessages

## These are architecture specific files.
## Uncomment them if you installed libretools-arch
#source /etc/libretools.d/mips64el.conf
#source /etc/libretools.d/x86_64.conf
#source /etc/libretools.d/i686.conf



## Recommended SSH Config follows
# SSH host, it's better if you have it configured on ~/.ssh/config
# with ControlMaster auto (and a shell opened somewhere else)
#
# Example:
# Host *
#    Protocol 2
#    ControlMaster auto
#    ControlPath /tmp/ssh-%r@%h:%p
#
## Repo server
# Host parabola
#    Port 22
#    HostName repo.parabolagnulinux.org
#    User parabolavnx
#    IdentityFile ~/.ssh/id_rsa
#
## Git server
# Host vparabola
#    Port 1863
#    HostName parabolagnulinux.org
#    User parabola
#    IdentityFile ~/.ssh/id_rsa
Note: O que foi mostrado recentemente é a versão do arquivo incluído no libretools no dia 26/11/2011, isto pode ter sido trocado nas versões atuais, estamos dizendo isto para avisar se você está usando isto como referência.
Note: A informação anterior de configuração do SSH não está atualizado. Desça mais abaixo nesta pagina até a parte onde fala do ssh que ai terá a configuração correta.

Pode colocar sua própria configuração por usuário ~/.config/libretools/libretools.conf em vez da global que está no /etc/libretools.conf.

Warning: libremakepkg ainda necessita da configuração no /etc/libretools.conf mesmo se você esta usando a configuração por usuário.


Terá que editar este arquivo:

 # $EDITOR /etc/libretools.conf

2.1 Configurar CHCOPY

Ao trabalhar com chroots, há o chroot principal ($CHROOTDIR/root), e uma cópia de trabalho dele, CHROOTDIR$/$CHROOT. É mais fácil se você definir CHROOT para o seu nome de usuário.

File: /etc/libretools.conf
## The working copy
CHCOPY=$USUARIO

2.2 Escolhe um COMMITCMD

Primeiro escolhe um commitcmd:

File: /etc/libretools.conf
## Uncomment only one of those
COMMITCMD=git
#COMMITCMD=hg

2.3 Adicionar uma assinatura GPG

A continuação, proporcione uma chave pública GnuPG para assinar o pacote:

Se você não tem uma chave pública GnuPG você pode usar o seahorse para construir uma chave usando o RSA 2048 e exportá-lo para salvá-lo.

Use a peça da chave ID no SIGID e descomente a linha correspondente:

File: /etc/libretools.conf
## Package signing
# Leave commented to disable signing
#SIGEXT=".sig"
#SIGID="0xSUAID"

2.4 Trocar ABSLIBREGIT

Se necessita forçar a abslibre.git (se você está mantendo um paquete), então necessitará editar o ABSLIBREGIT:

File: /etc/libretools.conf
## ABSLibre
ABSLIBREGIT=ssh://git@parabolagnulinux.org:1863/abslibre.git

Se ja copiou o repositorio corretamente, para trocar isto a after-the-fact (despois dos feitos), edite

File: abslibre/.git/config
[remote "origin"]
  url = ssh://git@parabolagnulinux.org:1863/abslibre.git

3 Ambiente de empacotamento

O empacotamento pode ser muito atrapalhado e isso pode incomodar muito para você (ao igual que qualquer tarefa repetitiva). Então por isso o Libretools existe com o objetivo de fazer as coisas mais simples.

3.1 Pasta Chroot

Vai precisar de um ambiente de empacotamento limpo para garantir de que os pacotes, funcionem em cada sistema do Parábola apesar da configuração e os dados que você tem no seu sistema. Por isso está o chroot.

Você precisa criar dentro uma pasta chroot para a construção de pacotes. Isso também irá ajudá-lo a identificar as dependências que estão faltando e manter seu sistema limpo todos os dias também. A maneira mais fácil de fazer isso para ser executado é

 # libremkchroot -C /etc/pacman.conf -M /etc/makepkg.conf

Você deve trocar CHROOTDIR, CHROOT, CHCOPY no /etc/libretools.conf de acordo a configuração do seu chroot.

3.2 Pasta de trabalho libretools

Para minimizar os erros nos dados de carga, criamos ferramentas automáticas para o processo, nosso libretools utiliza a hierarquia de diretórios do nosso repositório.

Tem um script que lhe ajudará a gerar uma pasta de trabalho adequado, incrivelmente chamado createworkdir. Execute isto, e criará todas as pastas necessárias, e inclusive o git-clone fará a árvore ABSLibre para você.

 $ createworkdir

Pode achar mais informação sobre árvore de pasta aquí.

3.3 Host de Parabola para a configuração do seu ssh

Você deve adicionar isto ao seu ~/ssh/config:

File: ~/.ssh/config
Host parabola
      Port 1863
      HostName repo.parabolagnulinux.org
      User repo

E enviar a sua chave publica (~/.ssh/id_rsa.pub ou nome personalizado) a Parabola mailing list.

Se você deseja que o nome do seu host seja diferente, também tem que trocar o seu
File: ~/.config/libretools/libretools.conf
'''PARABOLAHOST=nome_personalizado'''

4 Criação de pacotes

Para fazer um librepackage, só necessitará do PKGBUILD de abslibre. Para atualizar no seu $WORKDIR o abslibre, só tem que fazer:

 $ updateabslibre
Warning: Não usar qualquer pasta no $WORKDIR/repos ou $WORKDIR/staging para construir

Lembre que o libremakepkg debe ser executado via root.

Você necessita "copiar ou vincular os arquivos desde abslibre e fazer:

 $ cd /directory/where/your/PKGBUILD/is
 # libremakepkg  -cu

-u opção para libremakepkg atualizar o chroot root antes de criar o pacote

-c opção para libremakepkg limpar a copia de chroot antes de construir o pacote

Quando isto termine, você terá um pacote de ${PKGDEST} especificado no arquivo /etc/makepkg.conf.

Veja a página de libremakepkg para uma descrição de como trabalha o libremakepkg.

5 Criando pacotes

Por favor, siga esta guia: Creating -libre packages

6 Subir pacotes

Para subir pacotes no nosso repositorio, só tem que fazer:

 $ librestage {repo-to-upload}
 $ librerelease

7 Dicas e truques

7.1 Libertando vários pacotes ao mesmo tempo

Originalmente, librerelease deveria decidir onde colocar um pacote e subir ao repositório servidor imediatamente. Agora, librestage faz a primeira parte e librerelease faz a segunda, então na prática, você pode fazer vários pacotes e etapas para subir mais tarde.

7.2 Organizando um só pacote para vários repositórios

Toma nota, librestage aceita vários nomes de repositórios como argumento. Se você faz isso, pode organizar o paquete(s) em todos eles, deixando carregar os pacotes em qualquer número de repositórios que você desejar. Não é uma função para abusar, mas é útil enquanto migram a repositórios [libre] e [libre-testing]... por exemplo, você poderá libertar a [core] e [libre], o [testing] e [libre-testing] ao mesmo tempo.

7.3 Control MD5sum

Se você troca a matriz de fontes num PKGBUILD, terá que trocar a matriz md5sums para poder usar para teus pacotes. Modifique do PKGBUILD e use a utilização deste comando para gerar md5sum para os teus pacotes:

 $ makepkg -g >> PKGBUILD

7.4 Conexión SSH para Parabola

Tenha certeza que as permissões no /home/${user}/.ssh sejan 700:

 $ chmod 700 * *.*

Se você adicionou o host de parabola para o teu ~/.ssh/config, pode simplesmente fazer:

 $ ssh parabola