Skip to content

Commit 221c1d0

Browse files
committed
docs: add guest image tool inventory
1 parent a10da64 commit 221c1d0

10 files changed

Lines changed: 2253 additions & 0 deletions

File tree

docs/guest-image-tools.md

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# Guest Image Command-Line Tool Inventory
2+
3+
This section documents the command-line tools available inside production dstack guest OS images. The guest image is a minimal Yocto-based Linux environment, not a full general-purpose Linux distribution.
4+
5+
Use this inventory when writing `init_script`, `pre_launch_script`, operational scripts, or troubleshooting instructions that run inside a CVM.
6+
7+
## Version Pages
8+
9+
- [v0.5.4](./guest-image-tools/v0.5.4.md)
10+
- [v0.5.4.1](./guest-image-tools/v0.5.4.1.md)
11+
- [v0.5.5](./guest-image-tools/v0.5.5.md)
12+
- [v0.5.6](./guest-image-tools/v0.5.6.md)
13+
- [v0.5.6.1](./guest-image-tools/v0.5.6.1.md)
14+
- [v0.5.7](./guest-image-tools/v0.5.7.md)
15+
- [v0.5.8](./guest-image-tools/v0.5.8.md)
16+
- [v0.5.9](./guest-image-tools/v0.5.9.md)
17+
- [v0.5.10](./guest-image-tools/v0.5.10.md)
18+
19+
## Compatibility Overview
20+
21+
| Version | Major tool additions / notes |
22+
|---|---|
23+
| v0.5.4 / v0.5.4.1 | Baseline: Bash, BusyBox, curl, jq, systemd tools, Docker, WireGuard, legacy iptables. |
24+
| v0.5.5 | Adds ext4/XFS tools such as `resize2fs`, `mkfs.ext4`, `mkfs.xfs`, `xfs_growfs`. |
25+
| v0.5.6 | Adds GPT tools such as `sgdisk`, `gdisk`, `fixparts`. |
26+
| v0.5.6.1 | Adds `rsync`, FUSE helpers, and Sysbox commands. |
27+
| v0.5.7 | Adds `parted` and `partprobe`. |
28+
| v0.5.8 | No major userspace command additions; nftables kernel support exists, but no `nft` command. |
29+
| v0.5.9 | No major userspace command additions; ipset kernel support exists, but no `ipset` command. |
30+
| v0.5.10 | Adds `nft` and `python3`; `iptables` remains legacy backend. |
31+
32+
## Stable Baseline for v0.5.4+ Scripts
33+
34+
For scripts that need to work across v0.5.4 and later, the safest baseline is:
35+
36+
```text
37+
bash + BusyBox userland + curl + jq + systemd tools + docker + WireGuard + legacy iptables
38+
```
39+
40+
Recommended guard pattern:
41+
42+
```bash
43+
need() {
44+
command -v "$1" >/dev/null 2>&1 || {
45+
echo "missing command: $1" >&2
46+
exit 1
47+
}
48+
}
49+
50+
need curl
51+
need jq
52+
need docker
53+
need iptables
54+
```
55+
56+
Do not assume GNU extensions for BusyBox-provided commands, and do not assume optional tools such as `nft`, `parted`, `rsync`, `ipset`, `conntrack`, `ss`, `tc`, or `ethtool` unless the target version page lists them.
57+
58+
## Development Images
59+
60+
Development images (`dstack-dev-*`) include additional debugging tools such as `ssh`, `sshd`, `strace`, `tcpdump`, `gdb`, `gdbserver`, and `vim`. These tools are not part of the production image inventory unless listed on a version page.

docs/guest-image-tools/v0.5.10.md

Lines changed: 260 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,260 @@
1+
# dstack Guest Image Tools: v0.5.10
2+
3+
This page lists command-line tools present in the production dstack guest image for this version. The image is minimal; many commands are BusyBox applets rather than full GNU/Linux utilities.
4+
5+
## Image Metadata
6+
7+
| Field | Value |
8+
|---|---|
9+
| Guest image version | `0.5.10` |
10+
| meta-dstack revision | `2f417559793345cb9760abd49004bca1e5d28581` |
11+
| Image flavor | `prod` |
12+
13+
## Quick Availability Summary
14+
15+
| Command | Available | Notes |
16+
|---|---:|---|
17+
| `nft` | yes | introduced in v0.5.10 |
18+
| `iptables` | yes | legacy backend (`xtables-legacy-multi`) when present |
19+
| `ip` | yes | BusyBox implementation, not full iproute2 |
20+
| `ifconfig` | yes | |
21+
| `route` | yes | |
22+
| `ping` | yes | |
23+
| `nslookup` | yes | |
24+
| `curl` | yes | |
25+
| `jq` | yes | |
26+
| `docker` | yes | |
27+
| `wg` | yes | |
28+
| `parted` | yes | introduced in v0.5.7 |
29+
| `sgdisk` | yes | introduced in v0.5.6 |
30+
| `rsync` | yes | introduced in v0.5.6.1 |
31+
| `python3` | yes | present in v0.5.10 due to nftables dependencies |
32+
| `sysbox-runc` | yes | introduced in v0.5.6.1 |
33+
34+
## Commonly Requested Commands Not Present
35+
36+
`bridge`, `conntrack`, `ethtool`, `ipset`, `ss`, `ssh`, `sshd`, `tc`, `tcpdump`
37+
38+
## Versioned Tool Groups
39+
40+
### BusyBox 1.36.1
41+
42+
These commands are BusyBox applets in this image.
43+
44+
`[`, `[[`, `addgroup`, `adduser`, `ascii`, `ash`, `awk`, `base32`, `basename`, `bunzip2`, `busybox`,
45+
`bzcat`, `bzip2`, `cat`, `chgrp`, `chmod`, `chown`, `chroot`, `clear`, `cmp`, `cp`, `cpio`, `crc32`,
46+
`cut`, `date`, `dc`, `dd`, `delgroup`, `deluser`, `df`, `diff`, `dirname`, `dnsdomainname`, `du`,
47+
`dumpkmap`, `dumpleases`, `echo`, `egrep`, `env`, `expr`, `false`, `fbset`, `fgrep`, `find`, `free`,
48+
`fuser`, `grep`, `head`, `hostname`, `id`, `ifconfig`, `ifdown`, `ifup`, `ip`, `killall`, `less`,
49+
`ln`, `loadfont`, `loadkmap`, `logname`, `logread`, `ls`, `lspci`, `lsusb`, `lzcat`, `md5sum`,
50+
`mdev`, `microcom`, `mkdir`, `mkfifo`, `mknod`, `mktemp`, `mv`, `nc`, `netstat`, `nohup`, `nproc`,
51+
`nslookup`, `od`, `passwd`, `patch`, `pgrep`, `pidof`, `ping`, `ping6`, `printf`, `ps`, `pwd`,
52+
`rdate`, `readlink`, `realpath`, `reset`, `resize`, `rm`, `rmdir`, `route`, `run-parts`, `sed`,
53+
`seq`, `setconsole`, `sha1sum`, `sha256sum`, `shuf`, `sleep`, `sort`, `start-stop-daemon`, `stat`,
54+
`strings`, `stty`, `sync`, `sysctl`, `tail`, `tar`, `tee`, `telnet`, `test`, `tftp`, `time`, `top`,
55+
`touch`, `tr`, `traceroute`, `true`, `ts`, `tty`, `uname`, `uniq`, `unlink`, `unzip`, `uptime`,
56+
`users`, `usleep`, `vi`, `vlock`, `watch`, `wc`, `wget`, `which`, `who`, `whoami`, `xargs`, `xzcat`,
57+
`yes`
58+
59+
### Bash 5.2.21
60+
61+
`bash`, `bash.bash`, `sh`
62+
63+
### dstack guest components 0.5.10
64+
65+
`app-compose.sh`, `dstack-guest-agent`, `dstack-prepare.sh`, `dstack-util`, `wg-checker.sh`
66+
67+
### curl 8.7.1
68+
69+
`curl`
70+
71+
### jq 1.7.1
72+
73+
`jq`
74+
75+
### OpenSSL 3.2.3
76+
77+
`openssl`
78+
79+
### systemd 255.4
80+
81+
`bootctl`, `busctl`, `halt`, `hostnamectl`, `init`, `journalctl`, `localectl`, `mount.ddi`,
82+
`networkctl`, `poweroff`, `reboot`, `resolvconf`, `resolvectl`, `runlevel`, `shutdown`, `systemctl`,
83+
`systemd-ac-power`, `systemd-ask-password`, `systemd-cat`, `systemd-cgls`, `systemd-cgtop`,
84+
`systemd-creds`, `systemd-delta`, `systemd-detect-virt`, `systemd-dissect`, `systemd-escape`,
85+
`systemd-hwdb`, `systemd-id128`, `systemd-inhibit`, `systemd-machine-id-setup`, `systemd-mount`,
86+
`systemd-notify`, `systemd-path`, `systemd-resolve`, `systemd-run`, `systemd-socket-activate`,
87+
`systemd-stdio-bridge`, `systemd-sysusers`, `systemd-tmpfiles`, `systemd-umount`, `telinit`,
88+
`timedatectl`, `udevadm`, `udevd`, `userdbctl`, `varlinkctl`
89+
90+
### chrony 4.5
91+
92+
`chronyc`, `chronyd`
93+
94+
### Docker/Moby 25.0.3 + runc 1.1.12
95+
96+
`docker`, `docker-init`, `docker-proxy`, `docker-runc`, `dockerd`
97+
98+
### containerd v2.0.0-beta.2-204-gb1624c362.m
99+
100+
`containerd`, `containerd-ctr`, `containerd-shim-runc-v2`, `ctr`, `docker-containerd`,
101+
`docker-containerd-ctr`
102+
103+
### runc 1.1.12+dev
104+
105+
`runc`
106+
107+
### wireguard-tools 1.0.20210914
108+
109+
`wg`, `wg-quick`
110+
111+
### iptables 1.8.10 (legacy backend)
112+
113+
The installed `iptables`, `iptables-save`, and `iptables-restore` commands use the legacy backend. `xtables-nft-multi` is not installed.
114+
115+
`ip6tables`, `ip6tables-legacy`, `ip6tables-legacy-restore`, `ip6tables-legacy-save`,
116+
`ip6tables-restore`, `ip6tables-save`, `iptables`, `iptables-legacy`, `iptables-legacy-restore`,
117+
`iptables-legacy-save`, `iptables-restore`, `iptables-save`, `iptables-xml`, `xtables-legacy-multi`
118+
119+
### nftables 1.0.9
120+
121+
`nft`
122+
123+
### cryptsetup 2.7.2
124+
125+
`cryptsetup`, `cryptsetup-ssh`, `integritysetup`, `veritysetup`
126+
127+
### OpenZFS 2.2.5
128+
129+
`arc_summary`, `arcstat`, `dbufstat`, `fsck.zfs`, `mpicalc`, `raidz_test`, `zdb`, `zed`, `zfs`,
130+
`zfs_ids_to_path`, `zgenhostid`, `zhack`, `zilstat`, `zinject`, `zpool`, `zstream`, `zstreamdump`,
131+
`ztest`, `zvol_wait`
132+
133+
### util-linux 2.39.3
134+
135+
`addpart`, `blkdiscard`, `blkid`, `blkid.util-linux`, `blkpr`, `blkzone`, `blockdev`,
136+
`blockdev.util-linux`, `cal`, `cal.util-linux`, `cfdisk`, `chcpu`, `chmem`, `choom`, `chrt`,
137+
`chrt.util-linux`, `col`, `colcrt`, `colrm`, `column`, `ctrlaltdel`, `delpart`, `dmesg`,
138+
`dmesg.util-linux`, `eject`, `eject.util-linux`, `fadvise`, `fallocate`, `fallocate.util-linux`,
139+
`fcntl-lock`, `fdisk`, `fdisk.util-linux`, `fincore`, `findfs`, `findfs.util-linux`, `findmnt`,
140+
`flock`, `flock.util-linux`, `fsck`, `fsck.cramfs`, `fsck.util-linux`, `fsfreeze`,
141+
`fsfreeze.util-linux`, `fstrim`, `fstrim.util-linux`, `getopt`, `getopt.util-linux`, `hardlink`,
142+
`hexdump`, `hexdump.util-linux`, `hwclock`, `hwclock.util-linux`, `i386`, `ionice`,
143+
`ionice.util-linux`, `ipcmk`, `ipcrm`, `ipcrm.util-linux`, `ipcs`, `ipcs.util-linux`, `irqtop`,
144+
`isosize`, `kill`, `kill.util-linux`, `last`, `last.util-linux`, `lastb`, `lastb.util-linux`,
145+
`ldattach`, `linux32`, `linux64`, `logger`, `logger.util-linux`, `look`, `losetup`,
146+
`losetup.util-linux`, `lsblk`, `lscpu`, `lsfd`, `lsipc`, `lsirq`, `lslocks`, `lslogins`, `lsmem`,
147+
`lsns`, `mcookie`, `mcookie.util-linux`, `mesg`, `mesg.util-linux`, `mkfs`, `mkfs.cramfs`, `mkswap`,
148+
`mkswap.util-linux`, `more`, `more.util-linux`, `mount`, `mount.util-linux`, `mountpoint`,
149+
`mountpoint.util-linux`, `namei`, `nologin`, `nologin.util-linux`, `nsenter`, `nsenter.util-linux`,
150+
`partx`, `pipesz`, `pivot_root`, `pivot_root.util-linux`, `prlimit`, `prlimit.util-linux`,
151+
`readprofile`, `readprofile.util-linux`, `rename`, `renice`, `renice.util-linux`, `resizepart`,
152+
`rev`, `rev.util-linux`, `rfkill`, `rfkill.util-linux`, `rtcwake`, `rtcwake.util-linux`, `script`,
153+
`scriptlive`, `scriptreplay`, `scriptreplay.util-linux`, `setarch`, `setpriv`, `setpriv.util-linux`,
154+
`setsid`, `setsid.util-linux`, `setterm`, `sfdisk`, `sulogin`, `sulogin.util-linux`, `swaplabel`,
155+
`swapoff`, `swapoff.util-linux`, `swapon`, `swapon.util-linux`, `switch_root`,
156+
`switch_root.util-linux`, `taskset`, `taskset.util-linux`, `uclampset`, `ul`, `umount`,
157+
`umount.util-linux`, `uname26`, `unshare`, `unshare.util-linux`, `utmpdump`, `utmpdump.util-linux`,
158+
`uuidd`, `uuidgen`, `uuidgen.util-linux`, `uuidparse`, `waitpid`, `wall`, `wall.util-linux`,
159+
`wdctl`, `whereis`, `wipefs`, `write`, `x86_64`, `zramctl`
160+
161+
### e2fsprogs 1.47.0
162+
163+
`badblocks`, `chattr`, `chattr.e2fsprogs`, `debugfs`, `dumpe2fs`, `e2freefrag`, `e2fsck`, `e2image`,
164+
`e2mmpstatus`, `e2undo`, `e4crypt`, `e4defrag`, `filefrag`, `fsck.ext2`, `fsck.ext3`, `fsck.ext4`,
165+
`logsave`, `lsattr`, `lsattr.e2fsprogs`, `mke2fs`, `mke2fs.e2fsprogs`, `mkfs.ext2`,
166+
`mkfs.ext2.e2fsprogs`, `mkfs.ext3`, `mkfs.ext4`, `mklost+found`, `populate-extfs.sh`, `resize2fs`
167+
168+
### xfsprogs 6.6.0
169+
170+
`fsck.xfs`, `mkfs.xfs`, `xfs_admin`, `xfs_bmap`, `xfs_copy`, `xfs_db`, `xfs_estimate`, `xfs_freeze`,
171+
`xfs_fsr`, `xfs_growfs`, `xfs_info`, `xfs_io`, `xfs_logprint`, `xfs_mdrestore`, `xfs_metadump`,
172+
`xfs_mkfile`, `xfs_ncheck`, `xfs_quota`, `xfs_repair`, `xfs_rtcp`, `xfs_spaceman`
173+
174+
### GPT fdisk 1.0.9
175+
176+
`fixparts`, `gdisk`, `sgdisk`
177+
178+
### GNU parted 3.6
179+
180+
`parted`, `partprobe`, `partprobe.parted`
181+
182+
### rsync 3.2.7
183+
184+
`rsync`, `rsync-ssl`
185+
186+
### Sysbox 0.6.7
187+
188+
`sysbox-fs`, `sysbox-mgr`, `sysbox-runc`
189+
190+
### fuse3 3.16.2
191+
192+
`fusermount`, `fusermount3`, `mount.fuse`, `mount.fuse3`, `ulockmgr_server`
193+
194+
### pigz 2.8
195+
196+
`gunzip`, `gzip`, `pigz`, `pigzcat`, `unpigz`, `zcat`
197+
198+
### kmod 31
199+
200+
`depmod`, `depmod.kmod`, `insmod`, `insmod.kmod`, `kmod`, `lsmod`, `lsmod.kmod`, `modinfo`,
201+
`modinfo.kmod`, `modprobe`, `modprobe.kmod`, `rmmod`, `rmmod.kmod`
202+
203+
### kbd 2.6.4
204+
205+
`chvt`, `chvt.kbd`, `deallocvt`, `deallocvt.kbd`, `dumpkeys`, `fgconsole`, `fgconsole.kbd`,
206+
`getkeycodes`, `kbd_mode`, `kbdinfo`, `kbdrate`, `loadkeys`, `loadunimap`, `mapscrn`, `openvt`,
207+
`openvt.kbd`, `psfaddtable`, `psfgettable`, `psfstriptable`, `psfxtable`, `resizecons`, `setfont`,
208+
`setkeycodes`, `setleds`, `setmetamode`, `setvtrgb`, `showconsolefont`, `showkey`, `showkey.kbd`,
209+
`unicode_start`, `unicode_stop`
210+
211+
### D-Bus 1.14.10
212+
213+
`dbus-cleanup-sockets`, `dbus-daemon`, `dbus-launch`, `dbus-monitor`, `dbus-run-session`,
214+
`dbus-send`, `dbus-update-activation-environment`, `dbus-uuidgen`
215+
216+
### shadow 4.14.2
217+
218+
`faillock`, `groups`, `groups.shadow`, `login.shadow`, `mkhomedir_helper`, `newgrp`,
219+
`newgrp.shadow`, `pam_namespace_helper`, `pam_timestamp_check`, `pwhistory_helper`, `sg`, `su`,
220+
`su.shadow`, `unix_chkpwd`, `unix_update`
221+
222+
### bridge-utils 1.7.1
223+
224+
`brctl`, `brctl.bridge-utils`
225+
226+
### Python 3.12.6
227+
228+
`python3`, `python3.12`
229+
230+
### device-mapper tools
231+
232+
`dmsetup`, `dmstats`
233+
234+
### libseccomp tools
235+
236+
`scmp_sys_resolver`
237+
238+
### ca-certificates
239+
240+
`update-ca-certificates`
241+
242+
### GnuPG helper
243+
244+
`yat2m`
245+
246+
### glibc 2.39
247+
248+
`ldconfig`
249+
250+
### mount-copybind helper
251+
252+
`mount-copybind`
253+
254+
## Notes for Scripts
255+
256+
- Prefer `command -v` checks for optional tools.
257+
- Treat BusyBox applets as BusyBox-compatible, not GNU-compatible.
258+
- Use `docker compose`, not the standalone `docker-compose` command.
259+
- For firewall scripts, assume legacy `iptables` unless you explicitly require `nft` and check for it at runtime.
260+
- Put application-specific tools in your container image instead of relying on the guest OS.

0 commit comments

Comments
 (0)