Server IP : 3.128.248.115 / Your IP : 13.58.201.240 Web Server : Apache/2.4.41 (Ubuntu) System : Linux ip-172-31-33-233 5.15.0-1037-aws #41~20.04.1-Ubuntu SMP Mon May 22 18:18:00 UTC 2023 x86_64 User : www-data ( 33) PHP Version : 7.4.28 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /sbin/ |
Upload File : |
#!/bin/sh # # overlayroot-chroot - chroot wrapper script for overlayroot # Copyright (C) 2012 Dustin Kirkland <kirkland@ubuntu.com> # # Authors: Dustin Kirkland <kirkland@ubuntu.com> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, version 3 of the License. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. set -e set -f # disable path expansion REMOUNTS="" error() { printf "ERROR: $@\n" 1>&2 } fail() { [ $# -eq 0 ] || error "$@"; exit 1; } info() { printf "INFO: $@\n" 1>&2 } get_lowerdir() { local overlay="" overlay=$(awk \ '$1 == "overlayroot" && $2 == "/" { print $0 }' /proc/mounts) if [ -n "${overlay}" ]; then lowerdir=${overlay##*lowerdir=} lowerdir=${lowerdir%%,*} if mountpoint "${lowerdir}" >/dev/null; then _RET="${lowerdir}" else fail "Unable to find the overlayroot lowerdir" fi else fail "Unable to find an overlayroot filesystem" fi } clean_exit() { local mounts="$1" rc=0 d="" lowerdir="" mp="" for d in ${mounts}; do if mountpoint ${d} >/dev/null; then umount ${d} || rc=1 fi done for mp in $REMOUNTS; do mount -o remount,ro "${mp}" || error "Note that [${mp}] is still mounted read/write" done [ "$2" = "return" ] && return ${rc} || exit ${rc} } # Try to find the overlayroot filesystem get_lowerdir lowerdir=${_RET} recurse_mps=$(awk '$1 ~ /^\/dev\// && $2 ~ starts { print $2 }' \ starts="^$lowerdir/" /proc/mounts) mounts= for d in proc run sys; do if ! mountpoint "${lowerdir}/${d}" >/dev/null; then mount -o bind "/${d}" "${lowerdir}/${d}" || fail "Unable to bind /${d}" mounts="$mounts $lowerdir/$d" trap "clean_exit \"${mounts}\" || true" EXIT HUP INT QUIT TERM fi done # Remount with read/write for mp in "$lowerdir" $recurse_mps; do mount -o remount,rw "${mp}" && REMOUNTS="$mp $REMOUNTS" || fail "Unable to remount [$mp] writable" done info "Chrooting into [${lowerdir}]" chroot ${lowerdir} "$@" # Clean up mounts on exit clean_exit "${mounts}" "return" trap "" EXIT HUP INT QUIT TERM # vi: ts=4 noexpandtab