With the rise of Linux arm devices, including the Librem5 and PinePhone, there is a need for a Bitcoin wallet that can run on arm64.
Arm64 build for Linux. An additional enhancement would be to make the UI adaptive, so it can work on mobile screen sizes.
There are currently NO Bitcoin wallets that meet these criteria.
ping @jmacato
Now you can unofficially build Wasabi to ARM/ARM64.. I personally use it most of the time (because x86 is a hot mess, with AMD PSP and Intel ME crap in it + spectre BS) but it misses the bitcoin full node and HWI functionality.
Can you explain how? I see .NET as a dependency, and the issue yahiheb linked to above says that isn't available for arm. How can I build it the way you do?
@joshbowyer
Can you explain how? I see .NET as a dependency, and the issue yahiheb linked to above says that isn't available for arm. How can I build it the way you do?
I believe you will have to do some research on your side. I would start with this:
# Clone the repo
git clone https://github.com/zkSNACKs/WalletWasabi.git
cd WalletWasabi
# Attemp to publish for linux-arm64 in `dist` folder.
dotnet publish --configuration Release --force --output "./dist" --self-contained true --runtime "linux-arm64" -fl /p:VersionPrefix=1.1.20 --disable-parallel --no-cache /p:DebugType=none /p:DebugSymbols=false /p:ErrorReport=none /p:DocumentationFile=\"\" /p:Deterministic=True;
List of Linux RIDs is here: https://docs.microsoft.com/en-us/dotnet/core/rid-catalog#linux-rids
(From https://github.com/zkSNACKs/WalletWasabi/pull/3950#issuecomment-664631923)
But given that I don't have linux-arm64 I can't test it. So as said here https://github.com/zkSNACKs/WalletWasabi/issues/2189#issuecomment-603225061, it's not officially supported and you are on your own in this.
Now you can unofficially build Wasabi to ARM/ARM64.. I personally use it most of the time (because x86 is a hot mess, with AMD PSP and Intel ME crap in it + spectre BS) but it misses the bitcoin full node and HWI functionality.
Off topic - HWI functionality is available on ARM systems. I've gotten my hardware wallets working with ARM (you can refer to this project which I'm maintaining which bundles specter desktop in a cross platform docker container .
No issues running a full node too.
Though I'd love to see arm64 support so I can use this on my pinebook
Can you explain how? I see .NET as a dependency, and the issue yahiheb linked to above says that isn't available for arm. How can I build it the way you do?
I believe you will have to do some research on your side. I would start with this:
# Clone the repo git clone https://github.com/zkSNACKs/WalletWasabi.git cd WalletWasabi # Attemp to publish for linux-arm64 in `dist` folder. dotnet publish --configuration Release --force --output "./dist" --self-contained true --runtime "linux-arm64" -fl /p:VersionPrefix=1.1.20 --disable-parallel --no-cache /p:DebugType=none /p:DebugSymbols=false /p:ErrorReport=none /p:DocumentationFile=\"\" /p:Deterministic=True;List of Linux RIDs is here: https://docs.microsoft.com/en-us/dotnet/core/rid-catalog#linux-rids
(From #3950 (comment))
But given that I don't have linux-arm64 I can't test it. So as said here #2189 (comment), it's not officially supported and you are on your own in this.
you'd have to also change the following
--- a/WalletWasabi.Backend/WalletWasabi.Backend.csproj
+++ b/WalletWasabi.Backend/WalletWasabi.Backend.csproj
@@ -1,7 +1,7 @@
<EF><BB><BF><Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <PlatformTarget>x64</PlatformTarget>
+ <PlatformTarget>arm64</PlatformTarget>
diff --git a/WalletWasabi.Gui/WalletWasabi.Gui.csproj b/WalletWasabi.Gui/WalletWasabi.Gui.csproj
index f616a4e88..f1150b4c5 100644
--- a/WalletWasabi.Gui/WalletWasabi.Gui.csproj
+++ b/WalletWasabi.Gui/WalletWasabi.Gui.csproj
<PropertyGroup>
- <PlatformTarget>x64</PlatformTarget>
+ <PlatformTarget>arm64</PlatformTarget>
It does build, however this is now the error when you try to run it (don't have much dotnet experience here). But appears that the liblibSkiaSharp library is missing. Could be my install but any hints on this would be nice
2020-09-05 17:13:19 INFO Global (86) .ctor finished in 13 milliseconds.
2020-09-05 17:13:19 INFO Program (51) Wasabi GUI started (f4da2c7f-1333-4f70-bd8b-4116a320e712).
2020-09-05 17:13:20 CRITICAL Program (58) System.DllNotFoundException: Unable to load shared library 'libSkiaSharp' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: liblibSkiaSharp: cannot open shared object file: No such file or directory
at SkiaSharp.SkiaApi.gr_glinterface_assemble_gl_interface(IntPtr ctx, IntPtr get)
at SkiaSharp.GRGlInterface.AssembleGlInterface(Object context, GRGlGetProcDelegate get)
at SkiaSharp.GRGlInterface.AssembleGlInterface(GRGlGetProcDelegate get)
at Avalonia.Skia.PlatformRenderInterface..ctor(ICustomSkiaGpu customSkiaGpu)
at Avalonia.Skia.SkiaPlatform.Initialize(SkiaOptions options)
at Avalonia.SkiaApplicationExtensions.<>c__0`1.<UseSkia>b__0_0()
at Avalonia.Controls.AppBuilderBase`1.Setup()
at Avalonia.Controls.AppBuilderBase`1.SetupWithLifetime(IApplicationLifetime lifetime)
at Avalonia.ClassicDesktopStyleApplicationLifetimeExtensions.StartWithClassicDesktopLifetime[T](T builder, String[] args, ShutdownMode shutdownMode)
at AvalonStudio.Shell.Shell.StartShellApp[TAppBuilder](TAppBuilder builder, String appName, ShellAppMainDelegate main, String[] args, IFactory layoutFactory)
at WalletWasabi.Gui.Program.Main(String[] args) in WalletWasabi.Gui/Program.cs:line 53
2020-09-05 17:13:20 WARNING Program (162) System.DllNotFoundException: Unable to load shared library 'libSkiaSharp' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: liblibSkiaSharp: cannot open shared object file: No such file or directory
at SkiaSharp.SkiaApi.gr_glinterface_assemble_gl_interface(IntPtr ctx, IntPtr get)
at SkiaSharp.GRGlInterface.AssembleGlInterface(Object context, GRGlGetProcDelegate get)
at SkiaSharp.GRGlInterface.AssembleGlInterface(GRGlGetProcDelegate get)
at Avalonia.Skia.PlatformRenderInterface..ctor(ICustomSkiaGpu customSkiaGpu)
at Avalonia.Skia.SkiaPlatform.Initialize(SkiaOptions options)
at Avalonia.SkiaApplicationExtensions.<>c__0`1.<UseSkia>b__0_0()
at Avalonia.Controls.AppBuilderBase`1.Setup()
at Avalonia.Controls.AppBuilderBase`1.SetupWithLifetime(IApplicationLifetime lifetime)
at Avalonia.ClassicDesktopStyleApplicationLifetimeExtensions.StartWithClassicDesktopLifetime[T](T builder, String[] args, ShutdownMode shutdownMode)
at AvalonStudio.Shell.Shell.StartShellApp[TAppBuilder](TAppBuilder builder, String appName, ShellAppMainDelegate main, String[] args, IFactory layoutFactory)
at WalletWasabi.Gui.Program.Main(String[] args) in WalletWasabi.Gui/Program.cs:line 53
Unhandled exception. System.DllNotFoundException: Unable to load shared library 'libSkiaSharp' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: liblibSkiaSharp: cannot open shared object file: No such file or directory
at SkiaSharp.SkiaApi.gr_glinterface_assemble_gl_interface(IntPtr ctx, IntPtr get)
at SkiaSharp.GRGlInterface.AssembleGlInterface(Object context, GRGlGetProcDelegate get)
at SkiaSharp.GRGlInterface.AssembleGlInterface(GRGlGetProcDelegate get)
at Avalonia.Skia.PlatformRenderInterface..ctor(ICustomSkiaGpu customSkiaGpu)
at Avalonia.Skia.SkiaPlatform.Initialize(SkiaOptions options)
at Avalonia.SkiaApplicationExtensions.<>c__0`1.<UseSkia>b__0_0()
at Avalonia.Controls.AppBuilderBase`1.Setup()
at Avalonia.Controls.AppBuilderBase`1.SetupWithLifetime(IApplicationLifetime lifetime)
at Avalonia.ClassicDesktopStyleApplicationLifetimeExtensions.StartWithClassicDesktopLifetime[T](T builder, String[] args, ShutdownMode shutdownMode)
at AvalonStudio.Shell.Shell.StartShellApp[TAppBuilder](TAppBuilder builder, String appName, ShellAppMainDelegate main, String[] args, IFactory layoutFactory)
at WalletWasabi.Gui.Program.Main(String[] args) in WalletWasabi.Gui/Program.cs:line 53
@nolim1t you need an arm compatible version of libSkiaSharp... @jmacato I think has one.
@nolim1t iv been informed the next version of avalonia coming in days... works on arm out the box...
you could try this branch for an easier solution.
@nopara73 I think arm is becoming way more important... we need to look into supporting ARM on OSX, and Linux, id imagine in 12 months time... Windows on ARM may start to become popular enough to warrant it also.
@nolim1t iv been informed the next version of avalonia coming in days... works on arm out the box...
you could try this branch for an easier solution.
3925
Thanks I'll try this out too
Looks like theres an issue with fonts on that branch
020-09-05 19:21:52 CRITICAL Program (58) System.InvalidOperationException: Default font family name can't be null or empty.
at Avalonia.Media.FontManager..ctor(IFontManagerImpl platformImpl)
at Avalonia.Media.FontManager.get_Current()
at Avalonia.Rendering.RendererBase..ctor(Boolean useManualFpsCounting)
at Avalonia.Rendering.DeferredRenderer..ctor(IRenderRoot root, IRenderLoop renderLoop, ISceneBuilder sceneBuilder, IDispatcher dispatcher, IDeferredRendererLock rendererLock)
at Avalonia.X11.X11Window.CreateRenderer(IRenderRoot root)
at Avalonia.Controls.TopLevel..ctor(ITopLevelImpl impl, IAvaloniaDependencyResolver dependencyResolver)
at Avalonia.Controls.WindowBase..ctor(IWindowBaseImpl impl, IAvaloniaDependencyResolver dependencyResolver)
at Avalonia.Controls.WindowBase..ctor(IWindowBaseImpl impl)
at Avalonia.Controls.Window..ctor(IWindowImpl impl)
at Avalonia.Controls.Window..ctor()
at AvalonStudio.Shell.Controls.MetroWindow..ctor()
at WalletWasabi.Gui.MainWindow..ctor()
at WalletWasabi.Gui.App.OnFrameworkInitializationCompleted()
at Avalonia.Controls.AppBuilderBase`1.Setup()
at Avalonia.Controls.AppBuilderBase`1.SetupWithLifetime(IApplicationLifetime lifetime)
at Avalonia.ClassicDesktopStyleApplicationLifetimeExtensions.StartWithClassicDesktopLifetime[T](T builder, String[] args, ShutdownMode shutdownMode)
at AvalonStudio.Shell.Shell.StartShellApp[TAppBuilder](TAppBuilder builder, String appName, ShellAppMainDelegate main, String[] args, IFactory layoutFactor
I think with Apple recently announcing their complete migration to arm64, and the new boom in Linux for arm64, that arm64 should be strongly considered now. Will Wasabi 2.0 be based on the same foundation (.Net, etc) or will it be entirely different?
ACK, I added this to the WW2 board, but I have no idea what's needed here and what it entails. @danwalmsley, would @jmacato have time to deal with this for WW2 as he's already done something before it may be the most reasonable to task him.
Talked with @danwalmsley and @jmacato :
@nolim1t, according to @jmacato Linux ARM64 is already working with the new Fluent project. May I ask you to confirm it? (Must dotnet run from WalletWasabi.Fluent.Desktop directory.
From master branch ?
Yes.
@nolim1t sorry I made a mistake, it's not the WalletWasabi.Fluent, but WalletWasabi.Fluent.Desktop directory.
Current status of ARM64 support:
I might be missing something but there is no .NET SDK 5.0 for arm64 in the Microsoft repo, only x86_64, so how did you get it running on arm64?
I didn't. @jmacato did. @jmacato ?
i havent run .net5.0 for arm64 just yet. Only on .net 3.1
but here's the sdk for linux arm64 for net5 https://dotnet.microsoft.com/download/dotnet/thank-you/sdk-5.0.101-linux-arm64-binaries
Here is the compatibility list of .NET 5. For now, ARM M1 macOS is not supported, yet.
Plan:
Support .NET 6.0 with both Rosetta 2 and native architecture (M1).
So according to this, next November.
Here is the roadmap: https://github.com/dotnet/runtime/issues/43313
https://github.com/dotnet/core/blob/master/release-notes/5.0/5.0-supported-os.md
Seems we should be able to run on Rosetta + M1 within a few weeks.
With native support... possible before .net 6... but depending on what msft decide... they seem not to have made any final descisions yet.
Still getting issues about the fonts on linux
Unhandled exception. System.InvalidOperationException: Default font family name can't be null or empty.
at Avalonia.Media.FontManager..ctor(IFontManagerImpl platformImpl)
at Avalonia.Media.FontManager.get_Current()
built and running from /WalletWasabi/WalletWasabi.Fluent.Desktop
is there any environment variables I need to set?
I missed the part that old software will work just fine on OSX. In this case I wouldn't even bother adding a new OSX download section to the website, let alone with the development unless there's a very good reason to do so. We'll get a testing OSX ARM64 machine though just to be sure. So we only need to prepare a Linux ARM release for now.
Current status of LINUX ARM64 support:
Hi @nolim1t ! I just tested it with my PBP and all seems to be working. Just wondering if you can push your full system details (via screenfetch) so I can know what's going on?
I'm using a PBP to build it too. Manjaro Linux.
Happy to do a neofetch if you need
neofetch is good, please post it here
Similar issue in avalonia repo: https://github.com/AvaloniaUI/Avalonia/issues/4427
neofetch
鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 nolim1t@nlpbp
鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 ---------------
鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 OS: Manjaro ARM Linux aarch64
鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 Host: Pine64 Pinebook Pro
鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 Kernel: 5.9.11-2-MANJARO-ARM
鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 Uptime: 12 mins
鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 Packages: 807 (pacman)
鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 Shell: bash 5.0.18
鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 Resolution: 1920x1080
鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 DE: Plasma 5.20.3
鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 WM: KWin
鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 WM Theme: plastik
鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 Theme: Breeze Dark [Plasma], Breeze [GTK2], Br
鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 鈻堚枅鈻堚枅鈻堚枅鈻堚枅 Icons: breeze-dark [Plasma], breeze-dark [GTK2
Terminal: konsole
Terminal Font: Hack 13
CPU: (6) @ 1.416GHz
Memory: 2149MiB / 3795MiB
@nolim1t can you try installing ttf-ms-fonts package from pacman/paman and then run fc-cache --force
cool that worked.
Should mention this in the docs for the next release too
@nolim1t yeah i think we should... but srlsy.. arch distros are weird lol
Most helpful comment
@nolim1t iv been informed the next version of avalonia coming in days... works on arm out the box...
you could try this branch for an easier solution.
https://github.com/zkSNACKs/WalletWasabi/pull/3925