commit ea2b4dd29579b36f02547ba089383cdefa463f8c
parent 57ac2b2a17fbeb08fc845bbb0b275d22c568892f
Author: parazyd <parazyd@dyne.org>
Date: Fri, 11 Aug 2017 10:35:39 +0200
refactor sign_release to use gnupg directly via subprocess
removes the need for python-gnupg which tends to have a relatively
unstable API and doesn't work properly on some machines.
Diffstat:
3 files changed, 22 insertions(+), 19 deletions(-)
diff --git a/README.md b/README.md
@@ -19,19 +19,19 @@ of the according `Release` files.
Dependencies
------------
-amprolla requires Python 3, and some external modules for it. The lowest
-version it's been tested on was Python 3.4.
+amprolla requires Python 3, the lowest version it's been tested on was
+Python 3.4. It also requires the python-requests library.
### Devuan/Debian
```
-rsync gnupg2 python3-requests python3-gnupg
+rsync gnupg2 python3-requests
```
### Gentoo:
```
-net-misc/rsync app-crypt/gnupg dev-python/requests dev-python/python-gnupg
+net-misc/rsync app-crypt/gnupg dev-python/requests
```
diff --git a/doc/setup.md b/doc/setup.md
@@ -14,7 +14,7 @@ with the extra needed dependencies is using your package manager.
You will need the following:
```
-python3, python-gnupg, python-requests, gnupg2, rsync
+python3, python-requests, gnupg2, rsync
```
After installing the required dependencies, clone the amprolla git repo
diff --git a/lib/release.py b/lib/release.py
@@ -7,11 +7,12 @@ Release file functions and helpers
from datetime import datetime, timedelta
from gzip import decompress as gzip_decomp
from lzma import compress as lzma_comp
-from os.path import basename, getsize, isfile
-import gnupg
+from os.path import getsize, isfile
+from subprocess import Popen
from lib.config import (checksums, distrolabel, gpgdir, release_aliases,
release_keys, signingkey)
+from lib.log import info
from lib.parse import parse_release_head
@@ -85,19 +86,21 @@ def write_release(oldrel, newrel, filelist, r, sign=True, rewrite=True):
def sign_release(infile):
"""
- Signs both the clearsign and the detached signature of a Release file
+ Signs both the clearsign and the detached signature of a Release file.
+
+ Takes a valid path to a release file as an argument.
"""
- gpg = gnupg.GPG(gnupghome=gpgdir)
+ args = ['gpg', '-q', '--default-key', signingkey, '--batch', '--yes',
+ '--homedir', gpgdir]
- stream = open(infile, 'rb')
+ clearargs = args + ['--clearsign', '-a', '-o',
+ infile.replace('Release', 'InRelease'), infile]
+ detachargs = args + ['-sb', '-o', infile+'.gpg', infile]
- # Clearsign
- signed_data = gpg.sign_file(stream, keyid=signingkey, clearsign=True,
- detach=False)
- inrel = open(infile.replace('Release', 'InRelease'), 'wb')
- inrel.write(signed_data.data)
- inrel.close()
+ info('Signing Release (clearsign)')
+ cleargpg = Popen(clearargs)
+ cleargpg.wait(timeout=5)
- # Detached signature (somewhat broken?)
- # gpg.sign_file(stream, keyid=signingkey, clearsign=False, detach=True,
- # output=infile + '.gpg')
+ info('Signing Release (detached sign)')
+ detachgpg = Popen(detachargs)
+ detachgpg.wait(timeout=5)