È possibile installare un .deb da un URL?


74

C'è un modo per installare un pacchetto deb direttamente da un URL, usando una shell ? Qualcosa di simile a

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

(So ​​che potrei usare wget e poi dpkg, mi chiedo solo se c'è qualcosa che lo fa già)

Risposte:


48

Modifica: non ho visto la tua precedente dichiarazione sul sapere che potresti scommettere, quindi è un po 'imbarazzante ... Lascio questo qui per chiunque voglia sapere come farlo. Inoltre la versione precedente della mia risposta non funzionava, ma questa versione (a spese di essere un po 'più lunga) fa:

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

Devi solo modificare l'URL all'inizio. Questo potrebbe essere alias o scritto come una funzione bash.

Mi rendo conto che ci sono problemi tecnici e di sicurezza che lo circondano (non si ottengono aggiornamenti automatici, si può fidare della fonte, ecc.), Ma su una base puramente possibile, potrebbe funzionare.


3
Vorrei anche suggerire di utilizzare dpkg --skip-same-version -i $FILEse verrà eseguito da script. Maggiori informazioni qui - manpages.debian.org/unstable/dpkg/dpkg.1.en.html
Vadim Kotov

26

Non è possibile senza creare un file temporaneo. Normalmente lo faresti come

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

o forse

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

ma dpkg usa mmap per accedere al file, quindi nessuno dei due funziona. C'è una segnalazione di bug al riguardo: # 367297


4
Questa è una risposta utile, ma il modo in cui è strutturata fa sembrare che la risposta sia "sì, ecco due modi per farlo".
Bonh,

1
Modificato. Si noti che dpkg 1.17.7+ accetta argomenti stdin per alcuni dei suoi comandi ma non per l'installazione.
Tgr

HA HA! Ho provato entrambi prima di cercare su Google. Grazie per aver creato questa risposta per dire a persone affini, "non sei pazzo".
Bruno Bronosky,

9

Il metodo più veloce è così. Fare clic per iniziare l'installazione dell'otturatore .

URL utilizzati per fare clic sul nome:

http://packages.ubuntu.com/shutter

... e per il clic sull'icona:

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

E sì, hai bisogno di Ubuntu Software Center per completare l'installazione di un .DEB. Altrimenti dovrai eseguire l'installazione da Nautilus o dalla riga di comando.

Il testo completo utilizzato per questo è solo per Ask Ubuntu, quindi è necessario riformattarlo in un'ancora:

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

Maggiori informazioni sono disponibili sulla pagina wiki apturl :

  1. 1 pacchetto:

    a href="apt:package"
    
  2. Raggruppamento di diversi pacchetti:

    a href="apt:package1,package2,package3"
    
  3. Abilitazione dei repository:

    apturl apt:freevial?section=universe
    

Quindi, se il software non si trova in un repository abilitato predefinito, è necessario aggiungere una 'sezione =' ad esso. Altrimenti non è possibile utilizzare questo metodo e l'utente deve scaricarlo e installarsi da solo.


8
Solo una nota: AptUrl non funziona per software che non si trova nel repository degli utenti
sergio91pt,

1
È carino, grazie! Comunque sto cercando qualcosa che funzioni dalla riga di comando, ho modificato la domanda. Purtroppo apturl si aspetta un X in esecuzione: /
Joril il

6

Puoi provare con curl.

Per scaricare il file nella cartella corrente e installarlo dal file locale:

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

oppure scarica /var/cache/apt/archives/e installa da lì:

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
usando curl ottenere errore:--install needs at least one package archive file argument
itsazzad,

usando dpkg ottenendo errore: dpkg-deb: error: / dev / fd / 63 'non è un archivio in formato debian`
itsazzad

usando l'ultimo ricciolo:dpkg: error processing archive puppetlabs-release-precise.deb (--install):
itsazzad,

1
Stavo cercando di installare wkhtmltopdf
itsazzad

4
Conferma: tutte le varianti non funzionano in Debian Jessie con dpkg 1.17.27
Envek

3

In realtà ho una sceneggiatura che fa qualcosa di simile:

Copia e incolla questo script in ~/bin(crea questa cartella se non esiste):

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

Quindi aggiungi questo all'ultima riga in ~/.bashrc

PATH="~/bin:$PATH"

Lo script è solo un wrapper per dpkg. La riga nel ~/.bashrcfile dice bashche ogni volta che si digita dpkg, verrà eseguito ~/bin/dpkg(lo script), anziché /usr/bin/dpkg.

Lo script passerà gli argomenti a dpkgse non viene fornito alcun URL. Lo script supporta anche più URL. Ecco alcuni esempi che funzioneranno:

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

Per favore fatemi sapere se ci sono problemi con lo script. Non sono sul mio computer Ubuntu, quindi l'ho cancellato dalla mia memoria.
Andrew Gunnerson,

1
Che memoria!
enzotib,

@enzotib: haha! Con la quantità di reinstalla che faccio, la mia memoria è più utile che i miei sostegni :)
Andrew Gunnerson

2

lynxpuò chiamare dpkg(o il Software Center, se è disponibile un display) e offrirti di installare un pacchetto scaricato per te. Ad esempio, usando:

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

E scaricando uno dei .debfile, viene visualizzato il seguente prompt:

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: 

(Forse non dovrei provare a installare pacchetti casuali da Internet.)


1

So che è passato un po 'di tempo da quando questa domanda ha avuto risposta / postato, ma ecco il mio modesto contributo :

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

Come installare dpkg-getda Pastebin con un singolo comando:

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"

Come usarlo (ad esempio per installare 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

E questo è tutto.

So che non è perfetto, ma è semplice e funziona.

Ricorda di fare attenzione a ciò che installi e da dove lo scarichi.


0

Questo one-liner basato su una risposta SO ha funzionato per me su Ubuntu 15.04 per identificare l'ultima versione atom su github per il mio ambiente (Ubuntu a 64 bit) e quindi installarlo:

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

Se lo fai in una directory tmp, il file deb verrà ripulito ogni volta che svuoti la cartella tmp. Altrimenti è possibile eliminare manualmente il pacchetto deb se è necessario lo spazio su disco.


0

Puoi aggiungerlo /etc/bash.bashrccome segue (è un aggiornamento dallo script di 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
}

Anche se non vedo perché ottengo questo errore quando lo chiamo come segue:

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

Ho pensato di dare i miei due centesimi su questo. Puoi installare un pacchetto da un URL usando il seguente comando:

wget insert_url_here

Una volta scaricato, è necessario eseguire il comando dpkg come superutente: sudo dpkg -i insert_file_name_here

Quindi basta seguire le istruzioni che vengono presentate nel terminale.


1
Sì, certo, come indicato nella domanda, tra parentesi :)
Joril
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.