当前位置: 首页>>技术问答>>正文


是否可以从URL安装.deb?

, , ,

问题描述

有没有办法直接从URL安装deb包,使用shell?就像是

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

(我知道我可以使用wget然后使用dpkg,我只是想知道是否已经有了它的功能)

最佳解决思路

编辑:我没有看到你之前的声明,因为我知道你可以这么做,所以这有点尴尬……我会留在这里给任何想知道怎么做的人。此外,我的答案的先前版本不起作用,但此版本(以更长的时间为代价)确实:

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

您只需要在开头更改URL。这可能是别名或写为bash函数。

我意识到存在技术和安全问题(你没有得到自动更新,可以信任来源等),但在纯粹的can-I-do-it基础上,这可能有效。

次佳解决思路

没有创建临时文件是不可能的。通常你会这样做

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

第三种解决思路

最快的方法是这样的。单击开始安装shutter

apt,package-management,dpkg,ubuntu

用于单击名称的URL:

http://packages.ubuntu.com/shutter

…并点击图标:

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

是的,您需要Ubuntu软件中心来完成.DEB的安装。否则,您必须从Nautilus或命令行执行安装。

用于此的完整文本仅适用于Ask Ubuntu,因此您需要将其重新格式化为锚点:

[shutter](http://packages.ubuntu.com/shutter) [![Install shutter]
(https://hostmar.co/software-small)](http://apt.ubuntu.com/p/shutter)

更多信息可以在apturl wiki page上找到:

  1. 1包装:

    a href="apt:package"
    
  2. 捆绑几个包:

    a href="apt:package1,package2,package3"
    
  3. 启用存储库:

    apturl apt:freevial?section=universe
    

因此,如果软件不在默认启用的存储库中,则应向其添加’section=’。否则,您无法使用此方法,需要用户下载并自行安装。

第四种思路

您可以尝试使用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

第五种思路

我实际上有一个类似的脚本:

只需将此脚本复制并粘贴到~/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

如果没有给出URL,脚本只会将参数传递给dpkg。该脚本还支持多个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问答整理, 博文地址: https://ubuntuqa.com/article/1226.html,未经允许,请勿转载。