トップページ > コンテンツ > ネットワーク関連メモ > ネットワーク運用編 > サーバー関連 > 独自リポジトリサーバー > Ubuntuの場合のリポジトリ作成

以下のようにするとできる模様(未検証)

<サーバ側(独自リポジトリ作成)>
1.リポジトリ作成用のパッケージをインストール
$ apt-get install apt-utils

2.リポジトリ用のディレクトリを準備する(Webサーバの場合)
2-1.Webサーバ準備
$apt-get install apache2
2-1.ディレクトリ作成
$ mkdir -p /var/www/html/リポジトリ用ディレクトリ

2-2.必要パッケージのダウンロードとコピー
$ apt-get install -d パッケージ名
$ cp -p パッケージファイル /var/www/html/リポジトリ用ディレクトリ/
※リポジトリ丸ごとの場合は、apt-mirror等が使えそう。apt-mirrorの設定は/etc/apt/mirror.listで出来そうで、デフォルト設定だと/var/spool/apt-mirrorにキャッシュができる模様。

2-3.リポジトリに必要なファイルの準備
2-3-1.ディレクトリ準備
$ cd /var/www/html/リポジトリ用ディレクトリ/

2-3-2.各種ファイル準備
$ apt-ftparchive sources . > Sources
$ apt-ftparchive packages . > Packages
$ apt-ftparchive contents . > Contents-$(dpkg —print-architecture)

2-3-3.gzipで固める
$ gzip -c9 Sources > Sources.gz
$ gzip -c9 Packages > Packages.gz
$ gzip -c9 Contents-$(dpkg —print-architecture) > Contents-$(dpkg —print-architecture)

2-3-4.gpg鍵の作成
$ gpg --gen-key
※--batchをつけると対話モードを避けることができる。

2-3-5.Releaseファイルを準備し、gpg秘密鍵で署名。
$ apt-ftparchive release . > Release
$ gpg --sign -b -a -o Release.gpg Release
※署名方式はいくつかある。今回は署名を別にするRelease.gpgファイルを準備する方法。
 署名  :-sまたは--sign (ファイルの中身を圧縮する方式。.gpgファイルが生成される)
 分離署名:-bまたは--detach-sign (署名だけ別にする方式)
 クリア署名:--clearsign (ファイルの中身は圧縮しない方式)
※-a:ASCII形式 -o:出力ファイル

2-3-6.gpg公開鍵のエクスポート
$ gpg --list-keys で公開鍵IDを確認する。
$ gpg --export -o <出力する公開鍵名> -a <公開鍵ID>

※パッケージは下記のような関係性で検証されるため、
 リポジトリ側でReleaseファイルを署名しておく必要がある。
 パッケージファイル<-Packages<-Release<-Release.gpg(gpg秘密鍵)



<クライアント側>
1.リポジトリ側でReleaseを署名した秘密鍵に対応する公開鍵を格納する。
  リポジトリ側の2-3-6で作成したファイルを/path/to/公開鍵に配置。   

2./etc/apt/sources.list.d/にxxxx.listのようなファイルを準備する。
  deb [signed-by=/path/to/公開鍵] http://独自リポジトリURL/ディレクトリ ディストリビューション コンポーネント

 ※/etc/apt/sources.listに直接追加しても良いのだが、独自リポジトリなので、
  sources.list.d上にファイルを作る方が綺麗な気がする。
  ファイル名のxxxxは何でも良いが、拡張子はlistとすること。
 
 ※ディストリビューションは、Ubuntuのバージョン等の適当な名称をつける。
 ※コンポーネントはmainやcontrib、non-freeをつける。それぞれの意味はGoogle検索で。

 ※今回は/path/to/公開鍵に置いたが、sudo apt-key add <公開鍵>のようにして、
  /etc/apt/trusted.gpg.d/に公開鍵を配置する方法がある。
  余談だが、公式リポジトリはUbuntuインストーラ実行時に既に上記に登録されている模様。

3.1で編集したファイルを読み込ませ、リポジトリ情報を更新する
 source apt-get update

■参考
最終更新:2022年03月29日 23:12