123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939 |
- #!/usr/bin/env bash
- shopt -s extglob
- set -o errtrace
- set -o errexit
- set -o pipefail
- rvm_install_initialize()
- {
- DEFAULT_SOURCES=(github.com/rvm/rvm bitbucket.org/mpapis/rvm)
- BASH_MIN_VERSION="3.2.25"
- if
- [[ -n "${BASH_VERSION:-}" &&
- "$(\printf "%b" "${BASH_VERSION:-}\n${BASH_MIN_VERSION}\n" | LC_ALL=C \sort -t"." -k1,1n -k2,2n -k3,3n | \head -n1)" != "${BASH_MIN_VERSION}"
- ]]
- then
- echo "BASH ${BASH_MIN_VERSION} required (you have $BASH_VERSION)"
- exit 1
- fi
- export HOME PS4
- export rvm_trace_flag rvm_debug_flag rvm_user_install_flag rvm_ignore_rvmrc rvm_prefix rvm_path
- PS4="+ \${BASH_SOURCE##\${rvm_path:-}} : \${FUNCNAME[0]:+\${FUNCNAME[0]}()} \${LINENO} > "
- }
- log() { printf "%b\n" "$*"; }
- debug(){ [[ ${rvm_debug_flag:-0} -eq 0 ]] || printf "%b\n" "$*" >&2; }
- warn() { log "WARN: $*" >&2 ; }
- fail() { fail_with_code 1 "$*" ; }
- fail_with_code() { code="$1" ; shift ; log "\nERROR: $*\n" >&2 ; exit "$code" ; }
- rvm_install_commands_setup()
- {
- \which which >/dev/null 2>&1 || fail "Could not find 'which' command, make sure it's available first before continuing installation."
- \which grep >/dev/null 2>&1 || fail "Could not find 'grep' command, make sure it's available first before continuing installation."
- if
- [[ -z "${rvm_tar_command:-}" ]] && builtin command -v gtar >/dev/null
- then
- rvm_tar_command=gtar
- elif
- ${rvm_tar_command:-tar} --help 2>&1 | GREP_OPTIONS="" \grep -- --strip-components >/dev/null
- then
- rvm_tar_command="${rvm_tar_command:-tar}"
- else
- case "$(uname)" in
- (OpenBSD)
- log "Trying to install GNU version of tar, might require sudo password"
- if (( UID ))
- then sudo pkg_add -z gtar-1
- else pkg_add -z gtar-1
- fi
- rvm_tar_command=gtar
- ;;
- (Darwin|FreeBSD|DragonFly) # it's not possible to autodetect on OSX, the help/man does not mention all flags
- rvm_tar_command=tar
- ;;
- (SunOS)
- case "$(uname -r)" in
- (5.10)
- log "Trying to install GNU version of tar, might require sudo password"
- if (( UID ))
- then
- if \which sudo >/dev/null 2>&1
- then sudo_10=sudo
- elif \which /opt/csw/bin/sudo >/dev/null 2>&1
- then sudo_10=/opt/csw/bin/sudo
- else fail "sudo is required but not found. You may install sudo from OpenCSW repository (https://www.opencsw.org/about)"
- fi
- pkginfo -q CSWpkgutil || $sudo_10 pkgadd -a $rvm_path/config/solaris/noask -d https://get.opencsw.org/now CSWpkgutil
- sudo /opt/csw/bin/pkgutil -iy CSWgtar -t https://mirror.opencsw.org/opencsw/unstable
- else
- pkginfo -q CSWpkgutil || pkgadd -a $rvm_path/config/solaris/noask -d https://get.opencsw.org/now CSWpkgutil
- /opt/csw/bin/pkgutil -iy CSWgtar -t https://mirror.opencsw.org/opencsw/unstable
- fi
- rvm_tar_command=/opt/csw/bin/gtar
- ;;
- (*)
- rvm_tar_command=tar
- ;;
- esac
- esac
- builtin command -v ${rvm_tar_command:-gtar} >/dev/null ||
- fail "Could not find GNU compatible version of 'tar' command, make sure it's available first before continuing installation."
- fi
- if
- [[ " ${rvm_tar_options:-} " != *" --no-same-owner "* ]] &&
- $rvm_tar_command --help 2>&1 | GREP_OPTIONS="" \grep -- --no-same-owner >/dev/null
- then
- rvm_tar_options="${rvm_tar_options:-}${rvm_tar_options:+ }--no-same-owner"
- fi
- }
- usage()
- {
- printf "%b" "
- Usage
- rvm-installer [options] [action]
- Options
- [[--]version] <version>
- The version or tag to install. Valid values are:
- latest - The latest tagged version.
- latest-minor - The latest minor version of the current major version.
- latest-<x> - The latest minor version of version x.
- latest-<x>.<y> - The latest patch version of version x.y.
- <x>.<y>.<z> - Major version x, minor version y and patch z.
- [--]branch <branch>
- The name of the branch from which RVM is installed. This option can be used
- with the following formats for <branch>:
- <account>/
- If account is rvm or mpapis, installs from one of the following:
- https://github.com/rvm/rvm/archive/master.tar.gz
- https://bitbucket.org/mpapis/rvm/get/master.tar.gz
- Otherwise, installs from:
- https://github.com/<account>/rvm/archive/master.tar.gz
- <account>/<branch>
- If account is rvm or mpapis, installs from one of the following:
- https://github.com/rvm/rvm/archive/<branch>.tar.gz
- https://bitbucket.org/mpapis/rvm/get/<branch>.tar.gz
- Otherwise, installs from:
- https://github.com/<account>/rvm/archive/<branch>.tar.gz
- [/]<branch>
- Installs the branch from one of the following:
- https://github.com/rvm/rvm/archive/<branch>.tar.gz
- https://bitbucket.org/mpapis/rvm/get/<branch>.tar.gz
- [--]source <source>
- Defines the repository from which RVM is retrieved and installed in the format:
- <domain>/<account>/<repo>
- Where:
- <domain> - Is bitbucket.org, github.com or a github enterprise site serving
- an RVM repository.
- <account> - Is the user account in which the RVM repository resides.
- <repo> - Is the name of the RVM repository.
- Note that when using the [--]source option, one should only use the [/]branch format
- with the [--]branch option. Failure to do so will result in undefined behavior.
- --trace
- Provides debug logging for the installation script.
- Actions
- master - Installs RVM from the master branch at rvm/rvm on github or mpapis/rvm
- on bitbucket.org.
- stable - Installs RVM from the stable branch a rvm/rvm on github or mpapis/rvm
- on bitbucket.org.
- help - Displays this output.
- "
- }
- ## duplication marker 32fosjfjsznkjneuera48jae
- __rvm_curl_output_control()
- {
- if
- (( ${rvm_quiet_curl_flag:-0} == 1 ))
- then
- __flags+=( "--silent" "--show-error" )
- elif
- [[ " $*" == *" -s"* || " $*" == *" --silent"* ]]
- then
- # make sure --show-error is used with --silent
- [[ " $*" == *" -S"* || " $*" == *" -sS"* || " $*" == *" --show-error"* ]] ||
- {
- __flags+=( "--show-error" )
- }
- fi
- }
- ## duplication marker 32fosjfjsznkjneuera48jae
- # -S is automatically added to -s
- __rvm_curl()
- (
- __rvm_which curl >/dev/null ||
- {
- rvm_error "RVM requires 'curl'. Install 'curl' first and try again."
- return 200
- }
- typeset -a __flags
- __flags=( --fail --location --max-redirs 10 )
- [[ "$*" == *"--max-time"* ]] ||
- [[ "$*" == *"--connect-timeout"* ]] ||
- __flags+=( --connect-timeout 30 --retry-delay 2 --retry 3 )
- if [[ -n "${rvm_proxy:-}" ]]
- then __flags+=( --proxy "${rvm_proxy:-}" )
- fi
- __rvm_curl_output_control
- unset curl
- __rvm_debug_command \curl "${__flags[@]}" "$@" || return $?
- )
- rvm_error() { printf "ERROR: %b\n" "$*"; }
- __rvm_which(){ which "$@" || return $?; true; }
- __rvm_debug_command()
- {
- debug "Running($#): $*"
- "$@" || return $?
- true
- }
- rvm_is_a_shell_function()
- {
- [[ -t 0 && -t 1 ]] || return $?
- return ${rvm_is_not_a_shell_function:-0}
- }
- # Searches the tags for the highest available version matching a given pattern.
- # fetch_version (github.com/rvm/rvm bitbucket.org/mpapis/rvm) 1.10. -> 1.10.3
- # fetch_version (github.com/rvm/rvm bitbucket.org/mpapis/rvm) 1.10. -> 1.10.3
- # fetch_version (github.com/rvm/rvm bitbucket.org/mpapis/rvm) 1. -> 1.11.0
- # fetch_version (github.com/rvm/rvm bitbucket.org/mpapis/rvm) "" -> 2.0.1
- fetch_version()
- {
- typeset _account _domain _pattern _repo _sources _values _version
- _sources=(${!1})
- _pattern=$2
- for _source in "${_sources[@]}"
- do
- IFS='/' read -r _domain _account _repo <<< "${_source}"
- _version="$(
- fetch_versions ${_domain} ${_account} ${_repo} |
- GREP_OPTIONS="" \grep "^${_pattern:-}" | tail -n 1
- )"
- if
- [[ -n ${_version} ]]
- then
- echo "${_version}"
- return 0
- fi
- done
- fail_with_code 4 "Exhausted all sources trying to fetch version '$version' of RVM!"
- }
- # Returns a sorted list of most recent tags from a repository
- fetch_versions()
- {
- typeset _account _domain _repo _url
- _domain=$1
- _account=$2
- _repo=$3
- case ${_domain} in
- (bitbucket.org)
- _url="https://api.${_domain}/2.0/repositories/${_account}/${_repo}/refs/tags?sort=-name&pagelen=20"
- ;;
- (github.com)
- _url=https://api.${_domain}/repos/${_account}/${_repo}/tags
- ;;
- (*)
- _url=https://${_domain}/api/v3/repos/${_account}/${_repo}/tags
- ;;
- esac
- { __rvm_curl -sS "${_url}" || warn "...the preceeding error with code $? occurred while fetching $_url" ; } |
- \awk -v RS=',|values":' -v FS='"' '$2=="name"&&$4!="rvm"{print $4}' |
- sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n
- }
- install_release()
- {
- typeset _source _sources _url _version _verify_pgp
- _sources=(${!1})
- _version=$2
- debug "Downloading RVM version ${_version}"
- for _source in "${_sources[@]}"
- do
- case ${_source} in
- (bitbucket.org*)
- _url="https://${_source}/get/${_version}.tar.gz"
- _verify_pgp="https://${_source}/downloads/${_version}.tar.gz.asc"
- ;;
- (*)
- _url="https://${_source}/archive/${_version}.tar.gz"
- _verify_pgp="https://${_source}/releases/download/${_version}/${_version}.tar.gz.asc"
- ;;
- esac
- get_and_unpack "${_url}" "rvm-${_version}.tgz" "$_verify_pgp" && return
- done
- return $?
- }
- install_head()
- {
- typeset _branch _source _sources _url
- _sources=(${!1})
- _branch=$2
- debug "Selected RVM branch ${_branch}"
- for _source in "${_sources[@]}"
- do
- case ${_source} in
- (bitbucket.org*)
- _url=https://${_source}/get/${_branch}.tar.gz
- ;;
- (*)
- _url=https://${_source}/archive/${_branch}.tar.gz
- ;;
- esac
- get_and_unpack "${_url}" "rvm-${_branch//\//_}.tgz" && return
- done
- return $?
- }
- # duplication marker dfkjdjngdfjngjcszncv
- # Drop in cd which _doesn't_ respect cdpath
- __rvm_cd()
- {
- typeset old_cdpath ret
- ret=0
- old_cdpath="${CDPATH}"
- CDPATH="."
- chpwd_functions="" builtin cd "$@" || ret=$?
- CDPATH="${old_cdpath}"
- return $ret
- }
- get_package()
- {
- typeset _url _file
- _url="$1"
- _file="$2"
- log "Downloading ${_url}"
- __rvm_curl -sS ${_url} > ${rvm_archives_path}/${_file} ||
- {
- _return=$?
- case $_return in
- # duplication marker lfdgzkngdkjvnfjknkjvcnbjkncvjxbn
- (60)
- log "
- Could not download '${_url}', you can read more about it here:
- https://rvm.io/support/fixing-broken-ssl-certificates/
- To continue in insecure mode run 'echo insecure >> ~/.curlrc'.
- "
- ;;
- # duplication marker lfdgzkngdkjvnfjknkjvcnbjkncvjxbn
- (77)
- log "
- It looks like you have old certificates, you can read more about it here:
- https://rvm.io/support/fixing-broken-ssl-certificates/
- "
- ;;
- # duplication marker lfdgzkngdkjvnfjknkjvcnbjkncvjxbn
- (141)
- log "
- Curl returned 141 - it is result of a segfault which means it's Curls fault.
- Try again and if it crashes more than a couple of times you either need to
- reinstall Curl or consult with your distribution manual and contact support.
- "
- ;;
- (*)
- log "
- Could not download '${_url}'.
- curl returned status '$_return'.
- "
- ;;
- esac
- return $_return
- }
- }
- # duplication marker flnglfdjkngjndkfjhsbdjgfghdsgfklgg
- rvm_install_gpg_setup()
- {
- export rvm_gpg_command
- {
- rvm_gpg_command="$( \which gpg2 2>/dev/null )" &&
- [[ ${rvm_gpg_command} != "/cygdrive/"* ]]
- } || {
- rvm_gpg_command="$( \which gpg 2>/dev/null )" &&
- [[ ${rvm_gpg_command} != "/cygdrive/"* ]]
- } || rvm_gpg_command=""
- debug "Detected GPG program: '$rvm_gpg_command'"
- [[ -n "$rvm_gpg_command" ]] || return $?
- }
- # duplication marker rdjgndfnghdfnhgfdhbghdbfhgbfdhbn
- verify_package_pgp()
- {
- if
- "${rvm_gpg_command}" --verify "$2" "$1"
- then
- log "GPG verified '$1'"
- else
- typeset _return=$?
- log "\
- GPG signature verification failed for '$1' - '$3'! Try to install GPG v2 and then fetch the public key:
- ${SUDO_USER:+sudo }${rvm_gpg_command##*/} --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
- or if it fails:
- command curl -sSL https://rvm.io/mpapis.asc | ${SUDO_USER:+sudo }${rvm_gpg_command##*/} --import -
- command curl -sSL https://rvm.io/pkuczynski.asc | ${SUDO_USER:+sudo }${rvm_gpg_command##*/} --import -
- In case of further problems with validation please refer to https://rvm.io/rvm/security
- "
- exit ${_return}
- fi
- }
- verify_pgp()
- {
- [[ -n "${1:-}" ]] ||
- {
- debug "No PGP url given, skipping."
- return 0
- }
- get_package "$1" "$2.asc" ||
- {
- debug "PGP url given but does not exist: '$1'"
- return 0
- }
- rvm_install_gpg_setup ||
- {
- log "Found PGP signature at: '$1',
- but no GPG software exists to validate it, skipping."
- return 0
- }
- verify_package_pgp "${rvm_archives_path}/$2" "${rvm_archives_path}/$2.asc" "$1"
- }
- get_and_unpack()
- {
- typeset _url _file _patern _return _verify_pgp
- _url="$1"
- _file="$2"
- _verify_pgp="$3"
- get_package "$_url" "$_file" || return $?
- verify_pgp "$_verify_pgp" "$_file" || return $?
- [[ -d "${rvm_src_path}/rvm" ]] || \mkdir -p "${rvm_src_path}/rvm"
- __rvm_cd "${rvm_src_path}/rvm" ||
- {
- _return=$?
- log "Could not change directory '${rvm_src_path}/rvm'."
- return $_return
- }
- # Remove existing installation
- typeset _cleanup_cmd
- _cleanup_cmd="rm -rf ${rvm_src_path}/rvm/{,.[!.],..?}*"
- $_cleanup_cmd || {
- _return=$?
- log "Could not remove old RVM sources. Try:\n\n\tsudo $_cleanup_cmd\n\nThen retry your task again."
- return $_return
- }
- # Unpack sources
- __rvm_debug_command $rvm_tar_command xzf ${rvm_archives_path}/${_file} ${rvm_tar_options:-} --strip-components 1 ||
- {
- _return=$?
- log "Could not extract RVM sources."
- return $_return
- }
- }
- rvm_install_default_settings()
- {
- # Tracing, if asked for.
- if
- [[ "$*" == *--trace* ]] || (( ${rvm_trace_flag:-0} > 0 ))
- then
- set -o xtrace
- rvm_trace_flag=1
- fi
- # Variable initialization, remove trailing slashes if they exist on HOME
- true \
- ${rvm_trace_flag:=0} ${rvm_debug_flag:=0}\
- ${rvm_ignore_rvmrc:=0} HOME="${HOME%%+(\/)}"
- if
- (( rvm_ignore_rvmrc == 0 ))
- then
- for rvmrc in /etc/rvmrc "$HOME/.rvmrc"
- do
- if
- [[ -s "$rvmrc" ]]
- then
- if
- GREP_OPTIONS="" \grep '^\s*rvm .*$' "$rvmrc" >/dev/null 2>&1
- then
- printf "%b" "
- Error: $rvmrc is for rvm settings only.
- rvm CLI may NOT be called from within $rvmrc.
- Skipping the loading of $rvmrc
- "
- exit 1
- else
- source "$rvmrc"
- fi
- fi
- done
- fi
- if
- [[ -z "${rvm_path:-}" ]]
- then
- if
- (( UID == 0 ))
- then
- rvm_user_install_flag=0
- rvm_prefix="/usr/local"
- rvm_path="${rvm_prefix}/rvm"
- else
- rvm_user_install_flag=1
- rvm_prefix="$HOME"
- rvm_path="${rvm_prefix}/.rvm"
- fi
- fi
- if [[ -z "${rvm_prefix}" ]]
- then rvm_prefix=$( dirname $rvm_path )
- fi
- # duplication marker kkdfkgnjfndgjkndfjkgnkfjdgn
- [[ -n "${rvm_user_install_flag:-}" ]] ||
- case "$rvm_path" in
- (/usr/local/rvm) rvm_user_install_flag=0 ;;
- ($HOME/*|/${USER// /_}*) rvm_user_install_flag=1 ;;
- (*) rvm_user_install_flag=0 ;;
- esac
- }
- rvm_install_parse_params()
- {
- install_rubies=()
- install_gems=()
- flags=( ./scripts/install )
- forwarded_flags=()
- while
- (( $# > 0 ))
- do
- token="$1"
- shift
- case "$token" in
- (--trace)
- set -o xtrace
- rvm_trace_flag=1
- flags=( -x "${flags[@]}" "$token" )
- forwarded_flags+=( "$token" )
- ;;
- (--debug|--quiet-curl)
- flags+=( "$token" )
- forwarded_flags+=( "$token" )
- token=${token#--}
- token=${token//-/_}
- export "rvm_${token}_flag"=1
- printf "%b" "Turning on ${token/_/ } mode.\n"
- ;;
- (--path)
- if [[ -n "${1:-}" ]]
- then
- rvm_path="$1"
- shift
- else
- fail "--path must be followed by a path."
- fi
- ;;
- (--branch|branch) # Install RVM from a given branch
- if [[ -n "${1:-}" ]]
- then
- case "$1" in
- (/*)
- branch=${1#/}
- ;;
- (*/)
- branch=master
- if [[ "${1%/}" -ne rvm ]] && [[ "${1%/}" -ne mpapis ]]
- then sources=(github.com/${1%/}/rvm)
- fi
- ;;
- (*/*)
- branch=${1#*/}
- if [[ "${1%%/*}" -ne rvm ]] && [[ "${1%%/*}" -ne mpapis ]]
- then sources=(github.com/${1%%/*}/rvm)
- fi
- ;;
- (*)
- branch="$1"
- ;;
- esac
- shift
- else
- fail "--branch must be followed by a branchname."
- fi
- ;;
- (--source|source)
- if [[ -n "${1:-}" ]]
- then
- if [[ "$1" = */*/* ]]
- then
- sources=($1)
- shift
- else
- fail "--source must be in the format <domain>/<account>/<repo>."
- fi
- else
- fail "--source must be followed by a source."
- fi
- ;;
- (--user-install|--ignore-dotfiles)
- token=${token#--}
- token=${token//-/_}
- export "rvm_${token}_flag"=1
- printf "%b" "Turning on ${token/_/ } mode.\n"
- ;;
- (--auto-dotfiles)
- flags+=( "$token" )
- export "rvm_auto_dotfiles_flag"=1
- printf "%b" "Turning on auto dotfiles mode.\n"
- ;;
- (--auto)
- export "rvm_auto_dotfiles_flag"=1
- printf "%b" "Warning, --auto is deprecated in favor of --auto-dotfiles.\n"
- ;;
- (--verify-downloads)
- if [[ -n "${1:-}" ]]
- then
- export rvm_verify_downloads_flag="$1"
- forwarded_flags+=( "$token" "$1" )
- shift
- else
- fail "--verify-downloads must be followed by level(0|1|2)."
- fi
- ;;
- (--autolibs=*)
- flags+=( "$token" )
- export rvm_autolibs_flag="${token#--autolibs=}"
- forwarded_flags+=( "$token" )
- ;;
- (--without-gems=*|--with-gems=*|--with-default-gems=*)
- flags+=( "$token" )
- value="${token#*=}"
- token="${token%%=*}"
- token="${token#--}"
- token="${token//-/_}"
- export "rvm_${token}"="${value}"
- printf "%b" "Installing RVM ${token/_/ }: ${value}.\n"
- ;;
- (--version|version)
- version="$1"
- shift
- ;;
- (head|master)
- version="head"
- branch="master"
- ;;
- (stable)
- version="latest"
- ;;
- (latest|latest-*|+([[:digit:]]).+([[:digit:]]).+([[:digit:]]))
- version="$token"
- ;;
- (--ruby)
- install_rubies+=( ruby )
- ;;
- (--ruby=*)
- token=${token#--ruby=}
- install_rubies+=( ${token//,/ } )
- ;;
- (--rails)
- install_gems+=( rails )
- ;;
- (--gems=*)
- token=${token#--gems=}
- install_gems+=( ${token//,/ } )
- ;;
- (--add-to-rvm-group)
- export rvm_add_users_to_rvm_group="$1"
- shift
- ;;
- (help)
- usage
- exit 0
- ;;
- (*)
- usage
- exit 1
- ;;
- esac
- done
- if (( ${#install_gems[@]} > 0 && ${#install_rubies[@]} == 0 ))
- then install_rubies=( ruby )
- fi
- true "${version:=head}"
- true "${branch:=master}"
- if [[ -z "${sources[@]}" ]]
- then sources=("${DEFAULT_SOURCES[@]}")
- fi
- rvm_src_path="$rvm_path/src"
- rvm_archives_path="$rvm_path/archives"
- rvm_releases_url="https://rvm.io/releases"
- }
- rvm_install_validate_rvm_path()
- {
- case "$rvm_path" in
- (*[[:space:]]*)
- printf "%b" "
- It looks you are one of the happy *space* users (in home dir name),
- RVM is not yet fully ready for it, use this trick to fix it:
- sudo mkdir -p /${USER// /_}.rvm
- sudo chown -R \"$USER:\" /${USER// /_}.rvm
- echo \"export rvm_path=/${USER// /_}.rvm\" >> \"$HOME/.rvmrc\"
- and start installing again.
- "
- exit 2
- ;;
- (/usr/share/ruby-rvm)
- printf "%b" "
- It looks you are one of the happy Ubuntu users,
- RVM packaged by Ubuntu is old and broken,
- follow this link for details how to fix:
- https://stackoverflow.com/a/9056395/497756
- "
- [[ "${rvm_uses_broken_ubuntu_path:-no}" == "yes" ]] || exit 3
- ;;
- esac
- if [[ "$rvm_path" != "/"* ]]
- then fail "The rvm install path must be fully qualified. Tried $rvm_path"
- fi
- }
- rvm_install_validate_volume_mount_mode()
- {
- \typeset path partition test_exec
- path=$rvm_path
- # Directory $rvm_path might not exists at this point so we need to traverse the tree upwards
- while [[ -n "$path" ]]
- do
- if [[ -d $path ]]
- then
- partition=`df -P $path | awk 'END{print $1}'`
- test_exec=$(mktemp $path/rvm-exec-test.XXXXXX)
- echo '#!/bin/sh' > "$test_exec"
- chmod +x "$test_exec"
- if ! "$test_exec"
- then
- rm -f "$test_exec"
- printf "%b" "
- It looks that scripts located in ${path}, which would be RVM destination ${rvm_path},
- are not executable. One of the reasons might be that partition ${partition} holding this location
- is mounted in *noexec* mode, which prevents RVM from working correctly. Please verify your setup
- and re-mount partition ${partition} without the noexec option."
- exit 2
- fi
- rm -f "$test_exec"
- break
- fi
- path=${path%/*}
- done
- }
- rvm_install_select_and_get_version()
- {
- typeset dir _version_release _version
- for dir in "$rvm_src_path" "$rvm_archives_path"
- do
- [[ -d "$dir" ]] || mkdir -p "$dir"
- done
- _version_release="${version}"
- case "${version}" in
- (head)
- _version_release="${branch}"
- install_head sources[@] ${branch:-master}
- ;;
- (latest)
- _version=$(fetch_version sources[@])
- install_release sources[@] "$_version"
- ;;
- (latest-minor)
- version="$(<"$rvm_path/VERSION")"
- _version=$(fetch_version sources[@] ${version%.*})
- install_release sources[@] "$_version"
- ;;
- (latest-*)
- _version=$(fetch_version sources[@] ${version#latest-})
- install_release sources[@] "$_version"
- ;;
- (+([[:digit:]]).+([[:digit:]]).+([[:digit:]])) # x.y.z
- install_release sources[@] ${version}
- ;;
- (*)
- fail "Something went wrong, unrecognized version '$version'"
- ;;
- esac
- echo "${_version_release}" > "$rvm_path/RELEASE"
- }
- rvm_install_main()
- {
- [[ -f ./scripts/install ]] ||
- {
- log "'./scripts/install' can not be found for installation, something went wrong, it usually means your 'tar' is broken, please report it here: https://github.com/rvm/rvm/issues"
- return 127
- }
- # required flag - path to install
- flags+=( --path "$rvm_path" )
- \command bash "${flags[@]}"
- }
- rvm_install_ruby_and_gems()
- (
- if
- (( ${#install_rubies[@]} > 0 ))
- then
- source ${rvm_scripts_path:-${rvm_path}/scripts}/rvm
- source ${rvm_scripts_path:-${rvm_path}/scripts}/functions/version
- __rvm_print_headline
- for _ruby in ${install_rubies[@]}
- do command rvm "${forwarded_flags[@]}" install ${_ruby}
- done
- # set the first one as default, skip rest
- for _ruby in ${install_rubies[@]}
- do
- rvm "${forwarded_flags[@]}" alias create default ${_ruby}
- break
- done
- for _gem in ${install_gems[@]}
- do rvm "${forwarded_flags[@]}" all do gem install ${_gem}
- done
- printf "%b" "
- * To start using RVM you need to run \`source $rvm_path/scripts/rvm\`
- in all your open shell windows, in rare cases you need to reopen all shell windows.
- "
- if
- [[ "${install_gems[*]}" == *"rails"* ]]
- then
- printf "%b" "
- * To start using rails you need to run \`rails new <project_dir>\`.
- "
- fi
- fi
- )
- rvm_install()
- {
- rvm_install_initialize
- rvm_install_commands_setup
- rvm_install_default_settings
- rvm_install_parse_params "$@"
- rvm_install_validate_rvm_path
- rvm_install_validate_volume_mount_mode
- rvm_install_select_and_get_version
- rvm_install_main
- rvm_install_ruby_and_gems
- }
- rvm_install "$@"
|