102 votes

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

Y a-t-il un moyen d'installer un paquet deb directement à partir d'une URL, en 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 juste s'il y a quelque chose qui le fait déjà)

3voto

Marc Hughes Points 3794

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

Il suffit de copier et coller ce script dans ~/bin (créez ce dossier s'il n'existe pas) :

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

Ensuite, ajoutez ceci à la dernière ligne dans ~/.bashrc

PATH="~/bin:$PATH"

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

Le script passera simplement les arguments à dpkg s'il n'y a pas d'URL données. 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

3voto

muru Points 180007

lynx peut appeler dpkg (ou le Centre de logiciels, si un affichage est disponible) et proposer d'installer un paquet téléchargé pour vous. Par exemple, en utilisant :

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

Et en téléchargeant un des fichiers .deb, l'invite suivante s'affiche :

Info pour le paquet debian '/tmp/user/1000/L11127-6774TMP.udeb':
 nouveau paquet debian, version 2.0.
 taille 2545218 octets : archive de contrôle=5830 octets.
     857 octets,    21 lignes      control              
   14682 octets,   169 lignes      md5sums              
     225 octets,    20 lignes   *  postinst             #!/bin/sh
 Package: zsh-doc
 Source: zsh
 Version: 5.1.1-1ubuntu1
 Architecture: all
 Maintainer: Ubuntu Developers 
 Installed-Size: 5291
 Depends: zsh-common (= 5.1.1-1ubuntu1)
 Section: doc
 Priority: optional
 Homepage: http://www.zsh.org/
 Description: documentation de zsh - format info/HTML
  Zsh est un interpréteur (shell) de commandes UNIX utilisable comme un
  shell d'ouverture de session interactif et comme un script de commande shell
  processeur. Parmi les shells standard, zsh ressemble le plus à
  ksh mais inclut de nombreuses améliorations. Zsh dispose d'une édition de lignes de commande,
  correction orthographique intégrée, complétion de commande programmable,
  fonctions shell (avec chargement automatique), un mécanisme d'historique et un
  grand nombre d'autres fonctionnalités.
  .
  Cela contient la documentation dans les formats GNU info et HTML.
 Original-Maintainer: Debian Zsh Maintainers 

Souhaitez-vous :
 - I)nstaller le paquet maintenant,
 - E)nregistrer le dans un fichier, ou
 - Q)uitter maintenant
Votre choix (I/E/Q) ? I
L'installation de paquets Debian doit être faite en tant que root.
Entrez la commande utilisée pour devenir root (par défaut=sudo) : 

Installation du paquet...
[sudo] mot de passe pour bro3886 : 
(Lecture de la base de données ... 756955 fichiers et répertoires déjà installés.)
Préparation du dépaquetage .../user/1000/L11127-6774TMP.udeb ...
Dépaquetage de zsh-doc (5.1.1-1ubuntu1) sur (5.0.5-4ubuntu1~ubuntu14.04.1) ...
dpkg : problèmes de dépendances empêchent la configuration de zsh-doc :
 zsh-doc dépend de zsh-common (= 5.1.1-1ubuntu1); toutefois :
  La version de zsh-common sur le système est 5.0.5-4ubuntu1~ubuntu14.04.1.

dpkg : erreur de traitement du paquet zsh-doc (--install) :
 problèmes de dépendances - laissé non configuré
Traitement des déclencheurs pour doc-base (0.10.5) ...
Traitement de 1 fichier doc-base modifié...
Traitement des déclencheurs pour install-info (5.2.0.dfsg.1-2) ...
Des erreurs ont été rencontrées pendant le traitement :
 zsh-doc

Terminé.  Appuyez sur  pour continuer : 

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

1voto

hobs Points 486

Ce one-liner basé sur une réponse SO a fonctionné pour moi sur Ubuntu 15.04 pour identifier la dernière version de atom sur github pour mon environnement (Ubuntu 64 bits) et ensuite l'installer :

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 le faites dans un répertoire temporaire, le fichier deb sera supprimé à chaque vidage de votre dossier temporaire. Sinon, vous pouvez supprimer manuellement le paquet deb si vous avez besoin d'espace disque.

1voto

ruverav Points 11

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

#!/bin/bash
dir="/tmp/dpkg-get"
url="$1"
file="${url##*/}"

if [ "$EUID" -ne 0 ]
then
echo "Veuillez exécuter en tant que root"
exit
fi

[ -d $dir ] || mkdir $dir
wget -q --show-progress -O "$dir/$file" $url && \
dpkg -i "$dir/$file"

Comment installer dpkg-get depuis 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 cela fonctionne.

N'oubliez pas d'être prudent avec ce que vous installez et d'où vous le téléchargez.

0voto

pjemmert Points 346

Vous pouvez l'ajouter à /etc/bash.bashrc comme suit (c'est 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
}

Je ne comprends pas pourquoi j'obtiens cette erreur lorsque je l'appelle comme suit :

dpkg-url -i http://downloads.sourceforge.net/ldview/ldview-4.2-beta1.x64.deb
dpkg: erreur: besoin d'une option d'action

Tapez dpkg --help pour obtenir de l'aide sur l'installation et la désinstallation des paquets [*];
Utilisez `dselect' ou `aptitude' pour une gestion conviviale des paquets;
Tapez dpkg -Dhelp pour une liste des valeurs de drapeaux de débogage dpkg;
Tapez dpkg --force-help pour une liste des options de force;
Tapez dpkg-deb --help pour obtenir de l'aide sur la manipulation des fichiers *.deb;

Les options marquées [*] produisent beaucoup de sortie - redirigez-la vers `less' ou `more' !

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X