plc-checkweigher 1.3.0 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/setup.sh +65 -6
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "plc-checkweigher",
3
- "version": "1.3.0",
3
+ "version": "1.4.0",
4
4
  "description": "One-command installer for the PLC Check-Weigher system on Raspberry Pi (PREEMPT_RT kernel, Python stack, WiFi, SMB, systemd RT services)",
5
5
  "bin": {
6
6
  "plc-checkweigher": "bin/cli.js"
package/setup.sh CHANGED
@@ -16,9 +16,10 @@
16
16
  # 7. SMB — enter host IP, share name, credentials → smb_config.py
17
17
  # 8. NetworkManager-wait-online
18
18
  # 9. systemd services (plc_watcher + plc_web)
19
- # 10. Boot logo — Plymouth theme with logo.png + "SAI SAMARTH ENGG"
20
- # 11. PREEMPT_RT kernel ← installed last so only one reboot is needed
21
- # 12. REBOOT
19
+ # 10. Boot logo — Plymouth theme with logo.png + "SAI SAMARTH ENGG"
20
+ # 11. Display — LightDM priority, CPU isolation, utmpx, GPU memory
21
+ # 12. PREEMPT_RT kernel ← installed last so only one reboot is needed
22
+ # 13. REBOOT
22
23
  # =============================================================================
23
24
 
24
25
  set -euo pipefail
@@ -444,7 +445,64 @@ EOF
444
445
  || { echo ""; warn "initramfs warnings — see /tmp/initramfs.log"; }
445
446
  }
446
447
 
447
- # ── 11. RT kernel installed LAST so only one reboot is needed ───────────────
448
+ # ── 11. DisplayLightDM priority, CPU isolation, utmpx, GPU memory ────────
449
+ setup_display() {
450
+ step "Display priority & LightDM ..."
451
+
452
+ # Install display stack if not present
453
+ DEBIAN_FRONTEND=noninteractive apt-get install -y -qq \
454
+ lightdm labwc pi-greeter xserver-xorg 2>/dev/null || true
455
+
456
+ # ── Remove network dependency from LightDM ───────────────────────────────
457
+ # Display manager must not wait for network — it is independent of PLC services.
458
+ mkdir -p /etc/systemd/system/lightdm.service.d/
459
+ rm -f /etc/systemd/system/lightdm.service.d/wait-for-network.conf
460
+
461
+ cat > /etc/systemd/system/lightdm.service.d/display-priority.conf << 'EOF'
462
+ [Unit]
463
+ # Start after hardware udev settles (HDMI/DSI detected) — not after network.
464
+ After=systemd-udev-settle.service local-fs.target acpid.socket dbus.service
465
+ Wants=systemd-udev-settle.service
466
+
467
+ [Service]
468
+ # Generous restart policy — display should always recover.
469
+ StartLimitBurst=20
470
+ StartLimitIntervalSec=120
471
+ Restart=on-failure
472
+ RestartSec=3
473
+
474
+ # CPU cores 0-2 only — core 3 is reserved for SCHED_FIFO PLC process.
475
+ CPUAffinity=0 1 2
476
+
477
+ # Elevated priority — display stays responsive under PLC RT workload.
478
+ Nice=-5
479
+
480
+ LimitNOFILE=65536
481
+ EOF
482
+ ok "LightDM: CPUAffinity=0-2, Nice=-5, network dep removed"
483
+
484
+ # ── Fix utmpx — PAM needs /run/utmp to track sessions ───────────────────
485
+ cat > /etc/tmpfiles.d/utmp-fix.conf << 'EOF'
486
+ f /run/utmp 0664 root utmp -
487
+ EOF
488
+ systemd-tmpfiles --create /etc/tmpfiles.d/utmp-fix.conf 2>/dev/null || true
489
+ ok "/run/utmp fixed (utmpx PAM session tracking)"
490
+
491
+ # ── GPU memory — 128 MB: enough for 1080p desktop and HMI use ───────────
492
+ sed -i '/^gpu_mem=/d' "${BOOT_FW}/config.txt"
493
+ if grep -q "### PLC-RT-BLOCK-START ###" "${BOOT_FW}/config.txt"; then
494
+ sed -i '/### PLC-RT-BLOCK-START ###/i gpu_mem=128' "${BOOT_FW}/config.txt"
495
+ else
496
+ echo "gpu_mem=128" >> "${BOOT_FW}/config.txt"
497
+ fi
498
+ ok "gpu_mem=128 set in config.txt (128 MB VRAM)"
499
+
500
+ systemctl daemon-reload
501
+ systemctl enable lightdm.service 2>/dev/null || true
502
+ ok "LightDM enabled — starts on every boot when display is connected"
503
+ }
504
+
505
+ # ── 12. RT kernel — installed LAST so only one reboot is needed ───────────────
448
506
  install_rt_kernel() {
449
507
  step "PREEMPT_RT kernel (final step before reboot) ..."
450
508
 
@@ -543,8 +601,9 @@ main() {
543
601
  setup_network_online # 7
544
602
  install_services # 8
545
603
  setup_boot_logo # 9 — Plymouth: logo + "SAI SAMARTH ENGG"
546
- install_rt_kernel # 10 — LAST, so only one reboot needed
547
- do_reboot # 11 — single reboot applies everything
604
+ setup_display # 10 — LightDM priority, CPU isolation, utmpx, GPU
605
+ install_rt_kernel # 11 — LAST, so only one reboot needed
606
+ do_reboot # 12 — single reboot applies everything
548
607
  }
549
608
 
550
609
  main "$@"