ConfigurandoUmRepositorioDebian - UFSC/moodle-provas-livecd-provas GitHub Wiki

Configurando um Repositório Debian

ATENÇÃO: ATUALMENTE NÃO HÁ NENHUM REPOSITÓRIO LOCAL EM USO COM O CD DE PROVAS (NOVEMBRO/2014).

Um repositório Debian é um repositório de pacotes do tipo DEB, utilizado para instalação de pacotes por distribuições baseadas no Debian, como o Ubuntu. Esta página descreverá a configuração de um repositório com pacotes DEB digitalmente assinados.

Para criar o repositório é necessário ter um servidor web instalado e configurado, usualmente o Apache, não é preciso fazer qualquer configuração especial além de criar um virtual host onde o repositório ficará acessível.

OBS: O Codename da versão do Ubuntu que aparece ao longo desta página (precise), é o Codename referente a versão 12.04 do Ubuntu, ele pode ser obtido executando o comando: $ lsb_release -a

Criando uma chave GPG para tornar o repositório confiável

Para que o comando apt-get confie no repositório que estamos criando, devemos disponibilizar uma chave pública que possa comprovar a confiabilidade dele, para isso iremos gerar uma chave GPG em formato texto, que deverá ser adicionada com o comando apt-key.

Gerando a chave GPG

As chaves geradas são gravadas no diretório $HOME/.gnupg/, ou seja, elas são acessíveis apenas pelo usuário que as gerou, lembre disso quando for assinar algum pacote.

Para listar as chaves já cadastradas no GPG, utilize o comando: $ gpg -k

Passo a passo para gerar a chave GPG:

  1. Execute o comando: $ gpg --gen-key
  2. Selecione a opção 4 para gerar uma chave RSA (sign only).
  3. Selecione o tamanho da chave (pode ser o valor padrão).
  4. Deixe o tempo de expiração em zero, para a chave não expirar.
  5. Insira seu nome e e-mail.
  6. Insira uma frase senha, se desejado (pode deixar em branco).

Se a chave GPG foi criada com sucesso, agora podemos gerar uma chave pública no formato texto, que será usada para informar ao apt-get que nosso repositório é confiável.

Criando um arquivo de chave pública no formato texto

Execute o comando abaixo substituindo o e-mail pelo e-mail usado para gerar a chave GPG.

gpg --armor --output [email protected] --export [email protected]

Salve este arquivo na raiz do repositório que ficará acessível pela internet.

reprepro

Além do servidor web, é necessário instalar um gerenciador do repositório, usaremos o reprepro. O reprepro é um aplicativo que atualiza o índice de pacotes disponíveis quando novos pacotes são adicionados. Ele utiliza a Berkeley libdb para armazenar os dados, isso significa que ele não precisa de um servidor de banco de dados como outros aplicativos do mesmo tipo. Sua instalação e configuração será descrita abaixo.

Instalando os pacotes necessários

apt-get install dpkg-sig reprepro

Crie o diretório onde o repositório ficará, ele também será um virtualhost no Apache.

Na nossa instalação, o reprepro precisa do seguinte arquivo de configuração:

  • conf/distributions : descreve o layout do repositório, as distribuições suportadas e os componentes

Este arquivo deve ser criado dentro do diretório conf, que por sua vez deve estar dentro do diretório raiz do repositório (virtualhost do Apache).

conf/distributions

O campo Origin deve ser configurado de acordo com o domínio onde o repositório ficará.

O campo SignWith deve ser preenchido com a id da chave GPG, que pode ser obtido listando as chaves GPG cadastradas (comando $ gpg -k, campo uid), geralmente é o nome e o e-mail, neste formato: Nome [email protected].

O conteúdo abaixo pode ser duplicado para adicionar novas distribuições nesse mesmo arquivo, apenas ajustando os campos chaves (Codename, Version, etc.).

Origin: <DOMINIO>
Label: apt repository
Suite: stable
Codename: precise
Version: 12.04
Architectures: i386
Components: main
Description: Repositório de pacotes Debian do Moodle Provas para Ubuntu
SignWith: <GPG_KEY_ID>

Utilize o comando de adicionar pacote manualmente, descrito na seção Comandos úteis, ou o script atualizar-pacotes.sh para adicionar automaticamente os pacotes que estão no diretório temp.

Assinando pacotes deb

Este não é um procedimento obrigatório, mas é bastante simples de ser feito se for desejado, basta executar o comando abaixo para cada pacote, substituindo a id da chave GPG e o nome do pacote.

dpkg-sig -k <GPG_KEY_ID> --sign builder <PACOTE>

OBS: Na maioria das distribuições que usam pacotes debian, o dpkg/apt não verifica a assinatura dos pacotes quando os está instalando, mesmo que eles estejam assinados. Essa checagem pode ser ativada no arquivo /etc/dpkg/dpkg.cfg, apenas removendo ou comentando a linha no-debsig.

Para verificar as assinaturas de um pacote, execute o seguinte comando:

dpkg-sig --verify <PACOTE>

Adicionando o repositório criado ao apt

Para que os pacotes do nosso repositório tenham prioridade sobre os pacotes da distribuição, nosso repositório deve ser adicionado no topo do arquivo sources.list, pois se houver o mesmo pacote com a mesma versão no nosso repositório e no repositório oficial da distribuição, o pacote escolhido para ser instalado será aquele que está no repositório que aparece primeiro no arquivo sources.list.

Devemos adicionar a seguinte linha ao topo do arquivo /etc/apt/sources.list:

deb http://subdomain.example.org precise main

E em seguida importar a chave pública do repositório com o seguinte comando:

wget -q -O - http://subdomain.example.org/[email protected] | apt-key add -

Comandos úteis

OBS: Os comandos devem ser executados de dentro do diretório base do repositório (onde estão os diretórios conf, db, dists, pool), ou a base do repositório deve ser informada utilizando o parâmetro -b, por exemplo:

$ reprepro -b /var/www/repo ls <pacote>

Mostrar informaçõeS sobre um pacote:

$ reprepro ls <pacote>

Listar todos os pacotes de uma distribuição:

$ reprepro list <distribuição>

Listar todos os pacotes de todos os repositórios:

$ reprepro dumpreferences

Remover um pacote do repositório

$ reprepro remove <distribuição> <pacote>

Adicionar um pacote manualmente ao repositório

$ reprepro -V includedeb <distribuição> <caminho_pacote>

Referências

⚠️ **GitHub.com Fallback** ⚠️