web-dev-qa-db-ja.com

zypperは、マイナーバージョンを指定せずに特定のメジャーバージョンをインストールします

いくつかのパッケージをインストールし、いくつかの構成作業を行うスクリプトを書いています。スクリプトでパッケージの特定のメジャーバージョンをインストールしたいのですが、パッケージのマイナーバージョンがどれであるかは関係ありません。

もっと要点を言えば、パッケージの最新の2.y.zリリースをインストールしたいのですが、1.y.zや3.y.z(またはその他のメジャーバージョン番号)はインストールしません。

私は試しました(成功しませんでした)

  • zypper install 'mypackage=2'
  • zypper install 'mypackage>1<3'
  • zypper install 'mypackage>1' 'mypackage<3'
  • zypper install 'mypackage>=2.0.0' 'mypackage<3.0.0'

最後のものは有望なようです。なぜなら、zypperは次のように文句を言うからです。

'mypackage> = 2.0.0'がパッケージ名に見つかりません。機能を試す。 'mypackage> = 2.0.0'のプロバイダーが見つかりません。

ただし、そのメッセージの後も、指定された2番目のpackage-editionを満たすため、mypackage-1.5.0のインストールが続行されます。

6
Tomas Creemers

マニュアルページから

 install(in)[options] name | capability | rpm_file_uri ... 
パッケージをインストールまたは更新します。
 
パッケージは、名前または名前で選択できます。それらが提供する機能。
 
機能は「NAME [.Arch] [OPEDITION]」によって形成されます。ここで、Archはアーキテクチャコード、OPは=または>のいずれか、EDITIONは「VERSION [-RELEASE]」。次に例を示します。zypper= 0.8.8-2 a 
機能のNAMEコンポーネントは、パッケージ名だけでなく、パッケージによって提供される任意のシンボルです:/bin/vi、libcurl.so.3、Perl(Time :: ParseDate)。シェルから特殊文字を保護するために引用することを忘れないでください。例:
 zypper \> 0.8.10または 'zypper> 0.8.10'。
 
 EDITIONがそうでない場合指定すると、インストール可能な最新バージョンがインストールされます。これは、パッケージがすでにインストールされていて、新しいバージョンが利用可能な場合、インストール可能な最新の
バージョンにアップグレードされることも意味します。
 
 Archが指定されていない場合、または最後のバージョン機能名文字列のドットの後に既知のアーキテクチャが続かない場合、ソルバーは文字列全体を機能名として扱います。 Archがわかっている場合、ソルバーはそのアーキテクチャに一致するパッケージを選択し
、そのようなパッケージが見つからない場合は文句を言います。
 

次のoneと表示され、接続詞演算子が表示されないため、ネイティブに実行できないと言います。

あなたはいつでも次のようなものでそれをスクリプト化することができます

zypper se -n -s package | grep " package " | grep " MIN_NUM" | cut -d '|' -f 4

注意:上記はvery怠惰であり、より適切に記述されるべきであることに注意してください。

また、注意:機能をリクエストする必要があります。 :)

1
SailorCire

より良い

最初、私はここでSailorCireの答えを試し、改良版を思いつきました。

zypper search -t package -x -s PACKAGE | grep " MIN_NUM" | cut -d '|' -f 4 | tr -d '[:space:]の場合、zypper installに続けて上記のバッククォートで囲まれたコマンドを実行することにより、それをzypper install PACKAGEにパイプできます。

たとえば、これによりphp7-pear 1.*がインストールされます。

zypper -n in --details php7-pear-`zypper search -t package -x -s php7-pear | grep " 1." | cut -d '|' -f 4 | tr -d '[:space:]'`

ベスト

しかし、それから私はより良い解決策を思いついた。このようなハッキングで特定のバージョンをターゲットにするのではなく、バージョン制約付きのzypper addlockを使用して、ハッキングのないバージョンを除外できます。

したがって、OPが望んでいるのは実際にはこれです。

zypper addlock "mypackage < 2"
zypper addlock "mypackage >= 3"

これらにより、バージョン<2または> = 3でのmypackageのインストールが防止されます。

0