133 lines
3.3 KiB
Bash
133 lines
3.3 KiB
Bash
#!/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 |