diff options
Diffstat (limited to 'romtal-sistem-dondurma/usr')
-rwxr-xr-x | romtal-sistem-dondurma/usr/sbin/overlayroot-chroot | 93 | ||||
-rw-r--r-- | romtal-sistem-dondurma/usr/share/man/man8/overlayroot-chroot.8 | 21 |
2 files changed, 114 insertions, 0 deletions
diff --git a/romtal-sistem-dondurma/usr/sbin/overlayroot-chroot b/romtal-sistem-dondurma/usr/sbin/overlayroot-chroot new file mode 100755 index 0000000..6c37962 --- /dev/null +++ b/romtal-sistem-dondurma/usr/sbin/overlayroot-chroot @@ -0,0 +1,93 @@ +#!/bin/sh +# +# overlayroot-chroot - chroot wrapper script for overlayroot +# Copyright (C) 2012 Dustin Kirkland <[email protected]> +# +# Authors: Dustin Kirkland <[email protected]> +# +# 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 diff --git a/romtal-sistem-dondurma/usr/share/man/man8/overlayroot-chroot.8 b/romtal-sistem-dondurma/usr/share/man/man8/overlayroot-chroot.8 new file mode 100644 index 0000000..57441cd --- /dev/null +++ b/romtal-sistem-dondurma/usr/share/man/man8/overlayroot-chroot.8 @@ -0,0 +1,21 @@ +.TH overlayroot-chroot 8 "20 July 2012" overlayroot-chroot "initramfs-tools-overlayroot" +.SH NAME +\fBoverlayroot-chroot\fP - chroot into the lower filesystem in a writable mode + +.SH SYNOPSIS +\fBoverlayroot-chroot\fP [COMMAND [ARG]...] + +.SH DESCRIPTION +\fBoverlayroot-chroot\fP is a program that sets up bind mounts for \fI/proc\fP, \fI/run\fP, and \fI/sys\fP, remounts the lower directory in an overlayfs with write capabilities and will \fBchroot\fP(8) into it. Upon exit, the bind mounts are unmounted. + +Any [COMMAND [ARG]...] are passed directly through to \fBchroot\fP(8). + +.SH SEE ALSO +.TP +\fBchroot\fP(8) +.PD + +.SH AUTHOR +This manpage and the utility were written by Dustin Kirkland <[email protected]> for Ubuntu systems (but may be used by others). Permission is granted to copy, distribute and/or modify this document and the utility under the terms of the GNU General Public License, Version 3 published by the Free Software Foundation. + +The complete text of the GNU General Public License can be found in \fI/usr/share/common-licenses/GPL\fP on Debian/Ubuntu systems, or on the web at \fIhttp://www.gnu.org/licenses/gpl.txt\fP. |