@@ -25,6 +25,7 @@ RUBIES_DIR="/usr/local/rubies"
2525RUBY_GROUP=" ruby"
2626RBENV_ROOT=" /usr/local/share/rbenv"
2727RVM_PATH=" /usr/local/rvm"
28+ RVM_GPG_KEYS=" 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB"
2829
2930set -e
3031
@@ -86,6 +87,69 @@ apply_group_perms() {
8687 find " ${dir} " -type d -exec chmod g+s {} + 2> /dev/null || true
8788}
8889
90+ get_gpg_key_servers () {
91+ declare -A keyservers_curl_map=(
92+ [" hkp://keyserver.ubuntu.com" ]=" http://keyserver.ubuntu.com:11371"
93+ [" hkp://keyserver.ubuntu.com:80" ]=" http://keyserver.ubuntu.com"
94+ [" hkps://keys.openpgp.org" ]=" https://keys.openpgp.org"
95+ [" hkp://keyserver.pgp.com" ]=" http://keyserver.pgp.com:11371"
96+ )
97+
98+ local curl_args=" "
99+ local keyserver_reachable=false
100+
101+ if [ -n " ${KEYSERVER_PROXY:- } " ]; then
102+ curl_args=" --proxy ${KEYSERVER_PROXY} "
103+ fi
104+
105+ for keyserver in " ${! keyservers_curl_map[@]} " ; do
106+ local keyserver_curl_url=" ${keyservers_curl_map[${keyserver}]} "
107+ if curl -s ${curl_args} --max-time 5 " ${keyserver_curl_url} " > /dev/null; then
108+ echo " keyserver ${keyserver} "
109+ keyserver_reachable=true
110+ else
111+ echo " (*) Keyserver ${keyserver} is not reachable." >&2
112+ fi
113+ done
114+
115+ if ! $keyserver_reachable ; then
116+ echo " (!) No keyserver is reachable." >&2
117+ exit 1
118+ fi
119+ }
120+
121+ receive_gpg_keys () {
122+ local keys=${! 1}
123+ local keyring_args=" "
124+ if [ -n " ${2:- } " ]; then
125+ keyring_args=" --no-default-keyring --keyring \" $2 \" "
126+ fi
127+
128+ export GNUPGHOME=" /tmp/tmp-gnupg"
129+ mkdir -p " ${GNUPGHOME} "
130+ chmod 700 " ${GNUPGHOME} "
131+ echo -e " disable-ipv6\n$( get_gpg_key_servers) " > " ${GNUPGHOME} /dirmngr.conf"
132+
133+ local retry_count=0
134+ local gpg_ok=" false"
135+ set +e
136+ until [ " ${gpg_ok} " = " true" ] || [ " ${retry_count} " -eq " 5" ]; do
137+ echo " (*) Downloading GPG key..."
138+ # shellcheck disable=SC2086
139+ ( echo " ${keys} " | xargs -n 1 gpg -q ${keyring_args} --recv-keys) 2>&1 && gpg_ok=" true"
140+ if [ " ${gpg_ok} " != " true" ]; then
141+ echo " (*) Failed getting key, retrying in 10s..."
142+ (( retry_count++ ))
143+ sleep 10s
144+ fi
145+ done
146+ set -e
147+ if [ " ${gpg_ok} " = " false" ]; then
148+ echo " (!) Failed to get gpg key."
149+ exit 1
150+ fi
151+ }
152+
89153default_ruby_version () {
90154 [ -L " ${RUBIES_DIR} /current" ] && basename " $( readlink " ${RUBIES_DIR} /current" ) "
91155}
@@ -267,14 +331,7 @@ RBENV_PROFILE
267331install_rvm () {
268332 echo " Installing rvm..."
269333
270- # Best-effort GPG key import; some networks block keyservers.
271- gpg --keyserver hkp://keyserver.ubuntu.com \
272- --recv-keys \
273- 409B6B1796C275462A1703113804BB82D39DC0E3 \
274- 7D2BAF1CF37B13E2069D6956105BD0E739499BDB 2> /dev/null \
275- || curl -sSL https://rvm.io/mpapis.asc | gpg --import - 2> /dev/null \
276- || curl -sSL https://rvm.io/pkuczynski.asc | gpg --import - 2> /dev/null \
277- || true
334+ receive_gpg_keys RVM_GPG_KEYS
278335
279336 curl -sSL https://get.rvm.io | bash -s stable --path " ${RVM_PATH} "
280337
0 commit comments