¿Es posible instalar un .deb desde una URL?

61

¿Hay alguna manera de instalar un paquete deb directamente desde una URL, usando un shell ? Algo como

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

(Sé que podría usar wget y luego dpkg, me pregunto si hay algo que ya lo haga)

    
pregunta Joril 05.07.2011 - 10:28

10 respuestas

39

Editar: No vi tu declaración anterior sobre saber que podrías lograrlo, así que esto es un poco incómodo ... Dejaré esto aquí para cualquiera que quiera saber cómo hacer esto. Además, la versión anterior de mi respuesta no funcionó, pero esta versión (a expensas de ser algo más larga) sí lo hace:

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

Solo necesitas modificar la URL al principio. Esto podría ser un alias o escrito como una función bash.

Me doy cuenta de que hay cuestiones técnicas y de seguridad en torno a esto (no se obtienen actualizaciones automáticas, se puede confiar en la fuente, etc.), pero basándome en lo que se puede hacer, esto podría funcionar.

    
respondido por el Oli 05.07.2011 - 11:48
19

no es posible sin crear un archivo temporal. Normalmente harías esto como

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

o tal vez

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

pero dpkg usa mmap para acceder al archivo, por lo que ninguno de los dos funciona. Hay un informe de error al respecto: # 367297

    
respondido por el Tgr 31.07.2012 - 13:43
9

El método más rápido es así. Haga clic para comenzar a instalar obturador .

URL utilizadas para hacer clic en el nombre:

http://packages.ubuntu.com/shutter

... y para hacer clic en el icono:

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

Y sí, necesita que Ubuntu Software Center finalice la instalación de un .DEB. De lo contrario, deberá ejecutar la instalación desde Nautilus o desde la línea de comandos.

El texto completo utilizado para esto es solo para Ask Ubuntu, por lo que debe volver a formatearlo en un anclaje:

[shutter](http://packages.ubuntu.com/shutter) [![Install shutter]
(https://hostmar.co/software-small)](http://apt.ubuntu.com/p/shutter)

Se puede encontrar más información en la página wiki de apturl :

  1. 1 paquete:

    a href="apt:package"
    
  2. Agrupación de varios paquetes:

    a href="apt:package1,package2,package3"
    
  3. Habilitación de repositorios:

    apturl apt:freevial?section=universe
    

Entonces, si el software no está en un repositorio habilitado por defecto, debe agregarle una 'sección ='. De lo contrario, no puede usar este método y necesita que el usuario lo descargue e instale solo.

    
respondido por el Rinzwind 05.07.2011 - 10:41
3

Puedes probar con curl .

Para descargar el archivo en la carpeta actual e instalarlo desde el archivo local:

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

o descárgalo en /var/cache/apt/archives/ e instálalo desde allí:

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
    
respondido por el kenorb 17.09.2014 - 21:27
3

De hecho, tengo un script que hace algo similar:

Simplemente copie y pegue este script en ~/bin (cree esta carpeta si no existe):

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

Añádelo a la última línea en ~/.bashrc

PATH="~/bin:$PATH"

El script es solo un contenedor para dpkg . La línea en el archivo ~/.bashrc le dice a bash que siempre que escriba dpkg , ejecutará ~/bin/dpkg (el guión), en lugar de /usr/bin/dpkg .

El script simplemente pasará los argumentos a dpkg si no hay una URL dada. La secuencia de comandos también admite múltiples URL. Aquí hay algunos ejemplos que funcionarán:

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
    
respondido por el Andrew Gunnerson 05.07.2011 - 21:40
1

lynx puede llamar a dpkg (o al Centro de software, si hay una pantalla disponible) y ofrecerle la instalación de un paquete descargado. Por ejemplo, usando:

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

Y descargando uno de los archivos .deb , se muestra el siguiente mensaje:

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: 

(Tal vez no debería intentar instalar paquetes aleatorios en Internet).

    
respondido por el muru 19.03.2016 - 11:36
1

Sé que ha pasado un tiempo desde que se respondió / publicó esta pregunta, pero aquí está mi humilde contribución :

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

Cómo instalar dpkg-get desde Pastebin con un solo 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"

Cómo usarlo (por ejemplo, para instalar 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

Y eso es todo.

Sé que no es perfecto, pero es simple y funciona.

Recuerde tener cuidado con lo que instala y desde donde lo descarga.

    
respondido por el ruverav 13.10.2016 - 11:08
0

Este one-liner basado en una respuesta SO funcionó para mí en Ubuntu 15.04 para identificar los últimos atom lanzamiento en github para mi entorno (Ubuntu de 64 bits) y luego instálelo:

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

Si hace esto en un directorio tmp, el archivo deb se limpiará cada vez que vacíe su carpeta tmp. De lo contrario, puede eliminar manualmente el paquete Deb si necesita espacio en el disco.

    
respondido por el hobs 31.05.2015 - 19:38
0

Puede agregarlo a /etc/bash.bashrc como se muestra a continuación (es una actualización del guión de 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
}

Aunque no veo por qué recibo este error cuando lo llamo como sigue:

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' !
    
respondido por el Cypher2 27.10.2012 - 20:36
0

Solo pensé en dar mi propio bono de dos centavos por esto. Puede instalar un paquete desde una URL con el siguiente comando:

wget insert_url_here

Una vez que se ha descargado, debe ejecutar el comando dpkg como superusuario: sudo dpkg -i insert_file_name_here

Luego solo siga las instrucciones que se presentan en la terminal.

    
respondido por el Johnathan Brown 06.06.2018 - 11:20

Lea otras preguntas en las etiquetas