Youβre a field technician, trainer, or nomadic developer. Every time you sit at a different computer, you lose 30 minutes setting it up. Magic Stick eliminates that problem: a USB drive that boots a complete, identical environment on any PC.
-
Training: every student gets the same drive, ready to work on day one
-
FTTH/Network technician: full network diagnostics regardless of the host machine
-
Nomadic dev: find your full stack (Docker, Java, Ollama) on any computer
-
Tech teams: shared standardized environment, zero time wasted on setup
Magic Stick uses an A/B partition system with persistence:
| Partition | Size | Role |
|---|---|---|
System A |
~8 GB |
Active Xubuntu live system (default boot) |
System B |
~8 GB |
Backup Xubuntu live system (inactive) |
Persistence |
Remaining space |
User data + software config |
-
update-system.shdetects the active partition (A or B) -
It writes the new ISO to the inactive partition
-
It flips the GRUB boot flag
-
On next boot: new version is active
-
Something went wrong? Reboot into the previous partition β instant rollback
-
The Persistence partition is never touched
| Category | Software |
|---|---|
Desktop |
Xubuntu Desktop (XFCE) |
Containerization |
Docker CE + Docker Compose |
Local AI |
Ollama (on-device LLM) |
Development |
SDKMAN + JDK 21, Git, curl, wget, jq |
Network/FTTH |
nmap, iperf3, Wireshark, tshark, traceroute, dnsutils |
System diagnostics |
htop, ncdu, tree, lshw, smartmontools |
SSH/Transfer |
OpenSSH client, rsync, tmux, terminator |
-
Docker (for the build)
-
A USB drive with at least 32 GB (64 GB recommended)
-
A Linux host system
# Clone the repository
git clone https://github.com/cheroliv/magic_stick.git
cd magic_stick
# Build the ISO (30-60 min)
sudo scripts/build.sh
# Verify the generated ISO
scripts/verify.sh# Identify the USB drive
lsblk
# Flash (WARNING: erases all data on the target device)
sudo scripts/flash.sh /dev/sdXmagic_stick/
βββ build/ # live-build output (generated ISOs)
βββ config/
β βββ live-build/
β βββ package-lists/ # Package lists
β βββ hooks/ # chroot + binary hooks
β βββ includes.chroot/ # Files included in the system
β βββ includes.binary/ # Files included in the ISO
βββ scripts/
β βββ build.sh # ISO build via Docker
β βββ flash.sh # USB flash
β βββ update-system.sh # A/B update
β βββ install-software.sh # Software in chroot
β βββ verify.sh # ISO verification
βββ Dockerfile # Docker image for the build
βββ config/
βββ overrides/ # Custom config (XFCE, dock, etc.)Partition |
Size |
Type |
Flag |
1 (System A) |
8 GB |
squashfs |
boot |
2 (System B) |
8 GB |
squashfs |
- |
3 (Persistence) |
~48 GB |
ext4 |
- |
The Persistence partition uses persistence.conf with / union to save data between sessions.
-
No personal data in the ISO β SSH keys and user files go in the Persistence partition
-
Automatic rollback if the new system fails to boot
-
Persistent data is never touched by system updates
-
Atomic updates: if it breaks, revert to the previous version with a single reboot
| EPIC | Status |
|---|---|
EPIC 1: Project initialization |
β Done |
EPIC 2: Xubuntu base ISO build |
π§ In progress |
EPIC 3: A/B partition + Persistence |
β¬ To do |
EPIC 4: Software (Ollama, Docker, SDKMAN) |
β¬ To do |
EPIC 5: XFCE customization |
β¬ To do |
EPIC 6: A/B update script |
β¬ To do |