Add install-ruby-rvm.sh

This commit is contained in:
gru
2026-04-08 15:28:23 +02:00
parent e236a13e8a
commit e67eb26110

133
install-ruby-rvm.sh Normal file
View 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