Linux things 🐧

un blog sur les technologies des logiciels libres et autres digressions

vpncloud cross-compilation avec Docker

Mon, 12 Aug 2019 00:50:04 +0200
# vpncloud   # docker   # rust  

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.

ARM32v7 (raspberry pi 2 / 3)

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

ARM64v8 (raspberry pi 3 / 4)

(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

X86_64

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