概要
Windows用のRedmine 6.0.6自動インストーラーを作った
WindowsでRedmine 6.0.6を使う
Redmineを気軽に使いたい向きには、Bitnami Redmineというパッケージがあるのだが、近年ではWindowsはサポート対象外。最新は
bitnami-redmine-5.0.3-0-windows-x64-installer.exe (SHA256=f74ab8f1556fc4e0027500c9fc498bd702e87235e652933211b9961f27b0ae0b)
で止まっている。Linuxで使えというメッセージといえる。
Linuxのほうがパフォーマンスがよくバグが少ないなど技術的な理由なのか、BitnamiがBroadcom陣営に買収されたからなのか。そもそもWindowsの仕事はやりたくないのか。いずれにしても、現在では、最新のRedmineは気軽にWindowsでは使えない。
SQLやらRailsを個別に入れてきちんと動くのかもよく分からず、そもそも何を入れたら動くのか分からず、困っている人も多いのではと。
一発インストーラを作成した
AIに丸一日、100回ほど聞いて作りました。
AIはWindowsのコマンドプロンプトとPowerShellに弱い。なので、どうでもいい文法エラーがたくさん出る。素人の私が言うのもあれだが、エラー対処も場当たり的で、当段落を修正したら前段落と整合性がなくなって動かない等が頻発。pythonコードがすらすらと出てくる精度とは次元が異なる。AIありでもかなり苦労しました。
世界中を探しても類似がなかったので、Windowsをサーバーとして使いたい人は少数派なのだと思う。だが、中小規模では結構な需要があると思うんですよね。Windowsのほうが簡単だもんね。
今まで、GPLなどの無料リソースを使わせてもらう立場だったので提供側に回れたのはうれしいです。
インストール用プロンプトの説明

Windows Server 2025 のクリーンインストール直後に実行で一発動作を確認済み。使用するソフトのバージョンもおおよそ固定しているので(接続先サーバーが変わらない限り)数年間はこれでいけると思います。
SQLはAI推奨のPostgreSQLになっている。MySQLは相性が悪いからやめたほうがいいとのこと。
結論と問題
確かにこれでRedmineのadminログインまではたどり着ける。しかし、次のような問題がある。
・Redmineはクリーンインストール直後はトラッカー種類や各種設定が何もない。これらを手動で埋めていかないと使えない。Redmineの専門的な知識が必要。Redmine未経験者がこれをインストールしてもチケットを作るところまでたどり着けない。

・BitnamiはMySQLを使っているのでMySQLからPostgreSQLに変換作業が必要。これにはLinuxの変換ツールを使う必要があり手間がかかる。
・ひとまずのクリーンインストールはできているが、長期運用に耐えるような正しい設定になっているか不明。DB設定が中途半端で特定の操作をすると落ちるなどあるのかも?詳細は未検証
ということで、自分で作っておいてあれですが、Bitnamiからの乗り換えはBitnami謹製の 5.0.3にするのが無難と思います。
Bitnamiならば、トラッカー設定などは最初から入っていて、インストール直後にすぐに使える設定になっている。もしかしたら、そのような設定ファイルが頒布されているのかもしれないが。
ダウンロードと使い方
https://ytamagawa.com/wp-content/uploads/2025/08/rm606install.7z
使い方。これをダウンロードしてスクリプトのtxtをrminst.batなどに改名し、名前を付けて保存。admin権限のコマンドプロンプトで実行(PowerShellで実行ではない)する。なんだかんだでインストールには20分くらいかかるので待つ。RMのログイン画面が表示される。
途中でrubyのインストールだけは一回クリックが必要です。Rubyにはサイレント・インストールのオプションがないらしい。他は全自動。RMやRubyなどはコマンドプロンプトからスクリプトにより自動でダウンロードなので事前用意は不要。

プロンプトの全文
@echo off
setlocal EnableExtensions EnableDelayedExpansion
title Redmine 6.0.6 One-shot Installer (Windows)
rem ==========================
rem Global variables
rem ==========================
set “REDMINE_VERSION=6.0.6”
set “REDMINE_ROOT=C:\redmine”
set “REDMINE_DIR=%REDMINE_ROOT%\redmine-%REDMINE_VERSION%”
set “REDMINE_ZIP=%TEMP%\redmine-%REDMINE_VERSION%.zip”
set “REDMINE_URL=https://www.redmine.org/releases/redmine-%REDMINE_VERSION%.zip”
rem — Ruby 3.3.9-1 に固定 —
set “RUBY_DIR=C:\Ruby33-x64”
set “RUBY_DL=%REDMINE_ROOT%\rubyinstaller-devkit-3.3.9-1-x64.exe”
set “RUBY_URL=https://github.com/oneclick/rubyinstaller2/releases/download/RubyInstaller-3.3.9-1/rubyinstaller-devkit-3.3.9-1-x64.exe”
set “PG_PREFIX=C:\Program Files\PostgreSQL\16”
set “PG_PORT=5432”
set “PG_URL=https://get.enterprisedb.com/postgresql/postgresql-16.10-1-windows-x64.exe”
set “PG_EXE=%REDMINE_ROOT%\postgresql-16.10-1-windows-x64.exe”
set “PG_SUPERUSER=postgres”
set “PG_SUPERPASSWORD=Postgres234”
set “PG_DATADIR=%PG_PREFIX%\data”
set “PG_SERVICE=postgresql-x64-16”
set “RM_DBNAME=redmine”
set “RM_DBUSER=redmine”
set “RM_DBPASS=redminepass”
set “RM_DBHOST=127.0.0.1”
set “RM_DBENC=UTF8”
set “NSSM_URL=https://nssm.cc/release/nssm-2.24.zip”
set “NSSM_ZIP=%REDMINE_ROOT%\nssm-2.24.zip”
set “NSSM_DIR=%REDMINE_ROOT%\nssm\nssm-2.24”
set “NSSM_EXE=%NSSM_DIR%\win64\nssm.exe”
set “PUMA_SERVICE=RedminePuma”
set “CURL=curl.exe”
rem ==========================
rem 1/16 Create working folders
rem ==========================
echo [1/16] Create working folders
if not exist “%REDMINE_ROOT%” mkdir “%REDMINE_ROOT%” || (echo ERROR: cannot create “%REDMINE_ROOT%” & exit /b 1)
rem ==========================
rem 2/16 Check tools (curl / PowerShell)
rem ==========================
echo [2/16] Check tools ^(curl / PowerShell^)
where “%CURL%” >nul 2>nul || (echo ERROR: curl not found in PATH & exit /b 1)
where powershell >nul 2>nul || (echo ERROR: PowerShell not found & exit /b 1)
rem ==========================
rem 3/16 RubyInstaller+Devkit (download if missing)
rem ==========================
echo [3/16] RubyInstaller+Devkit ^(download if missing^)
if exist “%RUBY_DIR%\bin\ruby.exe” (
echo – Ruby already installed.
) else (
echo – Ruby is not installed at “%RUBY_DIR%”.
echo – Downloading RubyInstaller DevKit 3.4.5-1…
“%CURL%” -fL –retry 3 –retry-connrefused -o “%RUBY_DL%” “%RUBY_URL%” || (
echo ERROR: RubyInstaller download failed.
exit /b 1
)
)
rem ==========================
rem 4/16 Install Ruby silently to %RUBY_DIR%
rem ==========================
echo [4/16] Install Ruby silently to %RUBY_DIR%
if exist “%RUBY_DIR%\bin\ruby.exe” (
echo – Ruby already installed.
) else (
if not defined RUBY_DL (
for %%F in (“%REDMINE_ROOT%\rubyinstaller-devkit-*-x64.exe”) do set “RUBY_DL=%%~fF”
)
if not exist “%RUBY_DL%” (
echo ERROR: Ruby installer not found: “%RUBY_DL%”
exit /b 1
)
echo – Running RubyInstaller silently…
start “” /wait “%RUBY_DL%” /verysilent /norestart /dir=”%RUBY_DIR%” /tasks=”assocfiles,modpath”
if errorlevel 1 (
echo ERROR: RubyInstaller failed with code %errorlevel%
exit /b 1
)
if not exist “%RUBY_DIR%\bin\ruby.exe” (
echo ERROR: Ruby did not appear at “%RUBY_DIR%\bin\ruby.exe”
exit /b 1
)
)
rem ==========================
rem 5/16 Bootstrap MSYS2/Devkit (skip updates for reproducibility)
rem ==========================
echo [5/16] Skip MSYS2/Devkit update for reproducibility
set “MSYSROOT=%RUBY_DIR%\msys64”
set “BASH_EXE=%MSYSROOT%\usr\bin\bash.exe”
if exist “%BASH_EXE%” (
echo – MSYS2 detected under Ruby, but updates are disabled ^(pinned environment^).
) else (
echo – MSYS2 not found under Ruby. Skipping.
)
rem ==========================
rem 6/16 PostgreSQL 16.10-1 (download if missing)
rem ==========================
echo [6/16] PostgreSQL 16.10-1 ^(download if missing^)
if exist “%PG_EXE%” (
echo – PostgreSQL installer already downloaded.
) else (
echo – Downloading:
echo URL: %PG_URL%
echo OUT: %PG_EXE%
“%CURL%” -fL –retry 3 –retry-connrefused -o “%PG_EXE%” “%PG_URL%” || (
echo ERROR: PostgreSQL download failed.
exit /b 1
)
)
rem ==========================
rem 7/16 Silent install PostgreSQL (server + CLI)
rem ==========================
echo [7/16] Silent install PostgreSQL ^(server + CLI^)
sc query “%PG_SERVICE%” | find /I “STATE” >nul 2>nul
if %errorlevel%==0 (
echo – PostgreSQL service already exists. skipping install.
) else (
rem Preflight checks
net session >nul 2>&1 || (echo ERROR: Need Administrator rights to install PostgreSQL. & exit /b 1)
for /F “tokens=5” %%P in (‘netstat -ano ^| find “:5432 ” ^| find “LISTENING”‘) do set “PG_PID=%%P”
if defined PG_PID (
echo ERROR: TCP 5432 is in use by PID %PG_PID%.
tasklist /FI “PID eq %PG_PID%”
exit /b 1
)
if exist “%PG_DATADIR%\PG_VERSION” (
echo ERROR: Existing data directory found: “%PG_DATADIR%”
echo Remove or rename it before reinstall.
exit /b 1
)
echo – Running installer silently…
start “” /wait “%PG_EXE%” –mode unattended –unattendedmodeui minimal ^
–prefix “%PG_PREFIX%” ^
–datadir “%PG_DATADIR%” ^
–superpassword “%PG_SUPERPASSWORD%” ^
–servicename “%PG_SERVICE%” ^
–serverport %PG_PORT% ^
–install_runtimes 1
if errorlevel 1 (
echo ERROR: PostgreSQL install failed with code %errorlevel%
exit /b 1
)
)
rem ==========================
rem 8/16 Redmine %REDMINE_VERSION% (download/extract if needed)
rem ==========================
echo [8/16] Redmine %REDMINE_VERSION% ^(download/extract if needed^)
echo – TARGET DIR: %REDMINE_DIR%
echo – ZIP PATH : %REDMINE_ZIP%
echo – URL : %REDMINE_URL%
if exist “%REDMINE_DIR%\config\database.yml.example” (
echo – Redmine already extracted.
) else (
if exist “%REDMINE_ZIP%” (
echo – Redmine zip already downloaded.
) else (
echo – Downloading Redmine…
“%CURL%” -fL –retry 3 –retry-connrefused -o “%REDMINE_ZIP%” “%REDMINE_URL%” || (
echo ERROR: Redmine download failed.
exit /b 1
)
)
if not exist “%REDMINE_ROOT%” mkdir “%REDMINE_ROOT%” || (echo ERROR: cannot create %REDMINE_ROOT% & exit /b 1)
powershell -NoLogo -NoProfile -Command ^
“Expand-Archive -LiteralPath ‘%REDMINE_ZIP%’ -DestinationPath ‘%REDMINE_ROOT%’ -Force” || (
echo ERROR: Expand-Archive failed.
exit /b 1
)
if not exist “%REDMINE_DIR%” (
echo ERROR: Expected folder “%REDMINE_DIR%” not found after extraction.
dir /b “%REDMINE_ROOT%”
exit /b 1
)
)
rem ==========================
rem 9/16 Create DB and user (UTF-8 safe; idempotent)
rem ==========================
echo [9/16] Create DB and user ^(UTF-8 safe; idempotent^)
set “PG_BIN=%PG_PREFIX%\bin”
if not exist “%PG_BIN%\psql.exe” (
echo ERROR: psql not found at “%PG_BIN%\psql.exe”
exit /b 1
)
set “PGPASSWORD=%PG_SUPERPASSWORD%”
set “PGCLIENTENCODING=UTF8”
rem Create role if not exists (idempotent)
set “SQL_ROLE=%TEMP%\create_role.sql”
> “%SQL_ROLE%” echo DO $$
>>”%SQL_ROLE%” echo BEGIN
>>”%SQL_ROLE%” echo IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = ‘%RM_DBUSER%’) THEN
>>”%SQL_ROLE%” echo CREATE ROLE %RM_DBUSER% LOGIN PASSWORD ‘%RM_DBPASS%’;
>>”%SQL_ROLE%” echo END IF;
>>”%SQL_ROLE%” echo END
>>”%SQL_ROLE%” echo $$;
“%PG_BIN%\psql.exe” -h “%RM_DBHOST%” -U “%PG_SUPERUSER%” -p %PG_PORT% -d postgres -v ON_ERROR_STOP=1 -f “%SQL_ROLE%” || (
del “%SQL_ROLE%” 2>nul
set “PGPASSWORD=” & set “PGCLIENTENCODING=”
echo ERROR: role creation failed
exit /b 1
)
del “%SQL_ROLE%” 2>nul
rem ★ 既存ロールでも必ずパスワードを RM_DBPASS に統一する
set “SQL_ROLE_FORCE=%TEMP%\alter_role.sql”
> “%SQL_ROLE_FORCE%” echo ALTER ROLE %RM_DBUSER% WITH LOGIN PASSWORD ‘%RM_DBPASS%’;
“%PG_BIN%\psql.exe” -h “%RM_DBHOST%” -U “%PG_SUPERUSER%” -p %PG_PORT% -d postgres -v ON_ERROR_STOP=1 -f “%SQL_ROLE_FORCE%” || (
del “%SQL_ROLE_FORCE%” 2>nul
set “PGPASSWORD=” & set “PGCLIENTENCODING=”
echo ERROR: alter role failed
exit /b 1
)
del “%SQL_ROLE_FORCE%” 2>nul
rem Check DB existence in a robust way
set “DBCHK=%TEMP%\db_exists.out”
“%PG_BIN%\psql.exe” -h “%RM_DBHOST%” -U “%PG_SUPERUSER%” -p %PG_PORT% -d postgres -t -A -v ON_ERROR_STOP=1 ^
-c “SELECT CASE WHEN EXISTS (SELECT 1 FROM pg_database WHERE datname=’%RM_DBNAME%’) THEN ‘EXISTS’ ELSE ‘MISSING’ END;” > “%DBCHK%” 2>nul
if errorlevel 1 (
del “%DBCHK%” 2>nul
echo ERROR: failed to check database existence
set “PGCLIENTENCODING=” & set “PGPASSWORD=”
exit /b 1
)
set “DBSTATE=”
set /p DBSTATE=<“%DBCHK%” del “%DBCHK%” 2>nul
if /I “%DBSTATE%”==”EXISTS” (
echo – Database %RM_DBNAME% already exists. skipping create.
) else (
echo – Creating database %RM_DBNAME% …
“%PG_BIN%\createdb.exe” -h “%RM_DBHOST%” -U “%PG_SUPERUSER%” -p %PG_PORT% -E %RM_DBENC% -O %RM_DBUSER% “%RM_DBNAME%” || (
echo ERROR: database creation failed
set “PGCLIENTENCODING=” & set “PGPASSWORD=”
exit /b 1
)
)
rem ★ DB の所有者を redmine に明示(既に所有でも成功)
“%PG_BIN%\psql.exe” -h “%RM_DBHOST%” -U “%PG_SUPERUSER%” -p %PG_PORT% -d postgres -v ON_ERROR_STOP=1 ^
-c “ALTER DATABASE %RM_DBNAME% OWNER TO %RM_DBUSER%;” || (
echo ERROR: alter database owner failed
set “PGCLIENTENCODING=” & set “PGPASSWORD=”
exit /b 1
)
rem ★ redmine 資格情報での実接続テスト(ここで落ちるなら先へ進まない)
set “PGPASSWORD=%RM_DBPASS%”
“%PG_BIN%\psql.exe” -h “%RM_DBHOST%” -U “%RM_DBUSER%” -p %PG_PORT% -d “%RM_DBNAME%” -t -A -c “select current_user||’@’||current_database();” || (
echo ERROR: redmine user cannot connect with provided password.
set “PGCLIENTENCODING=” & set “PGPASSWORD=”
exit /b 1
)
set “PGCLIENTENCODING=” & set “PGPASSWORD=”
rem ==========================
rem 10/16 Write config/database.yml
rem ==========================
echo [10/16] Write config/database.yml
set “DBYML=%REDMINE_DIR%\config\database.yml”
powershell -NoLogo -NoProfile -Command “$lines=@(‘production:’,’ adapter: postgresql’,’ database: %RM_DBNAME%’,’ host: %RM_DBHOST%’,’ port: %PG_PORT%’,’ username: %RM_DBUSER%’,’ password: %RM_DBPASS%’,’ encoding: %RM_DBENC%’,’ sslmode: disable’); $enc=New-Object System.Text.UTF8Encoding($false); [IO.File]::WriteAllLines(‘%DBYML%’, $lines, $enc)” || (
echo ERROR: write database.yml failed
exit /b 1
)
rem ==========================
rem 11/16 Ensure Gemfile.local (link only; no puma ops here)
rem ==========================
echo [11/16] Ensure Gemfile.local
set “GEMFILE=%REDMINE_DIR%\Gemfile”
set “GEMLOCAL=%REDMINE_DIR%\Gemfile.local”
if not exist “%GEMLOCAL%” type NUL > “%GEMLOCAL%”
rem Gemfile に eval_gemfile が無ければ追加
findstr /C:”eval_gemfile ‘Gemfile.local'” “%GEMFILE%” >nul 2>&1 || (
echo eval_gemfile ‘Gemfile.local’>>”%GEMFILE%”
)
echo – Linked Gemfile.local from Gemfile
rem ==========================
rem 12/16 Install gems (vendor/bundle; production only)
rem ==========================
echo [12/16] Install gems ^(vendor/bundle; production only^)
cd /d “%REDMINE_DIR%” || (echo ERROR: cd failed & exit /b 1)
rem — Ensure Redmine ZIP exists (for Gemfile restore) —
if not exist “%REDMINE_ZIP%” (
echo – Redmine zip not found. Downloading…
“%CURL%” -fL –retry 3 –retry-connrefused -o “%REDMINE_ZIP%” “%REDMINE_URL%” || (
echo ERROR: Redmine download failed.
exit /b 1
)
)
rem — Restore pristine Gemfile from ZIP (no full re-extract) —
set “GEMFILE=%REDMINE_DIR%\Gemfile”
set “GEMLOCAL=%REDMINE_DIR%\Gemfile.local”
powershell -NoLogo -NoProfile -Command ^
“$zip=’%REDMINE_ZIP%’; $dest=’%GEMFILE%’; $ver=’%REDMINE_VERSION%’;” ^
“Add-Type -AssemblyName System.IO.Compression.FileSystem;” ^
“$z=[IO.Compression.ZipFile]::OpenRead($zip);” ^
“try {” ^
” $entry=$z.Entries | Where-Object { $_.FullName -like (‘redmine-‘+$ver+’/Gemfile’) };” ^
” if(-not $entry){ Write-Error ‘Gemfile entry not found in zip.’; exit 1 }” ^
” $fs=[IO.File]::Open($dest,[IO.FileMode]::Create,[IO.FileAccess]::Write,[IO.FileShare]::None);” ^
” try { $entry.Open().CopyTo($fs) } finally { $fs.Dispose() }” ^
“} finally { $z.Dispose() }” || (
echo ERROR: failed to restore Gemfile from zip
exit /b 1
)
rem — Dedupe & pin puma AFTER Gemfile restore —
powershell -NoLogo -NoProfile -Command ^
“$gf=’%GEMFILE%’; $gl=’%GEMLOCAL%’; $enc=New-Object System.Text.UTF8Encoding($false);” ^
“$rx = ‘^\s*gem\s+[”^””]puma[”^””]’;” ^
“function Sanitize([string]$path) {” ^
” if (Test-Path -LiteralPath $path) {” ^
” $t = Get-Content -LiteralPath $path -Raw -ErrorAction SilentlyContinue;” ^
” if ($null -eq $t) { $lines = @() } else { $lines = ($t -split \”`r?`n\”) | Where-Object { $_ -notmatch $rx } }” ^
” [IO.File]::WriteAllLines($path, [string[]]$lines, $enc)” ^
” }” ^
“}” ^
“Sanitize $gf; Sanitize $gl; ” ^
“Add-Content -LiteralPath $gl -Value \”gem ‘puma’, ‘6.6.1’, group: :production\”” || (
echo ERROR: failed to finalize puma entries
exit /b 1
)
echo – Ensured single puma entry in Gemfile.local (production)
rem — Ensure MSYS2 packages for native gems (psych/libyaml) —
set “RIDK=%RUBY_DIR%\bin\ridk.cmd”
if exist “%RIDK%” (
call “%RIDK%” exec bash -lc “pacman -Sy –noconfirm && pacman -S –noconfirm –needed mingw-w64-ucrt-x86_64-libyaml mingw-w64-ucrt-x86_64-pkgconf mingw-w64-ucrt-x86_64-toolchain” || (
echo ERROR: MSYS2 packages install failed & exit /b 1
)
) else (
echo WARNING: ridk.cmd not found; native gems may fail to compile.
)
rem — Make pkg-config/libyaml visible during build —
set “OLDPATH_BUND=%PATH%”
set “PATH=%RUBY_DIR%\msys64\ucrt64\bin;%RUBY_DIR%\msys64\usr\bin;%PATH%”
set “PKG_CONFIG_PATH=%RUBY_DIR%\msys64\ucrt64\lib\pkgconfig”
rem — Bundler settings & cleanup (過去の deployment/frozen を解除) —
call “%RUBY_DIR%\bin\bundle.bat” config unset deployment >nul 2>&1
call “%RUBY_DIR%\bin\bundle.bat” config unset frozen >nul 2>&1
call “%RUBY_DIR%\bin\bundle.bat” config set deployment false
call “%RUBY_DIR%\bin\bundle.bat” config set frozen false
call “%RUBY_DIR%\bin\bundle.bat” config set clean true
call “%RUBY_DIR%\bin\bundle.bat” config set path “vendor/bundle” || (echo ERROR: bundle config path failed & exit /b 1)
call “%RUBY_DIR%\bin\bundle.bat” config set without “development test” || (echo ERROR: bundle config without failed & exit /b 1)
if exist “vendor\cache” rmdir /S /Q “vendor\cache” >nul 2>&1
echo – Installing with resolved dependencies…
call “%RUBY_DIR%\bin\bundle.bat” install –jobs 4 –retry 3 || (echo ERROR: bundle install failed & exit /b 1)
rem — Ensure puma is really present (production) —
call “%RUBY_DIR%\bin\bundle.bat” show puma >nul 2>&1
if errorlevel 1 (
echo – Puma not found; adding for production…
call “%RUBY_DIR%\bin\bundle.bat” add puma –skip-install –group production || (echo ERROR: bundle add puma failed & exit /b 1)
call “%RUBY_DIR%\bin\bundle.bat” install –jobs 4 –retry 3 || (echo ERROR: bundle install for puma failed & exit /b 1)
)
rem Add Windows platform to the lockfile (does not change versions)
call “%RUBY_DIR%\bin\bundle.bat” lock –add-platform x64-mingw-ucrt >nul 2>&1
rem Rebuild vendor/cache
call “%RUBY_DIR%\bin\bundle.bat” package || (echo ERROR: bundle package failed & exit /b 1)
rem deployment/frozen を最後に戻す(以後は変更不可の固定運用)
call “%RUBY_DIR%\bin\bundle.bat” config set deployment true >nul 2>&1
call “%RUBY_DIR%\bin\bundle.bat” config set frozen true >nul 2>&1
rem — Extra: 強制的にサービス環境向けに vendor/bundle に固定 —
call “%RUBY_DIR%\bin\bundle.bat” config set –local path “vendor/bundle”
call “%RUBY_DIR%\bin\bundle.bat” config set –local without “development test”
call “%RUBY_DIR%\bin\bundle.bat” config set –local deployment true
call “%RUBY_DIR%\bin\bundle.bat” install –jobs 4 –retry 3 || (
echo ERROR: bundle install for service environment failed & exit /b 1
)
rem — Restore PATH after native build —
if defined OLDPATH_BUND set “PATH=%OLDPATH_BUND%”
rem ==========================
rem 13/16 DB migrate & assets precompile
rem ==========================
echo [13/16] DB migrate ^& assets precompile
set “OLDPATH=%PATH%”
rem Use Ruby only here (avoid mixing libpq from server)
set “PATH=%RUBY_DIR%\bin;%PATH%”
rem ★ TLS を無効化して切り分け/恒久回避
set “PGSSLMODE=disable”
cd /d “%REDMINE_DIR%” || (echo ERROR: cd failed & set “PATH=%OLDPATH%” & exit /b 1)
call “%RUBY_DIR%\bin\bundle.bat” exec rake generate_secret_token RAILS_ENV=production || (echo ERROR: generate_secret_token failed & set “PATH=%OLDPATH%” & exit /b 1)
call “%RUBY_DIR%\bin\bundle.bat” exec rake db:migrate RAILS_ENV=production || (echo ERROR: db:migrate failed & set “PATH=%OLDPATH%” & exit /b 1)
call “%RUBY_DIR%\bin\bundle.bat” exec rake assets:precompile RAILS_ENV=production || (echo ERROR: assets:precompile failed & set “PATH=%OLDPATH%” & exit /b 1)
set “PATH=%OLDPATH%”
rem ==========================
rem 14/16 Get/prepare NSSM
rem ==========================
echo [14/16] Get/prepare NSSM
if exist “%NSSM_EXE%” (
echo – NSSM already present.
) else (
echo – Downloading NSSM 2.24…
“%CURL%” -fL –retry 3 –retry-connrefused -o “%NSSM_ZIP%” “%NSSM_URL%” || (echo ERROR: NSSM download failed & exit /b 1)
if not exist “%REDMINE_ROOT%\nssm” mkdir “%REDMINE_ROOT%\nssm”
powershell -NoLogo -NoProfile -Command “Expand-Archive -LiteralPath ‘%NSSM_ZIP%’ -DestinationPath ‘%REDMINE_ROOT%\nssm’ -Force” || (
echo ERROR: Expand-Archive NSSM failed
exit /b 1
)
if not exist “%NSSM_EXE%” (
echo ERROR: NSSM exe not found at “%NSSM_EXE%”
exit /b 1
)
)
rem ==========================
rem 15/16 Register/Configure Puma service
rem ==========================
echo [15/16] Register/Configure Puma service
rem — ラッパー BAT を作成(環境変数をここで完結)—
set “RUNBAT=%REDMINE_DIR%\run_puma_service.bat”
> “%RUNBAT%” echo @echo off
>> “%RUNBAT%” echo setlocal EnableExtensions
>> “%RUNBAT%” echo cd /d “%REDMINE_DIR%”
>> “%RUNBAT%” echo set “RAILS_ENV=production”
>> “%RUNBAT%” echo set “BUNDLE_WITHOUT=development:test”
>> “%RUNBAT%” echo set “BUNDLE_DEPLOYMENT=1”
>> “%RUNBAT%” echo set “BUNDLE_FROZEN=1”
>> “%RUNBAT%” echo set “BUNDLE_PATH=vendor/bundle”
>> “%RUNBAT%” echo set “BUNDLE_GEMFILE=%REDMINE_DIR%\Gemfile”
>> “%RUNBAT%” echo set “PATH=%RUBY_DIR%\bin;%PG_PREFIX%\bin;%%PATH%%”
>> “%RUNBAT%” echo if not exist “log” mkdir “log”
>> “%RUNBAT%” echo call “%RUBY_DIR%\bin\bundle.bat” exec puma -C config\puma.rb
rem — ログ用ディレクトリ —
if not exist “%REDMINE_DIR%\log” mkdir “%REDMINE_DIR%\log”
if not exist “%REDMINE_DIR%\tmp” mkdir “%REDMINE_DIR%\tmp”
if not exist “%REDMINE_DIR%\tmp\pids” mkdir “%REDMINE_DIR%\tmp\pids”
if not exist “%REDMINE_DIR%\tmp\sockets” mkdir “%REDMINE_DIR%\tmp\sockets”
rem — puma.rb を上書き(必要最小限・フォアグラウンドで実行)—
copy /Y “%REDMINE_DIR%\config\puma.rb” “%REDMINE_DIR%\config\puma.rb.bak” >nul 2>nul
> “%REDMINE_DIR%\config\puma.rb” echo environment ENV.fetch(“RAILS_ENV”,”production”)
>> “%REDMINE_DIR%\config\puma.rb” echo workers 0
>> “%REDMINE_DIR%\config\puma.rb” echo threads_count = Integer(ENV.fetch(“RAILS_MAX_THREADS”,”5″))
>> “%REDMINE_DIR%\config\puma.rb” echo threads threads_count, threads_count
>> “%REDMINE_DIR%\config\puma.rb” echo bind “tcp://127.0.0.1:3000”
>> “%REDMINE_DIR%\config\puma.rb” echo pidfile “tmp/pids/puma.pid”
>> “%REDMINE_DIR%\config\puma.rb” echo state_path “tmp/pids/puma.state”
>> “%REDMINE_DIR%\config\puma.rb” echo stdout_redirect “log/puma.stdout.log”,”log/puma.stderr.log”, true
>> “%REDMINE_DIR%\config\puma.rb” echo plugin :tmp_restart
rem — NSSM サービス作成/再設定 —
sc query “%PUMA_SERVICE%” >nul 2>nul || (
“%NSSM_EXE%” install “%PUMA_SERVICE%” “%SystemRoot%\System32\cmd.exe”
if errorlevel 1 (echo ERROR: nssm install failed & exit /b 1)
)
rem ★ 重要:必ず Application=cmd.exe にする(旧設定の ruby.exe を上書き)
“%NSSM_EXE%” set “%PUMA_SERVICE%” Application “%SystemRoot%\System32\cmd.exe”
rem パラメータは /c “runbat” の形に(正しいクォート)
“%NSSM_EXE%” set “%PUMA_SERVICE%” AppParameters /c “\”%RUNBAT%\””
“%NSSM_EXE%” set “%PUMA_SERVICE%” AppDirectory “%REDMINE_DIR%”
“%NSSM_EXE%” set “%PUMA_SERVICE%” AppStdout “%REDMINE_DIR%\log\puma.nssm.out.log”
“%NSSM_EXE%” set “%PUMA_SERVICE%” AppStderr “%REDMINE_DIR%\log\puma.nssm.err.log”
“%NSSM_EXE%” set “%PUMA_SERVICE%” AppNoConsole 1
“%NSSM_EXE%” set “%PUMA_SERVICE%” AppStopMethodConsole 5000
rem ==========================
rem 16/16 Start service and open browser
rem ==========================
echo [16/16] Start service and open browser
rem 既存インスタンス停止(無視して続行)
“%NSSM_EXE%” stop “%PUMA_SERVICE%” >nul 2>nul
rem 起動
“%NSSM_EXE%” start “%PUMA_SERVICE%” || (
echo ERROR: failed to start service
goto :_svc_diag
)
rem ステータス表示
sc query “%PUMA_SERVICE%”
start “” “http://127.0.0.1:3000/”
echo DONE. Redmine should be at: http://127.0.0.1:3000/
echo Default login: admin / admin
goto :eof
:_svc_diag
echo — NSSM / Puma diagnostics (last 200 lines) —
powershell -NoLogo -NoProfile -Command ^
“foreach($f in @(‘%REDMINE_DIR%\log\puma.nssm.err.log’,’%REDMINE_DIR%\log\puma.nssm.out.log’,’%REDMINE_DIR%\log\puma.stderr.log’,’%REDMINE_DIR%\log\puma.stdout.log’)){ if(Test-Path $f){Write-Host ‘— ‘ $f ‘ —‘; Get-Content -LiteralPath $f -Tail 200 } }”
exit /b 1
実行すると下記のような進捗が出る
このような画面が出る。

[1/16] Create working folders
[2/16] Check tools (curl / PowerShell)
[3/16] RubyInstaller+Devkit (download if missing)
– Ruby is not installed at “C:\Ruby33-x64”. – Downloading RubyInstaller DevKit 3.4.5-1… % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 –:–:– 0:00:02 –:–:– 0 100 142M 100 142M 0 0 15.8M 0 0:00:08 0:00:08 –:–:– 26.3M
[4/16] Install Ruby silently to C:\Ruby33-x64
– Running RubyInstaller silently…
[5/16] Skip MSYS2/Devkit update for reproducibility
– MSYS2 detected under Ruby, but updates are disabled (pinned environment).
[6/16] PostgreSQL 16.10-1 (download if missing)
– Downloading:
URL: https://get.enterprisedb.com/postgresql/postgresql-16.10-1-windows-x64.exe
OUT: C:\redmine\postgresql-16.10-1-windows-x64.exe
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 340M 100 340M 0 0 21.9M 0 0:00:15 0:00:15 –:–:– 61.6M
[7/16] Silent install PostgreSQL (server + CLI)
– Running installer silently…
[8/16] Redmine 6.0.6 (download/extract if needed)
– TARGET DIR: C:\redmine\redmine-6.0.6
– ZIP PATH : C:\Users\ADMINI~1\AppData\Local\Temp\1\redmine-6.0.6.zip
– URL : https://www.redmine.org/releases/redmine-6.0.6.zip
– Downloading Redmine…
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 5210k 100 5210k 0 0 1318k 0 0:00:03 0:00:03 –:–:– 1318k
[9/16] Create DB and user (UTF-8 safe; idempotent)
DO
ALTER ROLE
– Creating database redmine …
ALTER DATABASE
redmine@redmine
[10/16] Write config/database.yml
[11/16] Ensure Gemfile.local
– Linked Gemfile.local from Gemfile
[12/16] Install gems (vendor/bundle; production only)
– Ensured single puma entry in Gemfile.local (production)
MSYS2 is starting for the first time. Executing the initial setup.
Copying skeleton files.
These files are for the users to personalise their msys2 experience.
They will never be overwritten nor automatically updated.
‘C:\WINDOWS\system32\drivers\etc\hosts’ -> ‘/etc/hosts’
‘C:\WINDOWS\system32\drivers\etc\protocol’ -> ‘/etc/protocols’
‘C:\WINDOWS\system32\drivers\etc\services’ -> ‘/etc/services’
‘C:\WINDOWS\system32\drivers\etc\networks’ -> ‘/etc/networks’
gpg: /etc/pacman.d/gnupg/trustdb.gpg: trustdb created
gpg: no ultimately trusted keys found
gpg: starting migration from earlier GnuPG versions
gpg: porting secret keys from ‘/etc/pacman.d/gnupg/secring.gpg’ to gpg-agent
gpg: migration succeeded
==> Generating pacman master key. This may take some time.
gpg: Generating pacman keyring master key…
gpg: directory ‘/etc/pacman.d/gnupg/openpgp-revocs.d’ created
gpg: revocation certificate stored as ‘/etc/pacman.d/gnupg/openpgp-revocs.d/0B23DC86FFC94D356FFBAC35A213C3B947379FD5.rev’
gpg: Done
==> Updating trust database…
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
==> Appending keys from msys2.gpg…
==> Locally signing trusted keys in keyring…
-> Locally signed 5 keys.
==> Importing owner trust values…
gpg: setting ownertrust to 4
gpg: setting ownertrust to 4
gpg: setting ownertrust to 4
gpg: setting ownertrust to 4
gpg: setting ownertrust to 4
==> Disabling revoked keys in keyring…
-> Disabled 4 keys.
==> Updating trust database…
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 5 trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: depth: 1 valid: 5 signed: 7 trust: 0-, 0q, 0n, 5m, 0f, 0u
gpg: depth: 2 valid: 4 signed: 2 trust: 4-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2025-12-16
gpg: error retrieving ‘alexey.pawlow@gmail.com’ via WKD: No data
gpg: error reading key: No data
gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
gpg: key F40D263ECA25678A: “Alexey Pavlov (Alexpux) <alexey.pawlow@gmail.com>” not changed
gpg: Total number processed: 1
gpg: unchanged: 1
gpg: error retrieving ‘david.macek.0@gmail.com’ via WKD: No data
gpg: error reading key: No data
gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
gpg: key 790AE56A1D3CFDDC: “David Macek (MSYS2 master key) <david.macek.0@gmail.com>” not changed
gpg: Total number processed: 1
gpg: unchanged: 1
gpg: error retrieving ‘martellmalone@gmail.com’ via WKD: No data
gpg: error reading key: No data
gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
gpg: key DA7EF2ABAEEA755C: “Martell Malone (martell) <martellmalone@gmail.com>” not changed
gpg: Total number processed: 1
gpg: unchanged: 1
gpg: error retrieving ‘reiter.christoph@gmail.com’ via WKD: No data
gpg: error reading key: No data
gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
gpg: key 755B8182ACD22879: “Christoph Reiter (MSYS2 master key) <reiter.christoph@gmail.com>” not changed
gpg: Total number processed: 1
gpg: unchanged: 1
gpg: error retrieving ‘icquinteiro@gmail.com’ via WKD: No data
gpg: error reading key: No data
gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
gpg: key 9F418C233E652008: “Ignacio Casal Quinteiro <icquinteiro@gmail.com>” not changed
gpg: Total number processed: 1
gpg: unchanged: 1
gpg: error retrieving ‘mingw.android@gmail.com’ via WKD: No data
gpg: error reading key: No data
gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
gpg: key BBE514E53E0D0813: “Ray Donnelly (MSYS2 Developer – master key) <mingw.android@gmail.com>” not changed
gpg: Total number processed: 1
gpg: unchanged: 1
gpg: error retrieving ‘alexpux@gmail.com’ via WKD: No data
gpg: error reading key: No data
gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
gpg: key 5F92EFC1A47D45A1: “Alexey Pavlov (Alexpux) <alexpux@gmail.com>” not changed
gpg: Total number processed: 1
gpg: unchanged: 1
gpg: error retrieving ‘david.macek.0@gmail.com’ via WKD: No data
gpg: error reading key: No data
gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
gpg: key 974C8BE49078F532: “David Macek <david.macek.0@gmail.com>” not changed
gpg: Total number processed: 1
gpg: unchanged: 1
gpg: error retrieving ‘reiter.christoph@gmail.com’ via WKD: No data
gpg: error reading key: No data
gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
gpg: key FA11531AA0AA7F57: “Christoph Reiter (MSYS2 development key) <reiter.christoph@gmail.com>” not changed
gpg: Total number processed: 1
gpg: unchanged: 1
gpg: error retrieving ‘me@martellmalone.com’ via WKD: Unknown host
gpg: error reading key: Unknown host
gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
gpg: key 794DCF97F93FC717: “Martell Malone (martell) <me@martellmalone.com>” not changed
gpg: Total number processed: 1
gpg: unchanged: 1
gpg: error retrieving ‘martellmalone@gmail.com’ via WKD: No data
gpg: error reading key: No data
gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
gpg: key D595C9AB2C51581E: “Martell Malone (MSYS2 Developer) <martellmalone@gmail.com>” not changed
gpg: Total number processed: 1
gpg: unchanged: 1
gpg: error retrieving ‘mingw.android@gmail.com’ via WKD: No data
gpg: error reading key: No data
gpg: refreshing 1 key from hkps://keyserver.ubuntu.com
gpg: key 4DF3B7664CA56930: “Ray Donnelly (MSYS2 Developer) <mingw.android@gmail.com>” not changed
gpg: Total number processed: 1
gpg: unchanged: 1
Initial setup complete. MSYS2 is now ready to use.
:: Synchronizing package databases…
clangarm64 485.2 KiB 108 KiB/s 00:05 [#######################################] 100%
mingw32 124.6 KiB 46.7 KiB/s 00:03 [#######################################] 100%
mingw64 467.4 KiB 168 KiB/s 00:03 [#######################################] 100%
ucrt64 511.0 KiB 140 KiB/s 00:04 [#######################################] 100%
clang64 497.5 KiB 163 KiB/s 00:03 [#######################################] 100%
msys 401.0 KiB 760 KiB/s 00:01 [#######################################] 100%
warning: mingw-w64-ucrt-x86_64-pkgconf-1~2.5.1-1 is up to date — skipping
warning: mingw-w64-ucrt-x86_64-make-4.4.1-3 is up to date — skipping
warning: mingw-w64-ucrt-x86_64-pkgconf-1~2.5.1-1 is up to date — skipping
:: There are 11 members in group mingw-w64-ucrt-x86_64-toolchain:
:: Repository ucrt64
1) mingw-w64-ucrt-x86_64-binutils 2) mingw-w64-ucrt-x86_64-crt-git 3) mingw-w64-ucrt-x86_64-gcc
4) mingw-w64-ucrt-x86_64-gdb 5) mingw-w64-ucrt-x86_64-gdb-multiarch 6) mingw-w64-ucrt-x86_64-headers-git
7) mingw-w64-ucrt-x86_64-libmangle-git 8) mingw-w64-ucrt-x86_64-libwinpthread 9) mingw-w64-ucrt-x86_64-tools-git
10) mingw-w64-ucrt-x86_64-winpthreads 11) mingw-w64-ucrt-x86_64-winstorecompat-git
Enter a selection (default=all):
resolving dependencies…
looking for conflicting packages…
Packages (29) mingw-w64-ucrt-x86_64-bzip2-1.0.8-3 mingw-w64-ucrt-x86_64-expat-2.7.1-2
mingw-w64-ucrt-x86_64-gcc-libs-15.2.0-8 mingw-w64-ucrt-x86_64-libffi-3.5.1-1
mingw-w64-ucrt-x86_64-libsystre-1.0.2-1 mingw-w64-ucrt-x86_64-libtre-0.9.0-1
mingw-w64-ucrt-x86_64-mpdecimal-4.0.1-1 mingw-w64-ucrt-x86_64-ncurses-6.5.20241228-3
mingw-w64-ucrt-x86_64-openssl-3.5.2-1 mingw-w64-ucrt-x86_64-python-3.12.11-1
mingw-w64-ucrt-x86_64-readline-8.3.001-1 mingw-w64-ucrt-x86_64-sqlite3-3.50.4-1
mingw-w64-ucrt-x86_64-tcl-8.6.16-1 mingw-w64-ucrt-x86_64-termcap-1.3.1-7
mingw-w64-ucrt-x86_64-tk-8.6.16-1 mingw-w64-ucrt-x86_64-xxhash-0.8.3-1 mingw-w64-ucrt-x86_64-xz-5.8.1-2
mingw-w64-ucrt-x86_64-binutils-2.45-2 mingw-w64-ucrt-x86_64-crt-git-13.0.0.r124.g2717de84e-1
mingw-w64-ucrt-x86_64-gcc-15.2.0-8 mingw-w64-ucrt-x86_64-gdb-16.3-1
mingw-w64-ucrt-x86_64-gdb-multiarch-16.3-1 mingw-w64-ucrt-x86_64-headers-git-13.0.0.r124.g2717de84e-1
mingw-w64-ucrt-x86_64-libmangle-git-13.0.0.r124.g2717de84e-1
mingw-w64-ucrt-x86_64-libwinpthread-13.0.0.r124.g2717de84e-1 mingw-w64-ucrt-x86_64-libyaml-0.2.5-2
mingw-w64-ucrt-x86_64-tools-git-13.0.0.r124.g2717de84e-1
mingw-w64-ucrt-x86_64-winpthreads-13.0.0.r124.g2717de84e-1
mingw-w64-ucrt-x86_64-winstorecompat-git-13.0.0.r124.g2717de84e-1
Total Download Size: 118.10 MiB
Total Installed Size: 867.83 MiB
Net Upgrade Size: 351.14 MiB
:: Proceed with installation? [Y/n]
:: Retrieving packages…
mingw-w64-ucrt-x86_64-openssl-3.5.2-1-any 7.9 MiB 3.80 MiB/s 00:02 [#######################################] 100%
mingw-w64-ucrt-x86_64-headers-git-13.0… 6.4 MiB 2.05 MiB/s 00:03 [#######################################] 100%
mingw-w64-ucrt-x86_64-gcc-15.2.0-8-any 46.6 MiB 14.4 MiB/s 00:03 [#######################################] 100%
mingw-w64-ucrt-x86_64-gdb-multiarch-16… 6.3 MiB 1315 KiB/s 00:05 [#######################################] 100%
mingw-w64-ucrt-x86_64-crt-git-13.0.0.r… 4.6 MiB 2.74 MiB/s 00:02 [#######################################] 100%
mingw-w64-ucrt-x86_64-gdb-16.3-1-any 4.6 MiB 1889 KiB/s 00:03 [#######################################] 100%
mingw-w64-ucrt-x86_64-sqlite3-3.50.4-1-any 2.3 MiB 4.34 MiB/s 00:01 [#######################################] 100%
mingw-w64-ucrt-x86_64-tk-8.6.16-1-any 2.0 MiB 3.13 MiB/s 00:01 [#######################################] 100%
mingw-w64-ucrt-x86_64-gcc-libs-15.2.0-… 1050.1 KiB 1339 KiB/s 00:01 [#######################################] 100%
mingw-w64-ucrt-x86_64-xz-5.8.1-2-any 866.4 KiB 1638 KiB/s 00:01 [#######################################] 100%
mingw-w64-ucrt-x86_64-readline-8.3.001… 500.2 KiB 609 KiB/s 00:01 [#######################################] 100%
mingw-w64-ucrt-x86_64-tools-git-13.0.0… 337.5 KiB 724 KiB/s 00:00 [#######################################] 100%
mingw-w64-ucrt-x86_64-expat-2.7.1-2-any 164.9 KiB 346 KiB/s 00:00 [#######################################] 100%
mingw-w64-ucrt-x86_64-mpdecimal-4.0.1-… 154.9 KiB 329 KiB/s 00:00 [#######################################] 100%
mingw-w64-ucrt-x86_64-xxhash-0.8.3-1-any 118.7 KiB 212 KiB/s 00:01 [#######################################] 100%
mingw-w64-ucrt-x86_64-ncurses-6.5.2024… 1747.6 KiB 318 KiB/s 00:05 [#######################################] 100%
mingw-w64-ucrt-x86_64-libyaml-0.2.5-2-any 85.1 KiB 173 KiB/s 00:00 [#######################################] 100%
mingw-w64-ucrt-x86_64-python-3.12.11-1-any 23.2 MiB 1887 KiB/s 00:13 [#######################################] 100%
mingw-w64-ucrt-x86_64-libtre-0.9.0-1-any 79.0 KiB 171 KiB/s 00:00 [#######################################] 100%
mingw-w64-ucrt-x86_64-tcl-8.6.16-1-any 2.7 MiB 341 KiB/s 00:08 [#######################################] 100%
mingw-w64-ucrt-x86_64-bzip2-1.0.8-3-any 76.5 KiB 74.3 KiB/s 00:01 [#######################################] 100%
mingw-w64-ucrt-x86_64-libffi-3.5.1-1-any 43.1 KiB 65.3 KiB/s 00:01 [#######################################] 100%
mingw-w64-ucrt-x86_64-binutils-2.45-2-any 6.2 MiB 557 KiB/s 00:11 [#######################################] 100%
mingw-w64-ucrt-x86_64-winpthreads-13.0… 42.4 KiB 48.1 KiB/s 00:01 [#######################################] 100%
mingw-w64-ucrt-x86_64-termcap-1.3.1-7-any 27.3 KiB 51.5 KiB/s 00:01 [#######################################] 100%
mingw-w64-ucrt-x86_64-libwinpthread-13… 29.5 KiB 49.4 KiB/s 00:01 [#######################################] 100%
mingw-w64-ucrt-x86_64-winstorecompat-g… 25.1 KiB 58.5 KiB/s 00:00 [#######################################] 100%
mingw-w64-ucrt-x86_64-libmangle-git-13… 22.9 KiB 48.8 KiB/s 00:00 [#######################################] 100%
mingw-w64-ucrt-x86_64-libsystre-1.0.2-… 9.7 KiB 22.5 KiB/s 00:00 [#######################################] 100%
Total (29/29) 118.1 MiB 7.99 MiB/s 00:15 [#######################################] 100%
(29/29) checking keys in keyring [#######################################] 100%
(29/29) checking package integrity [#######################################] 100%
(29/29) loading package files [#######################################] 100%
(29/29) checking for file conflicts [#######################################] 100%
(29/29) checking available disk space [#######################################] 100%
:: Processing package changes…
( 1/29) installing mingw-w64-ucrt-x86_64-libyaml [#######################################] 100%
( 2/29) upgrading mingw-w64-ucrt-x86_64-libwinpthread [#######################################] 100%
( 3/29) upgrading mingw-w64-ucrt-x86_64-gcc-libs [#######################################] 100%
( 4/29) upgrading mingw-w64-ucrt-x86_64-binutils [#######################################] 100%
( 5/29) upgrading mingw-w64-ucrt-x86_64-headers-git [#######################################] 100%
( 6/29) upgrading mingw-w64-ucrt-x86_64-crt-git [#######################################] 100%
( 7/29) upgrading mingw-w64-ucrt-x86_64-winpthreads [#######################################] 100%
( 8/29) upgrading mingw-w64-ucrt-x86_64-gcc [#######################################] 100%
( 9/29) installing mingw-w64-ucrt-x86_64-expat [#######################################] 100%
(10/29) installing mingw-w64-ucrt-x86_64-libtre [#######################################] 100%
(11/29) installing mingw-w64-ucrt-x86_64-libsystre [#######################################] 100%
(12/29) installing mingw-w64-ucrt-x86_64-ncurses [#######################################] 100%
(13/29) installing mingw-w64-ucrt-x86_64-bzip2 [#######################################] 100%
(14/29) installing mingw-w64-ucrt-x86_64-libffi [#######################################] 100%
(15/29) installing mingw-w64-ucrt-x86_64-mpdecimal [#######################################] 100%
(16/29) installing mingw-w64-ucrt-x86_64-openssl [#######################################] 100%
Optional dependencies for mingw-w64-ucrt-x86_64-openssl
mingw-w64-ucrt-x86_64-ca-certificates
(17/29) installing mingw-w64-ucrt-x86_64-termcap [#######################################] 100%
(18/29) installing mingw-w64-ucrt-x86_64-readline [#######################################] 100%
(19/29) installing mingw-w64-ucrt-x86_64-sqlite3 [#######################################] 100%
Optional dependencies for mingw-w64-ucrt-x86_64-sqlite3
mingw-w64-ucrt-x86_64-tcl: for sqlite3_analyzer [pending]
(20/29) installing mingw-w64-ucrt-x86_64-tcl [#######################################] 100%
(21/29) installing mingw-w64-ucrt-x86_64-tk [#######################################] 100%
(22/29) installing mingw-w64-ucrt-x86_64-xz [#######################################] 100%
(23/29) installing mingw-w64-ucrt-x86_64-python [#######################################] 100%
(24/29) installing mingw-w64-ucrt-x86_64-xxhash [#######################################] 100%
(25/29) installing mingw-w64-ucrt-x86_64-gdb [#######################################] 100%
Optional dependencies for mingw-w64-ucrt-x86_64-gdb
mingw-w64-ucrt-x86_64-python-pygments: for syntax highlighting
(26/29) installing mingw-w64-ucrt-x86_64-gdb-multiarch [#######################################] 100%
Optional dependencies for mingw-w64-ucrt-x86_64-gdb-multiarch
mingw-w64-ucrt-x86_64-python-pygments: for syntax highlighting
(27/29) upgrading mingw-w64-ucrt-x86_64-libmangle-git [#######################################] 100%
(28/29) upgrading mingw-w64-ucrt-x86_64-tools-git [#######################################] 100%
(29/29) installing mingw-w64-ucrt-x86_64-winstorecompat-git [#######################################] 100%
– Installing with resolved dependencies…
Fetching gem metadata from https://rubygems.org/………
Resolving dependencies…
Fetching rake 13.3.0
Installing rake 13.3.0
Fetching base64 0.3.0
Fetching benchmark 0.4.1
Fetching bigdecimal 3.2.2
Fetching concurrent-ruby 1.3.5
Installing base64 0.3.0
Installing benchmark 0.4.1
Fetching connection_pool 2.5.3
Installing bigdecimal 3.2.2 with native extensions
Installing connection_pool 2.5.3
Fetching drb 2.2.3
Installing concurrent-ruby 1.3.5
Fetching logger 1.7.0
Installing drb 2.2.3
Installing logger 1.7.0
Fetching minitest 5.25.5
Fetching securerandom 0.4.1
Installing securerandom 0.4.1
Installing minitest 5.25.5
Fetching builder 3.3.0
Installing builder 3.3.0
Fetching erubi 1.13.1
Fetching racc 1.8.1
Installing erubi 1.13.1
Fetching crass 1.0.6
Installing racc 1.8.1 with native extensions
Installing crass 1.0.6
Fetching rack 3.1.16
Installing rack 3.1.16
Fetching useragent 0.16.11
Installing useragent 0.16.11
Fetching nio4r 2.7.4
Fetching websocket-extensions 0.1.5
Installing nio4r 2.7.4 with native extensions
Installing websocket-extensions 0.1.5
Fetching zeitwerk 2.7.3
Installing zeitwerk 2.7.3
Fetching timeout 0.4.3
Installing timeout 0.4.3
Fetching marcel 1.0.4
Installing marcel 1.0.4
Fetching mini_mime 1.1.5
Installing mini_mime 1.1.5
Fetching date 3.4.1
Fetching prettyprint 0.2.0
Installing date 3.4.1 with native extensions
Installing prettyprint 0.2.0
Fetching erb 5.0.2
Installing erb 5.0.2 with native extensions
Fetching stringio 3.1.7
Installing stringio 3.1.7 with native extensions
Fetching io-console 0.8.1
Installing io-console 0.8.1 with native extensions
Fetching thor 1.4.0
Installing thor 1.4.0
Fetching public_suffix 6.0.2
Installing public_suffix 6.0.2
Fetching chunky_png 1.4.0
Installing chunky_png 1.4.0
Fetching commonmarker 0.23.11
Installing commonmarker 0.23.11 with native extensions
Fetching csv 3.2.9
Installing csv 3.2.9
Fetching htmlentities 4.3.4
Installing htmlentities 4.3.4
Fetching mini_magick 5.0.1
Installing mini_magick 5.0.1
Fetching net-ldap 0.17.1
Installing net-ldap 0.17.1
Fetching pg 1.5.9 (x64-mingw-ucrt)
Installing pg 1.5.9 (x64-mingw-ucrt)
Fetching rbpdf-font 1.19.1
Installing rbpdf-font 1.19.1
Fetching rotp 6.3.0
Installing rotp 6.3.0
Fetching rouge 4.6.0
Installing rouge 4.6.0
Fetching rqrcode_core 2.0.0
Installing rqrcode_core 2.0.0
Fetching rubyzip 2.3.2
Installing rubyzip 2.3.2
Fetching i18n 1.14.7
Installing i18n 1.14.7
Fetching tzinfo 2.0.6
Installing tzinfo 2.0.6
Fetching rack-session 2.1.1
Installing rack-session 2.1.1
Fetching rack-test 2.2.0
Fetching rackup 2.2.1
Installing rack-test 2.2.0
Installing rackup 2.2.1
Fetching websocket-driver 0.8.0
Installing websocket-driver 0.8.0 with native extensions
Fetching net-protocol 0.2.2
Installing net-protocol 0.2.2
Fetching puma 6.6.1
Installing puma 6.6.1 with native extensions
Fetching pp 0.6.2
Installing pp 0.6.2
Fetching nokogiri 1.18.9 (x64-mingw-ucrt)
Installing nokogiri 1.18.9 (x64-mingw-ucrt)
Fetching addressable 2.8.7
Installing addressable 2.8.7
Fetching psych 5.2.6
Installing psych 5.2.6 with native extensions
Fetching rbpdf 1.21.4
Installing rbpdf 1.21.4
Fetching reline 0.6.2
Installing reline 0.6.2
Fetching rqrcode 3.1.0
Installing rqrcode 3.1.0
Fetching tzinfo-data 1.2025.2
Installing tzinfo-data 1.2025.2
Fetching net-imap 0.4.22
Installing net-imap 0.4.22
Fetching net-pop 0.1.2
Installing net-pop 0.1.2
Fetching net-smtp 0.4.0.1
Installing net-smtp 0.4.0.1
Fetching css_parser 1.21.1
Installing css_parser 1.21.1
Fetching loofah 2.24.1
Installing loofah 2.24.1
Fetching sanitize 6.1.3
Installing sanitize 6.1.3
Fetching mail 2.8.1
Installing mail 2.8.1
Fetching roadie 5.2.1
Installing roadie 5.2.1
Fetching rails-html-sanitizer 1.6.2
Installing rails-html-sanitizer 1.6.2
Fetching activesupport 7.2.2.1
Installing activesupport 7.2.2.1
Fetching rails-dom-testing 2.3.0
Fetching globalid 1.2.1
Installing rails-dom-testing 2.3.0
Installing globalid 1.2.1
Fetching activemodel 7.2.2.1
Installing activemodel 7.2.2.1
Fetching html-pipeline 2.13.2
Fetching actionview 7.2.2.1
Installing html-pipeline 2.13.2
Installing actionview 7.2.2.1
Fetching activejob 7.2.2.1
Installing activejob 7.2.2.1
Fetching rdoc 6.14.2
Installing rdoc 6.14.2
Fetching deckar01-task_list 2.3.2
Installing deckar01-task_list 2.3.2
Fetching activerecord 7.2.2.1
Fetching actionpack 7.2.2.1
Installing activerecord 7.2.2.1
Installing actionpack 7.2.2.1
Fetching irb 1.15.2
Installing irb 1.15.2
Fetching actioncable 7.2.2.1
Installing actioncable 7.2.2.1
Fetching actionmailer 7.2.2.1
Installing actionmailer 7.2.2.1
Fetching railties 7.2.2.1
Installing railties 7.2.2.1
Fetching activestorage 7.2.2.1
Installing activestorage 7.2.2.1
Fetching actionmailbox 7.2.2.1
Fetching actiontext 7.2.2.1
Installing actionmailbox 7.2.2.1
Installing actiontext 7.2.2.1
Fetching actionpack-xml_parser 2.0.1
Fetching propshaft 1.1.0
Fetching rails 7.2.2.1
Fetching roadie-rails 3.2.0
Installing actionpack-xml_parser 2.0.1
Installing propshaft 1.1.0
Installing rails 7.2.2.1
Installing roadie-rails 3.2.0
Bundle complete! 44 Gemfile dependencies, 89 gems now installed.
Gems in the groups ‘development’ and ‘test’ were not installed.
Bundled gems are installed into `./vendor/bundle`
Post-install message from html-pipeline:
————————————————-
Thank you for installing html-pipeline!
You must bundle Filter gem dependencies.
See html-pipeline README.md for more details.
https://github.com/jch/html-pipeline#dependencies
————————————————-
Post-install message from roadie-rails:
This would be the last version that supports ruby 2.6
Post-install message from rubyzip:
RubyZip 3.0 is coming!
**********************
The public API of some Rubyzip classes has been modernized to use named
parameters for optional arguments. Please check your usage of the
following classes:
* `Zip::File`
* `Zip::Entry`
* `Zip::InputStream`
* `Zip::OutputStream`
Please ensure that your Gemfiles and .gemspecs are suitably restrictive
to avoid an unexpected breakage when 3.0 is released (e.g. ~> 2.3.0).
See https://github.com/rubyzip/rubyzip for details. The Changelog also
lists other enhancements and bugfixes that have been implemented since
version 2.3.0.
Bundle complete! 44 Gemfile dependencies, 89 gems now installed.
Gems in the groups ‘development’ and ‘test’ were not installed.
Bundled gems are installed into `./vendor/bundle`
Updating files in vendor/cache
* rake-13.3.0.gem
* base64-0.3.0.gem
* benchmark-0.4.1.gem
* bigdecimal-3.2.2.gem
* concurrent-ruby-1.3.5.gem
* connection_pool-2.5.3.gem
* drb-2.2.3.gem
* i18n-1.14.7.gem
* logger-1.7.0.gem
* minitest-5.25.5.gem
* securerandom-0.4.1.gem
* tzinfo-2.0.6.gem
* activesupport-7.2.2.1.gem
* builder-3.3.0.gem
* erubi-1.13.1.gem
* racc-1.8.1.gem
* nokogiri-1.18.9-x64-mingw-ucrt.gem
* rails-dom-testing-2.3.0.gem
* crass-1.0.6.gem
* loofah-2.24.1.gem
* rails-html-sanitizer-1.6.2.gem
* actionview-7.2.2.1.gem
* rack-3.1.16.gem
* rack-session-2.1.1.gem
* rack-test-2.2.0.gem
* useragent-0.16.11.gem
* actionpack-7.2.2.1.gem
* nio4r-2.7.4.gem
* websocket-extensions-0.1.5.gem
* websocket-driver-0.8.0.gem
* zeitwerk-2.7.3.gem
* actioncable-7.2.2.1.gem
* globalid-1.2.1.gem
* activejob-7.2.2.1.gem
* activemodel-7.2.2.1.gem
* timeout-0.4.3.gem
* activerecord-7.2.2.1.gem
* marcel-1.0.4.gem
* activestorage-7.2.2.1.gem
* mini_mime-1.1.5.gem
* date-3.4.1.gem
* net-protocol-0.2.2.gem
* net-imap-0.4.22.gem
* net-pop-0.1.2.gem
* net-smtp-0.4.0.1.gem
* mail-2.8.1.gem
* actionmailbox-7.2.2.1.gem
* actionmailer-7.2.2.1.gem
* prettyprint-0.2.0.gem
* pp-0.6.2.gem
* erb-5.0.2.gem
* stringio-3.1.7.gem
* psych-5.2.6.gem
* rdoc-6.14.2.gem
* io-console-0.8.1.gem
* reline-0.6.2.gem
* irb-1.15.2.gem
* rackup-2.2.1.gem
* thor-1.4.0.gem
* railties-7.2.2.1.gem
* actionpack-xml_parser-2.0.1.gem
* actiontext-7.2.2.1.gem
* public_suffix-6.0.2.gem
* addressable-2.8.7.gem
* chunky_png-1.4.0.gem
* commonmarker-0.23.11.gem
* css_parser-1.21.1.gem
* csv-3.2.9.gem
* html-pipeline-2.13.2.gem
* deckar01-task_list-2.3.2.gem
* htmlentities-4.3.4.gem
* mini_magick-5.0.1.gem
* net-ldap-0.17.1.gem
* pg-1.5.9-x64-mingw-ucrt.gem
* propshaft-1.1.0.gem
* puma-6.6.1.gem
* rails-7.2.2.1.gem
* rbpdf-font-1.19.1.gem
* rbpdf-1.21.4.gem
* roadie-5.2.1.gem
* roadie-rails-3.2.0.gem
* rotp-6.3.0.gem
* rouge-4.6.0.gem
* rqrcode_core-2.0.0.gem
* rqrcode-3.1.0.gem
* rubyzip-2.3.2.gem
* sanitize-6.1.3.gem
* tzinfo-data-1.2025.2.gem
You are replacing the current local value of without, which is currently “development:test”
WARN: Unresolved or ambiguous specs during Gem::Specification.reset:
stringio (>= 0)
Available/installed versions of this gem:
– 3.1.7
– 3.1.1
WARN: Clearing out unresolved specs. Try ‘gem cleanup ‘
Please report a bug if this causes problems.
Bundle complete! 44 Gemfile dependencies, 89 gems now installed.
Gems in the groups ‘development’ and ‘test’ were not installed.
Bundled gems are installed into `./vendor/bundle`
[13/16] DB migrate & assets precompile
== 1 Setup: migrating =========================================================
— create_table(“attachments”, {:force=>true, :id=>:integer})
-> 0.0679s
— create_table(“auth_sources”, {:force=>true, :id=>:integer})
-> 0.0813s
— create_table(“custom_fields”, {:force=>true, :id=>:integer})
-> 0.0720s
— create_table(“custom_fields_projects”, {:id=>false, :force=>true})
-> 0.0020s
— create_table(“custom_fields_trackers”, {:id=>false, :force=>true})
-> 0.0012s
— create_table(“custom_values”, {:force=>true, :id=>:integer})
-> 0.0533s
— create_table(“documents”, {:force=>true, :id=>:integer})
-> 0.0604s
— add_index(“documents”, [“project_id”], {:name=>”documents_project_id”})
-> 0.0309s
— create_table(“enumerations”, {:force=>true, :id=>:integer})
-> 0.0424s
— create_table(“issue_categories”, {:force=>true, :id=>:integer})
-> 0.0580s
— add_index(“issue_categories”, [“project_id”], {:name=>”issue_categories_project_id”})
-> 0.0353s
— create_table(“issue_histories”, {:force=>true, :id=>:integer})
-> 0.0566s
— add_index(“issue_histories”, [“issue_id”], {:name=>”issue_histories_issue_id”})
-> 0.0326s
— create_table(“issue_statuses”, {:force=>true, :id=>:integer})
-> 0.0336s
— create_table(“issues”, {:force=>true, :id=>:integer})
-> 0.0772s
— add_index(“issues”, [“project_id”], {:name=>”issues_project_id”})
-> 0.0254s
— create_table(“members”, {:force=>true, :id=>:integer})
-> 0.0441s
— create_table(“news”, {:force=>true, :id=>:integer})
-> 0.0747s
— add_index(“news”, [“project_id”], {:name=>”news_project_id”})
-> 0.0270s
— create_table(“permissions”, {:force=>true, :id=>:integer})
-> 0.0368s
— create_table(“permissions_roles”, {:id=>false, :force=>true})
-> 0.0018s
— add_index(“permissions_roles”, [“role_id”], {:name=>”permissions_roles_role_id”})
-> 0.0247s
— create_table(“projects”, {:force=>true, :id=>:integer})
-> 0.0573s
— create_table(“roles”, {:force=>true, :id=>:integer})
-> 0.0437s
— create_table(“tokens”, {:force=>true, :id=>:integer})
-> 0.0296s
— create_table(“trackers”, {:force=>true, :id=>:integer})
-> 0.0354s
— create_table(“users”, {:force=>true, :id=>:integer})
-> 0.0357s
— create_table(“versions”, {:force=>true, :id=>:integer})
-> 0.0633s
— add_index(“versions”, [“project_id”], {:name=>”versions_project_id”})
-> 0.0332s
— create_table(“workflows”, {:force=>true, :id=>:integer})
-> 0.0307s
== 1 Setup: migrated (1.3532s) ================================================
== 2 IssueMove: migrating =====================================================
== 2 IssueMove: migrated (0.0042s) ============================================
中略
== 105 BuildProjectsTree: migrating ===========================================
== 105 BuildProjectsTree: migrated (0.0087s) ==================================
== 106 RemoveProjectsProjectsCount: migrating =================================
— remove_column(:projects, :projects_count)
-> 0.0007s
== 106 RemoveProjectsProjectsCount: migrated (0.0011s) ========================
== 107 AddOpenIdAuthenticationTables: migrating ===============================
— create_table(:open_id_authentication_associations, {:force=>true, :id=>:integer})
-> 0.0490s
— create_table(:open_id_authentication_nonces, {:force=>true, :id=>:integer})
-> 0.0469s
== 107 AddOpenIdAuthenticationTables: migrated (0.0968s) ======================
== 108 AddIdentityUrlToUsers: migrating =======================================
— add_column(:users, :identity_url, :string)
-> 0.0012s
== 108 AddIdentityUrlToUsers: migrated (0.0015s) ==============================
== 20090214190337 AddWatchersUserIdTypeIndex: migrating =======================
— add_index(:watchers, [:user_id, :watchable_type], {:name=>:watchers_user_id_type})
-> 0.0247s
== 20090214190337 AddWatchersUserIdTypeIndex: migrated (0.0251s) ==============
== 20090312172426 AddQueriesSortCriteria: migrating ===========================
— add_column(:queries, :sort_criteria, :text)
-> 0.0006s
== 20090312172426 AddQueriesSortCriteria: migrated (0.0009s) ==================
中略
== 20231113131245 EnsureDefaultNotificationOptionIsStoredInDb: migrating ======
== 20231113131245 EnsureDefaultNotificationOptionIsStoredInDb: migrated (0.0013s)
== 20240213101801 AddQueriesDescription: migrating ============================ add_column(:queries, :description, :string) == 20240213101801 AddQueriesDescription: migrated (0.0018s) =================== == 20241007144951 ChangeTextFormattingFromMarkdownToCommonMark: migrating =====
== 20241007144951 ChangeTextFormattingFromMarkdownToCommonMark: migrated (0.0012s)
== 20241022095140 RemoveOrphanedCustomValueAttachments: migrating =============
== 20241022095140 RemoveOrphanedCustomValueAttachments: migrated (0.0054s) ====
== 20241026031710 UpdateOrphanedJournalUpdatedByIdToAnonymous: migrating ======
== 20241026031710 UpdateOrphanedJournalUpdatedByIdToAnonymous: migrated (0.0134s)
== 20241103150135 ChangeSettingsValueLimit: migrating =========================
== 20241103150135 ChangeSettingsValueLimit: migrated (0.0000s) ================
== 20241103184550 ChangeBuiltinRolesUserVisibility: migrating =================
— change_column_default(:roles, :users_visibility, “members_of_visible_projects”)
-> 0.0029s
== 20241103184550 ChangeBuiltinRolesUserVisibility: migrated (0.0045s) ========
[14/16] Get/prepare NSSM
– Downloading NSSM 2.24…
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 343k 100 343k 0 0 194k 0 0:00:01 0:00:01 –:–:– 194k
[15/16] Register/Configure Puma service
Service “RedminePuma” installed successfully!
Set parameter “Application” for service “RedminePuma”.
Set parameter “AppParameters” for service “RedminePuma”.
Set parameter “AppDirectory” for service “RedminePuma”.
Set parameter “AppStdout” for service “RedminePuma”.
Set parameter “AppStderr” for service “RedminePuma”.
Set parameter “AppNoConsole” for service “RedminePuma”.
Set parameter “AppStopMethodConsole” for service “RedminePuma”.
[16/16] Start service and open browser
RedminePuma: START: The operation completed successfully.
SERVICE_NAME: RedminePuma
TYPE : 10 WIN32_OWN_PROCESS
STATE : 4 RUNNING
(STOPPABLE, PAUSABLE, ACCEPTS_SHUTDOWN)
WIN32_EXIT_CODE : 0 (0x0)
SERVICE_EXIT_CODE : 0 (0x0)
CHECKPOINT : 0x0
WAIT_HINT : 0x0
DONE. Redmine should be at: http://127.0.0.1:3000/
Default login: admin / admin
C:\444>
おまけ
やはりGPLの考え方=知識の自由化、民主化というのはすごいことだと思います。RMやBlenderが無料というのは革命的です。
AIにもこのページを紹介してもらえた笑

