it-swarm-es.com

¿Es posible instalar un .deb desde una URL?

¿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 ya hay algo que lo haga)

73
Joril

Editar: No vi tu declaración anterior sobre saber que podrías hacerlo, 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í:

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

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

Me doy cuenta de que hay problemas técnicos y de seguridad que lo rodean (no obtienes actualizaciones automáticas, se puede confiar en la fuente, etc.), pero sobre una base puramente puedo hacerlo, esto podría funcionar.

49
Oli

Es 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 funciona. Hay un informe de error sobre esto: # 367297

26
Tgr

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 Ubuntu Software Center para finalizar la instalación de un .DEB. De lo contrario, deberá ejecutar la instalación desde Nautilus o la línea de comandos.

El texto completo utilizado para esto es solo para Ask Ubuntu, por lo que debe reformatearlo en un ancla:

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

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

  1. 1 paquete:

    a href="apt:package"
    
  2. Agrupando varios paquetes:

    a href="apt:package1,package2,package3"
    
  3. Habilitar repositorios:

    apturl apt:freevial?section=universe
    

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

9
Rinzwind

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 descargar en /var/cache/apt/archives/ e instalar 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
6
kenorb

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

Luego agregue esto 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 cada vez que escriba dpkg, ejecutará ~/bin/dpkg (el script), en lugar de /usr/bin/dpkg.

La secuencia de comandos simplemente pasará los argumentos a dpkg si no se proporciona ninguna URL. El script 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
3
Andrew Gunnerson

lynx puede llamar a dpkg (o al Centro de software, si hay una pantalla disponible) y ofrecerle instalar 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 <[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: 

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

1
muru

Sé que ha pasado un tiempo desde que esta pregunta fue respondida/publicada, pero aquí está mi humilde contribución :

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

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.

1
ruverav

Esta línea basada en na SO respuesta funcionó para mí en Ubuntu 15.04 para identificar la última versión átomo en github para mi entorno (64 bits Ubuntu) y luego instalarlo:

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 disco.

0
hobs

Solo pensé que daría mis 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.

0
Johnathan Brown

Puede agregarlo a /etc/bash.bashrc como sigue (es una actualización del script 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 de la siguiente manera:

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
Cypher2