2024年7月31日水曜日

apt でインストールしたパッケージがどのリポジトリからインストールされたか確認する方法

apt でインストールしたパッケージがどのリポジトリからインストールされたか確認する方法

概要

apt policy を使うと簡単です

環境

  • Ubuntu 22.04

コマンド

  • apt policy docker-buildx-plugin
docker-buildx-plugin:
  Installed: 0.15.1-1~ubuntu.22.04~jammy
  Candidate: 0.16.1-1~ubuntu.22.04~jammy
  Version table:
     0.16.1-1~ubuntu.22.04~jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
 *** 0.15.1-1~ubuntu.22.04~jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
        100 /var/lib/dpkg/status
     0.14.1-1~ubuntu.22.04~jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
     0.14.0-1~ubuntu.22.04~jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
     0.13.1-1~ubuntu.22.04~jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
     0.13.0-1~ubuntu.22.04~jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
     0.12.1-1~ubuntu.22.04~jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
     0.11.2-1~ubuntu.22.04~jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
     0.11.1-1~ubuntu.22.04~jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
     0.10.5-1~ubuntu.22.04~jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
     0.10.4-1~ubuntu.22.04~jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
     0.10.2-1~ubuntu.22.04~jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages

URL からリポジトリ情報を確認する

  • grep 'https://download.docker.com/linux/ubuntu' /etc/apt/sources.list.d/*
/etc/apt/sources.list.d/docker.list:deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu   jammy stable

2024年7月26日金曜日

Gitlab CI のジョブを curl から実行する方法

Gitlab CI のジョブを curl から実行する方法

概要

パラメータがある場合などいちいち UI から設定するのが面倒な場合に使えます

環境

  • Gitlab 16.11.5

実行方法

curl -s --request POST "https://your-gitlab-url/api/v4/projects/1/jobs/100/play" \
     --header "Content-Type: application/json" \
     --header "PRIVATE-TOKEN: glpat-xxx" \
     --data @variables.json | jq .

variables.json というファイルにパラメータを設定します

{
  "job_variables_attributes": [
    {
      "key": "TEST_VAR_1",
      "value": "test1"
    },
    {
      "key": "TEST_VAR_2",
      "value": "test2"
    }
  ]
}

ジョブを特定する

ポイントですが manual なジョブしか実行することはできません
自動で流れるジョブは retry などを使います
なので jq や検索などを使って実行可能なジョブを検索しましょう

例えば manual でかつジョブ名が deploy という名前のジョブの id を取得する場合は以下のような感じです

curl -s --globoff --header "PRIVATE-TOKEN: glpat-xxx" "https://your-gitlab-url/api/v4/projects/1/jobs" | jq '.[] | select(.status == "manual" and .name == "deploy").id'

特定のコミットに紐づくジョブを探したい場合は commit.short_id or commit.id を使います

curl -s --globoff --header "PRIVATE-TOKEN: glpat-xxx" "https://your-gitlab-url/api/v4/projects/1/jobs" | jq '.[] | select(.status == "manual" and .commit.short_id == "12345678").id'

すべてのジョブを取得

最新 20 件までしか取得できないので注意しましょう

curl -s --globoff --header "PRIVATE-TOKEN: glpat-xxx" "https://your-gitlab-url/api/v4/projects/1/jobs"

プロジェクトのIDを取得する方法

プロジェクトのページから Settings -> General で確認できます

最後に

変数名など忘れがちなのでその場合に variables.json で管理できるのも楽です

参考サイト

2024年7月25日木曜日

glb ファイルは blender で開いて編集することができる

glb ファイルは blender で開いて編集することができる

概要

自分のモデルを ReadyPlayerMe で作成しモデルファイルをダウンロードしたらそれを blender で開く方法を紹介します

環境

  • macOS 14.5
  • blender 4.2.0

ReadyPlayerMe でモデルを作成する

静止画 or カメラで撮影した自画像から生成できます
生成できたら glb ファイルのモデルをファイルをダウンロードしましょう

もしくはすでにあるサンプルモデルでも OK です

執筆時点ではアカウントなしで作成することができました

Blender で開く

File -> Import -> glTF 2.0

で開くことができます

Amature などの情報もしっかり読み込んでくれます
あとはここで編集するだけです

最後に

最新の blender であれば特にプラグインなどをインストールせずとも glb ファイルを開くことができます
好きな造形に変更したりアニメーションを加えることができます

2024年7月24日水曜日

docker compose watch を試す

docker compose watch を試す

概要

結論から述べると開発用の機能で sync はファイルの同期で rebuild はコンテナの再作成になります
それぞれ指定のファイルが更新されると発火する感じになっています

環境

  • Ubuntu 22.04
  • docker 27.0.3

アプリ作成

何でも OK です

  • pyenv local 3.11.6
  • pip install pipenv
  • pipenv install flask
  • vim app.py
from flask import Flask

app = Flask(__name__)


@app.route("/")
def hello():
  print("hello")
  return "hello"

Dockerfile 作成

  • vim Dockerfile
FROM python:3.11.6-slim-bullseys

ADD . /app
WORKDIR /app

RUN pip install pipenv
RUN pipenv install
ENV FLASK_APP app.py

EXPOSE 5000

CMD ["pipenv", "run", "flask", "run", "--host", "0.0.0.0"]

compose.yaml

今回のポイントとなるファイルです

services:
  server:
    build:
      context: .
    develop:
      watch:
        - action: sync
          path: .
          target: /app/
        - action: rebuild
          path: ./rebuild_test.txt
    ports:
      - 5000:5000

develop -> watch -> action で発火するイベントを指定できます
sync がファイル同期で rebuild がコンテナ再作成になります
特定のファイルやディレクトリを指定することでそのファイルが更新された際に action を自動で実行してくれます

watch で起動する

up の代わりに watch を使います
なお -d オプションはないようです

  • docker compose watch

「Watch enabled」で起動すれば OK です

動作確認

sync

まずは sync を確認してみます
ワーキングディレクトリで新規でファイルを作成してみましょう

  • touch hoge

すると watch 側のログに「Syncing “server” after changes ware detected」と表示されるのが確認できます
試しに /app 配下を確認すると hoge ファイルがあるのが確認できます

  • docker compose exec server ls -l /app/hoge

rebuild

今回は rebuild_test.txt を変更するとコンテナの再作成が走ります

  • echo test > rebuild_test.txt

watch 側のログにコンテナが再作成されているのが確認できると思います

最後に

これまではホスト領域をマウントしてコンテナの再起動や再作成を手動で行っていましたがそれらを自動で行ってくれます
コンテナの再作成は Dockerfile に記載の内容を再度実行するので可能な限り軽量な処理を記載したほうが良いかなと思います

watch は Ctrl+c で抜けれます
なお watch 終了後はコンテナ自体は起動しているので down してあげましょう

なお rebuild でコンテナが再作成された場合は古いコンテナは自動で削除されるようです

参考サイト

2024年7月23日火曜日

unattended-upgrade で esm リポジトリを追加する方法

unattended-upgrade で esm リポジトリを追加する方法

概要

unattended-upgrade は自動でパッケージの更新を行ってくれますがデフォルトでは標準のパッケージリポジトリのみ対象です 今回はあとから追加したリポジトリ (Ubuntu pro で使える esm リポジトリ) を追加する方法を紹介します
なお esm 以外にも docker や ansible なども同じ方法で可能です

環境

  • Ubuntu 22.04

追加するパッケージ情報の確認

  • grep -e 'Origin:' -e 'Suite:' /var/lib/apt/lists/esm.ubuntu.com_*
/var/lib/apt/lists/esm.ubuntu.com_apps_ubuntu_dists_jammy-apps-security_InRelease:Origin: UbuntuESMApps
/var/lib/apt/lists/esm.ubuntu.com_apps_ubuntu_dists_jammy-apps-security_InRelease:Suite: jammy-apps-security
/var/lib/apt/lists/esm.ubuntu.com_apps_ubuntu_dists_jammy-apps-updates_InRelease:Origin: UbuntuESMApps
/var/lib/apt/lists/esm.ubuntu.com_apps_ubuntu_dists_jammy-apps-updates_InRelease:Suite: jammy-apps-updates
/var/lib/apt/lists/esm.ubuntu.com_infra_ubuntu_dists_jammy-infra-security_InRelease:Origin: UbuntuESM
/var/lib/apt/lists/esm.ubuntu.com_infra_ubuntu_dists_jammy-infra-security_InRelease:Suite: jammy-infra-security
/var/lib/apt/lists/esm.ubuntu.com_infra_ubuntu_dists_jammy-infra-updates_InRelease:Origin: UbuntuESM
/var/lib/apt/lists/esm.ubuntu.com_infra_ubuntu_dists_jammy-infra-updates_InRelease:Suite: jammy-infra-updates

ここで表示された Origin と Suite 情報を使って unattended-upgrade に追加します

追加するにはファイルを作成します

/etc/apt/apt.conf.d/51unattended-upgrades-esm-packages の追加

番号は 50 のあとがいいです
51 に続く名前は好きな名前で OK です

  • sudo vim /etc/apt/apt.conf.d/51unattended-upgrades-esm-packages
Unattended-Upgrade::Allowed-Origins {
        "UbuntuESMApps:jammy-apps-security";
        "UbuntuESMApps:jammy-apps-updates";
        "UbuntuESM:jammy-infra-security";
        "UbuntuESM:jammy-infra-updates";
};

リポジトリが追加されたか確認

  • sudo unattended-upgrade --dry-run
/usr/bin/dpkg --status-fd 10 --no-triggers --unpack --auto-deconfigure /var/cache/apt/archives/libpython3.10_3.10.12-1~22.04.4_amd64.deb /var/cache/apt/archives/python3.10_3.10.12-1~22.04.4_amd64.deb /var/cache/apt/archives/libpython3.10-stdlib_3.10.12-1~22.04.4_amd64.deb /var/cache/apt/archives/python3.10-minimal_3.10.12-1~22.04.4_amd64.deb /var/cache/apt/archives/libpython3.10-minimal_3.10.12-1~22.04.4_amd64.deb
/usr/bin/dpkg --status-fd 10 --configure --pending
/usr/bin/dpkg --status-fd 10 --no-triggers --unpack --auto-deconfigure /var/cache/apt/archives/libgtk-3-common_3.24.33-1ubuntu2.2_all.deb
/usr/bin/dpkg --status-fd 10 --configure --pending
/usr/bin/dpkg --status-fd 10 --no-triggers --unpack --auto-deconfigure /var/cache/apt/archives/libgtk2.0-bin_2.24.33-2ubuntu2.1_amd64.deb /var/cache/apt/archives/libgail-common_2.24.33-2ubuntu2.1_amd64.deb /var/cache/apt/archives/libgail18_2.24.33-2ubuntu2.1_amd64.deb /var/cache/apt/archives/libgtk2.0-0_2.24.33-2ubuntu2.1_amd64.deb
/usr/bin/dpkg --status-fd 10 --configure --pending
/usr/bin/dpkg --status-fd 10 --no-triggers --unpack --auto-deconfigure /var/cache/apt/archives/libgtk2.0-common_2.24.33-2ubuntu2.1_all.deb
/usr/bin/dpkg --status-fd 10 --configure --pending
/usr/bin/dpkg --status-fd 10 --no-triggers --unpack --auto-deconfigure /var/cache/apt/archives/linux-libc-dev_5.15.0-116.126_amd64.deb
/usr/bin/dpkg --status-fd 10 --configure --pending
/usr/bin/dpkg --status-fd 10 --no-triggers --unpack --auto-deconfigure /var/cache/apt/archives/libgtk-3-common_3.24.33-1ubuntu2.2_all.deb /var/cache/apt/archives/libgtk-3-0_3.24.33-1ubuntu2.2_amd64.deb
/usr/bin/dpkg --status-fd 10 --configure --pending
/usr/bin/dpkg --status-fd 10 --no-triggers --unpack --auto-deconfigure --recursive /tmp/apt-dpkg-install-mev2tk
/usr/bin/dpkg --status-fd 10 --configure --pending
/usr/bin/dpkg --status-fd 10 --no-triggers --unpack --auto-deconfigure /var/cache/apt/archives/gtk-update-icon-cache_3.24.33-1ubuntu2.2_amd64.deb
/usr/bin/dpkg --status-fd 10 --configure --pending
/usr/bin/dpkg --status-fd 10 --no-triggers --unpack --auto-deconfigure /var/cache/apt/archives/libgtk-3-common_3.24.33-1ubuntu2.2_all.deb /var/cache/apt/archives/libgtk-3-0_3.24.33-1ubuntu2.2_amd64.deb /var/cache/apt/archives/libgtk-3-bin_3.24.33-1ubuntu2.2_amd64.deb
/usr/bin/dpkg --status-fd 10 --configure --pending

esm のリポジトリあるパッケージも追加されていれば OK です

esm リポジトリを追加する前の更新パッケージ一覧

念の為確認しましたがパッケージが少なくなっていることは確認できました

  • sudo rm /etc/apt/apt.conf.d/51unattended-upgrades-esm-packages
  • sudo unattended-upgrade --dry-run
/usr/bin/dpkg --status-fd 10 --no-triggers --unpack --auto-deconfigure /var/cache/apt/archives/linux-libc-dev_5.15.0-116.126_amd64.deb
/usr/bin/dpkg --status-fd 10 --configure --pending
/usr/bin/dpkg --status-fd 10 --no-triggers --unpack --auto-deconfigure /var/cache/apt/archives/gtk-update-icon-cache_3.24.33-1ubuntu2.2_amd64.deb
/usr/bin/dpkg --status-fd 10 --configure --pending
/usr/bin/dpkg --status-fd 10 --no-triggers --unpack --auto-deconfigure /var/cache/apt/archives/libgtk-3-common_3.24.33-1ubuntu2.2_all.deb /var/cache/apt/archives/libgtk-3-0_3.24.33-1ubuntu2.2_amd64.deb
/usr/bin/dpkg --status-fd 10 --configure --pending
/usr/bin/dpkg --status-fd 10 --no-triggers --unpack --auto-deconfigure /var/cache/apt/archives/libgtk2.0-bin_2.24.33-2ubuntu2.1_amd64.deb /var/cache/apt/archives/libgail-common_2.24.33-2ubuntu2.1_amd64.deb /var/cache/apt/archives/libgail18_2.24.33-2ubuntu2.1_amd64.deb /var/cache/apt/archives/libgtk2.0-0_2.24.33-2ubuntu2.1_amd64.deb
/usr/bin/dpkg --status-fd 10 --configure --pending
/usr/bin/dpkg --status-fd 10 --no-triggers --unpack --auto-deconfigure /var/cache/apt/archives/libpython3.10_3.10.12-1~22.04.4_amd64.deb /var/cache/apt/archives/python3.10_3.10.12-1~22.04.4_amd64.deb /var/cache/apt/archives/libpython3.10-stdlib_3.10.12-1~22.04.4_amd64.deb /var/cache/apt/archives/python3.10-minimal_3.10.12-1~22.04.4_amd64.deb /var/cache/apt/archives/libpython3.10-minimal_3.10.12-1~22.04.4_amd64.deb
/usr/bin/dpkg --status-fd 10 --configure --pending
/usr/bin/dpkg --status-fd 10 --no-triggers --unpack --auto-deconfigure --recursive /tmp/apt-dpkg-install-dh2t4Z
/usr/bin/dpkg --status-fd 10 --configure --pending
/usr/bin/dpkg --status-fd 10 --no-triggers --unpack --auto-deconfigure /var/cache/apt/archives/libgtk2.0-common_2.24.33-2ubuntu2.1_all.deb
/usr/bin/dpkg --status-fd 10 --configure --pending
/usr/bin/dpkg --status-fd 10 --no-triggers --unpack --auto-deconfigure /var/cache/apt/archives/libgtk-3-common_3.24.33-1ubuntu2.2_all.deb /var/cache/apt/archives/libgtk-3-0_3.24.33-1ubuntu2.2_amd64.deb /var/cache/apt/archives/libgtk-3-bin_3.24.33-1ubuntu2.2_amd64.deb
/usr/bin/dpkg --status-fd 10 --configure --pending

最後に

unattended-upgrade に追加のリポジトリを追加する方法を紹介しました
デフォルトでは標準リポジトリだけなので注意が必要です
unattend-upgrade は apt upgrade コマンドを実行しているわけではなく個別のパッケージ更新の仕組みになっているので apt upgrade を直接実行してくれているわけではないので注意しましょう

参考サイト

2024年7月22日月曜日

Ubuntu で apt を自動更新する unattended-upgrade を有効にする方法

Ubuntu で apt を自動更新する unattended-upgrade を有効にする方法

概要

設定ファイルを変更するだけです

環境

  • Ubuntu 22.04

20auto-upgrades を編集

  • sudo vim /etc/apt/apt.conf.d/20auto-upgrades
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";

0が無効、1が有効です

いつ実行されるか確認する

  • systemctl list-timers apt-daily*
NEXT                        LEFT          LAST                        PASSED       UNIT                    ACTIVATES
Fri 2024-07-19 15:08:58 JST 5h 22min left Thu 2024-07-18 23:07:07 JST 10h ago      apt-daily.timer         apt-daily.service
Sat 2024-07-20 06:48:36 JST 21h left      Fri 2024-07-19 06:18:13 JST 3h 27min ago apt-daily-upgrade.timer apt-daily-upgrade.service

2 timers listed.
Pass --all to see loaded but inactive timers, too.

これの apt-daily-upgrade.service 側が apt upgrade の定期実行になります

時刻を変更する

  • sudo vim /lib/systemd/system/apt-daily-upgrade.timer
[Unit]
Description=Daily apt upgrade and clean activities
After=apt-daily.timer

[Timer]
OnCalendar=*-*-* 6:00
RandomizedDelaySec=60m
Persistent=true

[Install]
WantedBy=timers.target

ここの OnCalendar を変更すれば OK です
デフォルトであれば 6 時台で RandomizedDelaySec に指定してある時間ランダムで待って実行するので 6 - 7 時の間で実行される設定になっています

最後に

デフォルトで有効ですが無効にした場合は再度設定ファイルを変更して有効にしてあげましょう

参考サイト

2024年7月19日金曜日

Github Actions から Slack に通知する方法

Github Actions から Slack に通知する方法

概要

Github Actions から Slack に通知する方法を紹介します
slackapi/slack-github-action@v1.26.0 を使います

環境

  • Github Actions (2024/07/17時点)

SLACK_WEBHOOK_URL の取得

レガシーアプリではなく最新のアプリを作成します
こちらを参考に取得しましょう

Github への SLACK_WEBHOOK_URL の登録

プロジェクト -> Settings -> Secrets and variables -> New repository secret

Yaml の作成

  • vim .github/workflows/slack_send.yml
name: ci

on:
  push:
    branches:
      - "master"

jobs:
  docker:
    runs-on: ubuntu-latest
    steps:
      - name: Slack notification
        id: slack
        uses: slackapi/slack-github-action@v1.26.0
        with:
          payload: |
            {
              "text": "Test slack notification"
            }
        env:
          SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}

payload に設定可能なキーはこちらを参照してください https://api.slack.com/surfaces/messages

最後に

一番大変なのは Webhook URL を取得する部分かもしれません

参考サイト

2024年7月17日水曜日

Slack のアプリを管理している URL

Slack のアプリを管理している URL

概要

レガシーアプリではなく最新のアプリの管理 URL になります
Bot トークンや Webhook URL も新しい仕組みで作成したアプリから取得できます

環境

  • Slack API (2024/07/17 時点)

新しいURL

古いURL

最後に

古いURLからだと自分で作成したアプリの Bot トークンや Webhook URL は参照できません

2024年7月16日火曜日

dockerhub に指定のイメージが存在するか事前に確認する方法

dockerhub に指定のイメージが存在するか事前に確認する方法

概要

pull する前に docker レジストリにイメージがあるかどうかチェックできます

環境

  • Ubuntu 22.04
  • docker 27.0.3

方法

docker manifest inspect kakakikikeke/memo:latest > /dev/null ; echo $?

存在する場合は 0 で存在しない場合は 1 などの 0 以外のステータスが返ってきます

最後に

dockerhub でなくプライベートレジストリなら先にそちらに docker login してから同じコマンドを実行すれば OK です

参考サイト

2024年7月12日金曜日

Makefile で .env に設定してある環境変数を参照する方法

Makefile で .env に設定してある環境変数を参照する方法

概要

include で参照しても OK ですがそれ以外でも参照可能です

環境

  • make 4.3

方法

source を使います
直接 source を使うと no such file になるのでドットで参照します

. /home/user01/path/to/.env && echo ${HOGE}

ちなみにこの次の行以降では環境変数を参照できないので再度環境変数を参照したい場合はまた . /home/user01/path/to/.env && command という感じで必ず source してあげましょう

2024年7月11日木曜日

brew で outdated になった formula は upgrade させない方法

brew で outdated になった formula は upgrade させない方法

概要

macOS のバージョンによってはもうアップグレードできない formula が存在します
しかし brew upgrade を実行すると関係なくアップグレードしようとし失敗します
そんな場合に対象の formula は更新対象に含めない方法を紹介します

環境

  • macOS 11.7.10
  • brew 4.3.3

outdated なパッケージを確認する

  • brew outdated
cmake (3.27.7, 3.29.0, 3.29.6) < 3.30.0
imagemagick (7.1.1-20) < 7.1.1-34
libass (0.17.2) < 0.17.3
libheif (1.16.2) < 1.17.6_1
mysql (8.1.0) < 8.3.0_1
node (21.7.1) < 22.4.0
protobuf (24.4) < 27.1
scroll-reverser (1.8.2) != 1.9

この一覧にあるパッケージを upgrade しようとすると outdated にも関わらずビルドを試みます
そして結局エラーになります

cask の場合は以下のようになったりします

  • brew upgrade scroll-reverser
Error: scroll-reverser: This software does not run on macOS versions older than Ventura

というエラーになります

バージョンを固定する

  • brew pin cmake

とすると brew upgrade を実行しても cmake は最新版にアップグレードえず今のバージョンをそのまま使います

ためしに pin 後に mysql を upgrade しようとすると依存してる cmake のビルドはせずにすぐに mysql のビルドが始まります (結局エラーになります

  • brew upgrade mysql
==> Downloading https://formulae.brew.sh/api/formula.jws.json

==> Downloading https://formulae.brew.sh/api/cask.jws.json

Warning: You are using macOS 11.
We (and Apple) do not provide support for this old version.
It is expected behaviour that some formulae will fail to build in this old version.
It is expected behaviour that Homebrew will be buggy and slow.
Do not create any issues about this on Homebrew's GitHub repositories.
Do not create any issues even if you think this message is unrelated.
Any opened issues will be immediately closed without response.
Do not ask for help from Homebrew or its maintainers on social media.
You may ask for help in Homebrew's discussions but are unlikely to receive a response.
Try to figure out the problem yourself and submit a fix as a pull request.
We will review it but may or may not accept it.

==> Upgrading 1 outdated package:
mysql 8.1.0 -> 8.3.0_1
Error: You must `brew unpin cmake` as installing mysql requires the latest version of pinned dependencies

mysql 8.3 が cmake の 3.30 に依存しているためエラーになっています

pin している formula を確認する

  • brew list --pinned

そもそも formula が現在の macOS のバージョンで動作するか確認する方法

現状は Web サイトで調べるしかないようです

https://formulae.brew.sh/formula/cmake#default

例えば上記の cmake 3.30 は monterey (12.7.5) までしか対応してないのが確認できます
こんな感じで Homebrew のサイトで検索するのが一番です
outdated の一覧にありかつ Web サイト上でサポートされてない macOS のバージョンであれば pin に追加しましょう

最後に

brew upgrade で更新しない formula を指定する方法を紹介しました
macOS 11 はすでに Homebrew からのサポートがないのでこういった対象が必要になってきます

参考サイト

2024年7月10日水曜日

apt snapshot を使ってみる

apt snapshot を使ってみる

概要

apt の snapshot は特定の日付における最新版のパッケージをインストールすることができる昨日です

環境

  • Ubuntu 22.04
  • apt 2.4.12

スナップショットの有効化

  • sudo vim /etc/apt/sources.list

deb のあとに [snapshot=yes] を追記します
すべての定義に追加して OK です

deb [snapshot=yes] http://jp.archive.ubuntu.com/ubuntu jammy main restricted

スナップショットリポジトリの準備

  • sudo apt update --snapshot 20230703T012345Z

こんな感じで実行すると snapshot.ubuntu.com のリポジトリを更新しているのが確認できると思います
snapshot ID は YYYYMMDDThhmmddZ 形式でしていします

参照先のスナップショットがない場合

日付が apt update 時にない場合には 404 NOT FOUND エラーが発生します

スナップショットリポジトリを使ってインストールする

  • sudo apt -y install hello --snapshot 20230703T012345Z

この時刻での最新のパッケージがインストールされます

注意事項

esm パッケージリポジトリでは [snapshot=yes] が効かないのでもし esm 側に最新のパッケージがある場合は esm を優先してインストールしてしまいます

なので esm を無効化してから apt install しましょう

  • sudo mv /etc/apt/sources.list.d/ubuntu-esm-apps.list{,.back}
  • sudo mv /etc/apt/sources.list.d/ubuntu-esm-infra.list{,.back}
  • sudo apt update --snapshot 20230703T012345Z
  • sudo apt remove hello
  • sudo apt -y install hello --snapshot 20230703T012345Z

esm 以外にも snapshot が使えないリポジトリがある場合そちらに最新のパッケージがあればそれを優先してしまうようなので注意しましょう

最後に

複数の環境がある場合に常に apt update & apt upgrade だと実行する時期によってバージョンが異なることがあります
そんな場合に snapshot を使って日付を指定することでその日付における最新をインストールすることができるので環境ごとにバージョンの差異が発生することがなくなります

参考サイト

2024年7月9日火曜日

Grafana を nginx 配下で動作させる方法

Grafana を nginx 配下で動作させる方法

概要

docker で動作している Grafana を nginx 配下で動作させる方法を紹介します

環境

  • Ubuntu 22.04
  • Grafana 10.26.0
  • nginx 1.27.0

Grafana の起動オプション変更

docker compose の場合は GF_SERVER_ROOT_URLGF_SERVER_SERVE_FROM_SUB_PATH を設定します
GF_SERVER_SERVE_FROM_SUB_PATH を true に設定しなければいけないので忘れずに設定しましょう

services:
  grafana:
    image: grafana/grafana-oss:9.5.20
    ports:
     - '3000:3000'
    environment:
      GF_SERVER_ROOT_URL: http://localhost:3000/grafana
      GF_SERVER_SERVE_FROM_SUB_PATH: true
    volumes:
      - type: volume
        source: grafana_data
        target: /var/lib/grafana
    restart: always
volumes:
  grafana_data:

nginx.conf

/prometheus で受けれるようにします

upstream grafana {
    server 192.168.1.100:3000;
}

server {
    listen 8080;
    server_name host01;

    location = /grafana {
        return 302 /grafana/;
    }

    location /grafana/ {
        proxy_set_header Host $host;
        proxy_pass http://grafana;
    }
}

動作確認

:8080/grafana にアクセスして問題なく動作することを確認しましょう

最後に

Grafana は環境変数を使うのが簡単です

参考サイト

2024年7月8日月曜日

Alertmanager を nginx 配下で動作させる方法

Alertmanager を nginx 配下で動作させる方法

概要

前回 Prometheus を nginx 配下で動作させました
今回は Alertmanager を動作させます

環境

  • Ubuntu 22.04
  • Alertmanager 0.26.0
  • nginx 1.27.0

Alertmanager の起動オプション変更

--web.external-url=http://localhost:9093/alertmanager/ を追加します
localhost の部分は listen したいホスト名や IP に変更してください

nginx.conf

/prometheus で受けれるようにします

upstream alertmanager {
    server 192.168.1.100:9093;
}

server {
    listen 8080;
    server_name host01;

    location = /alertmanager {
        return 302 /alertmanager/;
    }

    location /alertmanager/ {
        proxy_set_header Host $host;
        proxy_pass http://alertmanager;
    }
}

prometheus.yml の変更

Prometheus から Alertmanager を使っている場合は alerting 部分を変更します
具体的に path_prefix を追加し targets を nginx のアドレスに変更します

alerting:
  alertmanagers:
    - scheme: http
      path_prefix: "/alertmanager/"
      static_configs:
        - targets:
            - "192.168.1.200:8080"

動作確認

:8080/alertmanager にアクセスして問題なく動作することを確認しましょう
またアラートも届くことを確認しましょう

また Alertmanager のエンドポイントにアクセスしているツールが他にある場合はそちらのエンドポイントも修正する必要があります

最後に

Prometheus も Alertmanager も同じ起動オプションを変更することで nginx 配下で動作させることができます

2024年7月5日金曜日

Prometheus を nginx 配下で動作させる方法

Prometheus を nginx 配下で動作させる方法

概要

ポイントは --web.router-prefix は何も設定しない点です

環境

  • Ubuntu 22.04
  • Promethues 2.52.0
  • nginx 1.27.0

Prometheus の起動オプション変更

--web.external-url=http://localhost:9090/prometheus/ を追加します
localhost の部分は listen したいホスト名や IP に変更してください

nginx.conf

/prometheus で受けれるようにします

upstream prometheus {
    server 192.168.1.100:9090;
}

server {
    listen 8080;
    server_name host01;

    location = /prometheus {
        return 302 /prometheus/;
    }

    location /prometheus/ {
        proxy_set_header Host $host;
        proxy_pass http://prometheus;
    }
}

動作確認

:8080/prometheus にアクセスして問題なく動作することを確認しましょう

また Prometheus のエンドポイントにアクセスしているツール (grafana や sdk など) がある場合はそちらのエンドポイントも修正する必要があります

最後に

次回は Alertmanager を動作させます

参考サイト

2024年7月4日木曜日

ansible で git credentials helper を設定する方法

ansible で git credentials helper を設定する方法

概要

git_config というビルトインモジュールがあるのでそれを使った方法を紹介します
今回は ansible を実行したユーザではなく指定のユーザにしてい git config credentials helper を設定する方法を紹介します

環境

  • Ubuntu 22.04
  • ansible 2.16.7

playbook サンプル

- name: Set config credential.helper
  git_config:
    name: credential.helper
    scope: file
    value: store
    file: /home/user01/.gitconfig

- name: Set permissions for /home/user01/.gitconfig
  file:
    path: /home/user01/.gitconfig
    group: user01
    owner: group01
    mode: '644'

ポイント

ポイントは git_config モジュールの scope に file を指定する点です
また file を使って .gitconfig を保存する場所も指定します
こうすることで ansible を実行しているユーザに対して credentials helper を設定するのではなく指定のユーザに対して設定することができます
また .gitconfig を作成したあとでユーザや権限を正しく設定してあげます
そうしないと ansible を実行したユーザの権限で .gitconfig が作成されてしまうので指定のユーザが扱えなくなってしまうためです

最後に

git_config を使って credentials helper を設定する方法を紹介しました
特定のユーザに対して設定したい場合は file を使います

直接 command などを使う方法もありますがこちらを使うほうが良いかなと思います

参考サイト

2024年7月3日水曜日

git で現在のブランチの HEAD のショートリビジョンを取得する方法

git で現在のブランチの HEAD のショートリビジョンを取得する方法
git rev-parse --short HEAD

8桁ほしい場合は

git rev-parse --short=8 HEAD

2024年7月2日火曜日

Google ドライブにファイルをアップロードできないときの対処方法

Google ドライブにファイルをアップロードできないときの対処方法

概要

よくネットワークにつながっていないやらドライブの容量がいっぱいやらありますが基本的にそんなことはないです

環境

  • Google Drive (2024/06/28)

アップロードしたファイルを Google ドキュメントエディタ形式に変換するをオフにする

設定からできます
長いテキストエディタなどは変換できずにアップロードできないようです

2024年7月1日月曜日

Gitlab CI を使って特定のサーバに ssh ログインしてコマンドを実行する方法

Gitlab CI を使って特定のサーバに ssh ログインしてコマンドを実行する方法

概要

Gitlab CI を使って対象のサーバに ssh してデプロイスクリプトなどを実行することができるようになります

環境

  • Ubuntu 22.04
  • Gitlab 16.10.6

ssh サーバの設定

基本的にはパスワードなどは聞かれないように事前に設定しておく必要があります

git credentials

  • git config --global credential.helper store

これで認証情報を保存しておいて毎回パスワードを聞かれないようにしましょう
認証情報は CI から投入しても OK です

docker

  • sudo gpasswd -a user01 docker

デフォルトだとユーザは docker グループに入っていないので sudo 権限が必要です
sudo のパスワードなしを設定しても OK です

ノンパスSSH鍵の作成と登録

Runner から対象のサーバに ssh ログインする際にパスワードを入力することができません
なのでパスワードが設定されていない秘密鍵と公開鍵を使ってログインできるようにします

なお以下で紹介しますが SSH するユーザターゲットホストは 192.168.100.10 とします

  • ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa

ここで作成した id_rsa (秘密鍵) を Gitlab の CI の変数として登録します
登録する際の注意としては Protected な変数として登録しないようにしましょう

id_rsa.pub は SSH する対象のサーバ (192.168.100.10) の ~/.ssh/authorized_keys に記載します

CI の設定

Runner の executor は docker を想定しています

以下の例ではリポジトリで管理してる shell/deploy.sh をターゲットホストの /tmp/deploy.sh に配置して実行しています

またターゲットホスト上のシェルに変数を与えたい場合は一度 export してから渡すと ssh 先のマシンにも伝わります

stages:
  - deploy

variables:
  ENV: $ENV
  SSH_PRIVATE_KEY: $SSH_PRIVATE_KEY

deploy:
  stage: deploy
  image: python:alpine3.19
  before_script:
    - 'command -v ssh-agent >/dev/null || ( apt-get update -y && apt-get install openssh-client -y )'
    - eval $(ssh-agent -s)
    - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
    - mkdir -p ~/.ssh
    - chmod 700 ~/.ssh
    - echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
  script:
    - scp -P 22 "${CI_PROJECT_DIR}/shell/deploy.sh" user01@192.168.100.10:/tmp/deploy.sh
    - ssh -p 22 -tt user01@192.168.100.10 -C "chmod +x /tmp/deploy.sh"
    - export ENV=${ENV}
    - ssh -p 22 -tt user01@192.168.100.10 -C "ENV=${ENV} /tmp/deploy.sh"
  when: manual

最後に

Gitlab CI で ssh する方法を紹介しました
パスワードなどの入力が必要な場合は入力させないような対応が必要です

参考サイト