container2wasm icon indicating copy to clipboard operation
container2wasm copied to clipboard

Run failed on Ubuntu 22.04, arch amd64

Open NoahJinnn opened this issue 2 years ago • 7 comments

Finding your help on the error while I'm trying to play around with c2w. I'm converting my simple Python container.

I'm using lima to run my VM:

 uname -a
Linux lima-ubuntu 5.15.0-56-generic #62-Ubuntu SMP Tue Nov 22 19:54:14 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

My docker file to build Python image, this is a simple script print Hello world:

FROM python:3

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY test.py .

COPY . .

CMD ["python", "test.py"]

I run ./c2w --target-arch=amd64 test-py /tmp/out/python.wasm and there's log:

#63 54.56 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecoreuap-api-ms-win-core-windowserrorreporting-l1-1-1.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecoreuap-api-ms-win-core-windowserrorreporting-l1-1-2.a have the same Joliet name
#63 54.57 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecore-api-ms-win-core-processtopology-obsolete-l1-1-0.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecore-api-ms-win-core-processtopology-obsolete-l1-1-1.a have the same Joliet name
#63 54.58 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-2.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-0.a have the same Joliet name
#63 54.58 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-1.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-0.a have the same Joliet name
#63 54.58 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-1.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-2.a have the same Joliet name
#63 54.60 Joliet tree sort failed. The -joliet-long switch may help you.
#63 ERROR: process "/bin/sh -c mkdir /out/ && mkisofs -l -J -r -o /out/rootfs.bin /rootfs/" did not complete successfully: exit code: 1

#25 [tinyemu-dev-common  6/11] RUN git clone https://github.com/kateinoigakukun/wasi-vfs.git --recurse-submodules &&     cd wasi-vfs &&     git checkout "ddbea0e2a6a1e0e8fe0373ec3d1bdccf522178ab" &&     cargo build --target wasm32-unknown-unknown &&     cargo build --package wasi-vfs-cli &&     mkdir -p /tools/wasi-vfs/ &&     mv target/debug/wasi-vfs target/wasm32-unknown-unknown/debug/libwasi_vfs.a /tools/wasi-vfs/ &&     cargo clean
#25 CANCELED
------
 > [rootfs-dev 12/12] RUN mkdir /out/ && mkisofs -l -J -r -o /out/rootfs.bin /rootfs/:
#63 53.28 Using SYS000;1 for  /rootfs/oci/rootfs/usr/lib/x86_64-linux-gnu/perl/5.32.1/Sys (sys)
#63 54.55 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecoreuap-api-ms-win-core-windowserrorreporting-l1-1-1.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecoreuap-api-ms-win-core-windowserrorreporting-l1-1-0.a have the same Joliet name
#63 54.56 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecoreuap-api-ms-win-core-processtopology-obsolete-l1-1-1.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecoreuap-api-ms-win-core-processtopology-obsolete-l1-1-0.a have the same Joliet name
#63 54.56 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecoreuap-api-ms-win-core-windowserrorreporting-l1-1-0.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecoreuap-api-ms-win-core-windowserrorreporting-l1-1-2.a have the same Joliet name
#63 54.56 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecoreuap-api-ms-win-core-windowserrorreporting-l1-1-1.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecoreuap-api-ms-win-core-windowserrorreporting-l1-1-2.a have the same Joliet name
#63 54.57 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecore-api-ms-win-core-processtopology-obsolete-l1-1-0.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_onecore-api-ms-win-core-processtopology-obsolete-l1-1-1.a have the same Joliet name
#63 54.58 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-2.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-0.a have the same Joliet name
#63 54.58 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-1.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-0.a have the same Joliet name
#63 54.58 genisoimage: Error: /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-1.a and /rootfs/oci/rootfs/app/.cargo/registry/src/github.com-1ecc6299db9ec823/winapi-x86_64-pc-windows-gnu-0.4.0/lib/libwinapi_windowsapp-api-ms-win-core-windowserrorreporting-l1-1-2.a have the same Joliet name
#63 54.60 Joliet tree sort failed. The -joliet-long switch may help you.
------
Dockerfile:185
--------------------
 183 |     RUN mkdir -p /rootfs/proc /rootfs/sys /rootfs/mnt /rootfs/run /rootfs/tmp /rootfs/dev /rootfs/var && mknod /rootfs/dev/null c 1 3 && chmod 666 /rootfs/dev/null
 184 |     RUN touch /rootfs/etc/resolv.conf /rootfs/etc/hosts
 185 | >>> RUN mkdir /out/ && mkisofs -l -J -r -o /out/rootfs.bin /rootfs/
 186 |     # RUN isoinfo -i /out/rootfs.bin -l
 187 |     
--------------------
ERROR: failed to solve: process "/bin/sh -c mkdir /out/ && mkisofs -l -J -r -o /out/rootfs.bin /rootfs/" did not complete successfully: exit code: 1
exit status 1

Thank you for your time of reading.

NoahJinnn avatar May 23 '23 07:05 NoahJinnn

Could you provide a full reproducer? Does the conversion work for other Dockerfiles? And I'm curious why COPY . . is included in the Dockerfile. It looks like COPY requirements.txt . and COPY test.py . add necessary files to the image.

ktock avatar May 23 '23 10:05 ktock

This is the directory content. I should remove COPY . . for sure

Screenshot 2023-05-23 at 18 59 53
  • Build and run Dockerfile
docker build -t test-py .
[+] Building 26.6s (10/10) FINISHED                                                                                                                                                                                   
 => [internal] load build definition from Dockerfile                                                                                                                                                             0.1s
 => => transferring dockerfile: 185B                                                                                                                                                                             0.1s
 => [internal] load .dockerignore                                                                                                                                                                                0.1s
 => => transferring context: 2B                                                                                                                                                                                  0.1s
 => [internal] load metadata for docker.io/library/python:3                                                                                                                                                      3.4s
 => [internal] load build context                                                                                                                                                                               22.8s
 => => transferring context: 61B                                                                                                                                                                                22.7s
 => [1/5] FROM docker.io/library/python:3@sha256:6b8d0fbaf8b4e8fc56864ccc4d496ea0cd2abff6526e3f7f8ab171d696a05b69                                                                                                0.1s
 => => resolve docker.io/library/python:3@sha256:6b8d0fbaf8b4e8fc56864ccc4d496ea0cd2abff6526e3f7f8ab171d696a05b69                                                                                                0.0s
 => CACHED [2/5] WORKDIR /app                                                                                                                                                                                    0.0s
 => CACHED [3/5] COPY requirements.txt .                                                                                                                                                                         0.0s
 => CACHED [4/5] RUN pip install --no-cache-dir -r requirements.txt                                                                                                                                              0.0s
 => CACHED [5/5] COPY test.py .                                                                                                                                                                                  0.0s
 => exporting to image                                                                                                                                                                                           0.1s
 => => exporting layers                                                                                                                                                                                          0.0s
 => => writing image sha256:beaba1659c7583dd3291411c6c0c392b72d6a244e08403c2cae1bf5121de1ac7                                                                                                                     0.0s
 => => naming to docker.io/library/test-py                                                                                                                                                                       0.0s
trannguyen@lima-ubuntu:~$ docker run test-py
Hello, World!

NoahJinnn avatar May 23 '23 12:05 NoahJinnn

What is the contents of requirements.txt?

ktock avatar May 23 '23 12:05 ktock

its an empty file

NoahJinnn avatar May 23 '23 12:05 NoahJinnn

@NoahJinnn I can't reproduce the issue. The conversion seems to work on my side. Added the log at the following (used container2wasm v0.2.3). What error are you getting after removing COPY . . from your Dockerfile? And what's version of container2wasm are you using?

$ tree /tmp/testctx/
/tmp/testctx
├── Dockerfile
├── requirements.txt
└── test.py
$ cat /tmp/testctx/Dockerfile
FROM python:3

WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY test.py .

CMD ["python", "test.py"]
$ cat /tmp/testctx/test.py 
print("Hello, world");
$ docker build -t test-py /tmp/testctx/
$ c2w --target-arch=amd64 test-py /tmp/out/python.wasm
(conversion succeeds without error)

ktock avatar May 23 '23 12:05 ktock

@ktock I run again without COPY . ., this time it gives a different error:

Notes: I'm using a M1 arm chipset and running c2w inside lima VM. The c2w release i'm using:

trannguyen@lima-ubuntu:~$ file c2w
c2w: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, Go BuildID=4g8eKYT0twbdQWLFNkjA/QWyEChM_OsT7NgRBLLfx/WU_ZTf9OFFfut8x4ReoR/GHrPNf5dq3PSkOOWGFTL, stripped

Error logs:

#92 40.72 /sbin/runc
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO] 2224/2224
#92 50.38 /sbin/init
[OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO] 512/512
#92 50.53 
#92 50.53            Files: 2
#92 50.53      Directories: 0
#92 50.54    Touched Pages: 2736 (10M)
#92 50.54          Elapsed: 9.8696 seconds
#92 DONE 70.2s

#93 [tinyemu-dev-wizer 3/3] RUN mkdir /minpack && cp /pack/rootfs.bin /minpack/
#93 DONE 10.0s

#94 [tinyemu-dev-packed 1/1] RUN /tools/wasi-vfs/wasi-vfs pack /tinyemu/temu --mapdir /pack::/minpack -o packed && mkdir /out && mv packed /out/python.wasm
#94 280.9 Killed
#94 ERROR: process "/bin/sh -c /tools/wasi-vfs/wasi-vfs pack /tinyemu/temu --mapdir /pack::/minpack -o packed && mkdir /out && mv packed /out/$OUTPUT_NAME" did not complete successfully: exit code: 137
------
 > [tinyemu-dev-packed 1/1] RUN /tools/wasi-vfs/wasi-vfs pack /tinyemu/temu --mapdir /pack::/minpack -o packed && mkdir /out && mv packed /out/python.wasm:
#94 280.9 Killed
------
Dockerfile:250
--------------------
 248 |     
 249 |     FROM tinyemu-dev-${OPTIMIZATION_MODE} AS tinyemu-dev-packed
 250 | >>> RUN /tools/wasi-vfs/wasi-vfs pack /tinyemu/temu --mapdir /pack::/minpack -o packed && mkdir /out && mv packed /out/$OUTPUT_NAME
 251 |     
 252 |     FROM emscripten/emsdk:$EMSDK_VERSION AS tinyemu-emscripten
--------------------
ERROR: failed to solve: process "/bin/sh -c /tools/wasi-vfs/wasi-vfs pack /tinyemu/temu --mapdir /pack::/minpack -o packed && mkdir /out && mv packed /out/$OUTPUT_NAME" did not complete successfully: exit code: 137
exit status 1

NoahJinnn avatar May 23 '23 14:05 NoahJinnn

exit code: 137

I guess it's because of memory usage maybe. Can you check the memory usage? Maybe we can add a way to passthrough some resource-related flags from c2w to docker build.

ktock avatar May 24 '23 00:05 ktock