Github ActionsでCloud Firestoreセキュリティールールのテストを実行する
.github/workflows/security-rules.yml
name: security rules on: pull_request: paths: - "packages/internal/__tests__/**/*" - "packages/internal/*.rules" - "packages/internal/scripts/test-firestore.sh" jobs: build: runs-on: ubuntu-latest env: FIREBASE_EMULATORS_PATH: ${{ github.workspace }}/emulator-cache FIREBASE_TOOLS_VERSION: 7.12.1 steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 with: node_version: 10 - uses: actions/cache@v1 with: path: ~/.cache/yarn key: ${{ runner.os }}-yarn-${{ hashFiles(format('{0}{1}', github.workspace, '/yarn.lock')) }} restore-keys: | ${{ runner.os }}-yarn- - name: emulator cache patch run: | mkdir -p $FIREBASE_EMULATORS_PATH echo $FIREBASE_TOOLS_VERSION > "$FIREBASE_EMULATORS_PATH/VERSION" working-directory: "./packages/internal" - name: cache Emulator uses: actions/cache@v1 with: path: ${{ env.FIREBASE_EMULATORS_PATH }} key: ${{ runner.os }}-firebase-emulators-${{ hashFiles(format('{0}{1}', github.workspace, '/emulator-cache/**')) }} continue-on-error: true - name: setup env run: | echo "::set-env name=GOPATH::$(go env GOPATH)" echo "::add-path::$(go env GOPATH)/bin" - run: yarn install --frozen-lockfile --prefer-offline working-directory: "./packages/internal" - run: scripts/test-firestore.sh working-directory: "./packages/internal"
packages/internal/scripts/test-firestore.sh
#!/usr/bin/env bash set -e DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" CWD="$(pwd)" echo "Running in ${CWD}" echo "Running with node: $(which node)" echo "Running with npm: $(which npm)" echo "Ensuring CLI tools..." npm list -g firebase-tools || npm install --global firebase-tools@${FIREBASE_TOOLS_VERSION:-7.12.1} go get github.com/ka2n/waitport/cmd/waitport/... echo "Ensured CLI tools:" echo -e "\t$(which firebase)" echo -e "\t$(which waitport)" export FIRESTORE_EMULATOR_HOST=localhost:8080 firebase emulators:start --only firestore & PID="$!" waitport -listen $FIRESTORE_EMULATOR_HOST -timeout 2m yarn test --ci kill -INT $PID wait # TODO: test functions, hosting,,etc...
テスト失敗した場合の処理はどうせ掃除されると見越して雑です。
個人的にASICの情報をまとめていくウェブサイトを作った
気が向いたらいろいろと載せていく予定
Dayun Z1の初期セットアップを楽にするFWを作りました
2018/10/08に再アップロードされた20180930
版に少し手を入れてあります。(以前のものとの違いは調べてません)
- 初期状態で固定IPになっているのをDHCPに変更
- アドレスを変更(どうせなので)
TODO: - 定期的に再起動するように設定
prootとqemu-arm-staticを使ってARM用ディスクイメージをカスタマイズする
ASICのカスタムファーム作りのためにメーカーが配布しているFWを編集することがあります。設定を予め終えた状態のFWを作る等。
普通にマウントして作業しても良いんですが、内部のライブラリをアップデートしたい場合があります。そんな時にproot
とqemu-arm-static
を組み合わせて作業すると便利でした。
環境
- Host:
Linux 4.18.4-arch1-1-ARCH #1 SMP PREEMPT Wed Aug 22 07:33:26 UTC 2018 x86_64 GNU/Linux
- 対象のFW:
Linux Baikal 3.4.39 #2 SMP PREEMPT Mon Nov 21 16:23:11 CST 2016 armv7l armv7l armv7l GNU/Linux
アーキテクチャが違うのでそのままchrootしてもうまくコマンドが使えませんのでダメです。
prootとQEMU(qemu-arm-static)を使う
prootとQEMUを組み合わせて使うことでアーキテクチャが違うOSであってもライブラリのアップデートなどが行なえます。 prootはchrootを実現し、qemu-arm-staticは異なるアーキテクチャをエミュレーションしてくれます。どちらもユーザー空間で動きます。
prootのインストール
PRoot — chroot, mount --bind, and binfmt_misc without privilege/setupに入手法が書いてありますが、ArchLinuxではAURからインストールできるので、yayを使って入れます。
yay -S proot
qemu-arm-staticのインストール
詳しくは QemuUserEmulation - Debian Wiki を参照。
qemu-arm-static
はqemu-user-static
というパッケージに含まれています。
yay -S qemu-user-static
イメージファイルをマウント
まず、fdiskでディスクイメージ上のパーティションの区切り位置を確認します。
$ fdisk -l ./PiZero_GX10_180410_V1.2.img Disk /home/k2/tmp/PiZero_GX10_180410_V1.2.img: 3.7 GiB, 3904897024 bytes, 7626752 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x0007a4f5 Device Boot Start End Sectors Size Id Type /home/k2/tmp/PiZero_GX10_180410_V1.2.img1 40960 172031 131072 64M b W95 FAT32 /home/k2/tmp/PiZero_GX10_180410_V1.2.img2 172032 7544831 7372800 3.5G 83 Linux
次にmountコマンドでそれぞれをマウントします。オプションでSector sizeとSectorの位置とサイズを元にoffsetとsizelimitを指定します。
$ su - # mkdir -p /mnt/pizero_boot # mkdir -p /mnt/pizero # mount -t vfat -o loop,offset=$((40960*512)),sizelimit=$((131072*512)) /home/k2/tmp/PiZero_GX10_180410_V1.2.img /mnt/pizero_boot # mount -t ext4 -o loop,offset=$((172032*512)),sizelimit=$((7372800*512)) /home/k2/tmp/PiZero_GX10_180410_V1.2.img /mnt/pizero
prootでchrootする
以下のようにしてprootコマンドとqemu-arm-staticを組み合わせてchrootします。
# export PROOT_NO_SECCOMP=1 # ホストマシンのカーネルによっては必要 # cp $(which qemu-arm-static) /mnt/pizero/bin/qemu-arm-static # arm64ならqemu-aarch64-static # proot -S /mnt/pizero -b /mnt/pizero_boot:/boot -q qemu-arm-static /bin/bash root # root # export PATH=/bin:/usr/bin # PATHを設定