# # Copyright (C) SUSE LINUX GmbH 2016-2017, all rights reserved. # # This library is free software; you can redistribute it and/or modify it # under the terms of the GNU Lesser General Public License as published # by the Free Software Foundation; either version 2.1 of the License, or # (at your option) version 3. # # This library is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public # License for more details. function _fail() { echo "error: $*" exit 1 } function _warn() { echo "warning: $*" } # process user defined configuration . ${RAPIDO_DIR}/rapido.conf \ || _fail "rapido.conf missing - see rapido.conf.example" function _rt_ceph_src_globals_set { if [ -f "${CEPH_SRC}/../build/CMakeCache.txt" ]; then # cmake build, compiled binaries and configs are in build subdir CEPH_BIN="${CEPH_SRC}/../build/bin/ceph" CEPH_RBD_BIN="${CEPH_SRC}/../build/bin/rbd" CEPH_MOUNT_BIN="${CEPH_SRC}/../build/bin/mount.ceph" CEPH_RADOS_BIN="${CEPH_SRC}/../build/bin/rados" CEPH_FUSE_BIN="${CEPH_SRC}/../build/bin/ceph-fuse" CEPH_RADOS_LIB="${CEPH_SRC}/../build/lib/librados.so" CEPH_RBD_LIB="${CEPH_SRC}/../build/lib/librbd.so" CEPH_CONF="${CEPH_SRC}/../build/ceph.conf" CEPH_KEYRING="${CEPH_SRC}/../build/keyring" else # autotools build CEPH_BIN="${CEPH_SRC}/ceph" CEPH_RBD_BIN="${CEPH_SRC}/rbd" CEPH_MOUNT_BIN="${CEPH_SRC}/mount.ceph" CEPH_RADOS_BIN="${CEPH_SRC}/rados" CEPH_FUSE_BIN="${CEPH_SRC}/ceph-fuse" CEPH_RADOS_LIB="${CEPH_SRC}/.libs/librados.so" CEPH_RBD_LIB="${CEPH_SRC}/.libs/librbd.so" CEPH_CONF="${CEPH_SRC}/ceph.conf" CEPH_KEYRING="${CEPH_SRC}/keyring" fi RBD_NAMER_BIN="${CEPH_SRC}/ceph-rbdnamer" RBD_UDEV_RULES="${CEPH_SRC}/../udev/50-rbd.rules" CEPH_UDEV_RULES="${CEPH_SRC}/../udev/95-ceph-osd.rules" CEPH_DISK_SYSTEMD_SVC="${CEPH_SRC}/../systemd/ceph-disk@.service" CEPH_OSD_SYSTEMD_SVC="${CEPH_SRC}/../systemd/ceph-osd@.service" } function _rt_ceph_installed_globals_set { # use installed Ceph binaries and configs RBD_NAMER_BIN="/usr/bin/ceph-rbdnamer" RBD_UDEV_RULES="/usr/lib/udev/rules.d/50-rbd.rules" CEPH_UDEV_RULES="/usr/lib/udev/rules.d/95-ceph-osd.rules" CEPH_DISK_SYSTEMD_SVC="/usr/lib/systemd/system/ceph-disk@.service" CEPH_OSD_SYSTEMD_SVC="/usr/lib/systemd/system/ceph-osd@.service" CEPH_BIN="/usr/bin/ceph" CEPH_RBD_BIN="/usr/bin/rbd" CEPH_MOUNT_BIN="/usr/sbin/mount.ceph" CEPH_RADOS_BIN="/usr/bin/rados" CEPH_FUSE_BIN="/usr/bin/ceph-fuse" CEPH_RADOS_LIB="/usr/lib64/librados.so" CEPH_RBD_LIB="/usr/lib64/librbd.so" CEPH_CONF="/etc/ceph/ceph.conf" CEPH_KEYRING="/etc/ceph/ceph.client.${CEPH_USER}.keyring" } function _rt_require_ceph { if [ -n "$CEPH_SRC" ]; then _rt_ceph_src_globals_set else _rt_ceph_installed_globals_set fi [ -f "$RBD_NAMER_BIN" ] || _fail "missing $RBD_NAMER_BIN" [ -f "$RBD_UDEV_RULES" ] || _fail "missing $RBD_UDEV_RULES" [ -f "$CEPH_UDEV_RULES" ] || _fail "missing $CEPH_UDEV_RULES" [ -f "$CEPH_DISK_SYSTEMD_SVC" ] \ || _fail "missing $CEPH_DISK_SYSTEMD_SVC" [ -f "$CEPH_OSD_SYSTEMD_SVC" ] || _fail "missing $CEPH_OSD_SYSTEMD_SVC" [ -f "$CEPH_BIN" ] || _fail "missing $CEPH_BIN" [ -f "$CEPH_RBD_BIN" ] || _fail "missing $CEPH_RBD_BIN" [ -f "$CEPH_MOUNT_BIN" ] || _fail "missing $CEPH_MOUNT_BIN" [ -f "$CEPH_RADOS_BIN" ] || _fail "missing $CEPH_RADOS_BIN" [ -f "$CEPH_FUSE_BIN" ] || _fail "missing $CEPH_FUSE_BIN" [ -f "$CEPH_RADOS_LIB" ] || _fail "missing $CEPH_RADOS_LIB" [ -f "$CEPH_RBD_LIB" ] || _fail "missing $CEPH_RBD_LIB" [ -f "$CEPH_CONF" ] || _fail "missing $CEPH_CONF" [ -f "$CEPH_KEYRING" ] || _fail "missing $CEPH_KEYRING" } function _rt_require_fstests() { if [ -n "$FSTESTS_DIR" ]; then # FSTESTS_DIR is an old config parameter which was used when # Dracut didn't correctly install files directly nested under # "--include " paths, only subdirectories were handled. # To work around this, FSTESTS_DIR referred to a path with an # immediate xfstests subdirectory. [ -n "$FSTESTS_SRC" ] \ && _fail "both FSTESTS_DIR and FSTESTS_SRC defined" FSTESTS_SRC="${FSTESTS_DIR}/xfstests" _warn "FSTESTS_DIR deprecated, use FSTESTS_SRC=${FSTESTS_SRC}" fi [ -n "$FSTESTS_SRC" ] || _fail "FSTESTS_SRC not configured" [ -d "$FSTESTS_SRC" ] || _fail "missing $FSTESTS_SRC directory" [ -x "$FSTESTS_SRC/check" ] || _fail "missing $FSTESTS_SRC/check" } function _rt_require_zram_params { # initramfs ramdisk details ZRAM_INITRD_SIZE="1G" ZRAM_INITRD_MNT="$RAPIDO_DIR/initrds" # ramdisk for vstart.sh logs and data ZRAM_VSTART_OUT_SIZE="1G" ZRAM_VSTART_DATA_SIZE="1G" if [ -n "$CEPH_SRC" ]; then if [ -f "${CEPH_SRC}/../build/CMakeCache.txt" ]; then # with cmake, vstart.sh is triggered from the build dir ZRAM_VSTART_OUT_MNT="${CEPH_SRC}/../build/out" ZRAM_VSTART_DATA_MNT="${CEPH_SRC}/../build/dev" else # vstart.sh is triggered from the src dir ZRAM_VSTART_OUT_MNT="${CEPH_SRC}/out" ZRAM_VSTART_DATA_MNT="${CEPH_SRC}/dev" fi [ -d "$ZRAM_VSTART_OUT_MNT" ] \ || _fail "missing $ZRAM_VSTART_OUT_MNT" [ -d "$ZRAM_VSTART_DATA_MNT" ] \ || _fail "missing $ZRAM_VSTART_DATA_MNT" fi } function _rt_require_dracut_args() { [ -f "${KERNEL_SRC}/include/config/kernel.release" ] \ || _fail "kernel.release file missing $KERNEL_SRC" local kver="$(cat ${KERNEL_SRC}/include/config/kernel.release)" local dracut_args="--no-compress --no-hostonly --no-hostonly-cmdline \ --force --tmpdir $RAPIDO_DIR/initrds/ \ --kver $kver" # The optional KERNEL_INSTALL_MOD_PATH rapido.conf parameter can be used # to specify where Dracut should try to pull built kernel modules from. if [ -n "$KERNEL_INSTALL_MOD_PATH" ]; then [ -d "$KERNEL_INSTALL_MOD_PATH" ] \ || _fail "missing $KERNEL_INSTALL_MOD_PATH" dracut_args="$dracut_args --kmoddir $KERNEL_INSTALL_MOD_PATH" fi DRACUT_EXTRA_ARGS="$dracut_args" } # initramfs output path DRACUT_OUT="${RAPIDO_DIR}/initrds/myinitrd" # initramfs xattr name, with optional qemu parameters QEMU_ARGS_XATTR="user.rapido.qemu_args"