Fully automated customization of EmComm Tools Community (ETC) ISO images using xorriso/squashfs. No GUI required.
Upstream Project: EmComm Tools Community
Documentation: community.emcommtools.com
ETC already includes all ham radio tools (Winlink, VARA, JS8Call, fldigi, etc.). This customizer adds:
- β Pre-configured WiFi networks (auto-connect on boot)
- β
Personal callsign and grid square (pre-populated for
et-user) - β
Hostname set to
ETC-{CALLSIGN} - β Desktop preferences (dark mode, scaling, accessibility)
- β Display & screen management (brightness, dimming, blank timeout)
- β Power management (sleep behavior, power profiles, idle actions)
- β System timezone configuration
- β Additional development packages (VS Code, Node.js, npm, git)
- β
VARA FM/HF license
.regfiles + import script (run post-install after VARA installation) - β APRS configuration (iGate, beaconing with symbol/comment)
- β Git configuration
- β
Embedded cache files for faster rebuilds (use
-mfor minimal)
This customizer respects upstream ETC architecture. We:
- Keep ETC's runtime template system (et-direwolf, et-yaac, etc.)
- Modify templates in-place, keeping
{{ET_*}}placeholders - Don't change package selections or install additional software
- Don't pre-install VARA or Wine prefix (these require a desktop session post-install)
ETC Architecture: ETC uses runtime template processing. When you run et-direwolf, et-yaac, or et-winlink, these wrapper scripts read from ~/.config/emcomm-tools/user.json and generate configs dynamically. We pre-populate user.json so you skip the et-user prompt on first boot.
APRS Configuration: APRS customization via direwolf template modification has been disabled in this version to preserve compatibility with Pat/Winlink-packet mode. ETC's upstream direwolf templates handle all modes correctly. Users can customize APRS settings post-install if needed. See "Future Work" section for plans to re-enable this feature safely.
- Build process: Fully automated ETC ISO customization via xorriso/squashfs
- WiFi configuration: Networks are pre-configured in NetworkManager
- D578 CAT Control: DigiRig Mobile configuration for CAT control (et-mode packet/Winlink compatible)
- User config:
~/.config/emcomm-tools/user.jsonpre-populated with callsign, grid, Winlink password - Desktop settings: Dark mode, scaling, accessibility, display, power management, timezone all applied
- Git config: User name/email configured
- VARA license setup:
.regfiles and import script created for post-install use - Single post-install script: Verification, backup restoration, and CHIRP installation via pipx
- Additional packages: Development tools (git, nodejs, npm, uv) installable via configuration
- Cache system: Downloaded ISOs cached for faster rebuilds
- Preseed automation: Ubuntu 22.10 installer automated with hostname, username, password, timezone
- Anytone D578UV radio: Radio configuration added to et-radio menu (rigctrl ID 301)
Preseed file AUTOMATES Ubuntu installerβhostname, username, password, and timezone are pre-configured.
Automated Installation Workflow:
- Boot custom ISO from Ventoy
- GRUB menu automatically loads preseed from
file=/cdrom/preseed/custom.preseed - Preseed parameters:
auto=true priority=critical(auto-answer all questions) - Ubuntu installer runs without user prompts for:
- Keyboard layout
- Locale / language
- Hostname (set to
ETC-{CALLSIGN}) - Username (set from config)
- Password (hashed in preseed)
- Timezone
- Partitioning (see below)
- System boots directly to desktop (or login prompt if autologin disabled)
- All customizations apply automatically (WiFi, APRS, desktop settings, etc.)
Partitioning Behavior:
The preseed adapts based on INSTALL_DISK configuration:
-
Partition Mode (
INSTALL_DISK="/dev/sda5"):- Uses
d-i partman-auto/method string regular(non-destructive) - Ubuntu installer targets
/dev/sda5specifically - Safe for dual-boot systems
- Respects existing Windows/other OS partitions
- Swap configured at
/dev/sda6(or as configured)
- Uses
-
Entire-Disk Mode (
INSTALL_DISK="/dev/sda",CONFIRM_ENTIRE_DISK="yes"):- Uses
d-i partman-auto/method string lvm(auto-partition) - DESTRUCTIVE: Erases entire disk and creates new partitions
- Requires explicit confirmation in
secrets.env - Only use for single-disk systems with no existing data
- Uses
Boot Parameters in GRUB:
The GRUB configuration is automatically updated to:
linux /casper/vmlinuz file=/cdrom/preseed/custom.preseed auto=true priority=critical maybe-ubiquity quiet splash ---This tells Ubuntu installer to:
- Load preseed answers from
file=/cdrom/preseed/custom.preseed auto=true- automatically answer with preseed valuespriority=critical- only ask critical/unanswerable questionsmaybe-ubiquity- use GUI installer (ubiquity)
Advanced: To customize preseed behavior (partitioning, packages, etc.), edit the customize_preseed() function in build-etc-iso.sh and regenerate the ISO.
Remaining planned features for future releases:
- #3 - WiFi network connection validation and troubleshooting
- #2 - Post-install script for first-boot customizations
View all work: GitHub Issues
Build logs are automatically created and embedded in the ISO for post-install diagnostics:
On the build machine (after running build script):
# View the latest build log
less logs/build-etc-iso_YYYYMMDD_HHMMSS.log
# View all build logs
ls logs/On the installed system:
# Logs are embedded in the ISO and available at:
/opt/emcomm-customizer-cache/logs/
# Copy to home directory for easy access:
mkdir -p ~/.emcomm-customizer/logs
cp /opt/emcomm-customizer-cache/logs/* ~/.emcomm-customizer/logs/
# View the build manifest (summary of what was customized)
less ~/.emcomm-customizer/logs/BUILD_MANIFEST.txtThe build manifest includes:
- Build date and ETC version
- Configuration snapshot (callsign, hostname, WiFi networks, APRS settings)
- Number of successful customization steps
- List of all operations performed
Use the logs to debug issues like WiFi configuration, APRS settings, or any failed customizations.
emcomm-tools-customizer/
βββ build-etc-iso.sh # Main build script (fully automated)
βββ secrets.env.template # Configuration template
βββ secrets.env # Your configuration (gitignored)
βββ cache/ # Downloaded files (persistent)
β βββ ubuntu-22.10-desktop-amd64.iso # β Drop your ISO here!
βββ output/ # Generated custom ISOs
βββ logs/ # Build logs
βββ post-install/ # Scripts for after ISO installation
Ubuntu 22.10 reached end-of-life, so you must first update apt sources:
# Fix apt sources for EOL Ubuntu 22.10
sudo sed -i 's/archive.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
sudo sed -i 's/security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list
sudo apt update
# Install build dependencies
sudo apt install -y xorriso squashfs-tools wget curl jq# Clone repository
git clone https://github.com/AlwaysLearningTech/emcomm-tools-customizer.git
cd emcomm-tools-customizer
# Create configuration
cp secrets.env.template secrets.env
nano secrets.env # Fill in your values
# Build from stable release (downloads ETC + Ubuntu ISO automatically)
sudo ./build-etc-iso.sh -r stable
# Output: output/<release-tag>-custom.isoTo avoid downloading the 3.6GB Ubuntu ISO each time:
# Create cache directory and copy your ISO there
mkdir -p cache
cp ~/Downloads/ubuntu-22.10-desktop-amd64.iso cache/
# Now build - ISO download will be skipped!
sudo ./build-etc-iso.sh -r stableThe script checks cache/ubuntu-22.10-desktop-amd64.iso before downloading.
# List available releases and tags from GitHub
./build-etc-iso.sh -l
# Build from stable release (recommended for most users)
sudo ./build-etc-iso.sh -r stable
# Build from latest development tag (bleeding edge)
sudo ./build-etc-iso.sh -r latest
# Build a specific tag by name
sudo ./build-etc-iso.sh -r tag -t emcomm-tools-os-community-20251113-r5-build17
# Minimal build (smaller ISO, no embedded cache files)
sudo ./build-etc-iso.sh -r stable -m
# Build with expert enhancements (FT8, GridTracker, SSTV)
sudo ./build-etc-iso.sh -r stable -a
# Combine flags: stable + addons + minimal
sudo ./build-etc-iso.sh -r stable -a -m
# Debug mode (show detailed DEBUG log messages)
sudo ./build-etc-iso.sh -r stable -d
# Verbose mode for maximum debugging (bash -x)
sudo ./build-etc-iso.sh -r stable -v| Option | Description |
|---|---|
-r <stable|latest|tag> |
Release mode |
-t <tag> |
Specific tag name (required with -r tag) |
-l |
List available releases and tags |
-a |
Include et-os-addons (WSJT-X Improved, GridTracker, SSTV) |
-m |
Minimal build (exclude cache files, saves ~4GB) |
-d |
Debug mode (show DEBUG log messages) |
-v |
Verbose mode (bash -x tracing) |
-h |
Show help |
| Mode | Description | Source |
|---|---|---|
stable |
Latest GitHub Release (production-ready) | Releases |
latest |
Most recent git tag (development) | Tags |
tag |
Specific tag by name | Use with -t |
By default, cache files (Ubuntu ISO, ETC tarballs) are embedded in /opt/emcomm-customizer-cache/
so they're available for the next build on the installed system. This is useful when building
on the same machine you install to.
Use -m for a minimal build that excludes these files (saves ~4GB).
The -a flag integrates et-os-addons - a community
enhancement package that adds powerful FT8 and digital mode capabilities:
Packages Added:
- WSJT-X Improved - FT8/FT4 with optimized settings for radio operators
- GridTracker 2 - Real-time propagation and CQ spotting via FT8/FT4
- SSTV (Slow Scan TV) - Send/receive images over radio
- Weather Tools - Integration with local weather stations
- Additional Digital Mode Configurations - Enhanced settings for PSK, RTTY, Olivia, etc.
Usage:
# Build with et-os-addons enabled
sudo ./build-etc-iso.sh -r stable -a
# Combine with other options
sudo ./build-etc-iso.sh -r stable -a -m # Addons + minimal cacheSize Impact:
- Standard ISO: ~4.5 GB
- With
-aflag: ~6.5 GB (adds ~2 GB) - With
-a -mflags: ~2.5 GB (minimal, no embedded cache)
Recommended Use Cases:
- π― FT8 Specialists - Want WSJT-X + GridTracker on every boot
- π DXpeditions - Need propagation monitoring + digital modes
- π» Portable Operators - Run full-featured digital setup on low-power hardware
- π₯ Community Builders - Share a "ready to go" digital modes platform
Note: et-os-addons is optional and requires no configuration. All tools are pre-configured with common defaults. Advanced users can customize settings after installation.
# === User Identity (REQUIRED) ===
CALLSIGN="N0CALL" # Your amateur radio callsign
USER_FULLNAME="Your Name" # Full name for git commits
USER_EMAIL="you@example.com" # Email for git commits
GRID_SQUARE="CN87" # Maidenhead grid locator
# === User Account ===
USER_USERNAME="" # Linux username (defaults to lowercase CALLSIGN)
USER_PASSWORD="" # Password (leave blank to keep ETC default)
ENABLE_AUTOLOGIN="no" # "yes" or "no" - default is NO (password prompt)
# === System ===
MACHINE_NAME="" # Hostname (defaults to ETC-{CALLSIGN})
TIMEZONE="America/Denver" # System timezone (Linux format, see /usr/share/zoneinfo/)
# === Desktop Preferences ===
DESKTOP_COLOR_SCHEME="prefer-dark" # prefer-dark or prefer-light
DESKTOP_SCALING_FACTOR="1.0" # 1.0, 1.25, 1.5, or 2.0
DISABLE_ACCESSIBILITY="yes" # yes = disable screen reader, on-screen keyboard
# === Display & Screen Management ===
AUTOMATIC_SCREEN_BRIGHTNESS="false" # true = adaptive brightness, false = manual
DIM_SCREEN="true" # true = dim screen during idle
SCREEN_BLANK="true" # true = blank screen after idle timeout
SCREEN_BLANK_TIMEOUT="300" # Seconds before screen blanks (300=5min)
# === Power Management ===
POWER_MODE="balanced" # balanced, performance, or power-saver
POWER_LID_CLOSE_AC="suspend" # AC lid close: nothing, suspend, hibernate, logout
POWER_LID_CLOSE_BATTERY="suspend" # Battery lid close: nothing, suspend, hibernate, logout
POWER_BUTTON_ACTION="interactive" # Power button: nothing, suspend, hibernate, interactive
POWER_IDLE_AC="nothing" # AC idle action: nothing, suspend, hibernate
POWER_IDLE_BATTERY="suspend" # Battery idle action: nothing, suspend, hibernate
POWER_IDLE_TIMEOUT="900" # Seconds before idle action (900=15min)
AUTOMATIC_POWER_SAVER="true" # true = enable power saver on battery
AUTOMATIC_SUSPEND="true" # true = enable automatic suspend
# === Additional System Packages ===
ADDITIONAL_PACKAGES="code git nodejs npm" # Space-separated apt packages to install
# === WiFi Networks ===
WIFI_SSID_HOME="YourHomeNetwork"
WIFI_PASSWORD_HOME="YourHomePassword"
WIFI_AUTOCONNECT_HOME="yes"
WIFI_SSID_MOBILE="YourHotspot"
WIFI_PASSWORD_MOBILE="HotspotPassword"
WIFI_AUTOCONNECT_MOBILE="yes"
# === Winlink ===
WINLINK_PASSWORD="" # Your Winlink password
# === APRS Configuration ===
APRS_SSID="10" # SSID (0-15, 10=iGate)APRS_PASSCODE="-1" # APRS-IS passcode (-1=RX only) APRS_SYMBOL="/r" # Symbol: table+code (/r=antenna) APRS_COMMENT="EmComm iGate" # Beacon comment
ENABLE_APRS_BEACON="no" # Enable position beaconing APRS_BEACON_INTERVAL="300" # Seconds between beacons APRS_BEACON_VIA="WIDE1-1" # Digipeater path APRS_BEACON_POWER="10" # PHG: Power in watts APRS_BEACON_HEIGHT="20" # PHG: Antenna height (feet) APRS_BEACON_GAIN="3" # PHG: Antenna gain (dBi)
ENABLE_APRS_IGATE="yes" # Enable iGate APRS_SERVER="noam.aprs2.net" # APRS-IS server
DIREWOLF_ADEVICE="plughw:1,0" # Audio device (Digirig) DIREWOLF_PTT="CM108" # PTT method
VARA_FM_CALLSIGN="" # Callsign registered with VARA FM license
VARA_FM_LICENSE_KEY="" # Your VARA FM license key
VARA_HF_CALLSIGN="" # Callsign registered with VARA HF license
VARA_HF_LICENSE_KEY="" # Your VARA HF license key
PAT_EMCOMM_ALIAS="yes" # Create "emcomm" quick-connect alias PAT_EMCOMM_GATEWAY="" # Gateway callsign (e.g., "W7ACS-10")
POWER_LID_CLOSE_AC="suspend" # Lid close on AC power POWER_LID_CLOSE_BATTERY="suspend" # Lid close on battery POWER_BUTTON_ACTION="interactive" # Power button action POWER_IDLE_AC="nothing" # Idle action on AC POWER_IDLE_BATTERY="suspend" # Idle action on battery POWER_IDLE_TIMEOUT="900" # Idle timeout (seconds)
### Partition & Installation Modes
If you're installing on a **dual-boot system** (Windows + ETC), use these settings to ensure the build script only modifies your ETC partition, not the entire disk:
```bash
# === PARTITION MODE (Dual-Boot Safe) ===
# Install onto a specific partition (e.g., sda5, sda6)
# This is SAFE for dual-boot systems - only that partition is modified
INSTALL_DISK="/dev/sda5" # Target partition (not entire disk!)
INSTALL_SWAP="/dev/sda6" # Swap partition (if separate)
CONFIRM_ENTIRE_DISK="no" # Keep as "no" for dual-boot
# === ENTIRE-DISK MODE (Fresh Install Only) ===
# WARNING: This will ERASE the entire disk and create new partitions with LVM
# Only use this for dedicated ETC systems, not dual-boot
# Uncomment to use entire-disk mode (NOT RECOMMENDED):
# INSTALL_DISK="/dev/sda" # Entire disk (DESTRUCTIVE!)
# CONFIRM_ENTIRE_DISK="yes" # MUST set to "yes" to enable entire-disk
How partition detection works:
| INSTALL_DISK | Mode | Behavior | When to Use |
|---|---|---|---|
/dev/sda5 |
Partition | Uses manual partitioning for just this partition | Dual-boot (Windows + ETC) |
/dev/sda |
Entire Disk | Auto-partitions entire disk with LVM, requires CONFIRM_ENTIRE_DISK="yes" | Fresh install, no dual-boot |
/dev/nvme0n1p1 |
Partition | Manual partitioning for this NVMe partition | Dual-boot with NVMe drive |
/dev/nvme0n1 |
Entire Disk | Auto-partitions entire NVMe disk, requires confirmation | Fresh NVMe install |
Safety features:
- Partition mode (
/dev/sda5) uses manual partitioning during Ubuntu install (user confirms) - Entire-disk mode (
/dev/sda) requires CONFIRM_ENTIRE_DISK="yes" - prevents accidental data loss - Build script validates INSTALL_DISK format and warns before generating preseed
VARA is commercial software with two separate products:
| Product | Cost | Use Case |
|---|---|---|
| VARA FM | ~$69 | VHF/UHF Winlink via FM repeaters |
| VARA HF | ~$69 | HF Winlink for long-distance |
Purchase at rosmodem.wordpress.com
Important: VARA licenses are applied after VARA installation, not during ISO build:
-
Install VARA (post-install, requires desktop session):
cd ~/add-ons/wine ./01-install-wine-deps.sh ./02-install-vara-hf.sh # If you use HF ./03-install-vara-fm.sh # If you use FM
-
Import license keys (if configured in secrets.env):
./99-import-vara-licenses.sh
The build script creates .reg files and an import script in ~/add-ons/wine/. This is because Wine's prefix (~/.wine32) doesn't exist until you run the VARA installers.
Pat is the Winlink client on ETC. The emcomm alias adds a quick-connect shortcut to your standard Pat config:
pat connect emcomm # Quick connect to your configured gatewayAfter first boot, run ~/.config/pat/add-emcomm-alias.sh to add the alias to your Pat config.
If you have a backup from a previous ETC installation, you can restore your configurations (callsign, WiFi passwords, APRS settings, maps, etc.) after the new system boots.
When to restore:
- You're rebuilding ETC on the same hardware and want to preserve your previous settings
- You have a backup tarball from a previous installation:
etc-user-backup-*.tar.gz
How to restore:
After the OS boots and you're logged in, run:
# Copy backup to home directory if not already there
cp /path/to/etc-user-backup-*.tar.gz ~
# Optional: List what will be restored
tar tzf ~/etc-user-backup-*.tar.gz | head -20
# Restore user configuration (interactive)
~/add-ons/post-install/02-restore-user-backup.sh
# Restore with Wine/VARA prefix (larger, use if you backed up VARA)
~/add-ons/post-install/02-restore-user-backup.sh --wineWhat gets restored:
~/.config/emcomm-tools/- ETC configuration (callsign, grid, user.json)~/.local/share/emcomm-tools/- Maps, tilesets, application data~/.local/share/pat/- Winlink Pat settings (mailbox passwords, aliases)~/.wine32/- Wine prefix (optional, only if --wine flag used)
Options:
./02-restore-user-backup.sh --help # Show help
./02-restore-user-backup.sh # Restore user config only
./02-restore-user-backup.sh -d ~/backups # From specific directory
./02-restore-user-backup.sh --wine # Also restore Wine/VARA prefix
./02-restore-user-backup.sh --verbose # Show detailed output
./02-restore-user-backup.sh --force # Overwrite existing filesNote: User backups (611MB+) are not embedded in the ISO to avoid hanging the build process. They're restored post-install instead.
| Setting | Options | Description |
|---|---|---|
| Lid Close | nothing, suspend, hibernate, logout |
What happens when laptop lid closes |
| Power Button | interactive, suspend, hibernate, poweroff |
Power button behavior |
| Idle Action | nothing, suspend, hibernate |
Action after idle timeout |
| Idle Timeout | Seconds (e.g., 900 = 15 min) |
Time before idle action triggers |
These variables control ETC's optional features and map downloads during the ISO build.
Interactive vs Automated Builds:
- Variables configured β Downloads happen automatically, no prompts
- Variables blank β Original ETC dialog prompts appear during build
- This ensures future ETC versions with new dialogs still work interactively
| Variable | Options | Description |
|---|---|---|
OSM_MAP_STATE |
US state name (lowercase) | OpenStreetMap data for offline Navit navigation |
ET_MAP_REGION |
us, ca, world |
Pre-rendered raster tiles for YAAC and other apps |
ET_EXPERT |
yes or blank |
Enables Wikipedia download (ETC internal variable) |
WIKIPEDIA_SECTIONS |
Comma-separated list | Offline Wikipedia sections (requires ET_EXPERT=yes) |
Note about ET_EXPERT: This is an undocumented ETC variable. When set, it:
- Enables the Wikipedia download dialog during install
- Shows a Wine info textbox during wine installation
Leave blank unless you want Wikipedia offline content.
OSM State Names: Use lowercase state names from Geofabrik US:
alabama, alaska, arizona, arkansas, california, colorado, connecticut, delaware, district-of-columbia, florida, georgia, hawaii, idaho, illinois, indiana, iowa, kansas, kentucky, louisiana, maine, maryland, massachusetts, michigan, minnesota, mississippi, missouri, montana, nebraska, nevada, new-hampshire, new-jersey, new-mexico, new-york, north-carolina, north-dakota, ohio, oklahoma, oregon, pennsylvania, rhode-island, south-carolina, south-dakota, tennessee, texas, utah, vermont, virginia, washington, west-virginia, wisconsin, wyoming
ET Map Regions:
| Region | File Size | Coverage |
|---|---|---|
us |
~2.5 GB | United States, zoom 0-11 |
ca |
~1.5 GB | Canada, zoom 0-10 |
world |
~500 MB | Global, zoom 0-7 |
Wikipedia Sections: Available sections for offline Wikipedia:
computer, history, mathematics, medicine, simple
Examples:
# Fully automated build (no Wikipedia)
OSM_MAP_STATE="washington"
ET_MAP_REGION="us"
ET_EXPERT=""
WIKIPEDIA_SECTIONS=""
# Fully automated with Wikipedia
OSM_MAP_STATE="washington"
ET_MAP_REGION="us"
ET_EXPERT="yes"
WIKIPEDIA_SECTIONS="computer,medicine"
# Semi-automated - let dialog prompt for maps you're unsure about
OSM_MAP_STATE="" # Will show dialog to pick state
ET_MAP_REGION="us" # Auto-download US tilesThere are two ways to get offline Wikipedia content on ETC:
Set ET_EXPERT="yes" and WIKIPEDIA_SECTIONS="computer,medicine" to download pre-built .zim files from Kiwix during the build. These are large files (100-500MB each) covering entire topic areas.
This customizer includes a script to create a small, targeted .zim file with just the Wikipedia articles relevant to ham radio operators.
Configuration:
# In secrets.env - specify individual articles (pipe-separated)
WIKIPEDIA_ARTICLES="2-meter_band|70-centimeter_band|General_Mobile_Radio_Service|Family_Radio_Service"Default articles include:
- Band information: 2-meter band, 70-centimeter band, HF/VHF/UHF
- Radio services: GMRS, FRS, MURS, Citizens Band
- Digital modes: APRS, Winlink, DMR, D-STAR, System Fusion
- Emergency comms: Amateur radio emergency communications
- General ham radio topics: Repeaters, simplex, antennas, propagation
Post-Install Usage: After first boot, run the Wikipedia ZIM creator:
cd ~/add-ons/wikipedia
./create-my-wikipedia.shThis downloads your configured articles and creates a .zim file in ~/wikipedia/ that you can view with Kiwix:
# Start local server
kiwix-serve --port=8080 ~/wikipedia/ham-radio-wikipedia_*.zim
# Open http://localhost:8080 in browserNote: The custom .zim creator is a post-install script because it requires network access and takes a few minutes to run. It's NOT embedded in the ISO build.
| SSID | Usage |
|---|---|
| 0 | Primary station (home, fixed) |
| 1 | Digipeater, fill-in digi |
| 2 | Digipeater (alternate) |
| 3 | Portable station |
| 4 | HF to VHF gateway |
| 5 | Smartphone, mobile app |
| 6 | Satellite ops, special |
| 7 | Handheld, walkie-talkie |
| 8 | Boat, maritime mobile |
| 9 | Mobile (car, truck, RV) |
| 10 | Internet, APRS-IS only |
| 11 | Balloon, aircraft, spacecraft |
| 12 | APRStt, DTMF, touchstone |
| 13 | Weather station |
| 14 | Trucking |
| 15 | Generic, other |
Symbols are specified with a two-character code: table + symbol.
Primary Table Symbols (table = /)
| Symbol Code | Icon | Description |
|---|---|---|
/> |
π | Car |
/y |
π | House with antenna |
/[ |
πΆ | Jogger/Walker (portable) |
/_ |
π€οΈ | Weather station |
/! |
π | Police station |
/# |
π | Digipeater |
/$ |
π | Phone |
/- |
π | House (QTH) |
/. |
β | X / Unknown |
// |
π΄ | Red Dot |
/? |
β | Question mark |
/K |
π« | School |
/R |
π½οΈ | Restaurant |
/Y |
β΅ | Yacht/Sailboat |
/^ |
Large aircraft | |
/a |
π | Ambulance |
/b |
π² | Bicycle |
/f |
π | Fire truck |
/k |
π | Truck |
/n |
π‘ | Node (packet) |
/r |
π» | Antenna/Portable |
/s |
π’ | Ship (power) |
/u |
π | Bus |
/v |
π | Van |
Alternate Table Symbols (table = \)
| Symbol Code | Icon | Description |
|---|---|---|
\> |
π | Car (overlay capable) |
\a |
πͺ | ARES/RACES |
\# |
π | Digipeater (overlay) |
\& |
π· | Diamond (overlay) |
\- |
π | House (HF) |
\0 |
β | Circle (numbered) |
\K |
π | Helicopter |
\^ |
Small aircraft | |
\j |
ποΈ | Camping |
\k |
ποΈ | ATV/Motorcycle |
\n |
πΊ | Triangle (overlay) |
\s |
π₯οΈ | Small boat |
\v |
πΊ | ATV (overlay) |
Full table: APRS Symbol Codes
The cache/ directory stores downloaded files to speed up rebuilds:
cache/
βββ ubuntu-22.10-desktop-amd64.iso # Ubuntu base ISO (3.6 GB)
βββ emcomm-tools-os-*.tar.gz # ETC installer tarballs
To skip downloads:
- Create
cache/directory - Copy
ubuntu-22.10-desktop-amd64.isointo it - Run build - download will be skipped
ETC tarballs are also cached automatically after first download.
Generated ISOs are placed in output/:
output/
βββ emcomm-tools-os-community-20251128-r5-final-5.0.0-custom.iso
Copy to Ventoy USB:
cp output/*.iso /media/$USER/Ventoy/
syncSymptom: The built ISO boots into a standard Ubuntu installer asking you to create a user, with none of the ETC tools installed.
Cause: The ETC installer (install.sh) failed silently during the chroot phase.
Fixes (as of v1.1.0):
- Build now verifies the ETC tarball extraction was successful
- Build now verifies ETC installation by checking for
/opt/emcomm-toolsandet-user - Build now properly captures the chroot exit code
If you still encounter this, run with -d flag for debug output and check the log file in logs/.
Symptom: After installing the ISO on a dual-boot system (especially Panasonic Toughbook FZ-G1), screen brightness controls no longer work in either Windows or Ubuntu.
Causes: The Intel graphics backlight controller can get confused by ACPI/UEFI state changes during OS installation.
Fixes:
-
Try BIOS reset: Power off completely, enter BIOS setup, and load "Setup Defaults" then save and exit.
-
Windows Device Manager: Device Manager β Display Adapters β Intel HD Graphics β Update/Rollback Driver
-
Ubuntu kernel parameters: Edit
/etc/default/grub, find theGRUB_CMDLINE_LINUX_DEFAULTline and add one of:acpi_backlight=vendor acpi_backlight=video acpi_backlight=nativeThen run
sudo update-gruband reboot. -
Intel xbacklight: Install
xbacklightand use it directly:sudo apt install xbacklight xbacklight -set 50 # Set to 50% -
Direct sysfs control (last resort):
# Find the backlight device ls /sys/class/backlight/ # Typically intel_backlight or acpi_video0 # Read max brightness cat /sys/class/backlight/intel_backlight/max_brightness # Set brightness (example: 500) echo 500 | sudo tee /sys/class/backlight/intel_backlight/brightness
Run with sudo:
sudo ./build-etc-iso.sh -r stableInstall prerequisites (after fixing apt sources for Ubuntu 22.10):
sudo apt install -y xorriso squashfs-tools wget curl jqPre-download and cache:
mkdir -p cache
wget -O cache/ubuntu-22.10-desktop-amd64.iso \
https://old-releases.ubuntu.com/releases/kinetic/ubuntu-22.10-desktop-amd64.iso- Ensure you have 15+ GB free disk space
- The squashfs step takes 10-20 minutes on typical hardware
Several community projects build on ETC. Here's how they relate to this customizer:
- Author: CowboyPilot | Status: Active (v1.2)
- How It Works: Clones to
~/NozzleMods/, addsnozzle-menuinteractive launcher - Real Value: Hardware-specific CAT control configuration that's not in upstream
- AIOC (All-In-One-Cable): Three DireWolf profiles (Simple TNC, Packet Digipeater, APRS Digipeater)
- Yaesu FT-710: Full CAT support with udev rules and device symlinks (
/dev/et-cat,/dev/et-audio) - Xiegu G90: DigiRig PTT configuration (CAT vs RTS modes)
- System tools: Fix APT sources, VarAC V13 .NET fixes
- About VARA: NozzleMods does NOT provide VARA (upstream ETC R5 already has
~/add-ons/wine/scripts for VARA HF/FM). NozzleMods wraps them in a menu and adds port management. - Installation:
curl -fsSL https://raw.githubusercontent.com/CowboyPilot/ETC5_NozzleMods/main/install.sh | bash - Integration Path: Post-install onlyβrequires running system with X11/GNOME for menu. Can't pre-stage in ISO.
- URL: https://github.com/CowboyPilot/ETC5_NozzleMods
- Author: clifjones | Status: Active
- How It Works: Two methods:
- Build-time: Replace ETC tarball URL with et-os-addons during ISO creation
- Post-install: Clone and run on existing ETC system
- What It Adds (via overlay pattern):
- WSJT-X Improved (FT8/FT4/MSK144) - NOT in upstream ETC
- GridTracker 2 - Mapping integration
- JS8Spotter - Spot tracking
- QSSTV + Cheese - SSTV/webcam support
- xygrib + Saildocs - Weather maps
- et-launcher - Rust UI wrapper to reduce CLI usage
- Enhanced et-user-backup - Custom backup directories
- Integration Path: Could integrate into this customizer by:
- Adding
-aor--addonsflag to include their overlay during build - OR: document as alternative build path for users wanting FT8
- Adding
- Licensing Note: Requires building your own ISO (no pre-built images distributed)
- URL: https://github.com/clifjones/et-os-addons
- Author: kf0che
- Status: Maintained but specific to MAGNET organization
- How It Works: Full variant with ETC submodule + custom overlay scripts
- Value: Reference example for building org-specific ETC builds
- Integration Path: Documentation onlyβtoo specialized for general customizer
- URL: https://github.com/kf0che/ETC-MAG
- Author: ekakela
- Platform: Windows (Python-based)
- What It Does: Monitors folder β prints to thermal receipt printer β archives messages
- Best For: Emergency exercises where operators need physical message distribution
- Integration Path: None (different platform, different purpose). Link in docs for interested users.
- URL: https://github.com/ekakela/emcomm-print
Approach: Document + provide post-install hook
Why Separate: Requires running X11 environment with Wine. Must happen after system boots.
Action Items:
- Create
/post-install-hooks/nozzlemods-template.shfor users to customize and run - Document that if you have AIOC/FT-710/G90, run this post-install
- Link directly to NozzleMods GitHub
Approach: Document as alternative build OR optional enhancement flag
Why Separate: Different overlay pattern. Could be integrated but adds ~2GB to ISO.
Decision:
- Option A (Simpler): Keep emcomm-tools-customizer as "base ETC customizer"
Users who want FT8 use et-os-addons instead - Option B (More Work): Add
-aflag to include their overlay at build time
Would require cloning their repo during build, extracting overlay, merging pattern
Approach: Link in README for users with thermal printer workflows
Integration: Noneβdifferent platform
Scenario 1: Basic ETC with custom WiFi/callsign
β Use emcomm-tools-customizer
β Boot, install ISO
β Done (or run et-vara-hf/et-vara-fm from add-ons if you want VARA)
Scenario 2: ETC + AIOC or FT-710 radio
β Use emcomm-tools-customizer
β Boot, install ISO
β Run NozzleMods: curl https://raw... | bash
β nozzle-menu β R) Radio Configuration β select your radio
Scenario 3: ETC + FT8/GridTracker
β Use et-os-addons instead of emcomm-tools-customizer
β Follow et-os-addons build instructions (replaces ETC tarball)
β ISO will have WSJT-X Improved, GridTracker 2
Scenario 4: ETC + everything (custom config + AIOC + FT8)
β Use et-os-addons for FT8/GridTracker
β Document custom build steps for WiFi/callsign (outside upstream)
β After install: Run NozzleMods for AIOC CAT config
- Download: Fetches Ubuntu 22.10 ISO and ETC installer tarball (cached in
cache/) - Extract: Uses xorriso to extract ISO, unsquashfs for filesystem
- Install ETC: Runs ETC's install.sh in chroot to install all ham radio tools
- Verify: Confirms ETC installed correctly by checking for key files
- Customize: Modifies
/etc/skel/and system configs with your settings - Rebuild: Creates new squashfs and ISO with xorriso
All customizations go into /etc/skel/ so they apply to new users automatically.
MIT License - See LICENSE file
- EmComm Tools Community: thetechprepper
- Customizer: KD7DGF
73 de KD7DGF π»