projects/aports·blob v2.13.0 · refs

126 lines · 2.9 KiB

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