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のインストール手順も含めて記載しておきます。
- 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のサイトを表示して、サイト一番下にあるバージョン表記が下記のように更新されていれば完了です。