web-dev-qa-db-ja.com

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

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

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

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


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

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

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

deb http://quickmediasolutions.com/apt stable main
52
Nathan Osman

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

26

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

署名キーを生成する

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

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

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

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

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

このスクリプトは、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フラグをすべてに習慣的に使用しないでください。または、Originパッケージについて実際に確信がない場合は使用しないでください。

使いやすさのために

エンドユーザーの場合は、HEADER.htmlをリ​​ポジトリディレクトリにドロップするだけです。 Apaches 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>

代替案

最近、リポジトリ管理を自動化するいくつかのツールがあります。さらに、リポジトリオンラインホスティングサービスやパッケージビルドサービスもあります( gemfurypackagecloudbintray など)

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

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

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

40
mario

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

ここ は、ファイルの編成方法とインデックスファイルの作成方法の詳細な説明です。

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

7
txwikinger

Launchpad PPA を検討することもできます

2
ups

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

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フォルダーに入れました。

0
theeminence