手順
ちょっと長くなるので、先に結論だけ書いておく。
❯ brew update ❯ brew tap --force homebrew/core ❯ EDITOR=vi brew edit webalizer # disable! date: "2023-06-19", because: :unmaintained 行ごと削除 ❯ HOMEBREW_NO_INSTALL_FROM_API=1 brew install webalizer
homebrew で webalizer をインストールする
所謂ログ可視化の基盤を構築していない (要件外) 環境で、ログ解析をしてほしい、という話が出てきた。
「君の言うこともわかるけど!」けどいまカガリは泣いているんですね、この記事を書いている時点でガンダム SEED FREEDOM は来週公開です。
エンドの言う事には逆らえないので、ジャーマネから提供されてきたログを正規表現で httpd/nginx なりのアクセスログ形式に整形して、ここは大正義 webalizer に食わせましょう!
ちなみにこの手の製品は、 Weblog Expert が最強だと思っているんだけど、 AppleSillicon 環境に移行して WindowsVM が使えなくなったので強制的に卒業したんですよね。
brew info
パッケージは存在するようです、やったぜ。
❯ brew info webalizer ==> webalizer: stable 2.23-08 (bottled) Web server log file analysis https://web.archive.org/web/20200622121953/www.webalizer.org/ Disabled because it is not maintained upstream! Not installed From: https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/w/webalizer.rb License: GPL-2.0-or-later ==> Dependencies Required: berkeley-db@5 ✘, gd ✔, libpng ✔ ==> Analytics install: 1 (30 days), 1 (90 days), 17 (365 days) install-on-request: 1 (30 days), 1 (90 days), 17 (365 days) build-error: 0 (30 days)
brew install
ファッ!?
❯ brew install webalizer Error: webalizer has been disabled because it is not maintained upstream!
とりあえずエラーメッセージでググって見た所、以下のように類似の症例を見つけた。 Formula から無効化を指定している行を取り除けばいいらしい。
Formula の編集については以下とのことだった。 んだけど、読んでもよくわからねえな……?
とりあえずやってみる
とりあえず brew edit
して disable 指定している行を取り除けばいいらしい、のでやってみよう。
❯ brew edit webalizer Warning: edit is a developer command, so Homebrew's developer mode has been automatically turned on. To turn developer mode off, run: brew developer off Usage: brew edit [options] [formula|cask|tap ...] Open a formula, cask or tap in the editor set by EDITOR or HOMEBREW_EDITOR, or open the Homebrew repository for editing if no argument is provided. --formula, --formulae Treat all named arguments as formulae. --cask, --casks Treat all named arguments as casks. --print-path Print the file path to be edited, without opening an editor. -d, --debug Display any debugging information. -q, --quiet Make some output more quiet. -v, --verbose Make some output more verbose. -h, --help Show this message. Error: Invalid usage: webalizer doesn't exist on disk. Run brew create --set-name webalizer $URL to create a new formula!
おファッ!?
全然知らねえ、という風情だったのだけど、どうも edit は developer 向けコマンドになったよとのことなので、 brew edit
を実行すると自動で developer mode が on となるとのことだった。
まあそれはどうでもいいんだけど、結局実行すると Error: Invalid usage: webalizer doesn't exist on disk. とのことで、 webalizer の formula が見つからないと言われる。 ナンデ?
戻したければ
以下を叩けばいいらしいけど、特に実行しなくても大丈夫。
❯ brew developer off
brew create
とりあえず create をしろ、と指示されたしやってみましょう! formula の定義あるし homebrew-core の URL を指定したらなんとかならんか?
❯ EDITOR=vi brew create --set-name webalizer https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/w/webalizer.rb Error: No available tap homebrew/core. Run brew tap --force homebrew/core to tap homebrew/core!
あれ、 core を tap してない? もしや。
brew tap
tap したら色々落ちてきましたね。
❯ brew tap --force homebrew/core ==> Tapping homebrew/core Cloning into '/opt/homebrew/Library/Taps/homebrew/homebrew-core'... remote: Enumerating objects: 1831696, done. remote: Counting objects: 100% (81800/81800), done. remote: Compressing objects: 100% (360/360), done. remote: Total 1831696 (delta 81523), reused 81621 (delta 81440), pack-reused 1749896 Receiving objects: 100% (1831696/1831696), 470.97 MiB | 26.09 MiB/s, done. Resolving deltas: 100% (1306135/1306135), done. Tapped 3 commands and 7004 formulae (7,378 files, 545.5MB).
brew edit
で、あれもしかして、という感じで edit。
❯ brew edit webalizer
まーじ。
ということで、以下の disable 行を削除します。
削除後はこんな感じにする
bottle do sha256 arm64_ventura: "f26eca3adbd5012374dcf7fba0940ba0fad5522292a5add43ce5e8ae9cfd1bb1" sha256 arm64_monterey: "0eec79580ef41a980a2c3fd9161bee665d87eee2d0bed14a89eee1e285b91313" sha256 arm64_big_sur: "e6cc3224691d03aa7a7c2c90b53372ba3bcd4a50d15ce849a4403457690bdbc7" sha256 ventura: "91e8871f5afbd71654822b90b3202062a74604c89653a00b76e769ce3e9b20c8" sha256 monterey: "d74f9239455491a88840a46ca4a58395186467530de79e41bfde176d8e9171ec" sha256 big_sur: "e58bbbdad2e72611dd20dd334178066182298531041f0d48c5d31f9ff8583812" sha256 catalina: "19cff82d601ab1b2ae54f16706dd0e81f1c85c4facc752afe8afa9a9a20b86ae" sha256 x86_64_linux: "575d679a701bc2255e511318c0bec1c7099ca836d9b89b31f49a2c90e886b2d9" end depends_on "berkeley-db@5" depends_on "gd" depends_on "libpng"
brew install
保存してエディタを抜けると HOMEBREW_NO_INSTALL_FROM_API
がセットされていない、と警告が出る。
❯ EDITOR=vi brew edit webalizer Warning: `brew install` ignores locally edited casks and formulae if HOMEBREW_NO_INSTALL_FROM_API is not set. Editing /opt/homebrew/Library/Taps/homebrew/homebrew-core/Formula/w/webalizer.rb
システムワイドで環境変数を追加せずとも、 brew isntall 時にこれを付与してやればよいので、以下のようにする。
❯ HOMEBREW_NO_INSTALL_FROM_API=1 brew install webalizer ==> Downloading https://ghcr.io/v2/homebrew/core/webalizer/manifests/2.23-08_3 ############################################################################################################################################################## 100.0% ==> Fetching dependencies for webalizer: berkeley-db@5 ==> Downloading https://ghcr.io/v2/homebrew/core/berkeley-db/5/manifests/5.3.28_1 ############################################################################################################################################################## 100.0% ==> Fetching berkeley-db@5 ==> Downloading https://ghcr.io/v2/homebrew/core/berkeley-db/5/blobs/sha256:65a70e28dcf089e0ec6d247c32df257c8bc2532ece6f4c447200a48e7ad17a8d ############################################################################################################################################################## 100.0% ==> Fetching webalizer ==> Downloading https://ghcr.io/v2/homebrew/core/webalizer/blobs/sha256:f26eca3adbd5012374dcf7fba0940ba0fad5522292a5add43ce5e8ae9cfd1bb1 ############################################################################################################################################################## 100.0% ==> Installing dependencies for webalizer: berkeley-db@5 ==> Installing webalizer dependency: berkeley-db@5 ==> Downloading https://ghcr.io/v2/homebrew/core/berkeley-db/5/manifests/5.3.28_1 Already downloaded: /Users/donbulinux/Library/Caches/Homebrew/downloads/17e4e0def00184b561c8a490b5c0813a7c4f5e1365eb2e927570786eb4e05e09--berkeley-db@5-5.3.28_1.bottle_manifest.json ==> Pouring berkeley-db@5--5.3.28_1.arm64_ventura.bottle.tar.gz 🍺 /opt/homebrew/Cellar/berkeley-db@5/5.3.28_1: 5,271 files, 86.3MB ==> Installing webalizer ==> Pouring webalizer--2.23-08_3.arm64_ventura.bottle.tar.gz 🍺 /opt/homebrew/Cellar/webalizer/2.23-08_3: 13 files, 512.9KB ==> Running `brew cleanup webalizer`... Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP. Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
はいった。 あとは以下のように usage に従って整えて実行しましょう。
❯ webalizer -n example.com -o ~/Workspace/tmp/nginx_log-events-viewer-result_20240119/ /Users/donbulinux/Downloads/nginx_log-events-viewer-result_20240119.csv
ちなみに webalizer はホスト名を uname -a
とかで実行した環境から取ってくるはずなので、ログ生成元と出力先が異なる場合は、 -n
でホスト名を指定しておかないとなんか、なんか……!となります。
お気をつけください。
備考 (正直よくわからん
You don’t have to submit modifications back to homebrew/core, just edit the formula to what you personally need and brew install
. As a bonus, brew update will merge your changes with upstream so you can still keep the formula up-to-date with your personal modifications! 変更を homebrew/core に送信する必要はありません。式を個人的に必要なものに編集して、brew install を実行するだけです。おまけに、brew update は変更をアップストリームにマージするので、個人的な変更を加えても式を最新の状態に保つことができます。 Note that if you are editing a core formula or cask you must set HOMEBREW_NO_INSTALL_FROM_API=1 before using brew install or brew update otherwise they will ignore your local changes and default to the API. コアフォーミュラまたはカスクを編集している場合は、brew install または brew update を使用する前に HOMEBREW_NO_INSTALL_FROM_API=1 に設定する必要があることに注意してください。そうしないと、ローカルの変更が無視され、デフォルトの API が使用されます。
To undo all changes you have made to any of Homebrew’s repositories, run brew update-reset. It will revert to the upstream state on all Homebrew’s repositories. Homebrew のリポジトリに加えたすべての変更を元に戻すには、brew update-reset を実行します。すべての Homebrew リポジトリで上流の状態に戻ります。
上記で書いてあるとおりなんだけど、 you must set HOMEBREW_NO_INSTALL_FROM_API=1 before using brew install or brew update とのことで、 edit した formula が存在する環境はそれ以降、何をするにしても HOMEBREW_NO_INSTALL_FROM_API=1
が有効じゃないと、編集した formula になにか影響出るのかな、と思っていたのだけど、その後試した感じ一度インストールしたら他の formula や brew update しても影響はないようだった。
おそらく edit した対象の formula (今回は webalizer) になにか変更があったら、 HOMEBREW_NO_INSTALL_FROM_API=1
してないと影響が出る? みたいな事なんじゃないかと思うんだけど、個人的には「とりあえず利用できればいい」という感じなのでこれでいい。
壊れたらまた調べるか、諦めて Docker で環境作るわという気持ち。
まずこれが brew のお作法に則っているのかもわからん。 brew のドキュメント記述あるのはいいんだけど、具体的な usage がわからねえんだよな。
これも DISABLE_FORMULA=1 みたいな感じの環境変数で有効化無効化スイッチする、みたいな感じじゃないので、面倒そうな歴史的経緯ありそうだなあ、などと思ったのでした。