sign-repos 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. #!/bin/bash
  2. # This script signs the deliverables from release-deb and release-rpm
  3. # with a designated GPG key.
  4. : ${DOCKER_RELEASE_DIR:=$DEST}
  5. : ${GPG_KEYID:=releasedocker}
  6. APTDIR=$DOCKER_RELEASE_DIR/apt/repo
  7. YUMDIR=$DOCKER_RELEASE_DIR/yum/repo
  8. if [ -z "$GPG_PASSPHRASE" ]; then
  9. echo >&2 'you need to set GPG_PASSPHRASE in order to sign artifacts'
  10. exit 1
  11. fi
  12. if [ ! -d $APTDIR ] && [ ! -d $YUMDIR ]; then
  13. echo >&2 'release-rpm or release-deb must be run before sign-repos'
  14. exit 1
  15. fi
  16. sign_packages(){
  17. # sign apt repo metadata
  18. if [ -d $APTDIR ]; then
  19. # create file with public key
  20. gpg --armor --export "$GPG_KEYID" > "$DOCKER_RELEASE_DIR/apt/gpg"
  21. # sign the repo metadata
  22. for F in $(find $APTDIR -name Release); do
  23. if test "$F" -nt "$F.gpg" ; then
  24. gpg -u "$GPG_KEYID" --passphrase "$GPG_PASSPHRASE" \
  25. --armor --sign --detach-sign \
  26. --batch --yes \
  27. --output "$F.gpg" "$F"
  28. fi
  29. inRelease="$(dirname "$F")/InRelease"
  30. if test "$F" -nt "$inRelease" ; then
  31. gpg -u "$GPG_KEYID" --passphrase "$GPG_PASSPHRASE" \
  32. --clearsign \
  33. --batch --yes \
  34. --output "$inRelease" "$F"
  35. fi
  36. done
  37. fi
  38. # sign yum repo metadata
  39. if [ -d $YUMDIR ]; then
  40. # create file with public key
  41. gpg --armor --export "$GPG_KEYID" > "$DOCKER_RELEASE_DIR/yum/gpg"
  42. # sign the repo metadata
  43. for F in $(find $YUMDIR -name repomd.xml); do
  44. if test "$F" -nt "$F.asc" ; then
  45. gpg -u "$GPG_KEYID" --passphrase "$GPG_PASSPHRASE" \
  46. --armor --sign --detach-sign \
  47. --batch --yes \
  48. --output "$F.asc" "$F"
  49. fi
  50. done
  51. fi
  52. }
  53. sign_packages