pmaports/main/postmarketos-mvcfg/postmarketos-mvcfg-pre-upgrade.sh

84 lines
2.2 KiB
Bash
Raw Normal View History

#!/bin/sh
# Move all configs that were created/modified with legacy methods in
# post-install scripts.
if [ "$#" -lt 2 ]; then
echo "usage:"
echo " postmarketos-mvcfg-pre-upgrade dirname cfg [cfg ...]"
echo "example:"
echo " postmarketos-mvcfg-pre-upgrade \\"
echo " postmarketos-base \\"
echo " /etc/issue \\"
echo " /etc/fstab"
echo "more information:"
echo " https://postmarketos.org/mvcfg"
exit 1
fi
# Skip if "done" file exists. This is created in package() with
# postmarketos-mvcfg-package, so this script doesn't do anything if the package
# installed at pre-upgrade time is already using properly packaged configs.
dirname="$1"
if [ -e "/etc/postmarketos-mvcfg/done/$dirname" ]; then
exit 0
fi
# Only act on existing files
shift
cfgs_found=""
for i in "$@"; do
if [ -e "$i" ]; then
cfgs_found="$cfgs_found $i"
fi
done
if [ -n "$cfgs_found" ]; then
# Create non-existing backupdir
backupdir="/etc/postmarketos-mvcfg/backup/$dirname"
while [ -d "$backupdir" ]; do
backupdir="${backupdir}_"
done
mkdir -p "$backupdir"
# Copy all configs first
for i in $cfgs_found; do
# Generate non-existing target path
# flatpath: /etc/issue -> etc-issue
flatpath="$(echo "$i" | sed s./.-.g | cut -d- -f2-)"
target="$backupdir/$flatpath"
while [ -e "$target" ]; do
target="${target}_"
done
cp -a "$i" "$target"
done
# Remove configs
for i in $cfgs_found; do
rm "$i"
done
# List moved configs
echo " *"
echo " * These configs were created with legacy packaging methods:"
for i in $cfgs_found; do
echo " * $i"
done
echo " *"
echo " * In order to replace them with properly packaged configs,"
echo " * the old versions (which you might have adjusted manually)"
echo " * were moved to:"
echo " * $backupdir"
echo " *"
echo " * If you did not manually adjust these configs, you can ignore"
echo " * this message."
echo " *"
echo " * More information: https://postmarketos.org/mvcfg"
echo " *"
fi
# Make sure that the "done" file exists, even if the packager forgot to call
# 'postmarketos-mvcfg-package' in package() of the APKBUILD.
mkdir -p "/etc/postmarketos-mvcfg/done"
touch "/etc/postmarketos-mvcfg/done/$dirname"