Существует ли способ установить 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 вначале. Это могло быть искажено или записано как функция удара.
Я понимаю, что существуют технические вопросы и проблемы безопасности, окружающие это (Вы не получаете автоматические обновления, может источник доверяться, и т.д.), но на просто can-I-do-it основание, это могло бы работать.
Самый быстрый метод похож на это. Нажмите, чтобы начать устанавливать затвор .
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 Пакет:
a href="apt:package"
Связывание нескольких пакетов:
a href="apt:package1,package2,package3"
Включение репозиториев:
apturl apt:freevial?section=universe
Таким образом, если программное обеспечение не находится во включенном репозитории значения по умолчанию, необходимо добавить 'раздел =' к нему. Иначе Вы не можете использовать этот метод и нуждаться в пользователе, чтобы загрузить его и установить себя.
У меня на самом деле есть сценарий, который делает что-то подобное:
Просто скопируйте и вставьте этот сценарий в ~/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
Это не возможно, не создавая временный файл. Обычно Вы сделали бы это как
### 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
Можно добавить его к /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' !
Можно попробовать 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
Эта острота на основе ТАК ответ работала на меня на 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 пакет при необходимости в дисковом пространстве.
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:
(Возможно, я не должен пытаться установить случайные пакеты от Интернета.)
Я знаю, что это было некоторое время, так как этот вопрос был отвечен/отправлен, но здесь является моим скромным вкладом:
#!/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
И это - все.
Я знаю, что это не прекрасно, но это просто, и это работает.
Не забудьте быть осторожными с тем, что Вы устанавливаете и от того, где Вы загружаете его.
Просто мысль я дал бы свои собственные два цента на этом. Можно установить пакет от URL с помощью следующей команды:
wget insert_url_here
После того как это было загружено, необходимо выполнить команду dpkg как суперпользователь: sudo dpkg -i insert_file_name_here
Затем просто следуйте инструкциям, которые представлены в терминале.
Я только что завернул ответ Оли в функцию bash, которую можно добавить в ваш файл .
:
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 означает удаленный здесь
Если у вас есть (или установлен) Ansible:
ansible -m apt -a deb=http://domain.com/path/to/package.deb localhost