Merge pull request #26 from outis1one/claude/fix-electron-update-script-01QPE5RtAF7bnHevbFM8vZaW

Claude/fix electron update script 01 qpe5 rt af7bn hevb fm8v za w
This commit is contained in:
outis1one
2025-11-20 12:14:19 -05:00
committed by GitHub
2 changed files with 9171 additions and 44 deletions
+9113
View File
File diff suppressed because it is too large Load Diff
+58 -44
View File
@@ -55,7 +55,8 @@ find_kiosk_dir() {
# Method 1: Check default kiosk user home # Method 1: Check default kiosk user home
if id "$KIOSK_USER" &>/dev/null; then if id "$KIOSK_USER" &>/dev/null; then
local kiosk_home=$(eval echo ~$KIOSK_USER) local kiosk_home=$(eval echo ~$KIOSK_USER)
if [ -f "$kiosk_home/kiosk-app/main.js" ]; then # Use sudo to check file since /home/kiosk may have restricted permissions
if sudo test -f "$kiosk_home/kiosk-app/main.js" 2>/dev/null; then
DETECTED_DIR="$kiosk_home/kiosk-app" DETECTED_DIR="$kiosk_home/kiosk-app"
fi fi
fi fi
@@ -63,7 +64,8 @@ find_kiosk_dir() {
# Method 2: Search all /home directories # Method 2: Search all /home directories
if [ -z "$DETECTED_DIR" ]; then if [ -z "$DETECTED_DIR" ]; then
for user_home in /home/*; do for user_home in /home/*; do
if [ -f "$user_home/kiosk-app/main.js" ]; then # Use sudo to check file in case of restricted permissions
if sudo test -f "$user_home/kiosk-app/main.js" 2>/dev/null; then
DETECTED_DIR="$user_home/kiosk-app" DETECTED_DIR="$user_home/kiosk-app"
break break
fi fi
@@ -74,12 +76,24 @@ find_kiosk_dir() {
if [ -z "$DETECTED_DIR" ]; then if [ -z "$DETECTED_DIR" ]; then
if systemctl list-units --all kiosk.service 2>/dev/null | grep -q kiosk.service; then if systemctl list-units --all kiosk.service 2>/dev/null | grep -q kiosk.service; then
local service_dir=$(systemctl show -p WorkingDirectory kiosk.service 2>/dev/null | cut -d= -f2) local service_dir=$(systemctl show -p WorkingDirectory kiosk.service 2>/dev/null | cut -d= -f2)
if [ -n "$service_dir" ] && [ -f "$service_dir/main.js" ]; then if [ -n "$service_dir" ] && sudo test -f "$service_dir/main.js" 2>/dev/null; then
DETECTED_DIR="$service_dir" DETECTED_DIR="$service_dir"
fi fi
fi fi
fi fi
# Method 4: Check for running electron process
if [ -z "$DETECTED_DIR" ]; then
local electron_path=$(ps aux | grep -E "electron.*main.js" | grep -v grep | head -1 | awk '{for(i=11;i<=NF;i++) if($i ~ /^\//) {print $i; exit}}')
if [ -n "$electron_path" ]; then
# Extract directory from electron path (e.g., /home/kiosk/kiosk-app/node_modules/electron/dist/electron -> /home/kiosk/kiosk-app)
local app_dir=$(echo "$electron_path" | sed 's|/node_modules/electron.*||')
if [ -n "$app_dir" ] && sudo test -f "$app_dir/main.js" 2>/dev/null; then
DETECTED_DIR="$app_dir"
fi
fi
fi
echo "$DETECTED_DIR" echo "$DETECTED_DIR"
} }
@@ -91,19 +105,19 @@ get_current_electron_version() {
local kiosk_dir="$1" local kiosk_dir="$1"
local package_json="$kiosk_dir/package.json" local package_json="$kiosk_dir/package.json"
if [ ! -f "$package_json" ]; then if ! sudo test -f "$package_json" 2>/dev/null; then
echo "unknown" echo "unknown"
return 1 return 1
fi fi
# Try to get version from package.json # Try to get version from package.json (use sudo to read)
local version=$(grep -oP '"electron"\s*:\s*"\^?\K[0-9.]+' "$package_json" 2>/dev/null || echo "") local version=$(sudo grep -oP '"electron"\s*:\s*"\^?\K[0-9.]+' "$package_json" 2>/dev/null || echo "")
if [ -z "$version" ]; then if [ -z "$version" ]; then
# Try to get from installed node_modules # Try to get from installed node_modules
local electron_pkg="$kiosk_dir/node_modules/electron/package.json" local electron_pkg="$kiosk_dir/node_modules/electron/package.json"
if [ -f "$electron_pkg" ]; then if sudo test -f "$electron_pkg" 2>/dev/null; then
version=$(grep -oP '"version"\s*:\s*"\K[0-9.]+' "$electron_pkg" 2>/dev/null || echo "unknown") version=$(sudo grep -oP '"version"\s*:\s*"\K[0-9.]+' "$electron_pkg" 2>/dev/null || echo "unknown")
else else
version="not installed" version="not installed"
fi fi
@@ -131,7 +145,7 @@ check_electron_running() {
################################################################################ ################################################################################
get_latest_electron_version() { get_latest_electron_version() {
log_info "Fetching latest stable Electron version from npm..." log_info "Fetching latest stable Electron version from npm..." >&2
# Try multiple methods to get the latest version # Try multiple methods to get the latest version
local version="" local version=""
@@ -150,7 +164,7 @@ get_latest_electron_version() {
fi fi
if [ -z "$version" ]; then if [ -z "$version" ]; then
log_error "Failed to fetch latest Electron version" log_error "Failed to fetch latest Electron version" >&2
echo "unknown" echo "unknown"
return 1 return 1
fi fi
@@ -164,34 +178,35 @@ get_latest_electron_version() {
create_backup() { create_backup() {
local kiosk_dir="$1" local kiosk_dir="$1"
local kiosk_owner=$(sudo stat -c '%U' "$kiosk_dir")
local timestamp=$(date +%Y%m%d_%H%M%S) local timestamp=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="${kiosk_dir}/backups/electron_backup_${timestamp}" BACKUP_DIR="${kiosk_dir}/backups/electron_backup_${timestamp}"
log_info "Creating backup..." log_info "Creating backup..."
# Create backup directory # Create backup directory
mkdir -p "$BACKUP_DIR" sudo -u "$kiosk_owner" mkdir -p "$BACKUP_DIR"
# Backup package.json and package-lock.json # Backup package.json and package-lock.json
if [ -f "$kiosk_dir/package.json" ]; then if sudo test -f "$kiosk_dir/package.json" 2>/dev/null; then
cp "$kiosk_dir/package.json" "$BACKUP_DIR/" sudo -u "$kiosk_owner" cp "$kiosk_dir/package.json" "$BACKUP_DIR/"
log_success "Backed up package.json" log_success "Backed up package.json"
fi fi
if [ -f "$kiosk_dir/package-lock.json" ]; then if sudo test -f "$kiosk_dir/package-lock.json" 2>/dev/null; then
cp "$kiosk_dir/package-lock.json" "$BACKUP_DIR/" sudo -u "$kiosk_owner" cp "$kiosk_dir/package-lock.json" "$BACKUP_DIR/"
log_success "Backed up package-lock.json" log_success "Backed up package-lock.json"
fi fi
# Create a list of installed packages # Create a list of installed packages
if [ -d "$kiosk_dir/node_modules" ]; then if sudo test -d "$kiosk_dir/node_modules" 2>/dev/null; then
ls -1 "$kiosk_dir/node_modules" > "$BACKUP_DIR/installed_packages.txt" sudo -u "$kiosk_owner" bash -c "ls -1 '$kiosk_dir/node_modules' > '$BACKUP_DIR/installed_packages.txt'"
log_success "Created list of installed packages" log_success "Created list of installed packages"
fi fi
# Save current Electron version # Save current Electron version
local current_version=$(get_current_electron_version "$kiosk_dir") local current_version=$(get_current_electron_version "$kiosk_dir")
echo "$current_version" > "$BACKUP_DIR/electron_version.txt" echo "$current_version" | sudo -u "$kiosk_owner" tee "$BACKUP_DIR/electron_version.txt" > /dev/null
log_success "Backup created at: $BACKUP_DIR" log_success "Backup created at: $BACKUP_DIR"
} }
@@ -239,8 +254,8 @@ update_electron() {
local target_version="$2" local target_version="$2"
local kiosk_owner="$3" local kiosk_owner="$3"
log_info "Stopping kiosk service..." log_info "Stopping kiosk display..."
sudo systemctl stop kiosk || true sudo systemctl stop lightdm || true
sleep 2 sleep 2
log_info "Updating Electron to version $target_version..." log_info "Updating Electron to version $target_version..."
@@ -249,21 +264,20 @@ update_electron() {
sudo -u "$kiosk_owner" sed -i "s/\"electron\": \".*\"/\"electron\": \"^$target_version\"/" "$kiosk_dir/package.json" sudo -u "$kiosk_owner" sed -i "s/\"electron\": \".*\"/\"electron\": \"^$target_version\"/" "$kiosk_dir/package.json"
# Remove old electron installation # Remove old electron installation
if [ -d "$kiosk_dir/node_modules/electron" ]; then if sudo test -d "$kiosk_dir/node_modules/electron" 2>/dev/null; then
log_info "Removing old Electron installation..." log_info "Removing old Electron installation..."
sudo -u "$kiosk_owner" rm -rf "$kiosk_dir/node_modules/electron" sudo -u "$kiosk_owner" rm -rf "$kiosk_dir/node_modules/electron"
fi fi
# Install new version # Install new version
log_info "Installing Electron $target_version (this may take a few minutes)..." log_info "Installing Electron $target_version (this may take a few minutes)..."
cd "$kiosk_dir"
if sudo -u "$kiosk_owner" npm install electron@"$target_version" 2>&1 | tee /tmp/electron_install.log; then if sudo -u "$kiosk_owner" bash -c "cd '$kiosk_dir' && npm install electron@'$target_version'" 2>&1 | tee /tmp/electron_install.log; then
log_success "Electron updated successfully to version $target_version" log_success "Electron updated successfully to version $target_version"
# Fix chrome-sandbox permissions # Fix chrome-sandbox permissions
local sandbox="$kiosk_dir/node_modules/electron/dist/chrome-sandbox" local sandbox="$kiosk_dir/node_modules/electron/dist/chrome-sandbox"
if [ -f "$sandbox" ]; then if sudo test -f "$sandbox" 2>/dev/null; then
sudo chown root:root "$sandbox" sudo chown root:root "$sandbox"
sudo chmod 4755 "$sandbox" sudo chmod 4755 "$sandbox"
log_success "Fixed chrome-sandbox permissions" log_success "Fixed chrome-sandbox permissions"
@@ -284,10 +298,11 @@ update_electron() {
main() { main() {
print_header "Electron Update Script for UBK" print_header "Electron Update Script for UBK"
# Check if running as root or with sudo # Verify not running as root
if [ "$EUID" -ne 0 ]; then if [ "$EUID" -eq 0 ]; then
log_error "This script must be run with sudo" log_error "Do not run this script with sudo"
echo "Usage: sudo $0" echo "Run as regular user: ./$0"
echo "The script will prompt for sudo when needed for specific commands"
exit 1 exit 1
fi fi
@@ -419,26 +434,26 @@ main() {
log_success "Electron updated from $CURRENT_VERSION to $NEW_VERSION" log_success "Electron updated from $CURRENT_VERSION to $NEW_VERSION"
echo "" echo ""
# Restart kiosk # Restart kiosk display
read -p "Restart kiosk service now? (y/n): " -n 1 -r read -p "Restart kiosk display now? (y/n): " -n 1 -r
echo echo
if [[ $REPLY =~ ^[Yy]$ ]]; then if [[ $REPLY =~ ^[Yy]$ ]]; then
log_info "Restarting kiosk service..." log_info "Restarting kiosk display..."
sudo systemctl start kiosk sudo systemctl start lightdm
sleep 3 sleep 3
if systemctl is-active --quiet kiosk; then if systemctl is-active --quiet lightdm; then
log_success "Kiosk service started successfully" log_success "Kiosk display started successfully"
else else
log_error "Kiosk service failed to start" log_error "Kiosk display failed to start"
log_error "Check logs with: sudo journalctl -u kiosk -n 50" log_error "Check logs with: sudo journalctl -u lightdm -n 50"
echo "" echo ""
log_warning "You may need to restore from backup" log_warning "You may need to restore from backup"
show_restore_instructions "$BACKUP_DIR" show_restore_instructions "$BACKUP_DIR"
fi fi
else else
log_info "Kiosk service not started" log_info "Kiosk display not started"
log_info "Start manually with: sudo systemctl start kiosk" log_info "Start manually with: sudo systemctl start lightdm"
fi fi
echo "" echo ""
@@ -460,14 +475,13 @@ main() {
# Reinstall original version # Reinstall original version
log_info "Reinstalling original Electron version..." log_info "Reinstalling original Electron version..."
cd "$KIOSK_DIR" if sudo -u "$KIOSK_OWNER" bash -c "cd '$KIOSK_DIR' && npm install"; then
if sudo -u "$KIOSK_OWNER" npm install; then
log_success "Restored original Electron installation" log_success "Restored original Electron installation"
# Restart kiosk # Restart kiosk display
log_info "Restarting kiosk service..." log_info "Restarting kiosk display..."
sudo systemctl start kiosk sudo systemctl start lightdm
log_success "Kiosk service restarted" log_success "Kiosk display restarted"
else else
log_error "Failed to restore original installation" log_error "Failed to restore original installation"
log_error "Manual intervention required" log_error "Manual intervention required"