-
Notifications
You must be signed in to change notification settings - Fork 37.7k
guix: Overhaul how guix-{attest,verify} works and hierarchy #22182
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
guix: Overhaul how guix-{attest,verify} works and hierarchy #22182
Conversation
d90ca1e
to
4cc35da
Compare
Pushed d90ca1e...4cc35da
|
Concept ACK - Haven't really looked at the changes, but I ran though this and tried signing on a separate machine, which is my usual workflow. Guix sigs for 4cc35da here: bitcoin-core/guix.sigs#23. |
Is this still a draft? If you do a build and attest with some hosts, and then another build and attest with more hosts, the second attest will not update either of the Otherwise I like the changes done here. |
Concept ACK, changes sound great to me. Will test. |
ACK 4cc35da Reviewed code and did a build, attest, and verify to test. |
Updated to address the possible user flow @achow101 mentioned here: #22182 (comment) Specifically: before using an existing |
ACK e2c40a4 |
Concept ACK. Testing... |
Not related to this PR, so for future follow ups: bitcoin/contrib/guix/guix-attest Line 21 in 6bc1eca
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ACK e2c40a4, tested on Linux Mint 20.1 (x86_64) with and w/o NO_SIGN=1
. Changes in contrib/guix/libexec/codesign.sh
and contrib/guix/guix-verify
are reviewed only.
Ran through building and using |
tested ACK |
…d hierarchy e2c40a4 guix-attest: Error out if SHA256SUMS is unexpected (Carl Dong) 4cc35da Rewrite guix-{attest,verify} for new hier (Carl Dong) 28a9c9b Make SHA256SUMS fragment right after build (Carl Dong) Pull request description: Based on: bitcoin#22075 Code reviewers: I recommend reading the new `guix-{attest,verify}` files instead of trying to read the diff The following changes resolve many usability improvements which were pointed out to me: 1. Some maintainers like to extract their "uncodesigned tarball" inside the `output/` directory, resulting in the older `guix-attest` mistakenly attesting to the extracted contents 2. Maintainers whose GPG keys reside on an external smartcard often need to physically interact with the smartcard as a way to approve the signing operation, having one signature per platform means a lot of fidgeting 3. Maintainers wishing to sign on a separate machine now has the option of transferring only a subtree of `output/`, namely `output/*/SHA256SUMS.part`, in order to perform a signature (you may need to specify an `$OUTDIR_BASE` env var) 4. An `all.SHA256SUMS` file should be usable as the base `SHA256SUMS` in bitcoin core torrents and on the release server. For those who sign on an separate machine than the one you do builds on, the following steps will work: 1. `env GUIX_SIGS_REPO=/home/achow101/guix.sigs SIGNER=achow101 NO_SIGN=1 ./contrib/guix/guix-attest` 2. Copy `/home/achow101/guix.sigs/<tag>/achow101` (which does not yet have signatures) to signing machine 3. Sign the `SHA256SUMS` files: ```bash for i in "<path-to-achow101>/*.SHA256SUMS"; do gpg --detach-sign --local-user "<your-key-here>" --armor --output "$i"{.asc,} done ``` 5. Upload `<path-to-achow101>` (now with signatures) to `guix.sigs` ----- After this change, output directories will now include a `SHA256SUMS.part` fragment, created immediately after a successful build: ``` output └── x86_64-w64-mingw32 ├── bitcoin-4e069f7589da-win64-debug.zip ├── bitcoin-4e069f7589da-win64-setup-unsigned.exe ├── bitcoin-4e069f7589da-win64.zip ├── bitcoin-4e069f7589da-win-unsigned.tar.gz └── SHA256SUMS.part ``` These `SHA256SUMS.part` fragments look something like: ``` 3ebd7262b1a0a5bb757fef1f70e7e14033c70f98c059bc4dbfee5d1992b25825 dist-archive/bitcoin-4e069f7589da.tar.gz def2e7d3de5ab3e3f955344e75151df4f33713f9101f5295bd13c9375bdf633b x86_64-w64-mingw32/bitcoin-4e069f7589da-win64-debug.zip 643049fe3ee4a4e83a1739607e67b11b7c9b1a66208a6f35a9ff634ba795500e x86_64-w64-mingw32/bitcoin-4e069f7589da-win64-setup-unsigned.exe a247a1ccec0ccc2e138c648284bd01f6a761f2d8d6d07d91b5b4a6670ec3f288 x86_64-w64-mingw32/bitcoin-4e069f7589da-win-unsigned.tar.gz fab76a836dcc592e39c04fd2396696633fb6eb56e39ecbf6c909bd173ed4280c x86_64-w64-mingw32/bitcoin-4e069f7589da-win64.zip ``` Meaning that they are valid `SHA256SUMS` files when `sha256sum --check`'d at the `guix-build-*/output` directory level When `guix-attest` is invoked, these `SHA256SUMS.part` files are combined and sorted (by `-k2`, `LC_ALL=C`) to create: 1. `noncodesigned.SHA256SUMS` for a manifest of all non-codesigned outputs, and 3. `all.SHA256SUMS` for a manifest of all outputs including non-codesigned outputs Then both files are signed, resulting in the following `guix.sigs` hierarchy: ``` 4e069f7/ └── dongcarl ├── all.SHA256SUMS ├── all.SHA256SUMS.asc ├── noncodesigned.SHA256SUMS └── noncodesigned.SHA256SUMS.asc ``` ACKs for top commit: achow101: ACK e2c40a4 hebasto: ACK e2c40a4, tested on Linux Mint 20.1 (x86_64) with and w/o `NO_SIGN=1`. Changes in `contrib/guix/libexec/codesign.sh` and `contrib/guix/guix-verify` are reviewed only. Tree-SHA512: 618aacefb0eb6595735a9ab6a98ea6598fce65f9ccf33fa1e7ef93bf140c0f6cfc16e34870c6aa3e4777dd3f004b92a82a994141879870141742df948ec59c1f
9f01fed guix/build: Remove vestigial SKIPATTEST.TAG (Carl Dong) Pull request description: No longer needed or referenced by anything. A relic from prior to the great hierarchy overhaul of #22182 ACKs for top commit: achow101: ACK 9f01fed fanquake: ACK 9f01fed Tree-SHA512: a94cf63f0c5cb8dbacf1025b6c0e81b219c2a3c93b3cbcefc239ccde29e602ecd4b717b1d93dbe53cb791a5017236fb09823c034aec42b0c31894fc9e0ab8b21
9f01fed guix/build: Remove vestigial SKIPATTEST.TAG (Carl Dong) Pull request description: No longer needed or referenced by anything. A relic from prior to the great hierarchy overhaul of bitcoin#22182 ACKs for top commit: achow101: ACK 9f01fed fanquake: ACK 9f01fed Tree-SHA512: a94cf63f0c5cb8dbacf1025b6c0e81b219c2a3c93b3cbcefc239ccde29e602ecd4b717b1d93dbe53cb791a5017236fb09823c034aec42b0c31894fc9e0ab8b21
Based on: #22075
Code reviewers: I recommend reading the new
guix-{attest,verify}
files instead of trying to read the diffThe following changes resolve many usability improvements which were pointed out to me:
output/
directory, resulting in the olderguix-attest
mistakenly attesting to the extracted contentsoutput/
, namelyoutput/*/SHA256SUMS.part
, in order to perform a signature (you may need to specify an$OUTDIR_BASE
env var)all.SHA256SUMS
file should be usable as the baseSHA256SUMS
in bitcoin core torrents and on the release server.For those who sign on an separate machine than the one you do builds on, the following steps will work:
env GUIX_SIGS_REPO=/home/achow101/guix.sigs SIGNER=achow101 NO_SIGN=1 ./contrib/guix/guix-attest
/home/achow101/guix.sigs/<tag>/achow101
(which does not yet have signatures) to signing machineSHA256SUMS
files:<path-to-achow101>
(now with signatures) toguix.sigs
After this change, output directories will now include a
SHA256SUMS.part
fragment, created immediately after a successful build:These
SHA256SUMS.part
fragments look something like:Meaning that they are valid
SHA256SUMS
files whensha256sum --check
'd at theguix-build-*/output
directory levelWhen
guix-attest
is invoked, theseSHA256SUMS.part
files are combined and sorted (by-k2
,LC_ALL=C
) to create:noncodesigned.SHA256SUMS
for a manifest of all non-codesigned outputs, andall.SHA256SUMS
for a manifest of all outputs including non-codesigned outputsThen both files are signed, resulting in the following
guix.sigs
hierarchy: