8

さて、さまざまなソフトウェアの依存関係をn回追跡し、さまざまな人々がすべての異なるLinuxディストリビューションに対して行う作業を複製しようとした後、さまざまなソフトウェアをバンドルするより良い方法があるかどうか知りたいです簡単に配布できるように、1 つの .rpm または .deb ファイルにまとめます。

これを行うための私の現在のセットアップは、さまざまなツールのフランケンシュタイン モンスターですが、主に Vagrant と libguestfs です (実際にはどのディストリビューションにも同梱されていないため、Fedora で実行されているソースから構築されていますvirt-diff)。私が現在行っている手順は次のとおりです。

  1. Vagrant ボックスを使用するか、ライブ CD から作成してベース OS を起動します。
  2. をエクスポートし.vmdkて呼び出しますbase-image
  3. 以前のイメージの正確なレプリカをスピンアップし、町に行きます。パッケージ マネージャーまたはその他の手段を使用して、必要なすべての部分をダウンロード、コンパイル、およびインストールします。もう一度、 をエクスポートし.vmdkて呼び出しますnon-base-image
  4. libguestfs を持つ Fedora ゲスト OS で両方の基本イメージを使用できるようにします。
  5. を使用virt-diffして 2 つの画像を比較し、そのデータを というファイルにダンプしますdiff
  6. いくつかの ruby​​ スクリプトを実行diffして、必要な情報が含まれている別の形式に変換します/var
  7. guestfish別のスクリプトを実行して、一連のコマンドを含むコマンド スクリプトを生成しcopy-outます。
  8. スクリプトを実行しguestfishます。
  9. 実行できないdiffため、別のスクリプトを実行してシンボリックリンクを再生成します。guestfish
  10. 結果のフォルダー構造を .deb または .rpm ファイルに変換して出荷します。

これを行うためのより良い方法があるかどうかを知りたいです。あなたはあると思うだろうが、私はそれを理解していない.

4

5 に答える 5

3

私は間違いなく次のようなことを考えます:

A)

  • yum list (パッケージ/依存関係を選択してください)
  • 前のリストの yumdownloader を使用します (または、既にダウンロードした th pkgs を使用します)
  • createrepo
  • CD リポジトリを repolist などに追加するインストール スクリプトを含むメディアで出荷します。

または B)

上記の最初の 2 つの手順を実行し、次に rpm をアーカイブ ビルドにパックします。上記のすべてを含むパッケージをビルドし、rpm の実際のインストールを (rpm -Uvh /tmp/repo/* の行に沿って) 後期スクリプトとして開始します。 (おそらく、クリーンアップ段階で)。rpm データベースのロックを回避してこれを実行できるかどうかはわかりません。

于 2014-01-16T10:31:50.260 に答える
1

すべての依存関係 (A、B、C とする) を含むパッケージを作成するには、主に 3 つの手順があります。

A. 必要なファイルを収集します。
メイン ソフトウェアとその依存関係のファイルを収集する方法は多数あります。すべての依存関係を取得し、エラーなしで実行するには、ベース OS (ライブ システム) を使用する必要があり
ます
。アプリがアクセスするファイルをスキャンして監視し、必要なものを見つけます。
2. chroot と overlayfs を使用する
この方法では、ライブ cd で起動する必要はなく、chroot します。
a. .iso @ /cdrom をマウントし、
b. c.ファイルシステム (filesystem.squashfs) を別の場所、たとえば @ /tmp/union/root にマウントします
。バインドマウント /proc @ /tmp/union/root/proc
d. その上にオーバーレイ
mount -t overlayfs overlayfs /tmp/union/root -o lowerdir=/tmp/union/root,upperdir=/tmp/union/rw
e. チョルート
chroot /tmp/union/root

apt-get または別の方法を使用してパッケージをインストールできるようになりました (chroot 端末からのみ)。変更されたすべてのファイルは @ に保存されます/tmp/union/rw。そこからファイルを取得します。
3. 手動で収集したパッケージ
の使用 パッケージ マネージャーを使用して、依存関係を収集します。たとえば apt-get install package --print-uris、dep パッケージのダウンロード URI を出力します。この uris を使用してパッケージをダウンロードし、すべてを抽出します ( dpkg -x 1.deb ./extracted)。

B. ごみファイルのクリーンアップ ファイル
を収集したら、不要なファイルを削除します

C. ファイルのパック
1. appImageAssistance の使用ファイル
を手動で収集した場合は、appname.desktop ファイルを ./usr/share/applications からディレクトリ ツリーのルートにコピーする必要があります。また、別のアプリからAppRunという名前のファイルをコピーするか、AppDirAssistance から抽出します。
2. 収集したファイルを使用して .deb または .rpm を作成します。

于 2014-01-18T15:24:43.000 に答える
1

主な問題は、パッケージを実行するために必要なすべての標準アップストリーム ディストリビューション パッケージを顧客がインストールしたことを確認することですか?

その場合、最も簡単な解決策は、yum および apt インフラストラクチャを活用して、これらのツールで必要な前提条件パッケージを追跡してインストールすることだと思います。

完全な事前要件仕様を備えたネイティブ yum/apt リポジトリを提供する場合 (ハードワークはすでに完了しているようです)。あとは、標準のシステム インストール ツールが処理します。yum/apt の個人リポジトリの作成の詳細については、以下のリンクを参照してください。

オフラインのお客様には、ソフトウェア、アップストリーム ディストリビューションのミラー(またはミラーサブセット)、およびそれらをyum config / apt configに追加する手順を含むメディアを提供できます。

Yum Fedora デプロイメントガイドの Yum リポジトリの作成

Apt Debian Wiki でDebian リポジトリをセットアップする方法

于 2014-01-13T22:06:51.890 に答える
0

つまり、あなたの顧客は、あなたが探している依存関係の別のバージョンを指定する可能性のある他のソフトウェアをインストールすることはありませんよね?

そこまで行きたいのなら、独自のディストリビューションを作成してみませんか?

または、一連のパッケージと、それを実行する単一のスクリプトを提供することもできます。rpm -i dep1 dep2 yourpackage

于 2014-01-13T19:28:53.993 に答える