projects/aports·blob v2.18.0 · refs

133 lines · 2.9 KiB

1#!/bin/sh
2
3# abuild-keygen - generate signing keys
4# Copyright (c) 2009 Natanael Copa <[email protected]>
5#
6# Distributed under GPL-2
7#
8
9program_version=@VERSION@
10datadir=@datadir@
11
12if ! [ -f "$datadir/functions.sh" ]; then
13 echo "$datadir/functions.sh: not found" >&2
14 exit 1
15fi
16. "$datadir/functions.sh"
17
18
19# ask for privkey unless non-interactive mode
20# returns value in global $privkey
21get_privkey_file() {
22 local emailaddr default_name
23 emailaddr=${PACKAGER##*<}
24 emailaddr=${emailaddr%%>*}
25
26 # if PACKAGER does not contain a valid email address, then ask git
27 if [ -z "$emailaddr" ] || [ "${emailaddr##*@}" = "$emailaddr" ]; then
28 emailaddr=$(git config --get user.email 2>/dev/null)
29 fi
30
31 default_name="${emailaddr:-$USER}-$(printf "%x" $(date +%s))"
32
33 privkey="$ABUILD_USERDIR/$default_name.rsa"
34 [ -n "$non_interactive" ] && return 0
35 msg "Generating public/private rsa key pair for abuild"
36 echo -n "Enter file in which to save the key [$privkey]: "
37
38 read line
39 if [ -n "$line" ]; then
40 privkey="$line"
41 fi
42}
43
44do_keygen() {
45 mkdir -p "$ABUILD_USERDIR"
46
47 get_privkey_file
48 pubkey="$privkey.pub"
49
50 # generate the private key in a subshell with stricter umask
51 (
52 umask 0007
53 openssl genrsa -out "$privkey" 2048
54 )
55 openssl rsa -in "$privkey" -pubout -out "$pubkey"
56
57
58 if [ -n "$install_pubkey" ]; then
59 msg "Installing $pubkey to /etc/apk/keys..."
60 sudo mkdir -p /etc/apk/keys
61 sudo cp -i "$pubkey" /etc/apk/keys/
62 else
63
64 msg ""
65 msg "You'll need to install $pubkey into "
66 msg "/etc/apk/keys to be able to install packages and repositories signed with"
67 msg "$privkey"
68 fi
69
70 if [ -n "$append_config" ]; then
71 if [ -f "$ABUILD_USERCONF" ]; then
72 # comment out the existing values
73 sed -i -e 's/^PACKAGER_PRIVKEY=/\#&/' "$ABUILD_USERCONF"
74 fi
75 echo "PACKAGER_PRIVKEY=\"$privkey\"" >> "$ABUILD_USERCONF"
76 else
77 msg ""
78 msg "You might want add following line to $ABUILD_USERCONF:"
79 msg ""
80 msg "PACKAGER_PRIVKEY=\"$privkey\""
81 msg ""
82 fi
83
84 msg ""
85 msg "Please remember to make a safe backup of your private key:"
86 msg "$privkey"
87 msg ""
88}
89
90usage() {
91 cat >&2 <<__EOF__
92$program $program_version - generate signing keys
93Usage: $program [-a|--append] [-i|--install] [-n]
94Options:
95 -a, --append Set PACKAGER_PRIVKEY=<generated key> in
96 $ABUILD_USERCONF
97 -i, --install Install public key into /etc/apk/keys using sudo
98 -n Non-interactive. Use defaults
99 -q, --quiet
100 -h, --help Show this help
101
102__EOF__
103}
104
105append_config=
106install_pubkey=
107non_interactive=
108quiet=
109
110args=`getopt -o ainqh --long append,install,quiet,help -n "$program" -- "$@"`
111if [ $? -ne 0 ]; then
112 usage
113 exit 2
114fi
115eval set -- "$args"
116while true; do
117 case $1 in
118 -a|--append) append_config=1;;
119 -i|--install) install_pubkey=1;;
120 -n) non_interactive=1;;
121 -q|--quiet) quiet=1;; # suppresses msg
122 -h|--help) usage; exit;;
123 --) shift; break;;
124 *) exit 1;; # getopt error
125 esac
126 shift
127done
128if [ $# -ne 0 ]; then
129 usage
130 exit 2
131fi
132
133do_keygen