apt-key 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #!/bin/sh
  2. set -e
  3. # We don't use a secret keyring, of course, but gpg panics and
  4. # implodes if there isn't one available
  5. GPG_CMD="gpg --no-options --no-default-keyring --secret-keyring /etc/apt/secring.gpg --trustdb-name /etc/apt/trustdb.gpg"
  6. GPG="$GPG_CMD --keyring /etc/apt/trusted.gpg"
  7. ARCHIVE_KEYRING=/usr/share/keyrings/debian-archive-keyring.gpg
  8. REMOVED_KEYS=/usr/share/keyrings/debian-archive-removed-keys.gpg
  9. update() {
  10. if [ ! -f $ARCHIVE_KEYRING ]; then
  11. echo >&2 "ERROR: Can't find the archive-keyring"
  12. echo >&2 "Is the debian-archive-keyring package installed?"
  13. exit 1
  14. fi
  15. # add new keys
  16. $GPG_CMD --quiet --batch --keyring $ARCHIVE_KEYRING --export | $GPG --ignore-time-conflict --import
  17. # remove no-longer used keys
  18. keys=`$GPG_CMD --keyring $REMOVED_KEYS --with-colons --list-keys|awk '/^pub/{FS=":";print $5}'`
  19. for key in $keys; do
  20. if $GPG --list-keys --with-colons | awk '/^pub/{FS=":";print $5}'|grep -q $key; then
  21. $GPG --quiet --batch --delete-key --yes ${key}
  22. fi
  23. done
  24. }
  25. usage() {
  26. echo "Usage: apt-key [command] [arguments]"
  27. echo
  28. echo "Manage apt's list of trusted keys"
  29. echo
  30. echo " apt-key add <file> - add the key contained in <file> ('-' for stdin)"
  31. echo " apt-key del <keyid> - remove the key <keyid>"
  32. echo " apt-key update - update keys using the keyring package"
  33. echo " apt-key list - list keys"
  34. echo
  35. }
  36. command="$1"
  37. if [ -z "$command" ]; then
  38. usage
  39. exit 1
  40. fi
  41. shift
  42. if [ "$command" != "help" ] && ! which gpg >/dev/null 2>&1; then
  43. echo >&2 "Warning: gnupg does not seem to be installed."
  44. echo >&2 "Warning: apt-key requires gnupg for most operations."
  45. echo >&2
  46. fi
  47. case "$command" in
  48. add)
  49. $GPG --quiet --batch --import "$1"
  50. echo "OK"
  51. ;;
  52. del|rm|remove)
  53. $GPG --quiet --batch --delete-key --yes "$1"
  54. echo "OK"
  55. ;;
  56. update)
  57. update
  58. ;;
  59. list)
  60. $GPG --batch --list-keys
  61. ;;
  62. finger*)
  63. $GPG --batch --fingerprint
  64. ;;
  65. adv*)
  66. echo "Executing: $GPG $*"
  67. $GPG $*
  68. ;;
  69. help)
  70. usage
  71. ;;
  72. *)
  73. usage
  74. exit 1
  75. ;;
  76. esac