2016-09-09 4 views
0

私はRedline rpm packageのいくつかの変更に取り組んでおり、アーキテクチャの指定について質問がありました。アーキテクチャは、rpmファイル名内の文字列として指定されます。 xyz-1.2.3-noarch.rpmまたはxyz.1.2.3-i386.rpmで、前者はバイナリコンポーネント(Javaパッケージ、Pythonパッケージ、スクリプトファイルコレクションなど)を持たないパッケージに適しており、後者はintel 386プロセッサ用のネイティブコードライブラリを含むパッケージに適しています。RPMヘッダーのLead.archnum変数は、どのような目的にも役立ちますか?

これはかなり明確です。

ただし、rpmファイルのヘッダーにはLeadという内部値があり、このセクションにはarchnumという短いメンバーが含まれています。これが記述されているhere:私たちは、以下の構造がarchnumに配置する必要がありますどのような値

struct rpmlead { 
    unsigned char magic[4]; 
    unsigned char major, minor; 
    short type; 
    short archnum; 
    char name[66]; 
    short osnum; 
    short signature_type; 
    char reserved[16]; 
} ; 

を説明参照ここで説明されていません。

old and somewhat cryptic reference to this subject hereがあります。 文書が書かれた時点で使用されていたアーキテクチャをリストアップした後、次のようになります。

このリストはほぼ確実に変更されます。最新のリストについては、 ファイル/ usr/lib/rpmrcを参照してください。 RPMに内部的に使用されている の情報が含まれています。これには、アーキテクチャーのリストとそれに相当する のコード番号が含まれます。

などrpmrcファイルその中で古くなっているコメント

/usr/lib/rpm/rpmrcで、より近代的なシステム上で発見し、ここで我々が定義されたアーキテクチャといくつかのコード番号、および互換性の適応症の数を見つけるのですかさ、

これはすべて非常に曖昧です。どのアーキテクチャーがどのコード番号を使用すべきかについての権威的なリストはどこにもなく、あなた自身のシステム上のファイルから「最新のリスト」を得ることへの言及はむしろ奇妙なようです。

これは、rpmインストーラがこれらのツールと何をしていますか?

archnum回転数

グーグルで私は私にarchnumに言及したソースコードを示すページを取るヒット数を見つけます。

http://rpm.org/api/4.4.2.2/rpmlead_8c-source.htmlには、readLead()メソッドとwriteLead()メソッドが表示され、これらの値を読み書きするコードが含まれます。このソースファイルの他のバージョンには他にも多くのリンクがありますが、これらはすべて同様のコードを持っています。 rpmParse.cへのリンクと上記の構造を定義するヘッダーファイルもあります。

この検索で​​見つけられないものは、この値をチェックしてそれに基づいて何かを行うコードです。

私の質問です。今日の重要な意味を持つ値はLead.archnumですか、またはこれらのパッケージがどのように処理されるかについての初期概念の痕跡であり、現在の重要性はありませんか?

Redline-RPMパッケージの変更を正確にしたいので、これは私にとって重要です。これが実際にどの程度深刻な問題であるかは完全には明らかではありません。 私はlead.archnumがもはや重要ではないと思うし、これを読んでいる人がそれを確認できることを期待している。

更新: archnumがもはや有意でないことを別の手がかりは、(回転数v.4.8.0インストールから)rpmrcファイルのこのビットは、次のとおり

############################################################# 
# Canonical arch names and numbers 

arch_canon:  athlon: athlon 1 
arch_canon:  geode: geode 1 
arch_canon:  pentium4:  pentium4  1 
arch_canon:  pentium3:  pentium3  1 
arch_canon:  i686: i686 1 
arch_canon:  i586: i586 1 
arch_canon:  i486: i486 1 
arch_canon:  i386: i386 1 
arch_canon:  x86_64: x86_64 1 
arch_canon:  amd64: amd64 1 
arch_canon:  ia32e: ia32e 1 
arch_canon:  em64t: em64t 1 

x86_64のアーキテクチャが使用それらが確かに同じではないという事実にもかかわらず、i386と同じコード番号です!

+0

Lead.archnumが使用されていない場合、アーキテクチャーはどのように決定されるのでしょうか?私はこれを使ってRPMを構築します:https ://ctron.github.io/rpm-builder/rpm-mojo.html – mm759

+0

私はその名前で、あなたの検索がどのように成し遂げられるのか疑いがないと思いますが、確かに、それはより効率的であろうたくさんのファイルを読み込むのではなく、ファイル名のリストに基づいて実行してください。あなたが参照するctronパッケージを認識していなかった。ありがとう。しかし、私はGradleを使っていて、gradle-os-packageプラグインはRedlineを使っているので、オプションではありません。 Redlineのユーザーインターフェイスは、アーキテクチャを指定するためのString(実際にはenum値)も指定します。 –

答えて

2

rpmのリードは、/「最大RPM」の付録を参照してください(1997年に「捨てられたデータ構造」だった。

リードでアーチは、この世紀の大部分のいかなる目的にも使用されていません。

+0

ジェフ、私の疑惑を確認してくれてありがとう。 RPMのどのユーザーがrpmがどのアーキテクチャーのために構築されているかを知る必要がある場合、その答えはファイル名の適切なセクションを調べることです。もちろん、ファイル名は "うそ"かもしれませんが、もう少し難しいことは、ファイル内の短いファイルである可能性があります。 –

+0

また、最新RPMの最新バージョンは何ですか? GoogleのトップにあるのはCopyright 2000です:http://www.rpm.org/max-rpm/ –

+0

arch(またはos)を検出するための最良の答えは、文字列値で拡張可能なRPMTAG_ARCHまたはRPMTAG_OSを照会することです新しいアーキテクチャやアーチ別名があるたびに壊れているリードのアーチ型列挙型とは異なります)。 –

関連する問題