私は次のバージョン番号でRPMパッケージを管理しています。
my-package-1.1.1-1
、、、、。my-package-1.1.2-1
my-package-1.1.3-1
my-package-1.2.0-0.alpha01.1
my-package < 1.2
これで、バージョン1.1のみをインストールするために別の依存関係パッケージを入手したいと思います。yum
ただし、my-package-1.2.0-0.alpha01
次のようにインストールするとき
yum
私のパッケージのバージョンをどのように確認しますか?
要件を含むパッケージの仕様は次のとおりです。
Name: test
Version: 1
Release: 1
Requires: my-package < 1.2
%description
%prep
%build
%install
%files
私もRequires: my-package < 0:1.2
これを試しましたが、成功しませんでした。
1.2のrpm仕様はmy-package
次のように始まります。
Name: my-package
Provides: my-package
Version: 1.2.0
Release: 0.alpha01.1%{?dist}
バージョン 1.1 の場合:
Name: my-package
Provides: my-package
Version: 1.1.3
Release: 1%{?dist}
Version:
別のバージョン番号を設定するには、行を変更してください。設定されたエポックがないので、デフォルトは0:
。
rpmdev-vercmp "1.2.0-0.alpha01.1" "1.2"
正しく返してください1.2.0-0.alpha01.1 > 1.2
。だから番号付けが間違っているとは思わない。
奇妙なことは、Epoch: 200
バージョン1.2を設定my-package
し、バージョン200:1.2.0をインストールするようにtest
パッケージを設定しても同じことです。my-package < 10:1.2
問題は、yum
ビルドされたバージョンが正しく解析されないことですmy-package.rpm
。どうやって確認しますか?
編集1
以下は、使用されたいくつかの診断ですrpm -q
。バージョン依存関係が正しいと思いますか? :
$ rpm -qp --requires test-1-1.x86_64.rpm
my-package < 1.2
rpmlib(FileDigests) <= 4.6.0-1
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1
rpmlib(PayloadIsXz) <= 5.2-1
$ rpm -qp --provides my-package-1.1.3-1.noarch.rpm
my-package
my-package = 1.1.3-1
$ rpm -qp --provides my-package-1.2.0-0.alpha01.1.noarch.rpm
my-package
my-package = 1.2.0-0.alpha01.1
ステップをコピーするには編集してください!
コピーコードを作ってみました!ホームディレクトリで実行されているCentos7でテストされました。必須rpmdevtools
としてインストールさcreaterepo
れています。
#/bin/bash
echo "Name: my-package
Provides: my-package
Version: \${VERSION}
Release: \${RELEASE}
Summary: NA
License: NA
%description
%prep
%build
%install
%files
" | tee template.spec
echo "Name: has-requirement
Version: 1
Release: 1
Summary: NA
License: NA
Requires: my-package < 1.2
%description
%prep
%build
%install
%files
" | tee has-requirement.spec
vers=("1.1.1" "1.1.2" "1.1.3" "1.2.0")
rpmdev-setuptree
for v in ${vers[@]}; do
VERSION=$v RELEASE="1" envsubst '$${VERSION} $${RELEASE}' < template.spec > my-package.spec
rpmbuild -ba my-package.spec
done
rpmbuild -ba has-requirement.spec
repodir="$PWD/repo"
mkdir -p $repodir
mv ./rpmbuild/RPMS/x86_64/my-package* $repodir
createrepo $repodir
echo "[temp]
name=temp repo
baseurl=file://$repodir
enabled=1
gpgcheck=0" | sudo tee /etc/yum.repos.d/temp.repo
sudo yum clean all; sudo rm -rf /var/cache/yum
sudo yum search my-package --show-duplicates
sudo yum localinstall --assumeno $PWD/rpmbuild/RPMS/x86_64/has-requirement-1-1.x86_64.rpm
答え1
rpm
テストパッケージの要件を教えてください。
インストールされている場合:
rpm -q test --requires
インストールされていない場合:
rpm -qp /path/to/test.rpm --requires
これが役に立ちます。
エラーは本当に奇妙です。test.rpm
正しくインストールしましたか?正しい依存関係がありますか?
答え2
依存関係のバージョンを認識しないyumの問題に直面している他の人にとって、これは依存関係の解決策を修正した方法です。
私の依存関係パッケージでは、rpm仕様ヘッダは次から始まります。
Name: my-package
Provides: my-package
Version: 1.2.0
Release: 0
この行はパッケージのすべてのバージョンが利用可能であるため、重複してProvides: my-package
混乱しています。このため、バージョンと時代番号が無視される理由はわかりませんが、そこにあります。yum
my-package
my-package
yum が期待どおりにバージョン管理要件に準拠するために提供されるコンテンツのリストからパッケージ名を削除します。
私の考えにはこれがのバグかもしれませんyum
。dnf
同じ機能を実行しているかどうかテストしていません。