開発者マシンからサーバーにソフトウェアプロジェクト(rpmとしてパッケージ化)を展開する必要があります。私はFedora 23とdnfパッケージマネージャを使用しています。サーバーにデプロイする前に、rpmのすべての依存関係を収集する必要があります。内部の規制のためにサーバをインターネットに接続することはできません(しかし、私はそれをsshすることができます)。実行中のリポジトリミラーなどはオプションではありません。私は、デベロッパーマシン上のすべての依存関係をscp(またはansible)でサーバーに収集し、サーバーにインストールする必要があるのではないかと心配しています。すべてのrpm依存関係を収集してプロジェクトを展開する
--installroot
dnfのオプションは、dnfが空のシステムだと思うものにインストールされるすべてのrpmsを取得できるので大いに役立つことを望みました。しかし、これは動作しません。
mkdir foo && sudo dnf install --installroot=$PWD/foo golang
エラーを与える:
Failed to synchronize cache for repo 'fedora'
これはなぜ失敗するのか?私の選択肢は何ですか?
私は、エレガントで堅牢なソリューションをご希望です。私はサーバーに何もインストールしないことを望んでいます(私は、1つのscpの後にsshを介して1つまたは2つのコマンドを実行するのが最も嬉しいです)。 rpm + yum/dnfの魔法の組み合わせは素晴らしいでしょうが、apt + debを含む他の解決策も興味深いです。私はドッカーを使用しないことを望んでおり、追加のインフラストラクチャ(ドッカーレジストリ、rpmミラーなど)を実行することに強く反対しています。
これまではこのような制限がありましたが、必要な回避策でソフトウェアをインストールするのが最も安全な方法であると結論づけました。署名済みのパッケージリポジトリを有効にする方がずっと良いでしょう。インストールされているパッケージが気になる場合は、リポジトリの内容を制御します。このようなことがなければ、必要なRPMをすべてコピーして、一度に1つずつインストールするように強制されました。最後に、Dockerコンテナの使用を検討することもできます.Dockerコンテナは、オフラインで作成し、署名してから展開レジストリにプッシュすることができます。根本的な考えにはほど遠いでしょう。望みは助けてくれる –
@ MarkO'Connorなぜinstall-rootスイッチが動かないのですか?これは、すべてのパッケージを収集する最もクリーンな方法のように思えます。 –
"golang"と呼ばれるパッケージの前提条件がすべてインストールされたchrootが必要ですか? Poky-YoctoはRPM5を "solvedb"(これは "everything"のrpmdb以上のもの)と一緒に使用します。 solvedb(マクロで設定)を指定すると、 "rpm -Uvh --root = $ PWD/foo + golang"を実行すると、golangとその前提条件がすべて$ PWD/fooのchrootにインストールされます。詳細を追加することはできますが、事前に注意してください。操作はパッケージに含まれるメタデータと同じくらい良いものです。 –