2024年5月11日土曜日

メモ:Visual StudioとMicrosoft C++ (MSVC) コンパイラ ツールのバージョンの対応

  • Visual Studio 2015: v140
  • Visual Studio 2017: v141
  • Visual Studio 2019: v142
  • Visual Studio 2022: v143

方法: ターゲット フレームワークおよびプラットフォームのツールセットを変更する | Microsoft Learn

log4php

  • log4phpを試した備忘録です
  • Apache log4php - Welcome - Apache log4php の[Download]より apache-log4php-2.3.0-src.zip をダウンロード
  • 解凍先は任意、今回は C:\DATA01\TempDel の下に解凍
  • C:\DATA01\TempDel\log4php_config.xmlを作成
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://logging.apache.org/log4php/">
    <appender name="appenderfile" class="LoggerAppenderFile">
        <param name="file" value="C:\DATA01\TempDel\application.log" />
        <param name="append" value="true" />
        <layout class="LoggerLayoutPattern">
            <param name="conversionPattern" value="%date{Y-m-d H:i:s.u} %logger %-5level  %sessionid %file(%line) %msg%n" />
        </layout>
    </appender>
    <root>
        <appender_ref ref="appenderfile" />
    </root>
</configuration>
  • C:\DATA01\TempDel\log4php_test.phpを作成
<?php
// ログの時間を日本時間にするため
date_default_timezone_set("Asia/Tokyo");

require_once(dirname(__FILE__) . "/apache-log4php-2.3.0/src/main/php/Logger.php");

// 設定ファイルの読み込み
Logger::configure(dirname(__FILE__) . "/log4php_config.xml");

// ロガー名:任意
$logger = Logger::getLogger("myLogger");

// 以下ログの出力
$logger->debug("メッセージ debug");
$logger->info("メッセージ info");
$logger->warn("メッセージ warning");
$logger->error("メッセージ error");
$logger->fatal("メッセージ fatal");
?>
  • ブラウザからlog4php_test.phpにアクセスすると、C:\DATA01\TempDel\application.log に以下のようにログが出力される
2024-05-10 20:11:04.171 myLogger DEBUG   C:\DATA01\TempDel\log4php_test.php(14) メッセージ debug
2024-05-10 20:11:04.173 myLogger INFO    C:\DATA01\TempDel\log4php_test.php(15) メッセージ info
2024-05-10 20:11:04.173 myLogger WARN    C:\DATA01\TempDel\log4php_test.php(16) メッセージ warning
2024-05-10 20:11:04.173 myLogger ERROR   C:\DATA01\TempDel\log4php_test.php(17) メッセージ error
2024-05-10 20:11:04.173 myLogger FATAL   C:\DATA01\TempDel\log4php_test.php(18) メッセージ fatal
  • サイズでローテーションさせる場合は、log4php_config.xmlを以下のように記載
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://logging.apache.org/log4php/">
    <appender name="rollingFile" class="LoggerAppenderRollingFile">
        <param name="file" value="C:\DATA01\TempDel\application.log" />
        <param name="append" value="true" />
        <param name="maxFileSize" value="10MB" />
        <param name="maxBackupIndex" value="10" />
        <param name="compress" value="false" />
        <layout class="LoggerLayoutPattern">
            <param name="conversionPattern" value="%date{Y-m-d H:i:s.u} %logger %-5level  %sessionid %file(%line) %msg%n" />
        </layout>
    </appender>
    <root>
        <appender_ref ref="rollingFile" />
    </root>
</configuration>
  • 日付でローテーションさせる場合は、log4php_config.xmlを以下のように記載
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://logging.apache.org/log4php/">
    <appender name="dailyFile" class="LoggerAppenderDailyFile">
        <param name="file" value="C:\DATA01\TempDel\application_%s.log" />
        <param name="append" value="true" />
        <param name="datePattern" value="Y-m-d" />
        <layout class="LoggerLayoutPattern">
            <param name="conversionPattern" value="%date{Y-m-d H:i:s.u} %logger %-5level  %sessionid %file(%line) %msg%n" />
        </layout>
    </appender>
    <root>
        <appender_ref ref="dailyFile" />
    </root>
</configuration>
  • application_2024-05-10.log というファイル名でログが出力される
    日付のフォーマットは datePattern で指定できる
    月ごとにする場合は Y-m など
  • 日付でログ出力しつつ、ブラウザにも表示する場合は、log4php_config.xmlを以下のように記載
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns="http://logging.apache.org/log4php/">
    <appender name="dailyFile" class="LoggerAppenderDailyFile">
        <param name="file" value="C:\DATA01\TempDel\application_%s.log" />
        <param name="append" value="true" />
        <param name="datePattern" value="Y-m-d" />
        <layout class="LoggerLayoutPattern">
            <param name="conversionPattern" value="%date{Y-m-d H:i:s.u} %logger %-5level  %sessionid %file(%line) %msg%n" />
        </layout>
    </appender>
    <appender name="echo" class="LoggerAppenderEcho">
        <param name="htmlLineBreaks" value="true" />
        <layout class="LoggerLayoutSimple" />
    </appender>
    <root>
        <appender_ref ref="dailyFile" />
        <appender_ref ref="echo" />
    </root>
</configuration>

2024年5月6日月曜日

Apache バージョンアップ 2024

はじめに

以下のソフトをバージョンアップします

バージョンアップ前 バージョンアップ後
Apache 2.2.19 (Win32) Apache 2.4.59 (Win64)
PHP 5.3.5 (Win32) PHP 8.3.6 (Win64)
PukiWiki 1.3.5 (euc-jp) PukiWiki 1.5.4 (utf-8)
(新規) JDK 22.0.1 (Win64)
(新規) Tomcat 10.1.23 (Win64)
Apache Subversion 1.8.0 (Win32) Apache Subversion 1.14.3 (Win64)

 

Apache 2.4.59

  • Apache Loungeのサイトから httpd-2.4.59-240404-win64-VS17.zip をダウロードします
  • 解凍してフォルダ名を「Apache2.4.59」として「C:\APPL01\Apache Software Foundation\」にコピーします    
  • 配置後のフォルダパス : C:\APPL01\Apache Software Foundation\Apache2.4.59
  • conf/httpd.confを編集します(日本語を含むパスがある場合はutf-8でファイルを保存します)
修正前 修正後
修正 Define SRVROOT "c:/Apache24" Define SRVROOT "C:/APPL01/Apache Software Foundation/Apache2.4.59"
修正 ServerAdmin admin@example.com ServerAdmin <自分のメールアドレス>
追加   ServerName MYHOSTNAME:80
修正 <IfModule dir_module>
    DirectoryIndex index.html
</IfModule>
<IfModule dir_module>
    DirectoryIndex index.html index.php index.jsp
</IfModule>
追加       AddType image/x-icon .ico
  • Apache2.2からApache2.4でのhttpd.confの書き方の違い  
Apache 2.2 Apache 2.4
Alias /MyPub01/ "C:/DATA01/MyPagePub01/" Alias /MyPub01/ "C:/DATA01/MyPagePub01/"
<Directory "C:/DATA01/MyPagePub01">
    AllowOverride None
    Require all granted
</Directory>
※Aliasだけ指定してDirectoryタグの設定がない場合
Forbidden
You don't have permission to access this resource.
となる
<Directory "C:/xxx/~">
    Order allow,deny
    Allow from all
</Directory>
<Directory "C:/xxx/~">
    Require all granted
</Directory>
すべて許可する
  すべて拒否する場合は
    Require all denied
<Directory "C:/xxx/~">
    Order deny,allow
    Deny from all
    Allow from 192.168.11.8 HOSTNAME1
</Directory>
<Directory "C:/xxx/~">
    Require ip 192.168.11.8
    Require host HOSTNAME1
</Directory>
IP指定、ホスト名指定の許可
  ローカルホストからのアクセスを許可する場合は
    Require local

参考サイト
Apache | Requireディレクティブ:アクセスの許可や拒否などのアクセス制限を行う(Apache2.4以降)

  • ログローテーションの設定(conf/httpd.conf)
修正前 修正後
修正 ErrorLog "logs/error.log" ErrorLog "| bin/rotatelogs.exe logs/error_%Y%m.log 86400"
※rotatelogsは拡張子まで記載が必要
修正 CustomLog "logs/access.log" common CustomLog "| bin/rotatelogs.exe logs/access_%Y%m.log 86400" common
※rotatelogsは拡張子まで記載が必要
  • 古いサービスの削除
  • コマンドプロンプトを管理者として開き、以下を実行します
>cd C:\APPL01\Apache Software Foundation\Apache2.2\bin
>httpd -k uninstall
Removing the Apache2.2 service
The Apache2.2 service has been removed successfully.
  • サービスの登録
>cd C:\APPL01\Apache Software Foundation\Apache2.4.59\bin
>httpd -k install -n "Apache2.4.59"
Installing the 'Apache2.4.59' service
The 'Apache2.4.59' service is successfully installed.
Testing httpd.conf....
Errors reported here must be corrected before the service can be started.
  • サービス登録は成功、起動は失敗したが、コントロールパネルのサービスから起動できたのでOKとします

 

PHP 8.3.6

  • PHP For Windows: Binaries and sources Releasesで「VS16 x64 Thread Safe (2024-Apr-10 15:13:46)」「Zip」を選び、php-8.3.6-Win32-vs16-x64.zip をダウンロードします
  • 解凍してC:\APPL01\php\に配置します
  • 配置後のフォルダパス : C:\APPL01\php\php-8.3.6-Win32-vs16-x64\
  • php.ini-productionをphp.iniとコピーして編集します
  修正前 修正後
修正 doc_root = doc_root = "C:/APPL01/Apache Software Foundation/Apache2.4.59/htdocs"
追加   extension_dir = "C:/APPL01/php/php-8.3.6-Win32-vs16-x64/ext"
修正 ;extension=mbstring extension=mbstring
修正 ;extension=odbc extension=odbc
修正 ;sendmail_from = me@example.com sendmail_from = <自分のメールアドレス>
修正 ;session.save_path = "/tmp" session.save_path = "C:/DATA01/TempDel"
修正 ;mbstring.language = Japanese mbstring.language = Japanese
修正 ;mbstring.internal_encoding = mbstring.internal_encoding = UTF-8
修正 ;mbstring.http_input = mbstring.http_input = pass
修正 ;mbstring.http_output = mbstring.http_output = pass
修正 ;mbstring.encoding_translation = Off mbstring.encoding_translation = Off
修正 ;mbstring.detect_order = auto mbstring.detect_order = UTF-8,SJIS,EUC-JP,JIS,ASCII
修正 ;mbstring.substitute_character = none mbstring.substitute_character = none
修正 ;mbstring.strict_detection = Off mbstring.strict_detection = Off
  • Apacheのhttpd.confを編集します
  修正前 修正後
追加   PHPIniDir "C:/APPL01/php/php-8.3.6-Win32-vs16-x64"
LoadModule php_module C:/APPL01/php/php-8.3.6-Win32-vs16-x64/php8apache2_4.dll
追加       AddType application/x-httpd-php .php
  • 動作確認をします
    C:\APPL01\Apache Software Foundation\Apache2.4.59\htdocs\phpinfo.php を作成します
<?php
    phpinfo();
?>

 

Microsoft Access データベース エンジン 2016 再頒布可能コンポーネント

>cd C:\DATA01\TempDel\accessdatabaseengine_X64
>aceredist.msi /passive

参考サイト
Microsoft Acces Database Engine 2016 の32bit/64bit版の共存方法 #access – Qiita

 

PHPアプリの修正

  • Shift_JIS→UTF-8に変更、PHP 5.3.5→PHP 8.3.6に変更したことによる修正をします
  • Shift_JIS→UTF-8に関する変更
修正前 修正後
ファイルの文字コード:Shift_JIS ファイルの文字コード:UTF-8(BOM無し)
以下のソフトを使って一括変換します
FileCode Checker のダウンロード・使い方 - フリーソフト100
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta charset="UTF-8">
odbc_exec($conn_id,$wkSQL); odbc_exec($conn_id, mb_convert_encoding($wkSQL ,"SJIS-win", "UTF-8"));
MS-ACCESSへSQL実行時にSQLをUTF-8→Shift_JISに変更
odbc_result($re01, 2) mb_convert_encoding(odbc_result($re01, 2) , "UTF-8", "SJIS-win")
MS-ACCESSから結果取得時に値をShift_JIS→UTF-8に変更
  • PHP 5.3.5→PHP 8.3.6に関する変更
修正前 修正後
<? <?php
※phpもつけないと認識されなかった
session_is_registered($key) isset($_SESSION[$key])
session_register($key) $_SESSION[$key] = "value";
※セッション変数名のみ登録したい場合は、記載しない
session_unregister($key) unset($_SESSION[$key])
$HTTP_SESSION_VARS $_SESSION
$HTTP_POST_VARS $_POST
$HTTP_GET_VARS $_GET
※パラメータがないことが想定される場合は、以下のように記載
$p_sheet_name = isset($_GET["SheetName"]) ? $_GET["SheetName"] : "";
コンストラクタ
class test01
{
    function test01()
    {
コンストラクタは「__construct()」にする
class test01
{
    function __construct()
    {
ereg_replace mb_ereg_replace
  • その他の変更
修正前 修正後
define("_DBName","ODBCのDNS名"); define("_DBName", "Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:/DATA01/MsAccess/test.mdb");
※直接Accessファイルを指定するように変更

 

PukiWiki 1.5.4

  • PukiWiki/Download/1.5.4 - PukiWiki-official から pukiwiki-1.5.4_utf8.zip をダウンロードします
  • 解凍して「C:\DATA01\」の下に配置します
    配置後のフォルダパス : C:\DATA01\pukiwiki-1.5.4_utf8\
  • pukiwiki.ini.phpを修正します
  修正前 修正後
修正 $nowikiname = 0; $nowikiname = 1;
自動リンクさせない
修正 $adminpass = '{x-php-md5}!'; $adminpass = '{x-php-md5}098f6bcd4621d373cade4e832627b4f6';
※{x-php-md5}の後の文字列は <?php echo md5("パスワード"); ?>の結果文字列を記載します
  • Apacheのhttpd.confを修正します
  修正前 修正後
追加   Alias /my-pukiwiki/ "C:/DATA01/pukiwiki-1.5.4_utf8/"
<Directory "C:/DATA01/pukiwiki-1.5.4_utf8">
    Options Indexes FollowSymLinks
    DirectoryIndex index.php
    AllowOverride All
    Require all granted
</Directory>
  • skin/pukiwiki.cssを修正します
修正前 修正後 備考
.style_table {
  padding:0;
  border:0;
  margin:auto;
  text-align:left;
  color:inherit;
  background-color:#ccd5dd;
}
.style_table {
  padding:0;
  border:0;
  margin:1em auto 1em 0;
  text-align:left;
  color:inherit;
  background-color:#ccd5dd;
}
表を左寄せ
.style_th {
  padding:5px;
  margin:1px;
  text-align:center;
  color:inherit;
  background-color:#EEEEEE;
}
.style_th {
  padding:5px;
  margin:1px;
  text-align:center;
  color:inherit;
  background-color:#EEEEEE;
  vertical-align:top;
}
セル内文字を上寄せ
.style_td {
  padding:5px;
  margin:1px;
  color:inherit;
  background-color:#EEF5FF;
}
.style_td {
  padding:5px;
  margin:1px;
  color:inherit;
  background-color:#EEF5FF;
  vertical-align:top;
}
セル内文字を上寄せ
  • wikiフォルダの下のファイルを移行をします
    wikiフォルダ下には初期インストール時のファイルも含まれているため必要なファイルのみ移行します
    移行時にWiki名についている[ ]は削除したファイル名に変更します
  移行元 移行先
ファイルの文字コード ecu-jp UTF-8
改行コード \n \n
wikiフォルダ下のファイル名 5B5B4C696E7578C0DFC4EA5D5D.txt
{"[[Linux設定]]"をHEXエンコード}.txt
・・・
4C696E7578E8A8ADE5AE9A.txt
{"Linux設定"をHEXエンコード}.txt
・・・
  • 移行に用いたC#プログラム
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace PukiwikiConversionConsole
{
    class Program
    {
        const string BASE_PATH = @"C:\DATA01\TempDel\";
        const string FROM_FILE_PATH = BASE_PATH + @"wiki_From\";
        const string TO_FILE_PATH = BASE_PATH + @"wiki_To\";

        /// <summary>
        /// ベースパス(BASE_PATH)の下の
        /// wiki_From配下のファイルをUTF-8変換、ファイル名変更して
        /// wiki_Toの配下に保存する
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            if (!Directory.Exists(FROM_FILE_PATH))
            {
                Console.WriteLine(FROM_FILE_PATH + " に変換元のwikiファイルを配置してください。");
                Console.ReadKey();
                return;
            }

            if (!Directory.Exists(TO_FILE_PATH))
            {
                Directory.CreateDirectory(TO_FILE_PATH);
            }

            StreamWriter swLog = new System.IO.StreamWriter(
                BASE_PATH + "Log-" + DateTime.Now.ToString("yyyyMMdd-HHmmss") + ".txt",
                false, new System.Text.UTF8Encoding(false));

            swLog.WriteLine(
                "変換元ファイル名"
                + "\t"
                + "更新日時"
                + "\t"
                + "変換元Wiki名"
                + "\t"
                + "変換後Wiki名"
                + "\t"
                + "変換後ファイル名"
                );

            foreach (string fromFileFullName in Directory.GetFiles(FROM_FILE_PATH, "*.txt"))
            {
                ConvertFile(swLog, fromFileFullName);
            }

            swLog.Close();

            Console.WriteLine("完了");
            Console.ReadKey();
        }

        private static void ConvertFile(StreamWriter swLog, string fromFileFullName)
        {
            WikiFile wikiFile = new WikiFile(fromFileFullName);

            // 元ファイル読み込み
            List<string> contents = ReadFromFile(wikiFile.FromFileFullName, Encoding.GetEncoding("euc-jp"));

            // UTF-8の\nで書き込む
            StreamWriter swTo = new System.IO.StreamWriter(
                wikiFile.ToFileFullName,
                false, new System.Text.UTF8Encoding(false));
            foreach (string line in contents) swTo.Write(line + "\n");
            swTo.Close();

            // タイムスタンプを元ファイルに合わせる
            //作成日時の設定
            System.IO.File.SetCreationTime(wikiFile.ToFileFullName, wikiFile.FiFrom.CreationTime);
            //更新日時の設定
            System.IO.File.SetLastWriteTime(wikiFile.ToFileFullName, wikiFile.FiFrom.LastWriteTime);
            //アクセス日時の設定
            System.IO.File.SetLastAccessTime(wikiFile.ToFileFullName, wikiFile.FiFrom.LastAccessTime);

            // ログの書き込み
            swLog.WriteLine(
                wikiFile.FromFileName
                + "\t"
                + wikiFile.FiFrom.LastWriteTime.ToString("yyyy/MM/dd HH:mm:ss")
                + "\t"
                + wikiFile.FromWikiName
                + "\t"
                + wikiFile.ToWikiName
                + "\t"
                + wikiFile.ToFileName
                );

        }

        private static List<string> ReadFromFile(string filePath, Encoding encode)
        {
            string line = "";
            List<string> ret = new List<string>();

            using (StreamReader sr = new StreamReader(filePath, encode))
            {
                while ((line = sr.ReadLine()) != null)
                {
                    ret.Add(line);
                }
            }

            return ret;
        }

        /// <summary>
        /// 変換前のファイル名、変換後のファイル名を格納するクラス
        /// </summary>
        class WikiFile
        {
            private string _fromFileFullName;
            private string _fromFileName;
            private string _fromWikiName;
            private string _toFileName;
            private string _toWikiName;
            private string _toFileFullName;

            FileInfo _fiFrom;

            public WikiFile(string fromFileFullName)
            {
                this._fromFileFullName = fromFileFullName;

                this._fiFrom = new FileInfo(fromFileFullName);

                // 変換元ファイル名と拡張子
                this._fromFileName = this._fiFrom.Name;
                string ext = this._fromFileName.Substring(this._fromFileName.LastIndexOf("."));

                // 変換元Wiki名(拡張子なしでデコード後の変換元ファイル名)
                this._fromWikiName = HexToBin(Encoding.GetEncoding("euc-jp"), this._fromFileName.Substring(0, this._fromFileName.LastIndexOf(".")));

                // 変換後Wiki名(ファイル名内の [] は削除する)
                this._toWikiName = this._fromWikiName.Replace("[", "").Replace("]", "");

                // 変換後ファイル名(エンコード後の変換後ファイル名+拡張子)
                this._toFileName = BinToHex(new System.Text.UTF8Encoding(false), this._toWikiName) + ext; 

                // 変換後ファイル名フルパス
                this._toFileFullName = TO_FILE_PATH + this._toFileName;

            }

            public string FromFileFullName { get { return this._fromFileFullName; } }
            public string FromFileName { get { return this._fromFileName; } }
            public string FromWikiName { get { return this._fromWikiName; } }
            public string ToFileName { get { return this._toFileName; } }
            public string ToWikiName { get { return this._toWikiName; } }
            public string ToFileFullName { get { return this._toFileFullName; } }
            public FileInfo FiFrom { get { return this._fiFrom; } }

            // How to convert this PHP function to C#? - Stack Overflow
            // https://stackoverflow.com/questions/35336150/how-to-convert-this-php-function-to-c
            private static string BinToHex(Encoding enc, string bin)
            {
                byte[] bytes = enc.GetBytes(bin);
                string hexString = HexStringFromBytes(bytes);
                return hexString.ToUpper();
            }

            private static string HexStringFromBytes(byte[] bytes)
            {
                var sb = new StringBuilder();
                foreach (byte b in bytes)
                {
                    var hex = b.ToString("x2");
                    sb.Append(hex);
                }
                return sb.ToString();
            }

            // php hextobin not works exactly in c# - Stack Overflow
            // https://stackoverflow.com/questions/60095429/php-hextobin-not-works-exactly-in-c-sharp
            private static string HexToBin(Encoding enc, string hex)
            {
                return enc.GetString(HexToBinByteArray(hex));
            }

            private static byte[] HexToBinByteArray(string hex)
            {
                int NumberChars = hex.Length;
                byte[] bytes = new byte[NumberChars / 2];
                for (int i = 0; i < NumberChars; i += 2)
                    bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
                return bytes;
            }
        }
    }
}

 

JDK 22.0.1

  • JDK Builds from OracleよりOpenJDK JDK 22.0.1 GA Releaseに遷移し、openjdk-22.0.1_windows-x64_bin.zip をダウンロードします
  • openjdk-22.0.1_windows-x64_bin.zip を解凍し、フォルダ名を「openjdk-22.0.1_windows-x64_bin」に変更後に、「C:\APPL01\Ap_Java\」にコピーします
    配置後のフォルダパス : C:\APPL01\Ap_Java\openjdk-22.0.1_windows-x64_bin\
  • バージョンを確認します
>cd C:\APPL01\Ap_Java\openjdk-22.0.1_windows-x64_bin\bin
>java --version
openjdk 22.0.1 2024-04-16
OpenJDK Runtime Environment (build 22.0.1+8-16)
OpenJDK 64-Bit Server VM (build 22.0.1+8-16, mixed mode, sharing)
  • 通常は環境変数を設定しますが、今回は実施しません
変数名 設定内容
JAVA_HOME C:\APPL01\Ap_Java\openjdk-22.0.1_windows-x64_bin
PATH %JAVA_HOME%\bin;~以降は元の値~

参考サイト
2022年のJavaまるわかり!最新バージョンからJavaを取り巻く環境まで | gihyo.jp

 

Tomcat 10.1.23

  • Apache Tomcat® - Welcome!よりApache Tomcat® - Apache Tomcat 10 Software Downloadsに遷移して、apache-tomcat-10.1.23-windows-x64.zip をダウンロードします
  • apache-tomcat-10.1.23-windows-x64.zipを解凍し、フォルダ名を「apache-tomcat-10.1.23-windows-x64」に変更後に、「C:\APPL01\Ap_Java\」にコピーします
    配置後のフォルダパス : C:\APPL01\Ap_Java\apache-tomcat-10.1.23-windows-x64\
  • C:\APPL01\Ap_Java\apache-tomcat-10.1.23-windows-x64\bin\setenv.batを作成し以下を記載します
set JAVA_HOME="C:\APPL01\Ap_Java\openjdk-22.0.1_windows-x64_bin"

 

Apacheとの連携

  • Tomcatのconf/server.xmlを開いて以下を追加します
    (デフォルトではコメントされているので新たに追加)
    <Connector protocol="AJP/1.3"
               address="::1"
               secretRequired="false"
               port="8009"
               redirectPort="8443"
               maxParameterCount="1000"
               />
  • Apacheのconf/httpd.confを編集します
  修正前 修正後
修正 #LoadModule proxy_module modules/mod_proxy.so
#LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
修正 #LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
追加   ProxyPass /examples/websocket/ ws://localhost:8080/examples/websocket/
ProxyPassReverse /examples/websocket/ ws://localhost:8080/examples/websocket/
ProxyPass /examples/ ajp://localhost:8009/examples/
#ProxyPassReverse /examples/ ajp://localhost:8009/examples/

 

Apache Subversion 1.14.3

  • GitHub - nono303/win-svn: apache subversion windows builds with httpd modules and java hl から「Download ZIP」を選択して、モジュールをダウンロードします
    今回ダウンロードしたファイルはバージョン1.14.3です
  • ダウンロードしたファイル win-svn-master.zip を解凍します
  • vs17\x64\(depsフォルダ下も含む) の全dllを「C:\APPL01\Apache Software Foundation\Apache2.4.59\bin」の下にコピーします
    同名のファイルがある場合は上書きはしないようにします
    コピーしたファイルは以下のものです
libexpat.dll
libserf-2.dll
libsqlite3.dll
libsvn_client-1.dll
libsvn_delta-1.dll
libsvn_diff-1.dll
libsvn_fs-1.dll
libsvn_fs_fs-1.dll
libsvn_fs_util-1.dll
libsvn_fs_x-1.dll
libsvn_ra-1.dll
libsvn_repos-1.dll
libsvn_subr-1.dll
libsvn_wc-1.dll
libsvnjavahl-1.dll
zlib.dll
  • vs17\x64\ のmod_authz_svn.so、mod_dav_svn.soを「C:\APPL01\Apache Software Foundation\Apache2.4.59\modules」の下にコピーします
mod_authz_svn.so
mod_dav_svn.so
  • (※補足)Apache2.4.59/bin、Apache2.4.59/modulesの下にコピーせずに、vs17/x64を別場所に配置して、soを参照する設定を試しましたが、Apacheは起動するもののリポジトリブラウザでアクセスしようとすると、開けなかったのであきらめました
    Apacheのエラーログで何度もプロセスのリスタートがかかり何度目かにあきらめている感じでした
  • リポジトリ、パスワードファイルの作成は省略します
  • Apacheのconf/httpd.confを修正します
  修正前 修正後
修正 #LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule dav_module modules/mod_dav.so
LoadModule dav_fs_module modules/mod_dav_fs.so
追加   LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
追加   <Location /svn/svnrep01>
    SVNListParentPath on
    DAV svn
    SVNPath "C:/DATA01/SVN/SVNREP01"
    #Basic認証の設定
    AuthType Basic
    AuthName "Subversion repositories"
    AuthUserFile "C:/DATA01/SVN/SVNREP01/svnpasswd"
    Require valid-user
</Location>

 

項目 内容
SlikSVN Download SlikSVN Subversion clientからSlik-Subversion-1.14.2b-x64.zipをダウンロード
zip内のSlik-Subversion-1.14.2-x64.msiをUniversal Extractor 2で解凍したがmod_dav_svn.so、mod_authz_svn.soが無かったので断念
TortoiseSVN Downloads · TortoiseSVNからTortoiseSVN-1.14.7.29687-x64-svn-1.14.3.msiをダウンロード
Universal Extractor 2で解凍したがmod_dav_svn.so、mod_authz_svn.soが無かったので断念
VisualSVN Downloads | VisualSVNからApache-Subversion-1.14.3.zip、VisualSVN-Server-5.3.2-x64.msiをダウンロード
解凍後どちらもmod_dav_svn.so、mod_authz_svn.soが無かったので断念
Cirata Premier source for certified subversion binaries | CirataからWANdiscoSubversion_1.14.1-1_apache_24.exeをダウンロード
WANdiscoSubversion_1.14.1-1_apache_24\Apache2\modulesの下にmod_dav_svn.so、mod_authz_svn.soがあったが32bit版のためかロードできなかった
>cd C:\DATA01\TempDel\WANdiscoSubversion_1.14.1-1_apache_24\Apache2\bin
>httpd.exe -v
Server version: Apache/2.4.46 (Win32)
Server built: Oct 13 2020 13:37:23