Skip to content

Commit a7227e9

Browse files
committed
save progress again
1 parent b916cbe commit a7227e9

File tree

7 files changed

+83
-28
lines changed

7 files changed

+83
-28
lines changed

examples/message_from_aleph_docker_runtime.json

+6-1
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

+18
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

+13-4
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

-2
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

+31-17
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

@@ -121,6 +122,7 @@ def setup_network(
121122
return
122123

123124
logger.debug("Setting up networking")
125+
logger.debug("IP ADDR:" + ip)
124126
system("ip addr add 127.0.0.1/8 dev lo brd + scope host")
125127
system("ip addr add ::1/128 dev lo")
126128
system("ip link set lo up")
@@ -157,9 +159,6 @@ def setup_volumes(volumes: List[Volume]):
157159
else:
158160
system(f"mount -o rw /dev/{volume.device} {volume.mount}")
159161

160-
system("mount")
161-
162-
163162
def setup_code_asgi(
164163
code: bytes, encoding: Encoding, entrypoint: str
165164
) -> ASGIApplication:
@@ -450,28 +449,43 @@ def receive_config(client) -> ConfigurationPayload:
450449

451450

452451
def setup_docker():
452+
logger.debug("Setting up docker")
453453
docker_mountpoint = os.environ.get("DOCKER_MOUNTPOINT")
454454
os.makedirs("/docker", exist_ok=True)
455455
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)
458-
# system("stat -f /")
459-
# system(f"stat -f {docker_mountpoint}")
460-
# system("stat -f /docker/")
461-
# system("stat -f /docker/persist/")
462-
# system("stat -f /docker/persist/upper")
463-
# system("stat -f /docker/persist/work")
464-
# 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')
456+
os.makedirs("/docker/persist/layers/work", exist_ok=True)
457+
os.makedirs("/docker/persist/metadata/work", exist_ok=True)
458+
os.makedirs("/docker/persist/layers/upper", exist_ok=True)
459+
os.makedirs("/docker/persist/metadata/upper", exist_ok=True)
460+
# docker_daemon = subprocess.Popen(["/usr/sbin/dockerd", "--storage-driver=vfs"], stderr=subprocess.PIPE, stdout=subprocess.PIPE, encoding='utf-8')
461+
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')
462+
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')
463+
print("Before daemon:\n")
464+
os.system("stat -f /var/lib/docker/image/vfs/repositories.json")
465+
os.system("cat /var/lib/docker/image/vfs/repositories.json")
466+
print("here")
467+
# docker_daemon = subprocess.Popen(["/usr/sbin/dockerd", "--storage-driver=vfs"], stderr=subprocess.PIPE, stdout=subprocess.PIPE, encoding='utf-8')
468+
print("there")
469+
os.system("docker info")
470+
docker_daemon = subprocess.Popen(["/usr/sbin/dockerd", "--storage-driver=vfs"], stderr=subprocess.PIPE, encoding='utf-8')
471+
# os.system("/usr/sbin/dockerd --storage-driver=vfs")
472+
while os.system("docker ps > /dev/null 2>&1") != 0:
473+
# print("yulu")
474+
# stderr = docker_daemon.communicate()
475+
# print("stderr: " + stderr)
476+
continue
477+
print("After daemon:\n")
478+
os.system("stat -f /var/lib/docker/image/vfs/repositories.json")
479+
os.system("cat /var/lib/docker/image/vfs/repositories.json")
480+
system("mount")
481+
469482

470483
def setup_system(config: ConfigurationPayload):
471484
setup_hostname(config.vm_hash)
472485
setup_variables(config.variables)
473486
setup_volumes(config.volumes)
474-
docker_daemon = setup_docker()
487+
setup_docker()
488+
print("dameon ready")
475489
setup_network(config.ip, config.route, config.dns_servers)
476490
setup_input_data(config.input_data)
477491
logger.debug("Setup finished")

vm_supervisor/conf.py

+9-3
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+
), f"Local data volume {volume_bind.split(':')[0]} is missing"
190+
else:
191+
assert isfile(
192+
self.FAKE_DATA_VOLUME
193+
), f"Local data volume {volume_bind.split(':')[0]} is missing"
188194

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

vm_supervisor/storage.py

+6-1
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)