Ansible

ansibleの使い方 install brew install ansible 接続確認 ❯ cat hosts [server] xxx.xxx.xxx.xxx 実行 ❯ ansible server -i hosts -m ping -u ubuntu 18.183.206.58 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } playbook適用 ❯ cat playbook.yml --- - name: Update web servers hosts: server remote_user: ubuntu become: true tasks: - name: Run the equivalent of "apt-get update" as a separate step ansible.builtin.apt: update_cache: yes syntax-check ansible-playbook playbook.yml --syntax-check dryrun ansible-playbook playbook.yml -i hosts -C -D 適用 ansible-playbook playbook.yml -i hosts playbookの探し方 https://docs.ansible.com/ansible/latest/collections/ansible/builtin/apt_module.html ...

July 12, 2022 · 1 min · motoki yoan

Journalctl の使い方

忙しい人向け journalctl -u mariadb.service -xe serviceを指定する journalctl -u mariadb.service tailする journalctl -e tail -f journalctl -f 詳細情報 journalctl -xe

July 10, 2022 · 1 min · motoki yoan

Multiplayer Game Programming読本

multiplayer game programmingという本を気になる部分だけつまみ食いして読んでいる 今日はChapter 4にあった"Compression"をまとめる 英語の見出しは本文のタイトルを引用し、日本語の見出しは私がみやすさでつけたもの Compression マルチプレイのリアルタイム性のあるゲームであればあるほど、通信するオブジェクトと頻度が増え必要な通信帯域が増加する そのため、可能な限り無駄な情報は削減して通信を行う必要がある この章では低レベルな圧縮方法の紹介を行っている Sparse Array Compression 本で扱っているサンプルゲームでは名前を128byteまで許容されている。 名前の配列に128byteの配列を利用するのがプログラムとしては妥当だが、128byte使い切らないユーザーも含まれるため不要なスペースができてしまう。 そこで、名前長 + 名前というバイト列にする事で余計なスペースを除去するという圧縮方法 Entropy Encoding 以下の章ではオブジェクトの方向と回転を表す7つのfloatの圧縮方法について記載されている 参考書ではbyte配列を渡す想定をしているが、理解を助けるために下記のような構造体の形式で書いていく // 合計 28byte type XXX struct { type Location struct { x float y float z float } type Quartunion struct { qx float qy float qz float qw float } } 頻出する状態には短いデータを与えましょう。という内容 サンプルゲームではキャラがほとんどY=0のポジションにいる特性を利用してY=0ならばtrue, そうでなければfalse+floatの情報を送っている // 合計 24byte + 1bit type XXX struct { type Location struct { x float ybit bool y float z float } type Quartunion struct { qx float qy float qz float qw float } } Fixed point Locationの他の2軸の圧縮をする この内容はゲームの特性と相談になるが、整数値にすることでサイズを減らそうというもの 本では縦横に40000(おそらくpx)が表現できれば良いため、int16でよいという内容だった ...

May 11, 2022 · 2 min · motoki yoan

GKEからのGCPへの認証をまとめる

GKE cluster作成時にも指定できるアクセススコープはレガシー扱いになっている https://cloud.google.com/kubernetes-engine/docs/how-to/access-scopes#what_are_access_scopes とはいえチュートリアルには--scopeを利用したものも見受けられる https://agones.dev/site/docs/installation/creating-cluster/gke/ アクセススコープは手軽だが細かい設定ができない。ServiceAccountを使うと必要最低限の権限のみ付与する事ができるので、セキュリティの品質が保たれるためGoogleとしてはServiceAccountを推している。という認識でいいのかな. GKEの権限関係で迷わないよう、サービス アカウントを使用した Google Cloud への認証を題材にやり方を整理する アクセススコープを用いた認証 ServiceAccountを用いた認証 (おまけ) ServiceAccount認証にWorkload Identityを用いる 事前準備 題材に則りpubsub topicを作成し、publishとsubscribeができるか検証する pubsub topicの作成 gcloud pubsub topics create echo gcloud pubsub subscriptions create echo-read --topic=echo ソースコード取得 git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples cd kubernetes-engine-samples cloud-pubsub/deployment以下のyamlファイルを実際に適応していく 1. アクセススコープを用いた認証 クラスタ作成 gcloud container clusters create pubsub-test --scopes=gke-default,https://www.googleapis.com/auth/pubsub --zone asia-northeast1-a scope オプションについて --scopesオプションをつけることでクラスタに権限を付与できる gke-defaultは下記のscopeをまとめたエイリアスになる Alias URI gke-default https://www.googleapis.com/auth/devstorage.read_only https://www.googleapis.com/auth/logging.write https://www.googleapis.com/auth/monitoring https://www.googleapis.com/auth/service.management.readonly https://www.googleapis.com/auth/servicecontrol https://www.googleapis.com/auth/trace.append gcloud container clusters create --helpをすると他のエイリアスもあるのでみてみると良い (webのmanにも載っている) また複数指定したいのでカンマ区切りで指定している scopeの一覧から選んで付与していく. (権限を追加する) 後から権限を追加したくなるケースはどうするか? scopeを変えたいならば、node-poolsを作り変える事しかできない # 新規作成 gcloud container node-pools create new-pools --cluster pubsub-test --scopes=gke-default,https://www.googleapis.com/auth/pubsub,https://www.googleapis.com/auth/something # 古いnodeを削除 gcloud container node-pools delete old-pools --cluster pubsub-test デプロイ kubectl apply -f cloud-pubsub/deployment/pubsub.yaml kubectl get po NAME READY STATUS RESTARTS AGE pubsub-8cb8475c8-tvxwv 1/1 Running 0 95s 確認 Publish gcloud pubsub topics publish echo --message="Hello, world\!" messageIds: - '3909513331830980' Subscribe kubectl logs -f pubsub-8cb8475c8-tvxwv Pulling messages from Pub/Sub subscription... [2022-03-21 06:37:27.265195] Received message: ID=3909513331830980 Data=b'Hello, world!' [2022-03-21 06:37:27.265294] Processing: 3909513331830980 [2022-03-21 06:37:30.267957] Processed: 3909513331830980 2. ServiceAccountを用いた認証 Googleが推奨しているのはこちら サービス アカウントを使用した Google Cloud への認証と同じ事をしているだけなので説明は省く ...

March 21, 2022 · 3 min · motoki yoan

coreutilsのソースコードをDLする方法

aspのinstall $ sudo pacman asp aspの簡単な使い方 # packageの一覧 $ asp list-all # packageの取得 $ asp checkout coreutils coreutilsのダウンロード $ asp checokut coreutils $ cd coreutils $ makepkg -o # buildはせずDLだけするオプション 詰まったところ GPGキーがverifiyされない makepkgの実行中で下記のようなエラーが発生した -> Found 01-fix-fs72253.patch ==> Validating source files with sha256sums... coreutils-9.0.tar.xz ... Passed coreutils-9.0.tar.xz.sig ... Skipped 01-fix-fs72253.patch ... Passed ==> Verifying source file signatures with gpg... coreutils-9.0.tar.xz ... FAILED (unknown public key DF6FD971306037D9) ==> ERROR: One or more PGP signatures could not be verified! GNUのページに書いてあるコマンドを実行する ...

December 11, 2021 · 1 min · motoki yoan

go getで取得したコマンドの名前を変更する

yeomanを入れて実行したところエラー ❯ yo code must specify 3 arguments 確認したところspannerのgeneratorであるyoがすでに入っていました… ❯ yo help yo is a command-line tool to generate Go code for Google Cloud Spanner. (混乱を避けるため、以降ではコードブロック以外yoはspannerのコードジェネレートツールを指します) 両方利用したかったのでspanner generatorのyoを別名に書き換える方針で決めました。 その名もgoyoです(ババーン) 本題 ではどうやったらgo getで取得したコマンド名を変えられるのか? go getのオプションを探しましたがありませんでした そこで仕方なくyoの名前自体を変更します yoはバイナリが入っていると思ったらシェルスクリプトでした (goenvを使っているとそうなる?) ❯ file ~/.anyenv/envs/goenv/shims/yo /Users/motoki.yoan/.anyenv/envs/goenv/shims/yo: Bourne-Again shell script text executable, ASCII text ❯ cat ~/.anyenv/envs/goenv/shims/yo #!/usr/bin/env bash set -e [ -n "$GOENV_DEBUG" ] && set -x program="${0##*/}" if [[ "$program" = "go"* ]]; then for arg; do case "$arg" in -c* | -- ) break ;; */* ) if [ -f "$arg" ]; then export GOENV_FILE_ARG="$arg" break fi ;; esac done fi export GOENV_ROOT="/Users/me/.anyenv/envs/goenv" exec "/Users/me/.anyenv/envs/goenv/libexec/goenv" exec "$program" "$@" programがyoを表しているように見えますが、##*/が意味不明です ...

February 6, 2021 · 1 min · motoki yoan

git restoreってなんだ

不適切なファイルをgit addしてしまいました weblog % git add content/posts/git-restore.md weblog % git status On branch main Your branch is up to date with 'origin/main'. Changes to be committed: (use "git restore --staged <file>..." to unstage) new file: content/posts/git-restore.md こういった場合 git reset <FILE>を使ってunstagedにしていました が、上の例にもあるけど、git restoreを使えというサジェストが出ています そもそも気がついたときのログにはadd/rmのサジェストも出ています Changes not staged for commit: (use "git add/rm <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) git add/rm: commitされた内容を更新する git restore: working directoryの内容を破棄する という違いがあるようです 今回のように間違ってaddしてしまった場合は、git restoreの方が正しそうです。 試してみます。 ...

January 8, 2021 · 1 min · motoki yoan