2024年10月19日土曜日

terraform の nifcloud provider を使って Gitlab Runner を構築してみた

terraform の nifcloud provider を使って Gitlab Runner を構築してみた

概要

こちらを使ってみました

環境

  • Ubuntu 24.04
  • terraform 1.9.7
    • nifcloud provider 1.16

インストール

sudo apt update && sudo apt install -y gnupg software-properties-common
wget -O- https://apt.releases.hashicorp.com/gpg | \

gpg --dearmor | \
sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg > /dev/null

gpg --no-default-keyring \
--keyring /usr/share/keyrings/hashicorp-archive-keyring.gpg \
--fingerprint

echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] \
https://apt.releases.hashicorp.com $(lsb_release -cs) main" | \
sudo tee /etc/apt/sources.list.d/hashicorp.list

sudo apt update
sudo apt install terraform

terraform -install-autocomplete

事前準備

Gitlab 側の任意のプロジェクトで Runner を登録する準備をしましょう
glrt- から始まるトークンが取得できれば OK です
このトークンは後述する variables.tf の token 変数として使われ環境変数から読み込みます

また今回は nifcloud を使うので nifcloud のアクセスキーとシークレットキーを準備しておいてください

main.tf

今回は3つのリソースを作成します

  • Runner 本体
  • Runner パラメータグループ
  • Runner と Gitlab の紐づけ

流れとして Runner 本体を作成後にパラメータグループを作成しそのパラメータグループを使って Runner と Gitlab を紐づけます

今回は紐づける Gitlab は https://gitlab.com をデフォルトの値にしています

resource "nifcloud_devops_runner" "test" {
  name              = var.runner_name
  instance_type     = var.instance_type
  availability_zone = var.az
  concurrent        = var.concurrent
  description       = var.description
}

resource "nifcloud_devops_runner_parameter_group" "test" {
  name = var.parameter_group_name
}

resource "nifcloud_devops_runner_registration" "group_runner" {
  runner_name          = var.runner_name
  gitlab_url           = var.gitlab_url
  parameter_group_name = var.parameter_group_name
  # 事前にgitlabからrunnerを登録するためのトークンを取得しておくこと
  token = var.token
}

variables.tf

変数を定義します
各種変数には default を用意していますが必要に応じて変更もしくは環境変数 TF_VAR_xxx から上書きしてもらって OK です

token は環境変数を使って挿入するので default はありません

variable "runner_name" {
  default = "test-runner"
  type    = string
}

variable "instance_type" {
  default = "c-small"
  type    = string
}

variable "az" {
  default = "east-11"
  type    = string
}

variable "concurrent" {
  default = 10
  type    = number
}

variable "description" {
  default = "memo"
  type    = string
}

variable "parameter_group_name" {
  default = "test-pg"
  type    = string
}

variable "gitlab_url" {
  default = "https://gitlab.com"
  type = string
}

variable "token" {
  type      = string
  sensitive = true
}

providers.tf

nifcloud プロバイダを使う定義を記載してるだけです
リージョンなど必要に応じて変更してください

terraform {
  required_providers {
    nifcloud = {
      source = "nifcloud/nifcloud"
    }
  }
}

provider "nifcloud" {
  region = "jp-east-1"
}

注意事項

自身 Gitlab と作成した Runner が疎通できていないといけないので一度実行して Runner を作成したあとに IP が払い出されるんのでその IP を Gitlab のファイアウォールに追加してあげてから再度 apply すれば Runner 登録も完了します

動作確認

  • terraform init
  • TF_VAR_token=glrt-xxx NIFCLOUD_ACCESS_KEY_ID=xxx NIFCLOUD_SECRET_ACCESS_KEY=xxx terraform plan
  • TF_VAR_token=glrt-xxx NIFCLOUD_ACCESS_KEY_ID=xxx NIFCLOUD_SECRET_ACCESS_KEY=xxx terraform apply

Gitlab 側から Runner が登録されていれば OK です

最後に

Runner トークンを払い出すのが面倒ですがそれもうまくいけば自動化できるかなと思います

現状は複数のトークンを指定することはできませんがうまくやれば count と組み合わせて一括登録的なこともできるかなと思います

参考サイト

2024年10月18日金曜日

iPhone で UTM を使って Ubuntu を起動してみる

iPhone で UTM を使って Ubuntu を起動してみる

概要

AltStore + UTM で試してみました
JIT が使えないと恐ろしく遅いので JIT を有効化してから UTM を起動します

環境

  • iPhone14 (iOS 18.0.1)
  • macOS 15.0.1
  • AltServer 1.7.2
  • UTM (install via AltStore)
  • Python 3.9.6 (system installed)
  • Ubuntu 24.04 LTS

pymobiledevice3 のインストール

  • pyenv global system
  • python3 -m pip install -U pymobiledevice3==2.30.0
  • python3 -m pip install -U construct==2.10.69
  • python3 -m pip install -U qh3==0.15.1

iPhone と Mac の有線接続

今のところ JIT の有効化は有線のみサポートしているようです

JIT の有効化

AltServer を起動し有効にします

AltServer -> Enable JIT -> iPhone -> UTM

有効にできると以下のようなメッセージが出てきます
また権限を許可するダイアログが途中で表示されるので許可します

Ubuntu イメージのダウンロード

Ubuntu の iso イメージをダウンロードします
Ubuntu の公式から iPhone でダウンロードします

ファイル名は ubuntu-24.04.1-live-server-amd64.iso でファイルサイズは約2.5GB でした

UTM の起動とエミュレートの作成

UTM アプリを起動します
iPhone には Linux カーネルがなくVM は作成できないのでエミュレートで追加します

  • 左上プラスボタン
  • エミュレート
  • Linux
  • カーネルイメージから起動 -> オフ
    • 起動 ISO イメージ -> 選択 -> ubuntu-24.04.1-live-server-amd64.iso を選択
    • iso は Safari でダウンロードした場合は iCloud 内にあります
  • マシン設定
    • アーキテクチャ -> ARM64
    • システム -> Standard PC (q35)
    • メモリ -> 512MiB
    • CPU コア数 -> 4
    • ディスクサイズ -> 8GB
    • 共有ディレクトリ -> なし

Ubuntu 起動

あとは一覧から起動するだけです
事前に Bluetooth キーボードなどを設定しておくと操作が楽になります

「Display output is not active」が表示されますがしばらくすると起動するので待っていれば OK です

cloud-init の実行が完了すると以下のように Ubuntu のインストールが開始されます

最後に

AltServer の JIT 機能を使って iPhone 上で Ubuntu をエミューレートしてみました
JIT を使えば動かないことはないですがかなり遅い感じはします
また作業中はかなり iPhone が熱くなるので注意が必要です

もっと軽量でインストール不要の OS ならサクサク動くかもしれません
あとは iPhone14 ではなく iPhone15 や Pro Max などスペックの高い iPhone なら動くかもしれません

参考サイト

2024年10月17日木曜日

東京メトロの時刻表は JSON API で取得できる

東京メトロの時刻表は JSON API で取得できる

概要

取得方法を紹介します

環境

  • macOS 15.0.1
  • curl 8.10.0

方法

  • curl https://transfer.tokyometro.jp/api/timetable?numbering=M25&lang=ja

長いの json の内容は省略しますがだいたい以下の情報が含まれています

  • 駅名
  • 行先き (上下線)
  • 行先きに対する時刻表 (平日/休日)
  • 時刻表は以下のデータが含まれています
{
  "time": "2024-10-07T05:00:00+09:00",
  "id": "82430103",
  "train_no": "A501",
  "type": "",
  "train_name": "",
  "departure": true,
  "previous_departure": false,
  "color": "#000000",
  "destinations": [
    "荻窪"
  ]
}

最後に

Web スクレーピングする必要がないので結構便利です

2024年10月16日水曜日

iOS アプリの entitlements を確認する方法

iOS アプリの entitlements を確認する方法

概要

コマンドで取得する方法を紹介します
ipa ファイルではなく app ファイルに対して行うのがポイントです

環境

  • macOS 15.0.1
  • Xcode 16.0

コマンド

  • codesign -d --entitlements :- app_name.app | xmllint --format -
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>application-identifier</key>
    <string>your.app.identifier</string>
    <key>com.apple.developer.team-identifier</key>
    <string>xxxxxx</string>
    <key>get-task-allow</key>
    <true/>
  </dict>
</plist>

Xcode であれば

~/Library/Developer/Xcode/DerivedData/app_name-cuzoqdebxqlaksegeoxfmmsaetqz/Build/Products/Debug-iphoneos/app_name.app

に archive ビルドした app ファイルがあります

2024年10月15日火曜日

サブアカウント用の Apple ID を新規で作成する方法

サブアカウント用の Apple ID を新規で作成する方法

概要

ここ https://account.apple.com/account から作成するだけです

環境

  • macOS 15.0.1

ポイント

  • 異なるメールアドレスが必要
  • 電話番号は同一でも OK

最後に

サブアカウントが必要になるケースがあるのでその場合は作成しましょう

2024年10月14日月曜日

朝の目覚ましにプレイリストのランダム再生を使うオートメーションの設定

朝の目覚ましにプレイリストのランダム再生を使うオートメーションの設定

概要

忘れるのでメモ

環境

  • iPhone 14
  • iOS 18.0.1

アクションの内容

上から順番にアクション名は

  • 音量を設定
  • プレイリストを取得
  • ミュージックを検索
  • ミュージックを再生

最後に

iOS のバージョンによってアクション名の表記に若干違いがある可能性があるので注意です

参考サイト

2024年10月13日日曜日

iOS アプリが必要としているパーミッションの一覧を取得する方法

iOS アプリが必要としているパーミッションの一覧を取得する方法

概要

アプリがどんなパーミッションを必要としているか確認するときに使えます
おまけでバージョン各種バージョン情報を取得するコマンドも掲載します

環境

  • macOS 15.0.1
  • Xcode 16.0

コマンド

for i in `find . -name "Info.plist" | grep -v 'Pods/' | grep -v 'Tests'`; do echo ${i}; plutil -p ${i} | grep 'UsageDescription'; done

CFBundleVersion を確認するコマンド

for i in `find . -name "Info.plist" | grep -v 'Pods/' | grep -v 'Tests'`; do echo ${i}; plutil -p ${i} | grep 'CFBundleVersion'; done

or

for i in `find . -name "*.pbxproj" | grep -v 'Pods/' | grep -v 'Tests'`; do echo ${i}; plutil -p ${i} | grep 'CURRENT_PROJECT_VERSION'; done

CFBundleShortVersionString を確認するコマンド

for i in `find . -name "Info.plist" | grep -v 'Pods/' | grep -v 'Tests'`; do echo ${i}; plutil -p ${i} | grep 'CFBundleShortVersionString'; done

or

for i in `find . -name "*.pbxproj" | grep -v 'Pods/' | grep -v 'Tests'`; do echo ${i}; plutil -p ${i} | grep 'MARKETING_VERSION'; done

デプロイターゲットバージョンを確認するコマンド

for i in `find . -name "*.pbxproj" | grep -v 'Pods/' | grep -v 'Tests'`; do echo ${i}; plutil -p ${i} | grep 'IPHONEOS_DEPLOYMENT_TARGET'; done

参考サイト