Enhance first-boot.sh and one-shot scripts for improved logging and error handling: add detailed logging to track download successes and failures, implement structured logging in set-rotation-once.sh and set-wallpaper-once.sh, and ensure user permissions for log file access. Update package installation and kiosk file setup processes for better clarity and reliability.
This commit is contained in:
@@ -19,45 +19,66 @@ WALLPAPER_PATH="/usr/share/rpd-wallpaper/splash.png"
|
|||||||
log() { echo "[$(date -Iseconds)] $*"; }
|
log() { echo "[$(date -Iseconds)] $*"; }
|
||||||
exec > >(tee -a "$LOGFILE") 2>&1
|
exec > >(tee -a "$LOGFILE") 2>&1
|
||||||
log "=== first-boot.sh started ==="
|
log "=== first-boot.sh started ==="
|
||||||
|
log "FILE_SERVER=$FILE_SERVER PI_USER=$PI_USER LOGFILE=$LOGFILE"
|
||||||
|
|
||||||
# --- Helpers ---
|
# --- Helpers ---
|
||||||
# Download script + .desktop from FILE_SERVER and install as one-shot autostart (runs once at pi's first login, then deletes itself).
|
# Download script + .desktop from FILE_SERVER and install as one-shot autostart (runs once at pi's first login, then deletes itself).
|
||||||
install_oneshot() {
|
install_oneshot() {
|
||||||
local name="$1"
|
local name="$1"
|
||||||
log "--- Installing one-shot: $name ---"
|
log "--- Installing one-shot: $name ---"
|
||||||
curl -fsSL "${FILE_SERVER}/${name}.sh" -o "$PI_HOME/${name}.sh" || { log "WARNING: Could not download ${name}.sh"; return 1; }
|
if curl -fsSL "${FILE_SERVER}/${name}.sh" -o "$PI_HOME/${name}.sh"; then
|
||||||
curl -fsSL "${FILE_SERVER}/${name}.desktop" -o "$AUTOSTART/${name}.desktop" || { log "WARNING: Could not download ${name}.desktop"; return 1; }
|
log "Downloaded ${name}.sh to $PI_HOME/${name}.sh"
|
||||||
|
else
|
||||||
|
log "WARNING: Could not download ${name}.sh"; return 1
|
||||||
|
fi
|
||||||
|
if curl -fsSL "${FILE_SERVER}/${name}.desktop" -o "$AUTOSTART/${name}.desktop"; then
|
||||||
|
log "Downloaded ${name}.desktop to $AUTOSTART/${name}.desktop"
|
||||||
|
else
|
||||||
|
log "WARNING: Could not download ${name}.desktop"; return 1
|
||||||
|
fi
|
||||||
chmod 755 "$PI_HOME/${name}.sh" && chmod 644 "$AUTOSTART/${name}.desktop"
|
chmod 755 "$PI_HOME/${name}.sh" && chmod 644 "$AUTOSTART/${name}.desktop"
|
||||||
chown "$PI_USER:$PI_USER" "$PI_HOME/${name}.sh" "$AUTOSTART/${name}.desktop"
|
chown "$PI_USER:$PI_USER" "$PI_HOME/${name}.sh" "$AUTOSTART/${name}.desktop"
|
||||||
|
log "One-shot $name installed (will run at first login and then remove itself)"
|
||||||
}
|
}
|
||||||
|
|
||||||
# --- 1. Packages ---
|
# --- 1. Packages ---
|
||||||
log "--- Installing packages ---"
|
log "--- Installing packages ---"
|
||||||
|
log "Running apt-get update ..."
|
||||||
apt-get update -qq
|
apt-get update -qq
|
||||||
|
log "Installing: git chromium wmctrl openssh-server kde-plasma-desktop kscreen maliit-keyboard xinput-calibrator"
|
||||||
apt-get install -y -qq git chromium wmctrl openssh-server \
|
apt-get install -y -qq git chromium wmctrl openssh-server \
|
||||||
kde-plasma-desktop kscreen maliit-keyboard xinput-calibrator
|
kde-plasma-desktop kscreen maliit-keyboard xinput-calibrator
|
||||||
|
log "Packages installed successfully"
|
||||||
|
|
||||||
# --- 2. Dirs and kiosk files from file server ---
|
# --- 2. Dirs and kiosk files from file server ---
|
||||||
log "--- Kiosk files ---"
|
log "--- Kiosk files ---"
|
||||||
|
log "Creating $AUTOSTART"
|
||||||
mkdir -p "$AUTOSTART"
|
mkdir -p "$AUTOSTART"
|
||||||
|
log "Downloading start-chromium.sh from ${FILE_SERVER}/start-chromium.sh"
|
||||||
curl -fsSL "${FILE_SERVER}/start-chromium.sh" -o "$PI_HOME/start-chromium.sh"
|
curl -fsSL "${FILE_SERVER}/start-chromium.sh" -o "$PI_HOME/start-chromium.sh"
|
||||||
|
log "Downloading chromium-kiosk.desktop from ${FILE_SERVER}/chromium-kiosk.desktop"
|
||||||
curl -fsSL "${FILE_SERVER}/chromium-kiosk.desktop" -o "$AUTOSTART/chromium-kiosk.desktop"
|
curl -fsSL "${FILE_SERVER}/chromium-kiosk.desktop" -o "$AUTOSTART/chromium-kiosk.desktop"
|
||||||
chmod 755 "$PI_HOME/start-chromium.sh" && chmod 644 "$AUTOSTART/chromium-kiosk.desktop"
|
chmod 755 "$PI_HOME/start-chromium.sh" && chmod 644 "$AUTOSTART/chromium-kiosk.desktop"
|
||||||
chown -R "$PI_USER:$PI_USER" "$PI_HOME/start-chromium.sh" "$AUTOSTART/chromium-kiosk.desktop"
|
chown -R "$PI_USER:$PI_USER" "$PI_HOME/start-chromium.sh" "$AUTOSTART/chromium-kiosk.desktop"
|
||||||
|
log "Kiosk files installed under $PI_HOME and $AUTOSTART"
|
||||||
|
|
||||||
# --- 3. Boot splash and wallpaper (splash.png + Plymouth theme from file server) ---
|
# --- 3. Boot splash and wallpaper (splash.png + Plymouth theme from file server) ---
|
||||||
log "--- Boot splash and wallpaper ---"
|
log "--- Boot splash and wallpaper ---"
|
||||||
|
log "Creating $PLYMOUTH_DIR and /usr/share/rpd-wallpaper"
|
||||||
mkdir -p "$PLYMOUTH_DIR" /usr/share/rpd-wallpaper
|
mkdir -p "$PLYMOUTH_DIR" /usr/share/rpd-wallpaper
|
||||||
if curl -fsSL "${FILE_SERVER}/splash.png" -o "$PLYMOUTH_DIR/splash.png"; then
|
if curl -fsSL "${FILE_SERVER}/splash.png" -o "$PLYMOUTH_DIR/splash.png"; then
|
||||||
|
log "Downloaded splash.png; copying to $WALLPAPER_PATH"
|
||||||
cp "$PLYMOUTH_DIR/splash.png" "$WALLPAPER_PATH"
|
cp "$PLYMOUTH_DIR/splash.png" "$WALLPAPER_PATH"
|
||||||
chmod 644 "$PLYMOUTH_DIR/splash.png" "$WALLPAPER_PATH"
|
chmod 644 "$PLYMOUTH_DIR/splash.png" "$WALLPAPER_PATH"
|
||||||
if curl -fsSL "${FILE_SERVER}/custom.plymouth" -o "$PLYMOUTH_DIR/custom.plymouth" \
|
if curl -fsSL "${FILE_SERVER}/custom.plymouth" -o "$PLYMOUTH_DIR/custom.plymouth" \
|
||||||
&& curl -fsSL "${FILE_SERVER}/custom.script" -o "$PLYMOUTH_DIR/custom.script"; then
|
&& curl -fsSL "${FILE_SERVER}/custom.script" -o "$PLYMOUTH_DIR/custom.script"; then
|
||||||
chmod 644 "$PLYMOUTH_DIR/custom.plymouth" "$PLYMOUTH_DIR/custom.script"
|
chmod 644 "$PLYMOUTH_DIR/custom.plymouth" "$PLYMOUTH_DIR/custom.script"
|
||||||
|
log "Plymouth theme files (custom.plymouth, custom.script) installed"
|
||||||
else
|
else
|
||||||
log "WARNING: Could not download custom.plymouth/custom.script; boot splash theme may be incomplete"
|
log "WARNING: Could not download custom.plymouth/custom.script; boot splash theme may be incomplete"
|
||||||
fi
|
fi
|
||||||
grep -q '^Theme=custom' /etc/plymouth/plymouthd.conf 2>/dev/null || printf '%s\n' '[Daemon]' 'Theme=custom' >> /etc/plymouth/plymouthd.conf
|
grep -q '^Theme=custom' /etc/plymouth/plymouthd.conf 2>/dev/null || printf '%s\n' '[Daemon]' 'Theme=custom' >> /etc/plymouth/plymouthd.conf
|
||||||
|
log "Running update-initramfs (may take a moment) ..."
|
||||||
update-initramfs -u -k all 2>/dev/null || true
|
update-initramfs -u -k all 2>/dev/null || true
|
||||||
mkdir -p /etc/lightdm/lightdm.conf.d
|
mkdir -p /etc/lightdm/lightdm.conf.d
|
||||||
curl -fsSL "${FILE_SERVER}/99-wallpaper.conf" -o /etc/lightdm/lightdm.conf.d/99-wallpaper.conf 2>/dev/null || log "WARNING: Could not download 99-wallpaper.conf"
|
curl -fsSL "${FILE_SERVER}/99-wallpaper.conf" -o /etc/lightdm/lightdm.conf.d/99-wallpaper.conf 2>/dev/null || log "WARNING: Could not download 99-wallpaper.conf"
|
||||||
@@ -69,28 +90,46 @@ fi
|
|||||||
# --- 4. LightDM: KDE Plasma X11 session + configs from file server ---
|
# --- 4. LightDM: KDE Plasma X11 session + configs from file server ---
|
||||||
log "--- LightDM session ---"
|
log "--- LightDM session ---"
|
||||||
mkdir -p /etc/lightdm/lightdm.conf.d
|
mkdir -p /etc/lightdm/lightdm.conf.d
|
||||||
curl -fsSL "${FILE_SERVER}/99-default-session.conf" -o /etc/lightdm/lightdm.conf.d/99-default-session.conf 2>/dev/null || log "WARNING: Could not download 99-default-session.conf"
|
if curl -fsSL "${FILE_SERVER}/99-default-session.conf" -o /etc/lightdm/lightdm.conf.d/99-default-session.conf 2>/dev/null; then
|
||||||
|
log "99-default-session.conf installed"
|
||||||
|
else
|
||||||
|
log "WARNING: Could not download 99-default-session.conf"
|
||||||
|
fi
|
||||||
|
|
||||||
# --- 5. KDE touch-friendly + Maliit (from file server) ---
|
# --- 5. KDE touch-friendly + Maliit (from file server) ---
|
||||||
log "--- KDE and Maliit ---"
|
log "--- KDE and Maliit ---"
|
||||||
mkdir -p "$AUTOSTART" "$PI_HOME/.config"
|
mkdir -p "$AUTOSTART" "$PI_HOME/.config"
|
||||||
curl -fsSL "${FILE_SERVER}/kdeglobals" -o "$PI_HOME/.config/kdeglobals" 2>/dev/null || log "WARNING: Could not download kdeglobals"
|
curl -fsSL "${FILE_SERVER}/kdeglobals" -o "$PI_HOME/.config/kdeglobals" 2>/dev/null && log "kdeglobals installed" || log "WARNING: Could not download kdeglobals"
|
||||||
curl -fsSL "${FILE_SERVER}/kwinrc" -o "$PI_HOME/.config/kwinrc" 2>/dev/null || log "WARNING: Could not download kwinrc"
|
curl -fsSL "${FILE_SERVER}/kwinrc" -o "$PI_HOME/.config/kwinrc" 2>/dev/null && log "kwinrc installed" || log "WARNING: Could not download kwinrc"
|
||||||
curl -fsSL "${FILE_SERVER}/maliit-keyboard.desktop" -o "$AUTOSTART/maliit-keyboard.desktop" 2>/dev/null || log "WARNING: Could not download maliit-keyboard.desktop"
|
curl -fsSL "${FILE_SERVER}/maliit-keyboard.desktop" -o "$AUTOSTART/maliit-keyboard.desktop" 2>/dev/null && log "maliit-keyboard.desktop installed" || log "WARNING: Could not download maliit-keyboard.desktop"
|
||||||
chown -R "$PI_USER:$PI_USER" "$PI_HOME/.config"
|
chown -R "$PI_USER:$PI_USER" "$PI_HOME/.config"
|
||||||
update-alternatives --set x-session-manager /usr/bin/startplasma-x11 2>/dev/null || true
|
update-alternatives --set x-session-manager /usr/bin/startplasma-x11 2>/dev/null && log "Default x-session-manager set to startplasma-x11" || true
|
||||||
|
|
||||||
# --- 6. reTerminal DM drivers (Seeed) ---
|
# --- 6. reTerminal DM drivers (Seeed) ---
|
||||||
log "--- reTerminal DM drivers ---"
|
log "--- reTerminal DM drivers ---"
|
||||||
REPO_DIR="/tmp/seeed-linux-dtoverlays"
|
REPO_DIR="/tmp/seeed-linux-dtoverlays"
|
||||||
|
log "Cloning seeed-linux-dtoverlays to $REPO_DIR ..."
|
||||||
git clone --depth 1 https://github.com/Seeed-Studio/seeed-linux-dtoverlays "$REPO_DIR"
|
git clone --depth 1 https://github.com/Seeed-Studio/seeed-linux-dtoverlays "$REPO_DIR"
|
||||||
"$REPO_DIR/scripts/reTerminal.sh" --device reTerminal-DM
|
# Script must run from repo root (it uses pwd for MOD_PATH). On bookworm+ --compat-kernel is not supported.
|
||||||
|
log "Running reTerminal.sh --device reTerminal-DM from $REPO_DIR ..."
|
||||||
|
if ( cd "$REPO_DIR" && "$REPO_DIR/scripts/reTerminal.sh" --device reTerminal-DM ); then
|
||||||
|
log "reTerminal DM drivers installed (reboot will apply)"
|
||||||
|
else
|
||||||
|
log "WARNING: reTerminal.sh failed (see log above). Display/touch may still work; you can retry later with: cd $REPO_DIR && sudo ./scripts/reTerminal.sh --device reTerminal-DM"
|
||||||
|
fi
|
||||||
|
log "Removing $REPO_DIR"
|
||||||
rm -rf "$REPO_DIR"
|
rm -rf "$REPO_DIR"
|
||||||
|
|
||||||
# --- 7. One-shots (rotation + wallpaper at first login) ---
|
# --- 7. One-shots (rotation + wallpaper at first login) ---
|
||||||
|
log "--- One-shot scripts (run at pi first login) ---"
|
||||||
install_oneshot set-rotation-once || true
|
install_oneshot set-rotation-once || true
|
||||||
install_oneshot set-wallpaper-once || true
|
install_oneshot set-wallpaper-once || true
|
||||||
|
log "One-shots will append to $LOGFILE when they run at first login"
|
||||||
|
|
||||||
# --- 8. Reboot ---
|
# --- 8. Allow pi to append to first-boot.log (for one-shot scripts) ---
|
||||||
|
chmod 666 "$LOGFILE"
|
||||||
|
log "Log file $LOGFILE is now appendable by user $PI_USER for one-shot scripts"
|
||||||
|
|
||||||
|
# --- 9. Reboot ---
|
||||||
log "=== first-boot.sh finished, rebooting ==="
|
log "=== first-boot.sh finished, rebooting ==="
|
||||||
reboot
|
reboot
|
||||||
|
|||||||
@@ -1,6 +1,15 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# One-shot: set DSI-1 (reTerminal DM) rotation to Right, then remove self. Runs as user pi at first login.
|
# One-shot: set DSI-1 (reTerminal DM) rotation to Right, then remove self. Runs as user pi at first login.
|
||||||
|
# Logs to /var/log/first-boot.log (same as first-boot.sh).
|
||||||
|
FIRST_BOOT_LOG="/var/log/first-boot.log"
|
||||||
|
log() { echo "[$(date -Iseconds)] [set-rotation-once] $*" >> "$FIRST_BOOT_LOG" 2>/dev/null || true; }
|
||||||
|
|
||||||
export DISPLAY=:0
|
export DISPLAY=:0
|
||||||
|
log "started (DISPLAY=$DISPLAY)"
|
||||||
|
log "waiting 5s for display ..."
|
||||||
sleep 5
|
sleep 5
|
||||||
kscreen-doctor output.DSI-1.rotation.right
|
log "running kscreen-doctor output.DSI-1.rotation.right"
|
||||||
|
kscreen-doctor output.DSI-1.rotation.right 2>&1 | while read -r line; do log "$line"; done
|
||||||
|
log "removing one-shot desktop and script"
|
||||||
rm -f /home/pi/.config/autostart/set-rotation-once.desktop /home/pi/set-rotation-once.sh
|
rm -f /home/pi/.config/autostart/set-rotation-once.desktop /home/pi/set-rotation-once.sh
|
||||||
|
log "finished"
|
||||||
|
|||||||
@@ -1,7 +1,20 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# One-shot: set desktop wallpaper to splash image, then remove self. Runs as user pi at first login.
|
# One-shot: set desktop wallpaper to splash image, then remove self. Runs as user pi at first login.
|
||||||
|
# Logs to /var/log/first-boot.log (same as first-boot.sh).
|
||||||
|
FIRST_BOOT_LOG="/var/log/first-boot.log"
|
||||||
|
log() { echo "[$(date -Iseconds)] [set-wallpaper-once] $*" >> "$FIRST_BOOT_LOG" 2>/dev/null || true; }
|
||||||
|
|
||||||
export DISPLAY=:0
|
export DISPLAY=:0
|
||||||
|
log "started (DISPLAY=$DISPLAY)"
|
||||||
|
log "waiting 8s for desktop ..."
|
||||||
sleep 8
|
sleep 8
|
||||||
WALLPAPER="/usr/share/rpd-wallpaper/splash.png"
|
WALLPAPER="/usr/share/rpd-wallpaper/splash.png"
|
||||||
[[ -f "$WALLPAPER" ]] && plasma-apply-wallpaperimage "$WALLPAPER" 2>/dev/null || true
|
if [[ -f "$WALLPAPER" ]]; then
|
||||||
|
log "applying wallpaper $WALLPAPER"
|
||||||
|
plasma-apply-wallpaperimage "$WALLPAPER" 2>&1 | while read -r line; do log "$line"; done
|
||||||
|
else
|
||||||
|
log "WARNING: wallpaper not found $WALLPAPER"
|
||||||
|
fi
|
||||||
|
log "removing one-shot desktop and script"
|
||||||
rm -f /home/pi/.config/autostart/set-wallpaper-once.desktop /home/pi/set-wallpaper-once.sh
|
rm -f /home/pi/.config/autostart/set-wallpaper-once.desktop /home/pi/set-wallpaper-once.sh
|
||||||
|
log "finished"
|
||||||
|
|||||||
Reference in New Issue
Block a user