Чи можна встановити .deb з URL-адреси?


74

Чи є спосіб встановити пакет дебюту безпосередньо з URL-адреси, використовуючи оболонку ? Щось на зразок

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

(Я знаю, що міг би використовувати wget, а потім dpkg, мені просто цікаво, чи є щось, що це вже робить)

Відповіді:


48

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

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

Вам просто потрібно змінити URL-адресу на початку. Це може бути псевдонімом або записане як баш-функція.

Я усвідомлюю, що навколо цього є технічні проблеми та проблеми безпеки (ви не отримуєте автоматичних оновлень, чи можна довіряти джерелу тощо), але на принципах, що я роблю це я можу зробити, це може спрацювати.


3
Я б також запропонував використовувати, dpkg --skip-same-version -i $FILEякщо він буде запущений із сценаріїв. Більше інформації тут - manpages.debian.org/unstable/dpkg/dpkg.1.en.html
Ватов Котов

26

Це неможливо без створення тимчасового файлу. Зазвичай ти робиш це так

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


4
Це корисна відповідь, але так, як її структурується, здається, що відповідь - "так, це два способи зробити це".
бон

1
Відредаговано. Зауважте, що dpkg 1.17.7+ має аргументи stdin для деяких своїх команд, але не для встановлення.
Тгр

ХА ХА! Я спробував і те, і інше перед Гуглінг. Дякуємо, що створили цю відповідь, щоб сказати, як однодумці, "ти не божевільний".
Бруно Броноський

9

Найшвидший метод такий. Клацніть, щоб почати встановлення затвора .

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://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 =". В іншому випадку ви не можете використовувати цей метод, а користувачеві потрібно завантажити його та встановити самостійно.


8
Лише зауваження: AptUrl не працює для програмного забезпечення, яке не знаходиться у репозитарії користувачів
sergio91pt

1
Це приємно, дякую! У будь-якому разі я шукаю щось, що могло б працювати з командного рядка, я редагував це питання. На жаль, очікуваний біг X: /
Йоріл

6

Ви можете спробувати 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

1
використання помилки отримання curl:--install needs at least one package archive file argument
itsazzad

використання помилки отримання dpkg: dpkg-deb: error: / dev / fd / 63 'не є архівом формату debian`
itsazzad

за допомогою останнього завитка:dpkg: error processing archive puppetlabs-release-precise.deb (--install):
itsazzad

1
Спробували встановити wkhtmltopdf
itsazzad,

4
Підтвердження: всі варіанти не працюють у Debian Jessie з dpkg 1.17.27
Envek

3

У мене фактично є сценарій, який робить щось подібне:

Просто скопіюйте та вставте цей скрипт ~/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

Будь ласка, повідомте мені, чи є якісь проблеми зі сценарієм. Я не на своєму комп'ютері Ubuntu, тому я записав це зі своєї пам’яті.
Ендрю Гуннерсон

1
Яка пам’ять!
enzotib

@enzotib: ха-ха! Зі кількості переустановок, які я роблю, моя пам’ять корисніше, ніж моє резервне копіювання :)
Ендрю Гуннерсон

2

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: 

(Можливо, я не повинен намагатися встановлювати випадкові пакети з Інтернету.)


1

Я знаю, що минуло певний час, коли відповіли / опублікували на це запитання, але ось мій скромний внесок :

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

І це все.

Я знаю, що це не ідеально, але це просто і це працює.

Не забудьте бути обережними з тим, що ви встановлюєте та звідки його завантажуєте.


0

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


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' !

0

Просто думав, що я дам свої власні два центи на це. Ви можете встановити пакунок з URL-адреси за допомогою наступної команди:

wget insert_url_here

Після завантаження вам потрібно запустити команду dpkg як суперпользователь: sudo dpkg -i insert_file_name_here

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


1
Так, звичайно, як зазначено в запитанні, між дужками :)
Йоріл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.