アーカイブ : 2021年 6月

Giteaバージョンアップ

Gitea のバージョンアップを行いました。備忘録として手順を残しておきます。Giteaをインストールしているのは、GitLabを導入しようとしたのですが、非力なPCでは重たくて動作しなかったため軽量なGitサーバとしてGiteaを選択しています。初回インストール時のt手順は、残せていなかったのでバージョンアップ手順とります。

Giteaをインストールしているサーバは、CentOS 7で、更新前のバージョンは下記のとおり。

$ gitea --version
Gitea version 1.9.3 built with GNU Make 3.82, go1.11.5 : bindata, sqlite, sqlite_unlock_notify

Giteaのサイト(https://docs.gitea.io/)にインストール手順が記載されていますので、それに従いインストールを行います。バイナリからのインストール手順が記載されていますが、下記のエラーが出力され実行できません。

$ ./gitea-1.9.3-linux-amd64
FATAL: kernel too old
Aborted

OpneVZ系のVPSサーバではカーネルのバージョンアップができないため、ソースコードからのインストールを実行します。

ビルド前準備

対応時点では、ソースコードのビルド環境の条件は、下記の通りでした。

  • go 1.14 以上
  • node 12.17 以上
  • make

下記の通り、node のバージョン以外は、条件を満たせていたので、nodeだけバージョンアップしました。

$ go version
go version go1.15.5 linux/amd64
$ node --version
v0.10.21
$ make --version
GNU Make 3.82
Built for x86_64-redhat-linux-gnu
Copyright (C) 2010  Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

node は、 nvm で管理している。

https://github.com/nvm-sh/nvm を参考にバージョンアップします。一応、nvmのインストール手順も含めて記載しておきます。

  1. nvmのインストール
$ curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash

2. nvmコマンドのPATHを通す

.bashrc に下記の内容を追記し、読み込みます。

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion

再ログインするか、sourceコマンド(source $HOME/.bashrc)で、PATH設定を反映します。

3. LTSバージョンのnodeをインストール

$ nvm install --lts
$ nvm alias default "lts/*"
$ node --version
v14.17.0

Giteaのビルド

Giteaのソースコードを取得し、ビルドを行います。

$ git clone https://github.com/go-gitea/gitea
$ cd gitea
$ git checkout -b v1.14.2 v1.14.2
$ TAGS="bindata sqlite sqlite_unlock_notify" make build

ビルド中下記のエラーが発生してNGとなりました。

<--- Last few GCs --->

[19126:0x5e3f270]   853596 ms: Mark-sweep (reduce) 509.4 (513.7) -> 509.0 (515.2) MB, 3292.9 / 0.0 ms  (average mu = 0.130, current mu = 0.022) allocation failure scavenge might not succeed


<--- JS stacktrace --->

FATAL ERROR: MarkCompactCollector: young object promotion failed Allocation failed - JavaScript heap out of memory
 1: 0xa222f0 node::Abort() [webpack]
 2: 0x96411f node::FatalError(char const*, char const*) [webpack]
 3: 0xb97f1e v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [webpack]
 4: 0xb98297 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [webpack]
 5: 0xd52fd5  [webpack]
 6: 0xd83bbe v8::internal::EvacuateNewSpaceVisitor::Visit(v8::internal::HeapObject, int) [webpack]
 7: 0xd8fbf6 v8::internal::FullEvacuator::RawEvacuatePage(v8::internal::MemoryChunk*, long*) [webpack]
 8: 0xd7bd8f v8::internal::Evacuator::EvacuatePage(v8::internal::MemoryChunk*) [webpack]
 9: 0xd7c008 v8::internal::PageEvacuationTask::RunInParallel(v8::internal::ItemParallelJob::Task::Runner) [webpack]
10: 0xd6e8e9 v8::internal::ItemParallelJob::Run() [webpack]

heapのサイズを環境変数で設定して再ビルドします。

$ export NODE_OPTIONS="--max-old-space-size=2048"
$ TAGS="bindata sqlite sqlite_unlock_notify" make build

今回は、アップデートのため、ビルドが成功したら、giteaのバイナリを差し替えて終了です。

$ ./gitea --version
Gitea version 1.14.2 built with GNU Make 3.82, go1.15.5 : bindata, sqlite, sqlite_unlock_notify
$ sudo systemctl stop gitea.service
$ sudo mv /usr/locak/bin/gitea /usr/local/bin/gitea.v1.9.3
$ sudo cp gitea /usr/local/bin
$ sudo systemctl restart gitea.service

ブラウザで、Giteaのサイトを表示して、サイト一番下にあるバージョン表記が下記のように更新されていれば完了です。