[explorer/machine_type] Implement chroot detection
This commit is contained in:
parent
23fbfaf035
commit
4a05669765
1 changed files with 53 additions and 0 deletions
|
@ -53,6 +53,21 @@ uname_s=$(uname -s)
|
|||
|
||||
is_command() { command -v "$1" >/dev/null 2>&1; }
|
||||
|
||||
files_same() {
|
||||
# shellcheck disable=SC2012
|
||||
LC_ALL=C df -P "$1" "$2" 2>/dev/null | {
|
||||
read -r _ # skip header line
|
||||
read -r fs1 _ _ _ _ mp1
|
||||
read -r fs2 _ _ _ _ mp2
|
||||
test "${fs1}" = "${fs2}" -a "${mp1}" = "${mp2}" || return 1
|
||||
} &&
|
||||
ls -1Ldi "$1" "$2" 2>/dev/null | {
|
||||
read -r ino1 _
|
||||
read -r ino2 _
|
||||
test "${ino1}" = "${ino2}" || return 1
|
||||
}
|
||||
}
|
||||
|
||||
is_oneof() (
|
||||
x=$1; shift
|
||||
for y
|
||||
|
@ -128,6 +143,32 @@ detected_layer() {
|
|||
}
|
||||
|
||||
|
||||
# Check for chroot
|
||||
|
||||
has_chroot_systemd() {
|
||||
is_command systemd-detect-virt && systemd-detect-virt --help | grep -q -e '^ -r'
|
||||
}
|
||||
|
||||
check_chroot_systemd() {
|
||||
systemd-detect-virt -r
|
||||
}
|
||||
|
||||
has_chroot_debian_ischroot() {
|
||||
is_command ischroot
|
||||
}
|
||||
|
||||
check_chroot_debian_ischroot() {
|
||||
ischroot --default-false
|
||||
}
|
||||
|
||||
has_chroot_procfs() {
|
||||
test -d /proc/
|
||||
}
|
||||
|
||||
check_chroot_procfs() {
|
||||
test -e /proc/1/root && ! files_same /proc/1/root /
|
||||
}
|
||||
|
||||
# Check for container
|
||||
|
||||
has_ct_systemd() {
|
||||
|
@ -881,6 +922,18 @@ run_stage() {
|
|||
}
|
||||
|
||||
|
||||
# Execute chroot stages
|
||||
|
||||
for stage in \
|
||||
procfs debian_ischroot systemd
|
||||
do
|
||||
run_stage chroot ${stage} || continue
|
||||
detected_layer 'chroot'
|
||||
echo chroot
|
||||
break
|
||||
done
|
||||
|
||||
|
||||
# Execute container stages
|
||||
|
||||
for stage in \
|
||||
|
|
Loading…
Reference in a new issue