Skip to content

Instantly share code, notes, and snippets.

@Sutto
Created August 16, 2010 10:08
Show Gist options
  • Save Sutto/526731 to your computer and use it in GitHub Desktop.
Save Sutto/526731 to your computer and use it in GitHub Desktop.
#!/usr/bin/env bash
__rvm_system_wide_permissions() {
[[ -z "$1" ]] && return 1
chown -R root:"$rvm_group_name" "$1"
chmod -R g+w "$1"
[[ -d "$1" ]] && find "$1" -type d -exec chmod g+s '{}' +
}
# Require root to install it.
if [[ "$(whoami)" != "root" ]]; then
echo "Please rerun this installer as root." >&2
exit 1
# Check for the presence of git.
elif ! command -v git >/dev/null 2>&1 ; then
echo "Please ensure git is installed and available in PATH to continue." >&2
exit 1
elif [[ "$(uname)" != "Linux" ]]; then
echo "The rvm system wide installer is currently Linux only." >&2
exit 1
fi
# Load the rvm config.
if [[ -z "$rvm_ignore_rvmrc" ]]; then
[[ -s /etc/rvmrc ]] && source /etc/rvmrc
[[ -s "$HOME/.rvmrc" ]] && source "$HOME/.rvmrc"
fi
rvm_path="${rvm_path:-"/usr/local/rvm"}"
export rvm_selfcontained=0
rvm_group_name="${rvm_group_name:-"rvm"}"
if cat /etc/group | cut -d: -f1 | grep -q "^${rvm_group_name}$"; then
echo "Group exists, proceeding with installation."
else
echo "Creating the group '$rvm_group_name'"
groupadd -f "$rvm_group_name"
fi
echo "Adding $(whoami) the '$rvm_group_name'"
usermod -a -G "$rvm_group_name" "$(whoami)"
echo "Creating the destination dir and making sure the permissions are correct"
mkdir -p "$rvm_path"
__rvm_system_wide_permissions "$rvm_path"
mkdir -p "$rvm_path/src/"
builtin cd "$rvm_path/src"
rm -rf ./rvm/
git clone --depth 1 git://github.com/wayneeseguin/rvm.git || git clone http://github.com/wayneeseguin/rvm.git
builtin cd rvm
echo "Running the install script."
bash ./scripts/install "$@"
__rvm_system_wide_permissions "$rvm_path"
echo "Setting up group permissions"
rvm_parent_dir="$(dirname "$rvm_path")"
for dir in bin share/man; do
__rvm_system_wide_permissions "$rvm_parent_dir/$dir"
done; unset dir
echo "Generating system wide rvmrc"
rm -f /etc/rvmrc
touch /etc/rvmrc
cat > /etc/rvmrc <<END_OF_RVMRC
# Setup default configuration for rvm.
umask g+w
export rvm_selfcontained=0
export rvm_prefix="$rvm_parent_dir/"
END_OF_RVMRC
echo "Generating $rvm_parent_dir/lib/rvm to load rvm"
rm -f "$rvm_parent_dir/lib/rvm"
touch "$rvm_parent_dir/lib/rvm"
cat > "$rvm_parent_dir/lib/rvm" <<END_OF_RVM_SH
# Automatically source rvm
if [[ -s "\$HOME/.rvm/scripts/rvm" ]]; then
source "\$HOME/.rvm/scripts/rvm"
elif [[ -s "/usr/local/rvm/scripts/rvm" ]]; then
source "/usr/local/rvm/scripts/rvm"
fi
END_OF_RVM_SH
echo "Correct permissions on rvmrc and the rvm loader"
# Finally, ensure the rvmrc is owned by the group.
for file in /etc/rvmrc "$rvm_parent_dir/lib/rvm" ; do
__rvm_system_wide_permissions "$file"
done; unset file
echo "RVM is now installed. To use, source '$rvm_parent_dir/lib/rvm' to your shell profile."
unset rvm_parent_dir
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment