问题描述
有没有办法直接从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。
用于单击名称的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包装:
a href="apt:package"
-
捆绑几个包:
a href="apt:package1,package2,package3"
-
启用存储库:
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