Можно ли установить файл .deb с URL-адреса?

Есть ли способ установить пакет deb непосредственно с URL-адреса, использование оболочки?Что-то вроде

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

(Я знаю, что мог бы использовать wget, а затем dpkg, мне просто интересно, есть ли что-то, что уже делает это)

Редактировать: Я не видел вашего предыдущего заявления о том, что вы знаете, что можете wget, так что это немного неловко... Я оставлю это здесь для всех, кто хочет знать, как это сделать. Кроме того, предыдущая версия моего ответа не работала, но эта версия (за счет того, что она несколько длиннее) работает:

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

Вам просто нужно изменить URL-адрес в начале. Это может быть псевдоним или записано как функция bash.

Я понимаю, что с этим связаны технические проблемы и проблемы безопасности (вы не получаете автоматических обновлений, можно ли доверять источнику и т.д.), Но на основе чисто "могу ли я это сделать" это может сработать.

Это это невозможно без создания временного файла. Обычно вы бы сделали это следующим образом

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

или, может быть

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

но dpkg использует mmap для доступа к файлу, так что ни то, ни другое не работает. Существует сообщение об ошибке по этому поводу: #367297

Самый быстрый способ выглядит следующим образом. Нажмите, чтобы начать установку затвор .

URL-адреса, используемые для нажатия на название:

http://packages.ubuntu.com/shutter

... и для щелчка по значку:

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

И да, вам нужен Ubuntu Software Center, чтобы завершить установку файла .DEB. В противном случае вам придется выполнить установку из Nautilus или командной строки.

Полный текст, используемый для этого, предназначен только для Ask Ubuntu, поэтому вам нужно переформатировать его в якорь:

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

Более подробную информацию можно найти на сайте вики-страница apturl:

  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

Если у вас есть (или установлен) Ansible:

ansible -m apt -a deb=http://domain.com/path/to/package.deb localhost

На самом деле у меня есть скрипт, который делает что-то подобное:

Просто скопируйте и вставьте этот скрипт в ~/bin (создайте эту папку, если она не существует):

#!/bin/bash# ~/bin/dpkgCOUNT=0for 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 spaceURL=$(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/*.debelse        dpkg $PASSTODPKGfi

Затем добавьте это в последнюю строку в ~/.bashrc

PATH="~/bin:$PATH"

Сценарий - это просто оболочка для dpkg. Строка в ~/.bashrc файл сообщает bash что всякий раз, когда вы печатаете dpkg, он будет работать ~/bin/dpkg (сценарий), а не /usr/bin/dpkg.

Сценарий просто передаст аргументы в dpkg если URL-адрес не указан. Скрипт также поддерживает несколько URL-адресов. Вот несколько примеров, которые будут работать:

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

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 nowYour choice (I/S/Q)? IInstallation 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 unconfiguredProcessing 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-docDone.  Press <return> to continue: 

(Возможно, мне не следует пытаться устанавливать случайные пакеты из Интернета.)

Этот однострочный текст, основанный на ответ SO работал для меня в Ubuntu 15.04, чтобы определить последнюю атом опубликуйте на github для моей среды (64-разрядная Ubuntu), а затем установите ее:

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, файл deb будет очищаться всякий раз, когда вы очищаете свою папку tmp. В противном случае вы можете вручную удалить пакет deb, если вам нужно место на диске.

Я знаю, что прошло много времени с тех пор, как на этот вопрос был дан ответ / опубликован, но вот мой скромный вклад:

#!/bin/bashdir="/tmp/dpkg-get"url="$1"file="${url##*/}"if [ "$EUID" -ne 0 ]thenecho "Please run as root"exitfi[ -d $dir ] || mkdir $dirwget -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

И это все.

Я знаю, что это не идеально, но это просто и работает.

Помните, что нужно быть осторожным с тем, что вы устанавливаете и откуда вы его загружаете.

Вы можете добавить его к /etc/bash.bashrc как следует (это обновление по сравнению со сценарием Чена):

'dpkg-url'() {COUNT=0for 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"/*.debelse    dpkg $dpkg_urlfi}

Хотя я не понимаю, почему я получаю эту ошибку при вызове ее следующим образом:

dpkg-url -i http://downloads.sourceforge.net/ldview/ldview-4.2-beta1.x64.debdpkg: error: need an action optionType 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' !

Ansible apt play - очень хорошее решение.