diff --git a/tools/build.sh b/tools/build.sh index e9bb81a..5b029d6 100755 --- a/tools/build.sh +++ b/tools/build.sh @@ -11,7 +11,7 @@ die() { } die_usage() { - die "usage: $0 example-1.2.3-0 [--purge]" + die "usage: $0 example-1.2.3-0 [--purge] [--bind directory]" } ere_quote() { @@ -23,9 +23,10 @@ log_cmd() { "$@" } -eval set -- $(getopt --options "" --longoptions purge -- "$@") +eval set -- $(getopt --options "" --longoptions purge,bind: -- "$@") while true; do case "$1" in + --bind) opt_bind=1;bind_dir=$2;shift 2;; --purge) opt_purge=1;shift;; --) shift;break;; *) die "internal error: unknown option $!" @@ -57,10 +58,27 @@ if [ -n "$opt_purge" ]; then test -z "$PKG" && die "internal error: PKG is empty" log_cmd find "/pkg/$PKG" -mindepth 1 -delete test "$(stat -c %U "/pkg/$PKG")" = "build" || log_cmd chown build:build "/pkg/$PKG" + if [ -n "$opt_bind" -a -d "$bind_dir/pkg_bindmnt" ]; then + log_cmd find "$bind_dir/pkg_bindmnt" -mindepth 1 -delete + fi fi chmod a+rx "$PKG.build.sh" +if [ -n "$opt_bind" ]; then + mkdir -p "$bind_dir/pkg_bindmnt" + chown build:build "$bind_dir/pkg_bindmnt" + # check that '/pkg/$PKG' differs from intended location (i.e. isn't mounted already) + if [ $(stat --format=%D:%i "$bind_dir/pkg_bindmnt") != $(stat --format=%D:%i /pkg/$PKG) ]; then + log_cmd mount --bind "$bind_dir/pkg_bindmnt" /pkg/$PKG + # prevent automount from unmounting + exec 3