Skip to content

Commit cea3f25

Browse files
committed
feat: add start order to docker compose
1 parent adb7081 commit cea3f25

File tree

5 files changed

+43
-38
lines changed

5 files changed

+43
-38
lines changed

compose.yaml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
# TODO: remove privileged: /dev/kvm, /dev/net/tun, NET_ADMIN
22
# IDEA: may be need 2 networks
3-
# TODO: Wait until image ready
43

54
services:
65
runtime:
@@ -9,8 +8,10 @@ services:
98
volumes:
109
- ./blobs:/blobs
1110
- image:/image:ro
12-
command: sleep infinity
1311
privileged: true
12+
depends_on:
13+
ubuntu:
14+
condition: service_completed_successfully
1415

1516
ubuntu:
1617
image: devmachines/ubuntu

main.go

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package main
22

33
import (
44
"fmt"
5-
"log"
65
"os"
76

87
"github.com/utkin-tech/devmachines/cloudinit"
@@ -21,36 +20,38 @@ func main() {
2120
os.Exit(1)
2221
}
2322

24-
_, err = disk.SetupDisk(user)
23+
diskArgs, err := disk.SetupDisk(user)
2524
if err != nil {
26-
fmt.Printf("error: %v\n", err)
25+
fmt.Printf("failed to setup disk: %v\n", err)
2726
os.Exit(1)
2827
}
2928

30-
_, err = cloudinit.SetupCloudInit(net, user)
29+
cloudInitArgs, err := cloudinit.SetupCloudInit(net, user)
3130
if err != nil {
32-
log.Fatal(err)
31+
fmt.Printf("failed to setup cloud-init: %v\n", err)
32+
os.Exit(1)
3333
}
3434

35-
_, err = network.SetupBridge(net)
35+
bridgeArgs, err := network.SetupBridge(net)
3636
if err != nil {
37-
fmt.Printf("Error setting up network bridge: %v\n", err)
37+
fmt.Printf("failed to setup network bridge: %v\n", err)
3838
return
3939
}
4040

41-
// config := QEMUConfig{
42-
// MemoryMB: 2048,
43-
// CPUCores: 2,
44-
// DiskImagePath: "/blobs/disk.img",
45-
// SeedImagePath: "/blobs/seed.iso",
46-
// TapInterface: "tap0",
47-
// Acceleration: true,
48-
// Output: os.Stdout,
49-
// Wait: true,
50-
// }
51-
52-
// if err := LaunchQEMUVM(config); err != nil {
53-
// fmt.Printf("Error launching VM: %v\n", err)
54-
// os.Exit(1)
55-
// }
41+
config := QEMUConfig{
42+
MemoryMB: 2048,
43+
CPUCores: 2,
44+
Output: os.Stdout,
45+
Wait: true,
46+
}
47+
48+
var args []string
49+
args = append(args, diskArgs...)
50+
args = append(args, cloudInitArgs...)
51+
args = append(args, bridgeArgs...)
52+
53+
if err := StartVM(config, args...); err != nil {
54+
fmt.Printf("Error launching VM: %v\n", err)
55+
os.Exit(1)
56+
}
5657
}

qemu.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,24 @@ import (
66
"os/exec"
77
)
88

9-
func LaunchQEMUVM(config QEMUConfig) error {
9+
// QEMUConfig holds configuration parameters for the QEMU virtual machine
10+
type QEMUConfig struct {
11+
MemoryMB int // Memory in megabytes (e.g., 2048)
12+
CPUCores int // Number of CPU cores (e.g., 2)
13+
Output io.Writer // Where to direct output (nil for default)
14+
Wait bool // Whether to wait for VM to exit
15+
}
16+
17+
func StartVM(config QEMUConfig, extraArgs ...string) error {
1018
args := []string{
1119
"-m", fmt.Sprintf("%d", config.MemoryMB),
1220
"-smp", fmt.Sprintf("%d", config.CPUCores),
1321
"-enable-kvm",
1422
"-nographic",
1523
}
1624

25+
args = append(args, extraArgs...)
26+
1727
cmd := exec.Command("qemu-system-x86_64", args...)
1828
cmd.Stdout = config.Output
1929
cmd.Stderr = config.Output
@@ -27,13 +37,3 @@ func LaunchQEMUVM(config QEMUConfig) error {
2737
}
2838
return nil
2939
}
30-
31-
// QEMUConfig holds configuration parameters for the QEMU virtual machine
32-
type QEMUConfig struct {
33-
MemoryMB int // Memory in megabytes (e.g., 2048)
34-
CPUCores int // Number of CPU cores (e.g., 2)
35-
SeedImagePath string // Path to seed ISO (e.g., "/blobs/seed.iso")
36-
TapInterface string // Tap interface name (e.g., "tap0")
37-
Output io.Writer // Where to direct output (nil for default)
38-
Wait bool // Whether to wait for VM to exit
39-
}

runtime.Dockerfile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,5 @@ FROM alpine:${ALPINE_VERSION}
2727
RUN apk add qemu-system-x86_64 qemu-img iproute2 cdrkit
2828

2929
COPY --from=binary /devmachines-runtime /devmachines-runtime
30+
31+
CMD ["/devmachines-runtime"]

ubuntu.Dockerfile

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
FROM scratch
1+
ARG ALPINE_VERSION="3.20"
2+
3+
FROM alpine:${ALPINE_VERSION}
24

35
WORKDIR /image
46

5-
RUN wget -O ubuntu.img \
6-
https://cloud-images.ubuntu.com/jammy/current/jammy-server-cloudimg-amd64-disk-kvm.img
7+
COPY images/ubuntu.img ubuntu.img

0 commit comments

Comments
 (0)