clonebox 0.1.20__py3-none-any.whl → 0.1.22__py3-none-any.whl
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.
- clonebox/cli.py +210 -6
- clonebox/cloner.py +345 -2
- clonebox/models.py +6 -2
- clonebox/validator.py +361 -29
- {clonebox-0.1.20.dist-info → clonebox-0.1.22.dist-info}/METADATA +196 -6
- clonebox-0.1.22.dist-info/RECORD +17 -0
- clonebox-0.1.20.dist-info/RECORD +0 -17
- {clonebox-0.1.20.dist-info → clonebox-0.1.22.dist-info}/WHEEL +0 -0
- {clonebox-0.1.20.dist-info → clonebox-0.1.22.dist-info}/entry_points.txt +0 -0
- {clonebox-0.1.20.dist-info → clonebox-0.1.22.dist-info}/licenses/LICENSE +0 -0
- {clonebox-0.1.20.dist-info → clonebox-0.1.22.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: clonebox
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.22
|
|
4
4
|
Summary: Clone your workstation environment to an isolated VM with selective apps, paths and services
|
|
5
5
|
Author: CloneBox Team
|
|
6
6
|
License: Apache-2.0
|
|
@@ -85,6 +85,22 @@ CloneBox lets you create isolated virtual machines with only the applications, d
|
|
|
85
85
|
- 🧪 **Configuration testing** - Validate VM settings and functionality
|
|
86
86
|
- 📁 **App data sync** - Include browser profiles, IDE settings, and app configs
|
|
87
87
|
|
|
88
|
+
## Use Cases
|
|
89
|
+
|
|
90
|
+
CloneBox excels in scenarios where developers need:
|
|
91
|
+
- Isolated sandbox environments for testing AI agents, edge computing simulations, or integration workflows without risking host system stability
|
|
92
|
+
- Reproducible development setups that can be quickly spun up with identical configurations across different machines
|
|
93
|
+
- Safe experimentation with system-level changes that can be discarded by simply deleting the VM
|
|
94
|
+
- Quick onboarding for new team members who need a fully configured development environment
|
|
95
|
+
|
|
96
|
+
## What's Next
|
|
97
|
+
|
|
98
|
+
Project roadmap includes:
|
|
99
|
+
- Container runtime integration (Podman/Docker lightweight mode)
|
|
100
|
+
- Local dashboard for VM and container management
|
|
101
|
+
- Profile system for reusable configuration presets
|
|
102
|
+
- Proxmox export capabilities for production migration
|
|
103
|
+
|
|
88
104
|
|
|
89
105
|
|
|
90
106
|
|
|
@@ -95,6 +111,8 @@ Kluczowe komendy:
|
|
|
95
111
|
- `clonebox` – interaktywny wizard (detect + create + start)
|
|
96
112
|
- `clonebox detect` – skanuje usługi/apps/ścieżki
|
|
97
113
|
- `clonebox clone . --user --run` – szybki klon bieżącego katalogu z użytkownikiem i autostartem
|
|
114
|
+
- `clonebox container up|ps|stop|rm` – lekki runtime kontenerowy (podman/docker)
|
|
115
|
+
- `clonebox dashboard` – lokalny dashboard (VM + containers)
|
|
98
116
|
|
|
99
117
|
### Dlaczego wirtualne klony workstation mają sens?
|
|
100
118
|
|
|
@@ -167,6 +185,11 @@ pip install -e .
|
|
|
167
185
|
# Or directly
|
|
168
186
|
pip install clonebox
|
|
169
187
|
```
|
|
188
|
+
|
|
189
|
+
Dashboard ma opcjonalne zależności:
|
|
190
|
+
```bash
|
|
191
|
+
pip install "clonebox[dashboard]"
|
|
192
|
+
```
|
|
170
193
|
lub
|
|
171
194
|
```bash
|
|
172
195
|
# Aktywuj venv
|
|
@@ -247,7 +270,35 @@ Simply run `clonebox` to start the interactive wizard:
|
|
|
247
270
|
|
|
248
271
|
```bash
|
|
249
272
|
clonebox
|
|
250
|
-
|
|
273
|
+
|
|
274
|
+
clonebox clone . --user --run --replace --base-image ~/ubuntu-22.04-cloud.qcow2 --disk-size-gb 30
|
|
275
|
+
|
|
276
|
+
clonebox test . --user --validate
|
|
277
|
+
clonebox test . --user --validate --require-running-apps
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### Profiles (Reusable presets)
|
|
281
|
+
|
|
282
|
+
Profiles pozwalają trzymać gotowe presety dla VM/container (np. `ml-dev`, `web-dev`) i nakładać je na bazową konfigurację.
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
# Przykład: uruchom kontener z profilem
|
|
286
|
+
clonebox container up . --profile ml-dev --engine podman
|
|
287
|
+
|
|
288
|
+
# Przykład: generuj VM config z profilem
|
|
289
|
+
clonebox clone . --profile ml-dev --user --run
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
Domyślne lokalizacje profili:
|
|
293
|
+
- `~/.clonebox.d/<name>.yaml`
|
|
294
|
+
- `./.clonebox.d/<name>.yaml`
|
|
295
|
+
- wbudowane: `src/clonebox/templates/profiles/<name>.yaml`
|
|
296
|
+
|
|
297
|
+
### Dashboard
|
|
298
|
+
|
|
299
|
+
```bash
|
|
300
|
+
clonebox dashboard --port 8080
|
|
301
|
+
# http://127.0.0.1:8080
|
|
251
302
|
```
|
|
252
303
|
|
|
253
304
|
The wizard will:
|
|
@@ -268,7 +319,10 @@ clonebox create --name my-dev-vm --config '{
|
|
|
268
319
|
},
|
|
269
320
|
"packages": ["python3", "nodejs", "docker.io"],
|
|
270
321
|
"services": ["docker"]
|
|
271
|
-
}' --ram 4096 --vcpus 4 --start
|
|
322
|
+
}' --ram 4096 --vcpus 4 --disk-size-gb 20 --start
|
|
323
|
+
|
|
324
|
+
# Create VM with larger root disk
|
|
325
|
+
clonebox create --name my-dev-vm --disk-size-gb 30 --config '{"paths": {}, "packages": [], "services": []}'
|
|
272
326
|
|
|
273
327
|
# List VMs
|
|
274
328
|
clonebox list
|
|
@@ -325,10 +379,45 @@ clonebox clone . --user --run
|
|
|
325
379
|
|
|
326
380
|
# Access in VM:
|
|
327
381
|
ls ~/.config/google-chrome # Chrome profile
|
|
328
|
-
|
|
329
|
-
|
|
382
|
+
|
|
383
|
+
# Firefox profile (Ubuntu często używa snap):
|
|
384
|
+
ls ~/snap/firefox/common/.mozilla/firefox
|
|
385
|
+
ls ~/.mozilla/firefox
|
|
386
|
+
|
|
387
|
+
# PyCharm profile (snap):
|
|
388
|
+
ls ~/snap/pycharm-community/common/.config/JetBrains
|
|
389
|
+
ls ~/.config/JetBrains
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
### Container workflow (podman/docker)
|
|
393
|
+
|
|
394
|
+
```bash
|
|
395
|
+
# Start a dev container (auto-detect engine if not specified)
|
|
396
|
+
clonebox container up . --engine podman --detach
|
|
397
|
+
|
|
398
|
+
# List running containers
|
|
399
|
+
clonebox container ps
|
|
400
|
+
|
|
401
|
+
# Stop/remove
|
|
402
|
+
clonebox container stop <name>
|
|
403
|
+
clonebox container rm <name>
|
|
404
|
+
```
|
|
405
|
+
|
|
406
|
+
### Full validation (VM)
|
|
407
|
+
|
|
408
|
+
`clonebox test` weryfikuje, że VM faktycznie ma zamontowane ścieżki i spełnia wymagania z `.clonebox.yaml`.
|
|
409
|
+
|
|
410
|
+
```bash
|
|
411
|
+
clonebox test . --user --validate
|
|
330
412
|
```
|
|
331
413
|
|
|
414
|
+
Walidowane kategorie:
|
|
415
|
+
- **Mounts** (9p)
|
|
416
|
+
- **Packages** (apt)
|
|
417
|
+
- **Snap packages**
|
|
418
|
+
- **Services** (enabled + running)
|
|
419
|
+
- **Apps** (instalacja + dostępność profilu: Firefox/PyCharm/Chrome)
|
|
420
|
+
|
|
332
421
|
### Testing and Validating VM Configuration
|
|
333
422
|
|
|
334
423
|
```bash
|
|
@@ -557,6 +646,9 @@ The fastest way to clone your current working directory:
|
|
|
557
646
|
# Base OS image is automatically downloaded to ~/Downloads on first run
|
|
558
647
|
clonebox clone .
|
|
559
648
|
|
|
649
|
+
# Increase VM disk size (recommended for GUI + large tooling)
|
|
650
|
+
clonebox clone . --user --disk-size-gb 30
|
|
651
|
+
|
|
560
652
|
# Clone specific path
|
|
561
653
|
clonebox clone ~/projects/my-app
|
|
562
654
|
|
|
@@ -687,8 +779,10 @@ clonebox clone . --network auto
|
|
|
687
779
|
| `clonebox clone . --replace` | Replace existing VM (stop, delete, recreate) |
|
|
688
780
|
| `clonebox clone . --user` | Clone in user session (no root) |
|
|
689
781
|
| `clonebox clone . --base-image <path>` | Use custom base image |
|
|
782
|
+
| `clonebox clone . --disk-size-gb <gb>` | Set root disk size in GB (generated configs default to 20GB) |
|
|
690
783
|
| `clonebox clone . --network user` | Use user-mode networking (slirp) |
|
|
691
784
|
| `clonebox clone . --network auto` | Auto-detect network mode (default) |
|
|
785
|
+
| `clonebox create --config <json> --disk-size-gb <gb>` | Create VM from JSON config with specified disk size |
|
|
692
786
|
| `clonebox start .` | Start VM from `.clonebox.yaml` in current dir |
|
|
693
787
|
| `clonebox start . --viewer` | Start VM and open GUI window |
|
|
694
788
|
| `clonebox start <name>` | Start existing VM by name |
|
|
@@ -701,6 +795,11 @@ clonebox clone . --network auto
|
|
|
701
795
|
| `clonebox detect --yaml` | Output as YAML config |
|
|
702
796
|
| `clonebox detect --yaml --dedupe` | YAML with duplicates removed |
|
|
703
797
|
| `clonebox detect --json` | Output as JSON |
|
|
798
|
+
| `clonebox container up .` | Start a dev container for given path |
|
|
799
|
+
| `clonebox container ps` | List containers |
|
|
800
|
+
| `clonebox container stop <name>` | Stop a container |
|
|
801
|
+
| `clonebox container rm <name>` | Remove a container |
|
|
802
|
+
| `clonebox dashboard` | Run local dashboard (VM + containers) |
|
|
704
803
|
| `clonebox status . --user` | Check VM health, cloud-init, IP, and mount status |
|
|
705
804
|
| `clonebox status . --user --health` | Check VM status and run full health check |
|
|
706
805
|
| `clonebox test . --user` | Test VM configuration (basic checks) |
|
|
@@ -721,6 +820,97 @@ clonebox clone . --network auto
|
|
|
721
820
|
|
|
722
821
|
## Troubleshooting
|
|
723
822
|
|
|
823
|
+
### Critical: Insufficient Disk Space
|
|
824
|
+
|
|
825
|
+
If you install a full desktop environment and large development tools (e.g. `ubuntu-desktop-minimal`, `docker.io`, large snaps like `pycharm-community`/`chromium`), you may hit low disk space warnings inside the VM.
|
|
826
|
+
|
|
827
|
+
Recommended fix:
|
|
828
|
+
- Set a larger root disk in `.clonebox.yaml`:
|
|
829
|
+
|
|
830
|
+
```yaml
|
|
831
|
+
vm:
|
|
832
|
+
disk_size_gb: 30
|
|
833
|
+
```
|
|
834
|
+
|
|
835
|
+
You can also set it during config generation:
|
|
836
|
+
```bash
|
|
837
|
+
clonebox clone . --user --disk-size-gb 30
|
|
838
|
+
```
|
|
839
|
+
|
|
840
|
+
Notes:
|
|
841
|
+
- New configs generated by `clonebox clone` default to `disk_size_gb: 20`.
|
|
842
|
+
- You can override this by setting `vm.disk_size_gb` in `.clonebox.yaml`.
|
|
843
|
+
|
|
844
|
+
Workaround for an existing VM (host-side resize + guest filesystem grow):
|
|
845
|
+
```bash
|
|
846
|
+
clonebox stop . --user
|
|
847
|
+
qemu-img resize ~/.local/share/libvirt/images/<vm-name>/root.qcow2 +10G
|
|
848
|
+
clonebox start . --user
|
|
849
|
+
```
|
|
850
|
+
|
|
851
|
+
Inside the VM:
|
|
852
|
+
```bash
|
|
853
|
+
sudo growpart /dev/vda 1
|
|
854
|
+
sudo resize2fs /dev/vda1
|
|
855
|
+
df -h /
|
|
856
|
+
```
|
|
857
|
+
|
|
858
|
+
### Known Issue: IBus Preferences crash
|
|
859
|
+
|
|
860
|
+
During validation you may occasionally see a crash dialog from **IBus Preferences** in the Ubuntu desktop environment.
|
|
861
|
+
This is an upstream issue related to the input method daemon (`ibus-daemon`) and obsolete system packages (e.g. `libglib2.0`, `libssl3`, `libxml2`, `openssl`).
|
|
862
|
+
It does **not** affect CloneBox functionality and the VM operates normally.
|
|
863
|
+
|
|
864
|
+
Workaround:
|
|
865
|
+
- Dismiss the crash dialog
|
|
866
|
+
- Or run `sudo apt upgrade` inside the VM to update system packages
|
|
867
|
+
|
|
868
|
+
### Snap Apps Not Launching (PyCharm, Chromium, Firefox)
|
|
869
|
+
|
|
870
|
+
If snap-installed applications (e.g., PyCharm, Chromium) are installed but don't launch when clicked, the issue is usually **disconnected snap interfaces**. This happens because snap interfaces are not auto-connected when installing via cloud-init.
|
|
871
|
+
|
|
872
|
+
**New VMs created with updated CloneBox automatically connect snap interfaces**, but for older VMs or manual installs:
|
|
873
|
+
|
|
874
|
+
```bash
|
|
875
|
+
# Check snap interface connections
|
|
876
|
+
snap connections pycharm-community
|
|
877
|
+
|
|
878
|
+
# If you see "-" instead of ":desktop", interfaces are NOT connected
|
|
879
|
+
|
|
880
|
+
# Connect required interfaces
|
|
881
|
+
sudo snap connect pycharm-community:desktop :desktop
|
|
882
|
+
sudo snap connect pycharm-community:desktop-legacy :desktop-legacy
|
|
883
|
+
sudo snap connect pycharm-community:x11 :x11
|
|
884
|
+
sudo snap connect pycharm-community:wayland :wayland
|
|
885
|
+
sudo snap connect pycharm-community:home :home
|
|
886
|
+
sudo snap connect pycharm-community:network :network
|
|
887
|
+
|
|
888
|
+
# Restart snap daemon and try again
|
|
889
|
+
sudo systemctl restart snapd
|
|
890
|
+
snap run pycharm-community
|
|
891
|
+
```
|
|
892
|
+
|
|
893
|
+
**For Chromium/Firefox:**
|
|
894
|
+
```bash
|
|
895
|
+
sudo snap connect chromium:desktop :desktop
|
|
896
|
+
sudo snap connect chromium:x11 :x11
|
|
897
|
+
sudo snap connect firefox:desktop :desktop
|
|
898
|
+
sudo snap connect firefox:x11 :x11
|
|
899
|
+
```
|
|
900
|
+
|
|
901
|
+
**Debug launch:**
|
|
902
|
+
```bash
|
|
903
|
+
PYCHARM_DEBUG=true snap run pycharm-community 2>&1 | tee /tmp/pycharm-debug.log
|
|
904
|
+
```
|
|
905
|
+
|
|
906
|
+
**Nuclear option (reinstall):**
|
|
907
|
+
```bash
|
|
908
|
+
snap remove pycharm-community
|
|
909
|
+
rm -rf ~/snap/pycharm-community
|
|
910
|
+
sudo snap install pycharm-community --classic
|
|
911
|
+
sudo snap connect pycharm-community:desktop :desktop
|
|
912
|
+
```
|
|
913
|
+
|
|
724
914
|
### Network Issues
|
|
725
915
|
|
|
726
916
|
If you encounter "Network not found" or "network 'default' is not active" errors:
|
|
@@ -1069,4 +1259,4 @@ qm set 9000 --boot c --bootdisk scsi0
|
|
|
1069
1259
|
|
|
1070
1260
|
## License
|
|
1071
1261
|
|
|
1072
|
-
|
|
1262
|
+
Apache License - see [LICENSE](LICENSE) file.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
clonebox/__init__.py,sha256=CyfHVVq6KqBr4CNERBpXk_O6Q5B35q03YpdQbokVvvI,408
|
|
2
|
+
clonebox/__main__.py,sha256=Fcoyzwwyz5-eC_sBlQk5a5RbKx8uodQz5sKJ190U0NU,135
|
|
3
|
+
clonebox/cli.py,sha256=vbJ65ShdXG1nGkQteCaFtDTas0L2RNV--aay2Qx-6F0,110765
|
|
4
|
+
clonebox/cloner.py,sha256=dX6K56goT3qZD3GOYjZBuAPMrAI0PriyFJWsJpQvyKc,46320
|
|
5
|
+
clonebox/container.py,sha256=tiYK1ZB-DhdD6A2FuMA0h_sRNkUI7KfYcJ0tFOcdyeM,6105
|
|
6
|
+
clonebox/dashboard.py,sha256=RhSPvR6kWglqXeLkCWesBZQid7wv2WpJa6w78mXbPjY,4268
|
|
7
|
+
clonebox/detector.py,sha256=aS_QlbG93-DE3hsjRt88E7O-PGC2TUBgUbP9wqT9g60,23221
|
|
8
|
+
clonebox/models.py,sha256=yBRUlJejpeJHZjvCYMGq1nXPFcmhLFxN-LqkEyveWsA,7913
|
|
9
|
+
clonebox/profiles.py,sha256=VaKVuxCrgyMxx-8_WOTcw7E8irwGxUPhZHVY6RxYYiE,2034
|
|
10
|
+
clonebox/validator.py,sha256=z4YuIgVnX6ZqfIdJtjKIFwZ-iWlRUnpX7gmWwq-Jr88,35352
|
|
11
|
+
clonebox/templates/profiles/ml-dev.yaml,sha256=MT7Wu3xGBnYIsO5mzZ2GDI4AAEFGOroIx0eU3XjNARg,140
|
|
12
|
+
clonebox-0.1.22.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
13
|
+
clonebox-0.1.22.dist-info/METADATA,sha256=MuI44ArtnU0ql1rF99Hf_4frTRHe7_AikJK9w2jk6tI,41591
|
|
14
|
+
clonebox-0.1.22.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
15
|
+
clonebox-0.1.22.dist-info/entry_points.txt,sha256=FES95Vi3btfViLEEoHdb8nikNxTqzaooi9ehZw9ZfWI,47
|
|
16
|
+
clonebox-0.1.22.dist-info/top_level.txt,sha256=LdMo2cvCrEcRGH2M8JgQNVsCoszLV0xug6kx1JnaRjo,9
|
|
17
|
+
clonebox-0.1.22.dist-info/RECORD,,
|
clonebox-0.1.20.dist-info/RECORD
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
clonebox/__init__.py,sha256=CyfHVVq6KqBr4CNERBpXk_O6Q5B35q03YpdQbokVvvI,408
|
|
2
|
-
clonebox/__main__.py,sha256=Fcoyzwwyz5-eC_sBlQk5a5RbKx8uodQz5sKJ190U0NU,135
|
|
3
|
-
clonebox/cli.py,sha256=08k0XvVdcExl6M64jqt7I_E04QVES3opXPexX9bYJec,103621
|
|
4
|
-
clonebox/cloner.py,sha256=_dJrcg4FoPzAU49J-duJdp37GF-5hE3R_ipbwaw-kaQ,32679
|
|
5
|
-
clonebox/container.py,sha256=tiYK1ZB-DhdD6A2FuMA0h_sRNkUI7KfYcJ0tFOcdyeM,6105
|
|
6
|
-
clonebox/dashboard.py,sha256=RhSPvR6kWglqXeLkCWesBZQid7wv2WpJa6w78mXbPjY,4268
|
|
7
|
-
clonebox/detector.py,sha256=aS_QlbG93-DE3hsjRt88E7O-PGC2TUBgUbP9wqT9g60,23221
|
|
8
|
-
clonebox/models.py,sha256=Uxz9eHov2epJpNYbl0ejaOX91iMSjqdHskGdC8-smVk,7789
|
|
9
|
-
clonebox/profiles.py,sha256=VaKVuxCrgyMxx-8_WOTcw7E8irwGxUPhZHVY6RxYYiE,2034
|
|
10
|
-
clonebox/validator.py,sha256=LnQSZEdJXFGcJrTPxzS2cQUmAXucGeHDKwxrX632h_s,21188
|
|
11
|
-
clonebox/templates/profiles/ml-dev.yaml,sha256=MT7Wu3xGBnYIsO5mzZ2GDI4AAEFGOroIx0eU3XjNARg,140
|
|
12
|
-
clonebox-0.1.20.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
|
13
|
-
clonebox-0.1.20.dist-info/METADATA,sha256=qOJSrz8MfPrZe3zO0Q16AfcdD_ybXx-YuVAs0_sij2g,35353
|
|
14
|
-
clonebox-0.1.20.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
|
|
15
|
-
clonebox-0.1.20.dist-info/entry_points.txt,sha256=FES95Vi3btfViLEEoHdb8nikNxTqzaooi9ehZw9ZfWI,47
|
|
16
|
-
clonebox-0.1.20.dist-info/top_level.txt,sha256=LdMo2cvCrEcRGH2M8JgQNVsCoszLV0xug6kx1JnaRjo,9
|
|
17
|
-
clonebox-0.1.20.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|