Revert "makechrootpkg: sync_chroot: Make more general."
This reverts commit6d1992909c
. It has never worked. In commitc86823a2d4
it was noted that it compared the device numbers for [[ $1 = $1 ]] which was a useless check and always returned true, for *any* btrfs filesystem. Now that the function is corrected to compare [[ $1 = $2 ]] the check is still useless, but this time because it always returns false -- btrfs subvolumes on the same filesystem do *not* share device numbers. So let's go back to the original working implementation that only matters in terms of makechrootpkg, and just checks if makechrootpkg's root working directory is btrfs (in which case we know it will be a subvolume because mkarchroot will create it that way). This restores our special support for the btrfs filesystem. Signed-off-by: Eli Schwartz <eschwartz@archlinux.org>
This commit is contained in:
parent
321e998020
commit
ad4b66830a
|
@ -37,14 +37,6 @@ is_subvolume() {
|
|||
[[ -e "$1" && "$(stat -f -c %T "$1")" == btrfs && "$(stat -c %i "$1")" == 256 ]]
|
||||
}
|
||||
|
||||
##
|
||||
# usage : is_same_fs( $path_a, $path_b )
|
||||
# return : whether $path_a and $path_b are on the same filesystem
|
||||
##
|
||||
is_same_fs() {
|
||||
[[ "$(stat -c %d "$1")" == "$(stat -c %d "$2")" ]]
|
||||
}
|
||||
|
||||
##
|
||||
# usage : subvolume_delete_recursive( $path )
|
||||
#
|
||||
|
|
|
@ -75,37 +75,31 @@ load_vars() {
|
|||
return 0
|
||||
}
|
||||
|
||||
# Usage: sync_chroot $rootdir $copydir [$copy]
|
||||
# Usage: sync_chroot $chrootdir $copydir [$copy]
|
||||
sync_chroot() {
|
||||
local rootdir=$1
|
||||
local chrootdir=$1
|
||||
local copydir=$2
|
||||
local copy=${3:-$2}
|
||||
|
||||
if [[ "$rootdir" -ef "$copydir" ]]; then
|
||||
if [[ "$chrootdir/root" -ef "$copydir" ]]; then
|
||||
error 'Cannot sync copy with itself: %s' "$copydir"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# Get a read lock on the root chroot to make
|
||||
# sure we don't clone a half-updated chroot
|
||||
slock 8 "$rootdir.lock" \
|
||||
"Locking clean chroot [%s]" "$rootdir"
|
||||
slock 8 "$chrootdir/root.lock" \
|
||||
"Locking clean chroot [%s]" "$chrootdir/root"
|
||||
|
||||
stat_busy "Synchronizing chroot copy [%s] -> [%s]" "$rootdir" "$copy"
|
||||
if is_subvolume "$rootdir" && is_same_fs "$rootdir" "$(dirname -- "$copydir")" && ! mountpoint -q "$copydir"; then
|
||||
if is_subvolume "$copydir"; then
|
||||
subvolume_delete_recursive "$copydir" ||
|
||||
die "Unable to delete subvolume %s" "$copydir"
|
||||
else
|
||||
# avoid change of filesystem in case of an umount failure
|
||||
rm --recursive --force --one-file-system "$copydir" ||
|
||||
die "Unable to delete %s" "$copydir"
|
||||
fi
|
||||
btrfs subvolume snapshot "$rootdir" "$copydir" >/dev/null ||
|
||||
stat_busy "Synchronizing chroot copy [%s] -> [%s]" "$chrootdir/root" "$copy"
|
||||
if is_btrfs "$chrootdir" && ! mountpoint -q "$copydir"; then
|
||||
subvolume_delete_recursive "$copydir" ||
|
||||
die "Unable to delete subvolume %s" "$copydir"
|
||||
btrfs subvolume snapshot "$chrootdir/root" "$copydir" >/dev/null ||
|
||||
die "Unable to create subvolume %s" "$copydir"
|
||||
else
|
||||
mkdir -p "$copydir"
|
||||
rsync -a --delete -q -W -x "$rootdir/" "$copydir"
|
||||
rsync -a --delete -q -W -x "$chrootdir/root/" "$copydir"
|
||||
fi
|
||||
stat_done
|
||||
|
||||
|
@ -388,7 +382,7 @@ main() {
|
|||
lock 9 "$copydir.lock" "Locking chroot copy [%s]" "$copy"
|
||||
|
||||
if [[ ! -d $copydir ]] || $clean_first; then
|
||||
sync_chroot "$chrootdir/root" "$copydir" "$copy"
|
||||
sync_chroot "$chrootdir" "$copydir" "$copy"
|
||||
fi
|
||||
|
||||
$update_first && arch-nspawn "$copydir" \
|
||||
|
|
Loading…
Reference in New Issue