]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-17137 Replace JSW with WinSW for running SQ on Windows
authorDimitris Kavvathas <dimitris.kavvathas@sonarsource.com>
Wed, 3 Aug 2022 08:26:49 +0000 (10:26 +0200)
committersonartech <sonartech@sonarsource.com>
Fri, 5 Aug 2022 20:03:27 +0000 (20:03 +0000)
12 files changed:
server/sonar-docs/src/pages/setup/install-server.md
server/sonar-docs/src/pages/setup/operate-server.md
server/sonar-docs/src/pages/setup/upgrading.md
sonar-application/build.gradle
sonar-application/src/main/assembly/bin/windows-x86-64/SonarService.exe [new file with mode: 0644]
sonar-application/src/main/assembly/bin/windows-x86-64/SonarService.xml [new file with mode: 0644]
sonar-application/src/main/assembly/bin/windows-x86-64/StartNTService.bat [deleted file]
sonar-application/src/main/assembly/bin/windows-x86-64/StartSonar.bat
sonar-application/src/main/assembly/bin/windows-x86-64/StopNTService.bat [deleted file]
sonar-application/src/main/assembly/bin/windows-x86-64/lib/wrapper.dll [deleted file]
sonar-application/src/main/assembly/bin/windows-x86-64/wrapper.exe [deleted file]
sonar-application/src/main/assembly/bin/winsw-license/LICENSE.txt [new file with mode: 0755]

index 0a7a5c479faba51ffbdd335b547c1e0fbf4736f4..ae5da42bd983ff1e24ac2daab038f0e5d60da786 100644 (file)
@@ -159,12 +159,20 @@ You can now browse SonarQube at _http://localhost:9000_ (the default System admi
 
 If there are multiple versions of Java installed on your server, you may need to explicitly define which version of Java is used.
 
+#### Linux / macOS
 To change the Java JVM used by SonarQube, edit _$SONARQUBE-HOME/bin/{platform_OS}/sonar.sh_ and update the following line:
 
 ```
 JAVA_CMD="java"
 ```
 
+#### Windows
+To change the Java JVM used by SonarQube, edit > _$SONARQUBE-HOME\bin\windows-x86-64\SonarService.xml_ and update the following line:
+
+```
+<executable>java</executable>
+```
+
 ### Advanced Installation Features
 
 - Running SonarQube as a Service on [Windows](/setup/operate-server/) or [Linux](/setup/operate-server/)
index 7ac9ba1a2c69d7de2590252d8dd30608a9350e28..1acf1bb4f239e1a8bc6e49ac1d4c826b62835fba 100644 (file)
@@ -5,22 +5,29 @@ url: /setup/operate-server/
 
 ## Running SonarQube as a Service on Windows
 
-### Installing SonarQube as a service
-
-[[warning]]
-| When installing SonarQube as a service on Windows, the path to the executable should be quoted to prevent unquoted service path attacks. 
+### Install or Uninstall SonarQube as a Service
 
 ```
-> sc create SonarQube binPath= "\"%SONAR_HOME%\bin\windows-x86-64\wrapper.exe\" -s \"%SONAR_HOME%\conf\wrapper.conf\""
+> %SONAR_HOME%\bin\windows-x86-64\SonarService.exe install
+> %SONAR_HOME%\bin\windows-x86-64\SonarService.exe uninstall
 ```
 
 ### Start or Stop the Service
 
 ```
-> "%SONAR_HOME%\bin\windows-x86-64\StartNTService.bat"
-> "%SONAR_HOME%\bin\windows-x86-64\StopNTService.bat"
+> %SONAR_HOME%\bin\windows-x86-64\SonarService.exe start
+```
+**Note:** By default, the service will use the Java executable available on the Windows PATH. This setting can be changed in `%SONAR_HOME%\bin\windows-x86-64\SonarService.xml`, by updating the `<executable>`.
+```
+> %SONAR_HOME%\bin\windows-x86-64\SonarService.exe stop
+```
+**Note:** `> %SONAR_HOME%\bin\windows-x86-64\SonarService.exe stop` does a graceful shutdown where no new analysis report processing can start, but the tasks in progress are allowed to finish. The time a stop will take depends on the processing time of the tasks in progress. You'll need to kill all SonarQube processes manually to force a stop.
+
+### Service Status
+Check if the SonarQube service is running
+```
+> %SONAR_HOME%\bin\windows-x86-64\SonarService.exe status
 ```
-**Note:** `> "%SONAR_HOME%\bin\windows-x86-64\StopNTService.bat"` does a graceful shutdown where no new analysis report processing can start, but the tasks in progress are allowed to finish. The time a stop will take depends on the processing time of the tasks in progress. You'll need to kill all SonarQube processes manually to force a stop.
 
 ## Running SonarQube Manually on Linux
 
index dbd50870c595d5957aa6dbe30147f1e3c1b0d43a..d719f90d0caa3032626b72eb94b479249722af97 100644 (file)
@@ -136,7 +136,8 @@ If you use an external configuration, such as a script or Windows Service to con
 - For Linux it depends how you implemented the service
 - For Windows you can update your service by running:
 ```
-sc config SonarQube binPath= "\"$NEW_SONAR_HOME\bin\windows-x86-64\wrapper.exe\" -s \"$NEW_SONAR_HOME\conf\wrapper.conf\""
+> sc delete SonarQube
+> $NEW_SONAR_HOME\bin\windows-x86-64\SonarService.exe install
 ```
 
 ### Rebuilding indexes
index f0bb9ada0669c01bb17e7d867cb5eac5a7a97361..1784e5912579ed6b3b3dd4ba812926ef4f7c7f44 100644 (file)
@@ -141,6 +141,8 @@ task zip(type: Zip, dependsOn: [configurations.compileClasspath, tasks.downloadL
     from(file('src/main/assembly')) {
       exclude 'conf/sonar.properties'
       exclude 'conf/wrapper.conf'
+      exclude 'bin/windows-x86-64/SonarService.xml'
+      exclude 'bin/windows-x86-64/StartSonar.bat'
       exclude 'elasticsearch-patch'
       exclude 'bin/linux-x86-64/sonar.sh'
       exclude 'bin/macosx-universal-64/sonar.sh'
@@ -237,6 +239,14 @@ task zip(type: Zip, dependsOn: [configurations.compileClasspath, tasks.downloadL
     ])
   }
 
+  into("${archiveDir}/bin/windows-x86-64/") {
+    from file('src/main/assembly/bin/windows-x86-64/SonarService.xml')
+    from file('src/main/assembly/bin/windows-x86-64/StartSonar.bat')
+    filter(ReplaceTokens, tokens: [
+            'sqversion': version
+    ])
+  }
+
   into("${archiveDir}/elasticsearch/") {
     from file('src/main/assembly/elasticsearch-patch')
       include 'bin/elasticsearch'
diff --git a/sonar-application/src/main/assembly/bin/windows-x86-64/SonarService.exe b/sonar-application/src/main/assembly/bin/windows-x86-64/SonarService.exe
new file mode 100644 (file)
index 0000000..2192636
Binary files /dev/null and b/sonar-application/src/main/assembly/bin/windows-x86-64/SonarService.exe differ
diff --git a/sonar-application/src/main/assembly/bin/windows-x86-64/SonarService.xml b/sonar-application/src/main/assembly/bin/windows-x86-64/SonarService.xml
new file mode 100644 (file)
index 0000000..0aaa9bc
--- /dev/null
@@ -0,0 +1,25 @@
+<service>
+  <!-- Path to the Java executable -->
+  <executable>java</executable>
+
+  <!-- DO NOT EDIT THE FOLLOWING SECTIONS -->
+  <arguments>
+    -Xms8m -Xmx32m
+    -Djava.awt.headless=true
+    --add-exports=java.base/jdk.internal.ref=ALL-UNNAMED
+    --add-opens=java.base/java.lang=ALL-UNNAMED
+    --add-opens=java.base/java.nio=ALL-UNNAMED
+    --add-opens=java.base/sun.nio.ch=ALL-UNNAMED
+    --add-opens=java.management/sun.management=ALL-UNNAMED
+    --add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED
+    -cp "..\..\lib\sonar-application-@sqversion@.jar" "org.sonar.application.App"
+  </arguments>
+
+  <id>SonarQube</id>
+  <name>SonarQube</name>
+  <description>SonarQube</description>
+
+  <logpath>../../logs</logpath>
+  <log mode="none"/>
+
+</service>
\ No newline at end of file
diff --git a/sonar-application/src/main/assembly/bin/windows-x86-64/StartNTService.bat b/sonar-application/src/main/assembly/bin/windows-x86-64/StartNTService.bat
deleted file mode 100755 (executable)
index a8bc27a..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-@echo off
-setlocal
-
-rem Copyright (c) 1999, 2006 Tanuki Software Inc.
-rem
-rem Java Service Wrapper general NT service start script
-rem
-
-if "%OS%"=="Windows_NT" goto nt
-echo This script only works with NT-based versions of Windows.
-goto :eof
-
-:nt
-rem
-rem Find the application home.
-rem
-rem %~dp0 is location of current script under NT
-set _REALPATH=%~dp0
-
-rem Decide on the wrapper binary.
-set _WRAPPER_BASE=wrapper
-set _WRAPPER_EXE=%_REALPATH%%_WRAPPER_BASE%-windows-x86-32.exe
-if exist "%_WRAPPER_EXE%" goto conf
-set _WRAPPER_EXE=%_REALPATH%%_WRAPPER_BASE%-windows-x86-64.exe
-if exist "%_WRAPPER_EXE%" goto conf
-set _WRAPPER_EXE=%_REALPATH%%_WRAPPER_BASE%.exe
-if exist "%_WRAPPER_EXE%" goto conf
-echo Unable to locate a Wrapper executable using any of the following names:
-echo %_REALPATH%%_WRAPPER_BASE%-windows-x86-32.exe
-echo %_REALPATH%%_WRAPPER_BASE%-windows-x86-64.exe
-echo %_REALPATH%%_WRAPPER_BASE%.exe
-pause
-goto :eof
-
-rem
-rem Find the wrapper.conf
-rem
-:conf
-set _WRAPPER_CONF="%~f1"
-if not %_WRAPPER_CONF%=="" goto startup
-set _WRAPPER_CONF="%_REALPATH%..\..\conf\wrapper.conf"
-
-rem
-rem Start the Wrapper NT service.
-rem
-:startup
-"%_WRAPPER_EXE%" -t %_WRAPPER_CONF%
-if not errorlevel 1 goto :eof
-pause
-
index 8a5c96f1dd7297e41bcd0089a1e545cd4eabb8f1..3214ab5ea1a1036b5d38ff48fecc8c4ff1e2acc2 100755 (executable)
@@ -1,55 +1,59 @@
-@echo off
-setlocal
-
-rem Copyright (c) 1999, 2006 Tanuki Software Inc.
-rem
-rem Java Service Wrapper general startup script
-rem
-
-rem
-rem Resolve the real path of the wrapper.exe
-rem  For non NT systems, the _REALPATH and _WRAPPER_CONF values
-rem  can be hard-coded below and the following test removed.
-rem
-if "%OS%"=="Windows_NT" goto nt
-echo This script only works with NT-based versions of Windows.
-goto :eof
-
-:nt
-rem
-rem Find the application home.
-rem
-rem %~dp0 is location of current script under NT
-set _REALPATH=%~dp0
-
-rem Decide on the wrapper binary.
-set _WRAPPER_BASE=wrapper
-set _WRAPPER_EXE=%_REALPATH%%_WRAPPER_BASE%-windows-x86-32.exe
-if exist "%_WRAPPER_EXE%" goto conf
-set _WRAPPER_EXE=%_REALPATH%%_WRAPPER_BASE%-windows-x86-64.exe
-if exist "%_WRAPPER_EXE%" goto conf
-set _WRAPPER_EXE=%_REALPATH%%_WRAPPER_BASE%.exe
-if exist "%_WRAPPER_EXE%" goto conf
-echo Unable to locate a Wrapper executable using any of the following names:
-echo %_REALPATH%%_WRAPPER_BASE%-windows-x86-32.exe
-echo %_REALPATH%%_WRAPPER_BASE%-windows-x86-64.exe
-echo %_REALPATH%%_WRAPPER_BASE%.exe
-pause
-goto :eof
-
-rem
-rem Find the wrapper.conf
-rem
-:conf
-set _WRAPPER_CONF="%~f1"
-if not %_WRAPPER_CONF%=="" goto startup
-set _WRAPPER_CONF="%_REALPATH%..\..\conf\wrapper.conf"
-
-rem
-rem Start the Wrapper
-rem
-:startup
-"%_WRAPPER_EXE%" -c %_WRAPPER_CONF%
-if not errorlevel 1 goto :eof
-pause
-
+@rem SonarQube\r
+@rem Copyright (C) 2009-2022 SonarSource SA\r
+@rem mailto:info AT sonarsource DOT com\r
+@rem\r
+@rem This program is free software; you can redistribute it and/or\r
+@rem modify it under the terms of the GNU Lesser General Public\r
+@rem License as published by the Free Software Foundation; either\r
+@rem version 3 of the License, or (at your option) any later version.\r
+@rem\r
+@rem This program is distributed in the hope that it will be useful,\r
+@rem but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+@rem MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\r
+@rem Lesser General Public License for more details.\r
+@rem\r
+@rem You should have received a copy of the GNU Lesser General Public License\r
+@rem along with this program; if not, write to the Free Software Foundation,\r
+@rem Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.\r
+\r
+@echo off\r
+setlocal\r
+\r
+rem Path to the Java executable\r
+set JAVA_EXE="java"\r
+\r
+\r
+rem DO NOT EDIT THE FOLLOWING SECTIONS\r
+call :check_if_sonar_is_running FAIL || goto:eof\r
+\r
+%JAVA_EXE% -Xms8m -Xmx32m^\r
+     -Djava.awt.headless=true^\r
+     --add-exports=java.base/jdk.internal.ref=ALL-UNNAMED^\r
+     --add-opens=java.base/java.lang=ALL-UNNAMED^\r
+     --add-opens=java.base/java.nio=ALL-UNNAMED^\r
+     --add-opens=java.base/sun.nio.ch=ALL-UNNAMED^\r
+     --add-opens=java.management/sun.management=ALL-UNNAMED^\r
+     --add-opens=jdk.management/com.sun.management.internal=ALL-UNNAMED^\r
+     -cp "..\..\lib\sonar-application-@sqversion@.jar" "org.sonar.application.App"\r
+\r
+goto:eof\r
+\r
+:check_if_sonar_is_running\r
+set "SQ_PROCESS="\r
+where jps >nul 2>nul\r
+if %errorlevel% equ 0 (\r
+    rem give priority to jps command if present\r
+    for /f "tokens=1" %%i in ('jps -l ^| findstr "org.sonar.application.App"') do set "SQ_PROCESS=%%i"\r
+) else (\r
+    rem fallback to wmic command\r
+    for /f "tokens=2" %%i in ('wmic process where "name='java.exe' and commandline like '%%org.sonar.application.App%%'" get name^, processid 2^>nul ^| findstr "java"') do set "SQ_PROCESS=%%i"\r
+)\r
+\r
+if not [%SQ_PROCESS%]==[] (\r
+    echo ERROR: Another instance of the SonarQube application is already running with PID %SQ_PROCESS%\r
+    exit /b 1\r
+)\r
+goto:eof\r
+\r
+endlocal\r
+\r
diff --git a/sonar-application/src/main/assembly/bin/windows-x86-64/StopNTService.bat b/sonar-application/src/main/assembly/bin/windows-x86-64/StopNTService.bat
deleted file mode 100755 (executable)
index bf4b3ef..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-@echo off
-setlocal
-
-rem Copyright (c) 1999, 2006 Tanuki Software Inc.
-rem
-rem Java Service Wrapper general NT service stop script
-rem
-
-if "%OS%"=="Windows_NT" goto nt
-echo This script only works with NT-based versions of Windows.
-goto :eof
-
-:nt
-rem
-rem Find the application home.
-rem
-rem %~dp0 is location of current script under NT
-set _REALPATH=%~dp0
-
-rem Decide on the wrapper binary.
-set _WRAPPER_BASE=wrapper
-set _WRAPPER_EXE=%_REALPATH%%_WRAPPER_BASE%-windows-x86-32.exe
-if exist "%_WRAPPER_EXE%" goto conf
-set _WRAPPER_EXE=%_REALPATH%%_WRAPPER_BASE%-windows-x86-64.exe
-if exist "%_WRAPPER_EXE%" goto conf
-set _WRAPPER_EXE=%_REALPATH%%_WRAPPER_BASE%.exe
-if exist "%_WRAPPER_EXE%" goto conf
-echo Unable to locate a Wrapper executable using any of the following names:
-echo %_REALPATH%%_WRAPPER_BASE%-windows-x86-32.exe
-echo %_REALPATH%%_WRAPPER_BASE%-windows-x86-64.exe
-echo %_REALPATH%%_WRAPPER_BASE%.exe
-pause
-goto :eof
-
-rem
-rem Find the wrapper.conf
-rem
-:conf
-set _WRAPPER_CONF="%~f1"
-if not %_WRAPPER_CONF%=="" goto startup
-set _WRAPPER_CONF="%_REALPATH%..\..\conf\wrapper.conf"
-
-rem
-rem Stop the Wrapper NT service.
-rem
-:startup
-"%_WRAPPER_EXE%" -p %_WRAPPER_CONF%
-if not errorlevel 1 goto :eof
-pause
-
diff --git a/sonar-application/src/main/assembly/bin/windows-x86-64/lib/wrapper.dll b/sonar-application/src/main/assembly/bin/windows-x86-64/lib/wrapper.dll
deleted file mode 100755 (executable)
index f07fc9e..0000000
Binary files a/sonar-application/src/main/assembly/bin/windows-x86-64/lib/wrapper.dll and /dev/null differ
diff --git a/sonar-application/src/main/assembly/bin/windows-x86-64/wrapper.exe b/sonar-application/src/main/assembly/bin/windows-x86-64/wrapper.exe
deleted file mode 100755 (executable)
index db2ddda..0000000
Binary files a/sonar-application/src/main/assembly/bin/windows-x86-64/wrapper.exe and /dev/null differ
diff --git a/sonar-application/src/main/assembly/bin/winsw-license/LICENSE.txt b/sonar-application/src/main/assembly/bin/winsw-license/LICENSE.txt
new file mode 100755 (executable)
index 0000000..54c1072
--- /dev/null
@@ -0,0 +1,26 @@
+This bundle contains Windows Service Wrapper scripts and binaries version 2.11.0 published
+under the following license:
+
+    MIT License
+
+    Copyright (c) 2008-2020 Kohsuke Kawaguchi, Sun Microsystems, Inc., CloudBees, Inc., Oleg Nenashev and other contributors
+
+    Permission is hereby granted, free of charge, to any person obtaining a copy
+    of this software and associated documentation files (the "Software"), to deal
+    in the Software without restriction, including without limitation the rights
+    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+    copies of the Software, and to permit persons to whom the Software is
+    furnished to do so, subject to the following conditions:
+
+    The above copyright notice and this permission notice shall be included in all
+    copies or substantial portions of the Software.
+
+    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+    SOFTWARE.
+    
+    https://github.com/winsw/winsw/blob/master/LICENSE.txt