转载自:https://www.annhe.net/article-4542.html

==================

编译etcd测试工具benchmark:

CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build .

概述

qemu-user-staticqemu-user-static

qemu-user-static

apt install qemu-user-staticaria2c -x 16 http://cdimage.ubuntu.com/ubuntu-base/releases/19.10/release/ubuntu-base-19.10-base-arm64.tar.gzmkdir rootfscd rootfstar xvf ../ubuntu-base-19.10-base-arm64.tar.gzcp /usr/bin/qemu-aarch64-static usr/bincp /etc/resolv.conf etc
 
1
2
3
4
5
        sudo mount -t devtmpfs devtmpfs dev
        sudo mount -t devpts devpts dev/pts
        sudo mount -t sysfs sysfs sys
        sudo mount -t tmpfs tmpfs tmp
        sudo mount -t proc proc proc
chroot . /bin/bash

持续集成

chroot 的命令格式为:

 
1
chroot [OPTION] NEWROOT [COMMAND [ARG]...]
qemu-user-static[COMMAND [ARG]...]build.sh
 
1
chroot . /build.sh

下面是使用 Github Action 编译 Pandoc aarch64 的一个例子。

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
name: pandoc-aarch64
on: [push]
jobs:
 
  aarch64-pandoc:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: build
      run: |
        mkdir rootfs
        export pkg=`curl -s "http://hackage.haskell.org/package/pandoc" |grep "base href" |awk -F'"' '{print $2}' |sed 's/\/$//g' |awk -F'/' '{print $NF}'`
        curl -s -L "https://github.com/arm4rpi/pandoc-arm/releases/download/v0.1/aarch64-$pkg.tar.gz" -o rootfs/aarch64-$pkg.tar.gz
        MIME=`file -b --mime-type rootfs/aarch64-$pkg.tar.gz`
        echo $MIME
        [ "$MIME"x == "application/gzip"x ] && echo "Already exists" && exit 0 || echo "Not exists"
        sudo dd if=/dev/zero of=/mnt/swapfile bs=1M count=12288
        sudo dd if=/dev/zero of=/home/swapfile bs=1M count=10240
        sudo mkswap /mnt/swapfile
        sudo mkswap /home/swapfile
        sudo swapon /mnt/swapfile
        sudo swapon /home/swapfile
        free -m
        df -h
        sudo apt-get update
        sudo apt-get install -y qemu-user-static aria2
        aria2c -x 16 http://cdimage.ubuntu.com/ubuntu-base/releases/19.10/release/ubuntu-base-19.10-base-arm64.tar.gz
        cd rootfs
        echo "decompression rootfs"
        tar xvf ../ubuntu-base-19.10-base-arm64.tar.gz &>/dev/null && echo "decompression rootfs successfull"
        cp /usr/bin/qemu-aarch64-static usr/bin
        cp /etc/resolv.conf etc
        cp ../build.sh ${pkg}
        cp ../cabal.project* .
        sudo mount -t devtmpfs devtmpfs dev
        sudo mount -t devpts devpts dev/pts
        sudo mount -t sysfs sysfs sys
        sudo mount -t tmpfs tmpfs tmp
        sudo mount -t proc proc proc
        echo "chroot to arm"
        sudo chroot . /${pkg}
        echo "Upload Asset"
        for id in `ls aarch64-*.tar.gz`;do
        curl -H "Authorization: token ${{ secrets.TOKEN }}" -H "Content-Type: application/x-gzip" "https://uploads.github.com/repos/arm4rpi/pandoc-arm/releases/24024627/assets?name=$id" --data-binary @$id
        done

后记

qemu-user-staticswap

还是 Golang 方便,编译快,交叉编译也很简单:

 
1
CGO_ENABLED=0 GOOS=linux GOARCH=arm go build

参考资料

 
1
1. https://www.jianshu.com/p/ee7ba9a188d0