Skip to content
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Set the default behavior, in case people don't have core.autocrlf set.
* text=auto eol=lf
10 changes: 9 additions & 1 deletion common
Original file line number Diff line number Diff line change
Expand Up @@ -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" "{}" +
Expand Down
31 changes: 27 additions & 4 deletions valheim-backup
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down Expand Up @@ -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"
Expand All @@ -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
}

Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down