Merge 'dist/offline_installer/redhat: fix umask error' from Takuya ASADA

Since makeself script changes current umask, scylla_setup causes
"scylla does not work with current umask setting (0077)" error.
To fix that we need use latest version of makeself, and specfiy --keep-umask
option.

Fixes #6243

Closes #6244

* github.com:scylladb/scylla:
  dist/offline_redhat: fix umask error
  dist/offline_installer/redhat: support cross build

(cherry picked from commit bb202db1ff)
This commit is contained in:
Avi Kivity
2021-01-31 18:47:12 +02:00
committed by Pekka Enberg
parent fd868722dd
commit 2500dd1dc4
6 changed files with 93 additions and 37 deletions

View File

@@ -26,26 +26,31 @@ fi
print_usage() {
echo "build_offline_installer.sh --repo [URL]"
echo " --repo repository for fetching scylla rpm, specify .repo file URL"
echo " --releasever use specific minor version of the distribution repo (ex: 7.4)"
echo " --image [IMAGE] Use the specified docker IMAGE"
echo " --no-docker Build offline installer without using docker"
exit 1
}
is_rhel7_variant() {
[ "$ID" = "rhel" -o "$ID" = "ol" -o "$ID" = "centos" ] && [[ "$VERSION_ID" =~ ^7 ]]
}
here="$(realpath $(dirname "$0"))"
releasever=`rpm -q --provides $(rpm -q --whatprovides "system-release(releasever)") | grep "system-release(releasever)"| uniq | cut -d ' ' -f 3`
REPO=
RELEASEVER=
IMAGE=docker.io/centos:7
NO_DOCKER=false
while [ $# -gt 0 ]; do
case "$1" in
"--repo")
REPO=$2
shift 2
;;
"--releasever")
RELEASEVER=$2
"--image")
IMAGE=$2
shift 2
;;
"--no-docker")
NO_DOCKER=true
shift 1
;;
*)
print_usage
;;
@@ -59,25 +64,17 @@ if [ -z $REPO ]; then
exit 1
fi
if ! is_rhel7_variant; then
echo "Unsupported distribution"
exit 1
fi
if [ "$ID" = "centos" ]; then
if [ ! -f /etc/yum.repos.d/epel.repo ]; then
sudo yum install -y epel-release
if ! $NO_DOCKER; then
if [[ -f ~/.config/scylladb/dbuild ]]; then
. ~/.config/scylladb/dbuild
fi
RELEASE=7
else
if [ ! -f /etc/yum.repos.d/epel.repo ]; then
sudo rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
if which docker >/dev/null 2>&1 ; then
tool=${DBUILD_TOOL-docker}
elif which podman >/dev/null 2>&1 ; then
tool=${DBUILD_TOOL-podman}
else
echo "Please make sure you install either podman or docker on this machine to run dbuild" && exit 1
fi
RELEASE=7Server
fi
if [ ! -f /usr/bin/yumdownloader ]; then
sudo yum -y install yum-utils
fi
if [ ! -f /usr/bin/wget ]; then
@@ -85,29 +82,55 @@ if [ ! -f /usr/bin/wget ]; then
fi
if [ ! -f /usr/bin/makeself ]; then
sudo yum -y install makeself
if $NO_DOCKER; then
# makeself on EPEL7 is too old, borrow it from EPEL8
# since there is no dependency on the package, it just work
if [ $release_major = '7' ]; then
sudo rpm --import https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-8
sudo cp "$here"/lib/epel8.repo /etc/yum.repos.d/
YUM_OPTS="--enablerepo=epel8"
elif [ $release_major = '8' ]; then
yum -y install epel-release || yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
fi
fi
sudo yum -y install "$YUM_OPTS" makeself
fi
if [ ! -f /usr/bin/createrepo ]; then
sudo yum -y install createrepo
fi
sudo yum -y install yum-plugin-downloadonly
makeself_ver=$(makeself --version|cut -d ' ' -f 3|sed -e 's/\.//g')
if [ $makeself_ver -lt 240 ]; then
echo "$(makeself --version) is too old, please install 2.4.0 or later"
exit 1
fi
cd /etc/yum.repos.d/
sudo wget -N $REPO
cd -
sudo rm -rf build/installroot build/offline_installer build/scylla_offline_installer.sh
sudo rm -rf build/installroot build/offline_docker build/offline_installer build/scylla_offline_installer.sh
mkdir -p build/installroot
mkdir -p build/installroot/etc/yum/vars
sudo sh -c "echo $RELEASE >> build/installroot/etc/yum/vars/releasever"
mkdir -p build/offline_docker
wget "$REPO" -O build/offline_docker/scylla.repo
cp "$here"/lib/install_deps.sh build/offline_docker
cp "$here"/lib/Dockerfile.in build/offline_docker/Dockerfile
sed -i -e "s#@@IMAGE@@#$IMAGE#" build/offline_docker/Dockerfile
cd build/offline_docker
if $NO_DOCKER; then
sudo cp scylla.repo /etc/yum.repos.d/scylla.repo
sudo ./install_deps.sh
else
image_id=$($tool build -q .)
fi
cd -
mkdir -p build/offline_installer
cp dist/offline_installer/redhat/header build/offline_installer
if [ -n "$RELEASEVER" ]; then
YUMOPTS="--releasever=$RELEASEVER"
cp "$here"/lib/header build/offline_installer
if $NO_DOCKER; then
"$here"/lib/construct_offline_repo.sh
else
./tools/toolchain/dbuild --image "$image_id" -- "$here"/lib/construct_offline_repo.sh
fi
sudo yum -y install $YUMOPTS --downloadonly --installroot=`pwd`/build/installroot --downloaddir=build/offline_installer scylla sudo ntp ntpdate net-tools kernel-tools
(cd build/offline_installer; createrepo -v .)
(cd build; makeself offline_installer scylla_offline_installer.sh "Scylla offline package" ./header)
(cd build; makeself --keep-umask offline_installer scylla_offline_installer.sh "Scylla offline package" ./header)

View File

@@ -0,0 +1,5 @@
FROM @@IMAGE@@
ADD install_deps.sh install_deps.sh
RUN ./install_deps.sh
ADD scylla.repo /etc/yum.repos.d/scylla.repo
CMD /bin/bash

View File

@@ -0,0 +1,9 @@
#!/bin/bash -e
releasever=`rpm -q --provides $(rpm -q --whatprovides "system-release(releasever)") | grep "system-release(releasever)"| uniq | cut -d ' ' -f 3`
# Can ignore error since we only needed when files exists
cp /etc/yum/vars/* build/installroot/etc/yum/vars/ ||:
# run yum in non-root mode using fakeroot
fakeroot yum -y install --downloadonly --releasever="$releasever" --installroot=`pwd`/build/installroot --downloaddir=build/offline_installer scylla sudo chrony net-tools kernel-tools mdadm xfsprogs

View File

@@ -0,0 +1,7 @@
[epel8]
name=Extra Packages for Enterprise Linux 8 - $basearch
#baseurl=https://download.fedoraproject.org/pub/epel/8/Everything/$basearch
metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-8&arch=$basearch&infra=$infra&content=$contentdir
enabled=0
gpgcheck=1
countme=1

View File

@@ -0,0 +1,12 @@
#!/bin/bash
. /etc/os-release
release_major=$(echo $VERSION_ID|sed -e 's/^\([0-9]*\)[^0-9]*.*/\1/')
if [ ! -f /etc/yum.repos.d/epel.repo ]; then
yum -y install epel-release || yum -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-"$release_major".noarch.rpm
fi
if [ ! -f /usr/bin/fakeroot ]; then
yum -y install fakeroot
fi