diff --git a/src/etc/one-context.d/loc-04-tmpfs b/src/etc/one-context.d/loc-04-tmpfs new file mode 100755 index 0000000..792c15b --- /dev/null +++ b/src/etc/one-context.d/loc-04-tmpfs @@ -0,0 +1,52 @@ +#!/usr/bin/env bash + +# -------------------------------------------------------------------------- # +# Copyright 2002-2020, OpenNebula Project, OpenNebula Systems # +# # +# Licensed under the Apache License, Version 2.0 (the "License"); you may # +# not use this file except in compliance with the License. You may obtain # +# a copy of the License at # +# # +# http://www.apache.org/licenses/LICENSE-2.0 # +# # +# Unless required by applicable law or agreed to in writing, software # +# distributed under the License is distributed on an "AS IS" BASIS, # +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # +# See the License for the specific language governing permissions and # +# limitations under the License. # +#--------------------------------------------------------------------------- # + +TMP_DIR=$(mktemp -d "/tmp/one-context.XXXXXX") + +# Umount the directory and remove it +cleanup() +{ + [ "$MOUNT" = "yes" ] && umount "${TMP_DIR}" + rm -rf "${TMP_DIR}" +} + +# Get files that should be copy from +get_files() +{ + diff -qr "$1" "$2" | grep "Only in $1" | cut -d ':' -f2 | awk '{$1=$1};1' +} + +if [ "${RECREATE_TMPFS^^}" = "YES" ]; then + MOUNT=yes + + mount --bind -o ro / "${TMP_DIR}" + + IFS=$'\n' + + # Copy only files that are in /run but not in /var/run + files=$(get_files "${TMP_DIR}"/run /var/run) + + for file in $files; + do + cp -pr "${TMP_DIR}"/run/"${file}" /var/run &> /dev/null + done +fi + +trap cleanup EXIT + +exit 0