gitlab-build-images/scripts/install-chrome
Balasankar "Balu" C 7bb4094eb2
Support building google-chrome in UBI
Signed-off-by: Balasankar "Balu" C <balasankar@gitlab.com>
2022-08-05 15:32:08 +05:30

153 lines
5.6 KiB
Bash
Executable file

#!/bin/bash
set -xeuo pipefail
IFS=$'\n\t'
CHROME_VERSION=${1:-99.0.4844.74-1}
# We hard code the URL rather than using $CI_API_V4_URL $CI_PROJECT_ID,
# because we would need to forward those variables
CHROME_DOWNLOAD_URL_BASE="https://gitlab.com/api/v4/projects/1075790/packages/generic/google-chrome-stable"
function build_debian() {
if [[ $(dpkg --print-architecture) == arm64 ]]; then
echo "The arm64 does not have prebuilt chrome. Using chromium instead."
apt-get update -q -y
apt-get install -y chromium chromium-driver
apt-get autoremove -yq
apt-get clean -yqq
rm -rf /var/lib/apt/lists/*
exit 0
fi
export DEBIAN_FRONTEND=noninteractive
curl -sS -L https://dl.google.com/linux/linux_signing_key.pub | apt-key add -
echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >/etc/apt/sources.list.d/google.list
apt-get update -q -y
# Download from our package registry if we can't find the package in the apt repository
echo "Searching for $CHROME_VERSION in apt repository"
CHECK_VERSION=$(apt-cache show google-chrome-stable | grep Version | grep "$CHROME_VERSION") || true
apt-cache policy google-chrome-stable
if [[ -z $CHECK_VERSION ]]; then
CHROME_DEB="google-chrome-stable_${CHROME_VERSION}_$(dpkg --print-architecture).deb"
CHROME_URL="${CHROME_DOWNLOAD_URL_BASE}/${CHROME_VERSION}/${CHROME_DEB}"
echo "Downloading from our Package registry: $CHROME_URL"
curl --silent --show-error --fail -O $CHROME_URL
dpkg -i ./$CHROME_DEB || true
apt-get install -f -y
rm -f $CHROME_DEB
else
echo "Installing via apt-get"
apt-get install -y google-chrome-stable=$CHROME_VERSION
fi
rm -rf /var/lib/apt/lists/*
# Install ChromeDriver
CHROME_VERSION_BASE=$(echo $CHROME_VERSION | awk -F "." '{print $1 "." $2 "." $3}')
CHROME_DRIVER_VERSION=$(curl -q https://chromedriver.storage.googleapis.com/LATEST_RELEASE_$CHROME_VERSION_BASE)
wget -q https://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip
unzip chromedriver_linux64.zip -d /usr/local/bin
rm -f chromedriver_linux64.zip
apt-get autoremove -yq
apt-get clean -yqq
rm -rf /var/lib/apt/lists/*
rm -rf /etc/apt/sources.list.d/google*.list
}
function build_ubi() {
UBI_VERSION=$(lsb_release -a | awk '/Release/ { print $2 }')
UBI_MAJOR_VERSION=${UBI_VERSION%.*} # strip last component
# Dependencies are spread across epel and CentOS 8 repos. So we temporarily
# enable them.
# The awk is below to strip leading and trailing spaces in the
# repo file which can cause yum to blow up
{ awk '{$1=$1};1' | tee -a /etc/yum.repos.d/centos.repo; } <<- EOM
[centos-appstream]
name=CentOS-${UBI_MAJOR_VERSION}- AppStream
baseurl=http://vault.centos.org/centos/8/AppStream/x86_64/os/
gpgcheck=0
enabled=1
[centos-baseos]
name=CentOS-${UBI_MAJOR_VERSION}- BaseOS
baseurl=http://vault.centos.org/centos/8/BaseOS/x86_64/os
gpgcheck=0
enabled=1
EOM
yum -y install "https://dl.fedoraproject.org/pub/epel/epel-release-latest-${UBI_MAJOR_VERSION}.noarch.rpm"
if [[ ${BUILD_ARCH} == "arm64" ]]; then
echo "The arm64 does not have prebuilt chrome. Using chromium instead."
yum update -y
yum install -y chromium chromedriver
yum autoremove -y
yum clean -y all
rm -rf /etc/yum.repos.d/centos.repo
yum remove -y epel-release
exit 0
fi
{ awk '{$1=$1};1' | tee -a /etc/yum.repos.d/google-chrome.repo; } <<- EOM
[google-chrome]
name=Google Chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$(arch)
enabled=1
gpgcheck=1
repo_gpgcheck=0
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
EOM
yum update -y
LATEST_VERSION_STRING=$(yum info google-chrome-stable | awk '/Version/ { print $NF}')
LATEST_RELEASE_STRING=$(yum info google-chrome-stable | awk '/Release/ { print $NF}')
LATEST_VERSION="${LATEST_VERSION_STRING}-${LATEST_RELEASE_STRING}"
# Download from our package registry if we can't find the package in the apt repository
echo "Searching for $CHROME_VERSION in apt repository"
if [[ $LATEST_VERSION != ${CHROME_VERSION} ]]; then
CHROME_RPM="google-chrome-stable-${CHROME_VERSION}.$(arch).rpm"
CHROME_URL="${CHROME_DOWNLOAD_URL_BASE}/${CHROME_VERSION}/${CHROME_RPM}"
echo "Downloading from our Package registry: $CHROME_URL"
curl --silent --show-error --fail -O $CHROME_URL
yum install -y ./${CHROME_RPM} || true
rm -f $CHROME_RPM
else
echo "Installing via apt-get"
yum install -y google-chrome-stable-$CHROME_VERSION
fi
# Install ChromeDriver
CHROME_VERSION_BASE=$(echo $CHROME_VERSION | awk -F "." '{print $1 "." $2 "." $3}')
CHROME_DRIVER_VERSION=$(curl -q https://chromedriver.storage.googleapis.com/LATEST_RELEASE_$CHROME_VERSION_BASE)
wget -q https://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip
unzip chromedriver_linux64.zip -d /usr/local/bin
rm -f chromedriver_linux64.zip
yum autoremove -y
yum clean -y all
rm -rf /etc/yum.repos.d/centos.repo
rm -rf /etc/yum.repos.d/google-chrome.repo
yum remove -y epel-release
yum update -y --nobest
}
BUILD_OS=${BUILD_OS:-debian}
BUILD_ARCH=${BUILD_ARCH:-amd64}
if [[ $BUILD_OS =~ debian ]]; then
build_debian "$@"
elif [[ $BUILD_OS =~ ubi ]]; then
build_ubi "$@"
fi