Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions config.sh.in
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@ FAKEROOT=@FAKEROOT@
ISCHROOT=@ISCHROOT@
LDCONFIG=@LDCONFIG@
LDD=@LDD@
MOUNT=@MOUNT@
PERL=@PERL@
POD2MAN=@POD2MAN@
PROVE=@PROVE@
SED=@SED@
SEQ=@SEQ@
SHELL=@SHELL@
UMOUNT=@UMOUNT@
3 changes: 3 additions & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ AC_PATH_PROG([ISCHROOT], [ischroot], [/usr/bin/ischroot], [/usr/bin:/bin:/sbin:/
AC_PATH_PROG([LDCONFIG], [ldconfig], [/sbin/chroot], [/sbin:/usr/sbin:/usr/bin:/bin:/usr/local/sbin:/usr/local/bin:$PATH])
AC_PATH_PROG([LDD], [ldd], [/usr/bin/ldd], [/usr/bin:/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin:$PATH])
AC_PATH_PROG([LS], [ls], [/bin/ls], [/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin:$PATH])
AC_PATH_PROG([MOUNT], [mount], [/bin/mount], [/usr/sbin:/sbin:/usr/bin:/bin:/usr/local/sbin:/usr/local/bin:$PATH])
AC_PATH_PROG([MKFIFO], [mkfifo], [/usr/bin/mkfifo], [/usr/bin:/bin:/sbin:/usr/sbin:/usr/local/bin:/usr/local/sbin:$PATH])
AC_PATH_PROG([PERL], [perl], [/usr/bin/perl], [/usr/bin:/bin:/usr/sbin:/sbin:/usr/bin/core_perl:/usr/local/bin:/usr/local/sbin:$PATH])
AC_PATH_PROG([POD2MAN], [pod2man], [], [/usr/bin:/bin:/usr/sbin:/sbin:/usr/bin/core_perl:/usr/local/bin:/usr/local/sbin:$PATH])
Expand All @@ -60,6 +61,8 @@ AC_PATH_PROG([SEQ], [seq gseq], [], [/usr/bin:/bin:/sbin:/usr/sbin:/usr/local/bi
AC_PATH_PROG([SH], [sh], [/bin/sh], [/bin:/usr/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin:$PATH])
AC_PATH_PROG([SHELL], [bash dash sh], [/bin/sh], [/bin:/usr/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin:$PATH])
AC_PATH_PROG([SYSTEMCTL], [systemctl], [/sbin/systemctl], [/sbin:/usr/sbin:/usr/bin:/bin:/usr/local/sbin:/usr/local/bin:$PATH])
AC_PATH_PROG([UMOUNT], [umount], [/bin/umount], [/usr/sbin:/sbin:/usr/bin:/bin:/usr/local/sbin:/usr/local/bin:$PATH])
AC_PATH_PROG([UNSHARE], [unshare], [/usr/bin/unshare], [/usr/sbin:/sbin:/usr/bin:/bin:/usr/local/sbin:/usr/local/bin:$PATH])

# Additional C macros
AC_DEFINE([FAKECHROOT], [PACKAGE_VERSION], [FAKECHROOT])
Expand Down
23 changes: 19 additions & 4 deletions scripts/Makefile.am
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
sysconfdir = @sysconfdir@/@PACKAGE@

src_wrappers = chroot.fakechroot.sh env.fakechroot.sh fakechroot.sh ldd.fakechroot.pl
src_envs = chroot.env.sh debootstrap.env.sh rinse.env.sh
src_wrappers = chroot.fakechroot.sh env.fakechroot.sh fakechroot.sh ldd.fakechroot.pl unshare.fakechroot
src_envs = chroot.env.sh debootstrap.env.sh arch-chroot.env.sh pacstrap.env.sh rinse.env.sh
example_scripts = relocatesymlinks.sh restoremode.sh savemode.sh

bin_SCRIPTS = env.fakechroot fakechroot ldd.fakechroot
bin_SCRIPTS = env.fakechroot fakechroot ldd.fakechroot unshare.fakechroot
sbin_SCRIPTS = chroot.fakechroot
sysconf_DATA = chroot.env debootstrap.env rinse.env
sysconf_DATA = chroot.env debootstrap.env arch-chroot.env pacstrap.env rinse.env

EXTRA_DIST = $(src_wrappers) $(src_envs) $(example_scripts)
CLEANFILES = $(bin_SCRIPTS) $(sbin_SCRIPTS) $(sysconf_DATA)
Expand All @@ -25,10 +25,13 @@ do_subst = $(SED) -e 's,[@]bindir[@],$(bindir),g' \
-e 's,[@]LDCONFIG[@],$(LDCONFIG),g' \
-e 's,[@]LDD[@],$(LDD),g' \
-e 's,[@]MKFIFO[@],$(MKFIFO),g' \
-e 's,[@]MOUNT[@],$(MOUNT),g' \
-e 's,[@]PERL[@],$(PERL),g' \
-e 's,[@]SEQ[@],$(SEQ),g' \
-e 's,[@]SHELL[@],$(SHELL),g' \
-e 's,[@]SYSTEMCTL[@],$(SYSTEMCTL),g' \
-e 's,[@]UMOUNT[@],$(UMOUNT),g' \
-e 's,[@]UNSHARE[@],$(UNSHARE),g' \
-e 's,[@]VERSION[@],$(VERSION),g'

chroot.env: $(srcdir)/chroot.env.sh
Expand All @@ -43,6 +46,14 @@ debootstrap.env: $(srcdir)/debootstrap.env.sh
$(do_subst) < $(srcdir)/debootstrap.env.sh > $@
chmod +x $@

arch-chroot.env: $(srcdir)/arch-chroot.env.sh
$(do_subst) < $(srcdir)/arch-chroot.env.sh > $@
chmod +x $@

pacstrap.env: $(srcdir)/pacstrap.env.sh
$(do_subst) < $(srcdir)/pacstrap.env.sh > $@
chmod +x $@

env.fakechroot: $(srcdir)/env.fakechroot.sh
$(do_subst) < $(srcdir)/env.fakechroot.sh > $@
chmod +x $@
Expand All @@ -55,6 +66,10 @@ ldd.fakechroot: $(srcdir)/ldd.fakechroot.pl
$(do_subst) < $(srcdir)/ldd.fakechroot.pl > $@
chmod +x $@

unshare.fakechroot: $(srcdir)/unshare.fakechroot.sh
$(do_subst) < $(srcdir)/unshare.fakechroot.sh > $@
chmod +x $@

rinse.env: $(srcdir)/rinse.env.sh
$(do_subst) < $(srcdir)/rinse.env.sh > $@
chmod +x $@
37 changes: 37 additions & 0 deletions scripts/arch-chroot.env.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Additional environment setting for arch-chroot

# Add /usr/sbin and /sbin to PATH if chroot command can't be found
if ! command -v chroot >/dev/null; then
PATH="${PATH:-/usr/bin:/bin}:/usr/sbin:/sbin"
export PATH
fi

# Set a list of command substitutions needed by arch-chroot
fakechroot_arch_chroot_env_cmd_subst="@MOUNT@=/bin/true
@UMOUNT@=/bin/true
@CHROOT@=${fakechroot_bindir:-@sbindir@}/chroot.fakechroot
@UNSHARE@=${fakechroot_bindir:-@bindir@}/unshare.fakechroot
@LDCONFIG@=/bin/true
@LDD@=${fakechroot_bindir:-@bindir@}/ldd.fakechroot"

FAKECHROOT_CMD_SUBST="${FAKECHROOT_CMD_SUBST:+$FAKECHROOT_CMD_SUBST:}`echo \"$fakechroot_arch_chroot_env_cmd_subst\" | tr '\012' ':'`"
export FAKECHROOT_CMD_SUBST

# Set the default list of directories excluded from being chrooted
FAKECHROOT_EXCLUDE_PATH="${FAKECHROOT_EXCLUDE_PATH:-/dev:/proc:/sys}"
export FAKECHROOT_EXCLUDE_PATH

# Set the LD_LIBRARY_PATH based on host's /etc/ld.so.conf.d/*
fakechroot_arch_chroot_env_paths=`
cat /etc/ld.so.conf /etc/ld.so.conf.d/* 2>/dev/null | grep ^/ | while read fakechroot_arch_chroot_env_d; do
printf '%s:' "$fakechroot_arch_chroot_env_d"
done
`
if [ -n "$fakechroot_arch_chroot_env_paths" ]; then
LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}${fakechroot_arch_chroot_env_paths%:}"
export LD_LIBRARY_PATH
fi

# Set the effective user ID to root
EUID=0
export EUID
37 changes: 37 additions & 0 deletions scripts/pacstrap.env.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Additional environment setting for pacstrap

# Add /usr/sbin and /sbin to PATH if chroot command can't be found
if ! command -v chroot >/dev/null; then
PATH="${PATH:-/usr/bin:/bin}:/usr/sbin:/sbin"
export PATH
fi

# Set a list of command substitutions needed by pacstrap
fakechroot_pacstrap_env_cmd_subst="@MOUNT@=/bin/true
@UMOUNT@=/bin/true
@CHROOT@=${fakechroot_bindir:-@sbindir@}/chroot.fakechroot
@UNSHARE@=${fakechroot_bindir:-@bindir@}/unshare.fakechroot
@LDCONFIG@=/bin/true
@LDD@=${fakechroot_bindir:-@bindir@}/ldd.fakechroot"

FAKECHROOT_CMD_SUBST="${FAKECHROOT_CMD_SUBST:+$FAKECHROOT_CMD_SUBST:}`echo \"$fakechroot_pacstrap_env_cmd_subst\" | tr '\012' ':'`"
export FAKECHROOT_CMD_SUBST

# Set the default list of directories excluded from being chrooted
FAKECHROOT_EXCLUDE_PATH="${FAKECHROOT_EXCLUDE_PATH:-/dev:/proc:/sys}"
export FAKECHROOT_EXCLUDE_PATH

# Set the LD_LIBRARY_PATH based on host's /etc/ld.so.conf.d/*
fakechroot_pacstrap_env_paths=`
cat /etc/ld.so.conf /etc/ld.so.conf.d/* 2>/dev/null | grep ^/ | while read fakechroot_pacstrap_env_d; do
printf '%s:' "$fakechroot_pacstrap_env_d"
done
`
if [ -n "$fakechroot_pacstrap_env_paths" ]; then
LD_LIBRARY_PATH="${LD_LIBRARY_PATH:+$LD_LIBRARY_PATH:}${fakechroot_pacstrap_env_paths%:}"
export LD_LIBRARY_PATH
fi

# Set the effective user ID to root
EUID=0
export EUID
25 changes: 25 additions & 0 deletions scripts/unshare.fakechroot.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/bin/sh

# unshare
#
# Replacement for unshare command that calls program directly
#
# (c) 2020 Gaël PORTAY <gael.portay@gmail.com>, LGPL

SHELL="${SHELL:-/bin/sh}"
while [ $# -gt 0 ]; do
case "$1" in
-*)
;;
--)
shift
break
;;
*)
break
;;
esac
shift
done

exec "${@:-$SHELL}"