Package: debarchiver
Version: 0.3.2
Tags: patch
Followup-For: Bug #317472
Here is a patch implementing signed Release support. The Release files
are generated (with apt-ftparchive release) unconditionally, and are
signed if $gpgkey is set in the configuration.
This code can be considerably simplified if my patch to apt-ftparchive
to generate Release files at the same time as the indexes is ever
accepted (Bug #262204), but this should do for the time being.
-- System Information:
Debian Release: testing/unstable
APT prefers testing
APT policy: (990, 'testing'), (500, 'unstable')
Architecture: i386 (i686)
Shell: /bin/sh linked to /bin/bash
Kernel: Linux 2.4.30
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968) (ignored: LC_ALL set to C)
Versions of packages debarchiver depends on:
ii adduser 3.66 Add and remove users and groups
ii apt-utils 0.5.28.6 APT utility programs
ii dpkg-dev 1.13.10 Package building tools for Debian
ii opalmod 0.1.13 A set of Perl modules for various
debarchiver recommends no packages.
-- no debconf information
diff -rupN debarchiver-0.3.2.save/debian/control
debarchiver-0.3.2/debian/control
--- debarchiver-0.3.2.save/debian/control 2005-02-27 06:53:10.000000000
-0800
+++ debarchiver-0.3.2/debian/control 2005-08-20 12:40:32.000000000 -0700
@@ -8,7 +8,7 @@ Standards-Version: 3.6.1
Package: debarchiver
Architecture: all
Depends: opalmod (>= 0.1.10), apt-utils | dpkg-dev, adduser
-Suggests: devscripts
+Suggests: devscripts, gnupg
Description: Tool to handle debian package archives
This tool can create a potato like file structure that dselect,
apt-get and similar tools can use for easier installation.
diff -rupN debarchiver-0.3.2.save/src/debarchiver.pl
debarchiver-0.3.2/src/debarchiver.pl
--- debarchiver-0.3.2.save/src/debarchiver.pl 2005-07-04 09:03:36.000000000
-0700
+++ debarchiver-0.3.2/src/debarchiver.pl 2005-08-20 12:41:53.000000000
-0700
@@ -271,6 +271,7 @@ will be parsed. Here you can change the
\%release Additional information to add to generated Release
files. Supported keys are origin, label, and
description.
+ \$gpgkey GnuPG key to use to sign the archive.
";
###############################################################################
@@ -895,6 +896,62 @@ sub generateIndexConfig() {
}
###############################################################################
+# Name: handleRelease
+# Description: Handles creation of Release files via apt-ftparchive.
+# Arguments: Path to the directory to generate Release for
+# Archive suite this Release file is for
+# Reference to array of sections
+# Reference to array of architectures
+# Uses: %distmapping, %release, $gpgkey
+# Changelog:
+# 2005-08-20 Russ Allbery <[EMAIL PROTECTED]>
+# Written.
+###############################################################################
+
+sub generateRelease([EMAIL PROTECTED]@) {
+ my ($path, $suite, $dsections, $darches) = @_;
+ my $codename = $distmapping{$suite} || $suite;
+
+ # Judging from the Release file in the Debian archive, "all" and "source"
+ # shouldn't be included.
+ my @arches = grep { $_ ne 'all' && $_ ne 'source' } @$darches;
+
+ # We can't use the same config as generate, since release wants the
+ # variables set in a different place.
+ my $configpath = "$path/.apt-ftparchive.conf";
+ action(! open(CONF, "> $configpath"),
+ "Create apt-ftparchive Release config for $path", 2);
+ my $prefix = 'APT::FTPArchive::Release';
+ print CONF "${prefix}::Origin \"$release{origin}\";\n"
+ if defined $release{origin};
+ print CONF "${prefix}::Label \"$release{label}\";\n"
+ if defined $release{label};
+ print CONF "${prefix}::Description \"$release{description}\";\n"
+ if defined $release{description};
+ print CONF "${prefix}::Suite \"$suite\";\n";
+ print CONF "${prefix}::Codename \"$codename\";\n";
+ print CONF "${prefix}::Architectures \"", join (' ', @arches), "\";\n";
+ print CONF "${prefix}::Components \"", join (' ', @$dsections), "\";\n";
+ close CONF;
+
+ # Do the generation and optional signing.
+ unlink("$path/Release");
+ cmdaction("apt-ftparchive -c $configpath release $path > Release",
+ "Generate Release file for $path",
+ 3);
+ cmdaction("mv Release $path/Release",
+ "Put Release for $path in the right location",
+ 3);
+ if ($gpgkey) {
+ cmdaction("gpg -a -b -s -u '$gpgkey' -o $path/Release.gpg"
+ . " $path/Release",
+ "Signing Release file for $path",
+ 3);
+ }
+ unlink("$configpath");
+}
+
+###############################################################################
# Name: handleIndex
# Description: Handles the indexing via apt-ftparchive.
# Uses: %dests, $destdir
@@ -908,6 +965,8 @@ sub generateIndexConfig() {
# Modified to add bzip2 support and handle contents-all in a proper way.
# 2005-05-02 Ola Lundqvist <[EMAIL PROTECTED]>
# Bugfix for bzip2 support.
+# 2005-08-20 Russ Allbery <[EMAIL PROTECTED]>
+# Call generateRelease for Release file support (optionally signed).
###############################################################################
sub handleIndex() {
@@ -981,6 +1040,9 @@ sub handleIndex() {
unlink("$d/$s/binary-all/Packages", "$d/$s/binary-all/Packages.gz",
"$d/$s/binary-all/Packages.bz2");
}
+
+ # This has to be done after we integrate the Packages files.
+ generateRelease($d, $d, @dsections, @darches);
}
&destinationRelease();
@@ -2089,6 +2151,12 @@ An array of strings that should be maile
Additional information to add to generated Release files. Supported keys are
origin, label, and description.
+=item B<$gpgkey>
+
+GnuPG key to use to sign the archive. If this variable is set, the Release
file for each changed section of the archive will be signed with GnuPG using
$gpgkey as the key ID. Unless you use a key that has no passphrase, you will
need to run B<debarchiver> interactively when using this option so that you can
supply the passphrase.
+
+=back
+
=head1 PACKAGE INDEXING
There are two ways to generate the indexes that B<apt-get> relies on.