Add install-ruby-rvm.sh
This commit is contained in:
133
install-ruby-rvm.sh
Normal file
133
install-ruby-rvm.sh
Normal file
@@ -0,0 +1,133 @@
|
||||
#!/usr/bin/env bash
|
||||
# Recompile Openssl 1.1.1w on RHEL9+ and install Old Rubies
|
||||
# Mateusz Gruszczyński @linuxiarz.pl
|
||||
|
||||
set -eo pipefail
|
||||
|
||||
OPENSSL_VERSION="1.1.1w"
|
||||
OPENSSL_PREFIX="/opt/openssl111"
|
||||
SRC_DIR="/usr/local/src"
|
||||
|
||||
if [ "${EUID}" -ne 0 ]; then
|
||||
echo "ERROR: run this script as root"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ $# -ne 1 ]; then
|
||||
echo "Usage: $0 2.7.X"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
RUBY_VERSION="$1"
|
||||
|
||||
if [[ ! "${RUBY_VERSION}" =~ ^2\.7\.[0-9]+$ ]]; then
|
||||
echo "ERROR: only Ruby 2.7.X is allowed"
|
||||
echo "Example: $0 2.7.8"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
load_rvm() {
|
||||
if [ -s /etc/profile.d/rvm.sh ]; then
|
||||
. /etc/profile.d/rvm.sh
|
||||
elif [ -s /usr/local/rvm/scripts/rvm ]; then
|
||||
. /usr/local/rvm/scripts/rvm
|
||||
elif [ -s /root/.rvm/scripts/rvm ]; then
|
||||
. /root/.rvm/scripts/rvm
|
||||
else
|
||||
echo "ERROR: RVM was not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! command -v rvm >/dev/null 2>&1; then
|
||||
echo "ERROR: RVM is not available in this shell"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
ruby_already_installed() {
|
||||
if command -v ruby >/dev/null 2>&1; then
|
||||
current_ruby_version="$(ruby -e 'print RUBY_VERSION' 2>/dev/null || true)"
|
||||
if [ "${current_ruby_version}" = "${RUBY_VERSION}" ]; then
|
||||
echo "Ruby ${RUBY_VERSION} is already available in PATH"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
if rvm list strings | grep -Fxq "ruby-${RUBY_VERSION}"; then
|
||||
echo "Ruby ${RUBY_VERSION} is already installed in RVM"
|
||||
return 0
|
||||
fi
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
install_build_dependencies() {
|
||||
echo "[1/6] Installing build dependencies"
|
||||
dnf groupinstall -y "Development Tools"
|
||||
dnf install -y \
|
||||
curl tar xz bzip2 git perl-core pkgconfig \
|
||||
zlib-devel readline-devel libyaml-devel libffi-devel \
|
||||
gdbm-devel ncurses-devel gmp-devel autoconf automake libtool bison
|
||||
}
|
||||
|
||||
install_openssl() {
|
||||
echo "[2/6] Preparing OpenSSL ${OPENSSL_VERSION}"
|
||||
mkdir -p "${SRC_DIR}"
|
||||
mkdir -p "${OPENSSL_PREFIX}"
|
||||
cd "${SRC_DIR}"
|
||||
|
||||
if [ ! -f "openssl-${OPENSSL_VERSION}.tar.gz" ]; then
|
||||
curl -fLO "https://www.openssl.org/source/old/1.1.1/openssl-${OPENSSL_VERSION}.tar.gz"
|
||||
fi
|
||||
|
||||
rm -rf "openssl-${OPENSSL_VERSION}"
|
||||
tar xf "openssl-${OPENSSL_VERSION}.tar.gz"
|
||||
cd "openssl-${OPENSSL_VERSION}"
|
||||
|
||||
echo "[3/6] Building OpenSSL into ${OPENSSL_PREFIX}"
|
||||
./config \
|
||||
--prefix="${OPENSSL_PREFIX}" \
|
||||
--openssldir="${OPENSSL_PREFIX}" \
|
||||
shared zlib
|
||||
|
||||
make -j"$(nproc)"
|
||||
rm -rf "${OPENSSL_PREFIX:?}/"*
|
||||
make install_sw
|
||||
}
|
||||
|
||||
install_ruby_with_rvm() {
|
||||
echo "[4/6] Configuring RVM build environment"
|
||||
rvm autolibs disable
|
||||
|
||||
export CPPFLAGS="-I${OPENSSL_PREFIX}/include"
|
||||
export CFLAGS="-I${OPENSSL_PREFIX}/include"
|
||||
export LDFLAGS="-L${OPENSSL_PREFIX}/lib -Wl,-rpath,${OPENSSL_PREFIX}/lib"
|
||||
export PKG_CONFIG_PATH="${OPENSSL_PREFIX}/lib/pkgconfig"
|
||||
export RUBY_CONFIGURE_OPTS="--with-openssl-dir=${OPENSSL_PREFIX}"
|
||||
|
||||
echo "[5/6] Installing Ruby ${RUBY_VERSION} with RVM"
|
||||
rvm install "${RUBY_VERSION}" --with-openssl-dir="${OPENSSL_PREFIX}"
|
||||
}
|
||||
|
||||
verify_installation() {
|
||||
echo "[6/6] Verifying installation"
|
||||
rvm use "${RUBY_VERSION}" >/dev/null
|
||||
|
||||
installed_ruby_version="$(ruby -e 'print RUBY_VERSION')"
|
||||
installed_openssl_version="$(ruby -ropenssl -e 'print OpenSSL::OPENSSL_VERSION')"
|
||||
|
||||
echo "Installed Ruby version: ${installed_ruby_version}"
|
||||
echo "Linked OpenSSL version: ${installed_openssl_version}"
|
||||
}
|
||||
|
||||
load_rvm
|
||||
|
||||
if ruby_already_installed; then
|
||||
echo "Nothing to do"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
install_build_dependencies
|
||||
install_openssl
|
||||
install_ruby_with_rvm
|
||||
verify_installation
|
||||
Reference in New Issue
Block a user