tải xuống apt-get với ràng buộc phiên bản


18

Tôi cần sử dụng apt-get downloadđể tìm nạp một phiên bản cụ thể của một .debtệp, nhưng không nhất thiết phải là phiên bản chính xác. .debcác phụ thuộc được phép sử dụng các biểu thức như >=0.3.0và tôi muốn apt-get downloadtìm nạp cùng một phiên bản với phiên bản sẽ được tải xuống bằng cách sử dụng các phụ thuộc đó.

Tóm tắt lại, điều tôi muốn làm là đây:

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

Bất cứ ý tưởng làm thế nào tôi có thể có được chức năng đó?


Tại sao bạn không tải xuống gói thủ công từ gói.ubfox.com ?
terdon

Bởi vì tôi cần chắc chắn rằng gói được tải xuống là cùng một gói chính xác sẽ được tải xuống khi "apt-get install" được thực thi. Tôi đang kết hợp điều này trong một kịch bản mở rộng cmake.
mikosz

Câu trả lời:


2

Bạn có thể làm điều này bằng cách trước tiên tìm ra phiên bản nào là phiên bản mới nhất cũng lớn hơn hoặc bằng phiên bản tối thiểu mong muốn của bạn. Sau đó, bạn tải xuống chính xác phiên bản đó bằng cách sử dụng apt-get download. Đây là một kịch bản thực hiện điều này (nó hơi xấu, nhưng bạn hiểu ý):

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

Bạn sẽ phải thêm kiểm tra lỗi trong trường hợp gói không tồn tại, v.v. nhưng điều này chứa giải pháp cốt lõi. Ngoài ra, tôi đã giả định ở đây rằng bạn muốn gói có sẵn mới nhất ít nhất là một phiên bản nhất định. Thay vào đó, nếu bạn muốn gói có sẵn cũ nhất ít nhất là một phiên bản nhất định, bạn phải điều chỉnh tập lệnh để ngừng tìm kiếm một khi nó tìm thấy thứ gì đó ít nhất là phiên bản bạn muốn.


0

Vì bạn muốn chính xác những gì apt-get installsẽ cung cấp cho bạn, có thể đáng để chạy apt-get installtrong 'chế độ chỉ tải xuống' bằng thư mục lưu trữ tùy chỉnh:

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

Làm thế nào để thay đổi thư mục lưu trữ? Đây là một tùy chọn cấu hình:

FILES
  [...]

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

Chúng có thể được thay đổi tạm thời với --optiontham số:

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

Để tóm tắt:

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

Lệnh này sẽ tải về (và chỉ tải về, không cài đặt) có liên quan .debfile cho <package>tới /some/cache/dir. Thư mục sẽ chứa các .debtệp cho gói, phần phụ thuộc của nó, tệp khóa và thư mục 'một phần' (sẽ trống). Lọc ra các .debtập tin chính xác bạn cần phải tầm thường.


Thật không may, apt-get installyêu cầu truy cập siêu người dùng.
mikosz

0

apt-get downloadcũng cho phép bạn thiết lập mục tiêu phát hành. Nó có giúp được không?

apt-get download package/testing

Nhận xét về # 1 (không thể sử dụng nhận xét) - thêm tham số --print-urisđể apt-get installkhông yêu cầu quyền root (nhưng bạn phải tải xuống chính nó - tốt nhất với wget -i FILE_LIST).


Mikolaj Radwan dường như đang tìm cách tìm nạp các phiên bản cụ thể có thể sử dụng các biểu thức để sử dụng tập lệnh sau này. Điều này sẽ chỉ cho phép tải xuống gói hiện tại.
Will.Beninger

0

Nếu không có SU riêng tư, bạn vẫn có thể chạy apt-cache và kết hợp với lọc để có được thông tin đó. Sử dụng một cái gì đó như:

Trên Debian 5:

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

Trên 6 bạn có thể sử dụng:

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

Apt-cache dường như đã thay đổi hành vi theo thứ tự của danh sách từ 5 đến 6 để trên 6 cái mới nhất xuất hiện sau cùng.

Một lưu ý là nếu bạn đang sử dụng đầu ra này như bạn nói "để tìm nạp phiên bản giống với phiên bản sẽ được tải xuống bằng cách sử dụng phụ thuộc đó", phiên bản của gói có thể thay đổi nếu bạn chạy cập nhật apt-get (với tất nhiên là có quyền riêng tư) hoặc nếu điều đó đã được thiết lập để tự động chạy và xảy ra ở giữa khi bạn tập hợp phiên bản và khi bạn chạy tập lệnh cài đặt những thứ mong đợi đó là phiên bản.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.