diff --git a/debian/control b/debian/control index c79a8860..4481f5ec 100644 --- a/debian/control +++ b/debian/control @@ -16,13 +16,15 @@ Bugs: mailto:bugs@grml.org Package: grml-etc-core Architecture: all Breaks: + grml-scripts (<< 2.15.0~), grml-tips (<< 0.8.5) Conflicts: grml-autoconfig (<< 0.5-7), grml-etc (<< 0.8-11), - grml-scripts (<< 0.8-27), + grml-scripts (<< 2.15.0~), grml-scripts-core (<< 2.1.5~), Replaces: + grml-scripts (<< 2.15.0~), grml-scripts-core (<< 2.1.5~), vim-common, Provides: @@ -41,3 +43,4 @@ Description: core etcetera files for the Grml system systems as well. This package also includes cpu-screen and ip-screen, as they are used by the included screen configuration. + This package also includes grml-chroot. diff --git a/debian/install b/debian/install index 77228799..6bdbaacb 100644 --- a/debian/install +++ b/debian/install @@ -1,3 +1,4 @@ etc usr_bin/* usr/bin/ +usr_sbin/* usr/sbin/ usr_share_grml/* usr/share/grml/ diff --git a/usr_sbin/grml-chroot b/usr_sbin/grml-chroot new file mode 100755 index 00000000..b13b57e0 --- /dev/null +++ b/usr_sbin/grml-chroot @@ -0,0 +1,130 @@ +#!/bin/bash +# Filename: grml-chroot +# Purpose: Program to chroot into another system +# Authors: grml-team (grml.org), (c) Michael Gebetsroither +# Bug-Reports: see http://grml.org/bugs/ +# License: This file is licensed under the GPL v2. +################################################################################ + +PROG_NAME_=$(basename "$0") +DEST_="" +MOUNTED_="" # all mounted destinations + + +function die +{ + echo "Error: $*" >&2 + exit 1 +} + +function printUsage +{ + cat <1; i--) printf("%s ",$i); print $1; }') + for i in $reverse; do + umount "${DEST_}/$i" + done +} + + +### +### __MAIN +### + +while getopts "h" opt; do + case "$opt" in + h) printUsage; exit 0 ;; + ?) printUsage; exit 64 ;; + esac +done +shift $((OPTIND - 1)) + +if (( $# < 1 )); then + printUsage + die "Wrong number of arguments." +fi + +if ! command -v awk >/dev/null 2>&1 ; then + die "No awk binary found, required for execution." +fi + +DEST_="$1"; shift + +if [ ! -d "$DEST_" ]; then + die "Target chroot does not exist: $DEST_" +fi + + + +if [ -f "$DEST_"/proc/cmdline ] ; then + echo "Looks like $DEST_ already has filesystems mounted, skipping." +else + mountit "proc" "proc" + mountit "sysfs" "sys" + mountit "/dev" "dev" "--bind" + mountit "devpts" "dev/pts" + if [ -d /sys/firmware/efi/efivars ] ; then + mountit "efivarfs" "sys/firmware/efi/efivars" + fi + if [ -d "$DEST_"/run/udev ] && [ -d /run/udev ] ; then + mountit "/run/udev" "/run/udev" "--bind" + fi +fi + +WROTE_DEBIAN_CHROOT="" +if [ ! -f "$DEST_"/etc/debian_chroot ]; then + WROTE_DEBIAN_CHROOT="yes" + echo "Writing /etc/debian_chroot ..." + cat "$DEST_"/etc/hostname > "$DEST_"/etc/debian_chroot +fi + +if (( $# < 1 )); then + chroot "$DEST_" + RC=$? +else + chroot "$DEST_" "$@" + RC=$? +fi +umount_all + +if [ -n "$WROTE_DEBIAN_CHROOT" ]; then + rm "$DEST_"/etc/debian_chroot +fi + +exit $RC