> For AI agents: the complete documentation index is available at /resource/ucidm/docs/on-premise/dev/llms.txt, the full documentation bundle is available at /resource/ucidm/docs/on-premise/dev/llms-full.txt.

# UCIDM パッケージ \{#ucidm-package}

UCIDM は RPM パッケージで提供します。RPM パッケージの入手方法は弊社のサポート担当者にご確認ください。
実際には `install.sh` などを同梱した `tar.gz` ファイルになります。

## 初回インストールするとき \{#install}

ここでは RHEL9 の `1.0.0-1` というバージョンを例にインストール作業の説明をしますが、適宜お手持ちの OS, 最新のバージョンに置き換えて作業してください。

```bash
# tar xf osstech-ucidm-1.0.0-1.el9.x86_64.tar.gz
# ls -p
osstech-ucidm-1.0.0-1.el9.x86_64/ osstech-ucidm-1.0.0-1.el9.x86_64.tar.gz
# cd osstech-ucidm-1.0.0-1.el9.x86_64/
# ls -p
install.sh x86_64/
# ./install.sh
```

基本的には `/opt/osstech` 配下に各種ファイルがインストールされます。次のコマンドでインストールされた内容を確認できます。

```bash
# rpm -ql osstech-ucidm
```

インストールされるものの主な構成について説明します。

- /opt/osstech/bin: コマンドラインで使う運用ツール
- /opt/osstech/etc: ミドルウェアの設定ファイルなど
- /opt/osstech/share/ucidm: `compose.yml` を始め、アプリケーションやミドルウェアのサンプルファイルなど
- /opt/osstech/var/backup/ucidm: ucidm のバックアップディレクトリ
- /var/log/osstech/ucidm: ucidm のログディレクトリ
- /var/opt/osstech/lib/ucidm: compose サービスを管理するホームディレクトリ

## systemd-container パッケージのインストール \{#install-systemd-container}

systemd のユーザーモード、ならびに docker の rootless モードを使うには ucidm ユーザーでログインしたときに設定される環境変数が必要になります。直接 ucidm ユーザーでログインできないときなどに machinectl を使ってユーザーを切り替えられます。

これらの環境変数を設定したり、machinectl コマンドを使えるよう systemd-container パッケージをインストールしておきます。

```bash
# dnf install -y systemd-container
```

## rsyslog の umask の設定 \{#ucidm-rsyslog-umask}

rsyslog サービスでは umask が 0066 (0600 でログファイル生成) と設定されています。

```bash
# systemctl cat rsyslog | grep -i umask
UMask=0066
```

systemd から起動される rsyslog サービスの umask 設定を変更するために /etc/rsyslog.conf に設定を追加します。次のように `$Umask` と `$FileCreateMode` をグローバル設定として追加します。

```
# vi /etc/rsyslog.conf
...
#### GLOBAL DIRECTIVES ####
$Umask 0006
$FileCreateMode 0600
```

`$FileCreateMode` を 0600 に設定することで他に特別な設定をしないときは変更前と同じ権限でログファイルが生成されます。

rsyslog サービスを再起動します。

```bash
# systemctl restart rsyslog
```

## nf_tables モジュールのロード \{#load-nf-tables}

nf_tables モジュールがロードされているかどうかを確認します。lsmod のコマンドで次の例のような出力があればロードされています。

```bash
# lsmod | grep nf_tables
nf_tables             356352  0
nfnetlink              20480  1 nf_tables
libcrc32c              12288  2 nf_tables,xfs
```

上記 lsmod のコマンドで出力がない場合は、以下コマンドで nf_tables モジュールのロードを行ってください。

```bash
# modprobe nf_tables
```

## ucidm ユーザーの設定 \{#ucidm-user-config}

osstech-ucidm をインストールすると ucidm ユーザーが作成されます。docker グループが設定されていることを確認します。

```bash
# id ucidm
uid=992(ucidm) gid=992(ucidm) groups=992(ucidm),993(docker)
```

UCIDM は [Docker Compose](https://docs.docker.com/compose/) を使ってコンテナアプリケーションとして動作します。

セキュリティ強化の観点から、コンテナを root ユーザーではなく、非特権ユーザーで実行することが推奨されています。このことを [rootless モード](https://docs.docker.com/engine/security/rootless/) と呼び、非特権ユーザがコンテナを作成、実行、管理できます。

ここでは非特権ユーザーとして `ucidm` というユーザー／グループを作成します。お客様の環境ですでに適切なユーザーが存在するときは任意のユーザー／グループを使ってもかまいません。

インストール直後はパスワードが未設定になります。任意のパスワードを設定します。

```bash
# passwd ucidm
ユーザー ucidm のパスワードを変更。
新しいパスワード:
新しいパスワードを再入力してください:
passwd: すべての認証トークンが正しく更新できました。
```

## ucidm ユーザーのログイン確認と docker サービスの初期設定 \{#ucidm-user-login-check}

別の端末を起動し、先ほど設定したパスワードで ucidm でログインできることを確認します。

> \[!TIP]
> もし ucidm ユーザーで直接ログインしないときは [machinectl コマンドでユーザーを切り替える](/resource/ucidm/docs/on-premise/dev/operation/compose.md#switch-ucidm) ようにしてください。

Docker 社のドキュメントをベースに ucidm ユーザーが docker サービスを起動できるように初期設定します。

- [Linux post-installation steps for Docker Engine](https://docs.docker.com/engine/install/linux-postinstall/)
- [Rootless mode](https://docs.docker.com/engine/security/rootless/)

dockerd-rootless-setuptool.sh という setup スクリプトが用意されているので実行します。

```bash
dockerd-rootless-setuptool.sh install
```

もし事前条件を満たしていないエラーメッセージが表示されたらその内容を設定してから再度 setup スクリプトを実行します。

正常にインストールされた場合、実行結果ログに表示されている `DOCKER_HOST` と次の rootless の DOCKER ENDPOINT が一致していることを確認します。

```bash
$ docker context ls
NAME         DESCRIPTION               DOCKER ENDPOINT                    ERROR
default      Current DOCKER_HOST ...   unix:///var/run/docker.sock
rootless *   Rootless mode             unix:///run/user/992/docker.sock
```

systemd をユーザー権限で実行して docker サービスが起動していることを確認します。

```bash
$ systemctl --user status docker
...
   Active: active (running) since Tue 2023-10-03 19:02:33 JST; 4min 35s ago
...
```

docker コマンドで hello-world コンテナを実行できれば成功です。

```bash
$ docker run hello-world
...
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
```

OS の再起動時に docker サービスが起動する設定になっていることを確認します。

```bash
$ systemctl --user is-enabled docker
enabled
```

## パッケージのアップグレード \{#upgrade}

アップグレード前に一度バックアップを取得することを推奨します。
バックアップの取得方法は [バックアップ](/resource/ucidm/docs/on-premise/dev/operation/backup.md) の項を参照してください。

アップグレード前に既存サービスを停止させます。

```bash
docker compose --file /var/opt/osstech/lib/ucidm/compose.yml down
```

新しいバージョンの `install.sh` を実行してください。

```bash
# tar xf osstech-ucidm-1.0.0-2.el9.x86_64.tar.gz
# ls -p
osstech-ucidm-1.0.0-2.el9.x86_64/ osstech-ucidm-1.0.0-2.el9.x86_64.tar.gz
# cd osstech-ucidm-1.0.0-2.el9.x86_64/
# ./install.sh
```

バージョンが上がったことを確認してください。

```bash
# rpm -q osstech-ucidm
osstech-ucidm-1.0.0-2.el9.x86_64
```

## パッケージのダウングレード \{#downgrade}

コンテナが起動中の場合は一度停止してください。

```
docker compose --file /var/opt/osstech/lib/ucidm/compose.yml down
```

古いバージョンの `tar.gz` ファイル内に含まれるrpmファイルを直接指定してダウングレードします。

```
# tar xf osstech-ucidm-1.0.0-1.el9.x86_64.tar.gz
# ls -p
osstech-ucidm-1.0.0-1.el9.x86_64/ osstech-ucidm-1.0.0-1.el9.x86_64.tar.gz
# cd osstech-ucidm-1.0.0-1.el9.x86_64/x86_64/
# dnf downgrade osstech-ucidm-1.0.0-1.el9.x86_64.rpm
```

ダウングレード出来たことを確認してください。

```
# rpm -q osstech-ucidm
osstech-ucidm-1.0.0-1.el9.x86_64
```
