1
0
mirror of https://github.com/OpenNebula/one.git synced 2024-12-22 13:33:52 +03:00
one/share/install_gems/install_gems
Ruben S. Montero ee4d01575e
M #⨪: Do not abort install gems if unkown platform
This helps for non supported distributions that may install build
dependencies manually
2023-06-28 12:27:50 +02:00

131 lines
4.2 KiB
Bash
Executable File

#!/bin/bash
# -------------------------------------------------------------------------- #
# Copyright 2002-2023, OpenNebula Project, OpenNebula Systems #
# #
# Licensed under the Apache License, Version 2.0 (the "License"); you may #
# not use this file except in compliance with the License. You may obtain #
# a copy of the License at #
# #
# http://www.apache.org/licenses/LICENSE-2.0 #
# #
# Unless required by applicable law or agreed to in writing, software #
# distributed under the License is distributed on an "AS IS" BASIS, #
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
# See the License for the specific language governing permissions and #
# limitations under the License. #
#--------------------------------------------------------------------------- #
set -e -o pipefail
if [ $# -gt 0 ] && [ "$*" != '--yes' ]; then
echo "Syntax: TARGET=[debian|redhat] $(basename "$0") [--yes]" >&2
exit 1
fi
# Detect packaged gems and show a warning message
GEMS_LOCATION='/usr/share/one/gems'
if [ -d "$GEMS_LOCATION" ]; then
cat << EOF >&2
WARNING: Running install_gems is not necessary anymore, as all the
required dependencies are already installed by your packaging
system into symlinked location $GEMS_LOCATION. Ruby gems
installed by this script won't be used until this symlink exists.
Remove the symlink before starting the OpenNebula services
to use Ruby gems installed by this script. E.g. execute
# unlink $GEMS_LOCATION
Execution continues in 15 seconds ...
EOF
sleep 15
echo
fi
# detect target
if command -v dpkg >/dev/null; then
TARGET=${TARGET:-debian}
elif command -v rpm >/dev/null; then
TARGET=${TARGET:-redhat}
fi
# Install packages
case "${TARGET}" in
'debian')
echo "* Install Build Dependencies for ${TARGET}"
export DEBIAN_FRONTEND=noninteractive
apt-get update >/dev/null
apt-get -y install \
ruby-dev make gcc libsqlite3-dev libcurl4-openssl-dev \
rake libxml2-dev libxslt1-dev patch g++ build-essential \
libssl-dev libaugeas-dev \
postgresql-server-dev-all \
>/dev/null
# default-libmysqlclient-dev OR libmysqlclient-dev
apt-get -y install default-libmysqlclient-dev >/dev/null 2>&1 || \
apt-get -y install libmysqlclient-dev >/dev/null
# workaround missing libxml2 headers on some Ubuntu/Debian
ln -s /usr/include/libxml2/libxml /usr/include/libxml || :
;;
'redhat')
echo "* Install Build Dependencies for ${TARGET}"
yum -y install ruby-devel make gcc sqlite-devel mysql-devel \
openssl-devel curl-devel rubygem-rake libxml2-devel \
libxslt-devel patch expat-devel gcc-c++ rpm-build augeas-devel \
postgresql-devel rubygems \
>/dev/null
;;
*)
echo "Unknown target ${TARGET}. Skipping build dependencies" >&2
;;
esac
# Install Bundler
if ! command -v bundler >/dev/null; then
echo '* Install Bundler'
for VERSION in '' '~>2' '<2'; do
if [ -z "$VERSION" ]; then
if gem install bundler >/dev/null 2>&1; then
break
fi
else
if gem install bundler --version "$VERSION" >/dev/null 2>&1; then
break
fi
fi
done
if ! command -v bundler >/dev/null; then
echo "ERROR: Failed to install Bundler" >&2
exit 1
fi
fi
# Find Gemfile location and pass to Bundler
echo '* Install Gem Dependencies'
for GEMFILE in \
"${PWD}/Gemfile" \
"${ONE_LOCATION}/share/Gemfile" \
"/usr/share/one/Gemfile"
do
if [ -f "${GEMFILE}" ]; then
bundle install --system --gemfile="${GEMFILE}"
echo 'Successfully done!'
exit 0
fi
done
# Fail if no Gemfile found
echo "ERROR: No Gemfile found" >&2
exit 1