projects/aports·blob v2.16.0 · refs

132 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
9abuild_ver=@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$prog $abuild_ver - generate signing keys
93Usage: $prog [-a|--append] [-i|--install] [-n]
94Options:
95 -a, --append Set PACKAGER_PRIVKEY=<generated key> in $ABUILD_USERCONF
96 -i, --install Install public key into /etc/apk/keys using sudo
97 -n Non-interactive. Use defaults
98 -q, --quiet
99 -h, --help Show this help
100
101__EOF__
102}
103
104append_config=
105install_pubkey=
106non_interactive=
107quiet=
108
109args=`getopt -o ainqh --long append,install,quiet,help -n "$prog" -- "$@"`
110if [ $? -ne 0 ]; then
111 usage
112 exit 2
113fi
114eval set -- "$args"
115while true; do
116 case $1 in
117 -a|--append) append_config=1;;
118 -i|--install) install_pubkey=1;;
119 -n) non_interactive=1;;
120 -q|--quiet) quiet=1;; # suppresses msg
121 -h|--help) usage; exit;;
122 --) shift; break;;
123 *) exit 1;; # getopt error
124 esac
125 shift
126done
127if [ $# -ne 0 ]; then
128 usage
129 exit 2
130fi
131
132do_keygen