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:
Executable
+9113
File diff suppressed because it is too large
Load Diff
+58
-44
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user