# Linux 向け Device Protection をインストールする

Aikido ダッシュボードに表示されるコマンドを使って、ご自身のマシンやテスト用のマシンなど、1 台のマシンにエージェントをインストールします。複数台のマシンに展開する場合は、代わりに [Linux への展開](https://help.aikidogov.us/docs/docs-ja/aikido-device-protection/deploying-aikido-endpoint/device-protection-mdm-guides/linux) から方法を選択してください。

{% hint style="info" %}
Linux デバイスには systemd と root 権限が必要です。Device Protection がサポートするディストリビューションとバージョンについては、[サポート対象のエコシステム](https://help.aikidogov.us/docs/docs-ja/aikido-device-protection/miscellaneous-aikido-endpoint/supported-ecosystems) を参照してください。
{% endhint %}

## 1 つのコマンドでインストールする

{% stepper %}
{% step %}
**インストールコマンドを取得する**

1. [Device Protection に移動し、Devices](https://app.aikido.dev/endpoint-protection/devices) タブを開きます。
2. 右上の **Connect Device** をクリックします。
3. **Manual install** を選択します。
4. デバイスを参加させる [ユーザーグループ](https://help.aikidogov.us/docs/docs-ja/aikido-device-protection/deploying-aikido-endpoint/user-groups-for-aikido-endpoint) を選択し、**Linux install command** をコピーします。
{% endstep %}

{% step %}
**デバイス上で実行する**

root としてコマンドを実行します。コマンドはディストリビューションとアーキテクチャに合ったパッケージを選択してインストールし、コマンドに含まれるトークンに対してデバイスを登録します。
{% endstep %}
{% endstepper %}

## インストールの種類を選択する

ダッシュボードのコマンドはデスクトップ版をインストールします。デスクトップセッションのないマシンでは、フラグを 1 つ追加するだけで、コマンドの残りの部分はそのままです。

| マシン                                                                               | フラグ          |
| ------------------------------------------------------------------------------------- | ------------- |
| 人が作業に使うノートパソコンまたはワークステーション                                             | なし          |
| 継続的に使用するサーバーまたは VM: ビルドサーバー、CI ランナー、Docker または Kubernetes ホスト、クラウド VM | `--headless`  |
| コンテナイメージ内、またはジョブ終了後に破棄されるホスト型 CI ランナー     | `--container` |

{% code overflow="wrap" %}
```bash
curl -fsSL https://github.com/AikidoSec/safe-chain/raw/refs/heads/main/install-scripts/install-endpoint-linux.sh | sudo sh -s -- --token "$AIKIDO_TOKEN" --headless
```
{% endcode %}

`--headless` はトレイアイコンとデスクトップ用パッケージを省きますが、保護機能は同じです。`--container` も同様に省いたうえで、エージェントを透過型データパスではなくローカルプロキシに切り替えるため、再起動も不要です。コンテナイメージでは、エージェントを起動するエントリポイントなど追加の要素が必要になるため、[コンテナでの Device Protection](https://help.aikidogov.us/docs/docs-ja/aikido-device-protection/deploying-aikido-endpoint/device-protection-mdm-guides/linux/device-protection-in-containers) を参照してください。ホスト型 CI ランナーは VM ですが、ジョブから再起動することはできないため、こちらも `--container` を使用し、エージェントを明示的に起動します。その方法は [Linux への展開](https://help.aikidogov.us/docs/docs-ja/aikido-device-protection/deploying-aikido-endpoint/device-protection-mdm-guides/linux) にある CI ガイドで説明しています。コンテナをビルド・実行する Docker、Kubernetes、Jenkins のホストはサーバーなので、`--headless` を使用してください。

## 手動インストール

社内ミラーに配置する場合や、ダウンロード URL にアクセスできないホストにインストールする場合など、ファイルそのものが必要なときは、パッケージを直接使用します。まず `uname -m` を実行してください。`x86_64` は amd64、`aarch64` は arm64 を意味します。

{% tabs %}
{% tab title="Ubuntu / Debian" %}
| アーキテクチャ      | パッケージ                                                                                                                                |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------- |
| amd64 (`x86_64`)  | [EndpointProtection-amd64.deb](https://github.com/AikidoSec/safechain-internals/releases/latest/download/EndpointProtection-amd64.deb) |
| arm64 (`aarch64`) | [EndpointProtection-arm64.deb](https://github.com/AikidoSec/safechain-internals/releases/latest/download/EndpointProtection-arm64.deb) |

{% code overflow="wrap" %}
```bash
curl -fLO https://github.com/AikidoSec/safechain-internals/releases/latest/download/EndpointProtection-amd64.deb
sudo AIKIDO_TOKEN=<your-token> apt install ./EndpointProtection-amd64.deb
```
{% endcode %}
{% endtab %}

{% tab title="RHEL / Rocky Linux / CentOS" %}
バージョン 9 では `el9` ビルドを、バージョン 10 では `el10` ビルドを使用します。Amazon Linux 2023 も `el9` ビルドを使用します。

| バージョン | アーキテクチャ      | パッケージ                                                                                                                                          |
| ------- | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| 9       | amd64 (`x86_64`)  | [EndpointProtection-amd64.el9.rpm](https://github.com/AikidoSec/safechain-internals/releases/latest/download/EndpointProtection-amd64.el9.rpm)   |
| 9       | arm64 (`aarch64`) | [EndpointProtection-arm64.el9.rpm](https://github.com/AikidoSec/safechain-internals/releases/latest/download/EndpointProtection-arm64.el9.rpm)   |
| 10      | amd64 (`x86_64`)  | [EndpointProtection-amd64.el10.rpm](https://github.com/AikidoSec/safechain-internals/releases/latest/download/EndpointProtection-amd64.el10.rpm) |
| 10      | arm64 (`aarch64`) | [EndpointProtection-arm64.el10.rpm](https://github.com/AikidoSec/safechain-internals/releases/latest/download/EndpointProtection-arm64.el10.rpm) |

{% code overflow="wrap" %}
```bash
curl -fLO https://github.com/AikidoSec/safechain-internals/releases/latest/download/EndpointProtection-amd64.el9.rpm
sudo AIKIDO_TOKEN=<your-token> dnf install ./EndpointProtection-amd64.el9.rpm
```
{% endcode %}
{% endtab %}
{% endtabs %}

パッケージはインストール中に `AIKIDO_TOKEN` を読み取り、その後サービスを自動的に有効化して起動するため、他に実行する必要のあるものはありません。

この方法ではフラグを使用できないため、デスクトップのないマシンでは、トークンと一緒に設定する環境変数でインストールの種類を指定します。サーバーまたは VM の場合は `AIKIDO_HEADLESS=1`、コンテナイメージの場合は `AIKIDO_CONTAINER=1` と `AIKIDO_CI_CD=1` を設定します。デスクトップ用パッケージをインストールしないようにするには、Debian 系では `--no-install-recommends` を、Red Hat 系では `--setopt=install_weak_deps=False` を追加します。

{% content-ref url="tray-icon-support-on-linux.md" %}
[tray-icon-support-on-linux.md](https://help.aikidogov.us/docs/docs-ja/aikido-device-protection/deploying-aikido-endpoint/device-protection-mdm-guides/linux/install-device-protection-for-linux/tray-icon-support-on-linux)
{% endcontent-ref %}

## インストールを確認する

{% code overflow="wrap" %}
```bash
systemctl status aikido-endpoint-protection
aikidoctl version
```
{% endcode %}

その後、デバイスが [デバイス一覧](https://app.aikido.dev/endpoint-protection/devices) に **Active** ステータスで表示されます。ブロックが実際に機能することを確認するには、[Device Protection が機能しているかをテストする方法](https://help.aikidogov.us/docs/docs-ja/aikido-device-protection/miscellaneous-aikido-endpoint/how-to-test-device-protection) に従ってください。

{% hint style="info" %}
インストールにより、システム全体の環境変数を通じて Node.js と uv が Aikido CA を参照するよう設定されます。すでに実行中のシェルにはこれらが反映されないため、パッケージのインストールをテストする前に、新しいログインシェルを開くか再起動してください。

`aikidoctl` では、macOS や Windows と同じ確認、一時停止、診断のコマンドを使用できます。[aikidoctl CLI](https://help.aikidogov.us/docs/docs-ja/aikido-device-protection/miscellaneous-aikido-endpoint/aikidoctl-cli) を参照してください。

`--headless` または `--container` でインストールした場合、**Request Access** ボタンはありません。パッケージに管理者の承認が必要な場合は、代わりに `aikidoctl request` を実行してください。[コマンドラインからブロックされたインストールをリクエストする](https://help.aikidogov.us/docs/docs-ja/aikido-device-protection/miscellaneous-aikido-endpoint/aikidoctl-cli/request-a-blocked-install) を参照してください。
{% endhint %}

## アップグレード

同じコマンドを使って、新しいパッケージを既存のパッケージの上からインストールします。デバイスの登録と設定は維持されるため、トークンを再度指定する必要はありません。

## トラブルシューティング


| 問題                                                                                  | 対処法                                                                                                                                                                                                                                             |
| ---------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| パッケージはインストールされるが、デバイスがダッシュボードに表示されない                       | インストールコマンドに `AIKIDO_TOKEN` が設定されていませんでした。構成管理ツールはローカル環境をホストに転送しないため、タスク自体に変数を設定してから、パッケージを再度インストールしてください                                    |
| `apt` または `dnf` がファイルをインストールせず、リポジトリ内でパッケージを探してしまう | 名前ではなくパスを指定してください: `apt install ./EndpointProtection-amd64.deb`。先頭の `./` によって、パッケージマネージャーはそれをローカルファイルとして扱います                                                                                              |
| Red Hat 系のホストでインストールが失敗する                                               | ビルドをメジャーバージョンに合わせてください。バージョン 9 では `el9` パッケージを、バージョン 10 では `el10` パッケージを使用します                                                                                                                                   |
| サービスが実行されていない                                                               | `systemctl status aikido-endpoint-protection` を実行し、次に `sudo aikidoctl diagnostics` を実行して詳細を送信してください                                                                                                                                 |
| Node.js または uv が依然として Aikido 証明書を拒否する                                        | インストール時に `NODE_EXTRA_CA_CERTS` と `UV_SYSTEM_CERTS` がシステム全体に設定されますが、実行中のシェルにはこれらが反映されません。新しいログインシェルを開くか、デバイスを再起動してください                                                                                    |
| トークンが実行出力やログに表示される                                                 | ツールのマスキング機能を使用してください: Ansible では `no_log`、Chef では `sensitive true`、Puppet では `Sensitive()`                                                                                                                                               |
| 複数のマシンがデバイス一覧で 1 つのエントリを共有している                                      | それらのマシンは同じ `/etc/machine-id` で起動しています。Linux のデバイス ID はこのファイルに基づくため、クローン元のイメージでこのファイルをクリアし、初回起動時に systemd に新しいものを書き込ませてください                                                                |
| トレイアイコンが表示されない                                                                     | Ubuntu 以外の GNOME では想定どおりの動作であり、見た目上の問題にすぎません。[Tray Icon Support on Linux](https://help.aikidogov.us/docs/docs-ja/aikido-device-protection/deploying-aikido-endpoint/device-protection-mdm-guides/linux/install-device-protection-for-linux/tray-icon-support-on-linux) を参照してください |
