move mcoverlayfs kernel version check from mcexec.c to configure

While we are here:
 - fix uname -r (single quote?!)
 - add compat for rhel8 (el kernel and version is 4.18)
 - also remove linux version check in mcreboot.sh, trust configure check

Change-Id: I14726d4374b0dfd941640096044ea1d5d88bfcb8
This commit is contained in:
Dominique Martinet
2018-11-19 17:23:53 +09:00
committed by Balazs Gerofi
parent 98aa633856
commit c585a37440
5 changed files with 89 additions and 95 deletions

View File

@ -137,32 +137,32 @@ error_exit() {
fi fi
;& ;&
mcos_sys_mounted) mcos_sys_mounted)
if [ "$enable_mcoverlay" == "yes" ]; then if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
umount /tmp/mcos/mcos0_sys umount /tmp/mcos/mcos0_sys
fi fi
;& ;&
mcos_proc_mounted) mcos_proc_mounted)
if [ "$enable_mcoverlay" == "yes" ]; then if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
umount /tmp/mcos/mcos0_proc umount /tmp/mcos/mcos0_proc
fi fi
;& ;&
mcoverlayfs_loaded) mcoverlayfs_loaded)
if [ "$enable_mcoverlay" == "yes" ]; then if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
rmmod mcoverlay 2>/dev/null rmmod mcoverlay 2>/dev/null
fi fi
;& ;&
linux_proc_bind_mounted) linux_proc_bind_mounted)
if [ "$enable_mcoverlay" == "yes" ]; then if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
umount /tmp/mcos/linux_proc umount /tmp/mcos/linux_proc
fi fi
;& ;&
tmp_mcos_mounted) tmp_mcos_mounted)
if [ "$enable_mcoverlay" == "yes" ]; then if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
umount /tmp/mcos umount /tmp/mcos
fi fi
;& ;&
tmp_mcos_created) tmp_mcos_created)
if [ "$enable_mcoverlay" == "yes" ]; then if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
rm -rf /tmp/mcos rm -rf /tmp/mcos
fi fi
;& ;&
@ -239,26 +239,6 @@ if [ "${release}" == "${rhel_release}" ]; then
rhel_release=""; rhel_release="";
fi fi
enable_mcoverlay="no"
if [ "${ENABLE_MCOVERLAYFS}" == "yes" ]; then
if [ "${rhel_release}" == "" ]; then
if [ ${linux_version_code} -ge 262144 -a ${linux_version_code} -lt 262400 ]; then
enable_mcoverlay="yes"
fi
if [ ${linux_version_code} -ge 263680 -a ${linux_version_code} -lt 263936 ]; then
enable_mcoverlay="yes"
fi
else
if [ ${linux_version_code} -eq 199168 -a ${rhel_release} -ge 327 -a ${rhel_release} -le 862 ]; then
enable_mcoverlay="yes"
fi
if [ ${linux_version_code} -ge 262144 -a ${linux_version_code} -lt 262400 ]; then
enable_mcoverlay="yes"
fi
fi
fi
# Figure out CPUs if not requested by user # Figure out CPUs if not requested by user
if [ "$cpus" == "" ]; then if [ "$cpus" == "" ]; then
# Get the number of CPUs on NUMA node 0 # Get the number of CPUs on NUMA node 0
@ -274,7 +254,7 @@ if [ "$cpus" == "" ]; then
fi fi
# Remove mcoverlay if loaded # Remove mcoverlay if loaded
if [ "$enable_mcoverlay" == "yes" ]; then if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
${SBINDIR}/mcoverlay-destroy.sh ${SBINDIR}/mcoverlay-destroy.sh
ret=$? ret=$?
if [ $ret -ne 0 ]; then if [ $ret -ne 0 ]; then
@ -481,7 +461,7 @@ if ! chown ${chown_option} /dev/mcd* /dev/mcos*; then
fi fi
# Overlay /proc, /sys with McKernel specific contents # Overlay /proc, /sys with McKernel specific contents
if [ "$enable_mcoverlay" == "yes" ]; then if [ "$ENABLE_MCOVERLAYFS" == "yes" ]; then
${SBINDIR}/mcoverlay-create.sh ${SBINDIR}/mcoverlay-create.sh
ret=$? ret=$?
if [ $ret -ne 0 ]; then if [ $ret -ne 0 ]; then

43
configure vendored
View File

@ -631,6 +631,7 @@ IHK_VERSION
WITH_SYSCALL_INTERCEPT WITH_SYSCALL_INTERCEPT
ENABLE_QLMPI ENABLE_QLMPI
ENABLE_RUSAGE ENABLE_RUSAGE
MCOVERLAYFS_MODULE
ENABLE_MCOVERLAYFS ENABLE_MCOVERLAYFS
LDFLAGS_SYSCALL_INTERCEPT LDFLAGS_SYSCALL_INTERCEPT
CPPFLAGS_SYSCALL_INTERCEPT CPPFLAGS_SYSCALL_INTERCEPT
@ -3804,7 +3805,7 @@ fi
case "X$WITH_UNAME_R" in case "X$WITH_UNAME_R" in
Xyes | Xno | X) Xyes | Xno | X)
WITH_UNAME_R='`uname -r`' WITH_UNAME_R="`uname -r`"
;; ;;
esac esac
@ -4750,9 +4751,44 @@ $as_echo "#define ENABLE_MCOVERLAYFS 1" >>confdefs.h
{ $as_echo "$as_me:${as_lineno-$LINENO}: mcoverlayfs is enabled" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: mcoverlayfs is enabled" >&5
$as_echo "$as_me: mcoverlayfs is enabled" >&6;} $as_echo "$as_me: mcoverlayfs is enabled" >&6;}
IFS=. read LINUX_VERSION_MAJOR LINUX_VERSION_MINOR LINUX_VERSION_PATCH _ <<EOF
${UNAME_R%%-*}
EOF
LINUX_VERSION_CODE=$(( LINUX_VERSION_MAJOR * 65536 + LINUX_VERSION_MINOR * 256 + LINUX_VERSION_PATCH ))
# rhel
if test x"${UNAME_R}" != x"${UNAME_R//.el[0-9]}" ; then
RHEL_RELEASE="${UNAME_R#*-}"
RHEL_RELEASE="${RHEL_RELEASE%%.*}"
case "$LINUX_VERSION_CODE" in
199168) # 3.10.0
MCOVERLAYFS_MODULE=linux-3.10.0-327.36.1.el7;;
262144) # 4.0.0
MCOVERLAYFS_MODULE=linux-4.0.9;;
266752) # 4.18.0
MCOVERLAYFS_MODULE=linux-4.18.14;;
*)
as_fn_error $? "Your RHEL/centos version has no known mcoverlayfs module" "$LINENO" 5;;
esac
else
case "1" in
# 4.0.0-4.1.0
$((LINUX_VERSION_CODE >= 262144 && LINUX_VERSION_CODE < 262400)))
MCOVERLAYFS_MODULE=linux-4.0.9;;
# 4.6.0-4.7.0
$((LINUX_VERSION_CODE >= 263680 && LINUX_VERSION_CODE < 263936)))
MCOVERLAYFS_MODULE=linux-4.6.7;;
# 4.18.0-4.20.0
$((LINUX_VERSION_CODE >= 266752 && LINUX_VERSION_CODE < 267264)))
MCOVERLAYFS_MODULE=linux-4.18.14;;
*)
as_fn_error $? "Your kernel version has no known mcoverlayfs module" "$LINENO" 5;;
esac
fi
else else
{ $as_echo "$as_me:${as_lineno-$LINENO}: mcoverlayfs is disabled" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: mcoverlayfs is disabled. You will not be able to run anything." >&5
$as_echo "$as_me: mcoverlayfs is disabled" >&6;} $as_echo "$as_me: WARNING: mcoverlayfs is disabled. You will not be able to run anything." >&2;}
fi fi
if test "x$ENABLE_QLMPI" = "xyes" ; then if test "x$ENABLE_QLMPI" = "xyes" ; then
@ -4892,6 +4928,7 @@ fi
ac_config_headers="$ac_config_headers config.h" ac_config_headers="$ac_config_headers config.h"

View File

@ -220,7 +220,7 @@ AC_ARG_WITH([uname_r],
case "X$WITH_UNAME_R" in case "X$WITH_UNAME_R" in
Xyes | Xno | X) Xyes | Xno | X)
WITH_UNAME_R='`uname -r`' WITH_UNAME_R="`uname -r`"
;; ;;
esac esac
@ -450,8 +450,43 @@ fi
if test "x$ENABLE_MCOVERLAYFS" = "xyes" ; then if test "x$ENABLE_MCOVERLAYFS" = "xyes" ; then
AC_DEFINE([ENABLE_MCOVERLAYFS],[1],[whether mcoverlayfs is enabled]) AC_DEFINE([ENABLE_MCOVERLAYFS],[1],[whether mcoverlayfs is enabled])
AC_MSG_NOTICE([mcoverlayfs is enabled]) AC_MSG_NOTICE([mcoverlayfs is enabled])
IFS=. read LINUX_VERSION_MAJOR LINUX_VERSION_MINOR LINUX_VERSION_PATCH _ <<EOF
${UNAME_R%%-*}
EOF
LINUX_VERSION_CODE=$(( LINUX_VERSION_MAJOR * 65536 + LINUX_VERSION_MINOR * 256 + LINUX_VERSION_PATCH ))
# rhel
if test x"${UNAME_R}" != x"${UNAME_R//.el[[0-9]]}" ; then
RHEL_RELEASE="${UNAME_R#*-}"
RHEL_RELEASE="${RHEL_RELEASE%%.*}"
case "$LINUX_VERSION_CODE" in
199168) # 3.10.0
MCOVERLAYFS_MODULE=linux-3.10.0-327.36.1.el7;;
262144) # 4.0.0
MCOVERLAYFS_MODULE=linux-4.0.9;;
266752) # 4.18.0
MCOVERLAYFS_MODULE=linux-4.18.14;;
*)
AC_MSG_ERROR([Your RHEL/centos version has no known mcoverlayfs module]);;
esac
else
case "1" in
# 4.0.0-4.1.0
$((LINUX_VERSION_CODE >= 262144 && LINUX_VERSION_CODE < 262400)))
MCOVERLAYFS_MODULE=linux-4.0.9;;
# 4.6.0-4.7.0
$((LINUX_VERSION_CODE >= 263680 && LINUX_VERSION_CODE < 263936)))
MCOVERLAYFS_MODULE=linux-4.6.7;;
# 4.18.0-4.20.0
$((LINUX_VERSION_CODE >= 266752 && LINUX_VERSION_CODE < 267264)))
MCOVERLAYFS_MODULE=linux-4.18.14;;
*)
AC_MSG_ERROR([Your kernel version has no known mcoverlayfs module]);;
esac
fi
else else
AC_MSG_NOTICE([mcoverlayfs is disabled]) AC_MSG_WARN([mcoverlayfs is disabled. You will not be able to run anything.])
fi fi
if test "x$ENABLE_QLMPI" = "xyes" ; then if test "x$ENABLE_QLMPI" = "xyes" ; then
@ -536,6 +571,7 @@ AC_SUBST(CFLAGS)
AC_SUBST(CPPFLAGS_SYSCALL_INTERCEPT) AC_SUBST(CPPFLAGS_SYSCALL_INTERCEPT)
AC_SUBST(LDFLAGS_SYSCALL_INTERCEPT) AC_SUBST(LDFLAGS_SYSCALL_INTERCEPT)
AC_SUBST(ENABLE_MCOVERLAYFS) AC_SUBST(ENABLE_MCOVERLAYFS)
AC_SUBST(MCOVERLAYFS_MODULE)
AC_SUBST(ENABLE_RUSAGE) AC_SUBST(ENABLE_RUSAGE)
AC_SUBST(ENABLE_QLMPI) AC_SUBST(ENABLE_QLMPI)
AC_SUBST(WITH_SYSCALL_INTERCEPT) AC_SUBST(WITH_SYSCALL_INTERCEPT)

View File

@ -1,43 +1,10 @@
ENABLE_MCOVERLAYFS=@ENABLE_MCOVERLAYFS@ ENABLE_MCOVERLAYFS=@ENABLE_MCOVERLAYFS@
RELEASE=@UNAME_R@ MCOVERLAYFS_MODULE=@MCOVERLAYFS_MODULE@
MAJOR=$(shell echo ${RELEASE} | sed -e 's/^\([0-9]*\).*/\1/')
MINOR=$(shell echo ${RELEASE} | sed -e 's/^[0-9]*.\([0-9]*\).*/\1/')
PATCH=$(shell echo ${RELEASE} | sed -e 's/^[0-9]*.[0-9]*.\([0-9]*\).*/\1/')
LINUX_VERSION_CODE=$(shell expr \( ${MAJOR} \* 65536 \) + \( ${MINOR} \* 256 \) + ${PATCH})
RHEL_RELEASE_TMP=$(shell echo ${RELEASE} | sed -e 's/^[0-9]*.[0-9]*.[0-9]*-\([0-9]*\).*/\1/')
RHEL_RELEASE=$(shell if [ "${RELEASE}" == "${RHEL_RELEASE_TMP}" ]; then echo ""; else echo ${RHEL_RELEASE_TMP}; fi)
BUILD_MODULE_TMP=$(shell if [ "${RHEL_RELEASE}" == "" ]; then echo "org"; else echo "rhel"; fi)
BUILD_MODULE=none
#$(info "LINUX_VERSION_CODE: ${LINUX_VERSION_CODE}, RHEL_RELEASE: ${RHEL_RELEASE}")
ifeq ($(ENABLE_MCOVERLAYFS),yes)
ifeq ($(BUILD_MODULE_TMP),org)
ifeq ($(BUILD_MODULE),none)
BUILD_MODULE=$(shell if [ ${LINUX_VERSION_CODE} -ge 262144 -a ${LINUX_VERSION_CODE} -lt 262400 ]; then echo "linux-4.0.9"; else echo "none"; fi)
endif
ifeq ($(BUILD_MODULE),none)
BUILD_MODULE=$(shell if [ ${LINUX_VERSION_CODE} -ge 263680 -a ${LINUX_VERSION_CODE} -lt 263936 ]; then echo "linux-4.6.7"; else echo "none"; fi)
endif
ifeq ($(BUILD_MODULE),none)
BUILD_MODULE=$(shell if [ ${LINUX_VERSION_CODE} -ge 266752 ]; then echo "linux-4.18.14"; else echo "none"; fi)
endif
endif
ifeq ($(BUILD_MODULE_TMP),rhel)
ifeq ($(BUILD_MODULE),none)
BUILD_MODULE=$(shell if [ ${LINUX_VERSION_CODE} -eq 199168 -a ${RHEL_RELEASE} -ge 327 -a ${RHEL_RELEASE} -le 862 ]; then echo "linux-3.10.0-327.36.1.el7"; else echo "none"; fi)
endif
ifeq ($(BUILD_MODULE),none)
BUILD_MODULE=$(shell if [ ${LINUX_VERSION_CODE} -ge 262144 -a ${LINUX_VERSION_CODE} -lt 262400 ]; then echo "linux-4.0.9"; else echo "none"; fi)
endif
endif
endif
.PHONY: clean install modules .PHONY: clean install modules
modules: modules:
ifneq ($(BUILD_MODULE),none) +@(cd $(MCOVERLAYFS_MODULE) && make modules)
+@(cd $(BUILD_MODULE) && make modules)
endif
clean: clean:
@(cd linux-3.10.0-327.36.1.el7 && make clean) @(cd linux-3.10.0-327.36.1.el7 && make clean)
@ -46,7 +13,5 @@ clean:
@(cd linux-4.18.14 && make clean) @(cd linux-4.18.14 && make clean)
install: install:
ifneq ($(BUILD_MODULE),none) @(cd $(MCOVERLAYFS_MODULE); make install)
@(cd $(BUILD_MODULE); make install)
endif

View File

@ -153,30 +153,6 @@ int __glob_argc = -1;
char **__glob_argv = 0; char **__glob_argv = 0;
#endif #endif
#ifdef ENABLE_MCOVERLAYFS
#undef ENABLE_MCOVERLAYFS
// RedHat?
#ifdef RHEL_RELEASE_CODE
#if LINUX_VERSION_CODE <= KERNEL_VERSION(3,10,0)
#define ENABLE_MCOVERLAYFS 1
#else
#error "ERROR: your Linux kernel version on RHEL is not supported"
#endif // LINUX_VERSION_CODE <= KERNEL_VERSION(3,10,0)
// Other distro?
#else
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0) && LINUX_VERSION_CODE < KERNEL_VERSION(4,1,0)
#define ENABLE_MCOVERLAYFS 1
#endif // LINUX_VERSION_CODE == 4.0
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,6,0) && LINUX_VERSION_CODE < KERNEL_VERSION(4,7,0)
#define ENABLE_MCOVERLAYFS 1
#endif // LINUX_VERSION_CODE == 4.6
#endif // RHEL_RELEASE_CODE
#endif // ENABLE_MCOVERLAYFS
typedef unsigned char cc_t; typedef unsigned char cc_t;
typedef unsigned int speed_t; typedef unsigned int speed_t;
typedef unsigned int tcflag_t; typedef unsigned int tcflag_t;