This is for Single Density systems, the disk size and format in cpmtools / greaseweazle will need to be changed for DD models.

Create a file that's the right size (100K):

$ dd if=/dev/zero bs=1024 count=100 of=occ1sd.img

Create a CPM file system on the disk:

$ mkfs.cpm -f osb1sssd occ1sd.img

If you want to make a bootable disk, we need to copy the CP/M system tracks over. These tracks are reserved regardless, so this won't take extra space. This is needed to ensure CP/M doesn't halt on a CTRL+C.

Grab an existing bootable (SD) disk image and convert it to a sector dump image:

$ dsktrans -itype tele -otype imd OS1SYSS.TD0 OS1SYSS.IMD
$ disk-analyse OS1SYSS.IMD occ1-sssd-cpmutilities.img

Grab the boot sectors (first three tracks, 0x1E00 / 7680 bytes):

$ dd if=occ1-sssd-cpmutilities.img bs=1 count=7680 of=bootsec.osb

If this disk image automatically runs a command, clear the command from the file (at offset 0x168B in the boot sector / disk image):

cpm-autost

Replace the bytes with NULs (Zeros).

Overwrite the empty system tracks in your blank image with the boot sector:

dd if=bootsec.osb conv=notrunc of=occ1sd.img

Write the image to disk:

gw write --drive=1 --tracks="h=0:c=0-39" --format=occ1.sd occ1sd.img