1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
|
#!/bin/sh
set -e
if [ "$(id -un)" != debian-sks ]; then
printf "SKS db upgrade script (%s) should only be run by debian-sks user\n" "$0" >&2
exit 1
fi
# Read the active Berkeley DB version, fall back to 4.7 if not found
if [ -r /var/lib/sks/berkeley_db.active ]; then
OLD_BDB=$(cat /var/lib/sks/berkeley_db.active)
else
OLD_BDB=4.7
fi
# Read the compiled-in Berkeley DB version
NEW_BDB=$(cat /usr/lib/sks/berkeley_db.txt)
if [ "$OLD_BDB" != "$NEW_BDB" ]; then
# Upgrade Berkeley DB in place
BACKUP_DIR=/var/backups/sks/$(date +%Y%m%d-%H%M%S)
SKS_DIR=/var/lib/sks
mkdir -p "$BACKUP_DIR"
for DBHOME in DB PTree; do
# Don't run if the database directory doesn't exist
[ ! -d "${SKS_DIR}/${DBHOME}" ] && continue
# Create backup directory
mkdir -p "${BACKUP_DIR}/${DBHOME}"
if [ -x /usr/bin/db${OLD_BDB}_recover ]; then
# Run recover with old tools
"db${OLD_BDB}_recover" -h "${SKS_DIR}/${DBHOME}"
# Backup needed log files
LOG_FILES=$("db${OLD_BDB}_archive" -h "${SKS_DIR}/${DBHOME}" -l)
else
# If we don't have the Berkeley DB tools then backup all log files
LOG_FILES=$(cd "${SKS_DIR}/${DBHOME}"; ls -1 | grep -E "^log\." || true)
fi
# Backup log files
for log_file in ${LOG_FILES}; do
cp -a "${SKS_DIR}/${DBHOME}/$log_file" "${BACKUP_DIR}/${DBHOME}/"
done
if [ -e "${SKS_DIR}/${DBHOME}/DB_CONFIG" ]; then
cp -a "${SKS_DIR}/${DBHOME}/DB_CONFIG" "${BACKUP_DIR}/${DBHOME}/"
fi
# Backup & upgrade database files
for db in $(cd "${SKS_DIR}/${DBHOME}"; ls -1 | grep -Ev "^(__|log\.|DB_CONFIG$)" || true); do
# Backup database file
cp "${SKS_DIR}/${DBHOME}/${db}" "${BACKUP_DIR}/${DBHOME}/"
# Upgrade database file
"db${NEW_BDB}_upgrade" -h "${SKS_DIR}/${DBHOME}" "${SKS_DIR}/${DBHOME}/$db";
done
# Set checkpoint and delete old logfiles
"db${NEW_BDB}_checkpoint" -h "${SKS_DIR}/${DBHOME}" -1
"db${NEW_BDB}_archive" -h "${SKS_DIR}/${DBHOME}" -d
done
# Note the active Berkeley DB version
cp -f /usr/lib/sks/berkeley_db.txt /var/lib/sks/berkeley_db.active
elif [ ! -e /var/lib/sks/berkeley_db.active ]; then
cp -f /usr/lib/sks/berkeley_db.txt /var/lib/sks/berkeley_db.active
fi
|