TT Lab
はじめる
学ぶ 学習パス コース

RHEL系の管理

createrepo_cでリポジトリを作る

TT Labで続きを見る

目標

rpmを集めてcreaterepo_cでリポジトリを作り、.repoファイルで登録して、そのリポジトリだけでインストールします。

なぜ重要なのか

エアギャップ環境で最も多い報告である「リポジトリに入れたのに見えない」の原因の1位が、createrepo_c --updateの漏れです。ファイルは目に見えるのに、dnfは知りません。2番目がクライアントのキャッシュです。この2つの順序を身につければ、その報告の90%は数分で片付きます。

そしてrepomd.xmlの構造を知っていると、何がリポジトリにあって何がないかを判断できます。たとえば、updateinfoがないと、dnf update --securityが静かに何もしません。

ステップ

  1. /root/repo/poolディレクトリを作成し、treeパッケージとその依存関係をインストールせずに、そのディレクトリへダウンロードしてください。.rpmが1つ以上ある必要があります。
  2. createrepo_cで/root/repo/poolにメタデータを作成してください。repodata/repomd.xmlができている必要があります。
  3. /etc/yum.repos.d/labhub-local.repoを作成してください。リポジトリIDはlabhub-localで、nameにはスナップショットの日付(snapshotという文字列とYYYY-MM-DD)が入っている必要があり、baseurl=file:///root/repo/pool、enabled=1、gpgcheck=0、metadata_expire=-1を含める必要があります。
  4. キャッシュを更新し、リポジトリ一覧を/root/repo/repolist.txtに保存してください。labhub-localが表示されている必要があります。
  5. ほかのリポジトリをすべて無効にしてlabhub-localだけを有効にした状態で、treeを再インストールし、そのコマンドの出力を/root/repo/install.txtに保存してください。
  6. nanoパッケージをpoolに追加でダウンロードしたあと、メタデータを増分更新し、更新後のlabhub-localリポジトリのパッケージ数を、数字1行で/root/repo/pkgcount.txtに書いてください。
  7. repomd.xmlからメタデータの種類名だけを取り出して、1行に1つずつ/root/repo/mdtypes.txtに書いてください。primary、filelists、otherがすべてある必要があります。
  8. /root/repo/report.txtを次の4行で作成してください。 REPO_ID=labhub-local / PACKAGES=<6번 값> / MDTYPES=<7번 파일의 줄 수> / HAS_UPDATEINFO=<yes|no>(プレースホルダーは順に、ステップ6の値、ステップ7のファイルの行数、yesかnoのどちらかです)

参考

rpmを集める

/root/repo/poolディレクトリを作成し、treeパッケージとその依存関係をインストールせずに、そのディレクトリへダウンロードしてください。.rpmが1つ以上ある必要があります。

dnfには、インストールせずにrpmだけをダウンロードするコマンドがあります。依存関係まで取得するオプションも一緒に使ってください。

メタデータの生成

createrepo_cで/root/repo/poolにメタデータを作成してください。repodata/repomd.xmlができている必要があります。

createrepo_cにディレクトリを渡すと、その下にrepodataが作られます。

リポジトリ定義の作成

/etc/yum.repos.d/labhub-local.repoを作成してください。リポジトリIDはlabhub-localで、nameにはスナップショットの日付(snapshotという文字列とYYYY-MM-DD)が入っている必要があり、baseurl=file:///root/repo/pool、enabled=1、gpgcheck=0、metadata_expire=-1を含める必要があります。

yum.repos.dの下の.repoファイルです。角括弧の中がリポジトリIDで、name、baseurl、enabledが必須です。

キャッシュの更新と確認

キャッシュを更新し、リポジトリ一覧を/root/repo/repolist.txtに保存してください。labhub-localが表示されている必要があります。

メタデータキャッシュに期限切れの印を付けたあと、リポジトリ一覧を見ます。新しいリポジトリが表示されている必要があります。

そのリポジトリだけでインストール

ほかのリポジトリをすべて無効にしてlabhub-localだけを有効にした状態で、treeを再インストールし、そのコマンドの出力を/root/repo/install.txtに保存してください。

すべてのリポジトリを無効にして、1つだけを有効にするオプションの組み合わせがあります。

パッケージ追加後の更新

nanoパッケージをpoolに追加でダウンロードしたあと、メタデータを増分更新し、更新後のlabhub-localリポジトリのパッケージ数を、数字1行で/root/repo/pkgcount.txtに書いてください。

rpmを入れて再インデックスして初めて、dnfに見えます。増分更新のオプションがあります。

repomd.xmlの構造の確認

repomd.xmlからメタデータの種類名だけを取り出して、1行に1つずつ/root/repo/mdtypes.txtに書いてください。primary、filelists、otherがすべてある必要があります。

各メタデータの種類は、type属性で示されます。種類名だけを取り出してみてください。

リポジトリのレポート

/root/repo/report.txtを次の4行で作成してください。 REPO_ID=labhub-local / PACKAGES=<6번 값> / MDTYPES=<7번 파일의 줄 수> / HAS_UPDATEINFO=<yes|no>(プレースホルダーは順に、ステップ6の値、ステップ7のファイルの行数、yesかnoのどちらかです)

パッケージ数とメタデータの種類をまとめてください。値は実際の確認結果である必要があります。