From 6a97c0d3f439d71be8242522d440affbe335e406 Mon Sep 17 00:00:00 2001 From: Derek Smith Date: Sat, 18 Mar 2023 18:12:09 -0400 Subject: [PATCH] Improve volume mounting. --- create_lxc_base.sh | 26 ++++++++++++++++---------- deploy.sh | 2 +- deploy_vm.sh | 10 ++++++++++ 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/create_lxc_base.sh b/create_lxc_base.sh index 52ec624..023277a 100755 --- a/create_lxc_base.sh +++ b/create_lxc_base.sh @@ -55,14 +55,17 @@ else # of chainstate/blocks. for CHAIN in testnet mainnet; do for DATA in blocks chainstate; do - DATA_PATH="/home/ubuntu/.ss/cache/bitcoin/$CHAIN/$DATA" - if [ -d "$DATA_PATH" ]; then - COMPLETE_FILE_PATH="$DATA_PATH/complete" - if lxc exec "$BASE_IMAGE_VM_NAME" -- [ ! -f "$COMPLETE_FILE_PATH" ]; then - lxc file push --recursive --project=default "$DATA_PATH/" "$BASE_IMAGE_VM_NAME/home/ubuntu/.ss/cache/bitcoin/$CHAIN/$DATA/" - lxc exec "$BASE_IMAGE_VM_NAME" -- su ubuntu - bash -c "echo $(date) > $COMPLETE_FILE_PATH" - else - echo "INFO: it appears as though $CHAIN/$DATA has already been initialized. Continuing." + # if the storage snapshot doesn't yet exist, create it. + if ! lxc storage volume list ss-base -q --format csv -c n | grep -q "$CHAIN-$DATA/snap0"; then + DATA_PATH="/home/ubuntu/.ss/cache/bitcoin/$CHAIN/$DATA" + if [ -d "$DATA_PATH" ]; then + COMPLETE_FILE_PATH="$DATA_PATH/complete" + if lxc exec "$BASE_IMAGE_VM_NAME" -- [ ! -f "$COMPLETE_FILE_PATH" ]; then + lxc file push --recursive --uid=999 --guid=999 --project=default "$DATA_PATH/" "$BASE_IMAGE_VM_NAME/home/ubuntu/.ss/cache/bitcoin/$CHAIN/$DATA/" + lxc exec "$BASE_IMAGE_VM_NAME" -- su ubuntu - bash -c "echo $(date) > $COMPLETE_FILE_PATH" + else + echo "INFO: it appears as though $CHAIN/$DATA has already been initialized. Continuing." + fi fi fi done @@ -77,12 +80,15 @@ fi echo "INFO: Publishing '$BASE_IMAGE_VM_NAME' as image '$DOCKER_BASE_IMAGE_NAME'. Please wait." lxc publish --public "$BASE_IMAGE_VM_NAME/$UBUNTU_BASE_IMAGE_NAME" --project=default --alias="$DOCKER_BASE_IMAGE_NAME" -echo "INFO: Success! We can now delete the base image." +echo "INFO: Success creating the base image. Deleting artifacts from the build process." lxc delete -f "$BASE_IMAGE_VM_NAME" # now let's get a snapshot of each of the blocks/chainstate directories. for CHAIN in testnet mainnet; do for DATA in blocks chainstate; do - lxc storage volume snapshot ss-base --project=default "$CHAIN-$DATA" + if ! lxc storage volume list ss-base -q --format csv -c n | grep -q "$CHAIN-$DATA/snap0"; then + echo "INFO: Creating a snapshot 'ss-base/$CHAIN-$DATA/snap0'." + lxc storage volume snapshot ss-base --project=default "$CHAIN-$DATA" + fi done done diff --git a/deploy.sh b/deploy.sh index 4bbda1f..ccabe38 100755 --- a/deploy.sh +++ b/deploy.sh @@ -354,7 +354,7 @@ EOL # create the lxc project as specified by PROJECT_NAME if ! lxc project list | grep -q "$PROJECT_NAME"; then lxc project create "$PROJECT_NAME" - lxc project set "$PROJECT_NAME" features.networks=true features.images=false + lxc project set "$PROJECT_NAME" features.networks=true features.images=false features.storage.volumes=false fi # Goal is to get the macvlan interface. diff --git a/deploy_vm.sh b/deploy_vm.sh index 3b52dcc..603fb6c 100755 --- a/deploy_vm.sh +++ b/deploy_vm.sh @@ -41,6 +41,16 @@ if ! lxc list --format csv | grep -q "$LXD_VM_NAME"; then lxc config set "$LXD_VM_NAME" "volatile.enp5s0.hwaddr=$MAC_ADDRESS_TO_PROVISION" lxc config device override "$LXD_VM_NAME" root size="${ROOT_DISK_SIZE_GB}GB" + # of chainstate/blocks. + # for CHAIN in testnet mainnet; do + # for DATA in blocks chainstate; do + # MOUNT_PATH="/$CHAIN/$DATA" + # if lxc storage volume list ss-base -q --format csv -c n | grep -q "$CHAIN-$DATA/snap0"; then + # lxc storage volume attach ss-base "$CHAIN-$DATA" "$LXD_VM_NAME" "$MOUNT_PATH" + # fi + # done + # done + lxc start "$LXD_VM_NAME" sleep 10