ARMhf
Dieses Tutorial wurde von @wwjabc beigesteuert
https://github.com/rustdesk/rustdesk/issues/175#issuecomment-1129516367
Grundlegende Build-Schritte
Laden Sie ubuntu18.04_rootfs.tar.gz herunter (Extraktionscode: xlnx). Ich habe mehrere Versionen von Ubuntu-Systemen ausprobiert und war nur bei diesem erfolgreich. Die kompilierte ausführbare Datei kann auf anderen armhf-Systemen verwendet werden. PS: Wenn Sie der Systemquelle nicht vertrauen, können Sie es auch auf Ihrem System basierend auf diesem Tutorial kompilieren. Wenn Sie erfolgreich sind, reichen Sie bitte eine Lösung ein, um dieses Tutorial zu ersetzen.
Laden Sie cmake-3.14.5 herunter und kompilieren Sie es. Kompilierungs-Referenz-Tutorial. Die eingebaute cmake-Version des Systems ist 3.10.2, was einen Fehler “Version zu niedrig” beim Kompilieren von vcpkg-2020.11 meldet
- Auf dem Board kompilieren (Ich konnte die qemu virtuelle Maschine nicht erfolgreich einrichten)
Installieren Sie vcpkg und setzen Sie die Umgebungsvariable
VCPKG_ROOT
korrekt. Es wird empfohlen, vcpkg-2020.11 herunterzuladen, das ist die Version, die ich derzeit verwende- Linux: vcpkg install libyuv
- libvpx (Extraktionscode: xlnx) (manuelle Installation, warum diese Datei angegeben ist: Ich möchte ausdrücken, dass ich basierend auf dieser Datei erfolgreich kompiliert habe, Sie können auch andere Dateien herunterladen, um diese Datei zu ersetzen.)
- opus (Extraktionscode: xlnx) (manuelle Installation, gleicher Grund wie oben.)
Kompilieren Sie
cargo build --release
Kompilierung auf armhf
Installation von Ubuntu 18.04 auf SD-Karte
sudo tar zxmf ./ubuntu18.04_rootfs.tar.gz -C /your sd path/rootfs/
#Benutzername: xilinx
#Passwort: xilinx
Installation von cmake
tar -xzvf cmake-3.14.5.tar.gz
cd cmake-3.14.5/
#Diese beiden Schritte können lange dauern, nacheinander eingeben
./bootstrap
make -j4
sudo make install
root@pynq:~/cmake-3.14.5# ./bootstrap
---------------------------------------------
CMake 3.14.5, Copyright 2000-2019 Kitware, Inc. and Contributors
Found GNU toolchain
C compiler on this system is: gcc
C++ compiler on this system is: g++
Makefile processor on this system is: make
g++ has setenv
g++ has unsetenv
g++ does not have environ in stdlib.h
g++ has stl wstring
g++ has <ext/stdio_filebuf.h>
---------------------------------------------
root@pynq:~/cmake-3.14.5# cmake --version
cmake version 3.14.5
CMake suite maintained and supported by Kitware (kitware.com/cmake).
Installation von Abhängigkeiten
sudo apt install -y g++ gcc git curl wget nasm yasm libgtk-3-dev clang libxcb-randr0-dev libxdo-dev libxfixes-dev libxcb-shape0-dev libxcb-xfixes0-dev libasound2-dev libpulse-dev ninja-build
Installation von vcpkg
tar zxmf vcpkg-2020.11.tar.gz
mv vcpkg-2020.11 vcpkg
vcpkg/bootstrap-vcpkg.sh
export VCPKG_ROOT=$HOME/vcpkg
export VCPKG_FORCE_SYSTEM_BINARIES=1
vcpkg/vcpkg install libyuv
root@pynq:~# export VCPKG_ROOT=$HOME/vcpkg
root@pynq:~# export VCPKG_FORCE_SYSTEM_BINARIES=1
root@pynq:~# vcpkg/vcpkg install libyuv
Computing installation plan...
The following packages will be built and installed:
* libjpeg-turbo[core]:arm-linux
libyuv[core]:arm-linux
Additional packages (*) will be modified to complete this operation.
Detecting compiler hash for triplet arm-linux...
Starting package 1/2: libjpeg-turbo:arm-linux
Building package libjpeg-turbo[core]:arm-linux...
Could not locate cached archive: /root/.cache/vcpkg/archives/62/629c73ee8920588cb446128f15cbfa66dfec1528.zip
-- Using community triplet arm-linux. This triplet configuration is not guaranteed to succeed.
-- [COMMUNITY] Loading triplet configuration from: /root/vcpkg/triplets/community/arm-linux.cmake
-- Downloading https://github.com/libjpeg-turbo/libjpeg-turbo/archive/ae87a958613b69628b92088b313ded0d4f59a716.tar.gz...
-- Extracting source /root/vcpkg/downloads/libjpeg-turbo-libjpeg-turbo-ae87a958613b69628b92088b313ded0d4f59a716.tar.gz
-- Applying patch add-options-for-exes-docs-headers.patch
-- Applying patch workaround_cmake_system_processor.patch
-- Using source at /root/vcpkg/buildtrees/libjpeg-turbo/src/0d4f59a716-5f2e7bc00b.clean
-- Configuring arm-linux-dbg
-- Configuring arm-linux-rel
-- Building arm-linux-dbg
-- Building arm-linux-rel
-- Performing post-build validation
-- Performing post-build validation done
Stored binary cache: /root/.cache/vcpkg/archives/62/629c73ee8920588cb446128f15cbfa66dfec1528.zip
Building package libjpeg-turbo[core]:arm-linux... done
Installing package libjpeg-turbo[core]:arm-linux...
Installing package libjpeg-turbo[core]:arm-linux... done
Elapsed time for package libjpeg-turbo:arm-linux: 5.475 min
Starting package 2/2: libyuv:arm-linux
Building package libyuv[core]:arm-linux...
Could not locate cached archive: /root/.cache/vcpkg/archives/36/3683c357e53932d95a037b4eb8cb74fe71c15f80.zip
-- Using community triplet arm-linux. This triplet configuration is not guaranteed to succeed.
-- [COMMUNITY] Loading triplet configuration from: /root/vcpkg/triplets/community/arm-linux.cmake
-- Fetching https://chromium.googlesource.com/libyuv/libyuv...
#Manchmal hängt es hier lange oder schlägt sogar fehl. Sie können Strg+C drücken und vcpkg/vcpkg install libyuv erneut ausführen
CMake Error at scripts/cmake/vcpkg_execute_required_process.cmake:106 (message):
Command failed: /usr/bin/git fetch https://chromium.googlesource.com/libyuv/libyuv fec9121b676eccd9acea2460aec7d6ae219701b9 --depth 1 -n
Working Directory: /root/vcpkg/downloads/git-tmp
Error code: 128
See logs for more information:
/root/vcpkg/buildtrees/libyuv/git-fetch-arm-linux-err.log
Call Stack (most recent call first):
scripts/cmake/vcpkg_from_git.cmake:78 (vcpkg_execute_required_process)
ports/libyuv/portfile.cmake:3 (vcpkg_from_git)
scripts/ports.cmake:135 (include)
Error: Building package libyuv:arm-linux failed with: BUILD_FAILED
Please ensure you are using the latest portfiles with `./vcpkg update`, then
submit an issue at https://github.com/Microsoft/vcpkg/issues including:
Package: libyuv:arm-linux
Vcpkg version: 2020.06.15-unknownhash
Additionally, attach any relevant sections from the log files above.
- Oder laden Sie direkt das Offline-Paket libyuv herunter (Extraktionscode: xlnx) und kopieren Sie es in den Ordner vcpkg/downloads/ (diese Option ist optional und kann bei schlechten Netzwerkbedingungen verwendet werden), dann fortfahren
mv ./libyuv-fec9121b676eccd9acea2460aec7d6ae219701b9.tar.gz vcpkg/downloads/
vcpkg/vcpkg install libyuv
root@pynq:~# mv libyuv-fec9121b676eccd9acea2460aec7d6ae219701b9.tar.gz vcpkg/downloads/
root@pynq:~# vcpkg/vcpkg install libyuv
Computing installation plan...
The following packages will be built and installed:
libyuv[core]:arm-linux
Detecting compiler hash for triplet arm-linux...
Starting package 1/1: libyuv:arm-linux
Building package libyuv[core]:arm-linux...
Could not locate cached archive: /root/.cache/vcpkg/archives/36/3683c357e53932d95a037b4eb8cb74fe71c15f80.zip
-- Using community triplet arm-linux. This triplet configuration is not guaranteed to succeed.
-- [COMMUNITY] Loading triplet configuration from: /root/vcpkg/triplets/community/arm-linux.cmake
-- Using cached /root/vcpkg/downloads/libyuv-fec9121b676eccd9acea2460aec7d6ae219701b9.tar.gz
-- Extracting source /root/vcpkg/downloads/libyuv-fec9121b676eccd9acea2460aec7d6ae219701b9.tar.gz
-- Applying patch fix_cmakelists.patch
-- Applying patch fix-build-type.patch
-- Using source at /root/vcpkg/buildtrees/libyuv/src/ae219701b9-6b491b90af.clean
-- Configuring arm-linux-dbg
-- Configuring arm-linux-rel
-- Building arm-linux-dbg
-- Building arm-linux-rel
-- Installing: /root/vcpkg/packages/libyuv_arm-linux/share/libyuv/copyright
-- Performing post-build validation
-- Performing post-build validation done
Stored binary cache: /root/.cache/vcpkg/archives/36/3683c357e53932d95a037b4eb8cb74fe71c15f80.zip
Building package libyuv[core]:arm-linux... done
Installing package libyuv[core]:arm-linux...
Installing package libyuv[core]:arm-linux... done
Elapsed time for package libyuv:arm-linux: 2.266 min
Total elapsed time: 2.59 min
The package libyuv:arm-linux provides CMake targets:
find_package(libyuv CONFIG REQUIRED)
target_link_libraries(main PRIVATE yuv)
Installation von libvpx
mv webmproject-libvpx-v1.9.0.tar.gz vcpkg/downloads/
cd vcpkg/downloads/
tar zxmf webmproject-libvpx-v1.9.0.tar.gz
cd libvpx-1.9.0
#prefix sollte entsprechend Ihrem vcpkg-Pfad eingestellt werden
./configure --prefix="/root/vcpkg/installed/arm-linux/" --disable-examples
#Wieder eine lange Wartezeit
make -j4
make install
cd
root@pynq:~/vcpkg/downloads/libvpx-1.9.0# ./configure --prefix="/root/vcpkg/installed/arm-linux/" --disable-examples
disabling examples
enabling vp8_encoder
enabling vp8_decoder
enabling vp9_encoder
enabling vp9_decoder
Configuring for target 'armv7-linux-gcc'
enabling armv7
enabling neon
enabling neon_asm
enabling unit_tests
enabling webm_io
enabling libyuv
Creating makefiles for armv7-linux-gcc libs
Creating makefiles for armv7-linux-gcc tools
Creating makefiles for armv7-linux-gcc docs
root@pynq:~/vcpkg/downloads/libvpx-1.9.0# make install
[INSTALL] /root/vcpkg/installed/arm-linux/include/vpx/vp8.h
[INSTALL] /root/vcpkg/installed/arm-linux/include/vpx/vp8cx.h
[INSTALL] /root/vcpkg/installed/arm-linux/include/vpx/vp8dx.h
[INSTALL] /root/vcpkg/installed/arm-linux/include/vpx/vpx_codec.h
[INSTALL] /root/vcpkg/installed/arm-linux/include/vpx/vpx_frame_buffer.h
[INSTALL] /root/vcpkg/installed/arm-linux/include/vpx/vpx_image.h
[INSTALL] /root/vcpkg/installed/arm-linux/include/vpx/vpx_integer.h
[INSTALL] /root/vcpkg/installed/arm-linux/include/vpx/vpx_decoder.h
[INSTALL] /root/vcpkg/installed/arm-linux/include/vpx/vpx_encoder.h
[INSTALL] /root/vcpkg/installed/arm-linux/lib/libvpx.a
[INSTALL] /root/vcpkg/installed/arm-linux/lib/pkgconfig/vpx.pc
make[1]: Nothing to be done for 'install'.
make[1]: Nothing to be done for 'install'.
Installation von opus
mv xiph-opus-5c94ec3205c30171ffd01056f5b4622b7c0ab54c.tar.gz vcpkg/downloads/
cd vcpkg/downloads/
tar zxmf xiph-opus-5c94ec3205c30171ffd01056f5b4622b7c0ab54c.tar.gz
cd opus-5c94ec3205c30171ffd01056f5b4622b7c0ab54c
./autogen.sh
#prefix sollte entsprechend Ihrem vcpkg-Pfad eingestellt werden
./configure --prefix="/root/vcpkg/installed/arm-linux/" CFLAGS="-Os" --enable-fixed-point --enable-intrinsics --host=arm-linux
make -j4
make install
cd
root@pynq:~/vcpkg/downloads/opus-5c94ec3205c30171ffd01056f5b4622b7c0ab54c# ./autogen.sh
Updating build configuration files, please wait....
libtoolize: putting auxiliary files in '.'.
libtoolize: linking file './ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'.
libtoolize: linking file 'm4/libtool.m4'
libtoolize: linking file 'm4/ltoptions.m4'
libtoolize: linking file 'm4/ltsugar.m4'
libtoolize: linking file 'm4/ltversion.m4'
libtoolize: linking file 'm4/lt~obsolete.m4'
configure.ac:38: installing './compile'
configure.ac:36: installing './config.guess'
configure.ac:36: installing './config.sub'
configure.ac:33: installing './install-sh'
configure.ac:33: installing './missing'
Makefile.am:319: warning: '%'-style pattern rules are a GNU make extension
Makefile.am:322: warning: '%'-style pattern rules are a GNU make extension
Makefile.am: installing './INSTALL'
Makefile.am: installing './depcomp'
parallel-tests: installing './test-driver'
configure:
------------------------------------------------------------------------
opus unknown: Automatic configuration OK.
Compiler support:
C99 var arrays: ................ yes
C99 lrintf: .................... yes
Use alloca: .................... no (using var arrays)
General configuration:
Floating point support: ........ no
Fast float approximations: ..... no
Fixed point debugging: ......... no
Inline Assembly Optimizations: . ARM (EDSP) (Media)
External Assembly Optimizations: ARM (EDSP) (Media)
Intrinsics Optimizations: ...... ARM (NEON)
Run-time CPU detection: ........ ARM (NEON) (NEON Intrinsics)
Custom modes: .................. no
Assertion checking: ............ no
Hardening: ..................... yes
Fuzzing: ....................... no
Check ASM: ..................... no
API documentation: ............. yes
Extra programs: ................ yes
------------------------------------------------------------------------
Type "make; make install" to compile and install
Type "make check" to run the test suite
Build
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
#git clone https://github.com/rustdesk/rustdesk
#Derzeit nur rustdesk-1.1.8 Version getestet
#https://github.com/rustdesk/rustdesk/archive/refs/tags/1.1.8.zip
tar zxmf rustdesk-1.1.8.tar.gz
mv rustdesk-1.1.8 rustdesk
cd rustdesk
#Müssen zwei Stellen in rustdesk/Cargo.toml ändern:
#Zeile 3: version = "1.1.6"-> version = "1.1.8"
#Zeile 20: whoami = "1.1" -> whoami = "1.2"
#Müssen eine Stelle in rustdesk/libs/hbb_common/Cargo.toml ändern:
#Zeile 27: confy = { git = "https://github.com/open-trade/confy" } -> confy = "0.4"
cargo build --release
#Jetzt eine lange Wartezeit
#Wenn die Download-Phase nicht reibungslos verläuft, können Sie mit Strg+C beenden und erneut versuchen, bis es erfolgreich ist
root@pynq:~/rustdesk# cargo build --release
Updating crates.io index
error: failed to get `block` as a dependency of package `scrap v0.5.0 (/root/rustdesk/libs/scrap)`
Caused by:
failed to fetch `https://github.com/rust-lang/crates.io-index`
Caused by:
network failure seems to have happened
if a proxy or similar is necessary `net.git-fetch-with-cli` may help here
https://doc.rust-lang.org/cargo/reference/config.html#netgit-fetch-with-cli
Caused by:
SSL error: received early EOF; class=Ssl (16); code=Eof (-20)
#Keine Panik, wenn Sie auf diese Situation stoßen, versuchen Sie es einfach erneut. Dies kann während des gesamten Prozesses mehrmals auftreten. Wenn Sie gute Methoden haben, lassen Sie es mich bitte wissen ^_^
root@pynq:~/rustdesk# cargo build --release
Updating crates.io index
Updating git repository `https://github.com/open-trade/confy`
warning: spurious network error (2 tries remaining): SSL error: syscall failure: Broken pipe; class=Os (2)
error: failed to get `confy` as a dependency of package `hbb_common v0.1.0 (/root/rustdesk/libs/hbb_common)`
Caused by:
failed to load source for dependency `confy`
Caused by:
Unable to update https://github.com/open-trade/confy#27fa1294
Caused by:
failed to clone into: /root/.cargo/git/db/confy-90047e480c044d79
Caused by:
network failure seems to have happened
if a proxy or similar is necessary `net.git-fetch-with-cli` may help here
https://doc.rust-lang.org/cargo/reference/config.html#netgit-fetch-with-cli
Caused by:
SSL error: received early EOF; class=Ssl (16); code=Eof (-20)
#Müssen eine Stelle in rustdesk/libs/hbb_common/Cargo.toml ändern:
#Zeile 27: confy = { git = "https://github.com/open-trade/confy" } -> confy = "0.4"
Wenn Sie diesen Schritt erreicht haben, herzlichen Glückwunsch, Sie sind nicht weit vom Erfolg entfernt!
Compiling rustdesk v1.1.8 (/root/rustdesk)
warning: `hbb_common` (lib) generated 1 warning
Finished release [optimized] target(s) in 141m 20s
Test
- Versionsnummer überprüfen
root@pynq:~/rustdesk# ./target/release/rustdesk --version
1.1.8
- Dienst ausführen
root@pynq:~/rustdesk# ./target/release/rustdesk --service
[2022-05-19T06:48:44Z INFO rustdesk] start --service
[2022-05-19T06:48:46Z INFO rustdesk] start --server
[2022-05-19T06:48:46Z INFO rustdesk::server] DISPLAY=Err(NotPresent)
[2022-05-19T06:48:46Z INFO rustdesk::server] XAUTHORITY=Err(NotPresent)
[2022-05-19T06:48:46Z INFO rustdesk::ipc] Started ipc server at path: /tmp/RustDesk/ipc
[2022-05-19T06:48:46Z ERROR rustdesk::server::clipboard_service] Failed to start clipboard: Unknown error while interacting with the clipboard: Display parsing error
[2022-05-19T06:48:46Z INFO rustdesk::common] Testing nat ...
[2022-05-19T06:48:46Z INFO rustdesk::rendezvous_mediator] start rendezvous mediator of rs-ny.rustdesk.com
[2022-05-19T06:48:46Z INFO rustdesk::rendezvous_mediator] start rendezvous mediator of rs-sg.rustdesk.com
[2022-05-19T06:48:51Z INFO rustdesk::rendezvous_mediator] start rendezvous mediator of rs-cn.rustdesk.com
[2022-05-19T06:48:51Z INFO rustdesk::rendezvous_mediator] register_pk of rs-sg due to key not confirmed
[2022-05-19T06:48:51Z INFO rustdesk::rendezvous_mediator] register_pk of rs-ny due to key not confirmed
[2022-05-19T06:48:51Z INFO rustdesk::rendezvous_mediator] machine uid: 1bb53cb1093f458aa5d68063d06aa39f
[2022-05-19T06:48:51Z INFO rustdesk::rendezvous_mediator] machine uid: 1bb53cb1093f458aa5d68063d06aa39f
[2022-05-19T06:48:51Z INFO rustdesk::rendezvous_mediator] register_pk of rs-cn due to key not confirmed
[2022-05-19T06:48:51Z INFO rustdesk::rendezvous_mediator] machine uid: 1bb53cb1093f458aa5d68063d06aa39f
[2022-05-19T06:48:51Z INFO rustdesk::rendezvous_mediator] UUID_MISMATCH received from rs-cn.rustdesk.com
[2022-05-19T06:48:51Z INFO hbb_common::config] id updated from xxxxxx to xxxxxxx (hide id)
[2022-05-19T06:48:51Z INFO rustdesk::rendezvous_mediator] machine uid: 1bb53cb1093f458aa5d68063d06aa39f
[2022-05-19T06:48:52Z INFO rustdesk::common] Tested nat type: ASYMMETRIC in 6.084360199s
[2022-05-19T06:49:04Z INFO rustdesk::rendezvous_mediator] register_pk of rs-sg due to key not confirmed
[2022-05-19T06:49:04Z INFO rustdesk::rendezvous_mediator] machine uid: 1bb53cb1093f458aa5d68063d06aa39f
[2022-05-19T06:49:04Z INFO rustdesk::rendezvous_mediator] register_pk of rs-ny due to key not confirmed
[2022-05-19T06:49:04Z INFO rustdesk::rendezvous_mediator] machine uid: 1bb53cb1093f458aa5d68063d06aa39f
[2022-05-19T06:49:05Z INFO rustdesk::rendezvous_mediator] register_pk of rs-sg due to key not confirmed
[2022-05-19T06:49:05Z INFO rustdesk::rendezvous_mediator] machine uid: 1bb53cb1093f458aa5d68063d06aa39f
Seien Sie noch nicht zu glücklich, das Starten des Dienstes erhält nur die ID, Sie müssen ein Passwort festlegen, um von anderen Terminals aus darauf zugreifen zu können.
- Passwort festlegen
root@pynq:~/rustdesk# ./target/release/rustdesk --password qwertyuiop123123 #Bitte setzen Sie ein beliebiges Passwort, dies ist nur ein Beispiel
thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Connection refused (os error 111)', src/main.rs:106:55
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
#Obwohl eine Fehlermeldung vorhanden ist, hat dies keinen Einfluss auf das Festlegen des Passworts
- Dienst neu starten und auf Verbindung warten
root@pynq:~/rustdesk# ./target/release/rustdesk --service &
[1] 20186
Sie könnten sofort die PC-Version von rustdesk öffnen, um direkt zu verbinden, aber nach der Verbindung werden Sie feststellen
Unsupported display server type tty,x11 expected
Wenn Sie den Desktop sehen möchten, benötigen Sie möglicherweise Unterstützung von sciter. Als Nächstes biete ich eine Befehlszeilen-Verbindungsmethode, basierend darauf, dass rustdesk auf Windows PC oder Linux PC installiert ist. Am Beispiel von Windows 7, um die SSH-Funktion der Zielmaschine zu testen:
#Finden Sie heraus, wo Sie RustDesk installiert haben
C:\Users\Administrator\Desktop>cd C:\Program Files\RustDesk
C:\Program Files\RustDesk>RustDesk.exe --port-forward ur_dev_id 11000 127.0.0.1 22
Verwenden Sie dann einen SSH-Client, um sich mit der lokalen IP und dem Port zu verbinden
Connecting to 127.0.0.1:11000...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Welcome to PYNQ Linux, based on Ubuntu 18.04 (GNU/Linux 4.14.0-xilinx armv7l)
* Super-optimized for small spaces - read how we shrank the memory
footprint of MicroK8s to make it the smallest full K8s around.
https://ubuntu.com/blog/microk8s-memory-optimisation
Last login: Thu May 19 07:33:22 2022 from 127.0.0.1
root@pynq:~#
Während des Verbindungsprozesses wird ein Fenster eingeblendet, das nach dem Passwort der Remote-Maschine fragt. Es wird empfohlen, “Passwort merken” zu aktivieren, damit Sie das nächste Mal direkt den Verbindungsverlauf in der rustdesk APP sehen und direkt über die TCP-Tunnel-Funktion in der APP anstatt über die Befehlszeile verbinden können. Natürlich wäre es am besten, @rustdesk vorzuschlagen, eine [TCP-Tunnel]-Schaltfläche links neben der [Datei übertragen]-Schaltfläche in der APP-Oberfläche hinzuzufügen, damit Sie ohne Verwendung der Befehlszeile eine Verbindung zum Zielgerät herstellen können.