Basta configurar um repositório simples, mas assinado, em um servidor da web. Como a maioria dos outros tutoriais é um tanto antiga ou complicada, tentarei replicar o procedimento aqui. A configuração inicial exige um pouco de esforço, mas o script de compilação simples facilita o gerenciamento. E você pode simplesmente inserir novos *.deb
arquivos, atualizar ou deixar um trabalho cron lidar com isso.
Gere algumas chaves de assinatura
Primeiro, você precisa criar uma gpg
chave de assinatura para pacotes e seu repositório. Crie uma (4) chave de assinatura RSA, sem senha, e dê uma chave única $KEYNAME
quando solicitada. (Outros exemplos assumem " dpkg1
" como nome da chave.)
gpg --gen-key
gpg -a --export-secret-key dpkg1 > secret.gpg
gpg -a --export dpkg1 > public.gpg
Eu disse que não havia senha, porque seu servidor da web não possui um macaco incorporado para digitá-lo repetidamente. E os pacotes e repositórios assinados têm como objetivo apenas satisfazer as reclamações dos gerentes de atualização sobre isso. Faça o upload das duas chaves para o novo /apt/
diretório do repositório no servidor da web, mas exclua a secret.gpg
chave após a 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 gpg
linhas precisam ser executadas apenas uma vez, para inicializar a configuração do GPG em algum diretório $GNUPGHOME
(acima da raiz do documento). Exclua apenas o secret.gpg
sucesso posterior.
Uma característica exclusiva desse pequeno script de shell é que ele aceita todos os *.deb
arquivos que você solta, mas também procura recursivamente (a partir de um nível acima) por outros, e os vincula simbolicamente. (Precisa de .htaccess Options FollowSymLinks
eventualmente.)
Você pode executar esse script manualmente como CGI ou por tarefa 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 apt-sources.list
entrada:
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 de pacote
A assinatura de 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 criados, não no servidor da web do repositório.)
Repositório não assinado
Se você não precisar de pacotes assinados, poderá reduzir o script de atualização para apenas:
dpkg-scanpackages . > Packages
bzip2 -kf Packages
Que ainda pode ser usado por usuários médios, mas precisa de um sinalizador personalizado para apt.sources
:
deb [trusted=yes] http://apt.example.org/deb/ ./
Mas por favor, não use a trusted=yes
flag habitualmente para tudo, ou se você não tiver certeza sobre a origem do pacote.
Para usabilidade
Para usuários finais, basta soltar um HEADER.html
no diretório do repositório. O Apaches mod_auto_index
anexará 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
Atualmente, existem algumas ferramentas para automatizar o gerenciamento de repositório. E ainda existem hosters online de repositório e serviços de criação de pacotes ( gemfury , packagecloud , bintray etc.)
Uma alternativa bastante conveniente é prm . É um script Ruby, que cria repositórios APT e YUM complexos. (Mas vamos apenas torcer para que o RPM finalmente acabe em breve ..) - É melhor instalado por gem install prm
.
E também escrevi um pequeno script para automatizar isso da mesma forma: http://apt.include-once.org/apt-phparchive - Por favor, não que não seja excessivamente robusto e escrito em PHP (pela primeira vez, isso é coincidência), e foi originalmente concebido para os pacotes DEB e RPM-over-APT e Phar.
Como isso está intimamente relacionado à pergunta original, também existem ferramentas para criar pacotes Debian mais facilmente. Um pouco desatualizado: EPM . Muito mais contemporâneo: FPM . E minha bifurcação pessoal: XPM (abordagem mais preguiçosa para empacotar aplicativos da linguagem de script).