Creating and using a local repository
=====================================

クラスターディレクトリ内にローカルリポジトリを作成すると、TPAはリポジトリ内のパッケージをクラスターインスタンスで利用できるようにします。これは、追加のパッケージをクラスターにシップする簡単な方法です。

オプションで、このリポジトリ
*のみを使用するようにインスタンスを構成するようにTPAに指示することもできます。つまり、他のすべてを無効にします。この場合、rsync、Pythonなどの基本的な依存関係から始めて、展開中に必要な*
すべての*パッケージを提供する必要があります。

ローカルリポジトリを手動で作成するか、TPAにローカルリポジトリを作成してもらうことができます。両方の手順を以下に示します。

..  Note::
   特定の指示は :ref:`Managing clusters in a disconnected or air-gapped environment <Managing clusters in a disconnected or air-gapped environment>` 環境で使用できます。

TPAを使用したローカルリポジトリの作成
-------------------------------------

TPAには、このようなローカルリポジトリの作成に役立つツールが含まれています。具体的には、
``--enable-local-repo`` スイッチを\ ``tpaexec configure``
とともに使用して、ローカルリポジトリとして使用する空のディレクトリ構造を作成できます。
``tpaexec download-packages``
は、その構造に必要なパッケージを設定します。

ディレクトリ構造の作成
^^^^^^^^^^^^^^^^^^^^^^

ローカルリポジトリでクラスターを構成するには、次のコマンドを実行します。

::

   tpaexec configure --enable-local-repo …

これにより、クラスター構成が生成され、\ ``local-repo``
ディレクトリとOS固有のサブディレクトリが作成されます。
:ref:`ローカルリポジトリのレイアウト <ローカルリポジトリのレイアウト>` については、以下を参照してください。

リポジトリにデータを設定し、メタデータを生成する
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

:ref:`tpaexec download-packages <tpaexec download-packages>` を実行して、クラスターに必要なすべてのパッケージをローカルリポジトリにダウンロードします。結果のリポジトリには、すべてのパッケージの完全な依存関係ツリーが含まれるため、このリポジトリからクラスター全体をインストールできます。リポジトリのメタデータも自動的に作成され、すぐに使用できます。

ローカルリポジトリの手動作成
----------------------------

ローカルリポジトリのレイアウト
------------------------------

ローカルリポジトリを手動で作成するには、最初に適切なディレクトリ構造を作成する必要があります。
``--enable-local-repo``
を使用する場合、TPAは、クラスター用に選択したOSに基づいて、\ ``local-repo``
ディレクトリとその内にOS固有のサブディレクトリたとえば
``local-repo/Debian/12``
を作成します。この構造は、手動で作成したリポジトリにも使用することをお勧めします。

たとえば、RedHat
8を実行しているクラスターは次のレイアウトになる場合があります。

.. code:: text

   local-repo/
   `-- RedHat
       |-- 8.5 -> 8
       `-- 8
           `-- repodata

インスタンスごとに、TPAは\ ``local-repo``
の次のサブディレクトリを順番に検索し、最初に見つけたものを使用します。

- ``<distribution>/<version>`` 、例 ``RedHat/8.5``

- ``<distribution>/<major version>`` 、例 ``RedHat/8``

- ``<distribution>/<release name>`` 、例 ``Ubuntu/focal``

- ``<distribution>`` 、例 ``Debian``

- ``local-repo`` ディレクトリ自分自身。

これらのディレクトリが存在しない場合、もちろん、TPAはターゲットインスタンスにローカルリポジトリをセットアップしようとしません。

リポジトリの設定とメタデータの生成
----------------------------------

``tpaexec deploy``
を実行する前に、以下で詳しく説明する手順を完了する必要があります。

リポジトリにデータを設定するには、含めるパッケージを適切なディレクトリにコピーします。次に、以下で詳しく説明するように、システムに適切なツールを使用してメタデータを生成します。

..  Note::
   制御ノードつまりtpaexecを実行するマシンでメタデータを生成する必要があります。 TPAは、メタデータとパッケージをターゲットインスタンスにコピーします。

..  Note::
   インスタンスが使用するサブディレクトリにメタデータを生成する必要があります。つまり、パッケージを`local-repo/Debian/12` にコピーする場合、`local-repo/Debian` ではなくそのディレクトリにメタデータを作成する必要があります。

Debian / Ubuntuリポジトリのメタデータ
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Debianベースのディストリビューションの場合、\ ``dpkg-dev``
パッケージをインストールします。

.. code:: shell

   sudo apt-get update && sudo apt-get install -y dpkg-dev

これで、 ``dpkg-scanpackages`` を使用してメタデータを生成できます。

.. code:: shell

   cd local-repo/Debian/bookworm

   #  download/copy .deb package files

   dpkg-scanpackages . | gzip > Packages.gz

RedHat / SLESリポジトリのメタデータ
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

最初に、\ ``createrepo`` パッケージをインストールします。

.. code:: shell

   sudo yum install -y createrepo

これで、 ``createrepo`` を使用してメタデータを生成できます。

.. code:: shell

   cd local-repo/RedHat/8

   #  download/copy .rpm package files

   createrepo .

RHEL 8+リポジトリでは、次の追加手順を実行する必要があります。

.. code:: shell

   repo2module --module-name tpa --module-stream local --module-version 1 --module-context f32 . modules.yaml
   modifyrepo_c --mdtype=modules modules.yaml repodata/
   dnf clean all

TPAがローカルリポジトリを使用する方法
-------------------------------------

リポジトリのコピー
^^^^^^^^^^^^^^^^^^

TPAはrsyncを使用して、生成されたメタデータを含むリポジトリーディレクトリの内容をターゲットインスタンス上のディレクトリにコピーします。

rsyncがインスタンスでまだ利用できない場合、TPAはそれをインストールできますつまり
``apt-get install rsync`` または\ ``yum install rsync`` 。ただし、
``use_local_repo_only``
を設定している場合、rsyncパッケージはローカルリポジトリに含まれる必要があります。必要に応じて、TPAはscpを使用してrsyncパッケージのみをコピーし、残りをコピーする前にインストールします。

リポジトリー構成
^^^^^^^^^^^^^^^^

ローカルリポジトリのコンテンツをターゲットインスタンスにコピーした後、TPAは宛先ディレクトリをローカルつまり、URLベースではなくパスベースのリポジトリとして構成します。

たとえば、リポジトリーディレクトリに\ ``example.deb``
を提供する場合、他のリポジトリーのパッケージと同様に、\ ``apt-get install example``
を実行するだけでインストールできます。

パッケージのインストール
^^^^^^^^^^^^^^^^^^^^^^^^

TPAは、提供されたコンテンツでリポジトリを構成しますが、同じパッケージが別のリポジトリから利用可能な場合、どれをインストールするかはパッケージマネージャーの判断にあります特定のバージョンを指定しない限り、通常は最新です。

ただし、 ``use_local_repo_only: yes``
を設定すると、TPAは他のすべてのパッケージリポジトリを無効にするため、インスタンスは\ ``local-repo``
で提供したパッケージのみを使用できます。
