Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix UpdateScript checksum #108

Merged
merged 3 commits into from
Jan 22, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Copy link
Contributor Author

@RMartinOscar RMartinOscar Jan 21, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You need bash for *.sqlite & [[]] and we specificly use bash in the docs

bash <(curl -s https://pelican.dev/updatePanel.sh)


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