업그레이드 전에
업그레이드 버전 사이에 LTS 버전이 있다면 LTS버전으로 먼저 업그레이드 후에 목적한 버전으로 업그레이드를 진행해야 한다.(LTS 버전은 최근을 기점으로 8.9 -> 9.9 이다.)
예를 들어
8.1 -> 9.4 로 업그레이드를 진행하려한다면 8.1 -> 8.9 LTS -> 9.8 순으로 해야합니다.
요구사항
하드웨어
9.9 버전의 하드웨어 요구 사항은 엔터프라이즈 급 CPU 8Core, RAM 16G 이상을 요구하며 elasticsearch 가 사용하는 data 디렉토리의 경우 높은 I/O 를 요구 하므로 DISK 선택시 고려해야한다.
지원 플랫폼
11버전의 java 는 지원 되지 않으니 업그레이드 시 유의 해야한다.
사전 작업
커널파라미터
9.4 버전 구축 시 적용했던 설정일지도 모르나 업그레이드에 앞서 한번더 점검한다. 설정은 root로 한다.
$ vim /etc/sysctl.d/99-sonar.conf
vm.max_map_count=524288
fs.file-max=131072
적용 및 확인
$ sysctl -p
$ sysctl -a | grep "vm.max_map_count\|fs.file-max"
fs.file-max = 131072
vm.max_map_count = 524288
ulimit
sonarqube 는 sonar 계정으로 띄울 예정이다. 설정은 root로 한다.
$ vim /etc/security/limits.d/99-sonar.conf
sonar - nofile 131072
sonar - nproc 8192
적용 및 확인
적용은 reboot 으로 하며 아래 내용으로 확인한다.
$ su - sonar
$ ulimit -aH
...
open files (-n) 131072
...
max user processes (-u) 8192
...
업그레이드 작업
Linux(CentOS 8) 에서 작업 하며 postgres DB를 사용한다. 작업 후반 DB가 업데이트 되므로 작업 전에 DB는 백업을 하는 것이 좋다.
기존에 설치된 플러그인은 직접 다시 설치 해야한다.
다운로드
다운로드 참조 : https://binaries.sonarsource.com/?prefix=Distribution/sonarqube/
wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-9.9.1.69595.zip
압축해제
unzip sonarqube-9.9.1.69595.zip
java 설치
현재 사용중인 11버전이 지원되지 않아 17버전으로 설치해야한다.
yum install java-17-openjdk java-17-openjdk-devel
권한 조정
elasticsearch 는 root로 실행할 수 없으므로 sonar user를 생성하고 실행한다.
chown -R sonar. sonarqube-9.9.1.69595
sonar.properties 편집
postgres 에서 sonarqube가 사용할 DB와 user,password는 적절히 편집하도록 한다.
$ vim sonar.properties
sonar.jdbc.username=<sonarqube_user>
sonar.jdbc.password=<sonarqube_pass>
sonar.jdbc.url=jdbc:postgresql://localhost/<sonarqube_db>
sonar.web.javaOpts=-Xmx512m -Xms128m -XX:+HeapDumpOnOutOfMemoryError
sonar.web.host=0.0.0.0
sonar.web.port=9000
sonar.path.data=data
sonar.path.temp=temp
JAVA_HOME 설정
JAVA_HOME은 sonarqube 실행 스크립트에 넣어 사용한다.
$ vim sonarqube-9.9.1.69595/bin/linux-x86-64/sonar.sh
#! /bin/sh
SONAR_JAVA_PATH="/usr/lib/jvm/java-17-openjdk-17.0.6.0.9-0.3.ea.el8.x86_64/bin/java"
...
실행
기존 sonarqube(9.4) 실행을 종료 후 업그레이드 버전(9.9)으로 프로세스를 실행한다.
주의할 점은 root가 아닌 sonar 유저로 실행해야한다.
$ su - sonar
$ sonarqube-9.9.1.69595/bin/linux-x86-64/sonar.sh start
Starting SonarQube...
Started SonarQube.
systemd 등록
# vim /usr/lib/systemd/system/sonarqube.service
[Unit]
Description=sonarqube
After=syslog.target
After=network.target
[Service]
Type=simple
Restart=on-failure
PIDFile=/sonarqube-9.9.1.69595/bin/linux-x86-64/SonarQube.pid
ExecStart=/sonarqube-9.9.1.69595/bin/linux-x86-64/sonar.sh start
ExecStop=/sonarqube-9.9.1.69595/bin/linux-x86-64/sonar.sh stop
RestartSec=10s
User=sonar
Group=sonar
[Install]
WantedBy=multi-user.target
# systemctl daemon-reload
web setup
웹을 실행하여 DB 업데이트를 진행하면 업그레이드 과정은 마무리 된다.
http://<sonarqube_IP>:9000/setup
관련 에러
2023.08.31 15:00:49 WARN app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [ElasticSearch]: 1
2023.08.31 15:00:49 INFO app[][o.s.a.SchedulerImpl] Process[ElasticSearch] is stopped
2023.08.31 15:00:49 INFO app[][o.s.a.SchedulerImpl] SonarQube is stopped
2023.08.31 15:46:18 INFO app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /sonarqube-9.9.1.69595/temp
2023.08.31 15:46:18 ERROR app[][o.s.application.App] Startup failure
java.lang.IllegalArgumentException: Unable to create shared memory :
at org.sonar.process.sharedmemoryfile.AllProcessesCommands.<init>(AllProcessesCommands.java:103)
at org.sonar.application.AppFileSystem.reset(AppFileSystem.java:63)
at org.sonar.application.App.start(App.java:53)
at org.sonar.application.App.main(App.java:81)
Caused by: java.io.FileNotFoundException: /sonarqube-9.9.1.69595/temp/sharedmemory (Permission denied)
temp 디렉토리의 권한 문제로 temp 디렉토리를 삭제 후 다시 만들고 권한을 부여한다.
$ rm -rf temp
$ touch temp
$ chown sonar. temp