Est-il possible d'installer un fichier .deb à partir d'une URL?

61

Existe-t-il un moyen d’installer un paquet deb directement à partir d’une URL, utilisant un shell ? Quelque chose comme

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

(Je sais que je pourrais utiliser wget, puis dpkg, je me demande si quelque chose le fait déjà)

    
posée Joril 05.07.2011 - 12:28
la source

10 réponses

39

Edit: Je n'ai pas vu votre déclaration précédente sur le fait de savoir que vous pouviez wget, donc c'est un peu gênant ... Je vais laisser ça ici à quiconque veut savoir comment faire. De plus, la version précédente de ma réponse ne fonctionnait pas, mais cette version (au détriment d'être un peu plus longue) fait:

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

Il vous suffit de modifier l’URL au début. Cela pourrait être aliasé ou écrit comme une fonction bash.

Je me rends compte qu'il existe des problèmes techniques et de sécurité (vous ne recevez pas de mises à jour automatiques, la source peut-elle être approuvée, etc.), mais cela peut fonctionner sur une base purement faisable.

    
réponse donnée Oli 05.07.2011 - 13:48
la source
19

Il est impossible de créer un fichier temporaire. Normalement, vous le feriez comme

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

ou peut-être

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

mais dpkg utilise mmap pour accéder au fichier, donc aucun ne fonctionne. Il y a un rapport de bogue à ce sujet: # 367297

    
réponse donnée Tgr 31.07.2012 - 15:43
la source
9

La méthode la plus rapide est la suivante. Cliquez pour lancer l'installation de volet .

URL permettant de cliquer sur le nom:

http://packages.ubuntu.com/shutter

... et pour le clic sur l’icône:

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

Et oui, vous avez besoin d'Ubuntu Software Center pour terminer l'installation d'un .DEB. Sinon, vous devrez exécuter l'installation à partir de Nautilus ou de la ligne de commande.

Le texte complet utilisé pour cela est uniquement pour Ask Ubuntu, vous devez donc le reformater en une ancre:

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

Vous trouverez plus d’informations sur la page wiki apturl :

  1. 1 paquet:

    a href="apt:package"
    
  2. Regrouper plusieurs packages:

    a href="apt:package1,package2,package3"
    
  3. Activation des référentiels:

    apturl apt:freevial?section=universe
    

Donc, si le logiciel ne se trouve pas dans un référentiel activé par défaut, vous devez lui ajouter une "section=". Sinon, vous ne pouvez pas utiliser cette méthode et l'utilisateur doit la télécharger et l'installer.

    
réponse donnée Rinzwind 05.07.2011 - 12:41
la source
3

Vous pouvez essayer avec curl .

Pour télécharger le fichier dans le dossier en cours et l’installer à partir du fichier local:

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

ou télécharger dans /var/cache/apt/archives/ et installer à partir de 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
    
réponse donnée kenorb 17.09.2014 - 23:27
la source
3

J'ai en fait un script qui fait quelque chose de similaire:

Copiez et collez ce script dans ~/bin (créez ce dossier s'il n'existe pas):

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

Puis ajoutez ceci à la dernière ligne de ~/.bashrc

PATH="~/bin:$PATH"

Le script est juste un wrapper pour dpkg . La ligne dans le fichier ~/.bashrc indique à bash qu'à chaque fois que vous tapez dpkg , il exécutera ~/bin/dpkg (le script) plutôt que /usr/bin/dpkg .

Le script transmettra simplement les arguments à dpkg s’il n’ya pas d’URL. Le script prend également en charge plusieurs URL. Voici quelques exemples qui fonctionneront:

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
    
réponse donnée Andrew Gunnerson 05.07.2011 - 23:40
la source
1

lynx peut appeler dpkg (ou le Software Center, si un écran est disponible) et proposer d'installer un package téléchargé pour vous. Par exemple, en utilisant:

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

En téléchargeant l’un des fichiers .deb , l’invite suivante s’affiche:

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: 

(Peut-être que je ne devrais pas essayer d'installer des paquets aléatoires sur Internet.)

    
réponse donnée muru 19.03.2016 - 12:36
la source
1

Je sais que cela fait un moment que cette question a été répondue / postée, mais voici mon humble contribution :

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

Comment installer dpkg-get à partir de Pastebin avec une seule commande:

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"

Comment l'utiliser (par exemple pour installer 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

Et c'est tout.

Je sais que ce n'est pas parfait, mais c'est simple et ça marche.

N'oubliez pas de faire attention à ce que vous installez et d'où vous le téléchargez.

    
réponse donnée ruverav 13.10.2016 - 13:08
la source
0

Cette base en une ligne sur une réponse SO a fonctionné pour moi sur Ubuntu 15.04 pour identifier la dernière atom disponible sur github pour mon environnement (Ubuntu 64 bits) puis installe-le:

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 vous faites cela dans un répertoire tmp, le fichier deb sera nettoyé chaque fois que vous viderez votre dossier tmp. Sinon, vous pouvez supprimer manuellement le package deb si vous avez besoin de l'espace disque.

    
réponse donnée hobs 31.05.2015 - 21:38
la source
0

Vous pouvez l’ajouter à /etc/bash.bashrc comme suit (il s’agit d’une mise à jour du 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
}

Bien que je ne vois pas pourquoi je reçois cette erreur en l’appelant comme suit:

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' !
    
réponse donnée Cypher2 27.10.2012 - 22:36
la source
0

Je pensais juste que je donnerais mes propres deux cents à ce sujet. Vous pouvez installer un package à partir d'une URL à l'aide de la commande suivante:

wget insert_url_here

Une fois téléchargé, vous devez exécuter la commande dpkg en tant que superutilisateur: sudo dpkg -i insert_file_name_here

Suivez ensuite les instructions qui s'affichent dans le terminal.

    
réponse donnée Johnathan Brown 06.06.2018 - 13:20
la source

Lire d'autres questions sur les étiquettes