Bagaimana cara mengetahui dari mana repositori Ubuntu atau Debian berasal?

168

Pada sistem berbasis Debian, termasuk Ubuntu, bagaimana orang bisa tahu dari mana repositori suatu paket akan diunduh, tanpa benar-benar memulai pengunduhan? aptitude showdan apt-cache infoakan menampilkan bagian (mis., metapackage, basis, grafik), tetapi bukan repositori yang dimiliki paket (mis., http://ppa.launchpad.net/mactel-support/ppa/ubuntu atau http: // us .archive.ubuntu.com / ubuntu / ).

Ketika menginstal paket, repositori yang sebenarnya muncul selama unduhan (itu dicetak dalam output "unduh dari ..." dari program apt dan sejenis), tetapi bagaimana seseorang dapat memperoleh informasi tentang repositori yang berisi paket (atau spesifik versi suatu paket) tanpa mengunduh dan menginstalnya terlebih dahulu?

Selain itu, bagaimana seseorang dapat menentukan repositori sumber untuk paket yang sudah diinstal?

Gotgenes
sumber
1
saya menemukan ini salah satu kekurangan dari Apt; tidak mudah untuk mengetahui dari mana repositori menyediakan paket tertentu dalam alat pemasang paket.
quack quixote

Jawaban:

203

Saya menjalankan apt-cache policy <package name>:

$ apt-cache policy wajig
wajig:
  Installed: 2.1
  Candidate: 2.1
  Version table:
 *** 2.1 0
        100 /var/lib/dpkg/status
     2.0.47 0
        500 file:/home/wena/.repo_bin/ squeeze/main i386 Packages
        500 ftp://ftp.is.co.za/debian/ squeeze/main i386 Packages

Itu artinya ada tiga wajigpaket:

  • Salah satu yang diinstal ( /var/lib/dpkg/status)

  • Yang tersedia dari repositori lokal ( file:/home/wena/.repo_bin/)

  • Yang tersedia dari repositori jarak jauh ( ftp://ftp.is.co.za/debian), yang juga memiliki versi yang sama ( 2.0.47 ) dengan yang ada di repositori lokal


Selain itu, apt-cache madison <package name>akan menampilkan informasi serupa dalam format tabel.

 wajig |        2.2 | mirror://mirrors.ubuntu.com/mirrors.txt/ precise/universe amd64 Packages
 wajig |        2.2 | mirror://mirrors.ubuntu.com/mirrors.txt/ precise/universe Sources
tepang
sumber
Tapi itu tidak menunjukkan dari mana paket yang diinstal berasal, bukan?
Adobe
2
@Adobe Dalam kasus saya, 2.1versi ini tidak tersedia dari repositori mana pun. Ini dibuat secara lokal.
tshepang
2
Apa tanda paket yang diinstal? ***atau /var/lib/dpkg/status?
SuB
Mungkin keduanya? Tidak yakin.
tshepang
Ketika paket tidak diinstal, apt-cache policymengatakan: Installed: (none).
John McGehee
28

Aha! Ternyata, aptperintah yang tepat bukan apt-cache info, melainkan apt-cache showpkg,.

$ apt-cache showpkg linux-generic
Package: linux-generic
Versions: 
2.6.31.19.32 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic-updates_main_binary-amd64_Packages) (/var/lib/apt/lists/security.ubuntu.com_ubuntu_dists_karmic-security_main_binary-amd64_Packages) (/var/lib/dpkg/status)
 Description Language: 
                 File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic-updates_main_binary-amd64_Packages
                  MD5: 5d722da329763b9342d322f5a140005c

2.6.31.14.27 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_main_binary-amd64_Packages)
 Description Language: 
                 File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_main_binary-amd64_Packages
                  MD5: 5d722da329763b9342d322f5a140005c


Reverse Depends: 
Dependencies: 
2.6.31.19.32 - linux-image-generic (5 2.6.31.19.32) 
2.6.31.14.27 - linux-image-generic (5 2.6.31.14.27) 
Provides: 
2.6.31.19.32 - 
2.6.31.14.27 - 
Reverse Provides: 

The File:garis menyediakan informasi repositori setelah /var/lib/apt/lists/.

Ada laporan bug yang aptitudetidak dapat menampilkan repositori sumber , tetapi tampaknya saat ini fitur tersebut masih ada dalam daftar keinginan.

Gotgenes
sumber
Fitur bakat itu masih ada di daftar hitam 8 tahun kemudian dan saya tidak tahu mengapa jawaban ini ( apt-cache showpkg) tidak ditandai sebagai yang benar.
Csaba Toth
8

Ini berfungsi untuk saya (menunjukkan di mana paket 2vcard berada):

$ grep 2vcard /var/lib/apt/lists/* | grep "Filename:"

/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_universe_binary-i386_Packages:Filename: pool/universe/2/2vcard/2vcard_0.5-3_all.deb

Anda dapat menerapkan pemfilteran tambahan untuk memeriksa versi, dll., Jika beberapa versi tersedia.

Cerah
sumber
Pragmatis. Saya terkejut informasi ini tidak dapat diakses melalui ujung depan dpkg.
dapatkan
@ got Tersedia: superuser.com/questions/106794/…
tshepang
8

Saya heran mengapa tidak ada yang menyebutkan aptitude. Saya menggunakannya sepanjang waktu.

Aptitude adalah:

  • dikirimkan secara default dengan banyak distribusi berbasis Debian. Dapat diinstal ke yang lain (seperti Ubuntu) viasudo apt install aptitude
  • tidak memerlukan hak administratif (setidaknya untuk perintah di bawah ini)
  • memang memiliki ncursesGUI yang bagus (tetapi sebagian besar waktu digunakan tanpa itu)
  • memberikan hasil yang sangat cantik. Untuk menampilkan versi paket, gunakan aptitude versionsperintah:

    me@wheezy:~$ aptitude versions kde-standard
    Package kde-standard:                        
    i A 5:77+deb7u1     stable              500
    p A 5:84            testing,unstable    130
    
  • tidak memiliki Kekuatan Super Sapi

Huruf di depan setiap string menunjukkan status paket, i diinstal dan p dibersihkan (atau tidak pernah diinstal), stabil , pengujian dan tidak stabil adalah definisi repositori, nomor pada akhirnya adalah prioritas pin .

Satu peringatan mengenai versi terbaru dari aptitude layak disebutkan di sini: secara default ini menunjukkan semua paket, yang mencakup nama yang Anda cari, jadi gunakan sedikit sihir regex untuk mencari dengan nama yang ketat, misalnya aptitude versions ^kde-workspace$.

TranslucentCloud
sumber
1
Perintah yang bagus tetapi tidak mencantumkan repositori seperti yang diminta.
bjhend
Sebenarnya itu benar .
TranslucentCloud
Kamu tidak mengerti PPA tambahan dapat diinstal. Penting untuk mengetahui apakah suatu paket berasal dari PPA tersebut. Sebagai soal fakta, itulah yang saya coba cari tahu sekarang - jika ya, saya dapat menghapus PPA, mengurangi risiko masalah.
reinierpost
Ya, Anda benar, dengan versionsAnda cukup memeriksa nilai pin dari paket yang diberikan, bukan repo yang terkait. Ini masih berguna meskipun jika Anda tahu semua repo Anda dan bagaimana mereka disematkan.
TranslucentCloud
6

Sayangnya, informasi ini tidak direkam selama instalasi paket. Anda dapat membuat tebakan yang layak jika repositori masih dalam daftar sumber dan repositori masih memiliki paket:

grep -l PKG /var/lib/apt/lists/*

apt-cache showpkg memperlihatkan data dari basis data repositori (bukan yang diinstal) sehingga merupakan bentuk lain dari informasi yang sama dari grep.

Bahkan synaptic tidak dapat memberi tahu (di layar Asal) jika Anda menonaktifkan repositori dan memperbarui.

kanaka
sumber
2

Atau, terinspirasi oleh Sunny, Anda dapat mencoba:

# list installed restricted packages
for i in `dpkg --get-selections | awk '{ print $1 }'`; do egrep -lRI "^Filename: .*/${i}_[^/]+.deb" /var/lib/apt/lists/ | grep -q 'restricted' && echo $i; done

# list installed multiverse packages
for i in `dpkg --get-selections | awk '{ print $1 }'`; do egrep -lRI "^Filename: .*/${i}_[^/]+.deb" /var/lib/apt/lists/ | grep -q 'multiverse' && echo $i; done

ps. tidak 100% akurat.

Tim
sumber