xbps-src: added -t option to create a temporary masterdir.

This temporary masterdir contains hardlinks of files stored in a real
masterdir, and once the target has finished will be removed.

Could be useful to create fully up to date and immutable real masterdirs
that are used as base for the temporary masterdirs.
This commit is contained in:
Juan RP 2015-02-27 23:00:55 +01:00
parent 9c933eda04
commit fcf24b660f
2 changed files with 34 additions and 4 deletions

View file

@ -98,10 +98,10 @@ chroot_prepare() {
mkdir -p $XBPS_MASTERDIR/etc/xbps.d
echo "syslog=false" >> $XBPS_MASTERDIR/etc/xbps.d/xbps.conf
echo "cachedir=/host/repocache" >> $XBPS_MASTERDIR/etc/xbps.d/xbps.conf
ln -s /dev/null $XBPS_MASTERDIR/etc/xbps.d/00-repository-main.conf
ln -sf /dev/null $XBPS_MASTERDIR/etc/xbps.d/00-repository-main.conf
# Prepare default locale: en_US.UTF-8.
if [ -s ${XBPS_MASTERDIR}/etc/default/libc-locales ]; then
if [ -z "$XBPS_TEMP_MASTERDIR" -a -s ${XBPS_MASTERDIR}/etc/default/libc-locales ]; then
echo 'en_US.UTF-8 UTF-8' >> ${XBPS_MASTERDIR}/etc/default/libc-locales
$XBPS_RECONFIGURE_CMD -f glibc-locales
fi

View file

@ -159,6 +159,11 @@ Options:
be stored into <hostdir>/binpkgs/<repo>.
This alternative repository will also be used to resolve dependencies
with highest priority order than others.
-t Create a temporary masterdir to not pollute the current one. Note that
the existing masterdir must be fully populated with binary-bootstrap first.
Once the target has finished, this temporary masterdir will be removed.
_EOF
}
@ -202,6 +207,20 @@ check_config_vars() {
fi
}
create_temporary_masterdir() {
local tmpmdir=$(mktemp -d -q -p $XBPS_DISTDIR masterdir.XXXXXXXXX || exit 1)
echo "=> Creating a temporary masterdir at $tmpmdir, please wait..."
cp -al $XBPS_MASTERDIR/* $tmpmdir/
if [ $? -ne 0 ]; then
echo "ERROR: failed to setup temporary masterdir $tmpmdir!"
exit 1
fi
export CHROOT_READY=1
export XBPS_MASTERDIR=$tmpmdir
}
check_build_requirements() {
local found
@ -314,7 +333,7 @@ export XBPS_MACHINE=$(uname -m)
#
XBPS_OPTIONS=
while getopts "a:CfgGhH:Ij:Lm:No:r:V" opt; do
while getopts "a:CfgGhH:Ij:Lm:No:r:tV" opt; do
case $opt in
a) readonly XBPS_CROSS_BUILD="$OPTARG"; XBPS_OPTIONS+="-a $OPTARG ";;
C) readonly XBPS_KEEP_ALL=1; XBPS_OPTIONS+="-C ";;
@ -330,6 +349,7 @@ while getopts "a:CfgGhH:Ij:Lm:No:r:V" opt; do
N) readonly XBPS_SKIP_REMOTEREPOS=1; XBPS_OPTIONS+="-N ";;
o) readonly XBPS_PKG_OPTIONS="$OPTARG"; XBPS_OPTIONS+="-o $OPTARG ";;
r) readonly XBPS_ALT_REPOSITORY="$OPTARG"; XBPS_OPTIONS+="-r $OPTARG ";;
t) readonly XBPS_TEMP_MASTERDIR=1; XBPS_KEEP_ALL=1; XBPS_OPTIONS+=" -t -C";;
V) echo $XBPS_SRC_VERSION && exit 0;;
--) shift; break;;
esac
@ -382,6 +402,11 @@ fi
#
check_config_vars
if [ -z "$IN_CHROOT" -a -n "$XBPS_TEMP_MASTERDIR" ]; then
# Create a temporary masterdir (hardlinked) for this build.
create_temporary_masterdir
fi
if [ -n "$XBPS_HOSTDIR" ]; then
export XBPS_REPOSITORY=$XBPS_HOSTDIR/binpkgs
readonly XBPS_SRCDISTDIR=$XBPS_HOSTDIR/sources
@ -469,7 +494,7 @@ export XBPS_SHUTILSDIR XBPS_CROSSPFDIR XBPS_TRIGGERSDIR \
XBPS_CCACHE XBPS_DISTCC XBPS_DISTCC_HOSTS XBPS_SKIP_DEPS \
XBPS_SKIP_REMOTEREPOS XBPS_CROSS_BUILD XBPS_PKG_OPTIONS \
XBPS_CONFIG_FILE XBPS_KEEP_ALL XBPS_HOSTDIR XBPS_MASTERDIR \
XBPS_SRC_VERSION XBPS_DESTDIR XBPS_MACHINE
XBPS_SRC_VERSION XBPS_DESTDIR XBPS_MACHINE XBPS_TEMP_MASTERDIR
for i in REPOSITORY DESTDIR BUILDDIR SRCDISTDIR; do
eval val="\$XBPS_$i"
@ -650,5 +675,10 @@ case "$XBPS_TARGET" in
;;
esac
if [ -n "$XBPS_TEMP_MASTERDIR" ]; then
msg_normal "Removing temporary masterdir at $XBPS_MASTERDIR...\n"
rm -rf $XBPS_MASTERDIR
fi
# Agur
exit $?