#!/bin/sh # WARNING: REQUIRES /bin/sh # # - must run on /bin/sh on solaris 9 # - must run on /bin/sh on AIX 6.x # - if you think you are a bash wizard, you probably do not understand # this programming language. do not touch. # - if you are under 40, get peer review from your elders. # # Install a full Opscode Client # PROGNAME=`basename $0` INSTALLER_DIR=/opt/chef CONFIG_DIR=/etc/chef USAGE="usage: $0 [-v validation_key] ([-o organization] || [-u url])" error_exit() { echo "${PROGNAME}: ${1:-"Unknown Error"}" 1>&2 exit 1 } is_darwin() { uname -v | grep "^Darwin" 2>&1 >/dev/null } is_smartos() { uname -v | grep "^joyent" 2>&1 >/dev/null } if is_smartos; then PREFIX="/opt/local" elif is_darwin; then PREFIX="/usr/local" mkdir -p "$PREFIX/bin" else PREFIX="/usr" fi validation_key= organization= chef_url= while getopts o:u:v: opt do case "$opt" in v) validation_key="${OPTARG}";; o) organization="${OPTARG}"; chef_url="https://api.opscode.com/organizations/${OPTARG}";; u) chef_url="${OPTARG}";; \?) # unknown flag echo >&2 ${USAGE} exit 1;; esac done shift `expr ${OPTIND} - 1` if [ "" != "$chef_url" ]; then mkdir -p ${CONFIG_DIR} || error_exit "Cannot create ${CONFIG_DIR}!" ( cat <<'EOP' log_level :info log_location STDOUT EOP ) > ${CONFIG_DIR}/client.rb if [ "" != "$chef_url" ]; then echo "chef_server_url '${chef_url}'" >> ${CONFIG_DIR}/client.rb fi if [ "" != "$organization" ]; then echo "validation_client_name '${organization}-validator'" >> ${CONFIG_DIR}/client.rb fi chmod 644 ${CONFIG_DIR}/client.rb fi if [ "" != "$validation_key" ]; then cp ${validation_key} ${CONFIG_DIR}/validation.pem || error_exit "Cannot copy the validation key!" chmod 600 ${CONFIG_DIR}/validation.pem fi # rm -f before ln -sf is required for solaris 9 rm -f $PREFIX/bin/chef-client rm -f $PREFIX/bin/chef-solo rm -f $PREFIX/bin/chef-apply rm -f $PREFIX/bin/chef-shell rm -f $PREFIX/bin/knife rm -f $PREFIX/bin/ohai ln -sf $INSTALLER_DIR/bin/chef-solo $PREFIX/bin || error_exit "Cannot link chef-solo to $PREFIX/bin" if [ -f "$INSTALLER_DIR/bin/chef-apply" ]; then ln -sf $INSTALLER_DIR/bin/chef-apply $PREFIX/bin || error_exit "Cannot link chef-apply to $PREFIX/bin" fi if [ -f "$INSTALLER_DIR/bin/chef-shell" ]; then ln -sf $INSTALLER_DIR/bin/chef-shell $PREFIX/bin || error_exit "Cannot link chef-shell to $PREFIX/bin" fi ln -sf $INSTALLER_DIR/bin/knife $PREFIX/bin || error_exit "Cannot link knife to $PREFIX/bin" ln -sf $INSTALLER_DIR/bin/ohai $PREFIX/bin || error_exit "Cannot link ohai to $PREFIX/bin" # We test for the presence of /usr/bin/chef-client to know if this script succeeds, so this # must appear as the last real action in the script ln -sf $INSTALLER_DIR/bin/chef-client $PREFIX/bin || error_exit "Cannot link chef-client to $PREFIX/bin" # Ensure all files/directories in $INSTALLER_DIR are owned by root. This # has been fixed on new installs but upgrades from old installs need to # be manually fixed. chown -Rh 0:0 $INSTALLER_DIR echo "Thank you for installing Chef!" exit 0