J’utilise le logiciel vpncloud pour connecter des serveurs ARM64 avec un raspberry pi 3. Il s’avĂšre que sa compilation sur un raspberry 3 (ou 2) en plus d’ĂȘtre longue peut planter car elle prend trop de mĂ©moire et le kernel fini par tuer la tĂąche.
L’idĂ©al est d’utiliser son PC de bureau car Rust peut ĂȘtre compilĂ© en crossplateforme. Il faut nĂ©anmoins installer divers paquets comme le compilateur gcc de la cible (armv7, arm64,..) et rustup ce qui peut ĂȘtre pĂ©nible selon sa distribution et sa version. Docker peut alors faciliter cette tĂąche, d’autant plus que Mozilla fournie une image Docker Rust.
Voici quelques scripts pour générer un binaire pour 3 architectures.
git clone https://github.com/dswd/vpncloud.git
cd vpncloud
docker run --rm --user "$(id -u)":"$(id -g)" -v "$PWD":/usr/src/vpncloud
-w /usr/src/vpncloud -u root -it rust:1.36 /bin/bash -c "apt-get update &&
apt-get install -qq gcc-arm-linux-gnueabihf &&
rustup target add armv7-unknown-linux-gnueabihf &&
cargo build --release --target=armv7-unknown-linux-gnueabihf"
Le binaire généré se trouve dans target/armv7-unknown-linux-gnueabihf/release/vpncloud
(le raspberry3 peut etre installé en Linux 64 bit avec par exemple archlinuxarm : AArch64 Installation )
git clone https://github.com/dswd/vpncloud.git
cd vpncloud
docker run --rm --user "$(id -u)":"$(id -g)" -v "$PWD":/usr/src/vpncloud
-w /usr/src/vpncloud -u root -it rust:1.36 /bin/bash -c 'apt-get update &&
apt-get install -qq gcc-aarch64-linux-gnu &&
echo "[target.aarch64-unknown-linux-gnu]" >> .cargo/config &&
echo "linker = \"aarch64-linux-gnu-gcc\"" >> .cargo/config &&
rustup target add aarch64-unknown-linux-gnu &&
cargo build --release --target=aarch64-unknown-linux-gnu'
ls target/aarch64-unknown-linux-gnu/release/vpncloud
git clone https://github.com/dswd/vpncloud.git
cd vpncloud
docker run --rm --user "$(id -u)":"$(id -g)" -v "$PWD":/usr/src/vpncloud
-w /usr/src/vpncloud -u root -it rust:1.36 /bin/bash -c
'echo "[target.x86_64-unknown-linux-gnu]" >> .cargo/config &&
echo "linker = \"x86_64-linux-gnu-gcc\"" >> .cargo/config &&
rustup target add x86_64-unknown-linux-gnu &&
cargo build --release --target=x86_64-unknown-linux-gnu'
ls target/x86_64-unknown-linux-gnu/release/vpncloud