#!/bin/bash # # priority: 400 # # Generate GPG keys # # Mark Huang # Copyright (C) 2006 The Trustees of Princeton University # # Source function library and configuration . /etc/plc.d/functions . /etc/planetlab/plc_config # Be verbose set -x case "$1" in start) # Make temporary GPG home directory homedir=$(mktemp -d /tmp/gpg.XXXXXX) # in case a previous gpg invocation failed in some weird way # and left behind a zero length gpg key (pub or priv). if [ -f $PLC_ROOT_GPG_KEY_PUB -a ! -s $PLC_ROOT_GPG_KEY_PUB ] ; then rm -f $PLC_ROOT_GPG_KEY_PUB fi if [ -f $PLC_ROOT_GPG_KEY -a ! -s $PLC_ROOT_GPG_KEY ] ; then rm -f $PLC_ROOT_GPG_KEY fi if [ ! -f $PLC_ROOT_GPG_KEY_PUB -o ! -f $PLC_ROOT_GPG_KEY ] ; then # Generate new GPG keyring MESSAGE=$"Generating GPG keys" dialog "$MESSAGE" mkdir -p $(dirname $PLC_ROOT_GPG_KEY_PUB) mkdir -p $(dirname $PLC_ROOT_GPG_KEY) # Temporarily replace /dev/random with /dev/urandom to # avoid running out of entropy. rm -f /dev/random # 1 9 is /dev/urandom mknod /dev/random c 1 9 # sometimes mknod fails within an improperly setup vserver check gpg --homedir=$homedir --no-permission-warning --batch --no-tty --yes \ --gen-key <"/etc/pki/rpm-gpg/RPM-GPG-KEY-$PLC_NAME" check if rpm -q gpg-pubkey ; then rpm --allmatches -e gpg-pubkey check fi # starting with rpm-4.6, this fails when run a second time # it would be complex to do this properly based on the filename, # as /etc/pki/rpm-gpg/ typically has many symlinks to the same file # see also http://fedoranews.org/tchung/gpg/ # so just ignore the result rpm --import /etc/pki/rpm-gpg/* || : check # Make GPG key readable by apache so that the API can sign peer requests chown apache $PLC_ROOT_GPG_KEY chmod 644 $PLC_ROOT_GPG_KEY_PUB chmod 600 $PLC_ROOT_GPG_KEY check # Cleanup rm -rf $homedir result "$MESSAGE" ;; esac exit $ERRORS