commit:     7a76ae8fe8dde45d8bfdf9b76453bb1b66acbcb7
Author:     Georgy Yakovlev <gyakovlev <AT> gentoo <DOT> org>
AuthorDate: Fri Jun  4 22:54:10 2021 +0000
Commit:     Georgy Yakovlev <gyakovlev <AT> gentoo <DOT> org>
CommitDate: Fri Jun  4 23:15:00 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=7a76ae8f

dev-util/schroot: add portage and zfs clone setup.d scripts

used by some releng machines

Signed-off-by: Georgy Yakovlev <gyakovlev <AT> gentoo.org>

 dev-util/schroot/files/06zfscloneopts              | 44 ++++++++++++++++
 dev-util/schroot/files/11gentoo                    | 61 ++++++++++++++++++++++
 dev-util/schroot/files/schroot_prompt.sh           |  1 +
 ....10_p12.ebuild => schroot-1.6.10_p12-r1.ebuild} | 18 +++++++
 4 files changed, 124 insertions(+)

diff --git a/dev-util/schroot/files/06zfscloneopts 
b/dev-util/schroot/files/06zfscloneopts
new file mode 100644
index 00000000000..e66f0885e78
--- /dev/null
+++ b/dev-util/schroot/files/06zfscloneopts
@@ -0,0 +1,44 @@
+#!/bin/sh
+# Copyright © 2020       Georgy Yakovlev <[email protected]>
+#
+# schroot 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, either version 3 of the License, or
+# (at your option) any later version.
+#
+# schroot 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
+
+. "$SETUP_DATA_DIR/common-data"
+. "$SETUP_DATA_DIR/common-functions"
+. "$SETUP_DATA_DIR/common-config"
+
+if [ "$CHROOT_TYPE" = "zfs-snapshot" ] && [ -n "$CHROOT_ZFS_CLONE_NAME" ]; then
+
+    if [ $STAGE = "setup-start" ]; then
+
+        if ! zfs list "$CHROOT_ZFS_CLONE_NAME" >/dev/null 2>&1; then
+            fatal "Dataset '$CHROOT_ZFS_CLONE_NAME' does not exist"
+        fi
+
+       if [ "${ZFS_CLONE_OPTIONS+set}" = "set" ]; then
+               if [ "$VERBOSE" = "verbose" ]; then
+                       zfs set $ZFS_CLONE_OPTIONS \
+                               "$CHROOT_ZFS_CLONE_NAME"
+               else
+                       zfs set $ZFS_CLONE_OPTIONS \
+                               "$CHROOT_ZFS_CLONE_NAME" > /dev/null
+               fi
+        fi
+    fi
+fi

diff --git a/dev-util/schroot/files/11gentoo b/dev-util/schroot/files/11gentoo
new file mode 100644
index 00000000000..ddf2df305c6
--- /dev/null
+++ b/dev-util/schroot/files/11gentoo
@@ -0,0 +1,61 @@
+#!/bin/sh
+# Copyright © 2020     Georgy Yakovlev <[email protected]>
+#
+# schroot 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, either version 3 of the License, or
+# (at your option) any later version.
+#
+# schroot 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
+
+. "$SETUP_DATA_DIR/common-data"
+. "$SETUP_DATA_DIR/common-functions"
+. "$SETUP_DATA_DIR/common-config"
+
+if [ "$VERBOSE" = "verbose" ]; then
+       VERBOSE_OPT="true"
+fi
+
+if [ "${PORTAGE_BASE_TMPDIR+set}" = "set" ] ; then
+       if [ "$STAGE" = "setup-start" ]; then
+               if [ ! -d "$PORTAGE_BASE_TMPDIR" ]; then
+                       fatal "$PORTAGE_BASE_TMPDIR does not exist or not a 
directory"
+               fi
+               if [ "x$SESSION_ID" = x ]; then
+                       fatal "SESSION_ID is not set"
+               fi
+               if [ ! -d "$PORTAGE_BASE_TMPDIR/schroot-$SESSION_ID" ]; then
+                       mkdir ${VERBOSE_OPT+-v} \
+                               "$PORTAGE_BASE_TMPDIR/schroot-$SESSION_ID"
+               fi
+               mkdir -p ${VERBOSE_OPT+-v} 
"$CHROOT_MOUNT_LOCATION/var/tmp/portage"
+               mount --make-private -o bind ${VERBOSE_OPT+-v}\
+                       "$PORTAGE_BASE_TMPDIR/schroot-$SESSION_ID" \
+                       "$CHROOT_MOUNT_LOCATION/var/tmp/portage"
+
+       elif [ "$STAGE" = "setup-stop" ]; then
+               if [ "$CHROOT_SESSION_PURGE" = true ] || \
+               [ "${CHROOT_NAME/#*_master/m}" = "m" ]; then
+                       umount ${VERBOSE_OPT+-v} \
+                               "$CHROOT_MOUNT_LOCATION/var/tmp/portage"
+                       if [ -d "$PORTAGE_BASE_TMPDIR/schroot-$SESSION_ID" ]; 
then
+                                if [ "x$SESSION_ID" != x ]; then
+                                       rm -fr ${VERBOSE_OPT+-v} \
+                                               
"$PORTAGE_BASE_TMPDIR/schroot-$SESSION_ID"
+                               fi
+                       fi
+               fi
+
+       fi
+fi

diff --git a/dev-util/schroot/files/schroot_prompt.sh 
b/dev-util/schroot/files/schroot_prompt.sh
new file mode 100644
index 00000000000..bd72f2ce5b8
--- /dev/null
+++ b/dev-util/schroot/files/schroot_prompt.sh
@@ -0,0 +1 @@
+[[ -f /etc/debian_chroot ]] && PS1="chr: $(< /etc/debian_chroot) ${PS1}"

diff --git a/dev-util/schroot/schroot-1.6.10_p12.ebuild 
b/dev-util/schroot/schroot-1.6.10_p12-r1.ebuild
similarity index 84%
rename from dev-util/schroot/schroot-1.6.10_p12.ebuild
rename to dev-util/schroot/schroot-1.6.10_p12-r1.ebuild
index d1292d3caaa..0a4a39d4ed2 100644
--- a/dev-util/schroot/schroot-1.6.10_p12.ebuild
+++ b/dev-util/schroot/schroot-1.6.10_p12-r1.ebuild
@@ -101,6 +101,24 @@ src_test() {
 src_install() {
        cmake_src_install
 
+       # debian-stype PS1 for chroot
+       # checks for /etc/debian_chroot file, which is created by schroot
+       insinto /etc/bash/bashrc.d
+       doins "${FILESDIR}/schroot_prompt.sh"
+
+       # gentoo /var/tmp/portage handler
+       # e.g. portage.base.tmpdir=/var/tmp/portage in config file
+       # will use a subdirectory of hosts $PORTAGE_TMPDIR
+       exeinto /etc/schroot/setup.d
+       doexe "${FILESDIR}/11gentoo"
+
+       # support for zfs clone options.
+       # zfs.clone.options=com.sun:auto-snapshot=false
+       if use zfs; then
+               exeinto /etc/schroot/setup.d
+               doexe "${FILESDIR}/06zfscloneopts"
+       fi
+
        keepdir /var/lib/schroot/{session,unpack,union/{overlay,underlay}}
 
        docinto /usr/share/doc/${PF}/contrib/setup.d

Reply via email to