summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2024-05-07 15:54:44 +0200
committerLudovic Courtès <ludo@gnu.org>2024-05-25 16:23:56 +0200
commit73b3f941d7d911a1b2bb2bf77d37cb3a12ed4291 (patch)
treee9bad56f9dd556a77c7fe52ade2a418b14d49716
parent0efa1daad354216e9ce2adb078eb4d5254792e49 (diff)
maint: Suggest ‘guix git authenticate’ for initial authentication.
The previous recommendation, running ‘make authenticate’, was insecure because it led users to run code from the very repository they want to authenticate: https://lists.gnu.org/archive/html/guix-devel/2024-04/msg00252.html * Makefile.am (commit_v1_0_0, channel_intro_commit) (channel_intro_signer, GUIX_GIT_KEYRING, authenticate): Remove. * Makefile.am (.git/hooks/%): New target, generalization of previous ‘.git/hooks/pre-push’ target. (nodist_noinst_DATA): Add ‘.git/hooks/post-merge’. * doc/contributing.texi (Building from Git): Suggest ‘guix git authenticate’ instead of ‘make authenticate’. * etc/git/post-merge: New file. * etc/git/pre-push: Run ‘guix git authenticate’ instead of ‘make authenticate’. Reviewed-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Reported-by: Skyler Ferris <skyvine@protonmail.com> Change-Id: Ia415aa8375013d0dd095e891116f6ce841d93efd
-rw-r--r--Makefile.am30
-rw-r--r--doc/contributing.texi30
-rwxr-xr-xetc/git/post-merge3
-rwxr-xr-xetc/git/pre-push4
4 files changed, 38 insertions, 29 deletions
diff --git a/Makefile.am b/Makefile.am
index b4a06a52b8e..d0364e9dad8 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,5 +1,5 @@
1# GNU Guix --- Functional package management for GNU 1# GNU Guix --- Functional package management for GNU
2# Copyright © 2012-2023 Ludovic Courtès <ludo@gnu.org> 2# Copyright © 2012-2024 Ludovic Courtès <ludo@gnu.org>
3# Copyright © 2013 Andreas Enge <andreas@enge.fr> 3# Copyright © 2013 Andreas Enge <andreas@enge.fr>
4# Copyright © 2015, 2017 Alex Kost <alezost@gmail.com> 4# Copyright © 2015, 2017 Alex Kost <alezost@gmail.com>
5# Copyright © 2016, 2018 Mathieu Lirzin <mthl@gnu.org> 5# Copyright © 2016, 2018 Mathieu Lirzin <mthl@gnu.org>
@@ -899,22 +899,6 @@ $(guix_install_go_files): install-nobase_dist_guilemoduleDATA
899install-data-hook: 899install-data-hook:
900 touch "$(DESTDIR)$(guileobjectdir)/guix/config.go" 900 touch "$(DESTDIR)$(guileobjectdir)/guix/config.go"
901 901
902# Commit corresponding to the 'v1.0.0' tag.
903commit_v1_0_0 = 6298c3ffd9654d3231a6f25390b056483e8f407c
904
905# Introduction of the 'guix' channel. Keep in sync with (guix channels)!
906channel_intro_commit = 9edb3f66fd807b096b48283debdcddccfea34bad
907channel_intro_signer = BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA
908
909# Authenticate the current Git checkout by checking signatures on every commit.
910GUIX_GIT_KEYRING = origin/keyring
911authenticate:
912 $(AM_V_at)echo "Authenticating Git checkout..." ; \
913 guix git authenticate \
914 --keyring=$(GUIX_GIT_KEYRING) \
915 --cache-key=channels/guix --stats \
916 "$(channel_intro_commit)" "$(channel_intro_signer)"
917
918# Assuming Guix is already installed and the daemon is up and running, this 902# Assuming Guix is already installed and the daemon is up and running, this
919# rule builds from $(srcdir), creating and building derivations. 903# rule builds from $(srcdir), creating and building derivations.
920as-derivation: 904as-derivation:
@@ -1231,13 +1215,13 @@ cuirass-jobs: $(GOBJECTS)
1231.PHONY: gen-ChangeLog gen-AUTHORS gen-tarball-version 1215.PHONY: gen-ChangeLog gen-AUTHORS gen-tarball-version
1232.PHONY: assert-no-store-file-names assert-binaries-available 1216.PHONY: assert-no-store-file-names assert-binaries-available
1233.PHONY: assert-final-inputs-self-contained check-channel-news 1217.PHONY: assert-final-inputs-self-contained check-channel-news
1234.PHONY: clean-go make-go as-derivation authenticate 1218.PHONY: clean-go make-go as-derivation
1235.PHONY: update-guix-package update-NEWS cuirass-jobs release 1219.PHONY: update-guix-package update-NEWS cuirass-jobs release
1236 1220
1237# Git auto-configuration. 1221# Git auto-configuration.
1238.git/hooks/pre-push: etc/git/pre-push 1222.git/hooks/%: etc/git/%
1239 $(AM_V_at)if test -d .git; then \ 1223 $(AM_V_at)if test -d .git; then \
1240 cp etc/git/pre-push .git/hooks/pre-push; \ 1224 cp "$<" "$@"; \
1241 fi 1225 fi
1242 1226
1243.git/config: etc/git/gitconfig 1227.git/config: etc/git/gitconfig
@@ -1260,7 +1244,11 @@ COMMIT_MSG_MAGIC = VGhpcyBpcyB0aGUgY29tbWl0LW1zZyBob29rIG9mIEd1aXg=
1260# from a tarball. Do not add dependencies on these to *_DATA when building 1244# from a tarball. Do not add dependencies on these to *_DATA when building
1261# from a tarball, as that breaks the build. 1245# from a tarball, as that breaks the build.
1262if in_git_p 1246if in_git_p
1263nodist_noinst_DATA = .git/hooks/pre-push .git/config .git/hooks/commit-msg 1247nodist_noinst_DATA = \
1248 .git/hooks/pre-push \
1249 .git/hooks/post-merge \
1250 .git/config \
1251 .git/hooks/commit-msg
1264endif 1252endif
1265 1253
1266# Downloading up-to-date PO files. 1254# Downloading up-to-date PO files.
diff --git a/doc/contributing.texi b/doc/contributing.texi
index ecff6300bf3..a0d6b5304ab 100644
--- a/doc/contributing.texi
+++ b/doc/contributing.texi
@@ -276,25 +276,41 @@ From there on, you can authenticate all the commits included in your
276checkout by running: 276checkout by running:
277 277
278@example 278@example
279make authenticate 279guix git authenticate \
280 9edb3f66fd807b096b48283debdcddccfea34bad \
281 "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA"
280@end example 282@end example
281 283
282The first run takes a couple of minutes, but subsequent runs are faster. 284The first run takes a couple of minutes, but subsequent runs are faster.
285On subsequent runs, you can run the command without any arguments since
286the @dfn{introduction} (the commit ID and OpenPGP fingerprints above)
287will have been recorded@footnote{This requires a recent version of Guix,
288from May 2024 or more recent.}:
283 289
284Or, when your configuration for your local Git repository doesn't match 290@example
291guix git authenticate
292@end example
293
294When your configuration for your local Git repository doesn't match
285the default one, you can provide the reference for the @code{keyring} 295the default one, you can provide the reference for the @code{keyring}
286branch through the variable @code{GUIX_GIT_KEYRING}. The following 296branch @i{via} the @option{-k} option. The following
287example assumes that you have a Git remote called @samp{myremote} 297example assumes that you have a Git remote called @samp{myremote}
288pointing to the official repository: 298pointing to the official repository:
289 299
290@example 300@example
291make authenticate GUIX_GIT_KEYRING=myremote/keyring 301guix git authenticate \
302 -k myremote/keyring \
303 9edb3f66fd807b096b48283debdcddccfea34bad \
304 "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA"
292@end example 305@end example
293 306
307@xref{Invoking guix git authenticate}, for more information on this
308command.
309
294@quotation Note 310@quotation Note
295You are advised to run @command{make authenticate} after every 311By default, hooks are installed such that @command{guix git
296@command{git pull} invocation. This ensures you keep receiving valid 312authenticate} is invoked anytime you run @command{git pull} or
297changes to the repository. 313@command{git push}.
298@end quotation 314@end quotation
299 315
300After updating the repository, @command{make} might fail with an error 316After updating the repository, @command{make} might fail with an error
diff --git a/etc/git/post-merge b/etc/git/post-merge
new file mode 100755
index 00000000000..f2ad37d35c4
--- /dev/null
+++ b/etc/git/post-merge
@@ -0,0 +1,3 @@
1#!/bin/sh
2# Authenticate the repo upon 'git pull' and similar.
3exec guix git authenticate
diff --git a/etc/git/pre-push b/etc/git/pre-push
index 59671b0d583..325b23854bb 100755
--- a/etc/git/pre-push
+++ b/etc/git/pre-push
@@ -32,7 +32,9 @@ do
32 # Only use the hook when pushing to Savannah. 32 # Only use the hook when pushing to Savannah.
33 case "$2" in 33 case "$2" in
34 *.gnu.org*) 34 *.gnu.org*)
35 exec make authenticate check-channel-news 35 set -e
36 make check-channel-news
37 exec guix git authenticate
36 exit 127 38 exit 127
37 ;; 39 ;;
38 *) 40 *)