apt-cache依存とapt-cache showpkgの出力を理解する

apt-cache依存とapt-cache showpkgの出力を理解する

デフォルトでは含まれていLubuntu 13.10ないものを使用していますgedit。しかし、私はそれを使ってインストールしました。

sudo apt-get install --no-install-recommends gedit

今私が走るとき、apt-cache depends gedit私はその真ん中にzenityいます。yelprecommends

apt-cache showpkg geditしかし、とzenity(下のコードの下部から3行目)を実行するyelpと。Dependencies

Dependencies: 
3.8.3-0ubuntu3 - libatk1.0-0 (2 1.12.4) libc6 (2 2.14)
libcairo2 (2 1.2.4) libenchant1c2a (2 1.6.0)
libgdk-pixbuf2.0-0 (2 2.22.0) libgirepository-1.0-1 (2 0.9.3) 
libglib2.0-0 (2 2.37.3) libgtk-3-0 (2 3.7.10)
libgtksourceview-3.0-1 (2 3.2.0) libpango-1.0-0 (2 1.14.0)
libpeas-1.0-0 (2 1.1.0) libx11-6 (0 (null)) libxml2 (2 2.7.4)
libzeitgeist-2.0-0 (2 0.9.9) gedit-common (2 3.8)
gedit-common (3 3.9) gsettings-desktop-schemas (0 (null))
python3-gi (2 3.0) python-gi-cairo (2 3.0) 
gir1.2-peas-1.0 (0 (null)) iso-codes (0 (null)) 
gedit-plugins (0 (null)) zenity (0 (null)) yelp (0 (null)) 
gedit-plugins (3 2.91) gedit-plugins:i386 (3 2.91) 
gedit:i386 (0 (null)) 

なぜそんなことですか?ソフトウェアは私のシステムにすでに存在し、ソフトウェアの出力を使用しapt-cache dependsapt-cache showpkg影響を受けていますか--no-install recommends?どういう(0 (null))意味ですか?

私が見るのは完全に更新されたシステムです。つまり、私はsudo apt-get update && sudo apt-get dist-upgradeこれらのapt-cacheコマンドを実行しようとしました。

答え1

残念ながら、依存関係リストは人間が読める形式に変換されません。依存関係の形式は次のとおりです。

packagename (compareOp value)

compareOp次の数字のいずれかです。

 0 NoOp
 1 LessEq
 2 GreaterEq
 3 Less
 4 Greater
 5 Equals
 6 NotEquals

追加することもできます

16 OR

ORこれは、この依存関係が次の依存関係でも満たされる可能性があることを意味するため、「または」依存関係の1つだけが必要です。

NoOpいいえ。 Cライブラリが文字列を印刷する方法なので、valueこれらの出力が表示されます。まあ、翻訳は全くありません!(0 (null))NULL

どの依存関係が必須なのか、推奨されるのか、衝突するのかなどを確認する方法が見つかりませんでした。すべての情報を取得するには、まず実行してください。

apt-cache depends PACKAGE

人間の形式で依存関係を一覧表示します。残念ながら、ここには詳細がありません。次に、依存関係の詳細を探します。

apt-cache showpkg PACKAGE

おそらく、他の人が必要なすべての詳細とともに、人間が読める形式でパッケージの依存関係を一覧表示するより良い方法を見つけたか、ツールを作成した可能性があります。

私はこれをスクリプトと呼ばれるスクリプトに結合しようとしましたが、showdepsそれがうまくいったようです。その名前は次のとおりです。showdeps package..

出力は非常に似ていますapt-cache depends package..が、より詳細な情報が含まれています。

ちなみにここにコピーし、オリジナルは にあります。https://github.com/hilbix/bashy/blob/debian/showdeps

#!/bin/bash

export LC_ALL=C.UTF-8

showdep()
{
export PKG="$1"
gawk '
NR==1,/^Dependencies:/  { next }
/^Provides:/,0      { next }
END { if (NR==0) { print "No input, package " ENVIRON["PKG"] " not found?"; exit(1); } }

BEGIN   {
    OP[0]   = "";
    OP[1]   = "<=";
    OP[2]   = ">=";
    OP[3]   = "<<";
    OP[4]   = ">>";
    OP[5]   = "==";
    OP[6]   = "!=";
    for (a in OP) OP[a+16]=OP[a];
    }

{
  delete pkg;
  delete cmp;
  j = 0;
  for (i=3; i<=NF; i+=3)
    {
      pkg[j] = $i;
      x = $(i+1); sub(/^[(]/,"",x);
      y = $(i+2); sub(/[)]$/,"",y);
      x = (x in OP) ? OP[x] : "### OOPS, unknown >>>" x "<<<";
      if (x=="")
        if (y=="(null)")
          y = "";
        else
          x = "???OOPS???";
      cmp[j] = x y;
      j++;
    }
  ver=$1;
  gsub(/'\''/,"",ver);
  exec="apt-cache depends \"$PKG\"='\''"ver"'\''";
  j = 0;
  while (exec | getline)
    {
      printf "%s\t%s\t%s%s\n", ENVIRON["PKG"], ver, $0, ($1~/:$/) ? "\t(" cmp[j++] ")" : "";
    }
  close(exec)
  print ""
}
' <(apt-cache showpkg "$1")
}

for p
do
    showdep "$p"
done

これは、メディアの自由、ビールの自由、赤ちゃんの自由と同様に、フリーソフトウェアです。いかなる保証も提供されず、使用に伴うリスクはユーザー自身が負担し、エラーについて私に責任を問うことはできません。

出力例:

$ showdeps gedit
gedit   3.10.4-0ubuntu4 gedit
gedit   3.10.4-0ubuntu4   Depends: libatk1.0-0  (>=1.12.4)
gedit   3.10.4-0ubuntu4   Depends: libc6        (>=2.4)
gedit   3.10.4-0ubuntu4   Depends: libcairo2    (>=1.2.4)
gedit   3.10.4-0ubuntu4   Depends: libenchant1c2a       (>=1.6.0)
gedit   3.10.4-0ubuntu4   Depends: libgdk-pixbuf2.0-0   (>=2.22.0)
gedit   3.10.4-0ubuntu4   Depends: libgirepository-1.0-1        (>=0.9.3)
gedit   3.10.4-0ubuntu4   Depends: libglib2.0-0 (>=2.38)
gedit   3.10.4-0ubuntu4   Depends: libgtk-3-0   (>=3.10)
gedit   3.10.4-0ubuntu4   Depends: libgtksourceview-3.0-1       (>=3.10.0)
gedit   3.10.4-0ubuntu4   Depends: libpango-1.0-0       (>=1.14.0)
gedit   3.10.4-0ubuntu4   Depends: libpeas-1.0-0        (>=1.1.0)
gedit   3.10.4-0ubuntu4   Depends: libx11-6     ()
gedit   3.10.4-0ubuntu4   Depends: libxml2      (>=2.7.4)
gedit   3.10.4-0ubuntu4   Depends: libzeitgeist-2.0-0   (>=0.9.9)
gedit   3.10.4-0ubuntu4   Depends: gedit-common (>=3.10)
gedit   3.10.4-0ubuntu4   Depends: gedit-common (<<3.11)
gedit   3.10.4-0ubuntu4   Depends: gsettings-desktop-schemas    ()
gedit   3.10.4-0ubuntu4   Depends: python3-gi   (>=3.0)
gedit   3.10.4-0ubuntu4   Depends: python-gi-cairo      (>=3.0)
gedit   3.10.4-0ubuntu4   Depends: gir1.2-peas-1.0      ()
gedit   3.10.4-0ubuntu4   Depends: iso-codes    ()
gedit   3.10.4-0ubuntu4   Suggests: gedit-plugins       ()
gedit   3.10.4-0ubuntu4   Recommends: gir1.2-gtksource-3.0      ()
gedit   3.10.4-0ubuntu4   Recommends: zenity    ()
gedit   3.10.4-0ubuntu4     zenity:amd64
gedit   3.10.4-0ubuntu4   Recommends: yelp      ()
gedit   3.10.4-0ubuntu4   Breaks: gedit-plugins (<<2.91)
gedit   3.10.4-0ubuntu4   Breaks: gedit-plugins:amd64   (<<2.91)
gedit   3.10.4-0ubuntu4   Conflicts: gedit:amd64        ()

答え2

各依存関係、提案、または提案は依存関係としてリストされているため、そのパッケージをapt-cache showpkgインストールした後に存在する依存関係も含まれます(0/null)。紹介と提案の間に違いはありません。男性の場合:

順方向(一般)依存関係は、関連パッケージが依存するパッケージです。頼る

ソースコードを確認してくださいcmdline/apt-cache.cc

  cout << "Dependencies: " << endl;
  for (pkgCache::VerIterator Cur = Pkg.VersionList(); Cur.end() != true; ++Cur)
  {
     cout << Cur.VerStr() << " - ";
     for (pkgCache::DepIterator Dep = Cur.DependsList(); Dep.end() != true; ++Dep)
        cout << Dep.TargetPkg().FullName(true) << " (" << (int)Dep->CompareOp << " " << DeNull(Dep.TargetVer()) << ") ";
     cout << endl;
  }

面白い部分はDependsLists()機能です。 C ++に関する私の限られた知識のために、この関数はどのパッケージが依存関係であるかを定義する役割を果たしますが、まだこの関数がどこにあるかを見つけることができませんでした。

関連情報