e2e7ef98d8
Assuming users will be working with latests versions for RHEL, Centos or Fedora, the requirement for EPEL repo is not longer needed. This requirement was due to argparse not being present in standard repos, something that does not hold anymore. For this reason, this patch set removes the installation of the EPEL repo. On the other hand, this patch set also makes an extra check to use dnf when this script is run on Fedora. Since Fedora 22 dnf has been the default package manager instead of yum. Change-Id: I9fcd47a0bf9302506949fa56efb42b77552710f6 Closes-Bug: #1611527
250 lines
7.5 KiB
Bash
250 lines
7.5 KiB
Bash
#!/bin/bash
|
|
|
|
set -eu
|
|
set -o pipefail
|
|
|
|
SCRIPT_HOME=$(dirname $(readlink -f $0))
|
|
if [ -d $SCRIPT_HOME/../share/manila-elements ]; then
|
|
_PREFIX=$SCRIPT_HOME/../share/manila-elements
|
|
elif [ -d $SCRIPT_HOME/../../../elements ]; then
|
|
_PREFIX=$SCRIPT_HOME/../../..
|
|
else
|
|
_PREFIX=$SCRIPT_HOME/..
|
|
fi
|
|
export ELEMENTS_PATH=$_PREFIX/elements
|
|
|
|
# Detect which image should be created
|
|
# generic - qcow image for VM
|
|
# lxd - tar for LXD
|
|
MANILA_IMAGE_TYPE=${1:-"generic"}
|
|
|
|
if [ "$MANILA_IMAGE_TYPE" != "generic" ] && [ "$MANILA_IMAGE_TYPE" != "lxd" ]; then
|
|
echo -e "Image type $MANILA_IMAGE_TYPE is not supported."
|
|
exit 2
|
|
fi
|
|
|
|
echo
|
|
echo "Build image: $MANILA_IMAGE_TYPE"
|
|
echo
|
|
|
|
# Collect configuration
|
|
# --------------------
|
|
# Development options:
|
|
DIB_UPDATE_REQUESTED=${DIB_UPDATE_REQUESTED:-true}
|
|
USE_OFFLINE_MODE=${USE_OFFLINE_MODE:-"yes"}
|
|
ENABLE_DEBUG_MODE=${ENABLE_DEBUG_MODE:-"no"}
|
|
DISABLE_IMG_COMPRESSION=${DISABLE_IMG_COMPRESSION:-"no"}
|
|
|
|
# Manila user settings
|
|
MANILA_USER=${MANILA_USER:-"manila"}
|
|
MANILA_PASSWORD=${MANILA_PASSWORD:-"manila"}
|
|
MANILA_USER_AUTHORIZED_KEYS="None"
|
|
|
|
# Manila image settings
|
|
MANILA_IMG_ARCH=${MANILA_IMG_ARCH:-"i386"}
|
|
MANILA_IMG_OS=${MANILA_IMG_OS:-"manila-ubuntu-minimal"}
|
|
MANILA_IMG_OS_VER=${MANILA_IMG_OS_VER:-"trusty"}
|
|
MANILA_IMG_NAME=${MANILA_IMG_NAME:-"manila-service-image"}
|
|
MANILA_LXD_METADATA_PACKAGE_NAME=${MANILA_LXD_METADATA_PACKAGE_NAME:-"manila-lxd-meta"}
|
|
|
|
# Manila features
|
|
MANILA_ENABLE_NFS_SUPPORT=${MANILA_ENABLE_NFS_SUPPORT:-"yes"}
|
|
MANILA_ENABLE_CIFS_SUPPORT=${MANILA_ENABLE_CIFS_SUPPORT:-"yes"}
|
|
|
|
# Manila Generic share driver replication feature requires ZFS:
|
|
MANILA_ENABLE_ZFS_SUPPORT=${MANILA_ENABLE_ZFS_SUPPORT:-"no"}
|
|
|
|
# Verify configuration
|
|
# --------------------
|
|
if [ "$MANILA_IMAGE_TYPE" = "lxd" ]; then
|
|
REQUIRED_ELEMENTS="manila-container $MANILA_IMG_OS"
|
|
IMAGE_FORMAT="tar"
|
|
MANILA_ENABLE_ZFS_SUPPORT="no"
|
|
export INSTALL_KERNEL=false
|
|
else
|
|
REQUIRED_ELEMENTS="manila-ssh vm $MANILA_IMG_OS dhcp-all-interfaces"
|
|
IMAGE_FORMAT="qcow2"
|
|
fi
|
|
OPTIONAL_ELEMENTS=
|
|
OPTIONAL_DIB_ARGS=
|
|
|
|
if [ "$MANILA_ENABLE_CIFS_SUPPORT" != "yes" ] && [ "$MANILA_ENABLE_NFS_SUPPORT" != "yes" ]; then
|
|
echo "You should enable NFS or CIFS support for manila image."
|
|
fi
|
|
|
|
if [ "$MANILA_ENABLE_NFS_SUPPORT" = "yes" ]; then
|
|
if [ "$MANILA_IMAGE_TYPE" = "lxd" ]; then
|
|
OPTIONAL_ELEMENTS="$OPTIONAL_ELEMENTS manila-ganesha-nfs manila-unfs3"
|
|
else
|
|
OPTIONAL_ELEMENTS="$OPTIONAL_ELEMENTS manila-nfs"
|
|
fi
|
|
fi
|
|
|
|
if [ "$MANILA_ENABLE_CIFS_SUPPORT" = "yes" ]; then
|
|
OPTIONAL_ELEMENTS="$OPTIONAL_ELEMENTS manila-cifs"
|
|
fi
|
|
|
|
if [ "$MANILA_ENABLE_ZFS_SUPPORT" = "yes" ]; then
|
|
OPTIONAL_ELEMENTS="$OPTIONAL_ELEMENTS manila-zfs"
|
|
fi
|
|
|
|
if [ "$USE_OFFLINE_MODE" = "yes" ]; then
|
|
OPTIONAL_DIB_ARGS="$OPTIONAL_DIB_ARGS -offline"
|
|
fi
|
|
|
|
if [ "$ENABLE_DEBUG_MODE" = "yes" ]; then
|
|
OPTIONAL_DIB_ARGS="$OPTIONAL_DIB_ARGS -x"
|
|
MANILA_USER_AUTHORIZED_KEYS=${MANILA_USER_AUTHORIZED_KEYS:-"$HOME/.ssh/id_rsa.pub"}
|
|
fi
|
|
|
|
if [ "$DISABLE_IMG_COMPRESSION" = "yes" ]; then
|
|
OPTIONAL_DIB_ARGS="$OPTIONAL_DIB_ARGS -u"
|
|
fi
|
|
|
|
# Verify dependencies
|
|
# -------------------
|
|
if [ -e /etc/os-release ]; then
|
|
platform=$(cat /etc/os-release | awk -F= '/^ID=/ {print tolower($2);}')
|
|
# remove eventual quotes around ID=...
|
|
platform=$(echo $platform | sed -e 's,^",,;s,"$,,')
|
|
elif [ -e /etc/system-release ]; then
|
|
case "$(head -1 /etc/system-release)" in
|
|
"Red Hat Enterprise Linux Server"*)
|
|
platform=rhel
|
|
;;
|
|
"CentOS"*)
|
|
platform=centos
|
|
;;
|
|
*)
|
|
echo -e "Unknown value in /etc/system-release. Impossible to build images.\nAborting"
|
|
exit 2
|
|
;;
|
|
esac
|
|
else
|
|
echo -e "Unknown host OS. Impossible to build images.\nAborting"
|
|
exit 2
|
|
fi
|
|
|
|
is_installed() {
|
|
if [ "$platform" = 'ubuntu' ]; then
|
|
dpkg -s "$1" &> /dev/null
|
|
else
|
|
# centos, fedora, opensuse, or rhel
|
|
if ! rpm -q "$1" &> /dev/null; then
|
|
rpm -q "$(rpm -q --whatprovides "$1")"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
need_required_packages() {
|
|
case "$platform" in
|
|
"ubuntu")
|
|
package_list="qemu kpartx"
|
|
;;
|
|
"fedora")
|
|
package_list="qemu-img kpartx"
|
|
;;
|
|
"opensuse")
|
|
package_list="qemu kpartx"
|
|
;;
|
|
"rhel" | "centos")
|
|
package_list="qemu-kvm qemu-img kpartx"
|
|
;;
|
|
*)
|
|
echo -e "Unknown platform '$platform' for the package list.\nAborting"
|
|
exit 2
|
|
;;
|
|
esac
|
|
|
|
for p in `echo $package_list`; do
|
|
if ! is_installed $p; then
|
|
return 0
|
|
fi
|
|
done
|
|
return 1
|
|
}
|
|
|
|
if need_required_packages; then
|
|
# install required packages if requested
|
|
if [ -n "$DIB_UPDATE_REQUESTED" ]; then
|
|
case "$platform" in
|
|
"ubuntu")
|
|
sudo apt-get update
|
|
sudo apt-get install $package_list -y
|
|
;;
|
|
"opensuse")
|
|
sudo zypper --non-interactive --gpg-auto-import-keys in $package_list
|
|
;;
|
|
"fedora" | "rhel" | "centos")
|
|
if [ ${platform} = "fedora" ]; then
|
|
sudo dnf install $package_list -y
|
|
else
|
|
sudo yum install $package_list -y
|
|
fi
|
|
;;
|
|
*)
|
|
echo -e "Unknown platform '$platform' for installing packages.\nAborting"
|
|
exit 2
|
|
;;
|
|
esac
|
|
else
|
|
echo "Missing one of the following packages: $package_list"
|
|
echo "Please install manually or rerun with the update option (-u)."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Export diskimage-builder settings
|
|
# ---------------------------------
|
|
export DIB_DEFAULT_INSTALLTYPE=package
|
|
export DIB_RELEASE=$MANILA_IMG_OS_VER
|
|
|
|
# User settings
|
|
export DIB_MANILA_USER_USERNAME=$MANILA_USER
|
|
export DIB_MANILA_USER_PASSWORD=$MANILA_PASSWORD
|
|
export DIB_MANILA_USER_AUTHORIZED_KEYS=$MANILA_USER_AUTHORIZED_KEYS
|
|
|
|
# Build image
|
|
# -----------
|
|
disk-image-create \
|
|
-t $IMAGE_FORMAT \
|
|
-a $MANILA_IMG_ARCH \
|
|
$OPTIONAL_DIB_ARGS \
|
|
-o $MANILA_IMG_NAME \
|
|
$OPTIONAL_ELEMENTS $REQUIRED_ELEMENTS
|
|
|
|
if [ "$MANILA_IMAGE_TYPE" = "lxd" ]; then
|
|
LXD_IMAGE_DIR=$_PREFIX/lxd-image.d
|
|
mkdir $LXD_IMAGE_DIR >/dev/null 2>&1 || rm -fR $LXD_IMAGE_DIR/*
|
|
mkdir $LXD_IMAGE_DIR/rootfs >/dev/null 2>&1 || rm -fR $LXD_IMAGE_DIR/rootfs/*
|
|
|
|
# Create LXD metadata package
|
|
cp -R $_PREFIX/data/lxd/meta/* $LXD_IMAGE_DIR
|
|
|
|
# Update creation timestamp in metafile
|
|
sed -i "s/%CREATION_DATE%/$(date +%s)/g" $LXD_IMAGE_DIR/metadata.yaml
|
|
|
|
# Create package
|
|
echo "Creating LXD metadata package..."
|
|
tar -cf $_PREFIX/$MANILA_LXD_METADATA_PACKAGE_NAME.tar \
|
|
-C $LXD_IMAGE_DIR templates metadata.yaml
|
|
echo "Done. Metadata could be found here: $_PREFIX/$MANILA_LXD_METADATA_PACKAGE_NAME.tar"
|
|
|
|
# Create sys and proc directories required by LXD
|
|
mkdir -p $LXD_IMAGE_DIR/tmp/sys >/dev/null 2>&1 || echo "sys folder already exists in rootfs."
|
|
mkdir -p $LXD_IMAGE_DIR/tmp/proc >/dev/null 2>&1 || echo "proc folder already exists in rootfs."
|
|
|
|
sudo $_PREFIX/tools/add_to_rootfs_tar $_PREFIX/$MANILA_IMG_NAME.tar \
|
|
$LXD_IMAGE_DIR/tmp/sys /./sys/
|
|
|
|
sudo $_PREFIX/tools/add_to_rootfs_tar $_PREFIX/$MANILA_IMG_NAME.tar \
|
|
$LXD_IMAGE_DIR/tmp/proc /./proc/
|
|
|
|
rm -fR $LXD_IMAGE_DIR/tmp
|
|
|
|
# Compress rootfs
|
|
echo "Compressing rootfs package..."
|
|
sudo xz -f $_PREFIX/$MANILA_IMG_NAME.tar
|
|
echo "Done. rootfs could be found here: $_PREFIX/$MANILA_IMG_NAME.tar.xz"
|
|
fi
|