cmd/vbash: move to infrastructure repo
Goes with v.io/i/10783
Change-Id: I41945871d0f398a091825ff7f53bf491d6f4a241
diff --git a/cmd/vbash b/cmd/vbash
index 9802ef3..d136206 100755
--- a/cmd/vbash
+++ b/cmd/vbash
@@ -3,225 +3,6 @@
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.
#
-# Starts up a shell running under the security agent.
-#
-# Specifically:
-#
-# 1. Fetches the binaries needed to set up the security environment. If it
-# can't fetch fresh binaries, it issues a warning but proceeds with existing
-# binaries, if any.
-#
-# 2. Starts a shell under the agent, optionally fetching a remote blessing if
-# the principal is missing.
-#
-# Uses ~/.vbash to store its files, including binaries and the principal.
-#
-# Usage:
-#
-# # Builds and fetches binaries from local repository
-# ./vbash
-#
-# # Gets binaries from local filesystem
-# ./vbash /path/to/binaries
-#
-# # Gets binaries from HTTP server
-# ./vbash http://host/path
-#
-# # Work with staging environment.
-# ./vbash -s
-#
-# Limitations:
-# Tested on goobuntu and OS X 10.9.5.
-
-set -e
-
-readonly BIN_PACKAGES=(v.io/x/ref/cmd/principal v.io/x/ref/services/agent/agentd)
-BIN_NAMES=(${BIN_PACKAGES[@]})
-for (( i=0; i<${#BIN_PACKAGES[@]}; i++ )); do
- BIN_NAMES[$i]=$(basename "${BIN_PACKAGES[$i]}")
-done
-
-# TODO(caprita): share copy_binaries and get_binaries with nminstall.
-
-###############################################################################
-# Copies one binary from source to destination.
-# Arguments:
-# name of the binary
-# source dir of binary
-# destination dir of binary
-# Returns:
-# None
-###############################################################################
-copy_binary() {
- local -r BIN_NAME="$1"
- local -r BIN_SRC_DIR="$2"
- local -r BIN_DEST_DIR="$3"
- local -r SOURCE="${BIN_SRC_DIR}/${BIN_NAME}"
- if [[ -x "${SOURCE}" ]]; then
- local -r DESTINATION="${BIN_DEST_DIR}/${BIN_NAME}"
- cp "${SOURCE}" "${DESTINATION}"
- chmod 700 "${DESTINATION}"
- else
- echo "couldn't find ${SOURCE}"
- return 1
- fi
-}
-
-###############################################################################
-# Fetches binaries needed by device manager installation.
-# Globals:
-# BIN_NAMES
-# BIN_PACKAGES
-# V23_ROOT
-# Arguments:
-# destination for binaries
-# source of binaries
-# Returns:
-# None
-###############################################################################
-get_binaries() {
- local -r BIN_INSTALL="$1"
- local -r BIN_SOURCE="$2"
-
- local bin_names_str=""
- for bin_name in "${BIN_NAMES[@]}"; do
- bin_names_str+=" ${bin_name}"
- done
-
- # If source is not specified, try to build latest version of the binaries and copy
- # them from the repository.
- if [[ -z "${BIN_SOURCE}" ]]; then
- if [[ -z "${V23_ROOT}" ]]; then
- echo 'WARNING: V23_ROOT is not specified, cannot build fresh binaries'
- return
- fi
- local -r REPO_BIN_DIR="${V23_ROOT}/release/go/bin"
- echo "Building and Fetching binaries:${bin_names_str} from build repository: ${REPO_BIN_DIR} ..."
- for package in "${BIN_PACKAGES[@]}"; do
- local bin_name=$(basename "${package}")
- v23 go install "${package}" 2> /dev/null || echo "WARNING: Could not build binary: ${bin_name}"
- # while the build failed, we still try to see if we can copy the binary from the build repository.
- copy_binary "${bin_name}" "${REPO_BIN_DIR}" "${BIN_INSTALL}" || echo "WARNING: Could not copy binary: ${bin_name} from build repository: ${REPO_BIN_DIR}"
- done
- return
- fi
-
- # If the source is specified as an existing local filesystem path,
- # look for the binaries there.
- if [[ -d "${BIN_SOURCE}" ]]; then
- echo "Fetching binaries:${bin_names_str} locally from: ${BIN_SOURCE} ..."
- for bin_name in "${BIN_NAMES[@]}"; do
- copy_binary "${bin_name}" "${BIN_SOURCE}" "${BIN_INSTALL}" || echo "WARNING: Could not copy binary: ${bin_name} from: ${BIN_SOURCE}"
- done
- return
- fi
-
- # If the source looks like a URL, use HTTP to fetch.
- local -r URL_REGEXP='^(https?|ftp|file)://'
- if [[ "${BIN_SOURCE}" =~ ${URL_REGEXP} ]]; then
- echo "Fetching binaries:${bin_names_str} remotely from: ${BIN_SOURCE} ..."
- for bin_name in "${BIN_NAMES[@]}"; do
- local DEST="${BIN_INSTALL}/${bin_name}"
- (curl -f -o "${DEST}" "${BIN_SOURCE}/${bin_name}" && chmod 700 "${DEST}") || echo "WARNING: Could not fetch binary: ${bin_name} from HTTP server: ${BIN_SOURCE}/${bin_name}"
- done
- return
- fi
-
- echo "WARNING: couldn't fetch binaries."
-}
-
-main() {
- if [[ ! -z "${VBASH_INDICATOR}" ]]; then
- echo "Disallowing running VBASH within VBASH."
- echo "https://memegen.googleplex.com/5551020600983552"
- exit 1
- fi
- export VBASH_INDICATOR="1"
-
- # Check staging flag "-s".
- local INSTALL_DIR="${HOME}/.vbash"
- local IDENTITY_PROVIDER="https://dev.v.io/auth/google"
- local NS="/(dev.v.io/role/vprod)@ns.dev.v.io:8101"
- local TAG=""
- local TITLE="vbash"
- while getopts ":s" opt; do
- case $opt in
- s)
- INSTALL_DIR="${HOME}/.vbash-staging"
- IDENTITY_PROVIDER="https://dev.staging.v.io/auth/google"
- NS="/(dev.v.io/role/vprod)@ns.dev.staging.v.io:8101"
- TAG="\[\e[1;35m\][STAGING] "
- TITLE="vbash staging"
- ;;
- \?)
- echo "Invalid option: -$OPTARG" >&2
- exit 1
- ;;
- esac
- done
- shift $(( OPTIND - 1 ))
-
- if [[ ! -e "${INSTALL_DIR}" ]]; then
- mkdir -m 700 "${INSTALL_DIR}"
- fi
- if [[ ! -d "${INSTALL_DIR}" ]]; then
- echo "${INSTALL_DIR} is not a directory!"
- exit 1
- fi
-
- local -r BIN_INSTALL="${INSTALL_DIR}/bin"
- if [[ ! -e "${BIN_INSTALL}" ]]; then
- mkdir -m 700 "${BIN_INSTALL}"
- fi
- if [[ ! -d "${BIN_INSTALL}" ]]; then
- echo "${BIN_INSTALL} is not a directory!"
- exit 1
- fi
-
- # Fetch the binaries.
- local -r BIN_SOURCE="$1"
- get_binaries "${BIN_INSTALL}" "${BIN_SOURCE}"
- for bin_name in "${BIN_NAMES[@]}"; do
- local BINARY="${BIN_INSTALL}/${bin_name}"
- if [[ ! -s "${BINARY}" ]]; then
- echo "${BINARY} is empty."
- exit 1
- fi
- done
- echo "Using binaries in ${BIN_INSTALL}."
-
- # Set up the script to be run by the agent. It first optionally seeks a
- # blessing, and then runs an interactive shell.
-
- local -r CREDENTIALS_DIR="${INSTALL_DIR}/principal"
- if [[ ! -d "${CREDENTIALS_DIR}" ]]; then
- SEEK_BLESSING="1"
- fi
-
- # Use a custom rcfile to optionally get a blessing and also to modify the
- # shell prompt to include the default vanadium blessing.
- cat <<EOF > "${INSTALL_DIR}/rcfile"
-if [[ Darwin == "$(uname)" ]]; then
- if [[ -r /etc/profile ]]; then . /etc/profile; fi
- for n in ~/.bash_profile ~/.bash_login ~/.profile; do
- if [[ -r "$n" ]]; then
- . "$n"
- break
- fi
- done
-else
- if [[ -f ~/.bashrc ]]; then . ~/.bashrc; fi
-fi
-export PROMPT_COMMAND='PS1="\[\e]0;${TITLE}\007\]\u@\h (${TAG}\[\e[1;32m\]\$("${BIN_INSTALL}/principal" dump -s)\[\e[0m\]):\w \$ "'
-export V23_NAMESPACE="${NS}"
-export V23_OAUTH_IDENTITY_PROVIDER="${IDENTITY_PROVIDER}"
-if [[ "${SEEK_BLESSING}" -eq "1" ]]; then
- "${BIN_INSTALL}/principal" seekblessings
-fi
-
-EOF
-
-V23_CREDENTIALS="${CREDENTIALS_DIR}" exec "${BIN_INSTALL}/agentd" --additional-principals="${CREDENTIALS_DIR}" bash --rcfile "${INSTALL_DIR}/rcfile"
-}
-
-main "$@"
+# Tombstone for the vbash script after move.
+# TODO(caprita): Remove this on 4/29/15.
+echo "vbash has moved to ${V23_ROOT}/infrastructure/vanadium/scripts/vbash"