sürüm kısıtlaması ile apt-get indir


18

apt-get downloadBir .debdosyanın belirli bir sürümünü getirmek için kullanmam gerekiyor , ancak tam olarak tam sürümü değil. .debbağımlılıkları gibi ifadeleri kullanmak için izin verilir >=0.3.0ve ben apt-get downloadböyle bir bağımlılık kullanılarak indirilecek sürümü aynı getirmek istiyorum .

Özetle, çalışmak istediğim şudur:

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

Bu işlevselliği nasıl alabileceğime dair bir fikrin var mı?


Neden paketi el ile paketlerden indirmiyorsunuz ?
terdon

Çünkü indirilen paketin "apt-get install" yürütüldüğünde indirilecek paketle aynı olduğundan emin olmalıyım. Bunu bir cmake uzantısı komut dosyasına dahil ediyorum.
mikosz

Yanıtlar:


2

İlk olarak hangi sürümün istediğiniz minimum sürümden daha büyük veya ona eşit olan en yeni sürüm olduğunu bularak yapabilirsiniz. Ardından, tam olarak bu sürümü kullanarak indirin apt-get download. İşte bunu yapan bir komut dosyası (biraz çirkin, ama fikri anladınız):

#!/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"

Paketin bulunmaması durumunda hata kontrolü eklemeniz gerekir, ancak bu temel çözümü içerir. Ayrıca, burada en azından belirli bir sürüm olan en yeni paketi istediğinizi varsaydım. Bunun yerine, en azından belirli bir sürüm olan en eski paketi istiyorsanız, en azından istediğiniz sürüm olan bir şey bulduğunda, komut dosyasını aramayı durduracak şekilde ayarlamanız gerekir.


0

Size tam olarak ne apt-get installvereceğinizi istediğiniz için, apt-get installözel bir arşiv dizini kullanarak 'salt indirme modunda' çalışmak faydalı olabilir :

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

Arşiv dizini nasıl değiştirilir? Bu bir yapılandırma seçeneğidir:

FILES
  [...]

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

Bunlar geçici olarak şu --optionparametre ile değiştirilebilir :

-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.

Özetlemek:

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

Bu komut indirmek (ve sadece indirebilir değil yüklemek) İlgili olacak .debdosyaları <package>için /some/cache/dir. Dizin .deb, pakete ilişkin dosyaları, bağımlılıklarını, bir kilit dosyasını ve 'kısmi' dizini (boş olmalıdır) içerecektir. Tam olarak .debihtiyacınız olan dosyayı filtrelemek önemsiz olmalıdır.


Ne yazık ki, apt-get installsüper kullanıcı erişimi gerektirir.
mikosz

0

apt-get downloadayrıca hedef sürümü ayarlamanızı sağlar. Yardımcı olmaz mı?

apt-get download package/testing

Yükleme Yorum 1. (yorumlarınızı kullanamazsınız) - parametre ekleyerek --print-urisiçin apt-get installkök haklarını gerektirmez (- iyi wget -i FILE_LIST ile ancak bunu kendisini indirmek zorunda).


Mikolaj Radwan, muhtemelen daha sonraki komut dosyası kullanımı için ifadeler kullanarak belirli sürümleri getirmenin bir yolunu arıyor gibi görünüyor. Bu sadece mevcut paketin indirilmesine izin verecektir.
Will.Beninger

0

SU priv'leri olmadan yine de apt-cache çalıştırabilir ve bu bilgileri almak için filtreleme ile birleştirebilirsiniz. Şunun gibi bir şey kullanın:

Debian 5'te:

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

6'da şunları kullanabilirsiniz:

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

Apt-cache listenin sıralamasındaki davranışı 5 ile 6 arasında değiştirmiş gibi görünüyor, böylece 6'da en yenisi en sonuncusu geliyor.

Dikkat edilmesi gereken bir nokta, "bu bağımlılık kullanılarak indirilecek sürümle aynı sürümü getirmek için" dediğiniz gibi bu çıktıyı kullanıyorsanız, apt-get güncellemesini ( su privs) veya otomatik olarak çalışacak şekilde ayarlandıysa ve sürümü topladığınızda ve sürüm olmasını bekleyen şeyleri yükleyen komut dosyasını çalıştırdığınızda gerçekleşirse.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.