diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..dd1999e5 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Set the default behavior, in case people don't have core.autocrlf set. +* text=auto eol=lf \ No newline at end of file diff --git a/common b/common index efe6e586..311f2afe 100644 --- a/common +++ b/common @@ -129,7 +129,15 @@ ensure_permissions() { fi if [ -d "$worlds_dir" ]; then chmod "$WORLDS_DIRECTORY_PERMISSIONS" "$worlds_dir" - chmod "$WORLDS_FILE_PERMISSIONS" "${worlds_dir}/"* + # Set permissions for all folders in the worlds dir + find "${worlds_dir}/" -type d -exec chmod "$WORLDS_DIRECTORY_PERMISSIONS" {} \; + # Set permissions for all files in the worlds dir + find "${worlds_dir}/" -type f -exec chmod "$WORLDS_FILE_PERMISSIONS" {} \; + # Set permissions specifically for WORLD_NAME, misses auto-backup files (which will cause a failure to start server) + #if [ -d "${worlds_dir}/${WORLD_NAME}" ]; then + # chmod "$WORLDS_DIRECTORY_PERMISSIONS" "$worlds_dir/${WORLD_NAME}" + # chmod "$WORLDS_FILE_PERMISSIONS" "${worlds_dir}/${WORLD_NAME}/"* + #fi fi if [ "$VALHEIM_PLUS" = true ] && [ -d /config/valheimplus ]; then find /config/valheimplus -type d -exec chmod "$VALHEIM_PLUS_CONFIG_DIRECTORY_PERMISSIONS" "{}" + diff --git a/valheim-backup b/valheim-backup index 1aecba5b..144f09bf 100755 --- a/valheim-backup +++ b/valheim-backup @@ -11,6 +11,8 @@ BACKUPS_DIRECTORY=${BACKUPS_DIRECTORY%/} pidfile=$valheim_backup_pidfile next_backup=$(date +%s) run=true +oldWorldFileExtensions=(db fwl db.old fwl.old) +worldFileExtensions=(db2 fwl2 chunks chunk ok) main() { @@ -59,19 +61,23 @@ backup() { mkdir -p "$BACKUPS_DIRECTORY" chmod "$BACKUPS_DIRECTORY_PERMISSIONS" "$BACKUPS_DIRECTORY" + ensure_permissions # in case new chunks have been created + if [ "${BACKUPS_ZIP}" = true ]; then backup_file="$BACKUPS_DIRECTORY/worlds-$(date +%Y%m%d-%H%M%S).zip" pre_backup_hook "$backup_file" info "Backing up Valheim server worlds to $backup_file" - zip -r "$backup_file" "$WORLDS_DIR/" -x '*_backup_auto-*.*' + zip -r "$backup_file" "$WORLDS_DIR/" -x '*_backup_auto-*.*' '*_backup_auto-*/*' chmod "$BACKUPS_FILE_PERMISSIONS" "$backup_file" post_backup_hook "$backup_file" else local world_file + local world_folder + local backup_folder local backup_suffix backup_suffix=$(date +%Y%m%d-%H%M%S) - for extension in {db,fwl,db.old,fwl.old}; do + for extension in "${oldWorldFileExtensions[@]}"; do world_file="$WORLDS_DIR/$WORLD_NAME.$extension" if [ ! -f "$world_file" ]; then debug "World file $world_file not found - skipping" @@ -84,6 +90,23 @@ backup() { chmod "$BACKUPS_FILE_PERMISSIONS" "$backup_file" post_backup_hook "$backup_file" done + world_folder="$worlds_dir/$WORLD_NAME" + if [ -d "${world_folder}" ]; then + backup_folder="$BACKUPS_DIRECTORY/AUTOBACKUP-${WORLD_NAME}-$backup_suffix" + pre_backup_hook "$backup_folder" + info "Backing up Valheim server world folder $world_folder to $backup_folder" + mkdir -v -p "$backup_folder" + for extension in "${worldFileExtensions[@]}"; do + for file in "$world_folder/*".$extension; do + if [ -f "$file" ]; then + info "Backing up Valheim server world file $file to $backup_folder" + cp -v "$file" "$backup_folder" + fi + done + done + chmod "$BACKUPS_DIRECTORY_PERMISSIONS" "$backup_folder" + post_backup_hook "$backup_folder" + fi fi } @@ -123,7 +146,7 @@ flush_old() { if [ "${BACKUPS_ZIP}" = true ]; then find "$BACKUPS_DIRECTORY" -type f -name "worlds-*.zip" -printf '%T@ %p\0' | sort -z -n -r | cut -z -s -d " " -f "2-" | tail -z -n +$((BACKUPS_MAX_COUNT+1)) | xargs -0 rm -fv -- 2>/dev/null else - for extension in {db,fwl,db.old,fwl.old}; do + for extension in "${oldWorldFileExtensions[@]}"; do find "$BACKUPS_DIRECTORY" -type f -name "AUTOBACKUP-${WORLD_NAME}-*.${extension}" -printf '%T@ %p\0' | sort -z -n -r | cut -z -s -d " " -f "2-" | tail -z -n +$((BACKUPS_MAX_COUNT+1)) | xargs -0 rm -v -- 2>/dev/null done fi @@ -133,7 +156,7 @@ flush_old() { if [ "${BACKUPS_ZIP}" = true ]; then find "$BACKUPS_DIRECTORY" -type f -mmin "+$((BACKUPS_MAX_AGE*60*24))" -name "worlds-*.zip" -print -exec rm -f "{}" \; else - for extension in {db,fwl,db.old,fwl.old}; do + for extension in "${oldWorldFileExtensions[@]}"; do find "$BACKUPS_DIRECTORY" -type f -mmin "+$((BACKUPS_MAX_AGE*60*24))" -name "AUTOBACKUP-${WORLD_NAME}-*.${extension}" -print -exec rm -f "{}" \; done fi