Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Client] Raspberry-Pi support #816

Open
EmmaVye opened this issue Jul 3, 2020 · 5 comments
Open

[Client] Raspberry-Pi support #816

EmmaVye opened this issue Jul 3, 2020 · 5 comments
Labels
feature request New feature, we are tracking it

Comments

@EmmaVye
Copy link

EmmaVye commented Jul 3, 2020

A clear and concise description of what the problem is.
I would like to be able to bridge my raspberry pi with my network to broadcast a relay from Ethernet to Wi-Fi, I currently have the bridge working but I was looking forward that the appimage would work on the Raspberry-Pi but it does not
A clear and concise description of what you want to happen.

A clear and concise description of any alternative solutions or features you've considered.
Ive considered other vpn options but I alredy have a outline server running in the cloud so that would mean I would need to restart all over

Add any other context or screenshots about the feature request here.
not really it does output a garbled filename with nothing in it so I guess that is a bug?

@fortuna fortuna added the feature request New feature, we are tracking it label Nov 10, 2020
@ghost
Copy link

ghost commented Jul 30, 2021

+1.
Need this.

@nafanz
Copy link

nafanz commented Dec 25, 2024

It's been 4 years already, I wonder if there's any movement in this direction?

I really miss the Raspberry support.

@q4a
Copy link

q4a commented Jan 2, 2025

HUGE note: I'm mostly C++ dev and this instruction may contain mistakes.

There is no any problems with adding arm64 support. I don't have any Raspberry Pi, but have other arm64 SBC - Rock 5B.
Here is my changes, that required to build arm64 AppImage:

diff --git a/client/electron/electron-builder.json b/client/electron/electron-builder.json
index b2227c1e..1631f6b9 100644
--- a/client/electron/electron-builder.json
+++ b/client/electron/electron-builder.json
@@ -37,12 +37,9 @@
     "maintainer": "Jigsaw LLC",
     "target": [{
       "arch": [
-        "x64"
+        "arm64"
       ],
       "target": "AppImage"
-    }, {
-      "arch": "x64",
-      "target": "deb"
     }]
   },
 
diff --git a/client/go/Taskfile.yml b/client/go/Taskfile.yml
index 5994e02e..67f30f16 100644
--- a/client/go/Taskfile.yml
+++ b/client/go/Taskfile.yml
@@ -63,7 +63,7 @@ tasks:
 
   linux:
     desc: "Build the tun2socks binary and library for Linux"
-    cmds: [{task: electron, vars: {TARGET_OS: "linux", TARGET_ARCH: "amd64"}}]
+    cmds: [{task: electron, vars: {TARGET_OS: "linux", TARGET_ARCH: "arm64"}}]
 
   android:
     desc: "Build the tun2socks.aar library for Android"

deb target was removed because of this bug:
electron-userland/electron-builder#3901
I hope that @sbruens or @jyyi1 can check my changes and make it better/add cross compilation.
There is another option - use github arm64 CI, when it will be available:
github/roadmap#970
Until then I'll save arm64 debug build here:
https://github.com/q4a/outline-apps/releases/download/arm64-debug-2025-01-02/Outline-Client-arm64.AppImage
And write my build steps performed on the arm64 Ubuntu 24.10:

$ sudo apt install git curl golang-go gcc make libboost1.83-dev libboost-json1.83-dev libboost-regex1.83-dev libboost-program-options1.83-dev libboost-filesystem1.83-dev libboost-coroutine1.83-dev
$ git clone https://github.com/Jigsaw-Code/outline-apps
$ cd outline-apps
<apply arm64 changes>
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash
$ source ~/.bashrc
$ nvm install --latest-npm
$ npm -v
10.9.2
$ node -v
v18.20.5
$ npm ci
$ mkdir client/electron/linux_proxy_controller/build
$ cd client/electron/linux_proxy_controller/build
$ cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-static -static-libgcc -static-libstdc++"
$ make -j$(nproc)
$ cp OutlineProxyController ../dist/
$ file ../dist/OutlineProxyController && ldd ../dist/OutlineProxyController
../dist/OutlineProxyController: ELF 64-bit LSB executable, ARM aarch64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=4c4b3d4f52d7d73893bcda6546d0c51dda493565, for GNU/Linux 3.7.0, with debug_info, not stripped
        not a dynamic executable
$ cd ../../../../../outline-apps
$ npm run action client/electron/build linux
<check output/client/electron/build/Outline-Client.AppImage>

UPD: looks like OutlineProxyController in linux_proxy_controller/dist is x64_86 and you need to rebuild it too. So, I updated my build steps.

@nafanz
Copy link

nafanz commented Jan 4, 2025

@q4a
Thanks for your help, it works.
I hope to make the arm64 build official in the near future.

Information about the board and software:

Raspberry Pi 4 Model B Rev 1.4
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"

@q4a
Copy link

q4a commented Jan 23, 2025

Gitbub Фctions now support free arm64 Linux runners - that allow to build and test arm64 version:
https://github.blog/changelog/2025-01-16-linux-arm64-hosted-runners-now-available-for-free-in-public-repositories-public-preview/
So I made PR to add arm64 Linux support: #2342

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature request New feature, we are tracking it
Projects
None yet
Development

No branches or pull requests

4 participants