#!/usr/bin/env bash
requirements_centos_lib_installed()
{
rpm -q --whatprovides "$1" >/dev/null || return $?
}
requirements_centos_lib_available()
{
yum list --cacheonly --quiet "$1" >/dev/null 2>&1 || return $?
}
# required only for libyaml-devel check as fedora is broken ...
requirements_centos_lib_available_no_caching()
{
yum list --quiet "$1" >/dev/null 2>&1 || return $?
}
requirements_centos_version_list()
{
rpm -q --whatprovides "$1" | sed -e "s#^$1-##"
}
requirements_centos_install_custom()
{
requirements_rvm_pkg_libs_install "$@" || return $?
}
requirements_centos_libs_install()
{
__rvm_try_sudo yum install -y "$@" || return $?
}
requirements_centos_before_update_check_repos_missing_error()
{
rvm_error "There is no '$*' package available for installation and RVM does not know how to make that happen,
please tell us how to install '$*' on '${_system_name}-${_system_version}' here: https://github.com/rvm/rvm/issues"
return 49
}
requirements_centos_before_update_check_rhn_channel()
{
__rvm_try_sudo rhn-channel -l | grep optional >/dev/null ||
{
\typeset __package_name="$(
__rvm_try_sudo rhn-channel -l |
awk '/^rhel-'"${_system_arch}"'-(server|client|workstation)-[0-9]+$/{print gensub(/(-[0-9]+)$/, "-optional\\1", "g")}'
)"
rvm_log "Enabling optional repository"
rvm_requiremnts_fail_or_run_action 2 \
"It is not possible to enable optional repository for $*, enable it using: rhn-channel -a -c ${__package_name}" \
__rvm_try_sudo rhn-channel -a -c "${__package_name}" ||
return $?
}
}
requirements_centos_before_install_epel()
{
"${rvm_scripts_path}/fetch" "${epel_key}"
"${rvm_scripts_path}/fetch" "${epel_rpm}"
__rvm_try_sudo rpm --import "${rvm_archives_path}/${epel_key##*/}"
__rvm_try_sudo rpm --quiet -i "${rvm_archives_path}/${epel_rpm##*/}" ||
{
\typeset __ret=$?
rvm_error "Error installing EPEL, it is required for libyaml-devel,
either there was an error installing EPEL package,
or there was problem checking if libyaml-devel is available / installed."
return ${__ret}
}
}
requirements_centos_before_update_check_epel()
{
[[ " $* " == *" libyaml-devel "* ]] || return 0
# if you change this, change the scripts/functions/pkg version too
[[ -f /etc/yum.repos.d/epel.repo ]] ||
{
\typeset version="${_system_version%%.*}"
__rvm_db "epel${version}_key" "epel_key"
__rvm_db "epel${version}_${_system_arch}_rpm" "epel_rpm"
if
[[ -z "$epel_rpm" || -z "$epel_key" ]]
then
requirements_centos_before_update_check_repos_missing_error $* || return $?
fi
rvm_requiremnts_fail_or_run_action 2 \
"It is not possible to install EPEL repository for YAML, install it using: $epel_rpm" \
__rvm_log_command centos_install_epel "Installing EPEL repository" requirements_centos_before_install_epel ||
return $?
}
}
# return 0 when found missing packages
# return >0 when no missing packages
requirements_centos_before_update_check_missing_packages()
{
\typeset -a __packages_to_check
\typeset __package_name
case "${_system_name_lowercase}" in
(redhat)
__packages_to_check=( libyaml-devel libffi-devel )
;;
(centos)
__packages_to_check=( libyaml-devel )
;;
(*)
return 1
;;
esac
__missing_packages=()
for __package_name in "${__packages_to_check[@]}"
do
if
[[ " ${packages_to_install[*]} " == *" ${__package_name} "* ]] &&
! requirements_centos_lib_installed "${__package_name}" &&
! requirements_centos_lib_available_no_caching "${__package_name}"
then
__missing_packages+=( "${__package_name}" )
fi
done
[[ ${#__missing_packages[*]} -gt 0 ]] || return 2
}
requirements_centos_before_update_check_repos()
{
\typeset -a __missing_packages
requirements_centos_before_update_check_missing_packages || return 0
case "${_system_name_lowercase}" in
(redhat)
requirements_centos_before_update_check_rhn_channel "${__missing_packages[@]}" || return $?
;;
(centos)
requirements_centos_before_update_check_epel "${__missing_packages[@]}" || return $?
;;
(*)
requirements_centos_before_update_check_repos_missing_error "${__missing_packages[@]}" || return $?
;;
esac
}
requirements_centos_before_update()
{
case "$1" in
(ruby-1*)
requirements_centos_before_update_check_repos || return $?
;;
esac
}
requirements_centos_check_binary()
{
{
__rvm_which update-alternatives >/dev/null &&
update-alternatives --display "$1" >/dev/null 2>&1
} ||
__rvm_which "$1" >/dev/null || return $?
}
requirements_centos_define_glibc()
{
requirements_check glibc-headers glibc-devel
}
requirements_centos_define_libyaml()
{
case "$1" in
(ruby-1*) requirements_check libyaml-devel ;;
esac
}
requirements_centos_define_openssl()
{
requirements_check openssl-devel
}
requirements_centos_define()
{
case "$1" in
(rvm)
requirements_check bash curl patch
;;
(jruby*)
requirements_check make
if
is_head_or_disable_binary "$1"
then
requirements_centos_check_binary javac ||
requirements_check_fallback java-1.8.0-openjdk-devel java-devel ||
requirements_check_fallback java-1.7.0-openjdk-devel java-devel
requirements_check git
case $( jruby_installation_method "$1" ) in
mvn) requirements_check_custom_after mvn=maven ;;
esac
else
requirements_centos_check_binary java ||
requirements_check_fallback java-1.8.0-openjdk java ||
requirements_check_fallback java-1.7.0-openjdk java
fi
;;
(rbx*|rubinius*)
requirements_check automake bison clang-3.6 flex gdbm-devel git libyaml-devel llvm-devel llvm-static \
make ncurses-devel openssl-devel readline-devel ruby-devel rubygems zlib-devel
;;
(truffleruby*)
requirements_check zlib-devel make gcc libxml2
requirements_${_system_name_lowercase}_define_openssl $1
;;
(ir*)
true # not that easy
;;
(opal)
true # not that easy
;;
(*-head)
requirements_check git
requirements_centos_define "${1%-head}"
requirements_version_minimal autoconf 2.67
;;
(*)
if [[ ${#rvm_patch_names[@]} -gt 0 ]]
then requirements_version_minimal autoconf 2.67
fi
requirements_check autoconf automake bison bzip2 gcc-c++ libffi-devel libtool make patch readline \
readline-devel ruby sqlite-devel zlib zlib-devel
requirements_${_system_name_lowercase}_define_glibc $1
requirements_${_system_name_lowercase}_define_libyaml $1
requirements_${_system_name_lowercase}_define_openssl $1
;;
esac
}