投稿

8月, 2025の投稿を表示しています

CentOS Stream 9 + geoipupdate + Python 3.11をインストール

FreeBSDサーバーでやったことを CentOS Streamサーバーの環境でも行っているときの覚書。 Gemini 2.5 Proと対話。 環境: CentOS Stream 9, Python 3.9.23, Python 3.11.13 1. geoipupdateをインストール CentOS Streamの環境では公式リポジトリにgeoipupdateがない。 # dnf search geoip RPMをGitHubからダウンロードしてインストールするのが公式。 参考:  maxmind/geoipupdate: GeoIP update client code GitHubのReleasesに掲載してあるURLを確認してダウンロード。 -OはURLのファイル名でダウンロード。-Lはリダイレクトを許可。 # curl -OL https://github.com/maxmind/geoipupdate/releases/download/v7.1.1/geoipupdate_7.1.1_linux_amd64.rpm dnfが依存関係を自動で解決してインストールしてくれる。 # dnf install ./geoipupdate_7.1.1_linux_amd64.rpm Account IDとLicense Keyを設定ファイルに記述。 国別データベースの場合は GeoLite2-Countryを指定。 # less /etc/GeoIP.conf AccountID 1234567 LicenseKey 08MzPb....pe_mmk EditionIDs GeoLite2-Country 動作確認。 # geoipupdate -v geoipupdate version 7.1.1 (6664d8b9, 2025-07-09T20:46:45Z, linux-amd64) Using config file /etc/GeoIP.conf Using database directory /usr/share/GeoIP Initializing file lock at /usr/share/GeoIP/.geoipupdate.lock Acquired lock file at /...

FreeBSD14 + Nginx + GeoIP2の設定とIPアドレスを自動更新

NginxをHTTP_GEOIP2ビルドオプションを有効にしてビルド後、設定しているときの覚書。 Gemini 2.5 Proと対話。 環境: FreeBSD 14.3-RELEASE-p2 1. IPアドレスを自動更新 MaxMind公式が配布しているgeoipupdateをインストール。 参考:  Updating GeoIP and GeoLite Databases | MaxMind Developer Portal # pkg search geoip # pkg install geoipupdate MaxMindにログインして 左メニューのManage license keysを選択。 参考:  MaxMind GeoIP® Databases | MaxMind Generate new license keyをクリック。 License key description: geoipupdate Account IDとLicense Keyを設定ファイルに記述。 国別データベースの場合は GeoLite2-Countryを指定。 # less /usr/local/etc/GeoIP.conf AccountID 1234567 LicenseKey 08MzPb....pe_mmk EditionIDs GeoLite2-Country 動作確認。 # geoipupdate -v geoipupdate version v7.1.0 (freebsd-arm64) Using config file /usr/local/etc/GeoIP.conf Using database directory /usr/local/share/GeoIP Initializing file lock at /usr/local/share/GeoIP/.geoipupdate.lock Acquired lock file at /usr/local/share/GeoIP/.geoipupdate.lock Database does not exist, returning zeroed hash Updates available for GeoLite2-Countr...

OpenTelemetry(OTel)とはアプリケーションの動作を観測・計測するための標準規格

OpenTelemetryを調査しているときの覚書。 Gemini 2.5 Proと対話。 OpenTelemetryとは? OpenTelemetry(OTel)は、単なるツールではなく、クラウドネイティブ時代のオブザーバビリティ(Observability: 可観測性)を実現するための標準規格。 OpenTelemetryは、CPU使用率やメモリ使用量といったサーバー自体の情報(ホストメトリクス)も計測できる。 しかし、その真価が発揮されるのは、アプリケーション(プログラムコード)がどのように動いているかを計測する時。 「どの関数の処理に時間がかかっているか?」 「データベースへのクエリは何ミリ秒かかったか?」 「外部APIの呼び出しでエラーが起きたのはなぜか?」 といった、コードレベルの動作を可視化することに主眼を置いている。 オブザーバビリティ(Observability)とは? システムの出力を調べることによって、システムの内部状態を理解する能力のこと。 参考: OpenTelemetryとは | OpenTelemetry システムをオブザーバビリティがある状態にするには、計装されていなければなりません。 つまり、コードがトレース、メトリクス、またはログを出力しなければなりません。 メトリクス (Metrics): 一定間隔で集計された数値。 システムの「健康状態」を定量的に把握。 例: CPU使用率、メモリ使用量、リクエスト数/秒 (RPS)、エラー率。 ログ (Logs): タイムスタンプ付きの離散的なイベント記録。 特定の瞬間に何が起こったかを詳細に記録。 例: 「User 123 logged in」、「DB connection failed: timeout」 トレース (Traces): マイクロサービスを横断するリクエストの処理の流れを可視化したもの。 例: 1つのリクエストが、どのサービスを、どの順番で、どれくらいの時間をかけて通過したかの詳細な記録。 OpenTelemetryの歴史 2016年:OpenTracing の誕生 Cloud Native Computing Foundation (CNCF) によって主導されたプロジェクト。 開発者が、どのトレーシングツールを使うかに関わらず、同じ作法でコードを書けるようにすることを目...

FreeBSDのsystatとcollectdでリソース情報を取得

生成AIにAPI経由でサーバーのパフォーマンス解析レポートを定期実行させようとしているときの覚書。 環境: FreeBSD 14.3-RELEASE-p2 1. systatとは? systatは、FreeBSDのパフォーマンス統計情報を対話的に表示するコマンドラインツール。 topコマンド: プロセス視点「どのプロセスがCPUやメモリを消費しているか」 systatコマンド:  システム視点「システム全体のどのコンポーネント(I/O, メモリ, ネットワーク等)がボトルネックになっているか」 基本的な使い方 5秒間隔更新で起動。 # systat 5 最初からvmstatビューを1秒間隔で表示。 # systat -vmstat 1 起動中に「:help」を入力するとビュー名が表示される。 「:(ビュー名)」で各ビューに切り替わる。 Ctrl-Cで終了。 ビューの一覧 vmstat: システム全体のCPU、メモリ、ページング、プロセス状態をまとめたビュー。 pigs: CPUを最も消費しているプロセスを降順で表示する、いわゆる「CPUの豚(hogs)」。 iostat: ディスクデバイスごとのI/O統計情報。ディスク性能のボトルネック調査に必須。 ifstat: ネットワークインターフェースごとの通信量をリアルタイムで表示。 netstat: 現在アクティブなネットワークコネクションの状態を表示。netstat -anの対話版。 ip: IPプロトコルレベルでの統計情報。パケットの送受信、破棄、フラグメンテーションなど。 tcp: TCPプロトコルレベルでの詳細な統計情報。 icmp: ICMPプロトコル(ping, traceroute)レベルでの統計情報。 swap: スワップ領域の使用状況をパーティションごとに表示。 zarc: ZFSのキャッシュ(ARC, L2ARC)の統計情報。 vmstatの見方 Mem usage: Phy: 物理メモリ全体の使用率。 Mem usage: Kmem: カーネルが使用しているメモリの割合。 SWAP PAGER: in: スワップ領域からメモリにデータが読み戻された回数(スワップイ...

FreeBSDのtopコマンドの使い方

FreeBSDのtopコマンドの使い方を調べたときの覚書。 Gemini 2.5 Proと対話。 環境: FreeBSD 14.3-RELEASE-p2 top起動。 # top FreeBSD 公式サイトのmanページ:  top(1) よく使うキー P : CPUコアごとの統計表示切り替え(Linuxは1) i : アイドルプロセスの表示切り替え o : ソート順の変更 (メモリ順は res、CPU使用率順は wcpu、プロセスID順はpid) Linuxでは[P](CPU使用率順)と[]M(メモリ順)。 H : スレッド表示の切り替え。 T : スレッドID(TID)の列を表示。 表示の更新・終了 space - 表示を更新: 即座に最新の情報に更新 ? - ヘルプの表示 q - 終了 表示内容のフィルタリング・絞り込み / : コマンド名でフィルタ コマンド名でプロセスを絞り込めます。 例えば / を押した後に nginx と入力すると、nginx という名前のプロセスだけが表示されます。 + を入力すると全てのフィルタを解除します。 u : ユーザーでフィルタ 特定のユーザーが実行しているプロセスだけを表示します。 u を押した後に www と入力すると、www ユーザーのプロセスだけが表示されます。 ユーザー名を入力せずにEnterを押すと、全ユーザーの表示に戻ります。 p : PIDでフィルタ 特定のプロセスID(PID)を持つプロセスだけを表示します。 p を押した後にPIDを入力します。 + を入力するとフィルタを解除します。 J : Jailでフィルタ [(FreeBSD Jails機能を使用している場合) 特定のJail内で実行されているプロセスだけを表示します。 + を入力するとフィルタを解除します。 表示項目の切り替え(トグル) a : プロセス引数の表示切り替え COMMAND列に、コマンド名だけを表示するか、コマンドの引数を含めた完全なコマンドラインを表示するかを切り替えます。 C : CPU使用率の表示モード切り替え CPU使用率の表示を、重み付けされた最近のCPU使用率(WCPU、デフォ...

NginxのVTSモジュール でパフォーマンス分析(Netdataのインストールは失敗)

nginxのパフォーマンス改善のためにVTSモジュールとNetdataを設定しているときの覚書。 環境: FreeBSD 14.3-RELEASE-p2,  nginx 1.28.0, Netdata 2.5.4, netdata-v2.6.3 1. VTSモジュールとは? Nginx VTS (Virtual Host Traffic Status) モジュールは、Nginxの動作状況をリアルタイムかつ詳細に監視するためのサードパーティ製モジュール。 参考:  vozlt/nginx-module-vts: Nginx virtual host traffic status module 標準のngx_http_stub_status_moduleが提供する基本的な情報よりもはるかに多くのメトリクスを、多彩な粒度とフォーマットで提供する。 Nginx公式の商用版である「Nginx Plus」が提供するライブアクティビティモニタリング機能に匹敵する詳細な情報を、オープンソースで実現できる点が最大の特徴。 2. VTSモジュールの設定 VTSモジュールをオンにしてビルドするのは前の記事を参考に。 参考:  FreeBSDのNginxをportsでビルド → 本番環境はダウンタイムなしで切り替える httpディレクティブに統計情報を共有するためのメモリゾーンの定義。 (ファイルを分割して管理している) # cd /usr/local/etc/nginx/ # less conf.d/include/http_tuning.inc #---------------------------------------------------------------------- # 5. VTS #---------------------------------------------------------------------- vhost_traffic_status_zone; 統計情報を表示するエンドポイントの作成。 Basic認証とIP制限をしているディレクティブに記述。 # less conf.d/01_tools.conf     location /vts_status {   ...

FreeBSDのNginxをportsでビルド → 本番環境はダウンタイムなしで切り替える

Nginxのパフォーマンス改善にはportsからビルドするのがベストだと思ってやってみたときの覚書。 Gemini 2.5 Proと対話。 環境: FreeBSD 14.3-RELEASE-p2,  nginx 1.28.0 1. Portsリポジトリを取得 FreeBSD14からportsnapコマンドではなくgitコマンドを使う。 参考:  Chapter 4. Installing Applications: Packages and Ports | FreeBSD Documentation Portal まずは公式サイトにあるようにgit cloneする。 --depth 1 を付けることで、最新のコミット1つ分のみを取得。 # git clone --depth 1 https://git.FreeBSD.org/ports.git /usr/ports 移動して確認。 # cd /usr/ports/ # ls 2. Nginxをビルド pkgでインストールしたNginxのバージョンとビルドオプションを確認。 # nginx -V 2>&1 | sed 's/ --/\n--/g' nginx version: nginx/1.28.0 built with OpenSSL 3.0.16 11 Feb 2025 TLS SNI support enabled configure arguments: --prefix=/usr/local/etc/nginx --with-cc-opt='-I /usr/local/include' --conf-path=/usr/local/etc/nginx/nginx.conf --sbin-path=/usr/local/sbin/nginx --pid-path=/var/run/nginx.pid --error-log-path=/var/log/nginx/error.log --user=www --group=www --with-compat --with-pcre --modules-path=/usr/local/libexec/nginx --with-file-aio --http-client-body-temp-...

FreeBSDのportsとは?pkgとは?rpm/yum/dnf(Red Hat系Linux)との違い。

FreeBSDのportsでnginxをビルドしようとしているときの覚書。 Gemini 2.5 Proと対話。 環境: FreeBSD 14.3-RELEASE-p2 portsとは? Ports Collection (Ports)はソースコードからソフトウェアをコンパイル(ビルド)してインストールする仕組み。 FreeBSD Ports Collectionは、単なるソフトウェア管理ツールではなく、オープンソースの世界における 一つの発明と言えるほど画期的 なもの。 Portsの仕組みを基盤として、公式ビルドサーバーで事前にコンパイルしたバイナリパッケージを提供する Pkg システムが開発された。 つまりPkg で配布されている公式パッケージは Ports を使ってビルド したもの。 参考:  第4章 アプリケーションのインストール - packages と ports | FreeBSD Documentation Portal 2021年3月に旧来のSubversionリポジトリが更新を停止し、Gitが唯一の公式Ports Collectionのリポジトリとなった。 コマンドもportsnapからgitに移行。 FreeBSDのソースコード本体は2020年にSubversionからGitへ移行していた。 FreeBSD PortsのGitへの移行は、単なるツールの変更ではなく、プロジェクトの開発・メンテナンス手法を21世紀の標準に合わせるための、戦略的な決断。 これにより、開発者の貢献を促し、システムの透明性を高め、長期的なメンテナンス性を確保するという、大きなメリットがもたらされた。 MacPortsとの関係 MacPortsは、FreeBSD PortsのコンセプトをmacOS上に実現するためのプロジェクト。 macOS (当時はMac OS X) は、その心臓部にFreeBSD由来のコードを含むBSD UNIX (Darwin) をベースとしるため、FreeBSDの文化との親和性が高く、Portsの思想が持ち込まれた。 MacPortsはもともとAppleが主導したが、独立したコミュニ-ティによって運営されている。 pkgとrpm/yum/dnf(Red Hat系Linux)との違い pkgとは? pkgはportsで事前にビルドさ...

AVIF変換: FreeBSD14 + ImageMagick7-nox11 → libavif

FreeBSD14の環境でAVIF変換をしたときの覚書。 環境: FreeBSD 14.3-RELEASE-p2, ImageMagick 7.1.1 1. ImageMagick7をインストール ImageMagick7をインストールする。 GUIは使わないのでnox11をインストール。 # pkg search ImageMagick # pkg install ImageMagick7-nox11 バージョン確認。 # magick --version Version: ImageMagick 7.1.1-45 Q16-HDRI aarch64 22722 https://imagemagick.org Copyright: (C) 1999 ImageMagick Studio LLC License: https://imagemagick.org/script/license.php Features: Cipher DPC HDRI Modules Delegates (built-in): bzlib fftw fontconfig freetype heic jbig jng jp2 jpeg jxl lcms lqr ltdl lzma openexr png raw tiff webp wmf xml zip zlib zstd Compiler: clang (18.1.6) 対応フォーマットの確認。 AVIFサポートを確認。 # magick -list format # magick -list format | grep AVIF      AVIF  HEIC      rw+   AV1 Image File Format (1.19.8) libavifにavifencが含まれていことが分かったので、ImageMagick7をアンインストールする。 単機能アプリの方がメンテナンスが楽な分、ライブラリが新しくバグが少ない。 ImageMagick7をアンインストール。 # pkg remote ImageMagick7-nox11 不要な依存関係の確認(ドライラン)して削除する。 # pkg autorem...

CentOS Stream 10 + libavif-toolsでJPEG→AVIF一括変換

CentOS Stream 10の環境で、JpegからAVIFに変換したときの覚書。 環境: CentOS Stream 10 1. ImageMagickをインストールして試す → AVIF未対応 ImageMagickで対応しているか確認。 # dnf install libheif libaom ImageMagick バージョン確認 # magick --version Version: ImageMagick 7.1.1-47 Q16-HDRI aarch64 22763 https://imagemagick.org Copyright: (C) 1999 ImageMagick Studio LLC License: https://imagemagick.org/script/license.php Features: Cipher DPC HDRI Modules OpenMP(4.5) Delegates (built-in): bzlib cairo djvu fftw fontconfig freetype gslib gvc heic jbig jng jp2 jpeg jxl lcms lqr ltdl lzma openexr pangocairo png ps raqm raw rsvg tiff webp wmf x xml zip zlib zstd Compiler: gcc (14.2) AVIFサポートを確認 # magick identify -list format | grep AVIF 対応していない。 ImageMagickはアンインストール。 # dnf remove libheif libaom ImageMagick 2. libavif-toolsをインストール 前の記事で試したlibavif-toolsをインストール。 参考:  libavif-toolsをインストールしてJpegからAVIFへ一括変換。 # dnf install libavif-tools バージョン確認。 # avifenc --version Version: 1.0.4 (dav1d [dec]:1.5.1, aom [enc/dec]:v3.12.0...

FreeBSD14 + Nginx + fail2banで不正なアクセスを自動ブロック

ウェブサーバーへの攻撃が増えてきたので対策したときの覚書。 環境: FreeBSD 14.3-RELEASE-p2, nginx 1.28.0 Gemini 2.5 Proと対話しながら作業している。 1. fail2banとは? Fail2banは、サーバーのログファイルを監視し、特定のパターン(ブルートフォース攻撃、スキャン活動など)を検知すると、その攻撃元のIPアドレスを自動的にファイアウォールでブロックする、侵入防止ソフトウェア。 動作の仕組み 監視 (Monitor): Nginxのアクセスログやエラーログ、SSHの認証ログなどをリアルタイムで監視。 検知 (Detect): フィルタと呼ばれる正規表現ルールに基づき、ログの中から「存在しないページへの連続アクセス」といった不正な兆候を探します。 ブロック (Block): 不正な兆候が一定回数(例: 5分以内に3回)見つかると、アクションを実行して、OSのファイアウォール(FreeBSDの場合はpf)にそのIPアドレスを一時的にブロックするよう命令。 解除 (Unban): 設定された時間が経過すると(例: 1時間後)、自動的にブロックを解除。 fail2banとSSHGuardの違い 項目 fail2ban SSHGuard 主な用途 ログを監視し、不正アクセスをiptables/pf等でブロック SSHや各種サービスのログを監視し、攻撃元IPをブロック サービス対応範囲 汎用的(Nginx, Postfix, Dovecot, SSH など多数のfilter用意) 主にSSH向け(追加対応も可能だが限定的) 設定の柔軟性 高い(正規表現でログ解析ルールをカスタマイズ可) 比較的シンプル、細かいカスタマイズは難しい 導入・設定難易度 やや高い(filter/jail設定が必要) 低い(導入して有効化するだけで基本動作) FreeBSDでの利用実績 ports/packages で提供、Nginx対策にもよく使われる FreeBSD標準での利用実績が多く軽量 リソース消費 やや重い(Python製) 軽量(Cで実装) 特徴 多機能でNginxなど幅広いサービスを守れる シンプルで軽量、主にSSH向けに効果的 2.fail2banのインストールと設定 pkgでインストール。 # pkg s...

MariaDB Serverのチューニング設定(2025年8月版)

MariaDB Serverのチューニング設定を見直したときの覚書。 環境: FreeBSD 14.3-RELEASE-p2, MariaDB Server 10.11.13 1. MySQLTunerを実行 git cloneして実行。 # cd /home/software/ # git clone https://github.com/major/MySQLTuner-perl.git # cd MySQLTuner-perl/ # perl mysqltuner.pl 実行結果をGemini 2.5 Proに貼り付けて提案を聞く。 2. 設定変更する前にデータをバックアップ 全データをバックアップ。 # cd  # mysqldump -u root -p --all-databases --single-transaction --routines --events --default-character-set=utf8mb4 | gzip > ./hoge01_20250818.sql.gz 設定ファイルをコピーしてGemini先生が提案した新設定を記述。 # cd /usr/local/etc/mysql/conf.d/ # cp server.cnf server.cnf.bak20250818 # less /usr/local/etc/mysql/conf.d/server.cnf [server] # Basic Settings character-set-server          = utf8mb4 collation-server              = utf8mb4_general_ci user                          = mysql basedir                ...

CentOS Stream 9 + PHP 8.1 + OPcache

CentOS Stream 9の環境でPHP OPcacheをインストールしたときの覚書。 CentOSの環境ではPHP OPcacheが自動でオンになると思ったらなってなかった。 参考:  FreeBSD14 + PHP8.3 + OPcache 環境: CentOS Stream 9, nginx 1.20.1, PHP 8.1.27 1. OPcacheのインストール まずはインストールされているか確認。 # php -i | grep opcache dnfでインストール。 # dnf search opcache # dnf install php-opcache iniファイルの場所を確認。 # php --ini php infoでも確認。 # php -i | grep opcache opcache.blacklist_filename => /etc/php.d/opcache*.blacklist => /etc/php.d/opcache*.blacklist opcache.consistency_checks => 0 => 0 opcache.dups_fix => Off => Off opcache.enable => On => On opcache.enable_cli => On => On opcache.enable_file_override => Off => Off opcache.error_log => no value => no value opcache.file_cache => no value => no value opcache.file_cache_consistency_checks => On => On opcache.file_cache_only => Off => Off opcache.file_update_protection => 2 => 2 opcache.force_restart_timeout => 180 => 180 opcache.huge_code_pages => Off...

FreeBSD14 + PHP8.3 + OPcache

PHP Opcacheをインストールしたときの覚書。 環境: FreeBSD 14.3-RELEASE-p2, Nginx 1.28.0, PHP 8.3.23 1. PHP OPcacheとは? OPcacheは、PHPスクリプトを一度コンパイルした結果をメモリにキャッシュすることで、次からのリクエストを高速に処理する仕組み。 OPcacheはPHP 5.5(2023年6月リリース)からバンドル。 CentOS Stremのyumやdnfでインストールするとデフォルトで有効になる。 FreeBSDではpkgでインストールしてもデフォルトで有効にならない。 OPcacheが有効か確認するコマンド。 # php -i | grep opcache 各レイヤーごとにキャッシュ機能を導入することで相乗効果が期待できる。 Web Serverのキャッシュ: Nginx fastcgi_cache PHPのキャッシュ: OPcache OSのキャッシュ: ZFS ただしメモリを消費するので正しく設定しないと逆効果。 OPcacheとJIT JIT(Just-In-Time)コンパイラはPHP8から導入された機能で、OPcacheを高速化のための拡張機能。 JITは、アプリケーションの実行を監視し、頻繁に使われるコード(ホットコード)を特定し、ネイティブなマシンコードに変換し、専用のメモリ領域(JITバッファ)にキャッシュする。 JITはOPcacheが前提の機能。 Zend VMというインタープリタを挟まないため、特にCPU負荷の高い処理が劇的に高速化される。 WordPressだと頻繁に呼び出されるアクションとフィルターフックが高速化され、体感速度が向上する。 2.OPcacheをインストール。 まずはインストールされているか確認。 # php -i | grep opcache pkg でインストール。 # pkg install php83-opcache php --versionを打つとOPcacheがインストールされているか確認できる。 # php --version PHP 8.3.23 (cli) (built: Jul  5 2025 03:29:14) (NTS) Copyright (c) The PHP Group...