#!/bin/sh . sami/btrfs-functions.sh . sami/var.sh disable_stdout() { exec 3>&1; exec >&2; } enable_stdout() { exec >&3; } with_stdout() { enable_stdout; "$@"; disable_stdout; } create_layer_filesystem() { [ ! -e "$layer_file" ] || return ! mountpoint "$mountpoint" || return mkdir -p "$mountpoint" && sex dd if=/dev/zero of="$layer_file" bs=1M count="$layer_size" && sex mount -o subvol=/,compress "$seed_file" "$mountpoint" && layer_dev=$(losetup -f --show "$layer_file") && sex btrfs device add "$layer_dev" "$mountpoint" && mount -o rw,remount "$mountpoint" } finish() { btrfs_replace_default_subvolume_with "$mountpoint"/"$receive_subv" && umount "$mountpoint" && sex btrfstune -S1 "$layer_file" && losetup -d "$layer_dev" } set -e disable_stdout receive_dest=$1 receive_subv=$2 [ "$receive_subv" ] [ "$receive_dest" ] mountpoint=$(realpath -m --relative-base=. "$receive_dest") seed_file=sami/debian-live-8.4.0-amd64-standard.btrfs layer_file=sami/debian-live-8.4.0-amd64-standard.layer.$receive_subv.btrfs layer_size=1000 create_layer_filesystem with_stdout sex btrfs receive "$mountpoint" finish