92 lines
2.7 KiB
Bash
92 lines
2.7 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
if [[ $(id -u) != 0 ]]; then
|
|
echo "This migration needs to be run as root"
|
|
exit
|
|
fi
|
|
|
|
if [[ ! -f docker-compose.yml ]]; then
|
|
echo "No docker-compose.yml found in current directory. Is this the right folder?"
|
|
exit
|
|
fi
|
|
|
|
if ! which jq > /dev/null; then
|
|
echo "jq must be installed to run this migration. On ubuntu systems, try 'sudo apt-get install jq'"
|
|
exit
|
|
fi
|
|
|
|
# Fixing pictrs permissions
|
|
mkdir -p volumes/pictrs
|
|
sudo chown -R 991:991 volumes/pictrs
|
|
|
|
echo "Restarting docker-compose, making sure that pictrs is started and pictshare is removed"
|
|
docker-compose up -d --remove-orphans
|
|
|
|
if [[ -z $(docker-compose ps | grep pictrs) ]]; then
|
|
echo "Pict-rs is not running, make sure you update Lemmy first"
|
|
exit
|
|
fi
|
|
|
|
# echo "Stopping Lemmy so that users dont upload new images during the migration"
|
|
# docker-compose stop lemmy
|
|
|
|
CRASHED_ON=()
|
|
|
|
pushd volumes/pictshare/
|
|
echo "Importing pictshare images to pict-rs..."
|
|
IMAGE_NAMES=*
|
|
for image in $IMAGE_NAMES; do
|
|
IMAGE_PATH="$(pwd)/$image/$image"
|
|
if [[ ! -f $IMAGE_PATH ]]; then
|
|
continue
|
|
fi
|
|
res=$(curl -s -F "images[]=@$IMAGE_PATH" http://127.0.0.1:8537/import | jq .msg)
|
|
if [ "${res}" == "" ]; then
|
|
echo -n "C" >&2
|
|
echo ""
|
|
CRASHED_ON+=("${IMAGE_PATH}")
|
|
echo "Failed to import $IMAGE_PATH with no error message"
|
|
echo " assuming crash, sleeping"
|
|
sleep 10
|
|
continue
|
|
fi
|
|
if [ "${res}" != "\"ok\"" ]; then
|
|
echo -n "F" >&2
|
|
echo ""
|
|
echo "Failed to import $IMAGE_PATH"
|
|
echo " Reason: ${res}"
|
|
else
|
|
echo -n "." >&2
|
|
fi
|
|
done
|
|
|
|
for image in ${CRASHED_ON[@]}; do
|
|
echo "Retrying ${image}"
|
|
res=$(curl -s -F "images[]=@$IMAGE_PATH" http://127.0.0.1:8537/import | jq .msg)
|
|
if [ "${res}" != "\"ok\"" ]; then
|
|
echo -n "F" >&2
|
|
echo ""
|
|
echo "Failed to upload ${image} on 2nd attempt"
|
|
echo " Reason: ${res}"
|
|
else
|
|
echo -n "." >&2
|
|
fi
|
|
done
|
|
|
|
echo "Fixing permissions on pictshare folder"
|
|
find . -type d -exec chmod 755 {} \;
|
|
find . -type f -exec chmod 644 {} \;
|
|
|
|
popd
|
|
|
|
echo "Rewrite image links in Lemmy database"
|
|
docker-compose exec -u postgres postgres psql -U lemmy -c "UPDATE user_ SET avatar = REPLACE(avatar, 'pictshare', 'pictrs/image') WHERE avatar is not null;"
|
|
docker-compose exec -u postgres postgres psql -U lemmy -c "UPDATE post SET url = REPLACE(url, 'pictshare', 'pictrs/image') WHERE url is not null;"
|
|
|
|
echo "Moving pictshare data folder to pictshare_backup"
|
|
mv volumes/pictshare volumes/pictshare_backup
|
|
|
|
echo "Migration done, starting Lemmy again"
|
|
echo "If everything went well, you can delete ./volumes/pictshare_backup/"
|
|
docker-compose start lemmy
|