Comment puis-je signer correctement un package que j'ai modifié et recompilé?

20

J'ai couru dpkg-buildpackageaprès avoir obtenu une apt-get source nginxversion backports de nginx et modifié debian/rulespour inclure le module uwsgi. Les derniers résultats de la commande ont été:

dpkg-deb: building package `nginx' in `../nginx_0.7.67-3~bpo50+1_i386.deb'.
dpkg-deb: building package `nginx-dbg' in `../nginx-dbg_0.7.67-3~bpo50+1_i386.deb'.
 signfile nginx_0.7.67-3~bpo50+1.dsc
gpg: keyring `/home/shogun/.gnupg/secring.gpg' created
gpg: skipped "Faidon Liambotis <[email protected]>": secret key not available
gpg: [stdin]: clearsign failed: secret key not available

 dpkg-genchanges  >../nginx_0.7.67-3~bpo50+1_i386.changes
dpkg-genchanges: warning: the current version (0.7.67-3~bpo50+1) is smaller than the previous one (0.7.67-3)
dpkg-genchanges: not including original source code in upload
dpkg-buildpackage: binary and diff upload (original source NOT included)
dpkg-buildpackage: warning: Failed to sign .dsc and .changes file

Il se plaint que parce que je ne suis pas le mainteneur d'origine du package, ma clé ne correspond pas.

Est-ce vraiment nécessaire et si oui, comment puis-je utiliser mes clés pour faire la correspondance gpg?

meder omuraliev
la source

Réponses:

32

Les paquets Debian de signature PGP ne sont pas nécessaires si vous les avez construits pour votre propre usage privé. C'est juste la méthode d'authentification courante pour les développeurs Debian (officiels) lorsqu'ils téléchargent de nouveaux paquets dans la branche "instable" de Debian.

Pour éviter le message d'erreur, utilisez simplement:

dpkg-buildpackage -uc -us

(voir aussi la page de manuel de dpkg-buildpackage)

Signum
la source
Je viens de regarder le répertoire parent et il semble qu'il n'ait pas créé ces fichiers .deb en fonction des dates de modification à partir de ls -al. Il n'a pas pu les créer en raison de l'échec de la vérification du gpg, non? C'est à dire avec votre nouvelle commande, ça devrait les créer? Ou je me trompe?
meder omuraliev
6

Lorsque vous créez une version différente d'un package (comme vous l'avez fait, puisque vous avez modifié les règles de génération), vous devez vraiment ajouter une entrée de journal des modifications. De cette façon, votre package aura un numéro de version différent (vous saurez donc immédiatement qu'il ne s'agit pas du package standard de la distribution), et vous aurez une trace de ce que vous avez modifié.

Modifiez debian/changeloget ajoutez une entrée imitant le format des entrées existantes. Datez-le à partir d'aujourd'hui et choisissez un numéro de version like 0.7.67-3~bpo50+meder1(vous voulez quelque chose pour lequel dpkg --compare-versionsvotre version est plus récente). Mettez votre adresse e-mail en tant que mainteneur; De cette façon, vous avez une indication claire qu'il s'agit d'un package que vous avez modifié et vous dpkg-buildpackagedemanderez votre phrase de passe GPG.

Si vous êtes un utilisateur Emacs, installez le dpkg-dev-elpackage et utilisez les commandes C-c C-aet C-c C-cpour ajouter et finaliser votre entrée de journal des modifications.

Gilles 'SO- arrête d'être méchant'
la source
5

Bien que la signature d'un package ne soit pas nécessaire et que les -uc -usoptions puissent être utilisées pour éviter cette étape, il peut également être utile de signer un package, en particulier si d'autres l'utilisent ou que vous l'envoyez via des chemins de communication non sécurisés. Et ce n'est pas difficile du tout.

Pour générer une bonne signature, consultez la page de manuel de dpkg-buildpackage . Par défaut, il signe les packages avec gpg. D'après les messages d'erreur qu'il a imprimés, il semble que vous n'aviez tout simplement pas encore généré de clé gpg. Voir par exemple GnuPrivacyGuardHowto - Documentation Ubuntu communautaire pour quelques instructions et informations de base.

Comme le note @Gilles, vous devez également modifier le numéro de version du package via le fichier journal des modifications et fournir l'adresse e-mail de la clé gpg que vous utiliserez. Un moyen facile de le faire est d'exécuter simplement la dch --local foocommande, où "foo" est un mot-clé pour le changement. Si vous ne voulez vraiment pas le faire et devez spécifier un nom / adresse de responsable ou de téléchargeur différent, ou une clé spécifique à utiliser lors de la signature, vous pouvez également utiliser l' option -m, -eou -klors de la construction.

Voir Comment reconstruire des paquets Debian pour plus de conseils.

La partie délicate survient lorsque quelqu'un essaie de décider si un paquet donné est signé par quelqu'un en qui il a confiance. Consultez le site Web de confiance PGP pour résoudre les problèmes subtils impliqués.

nealmcb
la source