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).
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
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).
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.
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.
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.
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.)
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 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>
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.)
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.
Você também pode considerar um PPA do Launchpad
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
.