zaki work log

作業ログやら生活ログやらなんやら

2025-01-01から1年間の記事一覧

miseを使ったPerl開発環境

個人開発で標準に入ってないPerlモジュールを使うコードを書こうとしたときに、ふとmiseで環境構築できるかな?と思って試してみた。 要件としてはユーザー権限で追加のモジュールを、ユーザーグローバルでなく指定のディレクトリ(アプリのプロジェクト用デ…

[AWX/AAP] メトリクス情報をPrometheusでモニタリングする

ドキュメントの通りに設定すればPrometheusでAWX/AAPのメトリクス情報を監視できる。 とりあえずモニタリングの設定のみ。アラートはまたそのうちどこかで。。 docs.redhat.com Prometheus設定 (prometheus.yml) scrape_config配下に、この設定を追加 - job_…

[Proxmox VE] Terraformを使った設定済みVMプロビジョニング

クラウドイメージのテンプレートとcloud-initを使ったProxmoxでの設定済みVMのプロビジョニングや、それをAnsibleで自動化するというのは以前にやってたけど、それをより宣言型になるようTerraform対応ってのはやるやる詐欺のまま放置したまま… ただ最近仕事…

[Docker] PostgreSQLコンテナのボリューム未指定時の場合のデータサルベージとバックアップ・リストア

postgresコンテナのデータを永続化するにはボリューム指定するのが定石だけど、うっかりしてコンテナ再作成後にデータが消えていた場合のサルベージ方法について。 ちなみにアプリの都合でpostgres:12を使ってるけど、2024年にサポート終了してるのね。本文…

[mise] 環境変数などにコマンドの実行結果をセットする

miseの環境変数などの定義のテンプレート定義には関数があり、その中のexec(command)を使えばコマンドの実行結果を参照できる。 お題 例として、以下のようなTerraformの変数ファイルがあるとして、サーバーアドレス部分("192.168.1.89")を環境変数としても…

miseでffmpegを入れる場合はバイナリインストールでなくビルドが行われるのでgccなどが必要 (追記:最新8.0も可)

miseでffmpegをインストールする場合依存するあれやこれやが必要だったのでメモ。 エラー gcc nasm ビルドとインストール 追記:ver8.0 環境 コメント 参考 エラー 無邪気に入れようとすると、以下のようにエラーになる [zaki@fedora-dev ~]$ mise use ffmpe…

Proxmox VEの8から9へのアップグレード

今月に入ってPVEのver9がリリースされていたので、個人環境をアップグレード。 www.proxmox.com pve.proxmox.com 7から使ってると対象外だが、8を新規インストールしたノードだと事前チェックでエラーがあったりしたので、ひとまず作業内容のまとめ。 基本的…

ラズパイへのSSH接続が「set_sock_tos: set socket 3 IP_TOS 0x48」で停止したときの回避策

Raspberry PiのSSHサーバーにいつの間にか接続できなくなってたので調査。 結論から言うと、クライアント側に IPQoS=none の設定を加えればOK 現象 SSH接続しようとすると応答がなくタイムアウトする。 -vvvを付与してログを確認すると、以下の出力のタイミ…

miseを使用した外部と分離されたプロジェクト固有のAnsible環境を整える

おそらくpipxやuvを完全に理解したらもっと良い構成にできるかもしれないけど、今はこれが精一杯。 miseで直接ansibleやansible-coreをインストールできるけど、依存してるPythonパッケージが必要な場合にどうすればいいかわからなかったため、従来通りpipで…

k3sのアップグレードでTraefikのHelmChartデプロイが「This version of the Chart only supports Traefik Proxy v3」エラーになったので復旧させた(作業ログ)

教訓として、k3sのHelmChartを使って標準でインストールされるコンポーネントをHelmChartConfigで設定上書きする場合、特段の事情がない限りはイメージバージョンをカスタムしないのが吉。 k3sをv1.30から(1.31, 1.32を経て)1.33までアップグレードしたとこ…

miseとタスクランナー機能を使ったPython + venv環境の自動構築

miseはmise.tomlファイルのあるディレクトリあるいはそのサブディレクトリへ移動すると、mise.tomlファイル内の定義が使用される。 その際、Pythonのvenvを作る仕組みも用意されており、以下の手順を定義ファイルだけで実現できる。 指定ディレクトリへ移動…

[kubectl] アノテーションの編集はラベルと全く同じ要領でkubectl annotateで更新する

デプロイ済みリソースのアノテーションを編集する必要があって操作方法を調べてみたけど、ラベルの編集と全く同じだった。 ラベルの編集は5年前に一度エントリ作っていたので、アノテーションについてもとりあえずメモ。 before $ kubectl describe -n loggi…

PythonでJSONデータ変換いろいろ

PythonでJSONデータを扱ういろいろのメモ オブジェクト -> JSON文字列 / json.dumps() 人が読みやすいJSON文字列 日本語(非ASCII)を含む場合のエスケープ抑止 オブジェクト -> JSONファイル / json.dump() JSON文字列 -> オブジェクト / json.loads() JSONフ…

[Linux / systemd] OS起動時に1回だけコマンド実行する

systemdを使ってOS起動時にコマンドをワンショット実行するには、Type=oneshotを指定し、ExecStartに実行したいコマンドを指定すればだいたいOK 基本形 [Unit] Description=my one shot service sample After=network.target [Service] Type=oneshot ExecSta…

[kubectl] jsonpathでドットをキー名に含むパスにアクセスするには逆スラッシュでエスケープする

知ってれば何てことないんだけどプチはまりで時間をだいぶ溶かしてしまったので備忘録。 というか.dockerconfigjsonであれば以下の通り。 kubectl get secret ecr-credential -o jsonpath='{.data.\.dockerconfigjson}' | base64 -d ドットを含むキー名に含…

[Proxmox VE / Ansible] VM作成のためのテンプレートを作るAnsible Playbook

以前まとめた以下の「テンプレートの作成」をAnsibleで自動化する、という話。 zaki-hmkc.hatenablog.com 作業するのは年に数回なんでいつも心温まる手作業だったけど、コマンドの実行回数が6回くらいあってさすがに回を重ねるとダルくなってきたため、シェ…

[Linux] AWKで正規表現置換

コマンドの出力を正規表現使って文字列置換するならsedを使うことは多いけど、行ごとに処理するだけで「前の行の情報」などどうだったかとかの状態を維持する仕組みが(たぶん)ないので、例えば「特定の文字列パターンを正規表現で処理しつつ連番を振る」がse…

[Ansible] awx.awx.schedule_rrulesetルックアッププラグインのlist/strの型不一致エラー(警告)を回避するansible core 2.18(awx.awx 24.6.1)におけるワークアラウンド

AWX/AAP上にジョブテンプレートのスケジュールを定義するこんなplaybook - name: create schedule awx.awx.schedule: name: sample job template schedule unified_job_template: sample job template rrule: "{{ query('awx.awx.schedule_rruleset', start_…

[Docker / Kubernetes] コンテナでOpenSSHサーバーを立てる

検証用などでリモートにSSHサーバーが必要な際に、linuxserver/openssh-server のコンテナを使うと簡単に準備できる。 github.com 認証情報やrootへの昇格設定をすべて環境変数でセットできるためアクセス方法の自由度が高いのが特徴。たぶん。 ベースはAlpi…

OSSのMiro風ホワイトボードアプリourboardをローカルにDocker Composeでシュッと立ててみた

オンラインで使えるSaaSのホワイトボードアプリというとMiroなんか有名だが、ここでは似たようなホワイトボードアプリをローカルで動かす類似のアプリについて紹介。 miro.com 探してみたらourboardというMITライセンスのソフトウェアがあり、Dockerイメージ…

[NetBox / Ansible] NetBoxインベントリプラグインでホストのエンドポイントとAPIトークンを外部から変数指定する

NetBoxのダイナミックインベントリは以前さわったときに使い方を以下にざっくりまとめてた。 zaki-hmkc.hatenablog.com 今回はインベントリファイルというより接続情報の書き方についておさらい。 基本的な書き方 環境変数を使った外部からの変数指定 AWX/AA…

[AWS] EC2のストレージ(EBS)を手動で拡張する手順 (RHEL)

年に1回くらい作業中にストレージが足りなくなってその都度手順を確認してるので備忘録。 docs.aws.amazon.com 基本的にAWSのドキュメント通りの手順で何も問題なくリブートも不要でサイズ拡張できる。 before ブロックデバイスを拡張 パーティションを拡張 …

[AAP/AWX] コンテナーグループを作成するAnsibleプレイブック

以前まとめた以下の「[AWX / AAP] ジョブの実行をリモートのKubernetesクラスタで行う」内容はwebのUIで手動で設定するものだったが、本記事ではこの設定操作をplaybookで自動化する方法についてのメモ。 zaki-hmkc.hatenablog.com 大きな流れとしては以下の…

[Python] 代入と評価を同時に行う(セイウチ演算子)

「コールするたびに処理に必要な変数を返す関数があり、その戻り値がなくなるまで繰り返し処理をする」ということをしたいとき、C/Perl/Javaあたりで育った自分的には真っ先にwhileの条件式でそのまま代入したくなる。 while (val = get_hogehoge()) { /* * …

[ブラウザJavaScript] htmlで読み込んだjsから更に外部jsをscriptエレメントで動的に作成して読み込む

去年同じようなことをした際は、読み込む側でimport・読み込まれる側でexportを指定したうえで、htmlで<script src>する際はtype="module"を付与していた。 で、これをやるとDOM操作で任意のタグにonclick="..."を指定しても関数が見つからないというスコープが変化する…

[K3s] Helmを使ったKubernetesクラスターへのNetBoxデプロイ (helmリポジトリ込み)

zaki-hmkc.hatenablog.com 昨年末にHelm版の存在に気づいて試したときはリポジトリを追加する手順がなくいきなりhelm installを実行する方式だったけど、改めて公式サイトを見てみるとリポジトリのURLなど一般的なHelmチャートインストールと同じ内容になっ…

[Python] すべてのループを処理してきた者達だ。面構えが違う。(for/whileのelse節)

C/Java/Perlとかで育ってるとPythonの構文はときどきギョッとすることがあって、その一つがループのelse節だったりして調べても割とすぐ忘れてしまうので、備忘録としてインパクトあるタイトルを付けたのでこれでもう大丈夫。たぶん。 TL;DR 使いどころ リス…

[Ansible] 別ユーザー(非root)権限でのタスクの実行 (become)

Ansibleでroot権限でタスクを実行したい場合はbecomeキーワードを使えばいいが、本質的にはこの仕組みは任意のユーザー権限でタスクを実行するもの。 root権限で処理されるのは、いくつかの関連パラメタを省略するとデフォルトでroot権限で動くようになって…

[Ansible] リモートでの実行時に必要なpipパッケージインストールを含むプレイブック実装 (とPEP668の回避策)

Ansibleでタスクを実行するリモートホストで追加のPythonパッケージが必要な場合に、プレイの中でまずpipでパッケージを入れるタスクを実行した上で依存パッケージが必要なタスク実行を一気通貫で処理する、というもの。 ありがちな例としては、ローカルホス…

[PEP 668 回避 / Python] Ubuntu 24.04でpipを仮想環境外でシステムワイドに使う

他のディストリビューションだとpython3-pipパッケージをインストールすればvenvなどの仮想環境無しでもpipを使ってPythonパッケージやコマンドをインストールできるが、Ubuntu 24.04はpython3-pipパッケージがなく (4/27 訂正: apt-get updateしたらpython3…