ラベル GitLab の投稿を表示しています。 すべての投稿を表示
ラベル GitLab の投稿を表示しています。 すべての投稿を表示
2023年7月15日土曜日

VS Codeでgit push時に発生する「Missing or invalid credentials.」のエラー解消方法

本記事では、VS Codeでgit push時に発生する「Missing or invalid credentials.」のエラーの解消方法を記載する。

環境

  • VS Code : 1.76.1
  • Remote - SSH : v0.102.0
  • 接続先Linux OS : AlmaLinux 8.5

事象

VS CodeでRemote - SSHの拡張機能を用いてLinux OSにSSH接続した状態でgit pushすると以下のような「Missing or invalid credentials.」のエラーで失敗することがある。

# git push
Missing or invalid credentials.
Error: connect ECONNREFUSED /run/user/0/vscode-git-d76c335e68.sock
    at PipeConnectWrap.afterConnect [as oncomplete] (node:net:1157:16) {
  errno: -111,
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: '/run/user/0/vscode-git-d76c335e68.sock'
}
Missing or invalid credentials.
Error: connect ECONNREFUSED /run/user/0/vscode-git-d76c335e68.sock
    at PipeConnectWrap.afterConnect [as oncomplete] (node:net:1157:16) {
  errno: -111,
  code: 'ECONNREFUSED',
  syscall: 'connect',
  address: '/run/user/0/vscode-git-d76c335e68.sock'
}
remote: HTTP Basic: Access denied. The provided password or token is incorrect or your account has 2FA enabled and you must use a personal access token instead of a password. See http://t1026gitl.test.local/help/topics/git/troubleshooting_git#error-on-git-fetch-http-basic-access-denied
fatal: Authentication failed for 'http://t1026gitl.test.local/ansible/test.git/'

解消方法

本事象は、環境変数が悪さをするようだ。

exportコマンドで環境変数を確認すると、GIT_ASKPASSという環境変数において何やらVS Codeのシェルが指定されていることがわかる。おそらく、このシェルを介してVS Codeからgit実行時のユーザー名・パスワード情報の入力をできるようにしていると想定されるが、これがうまく動作しないことが原因となる。

# export | grep GIT_ASKPASS
declare -x GIT_ASKPASS="/root/.vscode-server/bin/5e80xxxxfcb6ba4c2d23712967dxxxx089da575b/extensions/git/dist/askpass.sh"

というわけで、環境変数GIT_ASKPASSunsetコマンドで解除する。

# unset GIT_ASKPASS

git pushするとユーザー名とパスワードを求められるので、正しい情報を入力すれば、git pushに成功するようになる。

# git push
Username for 'http://t1026gitl.test.local': tadmin
Password for 'http://tadmin@t1026gitl.test.local': 
Enumerating objects: 37, done.
Counting objects: 100% (37/37), done.
Delta compression using up to 2 threads
Compressing objects: 100% (22/22), done.
Writing objects: 100% (22/22), 2.07 KiB | 2.07 MiB/s, done.
Total 22 (delta 18), reused 0 (delta 0), pack-reused 0
To http://t1026gitl.test.local/ansible/test.git
   f9860d8..60d4beb  main -> main

以上で、VS Codeでgit push時に発生する「Missing or invalid credentials.」のエラーの解消方法の手順は完了となる。

2022年11月19日土曜日

GitLab Runnerインストール&バージョンアップ手順

GitLabには、リポジトリのコードの更新をトリガーとしてジョブを実行する機能として、「GitLab Runner」と呼ばれるツールが提供されている。GitLab Runnerを用いることで、CI/CDパイプラインをGitLab上で実現することができる。

GitLab RunnerはRPMのパッケージが提供されており、簡単に導入ができる。本記事では、GitLab Runnerのインストール手順とバージョンアップ手順を記載する。

GitLab Runnerインストール

今回の動作検証はAlmaLinux 8に対して実施した。ただし、Red Hat系のディストリビューションであるCentOSやRocky Linuxなどでも同様の手順で実施できるだろう。

  • OS : AlmaLinux 8.5
  • GitLab : 15.4.4
  • GitLab Runner : 15.4.1

また、GitLabのインストールは、以下記事の手順にてインストールを実施済みであることを前提とする。

GitLab Runnerインストール手順

1. GitLab Runnerパッケージのバージョン確認

GitLab Runnerのパッケージは、AWS S3上に作られているリポジトリから入手する。最新版であれば以下URLからダウンロードできる。

バージョン指定する場合は、まず以下サイトからGitLab Runnerのリリース情報を確認する。

例えば、2022/11月時点のタイミングでは、15.3.2、15.4.1、15.5.0などのバージョンがリリースされていることがわかる。

図15

今回は15.4.1をインストールするため、ダウンロードURLは以下の通りとなる。

2. パッケージダウンロード

curlコマンドでパッケージダウンロードを行う。あまりダウンロード速度は出ないので気長に待つこと。

# curl -LJO "[ダウンロードURL]"

コマンドの実行結果は以下の通り。今回は、パッケージの容量は414MBで3分程度でダウンロード完了した。

# curl -LJO "https://gitlab-runner-downloads.s3.amazonaws.com/v15.4.1/rpm/gitlab-runner_amd64.rpm"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  414M  100  414M    0     0  2328k      0  0:03:02  0:03:02 --:--:-- 4487k

3. パッケージインストール

パッケージはそのままrpmコマンドでインストールすればよいが、gitのみ必要となるため、インストールしていない場合はインストールしておこう。

# dnf install git -y

gitインストール後、rpmコマンドでインストールすればよい。

# rpm -ivh gitlab-runner_amd64.rpm
警告: gitlab-runner_amd64.rpm: ヘッダー V4 RSA/SHA512 Signature、鍵 ID 35dfa027: NOKEY
Verifying...                          ################################# [100%]
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:gitlab-runner-15.4.1-1           ################################# [100%]
GitLab Runner: creating gitlab-runner...
Home directory skeleton not used
Runtime platform                                    arch=amd64 os=linux pid=5982 revision=526d939d version=15.4.1
gitlab-runner: the service is not installed
Runtime platform                                    arch=amd64 os=linux pid=5990 revision=526d939d version=15.4.1
gitlab-ci-multi-runner: the service is not installed
Runtime platform                                    arch=amd64 os=linux pid=6013 revision=526d939d version=15.4.1
Runtime platform                                    arch=amd64 os=linux pid=6061 revision=526d939d version=15.4.1
INFO: Docker installation not found, skipping clear-docker-cache

4. GitLab RunnerをGitLabに登録

GitLab Runnerインストール後は、GitLabで利用できるように登録作業を行う。

まず、GitLab上のAdmin画面で、[Overview]->[Runners]を開く。ここで、登録のために必要となる[Registration token]をコピーしておく。

次に、GitLab Runnerをインストールしたサーバにて、gitlab-runner registerコマンドにて登録を行う。登録作業は対話形式で行う。

# gitlab-runner register
Runtime platform                                    arch=amd64 os=linux pid=6409 revision=526d939d version=15.4.1
Running in system-mode.

Enter the GitLab instance URL (for example, https://gitlab.com/):
http://gitlab.com/ ←★GitLabのURLを記載
Enter the registration token:
M-4oTXXXXeTxkhXXXXkX ←★先ほど確認したGitLabのRegistration tokenを記載
Enter a description for the runner:
[localhost]: ←★GitLab上の登録名。特に指定がなければそのままEnter
Enter tags for the runner (comma-separated):
 ←★そのままEnter
Enter optional maintenance note for the runner:
 ←★そのままEnter
Registering runner... succeeded                     runner=M-4oTtcR
Enter an executor: parallels, docker+machine, docker-ssh+machine, custom, docker, docker-ssh, shell, ssh, virtualbox, kubernetes:
shell ←★今回はshellを指定
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!

Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml"

5. GitLab上で登録状況を確認

再度、GitLabにて[Overview]->[Runners]を開くと、先ほど登録したGitLab RunnerがOnline状態で表示されるはずだ。

以上で、GitLab Runnerのインストール手順は完了となる。

GitLab Runnerバージョンアップ手順

GitLabはかなりの高頻度でバージョンアップがされている。GitLab Runnerも同様にバージョンアップ頻度が高いため、インストール手順と併せてバージョンアップ手順も記載する。

1. GitLab Runnerパッケージのバージョン確認&ダウンロード

こちらはインストール手順と流れは変わらないため、割愛する。

2 GitLab Runnerバージョンアップ

インストール時との違いはrpmコマンドのオプションだけとなる。-Uオプションに変更することで、パッケージのバージョンアップが実施される。

# rpm -Uvh gitlab-runner_amd64.rpm
警告: gitlab-runner_amd64.rpm: ヘッダー V4 RSA/SHA512 Signature、鍵 ID 35dfa027: NOKEY
Verifying...                          ################################# [100%]
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:gitlab-runner-15.4.1-1           ################################# [ 50%]
GitLab Runner: detected user gitlab-runner
Runtime platform                                    arch=amd64 os=linux pid=924254 revision=526d939d version=15.4.1
gitlab-runner: Service is running
Runtime platform                                    arch=amd64 os=linux pid=924296 revision=526d939d version=15.4.1
gitlab-ci-multi-runner: the service is not installed
Runtime platform                                    arch=amd64 os=linux pid=924315 revision=526d939d version=15.4.1
Runtime platform                                    arch=amd64 os=linux pid=924361 revision=526d939d version=15.4.1
INFO: Docker installation not found, skipping clear-docker-cache
整理中 / 削除中...
   2:gitlab-runner-15.4.0-1           ################################# [100%]

バージョンアップ後は特に手動でのサービス再起動等は不要で、GitLabを確認すると即座に新しいバージョンで認識しているはずだ。

以上で、GitLab Runnerのバージョンアップ手順は完了となる。

参考

2022年11月12日土曜日

GitLabバージョンアップ手順

GitLabはかなりの頻度でバージョンアップが繰り返しており、月1回新しいマイナーバージョンのリリースがされている状況となる。

例えば、直近(2022/11月時点)のバージョンリリースのタイミングは以下となる。毎月20日前後で新しいバージョンがリリースされていることがわかる。

バージョン リリース日
15.5 2022/10/21
15.4 2022/9/21
15.3 2022/8/19
15.2 2022/7/21
15.1 2022/6/21

以下サイトによると、GitLabのサポート期限はリリースから1年となっているようなので、定期的なバージョンアップ計画が必要となりそうだ。

上記をふまえ、本記事ではGitLabをバージョンアップする手順を記載する。

環境

今回の動作検証はAlmaLinux 8に対して実施した。ただし、Red Hat系のディストリビューションであるCentOSやRocky Linuxなどでも同様の手順で実施できるだろう。

  • OS : AlmaLinux 8.5
  • 旧バージョン : gitlab-ee-15.3.4-ee.0.el8.x86_64
  • 新バージョン : gitlab-ee-15.4.4-ee.0.el8.x86_64

また、GitLabのインストールは、以下記事の手順にてインストールを実施済みであることを前提とする。

GitLabバージョンアップ手順

1. バージョン選定

バージョンアップするにあたり、バージョンアップ対象バージョンの選定を行う。

パッチのリリース情報は、以下URLから確認することができる。

また、バージョンアップ時のアップグレードパスは、以下マニュアルに記載されている。

マニュアルでは以下の通りアップグレードパスが記載されており、例えば、15.0から最新版にバージョンアップする場合は、一度15.4.0を経由させてバージョンアップする必要がある。

8.11.Z -> 8.12.0 -> 8.17.7 -> 9.5.10 -> 10.8.7
-> 11.11.8 -> 12.0.12 -> 12.1.17 -> 12.10.14
-> 13.0.14 -> 13.1.11 -> 13.8.8 -> 13.12.15
-> 14.0.12 -> 14.3.6 -> 14.9.5 -> 14.10.Z
-> 15.0.Z -> 15.4.0 -> latest 15.Y.Z

今回は、15.3.4から15.4.4へのバージョンアップとなるため、直接バージョンアップが可能となる。

2. リポジトリ上に存在するGitLabのバージョン確認

dnfでそのままバージョンアップすると、最新版にバージョンアップされてしまう。特に確認せず最新版にバージョンアップする場合は本手順は不要だが、今回は特定のバージョンにバージョンアップするため、事前にGitLabのリポジトリに存在するGitLabのバージョン確認を行う。

バージョン確認は、dnf search時に--showduplicatesのオプションを付与して実行する。並び順がバージョン順とならない場合があるため、sortコマンドを使って表示をさせている。

実行結果は以下の通り。ターゲットバージョンであるgitlab-ee-15.4.4-ee.0.el8.x86_64が存在することが確認できた。

# dnf search --showduplicates gitlab-ee | sort
=========================== 名前 完全一致: gitlab-ee ===========================
gitlab-ee-12.10.0-ee.0.el8.x86_64 : GitLab Enterprise Edition (including NGINX, Postgres, Redis)
gitlab-ee-12.10.1-ee.0.el8.x86_64 : GitLab Enterprise Edition (including NGINX, Postgres, Redis)
gitlab-ee-12.10.10-ee.0.el8.x86_64 : GitLab Enterprise Edition (including NGINX, Postgres, Redis)

~(中略)~

gitlab-ee-15.3.0-ee.0.el8.x86_64 : GitLab Enterprise Edition (including NGINX, Postgres, Redis)
gitlab-ee-15.3.1-ee.0.el8.x86_64 : GitLab Enterprise Edition (including NGINX, Postgres, Redis)
gitlab-ee-15.3.2-ee.0.el8.x86_64 : GitLab Enterprise Edition (including NGINX, Postgres, Redis)
gitlab-ee-15.3.3-ee.0.el8.x86_64 : GitLab Enterprise Edition (including NGINX, Postgres, Redis)
gitlab-ee-15.3.4-ee.0.el8.x86_64 : GitLab Enterprise Edition (including NGINX, Postgres, Redis)
gitlab-ee-15.3.4-ee.0.el8.x86_64 : GitLab Enterprise Edition (including NGINX, Postgres, Redis)
gitlab-ee-15.3.5-ee.0.el8.x86_64 : GitLab Enterprise Edition (including NGINX, Postgres, Redis)
gitlab-ee-15.4.0-ee.0.el8.x86_64 : GitLab Enterprise Edition (including NGINX, Postgres, Redis)
gitlab-ee-15.4.1-ee.0.el8.x86_64 : GitLab Enterprise Edition (including NGINX, Postgres, Redis)
gitlab-ee-15.4.2-ee.0.el8.x86_64 : GitLab Enterprise Edition (including NGINX, Postgres, Redis)
gitlab-ee-15.4.3-ee.0.el8.x86_64 : GitLab Enterprise Edition (including NGINX, Postgres, Redis)
gitlab-ee-15.4.4-ee.0.el8.x86_64 : GitLab Enterprise Edition (including NGINX, Postgres, Redis)
gitlab-ee-15.5.0-ee.0.el8.x86_64 : GitLab Enterprise Edition (including NGINX, Postgres, Redis)
gitlab-ee-15.5.1-ee.0.el8.x86_64 : GitLab Enterprise Edition (including NGINX, Postgres, Redis)
gitlab-ee-15.5.2-ee.0.el8.x86_64 : GitLab Enterprise Edition (including NGINX, Postgres, Redis)

3. バージョンを指定してバージョンアップ

GitLabのバージョンを指定する場合は、dnfのパッケージ名の指定時に、バージョンまで含めた名称で指定すればよい。GitLab 15.xは1.2GBほどの容量があるため、そこそこダウンロードとインストールに時間を要するので気長に待とう。

# dnf update gitlab-ee-15.4.4-ee.0.el8.x86_64
メタデータの期限切れの最終確認: 0:02:03 時間前の 2022年11月03日 14時48分39秒 に実施しました。
依存関係が解決しました。
====================================================================================================================================
 パッケージ                  アーキテクチャー         バージョン                           リポジトリー                       サイズ
====================================================================================================================================
アップグレード:
 gitlab-ee                   x86_64                   15.4.4-ee.0.el8                      gitlab_gitlab-ee                   1.2 G

トランザクションの概要
====================================================================================================================================
アップグレード  1 パッケージ

ダウンロードサイズの合計: 1.2 G

~(中略)~

ok: run: redis: (pid 1602) 456972s
ok: run: redis-exporter: (pid 832200) 0s
ok: run: sidekiq: (pid 832207) 1s

     _______ __  __          __
    / ____(_) /_/ /   ____ _/ /_
   / / __/ / __/ /   / __ `/ __ \
  / /_/ / / /_/ /___/ /_/ / /_/ /
  \____/_/\__/_____/\__,_/_.___/


Upgrade complete! If your GitLab server is misbehaving try running
  sudo gitlab-ctl restart
before anything else.
If you need to roll back to the previous version you can use the database
backup made during the upgrade (scroll up for the filename).


  検証             : gitlab-ee-15.4.4-ee.0.el8.x86_64                                                                           1/2
  検証             : gitlab-ee-15.3.4-ee.0.el8.x86_64                                                                           2/2

アップグレード済み:
  gitlab-ee-15.4.4-ee.0.el8.x86_64

完了しました!

なお、バージョンアップ対象のGitLabのバージョンによっては、本体以外にも関連するパッケージのアップグレードや追加インストールが発生する。以下は、15.1.2 -> 15.3.4へバージョンアップした際のdnfの実行結果となり、本体以外にさまざまなパッケージが追加インストールされていることがわかる。

# dnf update gitlab-ee-15.3.4-ee.0.el8.x86_64
gitlab_gitlab-ee                                648  B/s | 862  B     00:01
gitlab_gitlab-ee-source                         316  B/s | 862  B     00:02
依存関係が解決しました。
================================================================================
 パッケージ                   Arch   バージョン          リポジトリー     サイズ
================================================================================
アップグレード:
 gitlab-ee                    x86_64 15.3.4-ee.0.el8     gitlab_gitlab-ee 1.1 G
 glibc                        x86_64 2.28-189.5.el8_6    baseos           2.2 M
 glibc-all-langpacks          x86_64 2.28-189.5.el8_6    baseos            25 M
 glibc-common                 x86_64 2.28-189.5.el8_6    baseos           1.3 M
依存関係のインストール:
 dwz                          x86_64 0.12-10.el8         appstream        108 k
 efi-srpm-macros              noarch 3-3.el8             appstream         21 k
 ghc-srpm-macros              noarch 1.4.2-7.el8         appstream        9.2 k
 glibc-gconv-extra            x86_64 2.28-189.5.el8_6    baseos           1.5 M

~(中略)~

 unzip                        x86_64 6.0-46.el8          baseos           195 k
 zip                          x86_64 3.0-23.el8          baseos           270 k
弱い依存関係のインストール:
 perl-Encode-Locale           noarch 1.05-10.module_el8.5.0+2812+ed912d05
                                                         appstream         20 k

トランザクションの概要
================================================================================
インストール    117 パッケージ
アップグレード    4 パッケージ

ダウンロードサイズの合計: 1.2 G

~(以下略)~

4. バージョンアップ後の確認

バージョンアップ後にGitLabにログインして、Adminの画面からバージョン確認をしてみよう。問題なくバージョンアップされていれば作業は完了となる。

以上で、GitLabをバージョンアップする手順は完了となる。

2022年11月5日土曜日

GitLabバックアップ・リストア手順

自宅環境のGitLabでは、自分が作成したAnsibleのPlaybookやPythonスクリプトだけだなく、各種技術情報などをWikiで管理するようにしており、GitLabで保存されているデータの重要性が高くなってきた。

そのため、万が一自宅環境のディスク障害などに備え、バックアップを取得することにした。幸い、GitLabではバックアップ・リストアをするためのコマンドが標準で用意されている。

今回は、GitLabの機能を用いてバックアップ・リストアを行う手順を記載する。

環境

GitLabのOSはAlmaLinuxを用いる。ただし、Red Hat系のディストリビューションであるCentOSやRocky Linuxなどでも同様の手順で対応できると想定する。

  • OS : AlmaLinux 8.5
  • GitLab : 15.3.4

また、本記事では同一サーバに対してリストアすることを想定するが、バックアップファイルを用いて別のサーバに対してリストアすることもできるようだ。その手順については、別途検証した際に公開することにしたい。

バックアップ

1. `バックアップ取得

GitLabのバックアップは、gitlab-rake gitlab:backup:createコマンドを実行するだけで完了する。本コマンドは特にGitLabのサービス停止などは不要となる。

Backup [バックアップ名] is done.と表示されれば問題なくバックアップは完了となる。

# gitlab-rake gitlab:backup:create
2022-07-29 21:24:15 +0900 -- Dumping database ...
Dumping PostgreSQL database gitlabhq_production ... [DONE]
2022-07-29 21:24:19 +0900 -- Dumping database ... done
2022-07-29 21:24:19 +0900 -- Dumping repositories ...
{"command":"create","gl_project_path":"gitlab-instance-870ba0ef.wiki","level":"info","msg":"started create","relative_path":"@groups/d4/73/d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f90da3a666eec13ab35.wiki.git","storage_name":"default","time":"2022-07-29T12:24:19.686Z"}

~(中略)~

2022-07-29 21:24:20 +0900 -- Deleting tar staging files ... done
2022-07-29 21:24:20 +0900 -- Deleting backups/tmp ...
2022-07-29 21:24:20 +0900 -- Deleting backups/tmp ... done
2022-07-29 21:24:20 +0900 -- Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data
and are not included in this backup. You will need these files to restore a backup.
Please back them up manually.
2022-07-29 21:24:20 +0900 -- Backup 1659097455_2022_07_29_15.1.2-ee is done.

2. バックアップファイルの確認

バックアップファイルが/var/opt/gitlab/backupsに生成されていることを確認する。バックアップファイルは[時間]_[月]_[日]_[バージョン]_gitlab_backup.tarという名前で生成される。

# ls -l /var/opt/gitlab/backups
-rw------- 1 git git 25518080 10月 29 01:30 1666974616_2022_10_29_15.3.4-ee_gitlab_backup.tar

3. 設定ファイルのバックアップ

バックアップファイルにはGitLabの設定ファイルは含まれないため、以下ファイルを任意の場所にバックアップしておく。

  • /etc/gitlab/gitlab.rb
  • /etc/gitlab/gitlab-secrets.json

容量はそこまで大きくないことから、tarで固めてディレクトリ全体をバックアップしても問題ない。

# tar zcvf gitlab_config_20221029.tgz /etc/gitlab
tar: メンバ名から先頭の `/' を取り除きます
/etc/gitlab/
/etc/gitlab/gitlab-secrets.json
/etc/gitlab/trusted-certs/
/etc/gitlab/trusted-certs/public.crt
/etc/gitlab/trusted-certs/6b8ba5bf.0
/etc/gitlab/gitlab.rb

以上でGitLabのバックアップは完了となる。

GitLabリストア手順

1. 前提条件確認

前提として、バックアップファイルは/var/opt/gitlab/backupsに配置する。また、バックアップファイルとリストア先のGitLabのバージョンは一致させることが必要となる。

今回は以下の通り、バックアップファイルとリストア先のGitLabのバージョンは15.3.4で一致していることを確認した。

# ls -l /var/opt/gitlab/backups
-rw------- 1 git git 25518080 10月 29 01:30 1666974616_2022_10_29_15.3.4-ee_gitlab_backup.tar

# rpm -qa | grep gitlab
gitlab-ee-15.3.4-ee.0.el8.x86_64

また、今回はリストアされたことを確認できるよう、tuser001/linux_configというプロジェクトを事前に削除し、リストアすることで復旧することを確認する。

2. サービス停止

GitLabを構成するサービスのうち、pumasidekiqを停止する。

# gitlab-ctl status
run: alertmanager: (pid 3127640) 1418103s; run: log: (pid 1528) 3140631s
run: gitaly: (pid 3127689) 1418101s; run: log: (pid 1504) 3140631s
run: gitlab-exporter: (pid 3127638) 1418103s; run: log: (pid 1526) 3140631s

~(中略)~

run: sidekiq: (pid 3127807) 1418099s; run: log: (pid 1496) 3140631s
# gitlab-ctl stop puma
ok: down: puma: 0s, normally up
# gitlab-ctl stop sidekiq
ok: down: sidekiq: 0s, normally up
# gitlab-ctl status
run: alertmanager: (pid 3127640) 1418465s; run: log: (pid 1528) 3140993s
run: gitaly: (pid 3127689) 1418463s; run: log: (pid 1504) 3140993s
run: gitlab-exporter: (pid 3127638) 1418465s; run: log: (pid 1526) 3140993s

~(中略)~

down: puma: 17s, normally up; run: log: (pid 1495) 3140993s
~(中略)~
down: sidekiq: 8s, normally up; run: log: (pid 1496) 3140993s

3. リストア

リストアは、gitlab-rake gitlab:backup:restoreを利用する。この際にバックアップファイル名を引数として指定するが、ファイル名の拡張子(.tar)は不要となるので注意する。途中2回ほど継続しても問題ないか確認を求められるので、yesを選択して先に進めよう。

Restore task is done.と表示されれば問題なくリストアは完了となる。

# gitlab-rake gitlab:backup:restore BACKUP=1666974616_2022_10_29_15.3.4-ee
2022-08-05 22:53:54 +0900 -- Unpacking backup ... 
2022-08-05 22:53:54 +0900 -- Unpacking backup ... done
2022-08-05 22:53:54 +0900 -- Restoring database ... 
2022-08-05 22:53:54 +0900 -- Be sure to stop Puma, Sidekiq, and any other process that
connects to the database before proceeding. For Omnibus
installs, see the following link for more information:
https://docs.gitlab.com/ee/raketasks/backup_restore.html#restore-for-omnibus-gitlab-installations

Before restoring the database, we will remove all existing
tables to avoid future upgrade problems. Be aware that if you have
custom tables in the GitLab database these tables and all data will be
removed.

Do you want to continue (yes/no)? yes ★yesを入力
Removing all tables. Press `Ctrl-C` within 5 seconds to abort
2022-08-05 13:54:12 UTC -- Cleaning the database ... 
2022-08-05 13:54:14 UTC -- done
Restoring PostgreSQL database gitlabhq_production ... ERROR:  must be owner of extension pg_trgm
ERROR:  must be owner of extension btree_gist
ERROR:  must be owner of extension btree_gist
ERROR:  must be owner of extension pg_trgm

~(中略)~

2022-08-05 22:54:23 +0900 -- Restoring terraform states ... done
2022-08-05 22:54:23 +0900 -- Restoring packages ...
2022-08-05 22:54:23 +0900 -- Restoring packages ... done
This task will now rebuild the authorized_keys file.
You will lose any data stored in the authorized_keys file.
Do you want to continue (yes/no)? yes ★yesを入力

2022-08-05 22:54:49 +0900 -- Deleting tar staging files ...
2022-08-05 22:54:49 +0900 -- Cleaning up /var/opt/gitlab/backups/backup_information.yml

~(中略)~

2022-08-05 22:54:49 +0900 -- Warning: Your gitlab.rb and gitlab-secrets.json files contain sensitive data
and are not included in this backup. You will need to restore these files manually.
2022-08-05 22:54:49 +0900 -- Restore task is done.

4. 設定ファイルを再配置

事前にバックアップしていた以下ファイルを/etc/gitlabに再配置する。

  • /etc/gitlab/gitlab.rb
  • /etc/gitlab/gitlab-secrets.json

5. リストア後の再設定とサービス起動

以下コマンドを実行し、GitLabの再設定、サービス再起動を行う。

# gitlab-ctl reconfigure
# gitlab-ctl restart

再起動後にサービスがすべて起動していることを確認しよう。すべてのサービスがrunと表示されれば問題ない。

# gitlab-ctl status
run: alertmanager: (pid 1556185) 70s; run: log: (pid 1528) 3141350s
run: gitaly: (pid 3127689) 1418820s, got TERM; run: log: (pid 1504) 3141350s
run: gitlab-exporter: (pid 1556211) 38s; run: log: (pid 1526) 3141350s

~(中略)~

run: sidekiq: (pid 1556320) 33s; run: log: (pid 1496) 3141350s

6. リストア後のGitLabの健全性チェック

最後にリストア後のGitLabの健全性チェックをgitlab-rake gitlab:checkコマンドで実施する。

各種チェックが実行されるが、すべてOKとなっていれば問題ない。

# gitlab-rake gitlab:check SANITIZE=true
Checking GitLab subtasks ...

Checking GitLab Shell ...

GitLab Shell: ... GitLab Shell version >= 14.10.0 ? ... OK (14.10.0)
Running /opt/gitlab/embedded/service/gitlab-shell/bin/check
Internal API available: OK
Redis available via internal API: OK
gitlab-shell self-check successful

~(中略)~

Checking GitLab App ... Finished

Checking GitLab subtasks ... Finished

7. 削除したデータ復旧の確認

リストア後、事前に削除したtuser001/linux_configのプロジェクトが復旧できていることが確認できた。

以上でGitLabのリストアは完了となる。

参考

2022年10月29日土曜日

GitLabをActive Directoryと認証連携する手順

先日自宅にGitLabを導入し、AnsibleやPythonのコードなどの管理を実施している。

GitLabはGitLab自身にてユーザやグループを管理する機能を持っており、自宅で利用する分には、その機能で十分対応できる。しかし、多数のユーザでGitLabを共同利用するようなケースでは、ユーザ登録、削除、更新などの管理が煩雑になってしまう問題がある。

このような場合は、別にユーザ認証を行うActive Directory(以下、AD)やLDAPのサーバと認証連携を行うと管理が楽になる。今回はGitLabとActive Directoryを認証連携するための手順を記載する。

環境

以下、導入OSとGitLabのバージョンを記載する。

  • OS : AlmaLinux 8.5
  • GitLab : 15.1.2

ADとの連携は、LDAP(ポート番号389)または、LDAPS(ポート番号636)のプロトコルを用いる。もしLDAPSを用いる場合は、ADにLDAPS用の証明書をインストールしLDAPSを有効化することが必要となる。ADのLDAPS有効化手順は、以下記事を参照いただきたい。

GitLabでADと認証連携する手順

1. 設定ファイルをバックアップ

GitLabの設定ファイルは/etc/gitlab/gitlab.rbとなる。設定変更前にバックアップを取っておこう。
※YYYYMMDDは日付などをいれること。

# cp /etc/gitlab/gitlab.rb{,_YYYYMMDD}

2. 設定個所を確認

設定変更箇所はLDAP Settings以降の個所となる。viなどで設定ファイルを開き、/LDAPで検索を行い該当箇所に移動しよう。

# vi /etc/gitlab/gitlab.rb

~(中略)~

### LDAP Settings
###! Docs: https://docs.gitlab.com/omnibus/settings/ldap.html
###! **Be careful not to break the indentation in the ldap_servers block. It is

# gitlab_rails['ldap_enabled'] = false
# gitlab_rails['prevent_ldap_sign_in'] = false

###! **remember to close this block with 'EOS' below**
# gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
#   main: # 'main' is the GitLab 'provider ID' of this LDAP server
#     label: 'LDAP'
#     host: '_your_ldap_server'
#     port: 389
#     uid: 'sAMAccountName'

~(中略)~

# EOS

3. AD連携の設定を追加

ADとの認証連携に必要な設定項目について、以下表にまとめた。

設定項目 設定値
label ログイン画面に表示させる認証方式のタブのラベルとなる。特に好みがなければデフォルトの「LDAP」のままでも問題ないだろう。
gitlab_rails[‘ldap_enabled’] trueに設定する。
host ADのIPアドレスを設定する。
port LDAPの場合は389、LDAPSの場合は636を設定する。
uid ADと認証連携する場合はsAMAccountNameを設定する。
bind_dn AD上のバインドユーザを設定する。
password バインドユーザのパスワードを設定する。
verify_certificates LDAPの場合はfalse、LDAPSの場合はtrueに設定する。
active_directory ADと認証連携する場合はtrueを設定する。
base ベースDNを設定する。
ca_file LDAPSの場合は、ADのSSLサーバ証明書の公開鍵のファイルを/etc/gitlab/trusted-certsディレクトリに配置したうえで、その証明書ファイルのフルパスを設定する。

実際の設定例を以下に記載する。

LDAPの場合

gitlab_rails['ldap_enabled']trueに変更しつつ、

### LDAP Settings
###! Docs: https://docs.gitlab.com/omnibus/settings/ldap.html
###! **Be careful not to break the indentation in the ldap_servers block. It is
###!   in yaml format and the spaces must be retained. Using tabs will not work.**

gitlab_rails['ldap_enabled'] = true
gitlab_rails['prevent_ldap_sign_in'] = false

###! **remember to close this block with 'EOS' below**
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
  main:
    label: 'LDAP'
    host: '192.168.1.1'
    port: 389
    uid: 'sAMAccountName'
    bind_dn: 'CN=binduser,OU=My OU,DC=test,DC=local'
    password: 'BINDUSER_PASSWORD'
    encryption: 'plain'
    verify_certificates: false
    smartcard_auth: false
    active_directory: true
    allow_username_or_email_login: true
    lowercase_usernames: false
    block_auto_created_users: false
    base: 'OU=My OU,DC=test,DC=local'
    user_filter: ''
EOS

LDAPSの場合

LDAPの差異がある個所に★印でコメントを記載している。なお、前述したとおり事前にADのSSLサーバ証明書の公開鍵のファイルを/etc/gitlab/trusted-certsディレクトリに配置しておくこと。

### LDAP Settings
###! Docs: https://docs.gitlab.com/omnibus/settings/ldap.html
###! **Be careful not to break the indentation in the ldap_servers block. It is
###!   in yaml format and the spaces must be retained. Using tabs will not work.**

gitlab_rails['ldap_enabled'] = true
gitlab_rails['prevent_ldap_sign_in'] = false

###! **remember to close this block with 'EOS' below**
gitlab_rails['ldap_servers'] = YAML.load <<-'EOS'
  main: # 'main' is the GitLab 'provider ID' of this LDAP server
    label: 'LDAP'
    host: 'ad01.test.local' ★ADのFQDNに変更
    port: 636 ★636に変更
    uid: 'sAMAccountName'
    bind_dn: 'CN=binduser,OU=My OU,DC=test,DC=local'
    password: 'BINDUSER_PASSWORD'
    encryption: 'simple_tls' ★simple_tlsに変更
    verify_certificates: true ★trueに変更
    smartcard_auth: false
    active_directory: true
    allow_username_or_email_login: true
    lowercase_usernames: false
    block_auto_created_users: false
    base: 'OU=My OU,DC=test,DC=local'
    user_filter: ''
    ca_file: '/etc/gitlab/trusted-certs/public_ad.crt' ★追加
EOS

4. 設定を反映

設定を反映するため、gitlab-ctl reconfigureを実行する。環境にもよるが、1分程度で処理は終了する。

# gitlab-ctl reconfigure
[2022-07-16T16:47:27+09:00] INFO: Started Chef Infra Zero at chefzero://localhost:1 with repository at /opt/gitlab/embedded (One version per cookbook)
Chef Infra Client, version 17.10.0
Patents: https://www.chef.io/patents
Infra Phase starting
[2022-07-16T16:47:27+09:00] INFO: *** Chef Infra Client 17.10.0 ***
[2022-07-16T16:47:27+09:00] INFO: Platform: x86_64-linux

~(中略)~

Running handlers:
[2022-07-16T16:47:58+09:00] INFO: Running report handlers
Running handlers complete
[2022-07-16T16:47:59+09:00] INFO: Report handlers complete
Infra Phase complete, 8/857 resources updated in 31 seconds

gitlab Reconfigured!

5. ログイン確認

設定反映後、GitLabのログイン画面にアクセスしてみよう。問題なく設定できていれば、「LDAP」と「Standard」のタブが表示されているはずだ。

「LDAP」タブを選んだ状態でユーザ名(ドメイン名の指定は不要)とパスワードを入力しログインしてみよう。問題なくログインできれば、正常にAD認証連携ができている。

6. 権限付与

一度ADのユーザでGitLabにログインすると、ログインしたユーザが選択できるようになるので、管理者権限を持つGitLabユーザでログインしなおして、該当ユーザに対して必要な権限を付与しよう。

以上で、GitLabとActive Directoryを認証連携するための手順は完了となる。

参考

2022年9月10日土曜日

GitLabをインストールする手順

現在、自宅環境ではAnsibleやSeleniumによる環境の自動化対応を進めている。その中で、やはりコードを管理するバージョン管理システム (VCS) が欲しくなり、以前から自宅環境として欲しかったGitLabを構築することにした。

ということで、本記事ではGitLabをAlmaLinuxにインストールする手順を記載する。

環境

GitLabをインストールするOSは、AlmaLinuxを用いる。ただし、Red Hat系のディストリビューションであるCentOSやRocky Linuxなどでも同様の手順で構築できるだろう。

  • OS : AlmaLinux 8.5
  • GitLab : 15.1.2

GitLabをインストールするサーバのスペックはCPU4コア・メモリ8GBとした。公式サイトに記載の最小要件はCPU4コア・メモリ4GBとなるが、メモリを多く消費するようなので余裕をもって8GBで構築している。

ちなみに、当初CPU2コア、メモリ2GBの環境で構築を進めていたが、メモリ不足となりインストールがいつまでも終了しない事態となったことから、少なくとも最小要件は必ず満たすようサーバを用意した方がよさそうだ。

また、今回は手順簡略化のため、SELinuxとfirewalldは停止しておく。

# systemctl stop firewalld
# systemctl disable firewalld
# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
# reboot

GitLabインストール手順

1. Postfixをインストール

GitLabの機能においてメール送信を利用する場合は、Postfixを使うようだ。本記事ではメール送信までの設定や確認は対象外としているが、将来利用できるようインストールしておく。

# dnf install postfix -y
# systemctl enable postfix
# systemctl start postfix

2. GitLabのリポジトリを登録

GitLabはdnfを用いてインストールするため、GitLabのリポジトリを登録する。リポジトリ登録用のシェルが公開されているので、以下の通りコマンドを実行するだけで、リポジトリ登録が完了する。

# curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | bash
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  6928  100  6928    0     0  39588      0 --:--:-- --:--:-- --:--:-- 39588
Detected operating system as almalinux/8.
Checking for curl...
Detected curl...
Downloading repository file: https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/config_file.repo?os=almalinux&dist=8&source=script
done.

~(中略)~

完了しました!
Generating yum cache for gitlab_gitlab-ee...
GPG 鍵 0x51312F3F をインポート中:
 Userid     : "GitLab B.V. (package repository signing key) <packages@gitlab.com>"
 Fingerprint: F640 3F65 44A3 8863 DAA0 B6E0 3F01 618A 5131 2F3F
 From       : https://packages.gitlab.com/gitlab/gitlab-ee/gpgkey
GPG 鍵 0xF27EAB47 をインポート中:
 Userid     : "GitLab, Inc. <support@gitlab.com>"
 Fingerprint: DBEF 8977 4DDB 9EB3 7D9F C3A0 3CFC F9BA F27E AB47
 From       : https://packages.gitlab.com/gitlab/gitlab-ee/gpgkey/gitlab-gitlab-ee-3D645A26AB9FBD22.pub.gpg
Generating yum cache for gitlab_gitlab-ee-source...

The repository is setup! You can now install packages.

3. dnfにてGitLabをインストール

リポジトリが登録されているので、dnfにてGitLabをインストールする。GitLab Enterprise Edition (gitlab-ee) という名前になっているが、有償ライセンス登録をしなければ、機能上もライセンス上もGitLab Community Editionと同様の機能のみ利用できるようになっており、特に問題はない。

# dnf install gitlab-ee -y

4. GitLabを初期設定

単純にdnfでインストールしただけでは、初期設定がされておらずGitLabを利用することができないため、初期設定を実施する。

まず、GitLabを公開するURLを定義する。設定ファイルは/etc/gitlab/gitlab.rbとなるので、vi等を用いてexternal_urlの項目を修正しよう。

# vi /etc/gitlab/gitlab.rb
external_url 'http://gitlab.example.com'

設定が完了したら、以下コマンドで設定を反映させる。この処理は数分~数十分程度の時間を要するので、完了まで気長に待とう。もしいつまでも処理が完了しない場合は、CPUやメモリのリソース不足を疑おう。

# gitlab-ctl reconfigure

~(中略)~

Notes:
Default admin account has been configured with following details:
Username: root
Password: You didn't opt-in to print initial root password to STDOUT.
Password stored to /etc/gitlab/initial_root_password. This file will be cleaned up in first reconfigure run after 24 hours.

NOTE: Because these credentials might be present in your log files in plain text, it is highly recommended to reset the password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.

gitlab Reconfigured!

初期設定が完了すると、gitlab-runsvdirというサービス名でGitLabが起動しているはずだ。

# systemctl status gitlab-runsvdir
● gitlab-runsvdir.service - GitLab Runit supervision process
   Loaded: loaded (/usr/lib/systemd/system/gitlab-runsvdir.service; enabled; ve>
   Active: active (running) since Thu 2022-07-07 13:51:09 JST; 1 day 20h ago
 Main PID: 3492 (runsvdir)
    Tasks: 431 (limit: 4915)
   Memory: 5.0G
   CGroup: /system.slice/gitlab-runsvdir.service
           tq  3492 runsvdir -P /opt/gitlab/service log: ......................>
           tq  3494 runsv logrotate
           tq  3504 svlogd -tt /var/log/gitlab/logrotate
           tq  3529 runsv redis
           tq  3531 /opt/gitlab/embedded/bin/redis-server unixsocket:/var/opt/g>
           tq  3548 svlogd -tt /var/log/gitlab/redis

~(以下略)~

5. 管理者ユーザ (root) の初期パスワードを確認

管理者ユーザ (root) の初期パスワードは自動生成され、その内容が/etc/gitlab/initial_root_passwordに記載されている。

# cat /etc/gitlab/initial_root_password
# WARNING: This value is valid only in the following conditions
#          1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the first time (usually, the first reconfigure run).
#          2. Password hasn't been changed manually, either via UI or via command line.
#
#          If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.

Password: LEDXXXXqJIZWfXXXXeoZxXXXXNe6XXXXjXFQeJ7ZXXXX

# NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.

6. GitLabにログイン確認

それではGitLabにログインしてみよう。設定したURLまたはIPアドレスにブラウザでアクセスしてみよう。問題なければ、ログイン画面が表示されるはずだ。

ユーザ名をroot、パスワードは先ほど確認した自動生成パスワードを入力してログインできれば、インストールは成功となる。

最後にパスワードを変更しておこう。右上のユーザのアイコン→「Edit profile」→「Password」を選択し、「New password」に新しいパスワードを設定し「Save password」ボタンを押せば変更できる。

以上で、GitLabをAlmaLinuxにインストールする手順は完了となる。

人気の投稿