เป็นไปได้ไหมที่จะติดตั้ง. deb จาก URL


74

มีวิธีติดตั้งแพ็กเกจ deb โดยตรงจาก URL โดยใช้เชลล์หรือไม่? สิ่งที่ต้องการ

dpkg -i http://domain.com/path/to/package.deb

(ฉันรู้ว่าฉันสามารถใช้ wget แล้ว dpkg ฉันแค่สงสัยว่ามีบางอย่างที่ทำไปแล้ว)

คำตอบ:


48

แก้ไข: ฉันไม่เห็นคำแถลงก่อนหน้าของคุณเกี่ยวกับการรู้ว่าคุณทำได้อย่างนี้ค่อนข้างงุ่มง่าม ... ฉันจะออกจากที่นี่เพื่อใครก็ตามที่ต้องการทราบวิธีการทำสิ่งนี้ นอกจากนี้คำตอบของฉันรุ่นก่อนหน้าไม่ทำงาน แต่รุ่นนี้ (ที่ค่าใช้จ่ายของการค่อนข้างนาน) ไม่:

TEMP_DEB="$(mktemp)" &&
wget -O "$TEMP_DEB" 'http://path.to/my.deb' &&
sudo dpkg -i "$TEMP_DEB"
rm -f "$TEMP_DEB"

คุณเพียงแค่ต้องเปลี่ยน URL ที่จุดเริ่มต้น นี่อาจเป็นนามแฝงหรือเขียนเป็นฟังก์ชันทุบตี

ฉันรู้ว่ามีปัญหาด้านเทคนิคและความปลอดภัยรอบ ๆ นี้ (คุณไม่ได้รับการอัปเดตอัตโนมัติสามารถเชื่อถือแหล่งที่มาและอื่น ๆ ได้) แต่บนพื้นฐานที่ไม่สามารถทำได้ฉันก็ทำได้


3
ฉันก็จะแนะนำให้ใช้dpkg --skip-same-version -i $FILEถ้ามันจะถูกเรียกใช้จากสคริปต์ ข้อมูลเพิ่มเติมที่นี่ - manpages.debian.org/unstable/dpkg/dpkg.1.en.html
Vadim Kotov

26

มันเป็นไปไม่ได้โดยไม่ต้องสร้างแฟ้มชั่วคราว โดยปกติคุณจะทำเช่นนี้

### Does not work
wget --quiet --output-document=- http://example.com/path/to/package.deb | dpkg --install -

หรืออาจจะ

### Does not work
dpkg --install <(wget --quiet --output-document=- http://example.com/path/to/package.deb)

แต่ dpkg ใช้ mmap เพื่อเข้าถึงไฟล์ดังนั้นจึงไม่ทำงาน มีรายงานข้อผิดพลาดเกี่ยวกับสิ่งนี้: # 367297


4
นี่เป็นคำตอบที่มีประโยชน์ แต่วิธีการที่มีโครงสร้างทำให้ดูเหมือนว่าคำตอบคือ "ใช่นี่คือสองวิธีในการทำเช่นนั้น"
58

1
แก้ไข โปรดทราบว่า dpkg 1.17.7+ ใช้อาร์กิวเมนต์ stdin สำหรับคำสั่งบางคำสั่งแต่ไม่ใช่สำหรับการติดตั้ง
Tgr

ฮ่า! ฉันลองทั้งสองอย่างก่อน Googling ขอบคุณที่สร้างคำตอบนี้เพื่อบอกคนที่มีใจเดียวกันว่า "คุณไม่บ้า"
Bruno Bronosky

9

วิธีที่เร็วที่สุดเป็นเช่นนี้ คลิกเพื่อเริ่มการติดตั้งชัตเตอร์ .

URL ที่ใช้สำหรับการคลิกที่ชื่อ:

http://packages.ubuntu.com/shutter

... และสำหรับการคลิกที่ไอคอน:

http://apt.ubuntu.com/p/shutter

และใช่คุณต้องมี Ubuntu Software Center เพื่อทำการติดตั้ง. DEB ให้เสร็จสิ้น มิฉะนั้นคุณจะต้องทำการติดตั้งจาก Nautilus หรือบรรทัดคำสั่ง

ข้อความทั้งหมดที่ใช้ในการทำเช่นนี้มีไว้สำหรับถาม Ubuntu เท่านั้นดังนั้นคุณจำเป็นต้องฟอร์แมตสิ่งนี้เป็นจุดยึด:

[shutter](http://packages.ubuntu.com/shutter) [![Install shutter]
(https://i.stack.imgur.com/HjNGK.png)](http://apt.ubuntu.com/p/shutter)

ข้อมูลเพิ่มเติมสามารถพบได้ในหน้าapturl wiki :

  1. 1 แพคเกจ:

    a href="apt:package"
    
  2. การรวมหลายแพ็กเกจ:

    a href="apt:package1,package2,package3"
    
  3. การเปิดใช้งานที่เก็บ:

    apturl apt:freevial?section=universe
    

ดังนั้นหากซอฟต์แวร์ไม่ได้อยู่ในพื้นที่เก็บข้อมูลที่เปิดใช้งานเริ่มต้นคุณควรเพิ่ม 'section =' ลงในซอฟต์แวร์ มิฉะนั้นคุณไม่สามารถใช้วิธีนี้และต้องการให้ผู้ใช้ดาวน์โหลดและติดตั้งเอง


8
เพียงข้อสังเกต: AptUrlไม่สามารถใช้งานกับซอฟต์แวร์ที่ไม่ได้อยู่ในที่เก็บของผู้ใช้
sergio91pt

1
เยี่ยมมากขอบคุณ! อย่างไรก็ตามฉันกำลังมองหาบางสิ่งบางอย่างที่จะทำงานได้จากบรรทัดคำสั่งฉันแก้ไขคำถาม น่าเสียดายที่ apturl คาดว่าจะมีการรัน X: /
Joril

6

curlคุณอาจจะลองกับ

ในการดาวน์โหลดไฟล์ลงในโฟลเดอร์ปัจจุบันและติดตั้งจากไฟล์ในเครื่อง:

curl -sLO https://apt.puppetlabs.com/puppetlabs-release-precise.deb && sudo dpkg -i puppetlabs-release-precise.deb

หรือดาวน์โหลดลง/var/cache/apt/archives/และติดตั้งจากที่นั่น:

curl -sL -o/var/cache/apt/archives/puppetlabs-release-precise.deb https://apt.puppetlabs.com/puppetlabs-release-precise.deb && sudo dpkg -i /var/cache/apt/archives/puppetlabs-release-precise.deb

1
ใช้ข้อผิดพลาดในการรับ curl:--install needs at least one package archive file argument
itsazzad

ใช้ dpkg ได้รับข้อผิดพลาด: dpkg-deb: error: / dev / fd / 63 'ไม่ใช่ไฟล์เก็บถาวรรูปแบบเดเบียน `
itsazzad

ใช้ curl ล่าสุด:dpkg: error processing archive puppetlabs-release-precise.deb (--install):
itsazzad

1
กำลังพยายามติดตั้ง wkhtmltopdf
itsazzad

4
การยืนยัน: ตัวแปรทั้งหมดไม่สามารถใช้งานได้ใน Debian Jessie ด้วย dpkg 1.17.27
Envek

3

จริงๆแล้วฉันมีสคริปต์ที่ทำสิ่งที่คล้ายกัน:

เพียงคัดลอกและวางสคริปต์นี้ลงใน~/bin(สร้างโฟลเดอร์นี้หากไม่มี):

#!/bin/bash
# ~/bin/dpkg
COUNT=0
for i in $@; do
        echo $i | grep http 2>&1 > /dev/null
        if [ $? == 0 ]; then
                URL="$URL $i"
                continue
        fi
        PASSTODPKG="$PASSTODPKG $i"
done

#Remove beginning and trailing space
URL=$(echo $URL | sed -e 's/^ //g' -e 's/ $//g')

if [ ! -z $URL ]; then
        mkdir /tmp/debs
        cd /tmp/debs
        for i in $URL; do
                wget "$i"
        done
        dpkg $PASSTODPKG /tmp/debs/*.deb
else
        dpkg $PASSTODPKG
fi

จากนั้นเพิ่มสิ่งนี้ในบรรทัดสุดท้ายใน ~/.bashrc

PATH="~/bin:$PATH"

dpkgสคริปต์ที่เป็นเพียงเสื้อคลุมสำหรับ บรรทัดใน~/.bashrcไฟล์บอกbashว่าเมื่อใดก็ตามที่คุณพิมพ์dpkgจะทำงาน~/bin/dpkg(สคริปต์) /usr/bin/dpkgมากกว่า

สคริปต์จะส่งต่ออาร์กิวเมนต์ไปที่dpkgหากไม่มี URL ที่ระบุ สคริปต์ยังสนับสนุน URL หลายรายการ นี่คือตัวอย่างบางส่วนที่จะใช้งานได้:

sudo dpkg -i http://www.example.com/file1.deb
sudo dpkg -i http://www.example.com/file1.deb http://www.example.com/file2.deb
sudo dpkg -i http://www.example.com/file1.deb existing.deb http://www.example.com/file2.deb
sudo dpkg -i existing.deb

โปรดแจ้งให้เราทราบหากมีปัญหาใด ๆ กับสคริปต์ ฉันไม่ได้อยู่ที่คอมพิวเตอร์ Ubuntu ฉันเลยเขียนมันออกจากความทรงจำของฉัน
Andrew Gunnerson

1
ความทรงจำอะไรกัน!
enzotib

@enzotib: ฮ่าฮ่า! ด้วยปริมาณของ reinstalls ฉันทำหน่วยความจำของฉันจะเป็นประโยชน์มากกว่าการสำรองข้อมูลของฉัน :)
แอนดรู Gunnerson

2

lynxสามารถโทรdpkg(หรือศูนย์ซอฟต์แวร์หากมีจอแสดงผล) และเสนอให้ติดตั้งแพ็คเกจที่ดาวน์โหลดมาให้คุณ ตัวอย่างเช่นการใช้:

lynx http://archive.ubuntu.com/ubuntu/pool/main/z/zsh/

และดาวน์โหลดไฟล์ใด.debไฟล์หนึ่งพรอมต์ต่อไปนี้จะปรากฏขึ้น:

Info for debian package '/tmp/user/1000/L11127-6774TMP.udeb':
 new debian package, version 2.0.
 size 2545218 bytes: control archive=5830 bytes.
     857 bytes,    21 lines      control              
   14682 bytes,   169 lines      md5sums              
     225 bytes,    20 lines   *  postinst             #!/bin/sh
 Package: zsh-doc
 Source: zsh
 Version: 5.1.1-1ubuntu1
 Architecture: all
 Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
 Installed-Size: 5291
 Depends: zsh-common (= 5.1.1-1ubuntu1)
 Section: doc
 Priority: optional
 Homepage: http://www.zsh.org/
 Description: zsh documentation - info/HTML format
  Zsh is a UNIX command interpreter (shell) usable as an
  interactive login shell and as a shell script command
  processor. Of the standard shells, zsh most closely resembles
  ksh but includes many enhancements. Zsh has command-line editing,
  built-in spelling correction, programmable command completion,
  shell functions (with autoloading), a history mechanism, and a
  host of other features.
  .
  This contains the documentation in GNU info and HTML formats.
 Original-Maintainer: Debian Zsh Maintainers <pkg-zsh-devel@lists.alioth.debian.org>

Do you wish to:
 - I)nstall the package now,
 - S)ave it to a file, or
 - Q)uit now
Your choice (I/S/Q)? I
Installation of Debian packages needs to be done as root.
Enter command used to become root (default=sudo): 

Installing package...
[sudo] password for bro3886: 
(Reading database ... 756955 files and directories currently installed.)
Preparing to unpack .../user/1000/L11127-6774TMP.udeb ...
Unpacking zsh-doc (5.1.1-1ubuntu1) over (5.0.5-4ubuntu1~ubuntu14.04.1) ...
dpkg: dependency problems prevent configuration of zsh-doc:
 zsh-doc depends on zsh-common (= 5.1.1-1ubuntu1); however:
  Version of zsh-common on system is 5.0.5-4ubuntu1~ubuntu14.04.1.

dpkg: error processing package zsh-doc (--install):
 dependency problems - leaving unconfigured
Processing triggers for doc-base (0.10.5) ...
Processing 1 changed doc-base file...
Processing triggers for install-info (5.2.0.dfsg.1-2) ...
Errors were encountered while processing:
 zsh-doc

Done.  Press <return> to continue: 

(บางทีฉันไม่ควรลองติดตั้งแพ็คเกจสุ่มออกจากอินเทอร์เน็ต)


1

ฉันรู้ว่าไม่นานมานี้เนื่องจากคำถามนี้ได้รับการตอบ / โพสต์ แต่นี่คือผลงานที่ต่ำต้อยของฉัน :

#!/bin/bash
dir="/tmp/dpkg-get"
url="$1"
file="${url##*/}"

if [ "$EUID" -ne 0 ]
then
echo "Please run as root"
exit
fi

[ -d $dir ] || mkdir $dir
wget -q --show-progress -O "$dir/$file" $url && \
dpkg -i "$dir/$file"

วิธีการติดตั้งdpkg-getจาก Pastebin ด้วยคำสั่งเดียว:

sudo bash -c "wget http://pastebin.com/raw/GWu7qLwK -O- | tr -d '\r' > /usr/local/bin/dpkg-get && \
chmod a+x /usr/local/bin/dpkg-get"

วิธีใช้งาน (ตัวอย่างเช่นการติดตั้ง PowerShell 6 alpha):

sudo dpkg-get https://github.com/PowerShell/PowerShell/releases/download/v6.0.0-alpha.10/powershell_6.0.0-alpha.10-1ubuntu1.16.04.1_amd64.deb

และนั่นคือทั้งหมดที่

ฉันรู้ว่ามันไม่สมบูรณ์แบบ แต่มันง่ายและใช้งานได้

อย่าลืมระวังสิ่งที่คุณติดตั้งและจากที่คุณดาวน์โหลด


0

หนึ่งซับจากคำตอบ SO ใช้งานได้กับฉันใน Ubuntu 15.04 เพื่อระบุการปล่อยอะตอมล่าสุดบน github สำหรับสภาพแวดล้อมของฉัน (Ubuntu แบบ 64 บิต) แล้วติดตั้ง:

sudo dpkg -i $(curl -w "%{filename_effective}" -LO $(curl -s https://api.github.com/repos/atom/atom/releases | grep browser_download_url | grep '64[.]deb' | head -n 1 | cut -d '"' -f 4))

หากคุณทำสิ่งนี้ใน tmp dir ไฟล์ deb จะถูกล้างข้อมูลทุกครั้งที่คุณล้างโฟลเดอร์ tmp ของคุณ มิฉะนั้นคุณสามารถลบแพ็คเกจ deb ด้วยตนเองหากคุณต้องการพื้นที่ดิสก์


0

คุณสามารถผนวกเข้า/etc/bash.bashrcกับสิ่งต่อไปนี้ (เป็นการอัปเกรดจากสคริปต์ของเฉิน):

'dpkg-url'() {

COUNT=0

for package in "${urls[@]}"; do
    if [[ $package = *http* ]]; then 
    urls+=("$package")
    fi

    dpkg_url="$dpkg_url "$package""
done

# Remove beginning and trailing spaces #

url=$(echo "$url" | sed -e 's/^ //g' -e 's/ $//g')

if [[ ! -z "$url" ]]; then
    directory=$(mktemp -d);
        trap 'rm -rf "$directory"' EXIT

    cd "$directory" || exit
        for package in "$url"; do
            wget ""$package""
        done
    dpkg $dpkg_url "$directory"/*.deb
else
    dpkg $dpkg_url
fi
}

แม้ว่าฉันจะไม่เห็นว่าทำไมฉันได้รับข้อผิดพลาดนี้เมื่อเรียกมันตาม:

dpkg-url -i http://downloads.sourceforge.net/ldview/ldview-4.2-beta1.x64.deb
dpkg: error: need an action option

Type dpkg --help for help about installing and deinstalling packages [*];
Use `dselect' or `aptitude' for user-friendly package management;
Type dpkg -Dhelp for a list of dpkg debug flag values;
Type dpkg --force-help for a list of forcing options;
Type dpkg-deb --help for help about manipulating *.deb files;

Options marked [*] produce a lot of output - pipe it through `less' or `more' !

0

แค่คิดว่าฉันจะให้สองเซ็นต์ของตัวเองเกี่ยวกับเรื่องนี้ คุณสามารถติดตั้งแพ็คเกจจาก URL โดยใช้คำสั่งต่อไปนี้:

wget insert_url_here

เมื่อดาวน์โหลดเสร็จแล้วคุณต้องเรียกใช้คำสั่ง dpkg เป็น superuser: sudo dpkg -i insert_file_name_here

จากนั้นเพียงทำตามคำแนะนำที่ได้รับการนำเสนอใน terminal


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