APTリポジトリを設定する方法は?


52

いくつかのパッケージを提供するサーバーにAPTリポジトリを設定したいと思います。

サーバーにソフトウェアインストールせずにセットアップする方法はありますか?

ファイルはどのように整理する必要がありますか?


編集:私は何か間違ったことをしている必要があります...誰かが私を助けることができますか?http://quickmediasolutions.com/apt/distsにリポジトリがあります

どこで何がわからないが、何かが間違って設定されている。現在、パッケージは1つしかなく、すべてのアーキテクチャに対応しています。

私に追加されたものは/etc/apt/sources.list次のとおりです:

deb http://quickmediasolutions.com/apt stable main

ダウンロードしたアプリケーションのライセンスを編集して追加できますか?これは個人使用ですか、それとも配布する予定ですか?
ホルヘカストロ

@Jorge:どういう意味ですか?どのアプリケーションですか?
ネイサンオスマン

1
パッケージがOSSであるかどうかを確認しようとしていました。ランチパッドを使用するだけでした。
ホルヘカストロ

@Jorge:いいえ、OSSではありません。(実際、私が書いたアプリはほとんどありません。)
ネイサンオスマン

回答:


26

dpkg-scanpackagesを使用すると、簡単なリポジトリの設定は非常に簡単です。このページでは、些細なレポジトリを設定する方法を説明し、このレポジトリを使用する方法を説明します(例4までスクロールダウンします)。


動作させるのに少し苦労しています。質問の更新をご覧ください。
ネイサンオスマン

1
「自動」レポを設定しようとしているようです。1つ(またはいくつかの)パッケージについては、簡単なレポを使用する方がはるかに良いでしょう。Packages.gzとdebをquickmediasolutions.com/apt/binaryまで移動してみてください。その後、ソースはになりますdeb http://quickmediasolutions.com/apt binary/
マイケルクレンショー

2
些細なリポジトリは固定時に問題を引き起こしますが、はい、いくつかのパッケージに対してリポジトリを設定する最も簡単な方法です。2〜3個のパッケージだけのプールリポジトリを設定するのはばかげているように思えます。
ティムポスト

ジョージ、この作品を作ることができた?
マイケルクレンショー

@mac:えーと....まだ試してみる時間がありませんでした:) PPAにすべてをアップロードするだけになりました。
ネイサンオスマン

40

ウェブサーバー上にシンプルだが署名されたリポジトリをセットアップするだけです。他のほとんどのチュートリアルはやや時代遅れで扱いにくいため、ここで手順を再現してみます。初期構成には少し手間がかかりますが、シンプルなビルドスクリプトにより管理が容易になります。そして、新しい*.debファイルをドロップして更新するか、cronジョブに処理させることができます。

署名キーを生成する

最初にgpg、パッケージとリポジトリの署名キーを作成する必要があります。パスワードなしで(4)RSA署名キーにし、$KEYNAME要求されたときに一意のキーにします。(その他の例ではdpkg1、キー名として「」を想定しています。)

 gpg --gen-key
 gpg -a --export-secret-key dpkg1 > secret.gpg
 gpg -a --export dpkg1            > public.gpg

あなたのウェブサーバーには繰り返し入力するための組み込みのサルがないので、私はパスワードを言わなかった。そして、署名されたパッケージとリポジトリは、それに関するアップデート管理者の苦情を満足させることのみを目的としています。両方のキーを/apt/Webサーバーの新しいリポジトリディレクトリにアップロードするだけで初期化後にsecret.gpgキー削除します。

CGIスクリプトを更新する

これは、単純な更新シェル/ CGIスクリプトです。

#!/bin/sh
echo Status: 200 Okay
echo Content-Type: text/plain
echo
echo Rebuilding APT repository:

{
  #-- settings
  export GNUPGHOME=/var/www/usr12345/files
  export KEYNAME=dpkg1
  #-- one-time setup
  if [ ! -e "$GNUPGHOME/secring.gpg" ] ; then
     gpg --import -v -v ./secret.gpg
     gpg --import -v -v ./public.gpg
     gpg --list-keys
  fi

  #-- symlink .deb files from adjacent sub-directories
  find .. -name '*.deb' -exec ln -s '{}' . \;

  #-- build Packages file
  apt-ftparchive packages . > Packages
  bzip2 -kf Packages

  #-- signed Release file
  apt-ftparchive release . > Release
  gpg --yes -abs -u $KEYNAME -o Release.gpg Release

} 2>&1

この3 gpg行は、あるディレクトリ$GNUPGHOME(ドキュメントルートの上)でGPGセットアップを初期化するために1回だけ実行する必要があります。secret.gpg成功後のみ削除します。

この小さなシェルスクリプトのユニークな機能の1つは、*.debドロップインするファイルを受け入れるだけでなく、再帰的に(1レベル上から)他のファイルを検索し、シンボリックリンクすることです(Options FollowSymLinks最終的には.htaccessが必要です)。

このスクリプトは、CGIとして手動で実行することも、cronジョブごとに実行することもできます。ただし、非表示にするか、ドキュメントルートから移動することをお勧めします。

「簡単な」aptリポジトリであるため、次のapt-sources.listエントリが必要です。

deb http://example.org/deb/  ./    # Simple signed repo

これは、単一アーキテクチャのリポジトリに適しています。数百のパッケージを期待しない場合。

パッケージ署名

gpgキーを設定したら、個々のパッケージに署名することも簡単です。

dpkg-sig -k dpkg1 -s builder *.deb

(これは、リポジトリWebサーバーではなく、パッケージがビルドされるワークステーションで実行する必要があります。)

署名のないリポジトリ

署名されたパッケージが必要ない場合は、更新スクリプトを次のように削減できます。

  dpkg-scanpackages . > Packages
  bzip2 -kf Packages

これはまだ平均的なユーザーが使用できますが、次のカスタムフラグが必要ですapt.sources

deb [trusted=yes] http://apt.example.org/deb/ ./

しかしtrusted=yes、すべてにフラグを習慣的に使用しないでください。または、パッケージの起源が実際にわからない場合は。

使いやすさのために

エンドユーザーの場合HEADER.htmlは、リポジトリディレクトリにドロップします。Apache mod_auto_indexはそのメモを先頭に追加します:

<h1>http://example.org/apt/</h1>
<dl>
<dt>Add this repository to /etc/apt/sources.list as:
 <dd><kbd>deb http://example.org/apt/ ./  # example repo</kbd>
<dt>Import verification key with:
 <dd><kbd>wget -q http://http://example.org/apt/public.gpg -O- | sudo apt-key add -</kbd>
</dl>

代替案

最近、リポジトリ管理を自動化するいくつかのツールがあります。そして、さえリポジトリオンラインホスティング事業者とパッケージのビルドサービス(あるgemfurypackagecloudはbintrayなど)

  • かなり便利な代替手段はprmです。複雑なAPTおよびYUMリポジトリを作成するRubyスクリプトです。(ただし、RPMがやがてやがて消滅することを願っています。)-ごとにインストールするのが最適gem install prmです。

  • また、これを同様に自動化する小さなスクリプトを作成しました:http : //apt.include-once.org/apt-phparchive-過度に堅牢ではなく、PHPで書かれていることに注意してください(一度、これは偶然です)もともとはDEB、RPM-over-APTおよびPharバンドル向けでした。

これは元の質問と密接に関連しているため、Debianパッケージをより簡単に構築するツールもあります。やや時代遅れ:EPM。さらに多くのcontempoary:FPM。そして、私の個人的なフォーク:XPM(スクリプト言語アプリをパッケージ化するためのより怠approachなアプローチ。)


1
そのレポジトリを使用したいときにgpgキーを追加するにはどうすればよいですか?
ブルース日

1
通常のようにwget …/public.gpg -O- | apt-key add -
マリオ

複数のアーキテクチャをサポートしたい場合、何を変更する必要がありますか?
starbeamrainbowlabs

1
@starbeamrainbowlabs完全にはわかりませんdpkg-scanpackages -mが、十分かもしれません。まだ同じリリースファイル内のすべてのアーキテクチャがリストされます。ただし、各.debが一意の名前を持っているか、または個別のサブディレクトリ(amd64 /、all /)に格納されている限り、うまくいくはずです。それ以外の場合は、より複雑なリポジトリツールの1つに進みます。
マリオ

7

はい。あなたはこれを行うことができます。正しい方法でファイルを整理し、インデックスファイルを作成するだけです。Webサーバーのドキュメントルート内にディレクトリ構造を配置すると、Webサーバー経由でパッケージにアクセスできます。

以下に、ファイルの編成方法とインデックスファイルの作成方法について詳しく説明します。

その1つのパッケージをインストールする場合は、repreproというツールを使用することもできます。これにより、管理が少し便利になります。


@txwikinger:パッケージをインストールできないのは、サーバーがcentOSを実行しているためです:)
Nathan Osman

まあ。する必要はありません。別のコンピューターですべてを作成し、ツリー全体をcentosサーバーにrsyncするだけ
です-txwikinger

ええ、間違いなくrepreproの使用は2番目です。それはあなたの人生をとても楽にします。別のコンピューターでレポジトリを作成することは、署名キーをより適切に保護できる場合に備えて、機能になる場合があります。
アンドル

@andol&@txwikinger:試していますが、問題が発生しています。更新された質問をご覧ください。
ネイサンオスマン

distsファイルには、。/ binary- <specific arch>が必要です。
-andol


0

マリオの答えを追った後にこのエラーに直面した人には:

Unable to find expected entry 'Packages' in Release file (Wrong sources.list entry or malformed file)

以下をせよ:

dpkg-scanpackages debs /dev/null > Packages
gzip -k Packages
apt-ftparchive release . > Release
gpg --default-key $KEYID -abs -o Release.gpg Release

*.debファイルをdebsフォルダーに入れます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.