Open MarcOrfilaCarreras opened 9 months ago
Issue on Raspberry PI 5 as well (aarch64
)
Thanks for this info, I'm also on arm (aarch64) and running the official compose.yml
caused errors for me:
[+] Running 2/0
✔ Container librum_db Running 0.0s
✔ Container librum Recreated 0.1s
Attaching to librum, librum_db
librum | exec /bin/sh: exec format error
librum exited with code 0
librum exited with code 1
librum exited with code 1
librum exited with code 1
librum exited with code 1
librum exited with code 1
librum exited with code 1
librum exited with code 1
librum_db | 2024-03-31 17:46:31 14 [Warning] Access denied for user 'librum'@'localhost' (using password: YES)
librum exited with code 1
librum_db | 2024-03-31 17:46:51 15 [Warning] Access denied for user 'librum'@'localhost' (using password: YES)
I digged into this issue a bit, it looks like it is a known issue from this comment. The Presentation.dll
binary in the arm64 container is of filetype: Presentation.dll: PE32 executable (console) Intel 80386 Mono/.Net assembly, for MS Windows
.
However, it looks like mcr.microsoft.com/dotnet/aspnet
does support arm64
images:
ubuntu@ubuntu:~$ docker manifest inspect mcr.microsoft.com/dotnet/aspnet
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1580,
"digest": "sha256:54a062825622483023caafadb465e7873d8fe48454f9ca607bf73b5f51a0016b",
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1580,
"digest": "sha256:2dd1e590b6b8f297ed593272109d0c28272f957d6971e87ea348ea5b531a2a1c",
"platform": {
"architecture": "arm",
"os": "linux",
"variant": "v7"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1580,
"digest": "sha256:45c6e36d00122b036d5ab95c167ac4a8dd69a2395d26d4dd3a368bbc09809047",
"platform": {
"architecture": "arm64",
"os": "linux"
}
}
]
}
ubuntu@ubuntu:~$ docker image inspect mcr.microsoft.com/dotnet/aspnet:8.0 | jq -r ".[0].Architecture"
arm64
ubuntu@ubuntu:~$ docker image inspect mcr.microsoft.com/dotnet/aspnet:8.0 | jq -r ".[0].RepoDigests[0]"
mcr.microsoft.com/dotnet/aspnet@sha256:72bd33dd8f9829cf9681f0a6bc4b43972ec4860a9560ad2b9f4872b548af0add
I'm able to find the matching image here.
I followed the manual installation instruction on a rpi4(Linux ubuntu 5.4.0-1107-raspi #119-Ubuntu SMP PREEMPT Thu Apr 4 16:03:46 UTC 2024 aarch64 aarch64 aarch64 GNU/Linux
), and the generated Presentation.dll
is still a 80386 Mono/.Net assembly
. So we'll need to change things in dotnet land to make it work on an arm64 machine.
The following patch for Presentation.csproj
works if you invoke dotnet publish with -r linux-arm64
flag:
diff --git a/src/Presentation/Presentation.csproj b/src/Presentation/Presentation.csproj
index dfaa402..2ddc5f5 100644
--- a/src/Presentation/Presentation.csproj
+++ b/src/Presentation/Presentation.csproj
@@ -4,6 +4,7 @@
<TargetFramework>net8.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>disable</Nullable>
+ <RuntimeIdentifiers>linux-arm64</RuntimeIdentifiers>
</PropertyGroup>
<ItemGroup>
@@ -17,6 +18,12 @@
<PackageReference Include="Serilog.Extensions.Logging.File" Version="3.0.0" />
<PackageReference Include="AutoMapper" Version="12.0.0" />
<PackageReference Include="Stripe.net" Version="43.15.0" />
+ <PackageReference Include="System.Runtime.Handles" Version="4.3.0" />
+ <PackageReference Include="System.Runtime.InteropServices" Version="4.3.0" />
+ <PackageReference Include="System.IO.FileSystem.Primitives" Version="4.3.0" />
+ <PackageReference Include="System.Threading" Version="4.3.0" />
+ <PackageReference Include="System.Threading.Tasks" Version="4.3.0" />
+ <PackageReference Include="System.Text.Encoding.Extensions" Version="4.3.0" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="6.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.10">
The generated file looks like:
ubuntu@ubuntu:~/hack/Librum-Server/src/Presentation$ file bin/Release/net8.0/linux-arm64/Presentation.dll
bin/Release/net8.0/linux-arm64/Presentation.dll: PE32+ executable (console) Aarch64 Mono/.Net assembly, for MS Windows
But then the other generated dlls also need a patch like above(as they are still Intel 80386 Mono/.Net assembly
). I know nothing about dotnet so I'll stop now and wait for someone knows better. :)
Hi guys,
The arm version of the Docker image seems to be encountering issues, possibly stemming from the utilization of the base image "mcr.microsoft.com/dotnet/aspnet," which lacks support for arm architecture.
The logs from the container:
I'm using a Raspberry Pi 4, by the way.