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

58

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

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

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

    
задан Joril 05.07.2011 в 12:28
источник

9 ответов

37

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

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 это может работать.     

ответ дан Oli 05.07.2011 в 13:48
источник
15

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

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

    
ответ дан Tgr 31.07.2012 в 15:43
источник
9

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

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://hostmar.co/software-small)](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
    

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

    
ответ дан Rinzwind 05.07.2011 в 12:41
источник
2

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

Просто скопируйте и вставьте этот скрипт в ~/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
    
ответ дан Andrew Gunnerson 05.07.2011 в 23:40
источник
2

dpkg & gt; = 1,17.7

Вы можете попробовать с помощью curl, например:

curl -o- https://apt.puppetlabs.com/puppetlabs-release-precise.deb | dpkg --install 

или больше bash:

dpkg --install - <(curl -o- https://apt.puppetlabs.com/puppetlabs-release-precise.deb)

Или же с wget, поэтому замените curl -o- на: wget -q -O- или с помощью lynx: lynx --dump .

dpkg & lt; 1.17.7

curl -O https://apt.puppetlabs.com/puppetlabs-release-precise.deb && sudo dpkg -i puppetlabs-release-precise.deb
    
ответ дан kenorb 17.09.2014 в 23:27
источник
1

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

#!/bin/bash
dir="/tmp/dpkg-get"
url=""
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 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

И все.

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

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

    
ответ дан ruverav 13.10.2016 в 13:08
источник
0

Этот однострочный шрифт на основе SO-ответа работал на меня на Ubuntu 15.04 для определения последнего atom выпустит 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, если вам нужно место на диске.

    
ответ дан hobs 31.05.2015 в 21:38
источник
0

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

'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' !
    
ответ дан Cypher2 27.10.2012 в 22:36
источник
0

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: 

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

    
ответ дан muru 19.03.2016 в 12:36
источник

Ознакомьтесь с другими вопросами по меткам