it-swarm-pt.tech

Como configurar um repositório APT?

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 por favor pode me ajudar? Eu tenho o repositório em http://quickmediasolutions.com/apt/dists

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

Aqui está o que foi adicionado ao meu /etc/apt/sources.list:

deb http://quickmediasolutions.com/apt stable main
51
Nathan Osman

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 (vá até o exemplo 4).

26
Michael Crenshaw

Basta configurar um repositório simples, mas assinado em um servidor 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 inserir novos arquivos *.deb, atualizar ou deixar um trabalho cron tratar disso.

Gere 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 dê a ela um $KEYNAME único quando solicitado. (Exemplos adicionais assumem "dpkg1" como keyname.)

 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 do repositório /apt/ em seu servidor da Web, mas exclua a chave secret.gpg após a inicialização .

Atualizar script CGI

Esta é a atualização simples do script Shell/CGI 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 Shell é que ele aceita qualquer arquivo *.deb que você inclua, mas também procura recursivamente (iniciando de um nível acima) para outros, e os vincula simbolicamente. (Precisa de .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 da seguinte entrada apt-sources.list:

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 em que os pacotes são construídos, não no servidor da 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 o sinalizador trusted=yes habitualmente para tudo, ou se você não está realmente certo sobre o pacote Origin.

Para usabilidade

Para usuários finais, apenas solte um HEADER.html no diretório do repositório. Os apaches mod_auto_index serão precedidos dessa 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 repos complexos APT e YUM. (Mas vamos esperar que o RPM finalmente morra em breve ...) - É melhor instalado por gem install prm.

  • E eu também escrevi um pequeno script para automatizar isso da seguinte forma: http://apt.include-once.org/apt-phparchive - Por favor, não que ele não seja excessivamente robusto e escrito em PHP (por uma vez, isso é coincidência), e foi originalmente criado para pacotes DEB e RPM-over-APT e Phar.

Como isso está intimamente relacionado à questão original, também existem 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 embalagem).

39
mario

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ório 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 os 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.

7
txwikinger

Você pode também considerar um Launchpad PPA

2
ups

Para quem enfrenta este 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.

0
theeminence