Skip to content

Commit

Permalink
Merge pull request #108 from RMartinOscar/fix/UpdateScriptSum
Browse files Browse the repository at this point in the history
Various UpdateScript changes + checksum fix
  • Loading branch information
RMartinOscar authored Jan 22, 2025
2 parents 4fa5cdd + 10928bf commit e4024a1
Showing 1 changed file with 119 additions and 61 deletions.
180 changes: 119 additions & 61 deletions static/updatePanel.sh
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
#!/bin/sh
#!/bin/bash

if [[ $EUID -ne 0 ]]; then
echo "This script must be run as root or with sudo." >&2
exit 1
fi

function exitInstall {
cd "$install_dir"
php artisan up
echo "Panel is out of maintenance mode."
exit $1
}

read -p "Enter the directory for the panel location [/var/www/pelican]: " install_dir
install_dir=${install_dir:-/var/www/pelican}

Expand All @@ -20,97 +27,141 @@ if [ ! -f "$env_file" ]; then
exit 1
fi

owner=$(stat -c '%U' "$install_dir" || echo "www-data")
read -p "Enter the owner of the files (www-data, apache, nginx) [$owner]: " owner
owner=${owner:-www-data}

group=$(stat -c '%G' "$install_dir" || echo "www-data")
read -p "Enter the group of the files (www-data, apache, nginx) [$group]: " group
group=${group:-www-data}

cd "$install_dir"
php artisan down
if [ $? -ne 0 ]; then
echo "Failed to put the panel into maintenance mode."
exit 1
exitInstall 1
fi
echo "Panel is now in maintenance mode."

db_connection=$(grep "^DB_CONNECTION=" "$env_file" | cut -d '=' -f 2)

if [ -z "$db_connection" ]; then
echo "DB_CONNECTION not found in $env_file."
exit 0
else
echo "DB_CONNECTION is set to: $db_connection"

read -p "Do you want to create a backup? (y/n) [y]: " backup_confirm
backup_confirm=${backup_confirm:-y}
if [ "$backup_confirm" != "y" ]; then
echo "Backup canceled."
php artisan up
echo "Panel is out of maintenance mode."
exit 0
exitInstall 0
fi

echo "DB_CONNECTION is set to: $db_connection"

read -p "Do you want to create a backup? (y/n) [y]: " backup_confirm
backup_confirm=${backup_confirm:-y}
if [ "$backup_confirm" != "y" ]; then
echo "Backup canceled."
exitInstall 0
fi

backup_dir="$install_dir/backup"
mkdir -p "$backup_dir"

if [ "$db_connection" = "sqlite" ]; then
db_database=$(grep "^DB_DATABASE=" "$env_file" | cut -d '=' -f 2)

if [ -z "$db_database" ]; then
echo "DB_DATABASE not found in $env_file."
exitInstall 1
fi

backup_dir="$install_dir/backup"
mkdir -p "$backup_dir"

if [ "$db_connection" = "sqlite" ]; then
db_database=$(grep "^DB_DATABASE=" "$env_file" | cut -d '=' -f 2)

if [ -z "$db_database" ]; then
echo "DB_DATABASE not found in $env_file."
php artisan up
echo "Panel is out of maintenance mode."
exit 1
else
echo "DB_DATABASE is set to: $db_database"
cp "$install_dir/database/$db_database" "$backup_dir/$db_database.backup"
fi
else
read -p "NOTE: THIS WILL NOT BACKUP MySQL/MariaDB DATABASES!!! You should pause now and make your own backup!! You've been warned! Continue? (y/n) [y]: " continue_confirm
continue_confirm=${continue_confirm:-y}
if [ "$continue_confirm" != "y" ]; then
echo "Update Canceled."
php artisan up
echo "Panel is out of maintenance mode."
exit 0
fi
if [[ "$db_database" != *.sqlite ]]; then
db_database="$db_database.sqlite"
fi
echo "DB_DATABASE is set to: $db_database"
cp "$install_dir/database/$db_database" "$backup_dir/$db_database.backup"
if [ $? -ne 0 ]; then
echo "Failed to backup $db_database file, aborting"
exitInstall 1
fi
else
read -p "NOTE: THIS WILL NOT BACKUP MySQL/MariaDB DATABASES!!! You should pause now and make your own backup!! You've been warned! Continue? (y/n) [y]: " database_confirm
database_confirm=${database_confirm:-y}
if [ "$database_confirm" != "y" ]; then
echo "Update Canceled."
exitInstall 0
fi
fi

cp "$env_file" "$backup_dir/.env.backup"
if [ $? -ne 0 ]; then
echo "Failed to backup .env file, aborting"
exitInstall 1
fi
echo "Backed up .env file successfully."

cp "$env_file" "$backup_dir/.env.backup"
echo "Backup completed successfully."
echo "Downloading Files..."
curl -L https://github.com/pelican-dev/panel/releases/latest/download/panel.tar.gz -o panel.tar.gz
expected_checksum=$(curl -L https://github.com/pelican-dev/panel/releases/latest/download/checksum.txt | awk '{ print $1 }')
calculated_checksum=$(sha256sum panel.tar.gz | awk '{ print $1 }')

if [[ -z "$expected_checksum" || -z "$calculated_checksum" || "$expected_checksum" != "$calculated_checksum" ]]; then
read -p "NOTE: Checksum mismatch, the file may be corrupted!!! You've been warned! Continue? (y/n) [y]: " checksum_confirm
checksum_confirm=${checksum_confirm:-y}
if [ "$checksum_confirm" != "y" ]; then
echo "Update Canceled."
exitInstall 1
fi
fi

echo "Checksum verified."
read -p "Do you want to delete all files and folders in $install_dir except the backup folder? (y/n) [y]: " delete_confirm
delete_confirm=${delete_confirm:-y}
if [ "$delete_confirm" != "y" ]; then
echo "Deletion canceled."
php artisan up
echo "Panel is out of maintenance mode."
exit 0
exitInstall 0
fi

find "$install_dir" -mindepth 1 -maxdepth 1 ! -name 'backup' -exec rm -rf {} +

find "$install_dir" -mindepth 1 -maxdepth 1 ! -name 'backup' ! -name 'panel.tar.gz' ! -name 'artisan' -exec rm -rf {} +
if [ $? -ne 0 ]; then
echo "Failed to delete old files, aborting"
exitInstall 1
fi
echo "Deleted all files and folders in $install_dir except the backup folder."

echo "Downloading Files..."
curl -L https://github.com/pelican-dev/panel/releases/latest/download/panel.tar.gz -o panel.tar.gz
expected_checksum=$(curl -L https://github.com/pelican-dev/panel/releases/latest/download/checksum.txt)
calculated_checksum=$(sha256sum panel.tar.gz | awk '{ print $1 }')

if [[ -n "$expected_checksum" && -n "$calculated_checksum" && "$expected_checksum" == "$calculated_checksum" ]]; then
echo "Checksum verified. Proceeding to extract the tarball."
tar -xzv panel.tar.gz -C "$install_dir"
else
echo "Checksum mismatch! The file may be corrupted."
exit 1
echo "Extracting tarball."
tar -xzf panel.tar.gz -C "$install_dir"
if [ $? -ne 0 ]; then
echo "Failed to extract tarball, aborting"
exitInstall 1
fi
rm panel.tar.gz
if [ $? -ne 0 ]; then
echo "Failed to delete leftover tarball, continuing."
fi

echo "Installing Composer"
COMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev --optimize-autoloader --no-interaction
if [ $? -ne 0 ]; then
echo "Failed to run composer, aborting"
exitInstall 1
fi

php artisan down
if [ $? -ne 0 ]; then
echo "Failed to put the panel into maintenance mode."
exitInstall 1
fi

echo "Restoring .env"
mv "$backup_dir/.env.backup" "$install_dir/.env"
if [ $? -ne 0 ]; then
echo "Failed to restore the .env file, aborting"
exitInstall 1
fi

if [ "$db_connection" = "sqlite" ]; then
echo "Restoring sqlite database"
mv "$backup_dir/$db_database.backup" "$install_dir/database/$db_database"
if [ $? -ne 0 ]; then
echo "Failed to restore the database, aborting"
exitInstall 1
fi
fi

echo "Optimizing"
Expand All @@ -120,16 +171,23 @@ php artisan filament:optimize
echo "Updating database"
php artisan migrate --seed --force

read -p "Enter the owner of the files (www-data, apache, nginx) [www-data]: " file_owner
file_owner=${file_owner:-www-data}

echo "Setting Permissions"
chmod -R 755 storage/* bootstrap/cache
chown -R "$file_owner":"$file_owner" "$install_dir"
chmod_command="chmod -R 755 storage/* bootstrap/cache"
eval $chmod_command
if [ $? -ne 0 ]; then
echo "Failed to run chmod, Please run the following commands manually:"
echo "$chmod_command"
fi
chown_command="chown -R $owner:$group $install_dir"
eval $chown_command
if [ $? -ne 0 ]; then
echo "Failed to run chown, Please run the following commands manually:"
echo "$chown_command"
fi

php artisan queue:restart
php artisan up

echo "Panel is now live and out of maintenance mode."
echo "Panel Updated!"
exit 0
exit 0

0 comments on commit e4024a1

Please sign in to comment.