Closed wolframm closed 2 months ago
A few assumptions:
FROM scratch
container.The Dart image doesn't have Sqlite3 there by default. So the library needs to be installed. It's that library that will then be used via dart:ffi
for packages like drift or sqlite3.
RUN set -eux; \
apt-get update; \
apt-get install -y --no-install-recommends libsqlite3-0
The library then needs to be copied into /runtime
so that it's there with the other libraries that are needed for an AOT binary to dynamically link to:
RUN set -eux; \
case "$(dpkg --print-architecture)" in \
amd64) \
TRIPLET="x86_64-linux-gnu" ;; \
armhf) \
TRIPLET="arm-linux-gnueabihf" ;; \
arm64) \
TRIPLET="aarch64-linux-gnu" ;; \
*) \
echo "Unsupported architecture" ; \
exit 5;; \
esac; \
FILES="/lib/$TRIPLET/libsqlite3.so.0"; \
for f in $FILES; do \
dir=$(dirname "$f"); \
mkdir -p "/runtime$dir"; \
cp --archive --link --dereference --no-target-directory "$f" "/runtime$f"; \
done
The section above copies liberally from the Dockerfile-debian.template in this repo, which is designed for multiple architectures. If you know your target architecture is fixed then things can be simplified quite a bit by simply copying the single libsqlite3.so.0
shared library file.
The second stage of the Dockerfile then proceeds as normal, copying in the /runtime
, which will now have the sqlite3 library along with libc and the other AOT dependencies:
FROM scratch
COPY --from=build /runtime/ /
NB I've not tested this, so please excuse any typos. I'm pretty sure that the libraries libsqlite3-0.so.0
links to are already present in runtime:
ldd /lib/x86_64-linux-gnu/libsqlite3.so.0
linux-vdso.so.1 (0x00007ffdb45f1000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fa502bd1000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fa5029f0000)
/lib64/ld-linux-x86-64.so.2 (0x00007fa502e13000)
linux-vdso.so.1
is a virtual shared object rather than a library file on disk.
What would be the best way to include Sqlite3 into the image so that it can be used by packages such as https://pub.dev/packages/drift?