Skip to content

Instantly share code, notes, and snippets.

@matsuu
Last active May 4, 2022 12:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save matsuu/c7313f9c6ecd8f6a453714ed0291e773 to your computer and use it in GitHub Desktop.
Save matsuu/c7313f9c6ecd8f6a453714ed0291e773 to your computer and use it in GitHub Desktop.
Apple Silicon搭載macでISUCON11予選環境を構築する

Apple Silicon搭載macでISUCON11予選環境を構築する

aarch64に対応しているのでApple Silicon上のLinux環境でも構築できるはずです。

Arm版Ubuntu 20.04環境を用意する

Apple Silicon環境のmacOSでは2022年5月時点で次のような選択肢があります。

20.04 LTS系以外の場合はセットアップに失敗する可能性がありますので20.04.xを用意してください。

セットアップスクリプトを実行する

下記スクリプトをUbuntu上で実行します。

curl -sLO https://gist.githubusercontent.com/matsuu/c7313f9c6ecd8f6a453714ed0291e773/raw/47c2a1c7235362910ac432827f1d859aaffd833e/setup_isucon11q.sh
chmod +x setup_isucon11q.sh
sudo ./setup_isucon11q.sh

最後に OK と表示されれば完了です。

ベンチマークを実行する

isuconユーザに切り替えてベンチマーク

sudo -i -u isucon
cd bench
# 本番同様にnginx(https)へアクセスを向けたい場合
./bench -all-addresses 127.0.0.11 -target 127.0.0.11:443 -tls -jia-service-url http://127.0.0.1:4999
# isucondition(3000)へ直接アクセスを向けたい場合
./bench -all-addresses 127.0.0.11 -target 127.0.0.11:3000 -jia-service-url http://127.0.0.1:4999

参考

#!/bin/bash
set -e
export DEBIAN_FRONTEND=noninteractive
apt-get update
apt-get install -y --no-install-recommends ansible curl git
timedatectl set-timezone Asia/Tokyo
GITDIR="/tmp/isucon11-qualify"
rm -rf ${GITDIR}
git clone --depth=1 -b aarch64 https://github.com/matsuu/isucon11-qualify.git ${GITDIR}
(
cd ${GITDIR}/provisioning/ansible
# common
sed -i -e '/timezone/d' roles/common/tasks/main.yml
sed -i -e '/name.*Deploy/,/dest/d' -e 's/^$/ recurse: yes/' roles/common/tasks/isucon11-qualify.yml
# bench
curl -sL https://github.com/isucon/isucon11-qualify/releases/download/public/initialize.json > roles/bench/files/initialize.json
curl -sL https://github.com/isucon/isucon11-qualify/releases/download/public/images.tgz > roles/bench/files/images.tgz
# contestant
curl -sL https://github.com/isucon/isucon11-qualify/releases/download/public/1_InitData.sql > roles/contestant/files/initial-data.sql
openssl x509 -in <(openssl req -subj '/CN=*.t.isucon.dev' -nodes -newkey rsa:2048 -keyout roles/contestant/files/etc/nginx/certificates/tls-key.pem) -req -signkey roles/contestant/files/etc/nginx/certificates/tls-key.pem -sha256 -days 3650 -out roles/contestant/files/etc/nginx/certificates/tls-cert.pem -extfile <(echo -e "basicConstraints=critical,CA:true,pathlen:0\nsubjectAltName=DNS.1:*.t.isucon.dev")
mkdir -p /var/lib/cloud/scripts/per-instance
sed -i -e '/^index=/s/=.*/=1/' roles/contestant/files/var/lib/cloud/scripts/per-instance/generate-env_aws.sh
sed -i -e 's/192\.168\.0/127.0.0/' roles/contestant/files/etc/hosts
ansible-playbook -i standalone.hosts --connection=local site.yml
/var/lib/cloud/scripts/per-instance/generate-env.sh
mkdir -p /usr/share/ca-certificates/isucon
cp /etc/nginx/certificates/tls-cert.pem /usr/share/ca-certificates/isucon
echo "isucon/tls-cert.pem" >> /etc/ca-certificates.conf
update-ca-certificates
)
rm -rf ${GITDIR}
echo "OK"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment