Ist es möglich, eine .deb von einer URL zu installieren?

74

Gibt es eine Möglichkeit, ein Deb-Paket mithilfe einer Shell direkt von einer URL aus zu installieren ? So etwas wie

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

(Ich weiß, ich könnte wget und dann dpkg benutzen, ich frage mich nur, ob es etwas gibt, das es schon tut.)

Joril
quelle

Antworten:

48

Bearbeiten: Ich habe Ihre vorherige Aussage über das Wissen, dass Sie wget könnte nicht gesehen, so ist dies ein bisschen umständlich ... Ich lasse dies hier für alle, die wissen wollen, wie dies zu tun ist. Zusätzlich hat die vorherige Version meiner Antwort nicht funktioniert, aber diese Version (auf Kosten der etwas längeren) funktioniert:

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

Sie müssen nur die URL am Anfang ändern. Dies kann als Bash-Funktion oder als Alias ​​geschrieben werden.

Ich stelle fest, dass dies technische und sicherheitstechnische Probleme mit sich bringt (Sie erhalten keine automatischen Updates, können der Quelle vertrauen usw.), aber auf einer reinen Basis, die ich tun kann, könnte dies funktionieren.

Oli
quelle
3
Ich würde auch vorschlagen, zu verwenden, dpkg --skip-same-version -i $FILEwenn es von Skripten ausgeführt werden soll. Weitere Informationen hier - manpages.debian.org/unstable/dpkg/dpkg.1.de.html
Vadim Kotov
26

Es ist nicht möglich, ohne eine temporäre Datei zu erstellen. Normalerweise würde man das gerne machen

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

oder vielleicht

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

dpkg verwendet jedoch mmap, um auf die Datei zuzugreifen, sodass keine von beiden funktioniert. Es gibt einen Fehlerbericht dazu: # 367297

Tgr
quelle
4
Dies ist eine nützliche Antwort, aber die Art und Weise, wie sie strukturiert ist, lässt es scheinen, als wäre die Antwort "Ja, hier sind zwei Möglichkeiten, dies zu tun".
15.
1
Bearbeitet Beachten Sie, dass dpkg 1.17.7+ für einige seiner Befehle stdin-Argumente akzeptiert , für die Installation jedoch nicht.
Tgr
HA HA! Ich habe beide vor dem Googeln ausprobiert. Vielen Dank, dass Sie diese Antwort erstellt haben, um Gleichgesinnten mitzuteilen: "Sie sind nicht verrückt."
Bruno Bronosky
9

Die schnellste Methode ist so. Klicken Sie hier, um die Installation des Verschlusses zu starten .

URLs zum Klicken auf den Namen:

http://packages.ubuntu.com/shutter

... und für den Klick auf das Icon:

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

Und ja, Sie benötigen Ubuntu Software Center, um die Installation einer .DEB abzuschließen. Andernfalls müssen Sie die Installation über Nautilus oder die Befehlszeile ausführen.

Der vollständige Text, der dafür verwendet wird, ist nur für Ask Ubuntu. Sie müssen ihn also in einen Anker umformatieren:

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

Weitere Informationen finden Sie auf der Apturl-Wiki-Seite :

  1. 1 Paket:

    a href="apt:package"
    
  2. Mehrere Pakete bündeln:

    a href="apt:package1,package2,package3"
    
  3. Aktivieren von Repositorys:

    apturl apt:freevial?section=universe
    

Wenn sich die Software nicht in einem standardmäßig aktivierten Repository befindet, sollten Sie ein 'section =' hinzufügen. Andernfalls können Sie diese Methode nicht verwenden, und der Benutzer muss sie herunterladen und selbst installieren.

Rinzwind
quelle
8
Nur ein Hinweis: AptUrl funktioniert nicht für Software, die sich nicht im Repository des Benutzers befindet
sergio91pt
1
Das ist schön, danke! Wie auch immer, ich suche etwas, das über die Befehlszeile funktioniert, ich habe die Frage bearbeitet. Leider erwartet Apturl einen laufenden X: /
Joril
6

Sie können mit versuchen curl.

So laden Sie die Datei in den aktuellen Ordner herunter und installieren sie von der lokalen Datei:

curl -sLO https://apt.puppetlabs.com/puppetlabs-release-precise.deb && sudo dpkg -i puppetlabs-release-precise.deb

oder /var/cache/apt/archives/von dort herunterladen und installieren:

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
Kenorb
quelle
1
mit curl bekommen Fehler:--install needs at least one package archive file argument
itsazzad
using dpkg dpkg-deb: error: erhalte
fehler
unter Verwendung der letzten Locke:dpkg: error processing archive puppetlabs-release-precise.deb (--install):
itsazzad
1
Ich habe versucht, wkhtmltopdf
itsazzad
4
Bestätigen: Alle Varianten funktionieren nicht in Debian Jessie mit dpkg 1.17.27
Envek
3

Ich habe tatsächlich ein Skript, das etwas Ähnliches macht:

Kopieren Sie einfach dieses Skript und fügen Sie es ein ~/bin(erstellen Sie diesen Ordner, falls er nicht existiert):

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

Fügen Sie dies dann in die letzte Zeile ein ~/.bashrc

PATH="~/bin:$PATH"

Das Skript ist nur ein Wrapper für dpkg. Die Zeile in der ~/.bashrcDatei gibt an, bashdass sie bei jeder Eingabe ausgeführt dpkgwird ~/bin/dpkg(das Skript) und nicht /usr/bin/dpkg.

Das Skript übergibt die Argumente nur an, dpkgwenn keine URLs angegeben sind. Das Skript unterstützt auch mehrere URLs. Hier sind einige Beispiele, die funktionieren werden:

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
quelle
Bitte lassen Sie mich wissen, wenn es Probleme mit dem Skript gibt. Ich bin nicht an meinem Ubuntu-Computer, also habe ich das aus meinem Gedächtnis geschrieben.
Andrew Gunnerson
1
Was für eine Erinnerung!
Enzotib
@enzotib: haha! Mit der Menge an Neuinstallationen, die ich mache, ist mein Speicher nützlicher als meine Backups :)
Andrew Gunnerson
2

lynxkann anrufen dpkg(oder das Software Center, falls ein Display verfügbar ist) und anbieten, ein heruntergeladenes Paket für Sie zu installieren. Zum Beispiel mit:

lynx http://archive.ubuntu.com/ubuntu/pool/main/z/zsh/

Wenn Sie eine der .debDateien herunterladen , wird die folgende Eingabeaufforderung angezeigt:

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 <[email protected]>
 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 <[email protected]>

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: 

(Vielleicht sollte ich nicht versuchen, zufällige Pakete aus dem Internet zu installieren.)

muru
quelle
1

Ich weiß, dass es eine Weile her ist, dass diese Frage beantwortet / gepostet wurde, aber hier ist mein bescheidener Beitrag :

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

So installieren Sie dpkg-getPastebin mit einem einzigen Befehl:

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"

So verwenden Sie es (zum Beispiel zum Installieren von 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

Und das ist alles.

Ich weiß, dass es nicht perfekt ist, aber es ist einfach und es funktioniert.

Denken Sie daran, vorsichtig zu sein, was Sie installieren und von wo Sie es herunterladen.

ruverav
quelle
0

Dieser Einzeiler , der auf einer SO-Antwort basiert , arbeitete für mich unter Ubuntu 15.04, um die neueste Atom- Version auf Github für meine Umgebung (64-Bit-Ubuntu) zu identifizieren und sie dann zu installieren:

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

Wenn Sie dies in einem tmp-Verzeichnis tun, wird die deb-Datei immer dann gelöscht, wenn Sie Ihren tmp-Ordner leeren. Andernfalls können Sie das deb-Paket manuell löschen, wenn Sie Speicherplatz benötigen.

Kochfelder
quelle
0

Sie können es /etc/bash.bashrcwie folgt anhängen (es ist ein Upgrade von Chens Skript):

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

Obwohl ich nicht verstehe, warum ich diesen Fehler erhalte, wenn ich ihn wie folgt aufrufe:

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
quelle
0

Ich dachte nur, ich würde meine eigenen zwei Cent dafür geben. Mit dem folgenden Befehl können Sie ein Paket von einer URL installieren:

wget insert_url_here

Nach dem Herunterladen müssen Sie den Befehl dpkg als Superuser ausführen: sudo dpkg -i insert_file_name_here

Folgen Sie dann einfach den Anweisungen, die im Terminal angezeigt werden.

Johnathan Brown
quelle
1
Ja, natürlich, wie in der Frage in Klammern angegeben :)
Joril