apt-get unduh dengan batasan versi

18

Saya perlu menggunakan apt-get downloaduntuk mengambil versi .debfile tertentu, tetapi belum tentu versi yang tepat. .debdependensi diizinkan untuk menggunakan ekspresi seperti >=0.3.0dan saya ingin apt-get downloadmengambil versi yang sama dengan yang akan diunduh menggunakan dependensi tersebut.

Kesimpulannya, apa yang ingin saya kerjakan adalah ini:

$ apt-get download package='>=0.3.0'

Adakah yang tahu bagaimana saya bisa mendapatkan fungsionalitas itu?

mikosz
sumber
Mengapa Anda tidak mengunduh paket secara manual dari package.ubuntu.com saja ?
terdon
Karena saya perlu memastikan bahwa paket yang diunduh adalah paket yang sama persis dengan yang akan diunduh ketika "apt-get install" dijalankan. Saya memasukkan ini dalam skrip ekstensi cmake.
mikosz

Jawaban:

2

Anda dapat melakukan ini dengan terlebih dahulu mencari tahu versi mana yang merupakan versi terbaru yang juga lebih besar atau sama dengan versi minimum yang Anda inginkan. Kemudian, Anda mengunduh versi itu menggunakan apt-get download. Inilah skrip yang melakukan ini (ini agak jelek, tetapi Anda mendapatkan idenya):

#!/bin/bash

if [ $# -lt 2 ]; then
    echo "Usage: $0 <packagename> <minimum version>"
    exit 1
fi

pkgname="$1"
minversion="$2"

V="0"

for version in `apt-cache madison $pkgname | awk -F'|' '{print $2}'`; do
    echo "Considering $version"
    if dpkg --compare-versions $version ge $minversion; then
        echo "- Version is at least $minversion"
        if dpkg --compare-versions $version gt $V; then
            echo "- This is the newest version so far"
            V=$version
        else
            echo "- We already have a newer version"
        fi
    else
        echo "- This is older than $minversion"
    fi
done

if [ "$V" = "0" ]; then
    echo "There is no version greater than or equal to $minversion"
    exit 1
fi

echo "Selected version: $V"

echo "Downloading"
apt-get download $pkgname=$V
echo "Done"

Anda harus menambahkan pemeriksaan kesalahan jika paket tidak ada, dll. Tetapi ini berisi solusi inti. Juga, saya berasumsi di sini bahwa Anda menginginkan paket terbaru yang tersedia yang setidaknya merupakan versi tertentu. Jika Anda lebih suka paket tertua yang tersedia yang setidaknya merupakan versi tertentu, Anda harus menyesuaikan skrip untuk berhenti mencari begitu menemukan sesuatu yang setidaknya merupakan versi yang Anda inginkan.

Fabian Fagerholm
sumber
0

Karena Anda menginginkan apa yang apt-get installakan Anda berikan, mungkin patut dijalankan apt-get installdalam 'mode unduh saja' menggunakan direktori arsip khusus:

-d, --download-only
  Download only; package files are only retrieved, not unpacked or installed.
  Configuration Item: APT::Get::Download-Only.

Bagaimana cara mengubah direktori arsip? Ini adalah opsi konfigurasi:

FILES
  [...]

  /var/cache/apt/archives/
  Storage area for retrieved package files. Configuration Item: Dir::Cache::Archives.

Itu dapat diubah sementara dengan --optionparameter:

-o, --option
  Set a Configuration Option; This will set an arbitrary configuration option. 
  The syntax is -o Foo::Bar=bar.  -o and --option can be used multiple times 
  to set different options.

Untuk meringkas:

apt-get install -d -o dir::cache::archives="/some/cache/dir" <package>

Perintah ini akan men-download (dan hanya men-download, tidak menginstal) yang relevan .debfile untuk <package>untuk /some/cache/dir. Direktori akan berisi .debfile - file untuk paket, dependensinya, file kunci dan direktori 'parsial' (yang harus kosong). Memfilter .debfile yang Anda butuhkan sepele.

lauvdh
sumber
Sayangnya, apt-get installmembutuhkan akses pengguna super.
mikosz
0

apt-get downloadjuga memungkinkan Anda untuk mengatur target rilis. Tidakkah ini membantu?

apt-get download package/testing

Komentar ke # 1 (tidak dapat menggunakan komentar) - menambahkan parameter --print-uriske apt-get installtidak memerlukan hak root (tetapi Anda harus mengunduhnya sendiri - terbaik dengan wget -i FILE_LIST).

pevik
sumber
Mikolaj Radwan tampaknya mencari cara untuk mengambil versi tertentu yang mungkin menggunakan ekspresi untuk penggunaan skrip kemudian. Ini hanya akan memungkinkan pengunduhan paket saat ini.
Will.Beninger
0

Tanpa SU privs Anda masih dapat menjalankan apt-cache dan bergabung dengan filtering untuk mendapatkan info itu. Gunakan sesuatu seperti:

Pada Debian 5:

apt-cache show <pkg> | head | grep -i version 

Pada 6 Anda dapat menggunakan:

apt-cache show <pkg> | tail | grep -i version

Apt-cache tampaknya telah mengubah perilaku dalam urutan daftar antara 5 dan 6 sehingga pada 6 yang terbaru menjadi yang terakhir.

Satu kata peringatan adalah bahwa jika Anda menggunakan output ini ketika Anda mengatakan "untuk mengambil versi yang sama dengan yang akan diunduh menggunakan dependensi seperti itu", versi paket yang tersedia dapat berubah jika Anda menjalankan pembaruan apt-get (dengan su privs tentu saja), atau jika itu telah diatur untuk berjalan secara otomatis dan terjadi di antara ketika Anda mengumpulkan versi, dan ketika Anda menjalankan skrip yang menginstal hal-hal yang mengharapkan itu menjadi versi.

ilustrasi numerik
sumber