mod_dav_svn.soのSyntax ErrorでApache HTTPDが起動しない問題解決 DIY

Subversion プログラミングDIY
Subversion on Windows10

Windows OSでSVNサーバーを立ち上げて、最新のSVNを利用しようとしたらハマりました。mod_dav_svn.soがSyntaxエラーでhttpdが起動できません。でも、無事に解決できたので私の行った解決策を記事にしておきます。

mod_dav_svn.soのSyntax Errorでトラブった背景

以前にもご紹介しましたが、我が家では古いパソコンを使ってDXシステムを構築しています。開発機は17年も昔に購入したDELLのVostro 420です。未だに快適に使えています。ですが、メモリーも3 GBytesで、32bits Windows OSと言う事もあり、そろそろ新しいPCに乗り換えようかと考えてます。

Windows OS上でEclipseで開発したPHPのコードをSVN管理

そのPC買い替えの準備として、この週末、我が家のDXシステムのバージョン管理に使用しているSubversionを最新のバージョンに変えて、現在使用しているVostro420上のRepositoryも64bitのWindows10 OSのマシン(ThinkPad X201)へ引っ越しを行うことにしました。

X201にSubversionをApache OrgのSubversionのサイトからwindows版をダウンロードして導入しました。ここから、Windows版のBinaryパッケージを選ぶには以下から選択することになります。

このなかで、VisualSVNを選ぶと、Subversionだけがダウンロードできるので迷わずこちらからダウンロードしました。とくにVisualSVN Serverが欲しいわけではなく、Windowsで動くSVNサーバー(コマンドラインツール)が欲しかっただけなので、このBinary 1.14.2をDownloadしてインストールしました。全く問題なく svnadmin createでRepositryを作って、Vostro420のRepositoryのDumpをsvnadmin load RepoName < Dump-RepoName.bak でRepositoryをX201に立てるまで行いました。

遭遇したエラーメッセージ

ところがです。必要な作業を全部終えてApache Httpdを立ち上げると、以下のエラーでhttpdが起動しません。

httpd: Syntax error on line 187 of C:/pleiades/xampp/apache/conf/httpd.conf: Cannot load modules/mod_dav_svn.so into server: %1 \x82\xcd\x97L\x8c\xf8\x82\xc8 Win32 \x83A\x83v\x83\x8a\x83P\x81[\x83V\x83\x87\x83\x93\x82\xc5\x82\xcd\x82\xa0\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x81B

SVNのアクセスに必要なApacheのModuleの、mod_dav_svn.soがどうしてもSyntax Errorを吐いてHttpdが起動しません。まず、この文字化けはいったいどうやって読めば良いの? 読めれば手がかりもありそうなんですが、ただ、mod_dav_svn.so into serverでSyntax errorとしかわかりません。

そもそもmod_dav_svn.soはどこからダウンロードできるの?

こちらは、すぐにネット上で見つかります。

こちらのサイトで、Windowsのmod_dav_svn.soをBinaryで提供してくれてます。ほんと助かります。ソースコードもありますが、Windows上でC言語からコンパイルするのは普段なれていないとなかなか手間です。

GitHub - nono303/win-svn: apache subversion windows builds with httpd modules and java hl
apache subversion windows builds with httpd modules and java hl - GitHub - nono303/win-svn: apache subversion windows bu...

私の場合は、vc15/x64 buildを使用しました。mod_dav_svn.soと、mod_authz_svn.soをDownloadして、apacheのmodulesのDirectoryに保存しました。もちろん httpd.confにも以下を設定しています。

LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so

しかしながら、httpdを起動すると先ほどのSyntax errorとなるのです。

httpd: Syntax error on line 187 of C:/pleiades/xampp/apache/conf/httpd.conf: Cannot load modules/mod_dav_svn.so into server: %1 \x82\xcd\x97L\x8c\xf8\x82\xc8 Win32 \x83A\x83v\x83\x8a\x83P\x81[\x83V\x83\x87\x83\x93\x82\xc5\x82\xcd\x82\xa0\x82\xe8\x82\xdc\x82\xb9\x82\xf1\x81B

原因は、mod_dav_svn.so ではなくDownloadしてきたsvnサーバーのコードであった

結論から言います。原因は、Downloadしてきたsvnサーバーのコードの方にありました。おそらく32bits用でコンパイルされているのだと思います。

C:\svn-cli>svnadmin --version
svnadmin, version 1.14.2 (r1899510)
   compiled Apr 12 2022, 19:41:14 on x86/x86_64-microsoft-windows6.2.9200

Copyright (C) 2022 The Apache Software Foundation.
This software consists of contributions made by many people;
see the NOTICE file for more information.
Subversion is open source software, see http://subversion.apache.org/

The following repository back-end (FS) modules are available:

* fs_fs : Module for working with a plain file (FSFS) repository.
* fs_x : Module for working with an experimental (FSX) repository.

よくよく考えると、解読不明のエラーメッセージに、Win32という文字が読めます。つまり、Apacheがロードしようとしたmod_dav_svn.soは、apache httpdが64bits用なので32bitsのsubversionとは一緒に使えませんという意味だったのかもです。

解決にいたった作業

そこで、visualSVNのサイトからDownloadしてきたApache Subversion command line toolsは削除して、先ほどのGithubのhttps://github.com/nono303/win-svnからvc15/x64 buildのsubversionのPackageをダウンロードしてみました。Subversionのバージョンをチェックすると以下でした。

C:\svn-cli>svnadmin --version
svnadmin, version 1.14.2 (r1899510)
   compiled Apr  6 2022, 01:23:33 on x86_64-microsoft-windows10.0.19044

Copyright (C) 2022 The Apache Software Foundation.
This software consists of contributions made by many people;
see the NOTICE file for more information.
Subversion is open source software, see http://subversion.apache.org/

The following repository back-end (FS) modules are available:

* fs_fs : Module for working with a plain file (FSFS) repository.
* fs_x : Module for working with an experimental (FSX) repository.

正直、このバージョンの違いが何なのか私には説明できませんが、こちらのsvnのbinaries(dll)をapacheのbin Directoryにコピーして、httpdを立ち上げると無事に立ち上がりました。

ちなみにApacheのバージョンは以下です。

C:\pleiades\xampp\apache\bin>httpd -V
Server version: Apache/2.4.53 (Win64)
Apache Lounge VC15 Server built:   Mar 16 2022 15:48:38
Server's Module Magic Number: 20120211:124
Server loaded:  APR 1.7.0, APR-UTIL 1.6.1, PCRE 10.39 2021-10-29
Compiled using: APR 1.7.0, APR-UTIL 1.6.1, PCRE 10.39 2021-10-29
Architecture:   64-bit
Server MPM:     WinNT
  threaded:     yes (fixed thread count)
    forked:     no
Server compiled with....
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses disabled)
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D DYNAMIC_MODULE_LIMIT=256
 -D HTTPD_ROOT="/apache"
 -D SUEXEC_BIN="/apache/bin/suexec"
 -D DEFAULT_PIDLOG="logs/httpd.pid"
 -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
 -D DEFAULT_ERRORLOG="logs/error.log"
 -D AP_TYPES_CONFIG_FILE="conf/mime.types"
 -D SERVER_CONFIG_FILE="conf/httpd.conf"

LoadされたModulesを確認

無事に立ち上がったので、LoadされたModulesを確認してみました。最後にしっかりと dav_svn_module (shared) と、authz_svn_module (shared)を確認できました。

C:\pleiades\xampp\apache\bin>httpd -t -D DUMP_MODULES
Loaded Modules:
 core_module (static)
 win32_module (static)
 mpm_winnt_module (static)
 http_module (static)
 so_module (static)
 access_compat_module (shared)
 actions_module (shared)
 alias_module (shared)
 allowmethods_module (shared)
 asis_module (shared)
 auth_basic_module (shared)
 authn_core_module (shared)
 authn_file_module (shared)
 authz_core_module (shared)
 authz_groupfile_module (shared)
 authz_host_module (shared)
 authz_user_module (shared)
 autoindex_module (shared)
 cgi_module (shared)
 dav_module (shared)
 dav_fs_module (shared)
 dav_lock_module (shared)
 dir_module (shared)
 env_module (shared)
 headers_module (shared)
 include_module (shared)
 info_module (shared)
 isapi_module (shared)
 log_config_module (shared)
 cache_disk_module (shared)
 mime_module (shared)
 negotiation_module (shared)
 proxy_module (shared)
 proxy_ajp_module (shared)
 rewrite_module (shared)
 setenvif_module (shared)
 socache_shmcb_module (shared)
 ssl_module (shared)
 status_module (shared)
 dav_svn_module (shared)
 authz_svn_module (shared)

そして、この最新版のSVNに移動したRepositoryから無事にProjectをEclipseのWorkspaceにCheckOutすることが出来ました。

まとめ

ModuleやSVN dllのx86 または、x64のArchitectureがApacheとMiss Matchだった事が原因かと思います。あの解読できないメッセージをちゃんと読めていればもっと解決には早く至ったかもしれないが、結構解決までに時間を要しました。あのメッセージはどうやったら読めるのでしょうか?ご存知の方がいらっしゃれば、コメントいただけると助かります。

Windowsで、SVN サーバーを立ち上げて利用する際のWebDAVや、mod_dav_svn.soの資料はインターネットに少ないので、この記事が役たてば嬉しいです。

最後まで読んでいただき、ありがとうございました。

追記:

実は、後日、今使用中の古いPC(Vostro420)の方で、XAMPPのPHPのバージョンアップの必要性(Google CloudのAPIをPHPからアクセスする為)が生じました。

今あるPHP5.4をPHP7にダウンロードして差し替えようとしましたが、結構ハマったので、XAMPPを新しいバージョンで導入しました。今度は上記とは別のWindows 32bits 版のsvnモジュールを使う必要がありました。

あと、前回の記事には記載漏れですが必要なDLLも追加で、xampp/apache/bin/ 配下にコピーする必要があります。基本、全部 https://github.com/nono303/win-svnからダウンロードしてきた対応バージョンのDLLをdepsのフォルダー内のものも含めて、xampp/apache/bin にコピーする事で、無事に稼働してます。

PHPのバージョン上げるときは、XAMPPをごっそり新しいバージョンにするのが良いですね。PHPだけ差し替える人もいるようですが、php.ini や、httpd-xampp.conf とか更新部分ハマりポイントが多いです。 ちょっとhttpd.confや、MariaDBのDatabaseをBackup/Restoreする必要がありますが、ハマって時間取るよりは早いし、クリーンなバージョンアップが出来ると思います。

投稿者プロフィール

diy-hs
diy-hs
”なんでも自分でやってみる” をテーマに、ブログを書いてます。素人には無理と思う様な事も、実際にやってみるとあっさりと出来たりする事もあります。失敗もありますが、失敗する事で経験となり、次は少し上達したりします。それが楽しいです。そんなDIYの情報を発信して行けたらと思ってます。仕事はAIやクラウド関連を担当してます。そんな訳でプログラミングやシステム構築も趣味と実益を兼ねてDIYを楽しんでます。ギターはもともとクラシックギターを学び、インストルメンタル専門でしたが、高校生の頃にテレビでみた卒業の映画でPaul Simonの曲に憧れて、それ以降いろんなジャンルの弾き語りも楽しんでます。S&Gの曲なら楽譜なしで弾けます。^^; また最近は独学でピアノも始めました。すでに4曲ほどレパートリーがあります。Twitterの方でも発信していますので、ぜひフォロー下さい。
(Amazonのアソシエイトとして、当サイト(diy-hs.com)は適格販売により収入を得ています。)

コメント

タイトルとURLをコピーしました