Como configurar um repositório APT?

49

Eu gostaria de configurar um repositório APT em um servidor que fornecerá alguns pacotes.

Existe uma maneira de configurar um sem instalar qualquer software no servidor?

Como os arquivos precisam ser organizados?

Edit: Eu devo estar fazendo algo errado ... alguém pode me ajudar? Eu tenho o repositório no link

Não sei onde ou o quê, mas algo está mal configurado. Eu só tenho atualmente um pacote e é para todas as arquiteturas.

Veja o que foi adicionado ao meu /etc/apt/sources.list :

deb http://quickmediasolutions.com/apt stable main
    
por Nathan Osman 31.07.2010 / 02:33

5 respostas

25

Configurar um repositório trivial é muito fácil usando o dpkg-scanpackages. Esta página explica como configurar um repositório trivial e este explica como usá-lo (desloque-se para o exemplo 4).

    
por mac9416 31.07.2010 / 02:55
37

Basta configurar um repositório simples, mas assinado , em um servidor da web. Como a maioria dos outros tutoriais é um pouco desatualizada ou complicada, tentarei replicar o procedimento aqui. A configuração inicial exige um pouco de esforço, mas o simples script de construção facilita o gerenciamento. E você pode simplesmente adicionar novos arquivos *.deb , atualizar ou deixar um trabalho cron tratar disso.

Gerar algumas chaves de assinatura

Primeiro, você precisa criar uma chave de assinatura gpg para pacotes e seu repositório. Faça uma (4) chave de assinatura RSA, sem senha, e forneça uma $KEYNAME exclusiva quando solicitado. (Exemplos adicionais assumem " dpkg1 " como nome-chave.)

 gpg --gen-key
 gpg -a --export-secret-key dpkg1 > secret.gpg
 gpg -a --export dpkg1            > public.gpg

Eu não disse nenhuma senha, porque o seu servidor não possui um macaco embutido para digitá-lo repetidamente. E os pacotes e repositórios assinados servem apenas para satisfazer as reclamações dos gerentes de atualização sobre isso. Basta fazer o upload das duas chaves para o novo diretório /apt/ do repositório em seu servidor da Web, mas exclua a secret.gpg key após inicialização.

Atualizar script CGI

Este é o script shell / CGI de atualização simples para ele:

#!/bin/sh
echo Status: 200 Okay
echo Content-Type: text/plain
echo
echo Rebuilding APT repository:

{
  #-- settings
  export GNUPGHOME=/var/www/usr12345/files
  export KEYNAME=dpkg1
  #-- one-time setup
  if [ ! -e "$GNUPGHOME/secring.gpg" ] ; then
     gpg --import -v -v ./secret.gpg
     gpg --import -v -v ./public.gpg
     gpg --list-keys
  fi

  #-- symlink .deb files from adjacent sub-directories
  find .. -name '*.deb' -exec ln -s '{}' . \;

  #-- build Packages file
  apt-ftparchive packages . > Packages
  bzip2 -kf Packages

  #-- signed Release file
  apt-ftparchive release . > Release
  gpg --yes -abs -u $KEYNAME -o Release.gpg Release

} 2>&1

As três linhas gpg só precisam ser executadas uma vez, para inicializar a configuração do GPG em algum diretório $GNUPGHOME (acima da raiz do documento). Exclua somente o secret.gpg após o sucesso.

Uma característica única deste pequeno script de shell é que ele aceita qualquer arquivo *.deb , mas também procura recursivamente (começando de um nível acima) para outros, e os vincula simbolicamente. (Needs .htaccess Options FollowSymLinks eventualmente.)

Você pode executar esse script manualmente como CGI ou por trabalho cron. Mas esconda-o, ou melhor ainda, mova-o para fora da raiz do documento.

Por ser um repositório apt "trivial", ele precisa do seguinte apt-sources.list entry:

deb http://example.org/deb/  ./    # Simple signed repo

Isso é adequado para repositórios de arquitetura única e, se você não espera centenas de pacotes.

Assinatura do pacote

Assinar seus pacotes individuais também é trivial, depois de configurar suas chaves gpg:

dpkg-sig -k dpkg1 -s builder *.deb

(Isso deve ser feito na estação de trabalho onde os pacotes são construídos, não no servidor web do repositório.)

Repositório não assinado

Se você não precisa de pacotes assinados, pode reduzir o script de atualização para apenas:

  dpkg-scanpackages . > Packages
  bzip2 -kf Packages

Que ainda pode ser usado por usuários comuns, mas precisa de um sinalizador personalizado para apt.sources :

deb [trusted=yes] http://apt.example.org/deb/ ./

Mas, por favor, não use a bandeira trusted=yes habitualmente para tudo, ou se você não tem certeza sobre a origem do pacote.

Para usabilidade

Para usuários finais, basta soltar um HEADER.html no diretório do repositório. Apaches mod_auto_index prefixarão essa nota:

<h1>http://example.org/apt/</h1>
<dl>
<dt>Add this repository to /etc/apt/sources.list as:
 <dd><kbd>deb http://example.org/apt/ ./  # example repo</kbd>
<dt>Import verification key with:
 <dd><kbd>wget -q http://http://example.org/apt/public.gpg -O- | sudo apt-key add -</kbd>
</dl>

Alternativas

Existem algumas ferramentas para automatizar o gerenciamento de repositório nos dias de hoje. E há até hosters de repositório online e serviços de compilação de pacotes ( gemfury , packagecloud , bintray , etc.)

  • Uma alternativa bastante conveniente é prm . É um script Ruby, que constrói complexos APT e YUM repos. (Mas vamos esperar que o RPM finalmente morra em breve ...) - É melhor instalado por gem install prm .

  • E também escrevi um pequeno script para automatizar isso da seguinte forma: link - Por favor, não que não é excessivamente robusto e escrito em PHP (por uma vez, isso é coincidência), e foi originalmente concebido para pacotes DEB e RPM-over-APT e Phar.

Uma vez que isto está intimamente relacionado com a questão original, existem também ferramentas para construir pacotes Debian mais facilmente. Um pouco desatualizado: EPM . Muito mais contemporâneo: FPM . E meu garfo pessoal disso: XPM (abordagem mais preguiçosa para aplicativos de linguagem de script de empacotamento.)

    
por mario 22.12.2011 / 09:35
7

Sim. Você consegue fazer isso. Você só precisa organizar os arquivos da maneira correta e criar os arquivos de índice. Se você colocar a estrutura de diretórios dentro da raiz do documento do seu servidor web, os pacotes podem ser acessados através do servidor web.

Aqui é uma descrição detalhada de como os arquivos precisam ser organizados e como arquivos de índice são criados.

Você também pode usar uma ferramenta chamada reprepro se estiver disposto a instalar esse pacote. Isso tornará a administração um pouco mais conveniente.

    
por txwikinger 31.07.2010 / 02:44
2

Você também pode considerar um PPA do Launchpad

    
por ups 31.07.2010 / 13:23
0

Para quem enfrenta esse erro depois de seguir a resposta de mario:

Unable to find expected entry 'Packages' in Release file (Wrong sources.list entry or malformed file)

faça o seguinte:

dpkg-scanpackages debs /dev/null > Packages
gzip -k Packages
apt-ftparchive release . > Release
gpg --default-key $KEYID -abs -o Release.gpg Release

Eu coloquei meus arquivos *.deb na pasta debs .

    
por theeminence 25.01.2016 / 08:05