Có thể cài đặt .deb từ URL không?


74

Có cách nào để cài đặt gói gỡ lỗi trực tiếp từ URL, sử dụng shell không? Cái gì đó như

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

(Tôi biết rằng tôi có thể sử dụng wget và sau đó là dpkg. Tôi chỉ tự hỏi liệu đã có cái gì đó đã làm chưa)

Câu trả lời:


48

Chỉnh sửa: Tôi không thấy tuyên bố trước đây của bạn về việc biết bạn có thể quên nên điều này hơi khó xử ... Tôi sẽ để lại đây cho bất kỳ ai muốn biết cách làm điều này. Ngoài ra, phiên bản trước của câu trả lời của tôi không hoạt động nhưng phiên bản này (với chi phí dài hơn một chút) thì có:

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

Bạn chỉ cần thay đổi URL lúc đầu. Điều này có thể được đặt bí danh hoặc được viết dưới dạng hàm bash.

Tôi nhận thấy có các vấn đề kỹ thuật và bảo mật xung quanh vấn đề này (bạn không nhận được cập nhật tự động, nguồn có thể được tin cậy, v.v.), nhưng trên cơ sở hoàn toàn có thể, tôi có thể làm việc này.


3
Tôi cũng sẽ đề nghị sử dụng dpkg --skip-same-version -i $FILEnếu nó sẽ được chạy từ các tập lệnh. Thêm thông tin ở đây - manpages.debian.org/unurdy/dpkg/dpkg.1.en.html
Vadim Kotov

26

Không thể không tạo một tập tin tạm thời. Thông thường bạn sẽ làm điều này như thế

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

hoặc có thể

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

nhưng dpkg sử dụng mmap để truy cập tệp nên không hoạt động. Có một báo cáo lỗi về điều này: # 367297


4
Đây là một câu trả lời hữu ích, nhưng cách nó được cấu trúc làm cho nó có vẻ như câu trả lời là "có, đây là hai cách để làm điều đó".
bonh

1
Đã chỉnh sửa. Lưu ý rằng dpkg 1.17.7+ nhận các đối số stdin cho một số lệnh của nó nhưng không phải để cài đặt.
Tgr

HÀ HÀ! Tôi đã thử cả hai thứ này trước khi Googling. Cảm ơn vì đã tạo ra câu trả lời này để nói như những người có đầu óc, "bạn không điên."
Bruno Bronosky

9

Phương pháp nhanh nhất là như thế này. Nhấn vào đây để bắt đầu cài đặt màn trập .

URL được sử dụng để nhấp vào tên:

http://packages.ubuntu.com/shutter

... Và để nhấp vào biểu tượng:

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

Và có, bạn cần Trung tâm phần mềm Ubuntu để hoàn tất cài đặt .DEB. Nếu không, bạn sẽ phải thực hiện cài đặt từ Nautilus hoặc dòng lệnh.

Toàn bộ văn bản được sử dụng cho mục đích này chỉ dành cho Hỏi Ubuntu vì vậy bạn cần định dạng lại nội dung này thành một neo:

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

Thông tin thêm có thể được tìm thấy trên trang wiki apturl :

  1. 1 gói hàng:

    a href="apt:package"
    
  2. Gói một số gói:

    a href="apt:package1,package2,package3"
    
  3. Kích hoạt kho:

    apturl apt:freevial?section=universe
    

Vì vậy, nếu phần mềm không có trong kho lưu trữ được bật mặc định, bạn nên thêm 'phần =' vào phần mềm. Nếu không, bạn không thể sử dụng phương pháp này và cần người dùng tải xuống và tự cài đặt.


8
Xin lưu ý: AptUrl không hoạt động đối với phần mềm không có trên kho lưu trữ của người dùng
sergio91pt

1
Thật tuyệt, cảm ơn! Dù sao tôi đang tìm kiếm thứ gì đó sẽ hoạt động từ dòng lệnh, tôi đã chỉnh sửa câu hỏi. Đáng buồn là apturl mong đợi một X đang chạy: /
Joril

6

Bạn có thể thử với curl.

Để tải tệp xuống thư mục hiện tại và cài đặt từ tệp cục bộ:

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

hoặc tải xuống /var/cache/apt/archives/và cài đặt từ đó:

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
sử dụng curl nhận lỗi:--install needs at least one package archive file argument
itazzad

sử dụng dpkg nhận lỗi: dpkg-deb: error: / dev / fd / 63 'không phải là kho lưu trữ định dạng debian`
itazzad

sử dụng curl cuối cùng:dpkg: error processing archive puppetlabs-release-precise.deb (--install):
itazzad 27/05/2015

1
Đã cố gắng cài đặt wkhtmltopdf
itazzad

4
Xác nhận: tất cả các biến thể không hoạt động trong Debian Jessie với dpkg 1.17,27
Envek

3

Tôi thực sự có một kịch bản làm một cái gì đó tương tự:

Chỉ cần sao chép và dán tập lệnh này vào ~/bin(tạo thư mục này nếu nó không tồn tại):

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

Sau đó thêm nó vào dòng cuối cùng trong ~/.bashrc

PATH="~/bin:$PATH"

Kịch bản chỉ là một trình bao bọc cho dpkg. Dòng trong ~/.bashrctệp cho biết bashrằng bất cứ khi nào bạn nhập dpkg, nó sẽ chạy ~/bin/dpkg(tập lệnh), chứ không phải /usr/bin/dpkg.

Tập lệnh sẽ chuyển các đối số sang dpkgnếu không có URL nào được đưa ra. Kịch bản cũng hỗ trợ nhiều URL. Dưới đây là một số ví dụ sẽ hoạt động:

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

Xin vui lòng cho tôi biết nếu có bất kỳ vấn đề với kịch bản. Tôi không ở máy tính Ubuntu của mình, vì vậy tôi đã viết nó ra khỏi bộ nhớ của tôi.
Andrew Gunnerson

1
Thật là một kỷ niệm!
enzotib

@enzotib: haha! Với số lượng cài đặt lại tôi làm, bộ nhớ của tôi hữu ích hơn so với bản sao lưu của tôi :)
Andrew Gunnerson

2

lynxcó thể gọi dpkg(hoặc Trung tâm phần mềm, nếu có sẵn màn hình) và đề nghị cài đặt gói đã tải xuống cho bạn. Ví dụ: sử dụng:

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

Và tải xuống một trong các .debtệp, lời nhắc sau đây được hiển thị:

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: 

(Có lẽ tôi không nên cố gắng cài đặt các gói ngẫu nhiên trên internet.)


1

Tôi biết rằng đã được một lúc kể từ khi câu hỏi này được trả lời / đăng, nhưng đây là đóng góp khiêm tốn của tôi :

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

Cách cài đặt dpkg-gettừ Pastebin bằng một lệnh duy nhất:

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"

Cách sử dụng (ví dụ để cài đặt 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

Và đó là tất cả.

Tôi biết nó không hoàn hảo, nhưng nó đơn giản và nó hoạt động.

Hãy nhớ cẩn thận với những gì bạn cài đặt và từ nơi bạn tải xuống.


0

Điều này dựa trên câu trả lời SO đã làm việc với tôi trên Ubuntu 15.04 để xác định bản phát hành nguyên tử mới nhất trên github cho môi trường của tôi (Ubuntu 64 bit) và sau đó cài đặt nó:

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

Nếu bạn làm điều này trong một tmp dir, tệp deb sẽ được dọn sạch bất cứ khi nào bạn làm trống thư mục tmp của bạn. Nếu không, bạn có thể xóa gói deb theo cách thủ công nếu bạn cần dung lượng đĩa.


0

Bạn có thể nối nó vào /etc/bash.bashrcnhư sau (đây là bản nâng cấp từ tập lệnh của Chen):

'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
}

Mặc dù tôi không thấy lý do tại sao tôi gặp lỗi này khi gọi nó như sau:

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

Chỉ cần nghĩ rằng tôi sẽ đưa ra hai xu của riêng tôi về điều này. Bạn có thể cài đặt gói từ URL bằng lệnh sau:

wget insert_url_here

Khi nó đã được tải xuống, bạn cần chạy lệnh dpkg dưới dạng siêu người dùng: sudo dpkg -i insert_file_name_here

Sau đó, chỉ cần làm theo các hướng dẫn được trình bày trong thiết bị đầu cuối.


1
Tất nhiên, như đã nêu trong câu hỏi, giữa các dấu ngoặc đơn :)
Joril
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.