<div dir="ltr">Hi,<div><br></div><div><br></div><div>This is an awesome patch, but sadly it conflicts with Markus&#39;s refactor of related code.  Can you rebase this on top of Markus&#39;s work?  If you can&#39;t find it on the list, then it&#39;s also staging in my poky-contrib:ross/mut branch.</div><div><br></div><div>Thanks,</div><div>Ross</div></div><div class="gmail_extra"><br><div class="gmail_quote">On 9 February 2016 at 14:22, Ioan-Adrian Ratiu <span dir="ltr">&lt;<a href="mailto:adrian.ratiu@ni.com" target="_blank">adrian.ratiu@ni.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">ASC = ascii armoured, BIN = binary<br>
<br>
Create new variables + parameters to the gpg signer module to specify<br>
which type of gpg signature to generate (ASC or BIN).<br>
<br>
The rpm backend has already implemented signatures which default to<br>
binary, so its behaviour is unchanged by this.<br>
<br>
Signed-off-by: Ioan-Adrian Ratiu &lt;<a href="mailto:adrian.ratiu@ni.com">adrian.ratiu@ni.com</a>&gt;<br>
---<br>
 meta/classes/sign_package_feed.bbclass | 10 +++++++++-<br>
 meta/classes/sign_rpm.bbclass          | 12 +++++++++++-<br>
 meta/lib/oe/gpg_sign.py                | 13 +++++++++----<br>
 meta/lib/oe/package_manager.py         |  3 ++-<br>
 meta/recipes-core/meta/<a href="http://signing-keys.bb" rel="noreferrer" target="_blank">signing-keys.bb</a> |  6 ++++--<br>
 5 files changed, 35 insertions(+), 9 deletions(-)<br>
<br>
diff --git a/meta/classes/sign_package_feed.bbclass b/meta/classes/sign_package_feed.bbclass<br>
index d5df8af..4e703f2 100644<br>
--- a/meta/classes/sign_package_feed.bbclass<br>
+++ b/meta/classes/sign_package_feed.bbclass<br>
@@ -10,6 +10,10 @@<br>
 #           Optional variable for specifying the backend to use for signing.<br>
 #           Currently the only available option is &#39;local&#39;, i.e. local signing<br>
 #           on the build host.<br>
+# PACKAGE_FEED_GPG_SIGNATURE_TYPE<br>
+#           Optional variable for specifying the type of gpg signature, can be:<br>
+#               1. Ascii armored (ASC), default if not set<br>
+#               2. Binary (BIN)<br>
 # GPG_BIN<br>
 #           Optional variable for specifying the gpg binary/wrapper to use for<br>
 #           signing.<br>
@@ -20,7 +24,7 @@ inherit sanity<br>
<br>
 PACKAGE_FEED_SIGN = &#39;1&#39;<br>
 PACKAGE_FEED_GPG_BACKEND ?= &#39;local&#39;<br>
-<br>
+PACKAGE_FEED_GPG_SIGNATURE_TYPE ?= &#39;ASC&#39;<br>
<br>
 python () {<br>
     # Check sanity of configuration<br>
@@ -28,6 +32,10 @@ python () {<br>
         if not d.getVar(var, True):<br>
             raise_sanity_error(&quot;You need to define %s in the config&quot; % var, d)<br>
<br>
+    sigtype = d.getVar(&quot;PACKAGE_FEED_GPG_SIGNATURE_TYPE&quot;, True)<br>
+    if sigtype.upper() != &quot;ASC&quot; and sigtype.upper() != &quot;BIN&quot;:<br>
+        raise_sanity_error(&quot;Bad value for PACKAGE_FEED_GPG_SIGNATURE_TYPE (%s), use either ASC or BIN&quot; % sigtype)<br>
+<br>
     # Set expected location of the public key<br>
     d.setVar(&#39;PACKAGE_FEED_GPG_PUBKEY&#39;,<br>
              os.path.join(d.getVar(&#39;STAGING_ETCDIR_NATIVE&#39;, False),<br>
diff --git a/meta/classes/sign_rpm.bbclass b/meta/classes/sign_rpm.bbclass<br>
index 8bcabee..840b6ca 100644<br>
--- a/meta/classes/sign_rpm.bbclass<br>
+++ b/meta/classes/sign_rpm.bbclass<br>
@@ -9,6 +9,10 @@<br>
 #           Optional variable for specifying the backend to use for signing.<br>
 #           Currently the only available option is &#39;local&#39;, i.e. local signing<br>
 #           on the build host.<br>
+# RPM_GPG_SIGNATURE_TYPE<br>
+#           Optional variable for specifying the type of gpg signatures, can be:<br>
+#                     1. Ascii armored (ASC), default if not set<br>
+#                     2. Binary (BIN)<br>
 # GPG_BIN<br>
 #           Optional variable for specifying the gpg binary/wrapper to use for<br>
 #           signing.<br>
@@ -19,6 +23,7 @@ inherit sanity<br>
<br>
 RPM_SIGN_PACKAGES=&#39;1&#39;<br>
 RPM_GPG_BACKEND ?= &#39;local&#39;<br>
+RPM_GPG_SIGNATURE_TYPE ?= &#39;BIN&#39;<br>
<br>
<br>
 python () {<br>
@@ -27,6 +32,10 @@ python () {<br>
         if not d.getVar(var, True):<br>
             raise_sanity_error(&quot;You need to define %s in the config&quot; % var, d)<br>
<br>
+    sigtype = d.getVar(&quot;RPM_GPG_SIGNATURE_TYPE&quot;, True)<br>
+    if sigtype.upper() != &quot;ASC&quot; and sigtype.upper() != &quot;BIN&quot;:<br>
+        raise_sanity_error(&quot;Bad value for RPM_GPG_SIGNATURE_TYPE (%s), use either ASC or BIN&quot; % sigtype)<br>
+<br>
     # Set the expected location of the public key<br>
     d.setVar(&#39;RPM_GPG_PUBKEY&#39;, os.path.join(d.getVar(&#39;STAGING_ETCDIR_NATIVE&#39;, False),<br>
                                             &#39;RPM-GPG-PUBKEY&#39;))<br>
@@ -39,7 +48,8 @@ python sign_rpm () {<br>
     signer = get_signer(d,<br>
                         d.getVar(&#39;RPM_GPG_BACKEND&#39;, True),<br>
                         d.getVar(&#39;RPM_GPG_NAME&#39;, True),<br>
-                        d.getVar(&#39;RPM_GPG_PASSPHRASE_FILE&#39;, True))<br>
+                        d.getVar(&#39;RPM_GPG_PASSPHRASE_FILE&#39;, True),<br>
+                        d.getVar(&#39;RPM_GPG_SIGNATURE_TYPE&#39;, True))<br>
     rpms = glob.glob(d.getVar(&#39;RPM_PKGWRITEDIR&#39;, True) + &#39;/*&#39;)<br>
<br>
     signer.sign_rpms(rpms)<br>
diff --git a/meta/lib/oe/gpg_sign.py b/meta/lib/oe/gpg_sign.py<br>
index 55abad8..d971d32 100644<br>
--- a/meta/lib/oe/gpg_sign.py<br>
+++ b/meta/lib/oe/gpg_sign.py<br>
@@ -6,9 +6,10 @@ import oe.utils<br>
<br>
 class LocalSigner(object):<br>
     &quot;&quot;&quot;Class for handling local (on the build host) signing&quot;&quot;&quot;<br>
-    def __init__(self, d, keyid, passphrase_file):<br>
+    def __init__(self, d, keyid, passphrase_file, signature_type):<br>
         self.keyid = keyid<br>
         self.passphrase_file = passphrase_file<br>
+        self.gpg_sig_type = signature_type<br>
         self.gpg_bin = d.getVar(&#39;GPG_BIN&#39;, True) or \<br>
                   bb.utils.which(os.getenv(&#39;PATH&#39;), &#39;gpg&#39;)<br>
         self.gpg_path = d.getVar(&#39;GPG_PATH&#39;, True)<br>
@@ -16,10 +17,12 @@ class LocalSigner(object):<br>
<br>
     def export_pubkey(self, output_file):<br>
         &quot;&quot;&quot;Export GPG public key to a file&quot;&quot;&quot;<br>
-        cmd = &#39;%s --batch --yes --export --armor -o %s &#39; % \<br>
+        cmd = &#39;%s --batch --yes --export -o %s &#39; % \<br>
                 (self.gpg_bin, output_file)<br>
         if self.gpg_path:<br>
             cmd += &quot;--homedir %s &quot; % self.gpg_path<br>
+        if self.gpg_sig_type == &quot;ASC&quot;:<br>
+            cmd += &quot;-a &quot;<br>
         cmd += self.keyid<br>
         status, output = oe.utils.getstatusoutput(cmd)<br>
         if status:<br>
@@ -59,6 +62,8 @@ class LocalSigner(object):<br>
                   (self.gpg_bin, self.passphrase_file, self.keyid)<br>
         if self.gpg_path:<br>
             gpg_cmd += &quot;--homedir %s &quot; % self.gpg_path<br>
+        if self.gpg_sig_type == &quot;ASC&quot;:<br>
+            cmd += &quot;-a &quot;<br>
         cmd += input_file<br>
         status, output = oe.utils.getstatusoutput(cmd)<br>
         if status:<br>
@@ -66,11 +71,11 @@ class LocalSigner(object):<br>
                                       (input_file, output))<br>
<br>
<br>
-def get_signer(d, backend, keyid, passphrase_file):<br>
+def get_signer(d, backend, keyid, passphrase_file, signature_type):<br>
     &quot;&quot;&quot;Get signer object for the specified backend&quot;&quot;&quot;<br>
     # Use local signing by default<br>
     if backend == &#39;local&#39;:<br>
-        return LocalSigner(d, keyid, passphrase_file)<br>
+        return LocalSigner(d, keyid, passphrase_file, signature_type)<br>
     else:<br>
         bb.fatal(&quot;Unsupported signing backend &#39;%s&#39;&quot; % backend)<br>
<br>
diff --git a/meta/lib/oe/package_manager.py b/meta/lib/oe/package_manager.py<br>
index 26f6466..7ea523a 100644<br>
--- a/meta/lib/oe/package_manager.py<br>
+++ b/meta/lib/oe/package_manager.py<br>
@@ -113,7 +113,8 @@ class RpmIndexer(Indexer):<br>
             signer = get_signer(self.d,<br>
                                 self.d.getVar(&#39;PACKAGE_FEED_GPG_BACKEND&#39;, True),<br>
                                 self.d.getVar(&#39;PACKAGE_FEED_GPG_NAME&#39;, True),<br>
-                                self.d.getVar(&#39;PACKAGE_FEED_GPG_PASSPHRASE_FILE&#39;, True))<br>
+                                self.d.getVar(&#39;PACKAGE_FEED_GPG_PASSPHRASE_FILE&#39;, True),<br>
+                                self.d.getVar(&#39;PACKAGE_FEED_GPG_SIGNATURE_TYPE&#39;, True))<br>
         else:<br>
             signer = None<br>
         index_cmds = []<br>
diff --git a/meta/recipes-core/meta/<a href="http://signing-keys.bb" rel="noreferrer" target="_blank">signing-keys.bb</a> b/meta/recipes-core/meta/<a href="http://signing-keys.bb" rel="noreferrer" target="_blank">signing-keys.bb</a><br>
index d7aa79d..82c8c59 100644<br>
--- a/meta/recipes-core/meta/<a href="http://signing-keys.bb" rel="noreferrer" target="_blank">signing-keys.bb</a><br>
+++ b/meta/recipes-core/meta/<a href="http://signing-keys.bb" rel="noreferrer" target="_blank">signing-keys.bb</a><br>
@@ -29,7 +29,8 @@ python do_export_public_keys () {<br>
         signer = get_signer(d,<br>
                             d.getVar(&#39;RPM_GPG_BACKEND&#39;, True),<br>
                             d.getVar(&#39;RPM_GPG_NAME&#39;, True),<br>
-                            d.getVar(&#39;RPM_GPG_PASSPHRASE_FILE&#39;, True))<br>
+                            d.getVar(&#39;RPM_GPG_PASSPHRASE_FILE&#39;, True),<br>
+                            d.getVar(&#39;PACKAGE_FEED_GPG_SIGNATURE_TYPE&#39;, True))<br>
         signer.export_pubkey(d.getVar(&#39;RPM_GPG_PUBKEY&#39;, True))<br>
<br>
     if d.getVar(&#39;PACKAGE_FEED_SIGN&#39;, True) == &#39;1&#39;:<br>
@@ -37,7 +38,8 @@ python do_export_public_keys () {<br>
         signer = get_signer(d,<br>
                             d.getVar(&#39;PACKAGE_FEED_GPG_BACKEND&#39;, True),<br>
                             d.getVar(&#39;PACKAGE_FEED_GPG_NAME&#39;, True),<br>
-                            d.getVar(&#39;PACKAGE_FEED_GPG_PASSPHRASE_FILE&#39;, True))<br>
+                            d.getVar(&#39;PACKAGE_FEED_GPG_PASSPHRASE_FILE&#39;, True),<br>
+                            d.getVar(&#39;PACKAGE_FEED_GPG_SIGNATURE_TYPE&#39;, True))<br>
         signer.export_pubkey(d.getVar(&#39;PACKAGE_FEED_GPG_PUBKEY&#39;, True))<br>
 }<br>
 addtask do_export_public_keys before do_build<br>
<span class="HOEnZb"><font color="#888888">--<br>
2.7.0<br>
<br>
--<br>
_______________________________________________<br>
Openembedded-core mailing list<br>
<a href="mailto:Openembedded-core@lists.openembedded.org">Openembedded-core@lists.openembedded.org</a><br>
<a href="http://lists.openembedded.org/mailman/listinfo/openembedded-core" rel="noreferrer" target="_blank">http://lists.openembedded.org/mailman/listinfo/openembedded-core</a><br>
</font></span></blockquote></div><br></div>