Allow multiple instances of sbopkg to run simultaneously.

This patch makes it possible to run multiple sbopkg instances
simultaneously in different $SBOPKGTMP prefixes.
There are some known (and possibly unknown) caveats the user
should be aware before enabling this option -- I documented the
ones I could think of.

Signed-off-by: Mauro Giachero <mauro.giachero@gmail.com>
This commit is contained in:
mauro.giachero 2009-09-25 09:17:23 +00:00
parent 51b52b748d
commit 0cf9aea14a
4 changed files with 78 additions and 3 deletions

View file

@ -17,4 +17,7 @@ enhancements:
RHS of [[ commands using the =~ operator which broke the repo file
validation, among other things. Thanks to SiegeX, Zmyrgel, and BCarey for
the reports and suggestions.
* Add the ability to run multiple sbopkg instances simultaneously. This has
been suggested many times in the past. Users should read the sbopkg.conf
man page before using this option (which is disabled by default).
+--------------------------+

View file

@ -20,6 +20,11 @@ LOGFILE=$LOGDIR/sbopkg-build-log
DEBUG=0
CLEANUP=NO
# Set this to YES to allow multiple instances of sbopkg to run.
# Please read the sbopkg.conf(5) man page before doing so
# (otherwise, don't even think about submitting a problem report).
ALLOW_MULTI=NO
# The following variables are used by sbopkg and by the SlackBuild scripts
# themselves. They are exported for this reason.
export TMP=${TMP:-/tmp/SBo}

View file

@ -138,6 +138,40 @@ from the environment or from the configuration files is ignored.
The default value of CLEANUP is: NO.
.TP 5
.B ALLOW_MULTI
.br
When set to YES, this option allows the user to run multiple instances
of sbopkg.
Please understand that this option is provided for convenience, but
given the number of potential issues you can face when enabling this
(and we aren't going to try to work around users doing silly things),
you should consider working with ALLOW_MULTI=YES as an EXPERIMENTAL
UNSUPPORTED feature. If you encounter problems, please try to make sure
these aren't caused by yourself doing improper things.
For reference, these are some of the things you shouldn't do with this
option enabled:
.RS 6
.IP \[bu] 2
run an ALLOW_MULTI=NO instance together with one or more having
ALLOW_MULTI=YES
.IP \[bu]
sync a repository when another instance is using it
.IP \[bu]
change the branch of a git repository when another instance is using it
(you can do this with rsync -- i.e. SlackBuild.org -- repos)
.IP \[bu]
simultaneously build or install the same package from different instances
.IP \[bu]
save a queue file while using it from another instance
.RE
.RS 5
There can be more unsafe situations we haven't thought about. Take care.
.RE
.TP 5
.B DEBUG
.br

View file

@ -106,7 +106,7 @@ config_check() {
# Some configuration options are mandatory
for VAR in REPO_ROOT LOGDIR QUEUEDIR SRCDIR SBOPKGTMP REPO_NAME \
REPO_BRANCH KEEPLOG CLEANUP LOGFILE DEBUG TMP OUTPUT RSYNCFLAGS \
WGETFLAGS DIFF DIFFOPTS SBOPKG_REPOS_D; do
WGETFLAGS DIFF DIFFOPTS SBOPKG_REPOS_D ALLOW_MULTI; do
if [[ -z "${!VAR}" ]]; then
MISSING+="$VAR "
fi
@ -141,6 +141,22 @@ EOF
if [[ $CLEANUP == [Nn][Oo] ]]; then
unset CLEANUP
fi
if [[ $ALLOW_MULTI == [Nn][Oo] ]]; then
unset ALLOW_MULTI
fi
# If multiple instances of sbopkg are allowed, they need their own
# private $SBOPKGTMP.
# Since simply appending the cookie makes sbopkg to inform the user about
# the creation of the new $SBOPKGTMP directory on every startup, we do a
# little more setup here.
if [[ $ALLOW_MULTI ]]; then
# Note: this ck_dir line is copied from directory_checks
ck_dir $SBOPKGTMP \
"Creating local sbopkg TMP directory $SBOPKGTMP."
SBOPKGTMP+=/sbopkg-instance-$(mcookie)
mkdir -p $SBOPKGTMP
fi
# Make sure there are no unexpected files in $SBOPKGTMP
if [[ -n $(find $SBOPKGTMP -mindepth 1 -maxdepth 1 -not -name sbopkg\* \
@ -294,7 +310,7 @@ directory_checks() {
ck_dir $SBOPKGTMP \
"Creating local sbopkg TMP directory $SBOPKGTMP."
ck_dir $TMP \
"Creating local SBo TMP directory $TMP."
"Creating local SBo TMP directory $TMP." # Also see config_check()
ck_dir $OUTPUT \
"Creating local package output directory $OUTPUT."
@ -3873,6 +3889,23 @@ cleanup() {
rm -f $SBOPKGTMP/sbopkg-tmp-*
rm -f $PIDFILE
if [[ $ALLOW_MULTI ]]; then
if ! rmdir $SBOPKGTMP 2>/dev/null; then
cat <<EOF
$SCRIPT was unable to remove the temporary folder:
$SBOPKGTMP
since it still contains some file or directory.
Please file a bug report telling us how you managed to trigger this
message and append to it the output of:
find $SBOPKGTMP
EOF
fi
fi
# Back to the directory the user started sbopkg in
cd "$CWD"
}
@ -4290,7 +4323,7 @@ fi
directory_checks
# Check for another instance
pid_check
[[ $ALLOW_MULTI ]] || pid_check
if [[ $DIAG ]]; then
if [[ $TERM =~ ^rxvt.* || $TERM =~ ^screen.* ]]; then