Initial commit
This commit is contained in:
commit
8b218188c6
|
|
@ -0,0 +1,116 @@
|
|||
#!/bin/bash
|
||||
set -Eeuo pipefail
|
||||
|
||||
# Used to check environment variables have been set.
|
||||
# In use it is called by do_chroot.sh and do_umount.sh
|
||||
#
|
||||
# Works safely, but not expected to be run independently.
|
||||
# It mounts the FILE_SYSTEM_DIR specified in ARM_root.sh.
|
||||
# If necessary, you can run do_umount.sh to unmount it.
|
||||
|
||||
# Define chroot mounts, without a leading /.
|
||||
# Needed by do_chroot.sh.
|
||||
# Used as $i in:
|
||||
# mount --bind /$i ./$i
|
||||
# umount ./$i
|
||||
export CHROOT_MOUNT_SET="dev dev/pts proc sys"
|
||||
|
||||
#
|
||||
# Check environment variables, then mount the filesystem.
|
||||
#
|
||||
main(){
|
||||
local CONFIG_FILE="${1}"
|
||||
|
||||
check_config_file_is_specified "$CONFIG_FILE"
|
||||
check_config_file_exists "$CONFIG_FILE"
|
||||
check_config_file_is_executable "$CONFIG_FILE"
|
||||
|
||||
. $CONFIG_FILE
|
||||
|
||||
check_for_unset_variables "$CONFIG_FILE"
|
||||
mount_filesystem_if_not_mounted "$CONFIG_FILE"
|
||||
}
|
||||
|
||||
check_config_file_is_specified() {
|
||||
local CONFIG_FILE="${1}"
|
||||
|
||||
if [ -z "$CONFIG_FILE" ]; then
|
||||
echo "Error: CONFIG_FILE not specified."
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
check_config_file_exists() {
|
||||
local CONFIG_FILE="${1}"
|
||||
|
||||
if [ ! -f "$CONFIG_FILE" ]; then
|
||||
cat <<-!
|
||||
Error: $CONFIG_FILE is missing.
|
||||
Expecting $CONFIG_FILE to set FILE_SYSTEM_DIR and POOL_PREFIX,
|
||||
perhaps something like:
|
||||
export FILE_SYSTEM_DIR=/space/amd64/devuan/beowulf/tasmotizer
|
||||
|
||||
# On our zfs, /space/amd64/... is the mount of rpool/amd64/...
|
||||
# RPOOL_ROOT is specified to convert from one to the other.
|
||||
export POOL_PREFIX=/space
|
||||
export RPOOL_ROOT=rpool
|
||||
!
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
check_config_file_is_executable() {
|
||||
local CONFIG_FILE="${1}"
|
||||
|
||||
if [ ! -x "$CONFIG_FILE" ]; then
|
||||
echo "Error: $CONFIG_FILE is not executable."
|
||||
exit 2
|
||||
fi
|
||||
}
|
||||
|
||||
check_for_unset_variables() {
|
||||
local CONFIG_FILE="${1}"
|
||||
|
||||
# Check for unset variables. Allow unset variables here.
|
||||
set +u;
|
||||
if [ -z "$FILE_SYSTEM_DIR" ]; then
|
||||
echo "Error: FILE_SYSTEM_DIR was not set in $CONFIG_FILE."
|
||||
exit 3
|
||||
fi;
|
||||
set -u
|
||||
|
||||
# Check for unset variables. Allow unset variables here.
|
||||
set +u;
|
||||
if [ -z "$POOL_PREFIX" ]; then
|
||||
echo "Error: POOL_PREFIX was not set in $CONFIG_FILE."
|
||||
exit 4
|
||||
fi;
|
||||
set -u
|
||||
|
||||
# Check for unset variables. Allow unset variables here.
|
||||
set +u;
|
||||
if [ -z "$RPOOL_ROOT" ]; then
|
||||
echo "Error: RPOOL_ROOT was not set in $CONFIG_FILE."
|
||||
exit 5
|
||||
fi;
|
||||
set -u
|
||||
|
||||
}
|
||||
|
||||
mount_filesystem_if_not_mounted() {
|
||||
local CONFIG_FILE="${1}"
|
||||
|
||||
check_for_unset_variables $CONFIG_FILE
|
||||
|
||||
# On our zfs, /space/amd64/... is the mount of rpool/amd64/...
|
||||
# Get the pool name (change POOL_PREFIX for RPOOL_ROOT).
|
||||
local RPOOL=${FILE_SYSTEM_DIR/${POOL_PREFIX}/${RPOOL_ROOT}}
|
||||
|
||||
# Mount if not mounted
|
||||
if [ -z "$(grep "${RPOOL} " /proc/mounts)" ]; then
|
||||
sudo zfs mount $RPOOL
|
||||
fi
|
||||
}
|
||||
|
||||
# Entry point.
|
||||
main ./ARM_root.sh
|
||||
|
|
@ -0,0 +1,14 @@
|
|||
#!/bin/bash
|
||||
set -Eeuo pipefail
|
||||
|
||||
# Check and set environment, and mount file system.
|
||||
. ./_do_self_checks.sh
|
||||
|
||||
cd $FILE_SYSTEM_DIR
|
||||
if [ ! -z "$CHROOT_MOUNT_SET" ]; then
|
||||
for i in $CHROOT_MOUNT_SET; do
|
||||
sudo mount --bind /$i ./$i
|
||||
done
|
||||
fi
|
||||
sudo /usr/sbin/chroot . /bin/bash
|
||||
|
||||
|
|
@ -0,0 +1,20 @@
|
|||
# Deliberately not executable. Run as:
|
||||
# bash ./do_umount
|
||||
|
||||
# Check the environment and mount the file system if it is not mounted (to be
|
||||
# sure it makes sense to umount it, rather than be umounting something else).
|
||||
. ./_do_self_checks.sh
|
||||
|
||||
(
|
||||
# If the file system had been mounted before _do_self_checks.sh, above,
|
||||
# the umounts might fail for being busy, so allow errors.
|
||||
set +Ee
|
||||
|
||||
cd $FILE_SYSTEM_DIR
|
||||
for i in $CHROOT_MOUNT_SET; do
|
||||
sudo umount --lazy ./$i
|
||||
done 2>/dev/null
|
||||
exit 0
|
||||
)
|
||||
|
||||
sudo umount $FILE_SYSTEM_DIR
|
||||
Loading…
Reference in New Issue