Skip to content

Commit 96fc65d

Browse files
AmozPayAmozPay
AmozPay
authored andcommitted
work in progress
1 parent a24a897 commit 96fc65d

File tree

11 files changed

+98
-41
lines changed

11 files changed

+98
-41
lines changed

docker/run_vm_supervisor.sh

+5-4
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,11 @@ fi
1111
$DOCKER_COMMAND build -t alephim/vm-supervisor-dev -f docker/vm_supervisor-dev.dockerfile .
1212

1313
$DOCKER_COMMAND run -ti --rm \
14-
-v "$(pwd)/runtimes/aleph-debian-11-python/rootfs.squashfs:/opt/aleph-vm/runtimes/aleph-debian-11-python/rootfs.squashfs:ro" \
15-
-v "$(pwd)/examples/volumes/volume-venv.squashfs:/opt/aleph-vm/examples/volumes/volume-venv.squashfs:ro" \
16-
-v "$(pwd)/vm_supervisor:/opt/aleph-vm/vm_supervisor:ro" \
17-
-v "$(pwd)/firecracker:/opt/aleph-vm/firecracker:ro" \
1814
--device /dev/kvm \
1915
-p 4020:4020 \
2016
alephim/vm-supervisor-dev $@
17+
18+
# -v "$(pwd)/runtimes/aleph-debian-11-python/rootfs.squashfs:/opt/aleph-vm/runtimes/aleph-debian-11-python/rootfs.squashfs:ro" \
19+
# -v "$(pwd)/examples/volumes/volume-venv.squashfs:/opt/aleph-vm/examples/volumes/volume-venv.squashfs:ro" \
20+
# -v "$(pwd)/vm_supervisor:/opt/aleph-vm/vm_supervisor:ro" \
21+
# -v "$(pwd)/firecracker:/opt/aleph-vm/firecracker:ro" \

docker/run_vm_supervisor_2.sh

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#!/bin/sh
2+
3+
# Use Podman if installed, else use Docker
4+
if hash podman 2> /dev/null
5+
then
6+
DOCKER_COMMAND=podman
7+
else
8+
DOCKER_COMMAND=docker
9+
fi
10+
11+
$DOCKER_COMMAND build -t alephim/vm-supervisor-dev -f docker/vm_supervisor-dev-docker.dockerfile .
12+
13+
$DOCKER_COMMAND run -ti --privileged --rm \
14+
--device /dev/kvm \
15+
-p 4020:4020 \
16+
alephim/vm-supervisor-dev $@
17+
# -v "$(pwd)/runtimes/aleph-docker/rootfs.squashfs:/opt/aleph-vm/runtimes/aleph-docker/rootfs.squashfs:ro" \
18+
# -v "$(pwd)/examples/volumes/docker-data.squashfs:/opt/aleph-vm/examples/volumes/docker-data.squashfs:ro" \
19+
# -v "$(pwd)/vm_supervisor:/opt/aleph-vm/vm_supervisor:ro" \
20+
# -v "$(pwd)/firecracker:/opt/aleph-vm/firecracker:ro" \

docker/vm_supervisor-dev-docker.dockerfile

+11-4
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ FROM debian:bullseye
55
RUN apt-get update && apt-get -y upgrade && apt-get install -y \
66
sudo acl curl squashfs-tools git \
77
python3 python3-aiohttp python3-msgpack python3-pip python3-aiodns python3-aioredis \
8-
python3-psutil python3-setproctitle python3-sqlalchemy python3-packaging \
8+
python3-psutil python3-setproctitle python3-sqlalchemy python3-packaging python3-cpuinfo \
99
&& rm -rf /var/lib/apt/lists/*
1010

1111
RUN useradd jailman
1212

1313
RUN mkdir /opt/firecracker
1414
RUN chown $(whoami) /opt/firecracker
15-
RUN curl -fsSL https://github.com/firecracker-microvm/firecracker/releases/download/v1.0.0/firecracker-v1.0.0-x86_64.tgz | tar -xz --directory /opt/firecracker
16-
RUN curl -fsSL -o /opt/firecracker/vmlinux.bin https://github.com/aleph-im/aleph-vm/releases/download/0.1.0/vmlinux.bin
15+
RUN curl -fsSL https://github.com/firecracker-microvm/firecracker/releases/download/v1.1.1/firecracker-v1.1.1-x86_64.tgz | tar -xz --directory /opt/firecracker
16+
RUN curl -fsSL -o /opt/firecracker/vmlinux.bin https://s3.amazonaws.com/spec.ccfc.min/img/quickstart_guide/x86_64/kernels/vmlinux.bin
1717

1818
# Link binaries on version-agnostic paths:
1919
RUN ln /opt/firecracker/release-*/firecracker-v* /opt/firecracker/firecracker
@@ -36,7 +36,14 @@ ENV ALEPH_VM_FAKE_DATA True
3636
ENV ALEPH_VM_SUPERVISOR_HOST "0.0.0.0"
3737

3838
# Make it easy to enter this command from a shell script
39-
RUN echo "python3 -m vm_supervisor --print-settings --very-verbose --system-logs --profile -f ./examples/example_docker_container > log.txt 2>&1" >> /root/.bash_history
39+
RUN echo "python3 -m vm_supervisor --print-settings --very-verbose --system-logs --profile -f ./examples/example_docker_container" >> /root/.bash_history
40+
41+
42+
ENV BENCHMARK_FAKE_DATA_PROGRAM="/opt/aleph-vm/examples/example_docker_container"
43+
ENV FAKE_DATA_MESSAGE="/opt/aleph-vm/examples/message_from_aleph_docker_runtime.json"
44+
ENV FAKE_DATA_DATA="/opt/aleph-vm/examples/data/"
45+
ENV FAKE_DATA_RUNTIME="/opt/aleph-vm/runtimes/aleph-docker/rootfs.squashfs"
46+
ENV FAKE_DATA_VOLUME="/opt/aleph-vm/examples/volumes/docker-data.squashfs"
4047

4148
RUN mkdir /opt/aleph-vm/
4249
COPY ./vm_supervisor /opt/aleph-vm/vm_supervisor

examples/message_from_aleph_docker_runtime.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@
5050
"runtime": {
5151
"ref": "5f31b0706f59404fad3d0bff97ef89ddf24da4761608ea0646329362c662ba51",
5252
"use_latest": false,
53-
"comment": "Aleph Alpine Linux with Python 3.8"
53+
"comment": "Aleph Debian Linux with Docker"
5454
},
5555
"volumes": [
5656
{

examples/volumes/build_squashfs.sh

+2
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,7 @@ else
1010
DOCKER_COMMAND=docker
1111
fi
1212

13+
echo DOCKER_COMMAND=$DOCKER_COMMAND
14+
1315
$DOCKER_COMMAND build -t aleph-vm-build-squashfs .
1416
$DOCKER_COMMAND run --rm -v "$(pwd)":/mnt aleph-vm-build-squashfs

runtimes/aleph-alpine-3.13-python/init0.sh

+2
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,7 @@ log "Setup socat"
4343
socat UNIX-LISTEN:/tmp/socat-socket,fork,reuseaddr VSOCK-CONNECT:2:53 &
4444
log "Socat ready"
4545

46+
pip show aiohttp
47+
4648
# Replace this script with the manager
4749
exec /root/init1.py

runtimes/aleph-alpine-3.13-python/init1.py

+25-20
Original file line numberDiff line numberDiff line change
@@ -10,22 +10,27 @@
1010

1111
logger.debug("Imports starting")
1212

13-
import ctypes
14-
import asyncio
15-
import os
16-
import socket
17-
from enum import Enum
18-
import subprocess
19-
import sys
20-
import traceback
21-
from contextlib import redirect_stdout
22-
from dataclasses import dataclass, field
23-
from io import StringIO
24-
from os import system
25-
from shutil import make_archive
26-
from typing import Optional, Dict, Any, Tuple, List, NewType, Union, AsyncIterable
27-
28-
import aiohttp
13+
# import ctypes
14+
# import asyncio
15+
# import os
16+
# import socket
17+
# from enum import Enum
18+
# import subprocess
19+
# import sys
20+
# import traceback
21+
# from contextlib import redirect_stdout
22+
# from dataclasses import dataclass, field
23+
# from io import StringIO
24+
# from os import system
25+
# from shutil import make_archive
26+
# from typing import Optional, Dict, Any, Tuple, List, NewType, Union, AsyncIterable
27+
28+
from aiohttp import (
29+
ClientTimeout,
30+
ClientConnectorError,
31+
ClientSession
32+
)
33+
2934
import msgpack
3035

3136
logger.debug("Imports finished")
@@ -326,13 +331,13 @@ async def run_executable_http(scope: dict) -> Tuple[Dict, Dict, str, Optional[by
326331
headers = None
327332
body = None
328333

329-
timeout = aiohttp.ClientTimeout(total=5)
330-
async with aiohttp.ClientSession(timeout=timeout) as session:
334+
timeout = ClientTimeout(total=5)
335+
async with ClientSession(timeout=timeout) as session:
331336
while not body:
332337
try:
333338
tries += 1
334339
headers, body = await make_request(session, scope)
335-
except aiohttp.ClientConnectorError:
340+
except ClientConnectorError:
336341
if tries > 20:
337342
raise
338343
await asyncio.sleep(0.05)
@@ -361,7 +366,7 @@ async def process_instruction(
361366
# Close the cached session in aleph_client:
362367
from aleph_client.asynchronous import get_fallback_session
363368

364-
session: aiohttp.ClientSession = get_fallback_session()
369+
session: ClientSession = get_fallback_session()
365370
await session.close()
366371
logger.debug("Aiohttp cached session closed")
367372
yield b"STOP\n"

runtimes/aleph-debian-11-python/create_disk_image.sh

-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ apt-get install -y --no-install-recommends --no-install-suggests \
1717
python3-minimal \
1818
openssh-server \
1919
socat libsecp256k1-0 \
20-
\
2120
python3-aiohttp python3-msgpack \
2221
python3-setuptools \
2322
python3-pip python3-cytoolz python3-pydantic \

runtimes/aleph-docker/init0.sh

+1-2
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@ mkdir -p /overlay
1515
mkdir -p /overlay/root/rw /overlay/root/work
1616
/bin/mount -o noatime,lowerdir=/,upperdir=/overlay/root/rw,workdir=/overlay/root/work -t overlay "overlayfs:/overlay/root/rw" /mnt
1717

18-
echo HERE
19-
stat -f -c %T /overlay/
2018

2119
# Same for /var/lib/docker
2220
# /data
@@ -41,6 +39,7 @@ mount -t devpts devpts /dev/pts -o mode=0620,gid=5,nosuid,noexec
4139
mount -t tmpfs shm /dev/shm -omode=1777,nosuid,nodev
4240

4341
cgroupfs-mount
42+
4443
# List block devices
4544
lsblk
4645

runtimes/aleph-docker/init1.py

+20-1
Original file line numberDiff line numberDiff line change
@@ -11,22 +11,32 @@
1111
logger.debug("Imports starting")
1212

1313
import ctypes
14+
logger.debug("1")
1415
import asyncio
1516
import os
17+
logger.debug("2")
1618
import socket
1719
from enum import Enum
20+
logger.debug("3")
1821
import subprocess
1922
import sys
2023
import traceback
24+
logger.debug("4")
2125
from contextlib import redirect_stdout
2226
from dataclasses import dataclass, field
2327
from io import StringIO
28+
logger.debug("5")
2429
from os import system
30+
logger.debug("6")
2531
from shutil import make_archive
32+
logger.debug("7")
2633
from typing import Optional, Dict, Any, Tuple, List, NewType, Union, AsyncIterable
34+
logger.debug("8")
2735

2836
import aiohttp
37+
logger.debug("9")
2938
import msgpack
39+
logger.debug("10")
3040

3141
logger.debug("Imports finished")
3242

@@ -449,8 +459,17 @@ def receive_config(client) -> ConfigurationPayload:
449459

450460

451461
def setup_docker():
462+
# tmp docker test overlay
463+
# mkdir -p /docker
464+
# /bin/mount -t tmpfs -o noatime,mode=0755 tmpfs /docker
465+
# mkdir -p /docker/persist/work /docker/persist/upper
466+
# /bin/mount -o noatime,lowerdir=/opt/docker,upperdir=/docker/persist/upper,workdir=/docker/persist/work -t overlay "overlayfs:/docker/persist/upper" /var/lib/docker
467+
468+
# echo HERE
469+
# stat -f -c %T /overlay/
452470
docker_mountpoint = os.environ.get("DOCKER_MOUNTPOINT")
453-
system(f"ls {docker_mountpoint}")
471+
os.makedirs("/docker", exist_ok=True)
472+
system("bin/mount -t tmpfs -o noatime,mode=0755 tmpfs /docker")
454473
os.makedirs("/docker/persist/work", exist_ok=True)
455474
os.makedirs("/docker/persist/upper", exist_ok=True)
456475
system("stat -f /")

vm_supervisor/conf.py

+11-8
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from pathlib import Path
77
from subprocess import check_output
88
from typing import NewType, Optional, List
9+
from os import environ
910

1011
from pydantic import BaseSettings, Field
1112

@@ -118,23 +119,25 @@ class Settings(BaseSettings):
118119

119120
FAKE_DATA_PROGRAM: Optional[Path] = None
120121
BENCHMARK_FAKE_DATA_PROGRAM = Path(
121-
abspath(join(__file__, "../../examples/example_fastapi"))
122-
# abspath(join(__file__, "../../examples/example_docker_container"))
122+
environ.get("BENCHMARK_FAKE_DATA_PROGRAM")
123+
or abspath(join(__file__, "../../examples/example_fastapi"))
123124
)
124125

125126
FAKE_DATA_MESSAGE = Path(
126-
abspath(join(__file__, "../../examples/message_from_aleph.json"))
127+
environ.get("FAKE_DATA_MESSAGE")
128+
or abspath(join(__file__, "../../examples/message_from_aleph.json"))
127129
)
128130
FAKE_DATA_DATA: Optional[Path] = Path(
129-
abspath(join(__file__, "../../examples/data/"))
131+
environ.get("FAKE_DATA_DATA")
132+
or abspath(join(__file__, "../../examples/data/"))
130133
)
131134
FAKE_DATA_RUNTIME = Path(
132-
abspath(join(__file__, "../../runtimes/aleph-debian-11-python/rootfs.squashfs"))
133-
# abspath(join(__file__, "../../runtimes/aleph-docker/rootfs.squashfs"))
135+
environ.get("FAKE_DATA_RUNTIME")
136+
or abspath(join(__file__, "../../runtimes/aleph-debian-11-python/rootfs.squashfs"))
134137
)
135138
FAKE_DATA_VOLUME: Optional[Path] = Path(
136-
abspath(join(__file__, "../../examples/volumes/volume-venv.squashfs"))
137-
# abspath(join(__file__, "../../examples/volumes/docker-data.squashfs"))
139+
environ.get("FAKE_DATA_VOLUME")
140+
or abspath(join(__file__, "../../examples/volumes/volume-venv.squashfs"))
138141
)
139142

140143
CHECK_FASTAPI_VM_ID = (

0 commit comments

Comments
 (0)