Files
pxe-server/.gitignore
cproudlock eb4d067f12 feat(e10): SIC e10 part marker client, pattern generator and eDNC simulator
Groundwork for replacing a Telesis pinstamp with a SIC Marking e10 while
keeping the existing eDNC/MarkTelesis operator workflow. MarkTelesis has a
hardcoded marker-type enum and eDNC is serial-only, so the plan is a
translator that impersonates a Telesis controller on a COM port. These are
the pieces that translator will be built from, all verified against a real
e10 (a P63, firmware "E10 P63 (20140924)").

scripts/e10-client.py
  e10-V6 protocol client. Marking path and file transfer both use the BINARY
  protocol: the text protocol uses space as its delimiter, so it cannot carry
  a field cleared to a single space nor the space runs in real marked text,
  and it has no checksum. Includes fault decoding against the manual's fig 1,
  and a guard that refuses to overflow a variable's declared buffer.

scripts/make-e10-pattern.py
  Builds marking files with DECLARED variables. The controller's own protocol
  cannot create one: NEWFILE/INSERTTEXTLINE/SAVEFILE writes the reference but
  leaves the variable count at zero, and SETVAR then fails. Template-based,
  copying through byte-for-byte everything the format notes do not explain.

scripts/simulate-ednc.py
  Parses a part program, substitutes tokens and emits the byte-exact frames
  MarkTelesis would send, then translates them for the e10 and can drive one.
  The wire format came from disassembling MarkTelesis.exe rather than from a
  capture: frame builder at 0x401cf0, and the type letters at their call
  sites. Note there is no station ID, unlike the Backup470 dialect.

scripts/fake-telesis.py
  Answers as a Telesis controller so MarkTelesis will hold a conversation
  long enough to be recorded, with switches to force NAK and timeout paths.

reference/e10/
  52-file snapshot off the bench controller, used as the corpus for reversing
  the MARK_V5.0 format and for testing without hardware. ConfigCtrl is
  excluded and gitignored - it stores the supervisor password in cleartext.
  GE part programs are excluded for the same reason.

Three hardware findings worth knowing:
  - The controller TRUNCATES SILENTLY to a variable's declared buffer size
    while SETVAR still answers ok, and GETVAR echoes the full value back so
    it cannot detect this. Guarded client-side against the size in the file.
  - It refuses to mark when a referenced variable is unset, which makes an
    unset field fail loudly rather than marking the previous part's data.
  - Setting variables does not modify the stored file, so backups will not
    churn on every marked part.
2026-08-27 12:57:20 -04:00

129 lines
3.8 KiB
Plaintext

# Large binary files — download/build these, don't commit them
*.deb
*.zip
*.wim
*.iso
*.efi
*.sdi
# OneDrive download artifacts
OneDrive_*/
# Error folders from OneDrive download
__*/
___*.txt
# Original OneDrive folder structure (reorganized into autoinstall/ and playbook/)
WestJeff*/
# Duplicate at root (canonical copy in unattend/)
/FlatUnattendW10.xml
# Offline packages (built by download-packages.sh)
offline-packages/
# Boot tool binaries (built by prepare-boot-tools.sh)
boot-tools/
# Track the Blancco GRUB config as source-of-truth for grubx64.efi rebuilds.
# prepare-boot-tools.sh rebuilds grubx64.efi from this file via grub-mkstandalone.
!boot-tools/blancco/grub-blancco.cfg
# WinPE boot files (wimboot, boot.wim, BCD, ipxe.efi, etc.)
boot-files/
# Exception: track undionly.kpxe (open-source iPXE BIOS-mode NBP for
# legacy PXE clients, ~70KB, from boot.ipxe.org). Makes air-gapped USB
# build self-contained without a separate fetch step.
!boot-files/undionly.kpxe
# Python wheels for offline install (built by download-packages.sh)
pip-wheels/
# Deployment images (imported via webapp or USB)
geastandardpbr/
# OS files
.DS_Store
Thumbs.db
# Python
__pycache__/
*.pyc
*.pyo
venv/
# MOK Secure Boot signing keys (contains private key)
mok-keys/
# Secrets
secrets.md
**/eMxInfo*.txt
*.ppkg
enrollment/
drivers-staging/
bios-staging/
.claude/
# Secrets and credentials (defensive)
.env
.env.*
!.env.example
!.env.*.example
*.pem
*.key
id_rsa
id_rsa.*
*.ppk
*.p12
*.pfx
secrets.json
secrets.yaml
secrets.yml
*_secret
*_secrets
credentials.json
# GE-internal WiFi / 802.1X profiles - contain SSID + trusted-root thumbprint.
# Staged on PXE share at /srv/samba/enrollment/MachineAuth/ and copied to
# bays during imaging. Never check these into git.
AESFMA.xml
8021x.xml
BLUESSO.xml
WiFi-Profile.xml
*.wlanprofile
*.lanprofile
# Pre-staged binary (142 MB) - track via LFS or stage on PXE server, not in regular git
playbook/shopfloor-setup/Shopfloor/PrinterInstallerMap.exe
# Keyence VR-6000 InstallShield payload (560 MB). InstallShield MSIs split
# the compressed payload into Data1.cab; without it next to the MSI, msiexec
# exits 1603 with "SECREPAIR: Failed to open Data1.cab" (see
# /home/camp/pxe-images/keyence/Logs/Keyence/install.log for the signature).
# Canonical source on the GE-Enforce SFLD share:
# tsgwp00525\sfld$\v2\shared\dt\shopfloor\gea-shopfloor-keyence\apps\Data1.cab
# before building the USB image.
playbook/shopfloor-setup/gea-shopfloor-waxtrace/captured-binary/
# Keyence per-model installer payloads - too big for git, staged via sync-keyence.sh
playbook/shopfloor-setup/gea-shopfloor-keyence/vr3000/installers/Data*.cab
playbook/shopfloor-setup/gea-shopfloor-keyence/vr3000/installers/*.msi
playbook/shopfloor-setup/gea-shopfloor-keyence/vr5000/installers/Data*.cab
playbook/shopfloor-setup/gea-shopfloor-keyence/vr5000/installers/*.msi
playbook/shopfloor-setup/gea-shopfloor-keyence/vr6000/installers/Data1.cab
# Part Marker (Telesis) utility password - secret, deployed via the enrollment
# share from the working tree, never committed.
playbook/shopfloor-setup/gea-shopfloor-partmarker/PartMarker/Mark/utilpassword.txt
# HeatTreat per-machine DNC .reg exports (6601-6604) - contain DNC FtpPasswd
# credentials. Deployed via the enrollment share from the working tree.
playbook/shopfloor-setup/gea-shopfloor-heattreat/reg/*.reg
# SIC e10 controller config files carry the programmer/supervisor password
# in cleartext. Never commit them. See reference/e10/README.md
reference/e10/**/ConfigCtrl*
reference/e10/**/*.kind1
# GE part programs carry part numbers and marking content. Keep them out of
# git; they live in ~/pxe-images/e10-testing/partprograms/
reference/e10/partprograms/