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

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

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

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

..  Note::
   :ref:`managing clusters in an air-gapped <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:`details of the layout <Creating and using a local repository>` については以下を参照してください。

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

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

ローカルリポジトリを手動で作成する
----------------------------------

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

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

たとえば、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/10` にコピーする場合、`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/buster
   #  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 .

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``
で提供するパッケージのみを使用できます。）
