AR ホームベーカリー

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

macOS (AppleSillicon)版 ColdFusion のインストール

マジでよくわかんなかったので備忘録として書いておきます、これどれくらいの人に需要あるんだろうな。

入手

www.adobe.com

Adobe のアカウントを持っていようと、インストーラのダウンロードには毎回記述が必要。 長年この仕様なんだけど、なんとかならんのかこれ。 なんのための Adobe のアカウントじゃい!

今回は zip 圧縮版 ColdFusion_WWEJ_macos.zip を利用します。

展開

ColdFusion_WWEJ_macos.zip を unzip して任意のパスに配置してください。 ColdFusion_2023_WWEJ_macos というディレクトリが作成されるので、これがホームディレクトリになります。

mv ~/Downloads/ColdFusion_WWEJ_macos.zip ~/Workspace/
❯ unzip ColdFusion_WWEJ_macos.zip
❯ cd ColdFusion_2023_WWEJ_macos
開発元を検証できないため開けません

おなじみのやつですね。 次項で ColdFusion の起動をしようとすると止まるので、セキュリティとプライバシーで「 Java の実行とめました!」と出ているはずなので許可するようにしてください。

www.iodata.jp

面倒。

インストール

いわゆる ColdFusion/cfusion/bin にあるファイルを叩くことで普段と変わらないインストールが実施できます。

❯ ./cfusion/bin/cfstart.sh
Starting ColdFusion 2023 server ...
サーバーを起動するには、EULA に同意する必要があります。cfinstall スクリプト (/Users/donbulinux/Workspace/ColdFusion_2023_WWEJ_macos/ColdFusion/cfusion/bin) を実行し、EULA の利用条件に同意してください。

There has been an error starting ColdFusion 2023 server, please check the logs.

ファッキュー、というわけで利用条件の同意やら規約の確認をしましょう (タテマエ)。

❯ ./cfusion/bin/cfinstall.sh

出力は以下のようになります。 (内容ははしょってます)

------------------------------

 ColdFusion セットアップウィザードへようこそ

------------------------------

ColdFusion インストールディレクトリ : /Users/donbulinux/Workspace/ColdFusion_2023_WWEJ_macos/ColdFusion

================================================================================
使用許諾契約

ライセンス契約の条件に同意しますか。 [Y/N]: y

================================================================================
インストールタイプ

インストールの選択 [1]: 3

================================================================================
 ColdFusion サーバープロファイルを選択

 ColdFusion サーバープロファイルを選択 [1]: 3

================================================================================
Administrator パスワード

--------------------------------------------------------------------------------
パスワードは 8 文字以上で、英大文字、英小文字、数字および特殊文字 (~!$%^&*()_ =,./;[]{}| -@#) をそれぞれ 1 文字含める必要があります。
--------------------------------------------------------------------------------

管理者パスワードを入力してください: *************
管理者パスワードを再入力してください: *************

================================================================================
内蔵 Web サーバーポート番号

ColdFusion 管理者ポート [8500]:

================================================================================
RDS パスワード

RDS パスワードを入力してください: *************
RDS パスワードを再入力してください: *************

================================================================================
デプロイメントタイプ

デプロイメントタイプ [1]: 2
続行しますか? [Y/N]: y
--------------------------------------------------------------------------------
Adobe Coldfusion 2023 が正常に設定されました。

インストールを続行するには、/Users/donbulinux/Workspace/ColdFusion_2023_WWEJ_macos/ColdFusion/cfusion/bin に移動し、「./coldfusion start」と入力して、サーバーを開始します。

サーバーを開始したら、http://127.0.0.1:8500/CFIDE/administrator/index.cfm で
設定ウィザードにログインしてください。
--------------------------------------------------------------------------------

スタートアップアイテムの配置

インストーラ叩いて終わりかと思ったら、別途スタートアップアイテムを配置しないとダメなようです。 いやそんなもん常駐されても困るしいらんのだが……。

❯ ./cfusion/bin/coldfusion start
You must be the root user to configure the ColdFusion to start on System boot. Start ColdFusion as "sudo ./coldfusion start" to configure.
Once it has been configured, start ColdFusion as "./coldfusion start" to run ColdFusion as non-root user.

メッセージだけ見ると非 root で起動できそうですが、実際上記のように起動できません。 どうするかっていうと、一度 root で起動して You must be the root user to configure the ColdFusion to start on System boot. に該当する作業を実施してやる必要があります。 ええー……。

❯ sudo ./cfusion/bin/coldfusion start
======================================================================
Configuring ColdFusion 2023 to start on system init.
Creating the ColdFusion 2023 start script /Library/StartupItems/ColdFusion2023/ColdFusion2023
Install complete
======================================================================
Start ColdFusion on system boot has been configured. Start ColdFusion as "./coldfusion start" to run ColdFusion as non-root user.
======================================================================

できました。 まだ罠があります。

Runtime サービスを使用できません。

何を言っているんだ、という感じですが。

Start ColdFusion on system boot has been configured. Start ColdFusion as "./coldfusion start" to run ColdFusion as non-root user.

システム起動時に ColdFusion を開始するように設定されています。 ColdFusion を「./coldfusion start」として起動し、root 以外のユーザーとして ColdFusion を実行します。

メッセージだけ読むと非 root ユーザでサービスを起動しろ、と読めます。実際には、非 root で起動すると起動しません。

やってみましょう。

❯ ./cfusion/bin/coldfusion start
Starting ColdFusion 2023 server ...
======================================================================
ColdFusion 2023 server has been started.
ColdFusion 2023 will write logs to /Users/donbulinux/Workspace/ColdFusion_2023_WWEJ_macos/ColdFusion/cfusion/bin/../logs/coldfusion-out.log
======================================================================

ファッキン

HTTPステータス 500 – Internal Server Error

タイプ 例外報告

メッセージ coldfusion.server.ServiceFactory$ServiceNotAvailableException: Runtime サービスを使用できません。

説明 サーバーは予期しない条件に遭遇しました。それはリクエストの実行を妨げます。

例外

javax.servlet.ServletException: coldfusion.server.ServiceFactory$ServiceNotAvailableException: Runtime サービスを使用できません。
    coldfusion.bootstrap.ClassloaderHelper.initServletClass(ClassloaderHelper.java:145)
    coldfusion.bootstrap.BootstrapServlet.init(BootstrapServlet.java:111)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:373)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.base/java.lang.Thread.run(Thread.java:833)

根本原因

coldfusion.server.ServiceFactory$ServiceNotAvailableException: Runtime サービスを使用できません。
    coldfusion.server.ServiceFactory.getRuntimeService(ServiceFactory.java:664)
    coldfusion.CfmServlet.init(CfmServlet.java:101)
    coldfusion.bootstrap.ClassloaderHelper.initServletClass(ClassloaderHelper.java:137)
    coldfusion.bootstrap.BootstrapServlet.init(BootstrapServlet.java:111)
    org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492)
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:373)
    org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399)
    org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
    org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926)
    org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791)
    org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
    org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    java.base/java.lang.Thread.run(Thread.java:833)

注意 原因のすべてのスタックトレースは、サーバのログに記録されています。

かなり面倒な気持ちになっている。

この状態でも一応プロセスは起動しているので、一度プロセスを終了してから再度 sudo して起動します。

❯ ./coldfusion stop
Stopping ColdFusion 2023 server, please wait
ColdFusion 2023 server has been stopped

❯ sudo ./coldfusion start
Password:
Starting ColdFusion 2023 server ...
======================================================================
ColdFusion 2023 server has been started.
ColdFusion 2023 will write logs to /Users/donbulinux/Workspace/ColdFusion_2023_WWEJ_macos/ColdFusion/cfusion/bin/../logs/coldfusion-out.log
======================================================================

パスワード入力など初期設定の画面撮影しわすれた

起動しましたね。 というわけで標準出力メッセージが何一つ信用できない、というか install.sh と start.sh 別れてるんだから StartupItems への配置は install.sh でやれよという気持ちに。

StartupItems

前述した You must be the root user to configure the ColdFusion to start on System boot. ですが、具体的に何をしているかというと、 /Library/StartupItemsスクリプトファイルを配置しているようです。

pwd;ls -lha
/Library/StartupItems
total 0
drwxr-xr-x   3 root  wheel    96B  9 28 15:40 .
drwxr-xr-x  69 root  wheel   2.2K  9 25 22:03 ..
drwxr-xr-x@  4 root  wheel   128B  9 28 15:40 ColdFusion2023
❯ ls -lha /Library/StartupItems/ColdFusion2023
total 16
drwxr-xr-x@ 4 root  wheel   128B  9 28 15:40 .
drwxr-xr-x  3 root  wheel    96B  9 28 15:40 ..
-r-xr--r--@ 1 root  wheel   467B  9 28 15:40 ColdFusion2023
-r-xr--r--@ 1 root  wheel   384B  9 28 15:40 StartupParameters.plist

システム全体が起動遅くなるの困るので削除します。

❯ sudo rm -rf /Library/StartupItems/ColdFusion2023
Password:

アバヨ!

以上です

以上です。

Docker について

Dockerfile 、公式提供は linux/amd64 向けしか存在せずこのような事に。

hub.docker.com

フォーラムを見ていると「 commandbox のイメージだとうまくいくよ!」という知見もあり。

forums.docker.com

確認してみると linux/amd64 以外に arm64 も確かに存在します。

hub.docker.com

サポートしているエンジンを見る限りでは ColdFusion の歴代バージョンが揃っており「ウム」という感じだったのですが、 CFadmin を表示させようとすると HTTP 500 Error となるので何かがおかしい感じです。

server.json に以下のように書けば (最悪 "blockCFAdmin": false だけでもいいはずなんだけど) 有効化される、と思うんだけどうまく行かなかったので。 なーんだろね。

{
  "profile": "development",
  "web": {
    "host": "127.0.0.1",
    "webroot": "/usr/local/lib/serverHome/",
    "blockCFAdmin": false
  }
}