###############################################################################
HOST_ARCH="${HOSTTYPE}"
+HOST_KERNEL="$(uname -r)"
LC_ALL=POSIX
PS1='\u:\w$ '
return 0
}
+version_compare() {
+ local v1="${1}"
+ local op="${2}"
+ local v2="${3}"
+
+ # Split both versions by .
+ v1=( ${v1//./ } )
+ v2=( ${v2//./ } )
+
+ # Run for as long as both versions have not been fully processed
+ while [ "${#v1[@]}" -gt 0 ] && [ "${#v2[@]}" -gt 0 ]; do
+ # Fetch the first element from each version
+ local f1="${v1[@]:0:1}"
+ local f2="${v2[@]:0:1}"
+
+ # Shift the array
+ v1=( ${v1[@]:1} )
+ v2=( ${v2[@]:1} )
+
+ local n1
+ local n2
+
+ # Split off any numeric parts
+ if [[ ${f1} =~ ^([0-9]+) ]]; then
+ n1="${BASH_REMATCH[1]}"
+ fi
+
+ if [[ ${f2} =~ ^([0-9]+) ]]; then
+ n2="${BASH_REMATCH[1]}"
+ fi
+
+ # Remove the numeric parts from each field
+ f1="${f1#${n1}}"
+ f2="${f2#${n2}}"
+
+ # Check the numeric parts first
+ if [ -n "${n1}" ] && [ -n "${n2}" ]; then
+ case "${op}" in
+ ge)
+ if [ "${n1}" -ge "${n2}" ]; then
+ return 1
+ fi
+ ;;
+ esac
+
+ # If we only have a numeric part in the first version...
+ elif [ -n "${n1}" ]; then
+ case "${op}" in
+ ge)
+ return 1
+ ;;
+ esac
+
+ # If we only have a numeric part in the second version...
+ elif [ -n "${n2}" ]; then
+ case "${op}" in
+ ge)
+ return 0
+ ;;
+ esac
+ fi
+
+ # I don't know how to handle the non-numeric part here, and we should not need it
+ # as we are only using this for kernel versions which should all lead with numbers.
+ done
+
+ # Don't know
+ return 0
+}
+
exiterror() {
# Dump logfile
if [ -n "${LOGFILE}" ] && [ -e "${LOGFILE}" ]; then
# Create a new UTS namespace
"--uts"
- # Mount /proc so that the build environment does not see
- # any foreign processes.
- "--mount-proc=${BUILD_DIR}/proc"
-
# If unshare is asked to terminate, terminate all child processes
"--kill-child"
)
+
+ # Mount /proc so that the build environment does not see
+ # any foreign processes.
+ # This does not work on kernels < 6.0.0, and we will mount /proc
+ # in the execute.sh script instead.
+ if version_compare "${HOST_KERNEL}" ge "6.0.0"; then
+ unshare+=(
+ "--mount-proc=${BUILD_DIR}/proc"
+ )
+ fi
fi
while [ $# -gt 0 ]; do
# This is a helper script that is called after we have created the new
# namespaces to perform further setup. This will be executed on the host.
+# Mount /proc if it has not been mounted, yet
+if ! mountpoint /proc; then
+ mount -t procfs none /proc -o nosuid,noexec,nodev
+fi
+
# Bring up the loopback interface
ip link set lo up &>/dev/null