Действительно ли возможно установить .deb от URL?

Существует ли способ установить deb пакет непосредственно от URL, с помощью оболочки? Что-то как

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

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

75
задан 6 July 2011 в 02:11

12 ответов

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

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

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

Я понимаю, что существуют технические вопросы и проблемы безопасности, окружающие это (Вы не получаете автоматические обновления, может источник доверяться, и т.д.), но на просто can-I-do-it основание, это могло бы работать.

48
ответ дан 15 November 2019 в 23:56

Самый быстрый метод похож на это. Нажмите, чтобы начать устанавливать затвор .

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

http://packages.ubuntu.com/shutter

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

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

И да Вам нужен Центр программного обеспечения Ubuntu для окончания установки.DEB. Иначе необходимо будет выполнить установку от Наутилуса или командной строки.

Полный текст, используемый для этого, для, Спрашивает 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
    

Таким образом, если программное обеспечение не находится во включенном репозитории значения по умолчанию, необходимо добавить 'раздел =' к нему. Иначе Вы не можете использовать этот метод и нуждаться в пользователе, чтобы загрузить его и установить себя.

9
ответ дан 15 November 2019 в 23:56

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

Просто скопируйте и вставьте этот сценарий в ~/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
3
ответ дан 15 November 2019 в 23:56

Это не возможно, не создавая временный файл. Обычно Вы сделали бы это как

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

27
ответ дан 15 November 2019 в 23:56

Можно добавить его к /etc/bash.bashrc поскольку это следует (это - обновление из сценария 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
}

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

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
ответ дан 15 November 2019 в 23:56

Можно попробовать 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
7
ответ дан 15 November 2019 в 23:56

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

0
ответ дан 15 November 2019 в 23:56

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: 

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

2
ответ дан 15 November 2019 в 23:56

Я знаю, что это было некоторое время, так как этот вопрос был отвечен/отправлен, но здесь является моим скромным вкладом:

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

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

И это - все.

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

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

1
ответ дан 15 November 2019 в 23:56

Просто мысль я дал бы свои собственные два цента на этом. Можно установить пакет от URL с помощью следующей команды:

wget insert_url_here

После того как это было загружено, необходимо выполнить команду dpkg как суперпользователь: sudo dpkg -i insert_file_name_here

Затем просто следуйте инструкциям, которые представлены в терминале.

0
ответ дан 15 November 2019 в 23:56

Я только что завернул ответ Оли в функцию bash, которую можно добавить в ваш файл .rc:

function dpkg_r() {
  local tmp_deb="$(mktemp)"
  local src_url=$1
  local args=${@:2}

  wget -O $tmp_deb $src_url &&
  sudo dpkg -i $tmp_deb $args &&
  { rm -f $tmp_deb; true; } || # commands above succeeded, remove tmp file
  { rm -f $tmp_deb; false; }   # commands above failed, remove tmp file anyway
}

Назовите его как хотите. Я назвал его как dpkg_r, где r означает удаленный здесь

0
ответ дан 14 February 2020 в 20:14

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

ansible -m apt -a deb=http://domain.com/path/to/package.deb localhost
5
ответ дан 5 September 2020 в 23:09

Другие вопросы по тегам:

Похожие вопросы: