takashi kono's blog

コーヒーとキーボードと共に何かを記録していくブログ

Gogs を CentOS8 に入れてみる

Gogs をインストールしてみる記録

環境

CentOS 8.3

Ref

www.programmersought.com

git user を作る

[root@gogs1 ope]# useradd git
[root@gogs1 ope]# passwd git
ユーザー git のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
[root@gogs1 ope]#

locale を変更

[root@gogs1 ope]# locale
LANG=ja_JP.UTF-8
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=
[root@gogs1 ope]#
[root@gogs1 ope]# localectl list-locales | grep -i us
en_US
en_US.iso885915
en_US.utf8
[root@gogs1 ope]#
[root@gogs1 ope]# localectl set-locale en_US.utf8
[root@gogs1 ope]#
[root@gogs1 ope]# source /etc/locale.conf
[root@gogs1 ope]#
[root@gogs1 ope]# locale
LANG=en_US.utf8
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=
[root@gogs1 ope]#

git user が sudo 出来るようにする

ついでに、パスワード無しでコマンドを実行できるようにする

# visudo
...
## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL
git     ALL=(ALL)       NOPASSWD: ALL
...

必要な周辺パッケージをインストールする

いつもの

# yum check
# yum update

tar とか

[root@gogs1 ope]# yum install tar wget mariadb mariadb-server
...
Installed:
  mariadb-3:10.3.28-1.module_el8.3.0+757+d382997d.x86_64
  mariadb-backup-3:10.3.28-1.module_el8.3.0+757+d382997d.x86_64
  mariadb-common-3:10.3.28-1.module_el8.3.0+757+d382997d.x86_64
  mariadb-connector-c-3.1.11-2.el8_3.x86_64
  mariadb-connector-c-config-3.1.11-2.el8_3.noarch
  mariadb-errmsg-3:10.3.28-1.module_el8.3.0+757+d382997d.x86_64
  mariadb-gssapi-server-3:10.3.28-1.module_el8.3.0+757+d382997d.x86_64
  mariadb-server-3:10.3.28-1.module_el8.3.0+757+d382997d.x86_64
  mariadb-server-utils-3:10.3.28-1.module_el8.3.0+757+d382997d.x86_64
  perl-DBD-MySQL-4.046-3.module_el8.1.0+203+e45423dc.x86_64
  perl-DBI-1.641-3.module_el8.1.0+199+8f0a6bbd.x86_64
  perl-Math-BigInt-1:1.9998.11-7.el8.noarch
  perl-Math-Complex-1.59-416.el8.noarch

Complete!
[root@gogs1 ope]#

git (latest)

ref

git-scm.com

結局めんどくさくなって yum で入れてしまった。

[root@gogs1 ope]# yum install git-all
...
Installed:
  apr-1.6.3-11.el8.x86_64
  apr-util-1.6.1-6.el8.x86_64
  apr-util-bdb-1.6.1-6.el8.x86_64
  apr-util-openssl-1.6.1-6.el8.x86_64
  centos-logos-httpd-80.5-2.el8.noarch
  git-all-2.27.0-1.el8.noarch
  git-credential-libsecret-2.27.0-1.el8.x86_64
  git-email-2.27.0-1.el8.noarch
  git-gui-2.27.0-1.el8.noarch
  git-instaweb-2.27.0-1.el8.noarch
  git-subtree-2.27.0-1.el8.x86_64
  git-svn-2.27.0-1.el8.noarch
  gitk-2.27.0-1.el8.noarch
  gitweb-2.27.0-1.el8.noarch
  httpd-2.4.37-30.module_el8.3.0+561+97fdbbcc.x86_64
  httpd-filesystem-2.4.37-30.module_el8.3.0+561+97fdbbcc.noarch
  httpd-tools-2.4.37-30.module_el8.3.0+561+97fdbbcc.x86_64
  libserf-1.3.9-9.module_el8.3.0+703+ba2f61b7.x86_64
  mod_http2-1.15.7-2.module_el8.3.0+477+498bb568.x86_64
  perl-Authen-SASL-2.16-13.el8.noarch
  perl-CGI-4.38-2.el8.noarch
  perl-Compress-Raw-Bzip2-2.081-1.el8.x86_64
  perl-Compress-Raw-Zlib-2.081-1.el8.x86_64
  perl-Digest-HMAC-1.03-17.module_el8.3.0+416+dee7bcef.noarch
  perl-Digest-SHA-1:6.02-1.el8.x86_64
  perl-Encode-Locale-1.05-10.module_el8.3.0+416+dee7bcef.noarch
  perl-GSSAPI-0.28-23.el8.x86_64
  perl-Git-SVN-2.27.0-1.el8.noarch
  perl-HTML-Parser-3.72-15.module_el8.3.0+416+dee7bcef.x86_64
  perl-HTML-Tagset-3.20-34.module_el8.3.0+416+dee7bcef.noarch
  perl-HTTP-Date-6.02-19.module_el8.3.0+416+dee7bcef.noarch
  perl-HTTP-Message-6.18-1.module_el8.3.0+416+dee7bcef.noarch
  perl-IO-Compress-2.081-1.el8.noarch
  perl-IO-HTML-1.001-11.module_el8.3.0+416+dee7bcef.noarch
  perl-LWP-MediaTypes-6.02-15.module_el8.3.0+416+dee7bcef.noarch
  perl-MailTools-2.20-2.el8.noarch
  perl-Memoize-1.03-416.el8.noarch
  perl-Net-SMTP-SSL-1.04-5.el8.noarch
  perl-Time-HiRes-1.9758-1.el8.x86_64
  perl-TimeDate-1:2.30-15.module_el8.3.0+416+dee7bcef.noarch
  perl-YAML-1.24-3.module_el8.1.0+230+35fea25e.noarch
  subversion-1.10.2-4.module_el8.3.0+703+ba2f61b7.x86_64
  subversion-libs-1.10.2-4.module_el8.3.0+703+ba2f61b7.x86_64
  subversion-perl-1.10.2-4.module_el8.3.0+703+ba2f61b7.x86_64
  tcl-1:8.6.8-2.el8.x86_64
  tk-1:8.6.8-1.el8.x86_64
  utf8proc-2.1.1-5.module_el8.3.0+703+ba2f61b7.x86_64

Complete!
[root@gogs1 ope]#
[root@gogs1 ope]# git --version
git version 2.27.0
[root@gogs1 ope]#

バージョン結構高いな 2.32 が最新らしい

mariadb をスタートさせる

[root@gogs1 ope]# systemctl start mariadb.service
[root@gogs1 ope]# systemctl status mariadb.service
● mariadb.service - MariaDB 10.3 database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor >
   Active: active (running) since Sat 2021-05-29 16:22:59 JST; 2s ago
     Docs: man:mysqld(8)
           https://mariadb.com/kb/en/library/systemd/
  Process: 35310 ExecStartPost=/usr/libexec/mysql-check-upgrade (code=exited,>
  Process: 35176 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mariadb.servi>
  Process: 35151 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, s>
 Main PID: 35279 (mysqld)
   Status: "Taking your SQL requests now..."
    Tasks: 30 (limit: 12415)
   Memory: 83.3M
   CGroup: /system.slice/mariadb.service
           └─35279 /usr/libexec/mysqld --basedir=/usr

May 29 16:22:58 gogs1.tk.net mysql-prepare-db-dir[35176]: See the MariaDB Kno>
May 29 16:22:58 gogs1.tk.net mysql-prepare-db-dir[35176]: MySQL manual for mo>
May 29 16:22:58 gogs1.tk.net mysql-prepare-db-dir[35176]: Please report any p>
May 29 16:22:58 gogs1.tk.net mysql-prepare-db-dir[35176]: The latest informat>
May 29 16:22:58 gogs1.tk.net mysql-prepare-db-dir[35176]: You can find additi>
May 29 16:22:58 gogs1.tk.net mysql-prepare-db-dir[35176]: http://dev.mysql.com
May 29 16:22:58 gogs1.tk.net mysql-prepare-db-dir[35176]: Consider joining Ma>
May 29 16:22:58 gogs1.tk.net mysql-prepare-db-dir[35176]: https://mariadb.org>
May 29 16:22:59 gogs1.tk.net mysqld[35279]: 2021-05-29 16:22:59 0 [Note] /usr>
May 29 16:22:59 gogs1.tk.net systemd[1]: Started MariaDB 10.3 database server.
[root@gogs1 ope]#

自動起動

[root@gogs1 ope]# systemctl is-enabled mariadb.service
disabled
[root@gogs1 ope]# systemctl enable mariadb.service
Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.
[root@gogs1 ope]#

git user になる

[root@gogs1 ope]# su - git
[git@gogs1 ~]$
[git@gogs1 ~]$

mariadb の初期設定する

command

mysql -u root -e "CREATE DATABASE IF NOT EXISTS gogs CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"

log

[git@gogs1 ~]$ mysql -u root -e "CREATE DATABASE IF NOT EXISTS gogs CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;"
[git@gogs1 ~]$ mysql -u root -e "show databases;"
+--------------------+
| Database           |
+--------------------+
| gogs               |
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
[git@gogs1 ~]$

mariadb に gogs user を作る command

mysql -u root -e "create user gogs; grant all privileges on gogs.* to gogs@'%' identified by 'PASSWORD';"

log

[git@gogs1 ~]$ mysql -u root -e "create user gogs; grant all privileges on gogs.* to gogs@'%' identified by 'PASSWORD';"
[git@gogs1 ~]$
[git@gogs1 ~]$
[git@gogs1 ~]$ mysql -u root -e "select Host,User,Password from mysql.user; show grants for gogs@'%';"
+--------------+------+-------------------------------------------+
| Host         | User | Password                                  |
+--------------+------+-------------------------------------------+
| localhost    | root |                                           |
| gogs1.tk.net | root |                                           |
| 127.0.0.1    | root |                                           |
| ::1          | root |                                           |
| %            | gogs | *1F0D3C5C4DB52D3E2CABA5BB638A291DC24B2F9E |
+--------------+------+-------------------------------------------+
+-----------------------------------------------------------------------------------------------------+
| Grants for gogs@%                                                                                   |
+-----------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `gogs`@`%` IDENTIFIED BY PASSWORD '*1F0D3C5C4DB52D3E2CABA5BB638A291DC24B2F9E' |
| GRANT ALL PRIVILEGES ON `gogs`.* TO `gogs`@`%`                                                      |
+-----------------------------------------------------------------------------------------------------+
[git@gogs1 ~]$

Go をインストールする

ref

golang.org

[git@gogs1 ~]$ sudo -s
[root@gogs1 git]# wget https://golang.org/dl/go1.16.4.linux-amd64.tar.gz
...
[root@gogs1 git]# ls -l
total 126020
-rw-r--r--. 1 root root 129044044 May  7 03:04 go1.16.4.linux-amd64.tar.gz
[root@gogs1 git]#

install go

[root@gogs1 git]# rm -rf /usr/local/go && tar -C /usr/local -xzf go1.16.4.linux-amd64.tar.gz
[root@gogs1 git]# ls -l /usr/local/
total 0
drwxr-xr-x.  2 root root   6 Nov  4  2020 bin
drwxr-xr-x.  2 root root   6 Nov  4  2020 etc
drwxr-xr-x.  2 root root   6 Nov  4  2020 games
drwxr-xr-x. 10 root root 272 May  7 00:05 go
drwxr-xr-x.  2 root root   6 Nov  4  2020 include
drwxr-xr-x.  2 root root   6 Nov  4  2020 lib
drwxr-xr-x.  3 root root  17 Mar 22 21:16 lib64
drwxr-xr-x.  2 root root   6 Nov  4  2020 libexec
drwxr-xr-x.  2 root root   6 Nov  4  2020 sbin
drwxr-xr-x.  5 root root  49 Mar 22 21:16 share
drwxr-xr-x.  2 root root   6 Nov  4  2020 src
[root@gogs1 git]#
[root@gogs1 git]# vim /etc/profile
[root@gogs1 git]#
[root@gogs1 git]# source /etc/profile
[root@gogs1 git]#
[root@gogs1 git]# tail /etc/profile
...

export PATH=$PATH:/usr/local/go/bin

[root@gogs1 git]#
[root@gogs1 git]# go version
go version go1.16.4 linux/amd64
[root@gogs1 git]#

gogs をダウンロード、インストールする

[git@gogs1 ~]$ git clone --depth 1 https://github.com/gogs/gogs.git gogs
Cloning into 'gogs'...
remote: Enumerating objects: 2331, done.
remote: Counting objects: 100% (2331/2331), done.
remote: Compressing objects: 100% (2156/2156), done.
remote: Total 2331 (delta 122), reused 1874 (delta 86), pack-reused 0
Receiving objects: 100% (2331/2331), 21.48 MiB | 3.50 MiB/s, done.
Resolving deltas: 100% (122/122), done.
[git@gogs1 ~]$ ls
go1.16.4.linux-amd64.tar.gz  gogs
[git@gogs1 ~]$ cd gogs
[git@gogs1 gogs]$ ls -l
total 136
-rw-rw-r--.  1 git git 11265 May 29 16:45 CHANGELOG.md
-rw-rw-r--.  1 git git   116 May 29 16:45 codecov.yml
drwxrwxr-x.  8 git git   108 May 29 16:45 conf
drwxrwxr-x.  4 git git   171 May 29 16:45 docker
-rw-rw-r--.  1 git git   974 May 29 16:45 Dockerfile
drwxrwxr-x.  5 git git    42 May 29 16:45 docs
-rw-rw-r--.  1 git git   794 May 29 16:45 gogs.go
-rw-rw-r--.  1 git git  3082 May 29 16:45 go.mod
-rw-rw-r--.  1 git git 73365 May 29 16:45 go.sum
drwxrwxr-x. 34 git git  4096 May 29 16:45 internal
-rw-rw-r--.  1 git git  1054 May 29 16:45 LICENSE
-rw-rw-r--.  1 git git  1624 May 29 16:45 Makefile
drwxrwxr-x.  8 git git    79 May 29 16:45 public
-rw-rw-r--.  1 git git  7034 May 29 16:45 README.md
-rw-rw-r--.  1 git git  5372 May 29 16:45 README_ZH.md
drwxrwxr-x.  7 git git   112 May 29 16:45 scripts
-rw-rw-r--.  1 git git   332 May 29 16:45 SECURITY.md
-rw-rw-r--.  1 git git  2139 May 29 16:45 Taskfile.yml
drwxrwxr-x. 11 git git   158 May 29 16:45 templates
[git@gogs1 gogs]$
[git@gogs1 gogs]$ go build -o gogs
...
[git@gogs1 gogs]$

firewall を編集する

[git@gogs1 gogs]$ sudo firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3
  sources:
  services: cockpit dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
[git@gogs1 gogs]$

ところで、インストール初期で cockpit 入っているのなんで? firewall に穴あけするのは、 http3000/tcp で。

[git@gogs1 gogs]$ sudo firewall-cmd --zone=public --add-service=http --permanent
success
[git@gogs1 gogs]$ sudo firewall-cmd --zone=public --add-port=3000/tcp --permanent
success
[git@gogs1 gogs]$ sudo firewall-cmd --reload
success
[git@gogs1 gogs]$
[git@gogs1 gogs]$ sudo firewall-cmd --zone=public --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: enp0s3
  sources:
  services: cockpit dhcpv6-client http ssh
  ports: 3000/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:
[git@gogs1 gogs]$

test してみる

[git@gogs1 gogs]$ ./gogs web
2021/05/29 16:54:35 [ WARN] Custom config "/home/git/gogs/custom/conf/app.ini" not found. Ignore this warning if you're running for the first time
2021/05/29 16:54:35 [TRACE] Log mode: Console (Trace)
2021/05/29 16:54:35 [ INFO] Gogs 0.13.0+dev
2021/05/29 16:54:35 [TRACE] Work directory: /home/git/gogs
2021/05/29 16:54:35 [TRACE] Custom path: /home/git/gogs/custom
2021/05/29 16:54:35 [TRACE] Custom config: /home/git/gogs/custom/conf/app.ini
2021/05/29 16:54:35 [TRACE] Log path: /home/git/gogs/log
2021/05/29 16:54:35 [TRACE] Build time:
2021/05/29 16:54:35 [TRACE] Build commit:
2021/05/29 16:54:35 [ INFO] Run mode: Development
2021/05/29 16:54:35 [ INFO] Listen on http://0.0.0.0:3000

# ここで web ページにアクセス

2021/05/29 16:54:40 [TRACE] Session ID: 1d1fcd1eaa96e69b
2021/05/29 16:54:40 [TRACE] CSRF Token: PdxXE2Kvrtv2lgHMm1WGO3wr_hc6MTYyMjI3NDg4MDQyMjgyNzI5Ng
2021/05/29 16:54:40 [TRACE] Session ID: 1d1fcd1eaa96e69b
2021/05/29 16:54:40 [TRACE] CSRF Token: 8VvfvemJmKERprrj75MeC3J6eFA6MTYyMjI3NDg4MDQ1MzQ3NzEyNA
2021/05/29 16:54:40 [TRACE] Template: install

f:id:takashikono:20210529165530p:plain
just installed gogs

一旦ページが見れれば Ctrl-C で止める

タグをつける(多分任意)

[git@gogs1 gogs]$ go build -tags "pam cert" -o gogs
go: downloading github.com/msteinert/pam v0.0.0-20190215180659-f29b9f28d6f9
# github.com/msteinert/pam
../go/pkg/mod/github.com/msteinert/pam@v0.0.0-20190215180659-f29b9f28d6f9/transaction.go:4:10: fatal error: security/pam_appl.h: No such file or directory
 //#include <security/pam_appl.h>
          ^~~~~~~~~~~~~~~~~~~~~
compilation terminated.
[git@gogs1 gogs]$

エラーが出た

gogs.io

このページにあるようにパッケージを入れてみる

[git@gogs1 gogs]$ sudo yum install libpam0g-dev
Last metadata expiration check: 1:34:13 ago on Sat 29 May 2021 03:32:31 PM JST.
No match for argument: libpam0g-dev
Error: Unable to find a match: libpam0g-dev
[git@gogs1 gogs]$

ないんだが? 無視しよう

もう GUI で設定を入れよう

[git@gogs1 gogs]$ ./gogs web
2021/05/29 17:20:40 [ WARN] Custom config "/home/git/gogs/custom/conf/app.ini" not found. Ignore this warning if you're running for the first time
2021/05/29 17:20:40 [TRACE] Log mode: Console (Trace)
2021/05/29 17:20:40 [ INFO] Gogs 0.13.0+dev
2021/05/29 17:20:40 [TRACE] Work directory: /home/git/gogs
2021/05/29 17:20:40 [TRACE] Custom path: /home/git/gogs/custom
2021/05/29 17:20:40 [TRACE] Custom config: /home/git/gogs/custom/conf/app.ini
2021/05/29 17:20:40 [TRACE] Log path: /home/git/gogs/log
2021/05/29 17:20:40 [TRACE] Build time: 2021-05-29 08:15:35 UTC
2021/05/29 17:20:40 [TRACE] Build commit: ba8be9489e6d959fa9005fc7d38bf62562580d23
2021/05/29 17:20:40 [ INFO] Run mode: Development
2021/05/29 17:20:41 [ INFO] Listen on http://0.0.0.0:3000

f:id:takashikono:20210529172208p:plain
database configuration

key value
database MySQL
host 127.0.0.1:3306
user gogs
password PASSWORD
database gogs
ssl mode Disable

f:id:takashikono:20210529172519p:plain
Gogs の全般設定

key value
application name Gogs
repo root path /home/git/gogs-repositories
exec user git
domain localhost
ssh port 22
http port 3000
application url http://localhost:3000/
log path /home/git/gogs/log

f:id:takashikono:20210529172809p:plain
オプション設定

click Gogs をインストール

f:id:takashikono:20210529173706p:plain
gogs home

サインアップ

f:id:takashikono:20210529174447p:plain
サインアップ

新規アカウントを作成をクリック

サインイン

自動でサインイン画面になる

f:id:takashikono:20210529174545p:plain
サインイン

ダッシュボード

サインインしたらダッシュボードに行く 既に1つ適当にリポジトリを作ったのでこんな感じになっている

f:id:takashikono:20210529174839p:plain
ダッシュボード

しかし、 issue -> 課題 pull request -> プルリクエス

てなっているの、ちょっとダサいw

サービスとして動かしたいんだが?

ref

www.howtoforge.com

一旦今動いているのを Ctrl-C で止める

[root@gogs1 system]# cd /usr/lib/systemd/system
[root@gogs1 system]#
[root@gogs1 system]# vim gogs.service
[root@gogs1 system]# cat gogs.service
[Unit]
Description=Gogs
After=syslog.target
After=network.target
After=mariadb.service

[Service]
Type=simple
User=git
Group=git
WorkingDirectory=/home/git/gogs
ExecStart=/home/git/gogs/gogs web
Restart=always
Environment=USER=git HOME=/home/git

[Install]
WantedBy=multi-user.target

[root@gogs1 system]#

reload daemon

[root@gogs1 system]# systemctl daemon-reload
[root@gogs1 system]#

start and enable gogs

[root@gogs1 system]# systemctl start gogs.service
[root@gogs1 system]# systemctl status gogs.service
● gogs.service - Gogs
   Loaded: loaded (/usr/lib/systemd/system/gogs.service; disabled; vendor pre>
   Active: active (running) since Sat 2021-05-29 18:04:54 JST; 2s ago
 Main PID: 40289 (gogs)
    Tasks: 6 (limit: 12415)
   Memory: 41.4M
   CGroup: /system.slice/gogs.service
           └─40289 /home/git/gogs/gogs web

May 29 18:04:54 gogs1.tk.net systemd[1]: Started Gogs.
May 29 18:04:54 gogs1.tk.net gogs[40289]: 2021/05/29 18:04:54 [TRACE] Log mod>
[root@gogs1 system]#
[root@gogs1 system]# systemctl enable gogs.service
Created symlink /etc/systemd/system/multi-user.target.wants/gogs.service → /usr/lib/systemd/system/gogs.service.
[root@gogs1 system]#

これでひとまず終わり