apt-get download พร้อมข้อ จำกัด เวอร์ชั่น


18

ฉันต้องใช้apt-get downloadเพื่อดึง.debไฟล์เวอร์ชันที่ระบุแต่ไม่จำเป็นต้องเป็นเวอร์ชันที่แน่นอน .debการอ้างอิงได้รับอนุญาตให้ใช้นิพจน์เช่น>=0.3.0และฉันต้องการapt-get downloadดึงข้อมูลเวอร์ชันเดียวกับเวอร์ชันที่จะดาวน์โหลดโดยใช้การอ้างอิงดังกล่าว

สรุปแล้วสิ่งที่ฉันต้องการทำงานคือ:

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

มีความคิดใดที่ฉันจะใช้ฟังก์ชันนี้ได้?


ทำไมคุณไม่ดาวน์โหลดแพ็คเกจจากpackages.ubuntu.comด้วยตนเองล่ะ?
terdon

เพราะฉันต้องแน่ใจว่าแพ็กเกจที่ดาวน์โหลดมาเป็นแพ็คเกจเดียวกันที่จะถูกดาวน์โหลดเมื่อมีการใช้งาน "apt-get install" ฉันกำลังรวมสิ่งนี้ไว้ในสคริปต์ส่วนขยายของ cmake
mikosz

คำตอบ:


2

คุณสามารถทำได้โดยการค้นหาว่ารุ่นใดเป็นรุ่นใหม่ล่าสุดที่มากกว่าหรือเท่ากับรุ่นขั้นต่ำที่คุณต้องการ apt-get downloadจากนั้นคุณดาวน์โหลดตรงที่รุ่นใช้ นี่เป็นสคริปต์ที่ทำสิ่งนี้ (มันน่าเกลียดนิดหน่อย แต่คุณเข้าใจ):

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

คุณต้องเพิ่มการตรวจสอบข้อผิดพลาดในกรณีที่ไม่มีแพ็คเกจ ฯลฯ แต่สิ่งนี้มีวิธีแก้ไขปัญหาหลัก นอกจากนี้ฉันคิดว่าที่นี่ที่คุณต้องการแพคเกจใหม่ล่าสุดที่มีอย่างน้อยรุ่นที่แน่นอน หากคุณต้องการให้แพคเกจที่เก่าแก่ที่สุดที่มีรุ่นอย่างน้อยคุณต้องปรับสคริปต์เพื่อหยุดการค้นหาเมื่อพบสิ่งที่อย่างน้อยรุ่นที่คุณต้องการ


0

เนื่องจากคุณต้องการสิ่งที่apt-get installจะให้คุณอย่างแน่นอนมันอาจคุ้มค่าที่จะเรียกใช้apt-get installใน 'โหมดดาวน์โหลดอย่างเดียว' โดยใช้ไดเรกทอรีเก็บถาวรที่กำหนดเอง:

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

วิธีการเปลี่ยนไดเรกทอรีเก็บถาวร? นี่คือตัวเลือกการกำหนดค่า:

FILES
  [...]

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

สิ่งเหล่านี้สามารถเปลี่ยนแปลงได้ชั่วคราวด้วย--optionพารามิเตอร์:

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

เพื่อสรุป:

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

คำสั่งนี้จะดาวน์โหลด (และดาวน์โหลดได้ติดตั้ง) ที่เกี่ยวข้อง.debไฟล์สำหรับการที่จะ<package> /some/cache/dirไดเรกทอรีจะมี.debไฟล์สำหรับแพ็คเกจการขึ้นต่อกันของไฟล์ล็อคและไดเรกทอรี 'บางส่วน' (ซึ่งควรจะว่างเปล่า) การกรอง.debไฟล์ที่แน่นอนที่คุณต้องการควรมีความสำคัญ


น่าเสียดาย, apt-get installต้องมีการเข้าถึง superuser
mikosz

0

apt-get downloadยังช่วยให้คุณตั้งค่าการเปิดตัวเป้าหมาย มันจะช่วยไม่ได้?

apt-get download package/testing

ความคิดเห็นที่# 1 (ไม่สามารถใช้ความคิดเห็น) - การเพิ่มพารามิเตอร์--print-urisเพื่อapt-get installไม่จำเป็นต้องมีสิทธิ์รูท (แต่คุณต้องดาวน์โหลดด้วยตัวเอง - ดีที่สุดกับ wget -i FILE_LIST)


Mikolaj Radwan ดูเหมือนว่ากำลังมองหาวิธีที่จะดึงข้อมูลบางเวอร์ชันที่อาจใช้นิพจน์สำหรับการใช้งานสคริปต์ในภายหลัง นี่จะอนุญาตให้ดาวน์โหลดแพ็คเกจปัจจุบัน
Will.Beninger

0

หากไม่มี SU privs คุณยังสามารถเรียกใช้ apt-cache และรวมกับตัวกรองเพื่อรับข้อมูลนั้นได้ ใช้สิ่งที่ชอบ:

บนเดเบียน 5:

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

ในวันที่ 6 คุณสามารถใช้:

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

Apt-cache ดูเหมือนว่าจะมีการเปลี่ยนแปลงพฤติกรรมในการเรียงลำดับรายการระหว่าง 5 และ 6 ดังนั้นในวันที่ 6 ล่าสุดจะมีการเปลี่ยนแปลงล่าสุด

คำเตือนอย่างหนึ่งคือถ้าคุณใช้เอาต์พุตนี้ตามที่คุณพูดว่า "เพื่อดึงเวอร์ชั่นเดียวกันกับเวอร์ชั่นที่จะดาวน์โหลดโดยใช้การอ้างอิงดังกล่าว" รุ่นของแพ็คเกจที่มีให้อาจเปลี่ยนไปถ้าคุณเรียกใช้ apt-get update (ด้วย แน่นอนว่า sues) หรือถ้ามีการตั้งค่าให้ทำงานโดยอัตโนมัติและเกิดขึ้นในระหว่างที่คุณรวบรวมรุ่นและเมื่อคุณเรียกใช้สคริปต์ที่ติดตั้งสิ่งต่าง ๆ ที่คาดหวังว่าจะเป็นรุ่น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.