tsOS-base/
├── boot/ # Boot partition files
│ ├── cmdline.txt # Kernel command line
│ ├── firmware/ # Firmware partition files
│ │ ├── mqttutil.conf # MQTT reporting config
│ │ └── mosquitto.d/ # MQTT broker configs
│ └── ...
├── etc/ # System configuration
│ ├── systemd/system/ # Systemd service files
│ ├── netplan/ # Network configuration
│ ├── mosquitto/ # Mosquitto config
│ ├── caddy/ # Caddy web server config
│ ├── filebrowser/ # Filebrowser config
│ ├── chrony/ # Time sync config
│ └── ...
├── usr/ # User-space programs
│ └── local/bin/ # Custom binaries
├── var/ # Variable data
│ └── lib/ # Persistent state
├── home/pi/ # Pi user home (git submodules)
│ ├── tsconfig/ # Configuration service
│ ├── wittypi4/ # WittyPi support
│ ├── pymqttutil/ # MQTT utilities
│ └── ...
├── .github/workflows/ # CI/CD workflows
├── docker-compose.yml # Build environment
├── tsOS-base.Pifile # Build config (arm64)
└── tsOS-base-armhf.Pifile # Build config (armhf)
Files copied to boot partition (writable at runtime):
cmdline.txt- Kernel parametersfirmware/- Firmware partition contents- Runtime configuration files
- Device tree overlays
System configuration files:
systemd/system/- Custom systemd servicesnetplan/- NetworkManager network configs- Service-specific configs (mosquitto, caddy, etc.)
Git submodules containing Python packages and tools:
- Each submodule is installed via
pip install -e .gitdirectories are preserved during build- Permissions set to
pi:pi
Custom compiled binaries:
filebrowser- Downloaded and installeduhubctl- Compiled from sourcegitui- Downloaded binary
tsOS-base-arm64.img- Final arm64 imagetsOS-base-armhf.img- Final armhf image.cache/- Cached base images (created by pimod)
Submodules in home/pi/:
tsconfig- Main configuration servicewittypi4- WittyPi hardware supportpymqttutil- MQTT system reportingpysmartsolar- SmartSolar integrationvedirect_dump- VE.Direct protocoluhubctl- USB hub controlWitty-Pi-4- WittyPi reference.oh-my-zsh- Zsh framework
Submodules are installed during build by copying .git directories and running pip install -e.