AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

homebrew で webalizer をインストールしようとしたら it is not maintained upstream! と言われた

手順

ちょっと長くなるので、先に結論だけ書いておく。

❯ 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 から無効化を指定している行を取り除けばいいらしい。

stackoverflow.com

Formula の編集については以下とのことだった。 んだけど、読んでもよくわからねえな……?

docs.brew.sh

とりあえずやってみる

とりあえず 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 行を削除します。

github.com

削除後はこんな感じにする
  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 に従って整えて実行しましょう。

www.robata.org

❯ 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 みたいな感じの環境変数で有効化無効化スイッチする、みたいな感じじゃないので、面倒そうな歴史的経緯ありそうだなあ、などと思ったのでした。