<div dir="ltr"><div class="gmail_default" style="font-family:monospace,monospace;font-size:small">Hi,</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"><br></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small">In my company, we use <b>Ubuntu (18.04)</b> and are practicing reproducible builds. Our code is built into a lot of .<i>deb</i> packages using <b><i>debuild</i></b> (and related tools). We have made a lot of effort to make our builds reproducible by following the <a href="https://reproducible-builds.org/docs/">Achieve deterministic builds</a> and <a href="https://tests.reproducible-builds.org/debian/index_issues.html">Known issues related to reproducible builds</a>. We have made a lot of progress and are still working on it.</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"><br></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small">We set up a company-wise <b>Reprepro server to serve the Debian packages that we build regularly</b>. We publish both <b>.<i>deb</i></b> files and the <b>GPG-signed .<i>dsc</i></b> files to the Reprepro server. BTW, our build system is designed to do an "<b>change-only build</b>": if a package is not changed since the last build, i.e., its <i>changelog</i> is not changed, the package is not built again this time. <b>Their .deb and .dsc files are still added to Reprepro but because these files remain unchanged, Reprepro can successfully "add" them (but in fact they are skipped)</b>. I figured this point may be important to understand why I have my questions below.</div><div><br></div><div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small">Although we have solved many reproducibility issues in the .<i>deb</i> files, <b>I found the <i>.dsc</i> files were changed when</b> I rebuilt the packages (by deleting the previously built <i>.deb</i> and <i>.dsc</i> files) so Reprepro refuses to include them and reports the following error:</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"><br></div><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">ERROR: '<path-to-dsc-on-build-machine>' cannot be included as 'pool/<path-to-dsc-in-reprepro>'.<br>Already existing files can only be included again, if they are the same, but:<br>md5 expected: <md5-1>, got: <md5-2><br>sha1 expected: <sha1-1>, got: <sha1-2><br>sha256 expected: <sha256-1>, got: <sha256-2></blockquote><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"><br></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"><i>diffoscope</i> told me the `.<i>dsc</i>` files <b>only differ in their GPG signatures</b> - the related source tarball (<filename>.orig.tar.gz) and debian tarball (<filename>.debian.tar.xz) <b>have not changed between builds.</b></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"><br></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small">I understand that, because as <a href="https://security.stackexchange.com/a/78958/80050">this SO answer says</a>, the GPG signature is generated using the creation time as an input. I found the issue <a href="https://tests.reproducible-builds.org/debian/issues/unstable/cryptographic_signature_issue.html">cryptographic_signature</a> that made me think we should not have signed our .<i>dsc</i> files, but the <a href="https://www.debian.org/doc/manuals/debian-handbook/sect.source-package-structure.en.html">Debian Admin's Handbook</a> shows that the .<i>dsc</i> files are supposed to be signed by the maintainers. In addition, in the <a href="https://tests.reproducible-builds.org/debian/index_issues.html">Known Issues list</a>, I didn't seem to find any issue that's related with the .<i>dsc</i> files.</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"><br></div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small"><b>After reading around, I'm guessing my understanding about reproducible builds may not be totally correct, so I want to ask here:</b></div><div class="gmail_default" style=""><ol style=""><li style="font-family:monospace,monospace;font-size:small"><b>Should the .<i>dsc</i> files be reproducible, too?</b> Because Reprepro can manage .<i>dsc</i> files, I've been thinking that .<i>dsc</i> files should be reproducible, but now it seems not?</li><li style="font-family:monospace,monospace;font-size:small">In my case, since my company maintains both .<i>deb</i> files and .<i>dsc</i> files in Reprepro, if one day we need to build the code of an earlier version, we would inevitably generate different .<i>dsc</i> files because of the GPG signatures. <b>Am I supposed to publish the .<i>dsc</i> files to the same Reprepro server that we maintain our regular build?</b> Because I've been thinking .<i>dsc</i> files should also be reproducible, I've been thinking we should keep using the same Reprepro server. <b>But now it looks like we need to prepare a second Reprepro server to hold the packages of the earlier version.</b></li><li style=""><font face="monospace, monospace"><b>How does everyone else maintain their Reprepro server?</b> Do they keep publishing the build artifacts to the same server after a build? Or do they delete the previously published artifacts before publishing the new build? Or do they even recreate the Reprepro server every time they make a new build?</font></li></ol></div></div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div class="gmail_default" style="font-family:monospace,monospace;font-size:small">Best,</div><div class="gmail_default" style="font-family:monospace,monospace;font-size:small">Yaobin</div></div></div></div>