Skip to content

Commit ba89f63

Browse files
committed
save progress again
1 parent b916cbe commit ba89f63

File tree

7 files changed

+77
-21
lines changed

7 files changed

+77
-21
lines changed

examples/message_from_aleph_docker_runtime.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,12 @@
5454
},
5555
"volumes": [
5656
{
57-
"mount": "/opt/docker",
57+
"mount": "/opt/docker/metadata",
58+
"ref": "5f31b0706f59404fad3d0bff97ef89ddf24da4761608ea0646329362c662ba51",
59+
"use_latest": false
60+
},
61+
{
62+
"mount": "/opt/docker/layers",
5863
"ref": "5f31b0706f59404fad3d0bff97ef89ddf24da4761608ea0646329362c662ba51",
5964
"use_latest": false
6065
},

run_supervisor_host.sh

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
#!/bin/sh
2+
3+
export PYTHONPATH=$(pwd)
4+
5+
export ALEPH_VM_ALLOW_VM_NETWORKING=False
6+
export ALEPH_VM_NETWORK_INTERFACE=tap0
7+
export ALEPH_VM_USE_JAILER=False
8+
export ALEPH_VM_FAKE_DATA=True
9+
export ALEPH_VM_SUPERVISOR_HOST=0.0.0.0
10+
11+
export BENCHMARK_FAKE_DATA_PROGRAM=$(pwd)/examples/example_docker_container
12+
export FAKE_DATA_MESSAGE=$(pwd)/examples/message_from_aleph_docker_runtime.json
13+
export FAKE_DATA_DATA=$(pwd)/examples/data/
14+
export FAKE_DATA_RUNTIME=$(pwd)/runtimes/aleph-docker/rootfs.squashfs
15+
export FAKE_DATA_VOLUME=$(pwd)/examples/volumes/docker/layers:/opt/docker/layers,$(pwd)/examples/volumes/docker/metadata:/opt/docker/metadata
16+
17+
18+
python3 -m vm_supervisor --print-settings --very-verbose --system-logs --profile -f ./examples/example_docker_container

runtimes/aleph-docker/create_disk_image.sh

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -41,19 +41,28 @@ echo "root:toor" | /usr/sbin/chpasswd
4141
4242
mkdir -p /overlay
4343
44+
mkdir -p /var/lib/docker
45+
cd /var/lib/docker
46+
mkdir -m 710 vfs
47+
mkdir -m 700 image
48+
mkdir -m 700 image/vfs
49+
mkdir -m 700 plugins
50+
mkdir -m 700 swarm
51+
cmkdir -m 750 network
52+
mkdir -m 700 trust
53+
mkdir -m 701 volumes
54+
mkdir -m 711 buildkit
55+
mkdir -m 710 containers
56+
4457
# Set up a login terminal on the serial console (ttyS0):
4558
ln -s agetty /etc/init.d/agetty.ttyS0
4659
echo ttyS0 > /etc/securetty
4760
4861
update-alternatives --set iptables /usr/sbin/iptables-legacy
4962
EOT
50-
# The docker service starts automatically on Debian based distributions. https://docs.docker.com/engine/install/debian/
51-
5263

5364
echo "PermitRootLogin yes" >> ./rootfs/etc/ssh/sshd_config
5465

55-
echo -ne '{\n"storage-driver": "vfs"\n}\n' > ./rootfs/etc/docker/daemon.json
56-
5766
# Generate SSH host keys
5867
#systemd-nspawn -D ./rootfs/ ssh-keygen -q -N "" -t dsa -f /etc/ssh/ssh_host_dsa_key
5968
#systemd-nspawn -D ./rootfs/ ssh-keygen -q -N "" -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key

runtimes/aleph-docker/init0.sh

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,6 @@ cgroupfs-mount
4848

4949
export PATH=$PATH:/usr/local/bin:/usr/bin:/usr/sbin
5050

51-
/usr/sbin/dockerd 2>&1 | tee /log_docker.txt &
52-
5351
log "INIT 0 DONE2"
5452
# Replace this script with the manager
5553
exec /root/init1.py

runtimes/aleph-docker/init1.py

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ def setup_variables(variables: Optional[Dict[str, str]]):
104104
if variables is None:
105105
return
106106
for key, value in variables.items():
107+
print(key)
107108
os.environ[key] = value
108109

109110

@@ -157,9 +158,6 @@ def setup_volumes(volumes: List[Volume]):
157158
else:
158159
system(f"mount -o rw /dev/{volume.device} {volume.mount}")
159160

160-
system("mount")
161-
162-
163161
def setup_code_asgi(
164162
code: bytes, encoding: Encoding, entrypoint: str
165163
) -> ASGIApplication:
@@ -453,25 +451,42 @@ def setup_docker():
453451
docker_mountpoint = os.environ.get("DOCKER_MOUNTPOINT")
454452
os.makedirs("/docker", exist_ok=True)
455453
system("bin/mount -t tmpfs -o noatime,mode=0755 tmpfs /docker")
456-
os.makedirs("/docker/persist/work", exist_ok=True)
457-
os.makedirs("/docker/persist/upper", exist_ok=True)
454+
os.makedirs("/docker/persist/layers/work", exist_ok=True)
455+
os.makedirs("/docker/persist/metadata/work", exist_ok=True)
456+
os.makedirs("/docker/persist/layers/upper", exist_ok=True)
457+
os.makedirs("/docker/persist/metadata/upper", exist_ok=True)
458458
# system("stat -f /")
459459
# system(f"stat -f {docker_mountpoint}")
460460
# system("stat -f /docker/")
461461
# system("stat -f /docker/persist/")
462462
# system("stat -f /docker/persist/upper")
463463
# system("stat -f /docker/persist/work")
464464
# system("stat -f /var/lib/docker")
465-
logger.debug(os.path.isdir("/docker/persist"))
466-
logger.debug(os.path.isdir("/docker/persist/upper"))
467-
system(f'/bin/mount -o noatime,lowerdir={docker_mountpoint},upperdir=/docker/persist/upper,workdir=/docker/persist/work -t overlay "overlayfs:/docker/persist/upper" /var/lib/docker')
468-
return subprocess.Popen("/usr/sbin/dockerd", stderr=subprocess.PIPE, encoding='utf-8')
465+
subprocess.Popen(["/usr/sbin/dockerd", "--storage-driver=vfs"], stderr=subprocess.PIPE, stdout=subprocess.PIPE, encoding='utf-8')
466+
print("yay")
467+
print(docker_mountpoint)
468+
print(os.listdir(docker_mountpoint))
469+
print(os.listdir("/var/lib/docker/image"))
470+
print(os.listdir("/var/lib/docker/vfs"))
471+
print("yoy")
472+
print(os.system("cat /var/lib/docker/image/vfs/repositories.json"))
473+
system("mount")
474+
docker_daemon = subprocess.Popen(["/usr/sbin/dockerd", "--storage-driver=vfs"], stderr=subprocess.PIPE, stdout=subprocess.PIPE, encoding='utf-8')
475+
while os.system("docker ps > /dev/null 2>&1") != 0:
476+
stdout, stderr = docker_daemon.communicate()
477+
print("stdout: " + stdout)
478+
print("stderr: " + stderr)
479+
continue
480+
system(f'/bin/mount -o noatime,lowerdir={docker_mountpoint}/layers,upperdir=/docker/persist/layers/upper,workdir=/docker/persist/layers/work -t overlay "overlayfs:/docker/persist/layers/upper" /var/lib/docker/vfs')
481+
system(f'/bin/mount -o noatime,lowerdir={docker_mountpoint}/metadata,upperdir=/docker/persist/metadata/upper,workdir=/docker/persist/metadata/work -t overlay "overlayfs:/docker/persist/metadata/upper" /var/lib/docker/image/vfs')
482+
print(os.system("cat /var/lib/docker/image/vfs/repositories.json"))
469483

470484
def setup_system(config: ConfigurationPayload):
471485
setup_hostname(config.vm_hash)
472486
setup_variables(config.variables)
473487
setup_volumes(config.volumes)
474-
docker_daemon = setup_docker()
488+
setup_docker()
489+
print("dameon ready")
475490
setup_network(config.ip, config.route, config.dns_servers)
476491
setup_input_data(config.input_data)
477492
logger.debug("Setup finished")

vm_supervisor/conf.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -182,9 +182,15 @@ def check(self):
182182
assert isfile(
183183
self.FAKE_DATA_RUNTIME
184184
), "Local runtime .squashfs build is missing"
185-
assert isfile(
186-
self.FAKE_DATA_VOLUME
187-
), "Local data volume .squashfs is missing"
185+
if "," in str(self.FAKE_DATA_VOLUME): # allow multiple volumes with format "host_path:mountpoint,host_path:mountpoint"
186+
for volume_bind in str(self.FAKE_DATA_VOLUME).split(","):
187+
assert isfile(
188+
volume_bind.split(":")[0]
189+
), "Local data volume .squashfs is missing"
190+
else:
191+
assert isfile(
192+
self.FAKE_DATA_VOLUME
193+
), "Local data volume .squashfs is missing"
188194

189195
def setup(self):
190196
os.makedirs(self.MESSAGE_CACHE, exist_ok=True)

vm_supervisor/storage.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,9 +157,14 @@ def create_ext4(path: Path, size_mib: int) -> bool:
157157

158158
async def get_volume_path(volume: MachineVolume, namespace: str) -> Path:
159159
if isinstance(volume, ImmutableVolume):
160+
print(volume)
160161
ref = volume.ref
161162
if settings.FAKE_DATA_PROGRAM and settings.FAKE_DATA_VOLUME:
162-
return Path(settings.FAKE_DATA_VOLUME)
163+
if "," not in str(settings.FAKE_DATA_VOLUME):
164+
return Path(settings.FAKE_DATA_VOLUME)
165+
for volume_bind in str(settings.FAKE_DATA_VOLUME).split(","):
166+
if volume.mount == volume_bind.split(":")[1]:
167+
return volume_bind.split(":")[0]
163168

164169
cache_path = Path(join(settings.DATA_CACHE, ref))
165170
url = f"{settings.CONNECTOR_URL}/download/data/{ref}"

0 commit comments

Comments
 (0)