Comment installer un fichier deb, par dpkg -i ou par apt?

600

J'ai un paquet deb pour l'installation.

Dois-je installer par dpkg -i my.debou par apt?

Les deux gèrent-ils bien le problème de dépendance logicielle?

Si par apt, comment puis-je installer depuis le deb par apt?

Tim
la source
Vous pouvez utiliser aptitudece qui supprime également les paquets inutiles.
Ramesh
2
Je recommande de ne pas utiliser directement dpkg. Dans le cas d'un deb simple, utilisez gdebi et dans le cas de plusieurs debs, optez pour le référentiel local APT .
Pandya
5
pourquoi ......... @Pandya
Tim
2
@ Tim car dpkgne résout pas les dépendances.
Pandya
1
@Tim gdebi identifie les dépendances manquantes, peut télécharger et installer (avec apt), peut installer et configurer (avec dpkg).
Pandya

Réponses:

771

Lorsque vous utilisez aptpour installer un paquet, il utilise le capot dpkg. Lorsque vous installez un paquet en utilisant apt, il crée d'abord une liste de toutes les dépendances et le télécharge depuis le référentiel.

Une fois le téléchargement terminé, il appelle dpkgà installer tous ces fichiers, satisfaisant ainsi toutes les dépendances.

Donc si vous avez un .debfichier:

  • Vous pouvez l'installer en utilisant:

    sudo dpkg -i /path/to/deb/file
    sudo apt-get install -f
    
  • Vous pouvez l'installer avec sudo apt install ./name.deb(ou sudo apt install /path/to/package/name.deb).

    Avec les anciennes apt-getversions, vous devez d’abord déplacer votre fichier deb dans le /var/cache/apt/archives/répertoire. Pour les deux, après avoir exécuté cette commande, il téléchargera automatiquement ses dépendances.

  • Installez gdebiet ouvrez votre fichier .deb en l’utilisant ( Cliquez avec le bouton droit de la souris -> Ouvrir avec ). Il installera votre paquet .deb avec toutes ses dépendances.

    ( Remarque : APT gère l'index de package, qui est une base de données de packages disponibles disponibles dans le référentiel défini dans le /etc/apt/sources.listfichier et dans le /etc/apt/sources.list.drépertoire. Toutes ces méthodes ne satisferont pas la dépendance logicielle si les dépendances requises par deb ne sont pas présentes dans l'index de package. .)


Pourquoi utiliser sudo apt-get install -faprèssudo dpkg -i /path/to/deb/file (mentionné dans la première méthode)?

De man apt-get:

 -f, --fix-broken
           Fix; attempt to correct a system with broken dependencies in place.

Lorsque vous dpkginstallez un package et que sa dépendance n'est pas satisfaite, le package reste dans un état "non configuré" et est considéré comme endommagé.

sudo apt-get install -f La commande essaie de réparer ce paquetage en installant la dépendance manquante.

g_p
la source
2
@Tim, apt-get est conçu pour installer des packages à partir d'un référentiel. Il gère la liste des packages ainsi que l'adresse de leur référentiel respectif. Il ne suffit donc pas de déplacer un fichier .dev, qui ne figure pas dans la liste des paquets apt, dans le répertoire / var / cache / apt / archives. Parce que chaque fois que vous essayez d'installer ce paquet en utilisant apt-get, il recherche son référentiel, qui n'est pas présent. Pour cela, vous devez créer un référentiel local qui, à mon avis, est inutile.
g_p
1
@g_p merci! Je suis un peu confus dans votre réponse ci-dessus. vous écrivez: "(cela fonctionnera si le paquet .deb est présent dans la liste de paquets apt)" - Je ne comprends pas ce que cela veut dire. Comment s'assurer que le paquet .deb est présent dans la liste des paquets apt?
BKSpurgeon
1
@BKSpurgeon, j'ai ajouté des informations sur les bits dans ma réponse. Pour savoir si un paquet est présent dans l'index ou s'il n'est pas exécuté apt-cache search <package name>. Vous pouvez également utiliser apt-cache policy <package name>, ce qui donnera des informations supplémentaires.
g_p
1
Ces méthodes effectueront-elles toujours la vérification de signature généralement effectuée par apt? Ou est-il possible d'installer un fichier .deb altéré de cette manière?
Boann
8
Vous pouvez utiliser apt-get moderne pour installer un paquet simplement avec apt-get install /path/to/package/name.deb. Ce serait bien si l'auteur de cette réponse décidait de l'intégrer. Sinon, j'ajouterai cette réponse lorsque j'aurai suffisamment de représentants ici
Sam Hartman,
91

Installez votre foo.debfichier avec dpkg -i foo.deb. S'il existe des erreurs avec des dépendances non résolues, exécutez-les apt-get install -fultérieurement.

ihor_dvoretskyi
la source
J'ai Unable to locate packageessayé de cette façon et j'ai été perplexe. J'ai utilisé comme nom Windows juste le paquet après être passé au dossier archive. Devrait être ./<file name>pour Unix si dans le dossier actuel ou le chemin complet. C'est-à-dire si debn'est pas dans le dossier présent dans PATH.
Alexei Martianov
60

Voici le meilleur moyen d'installer un .debfichier sur Ubuntu en ligne de commande:

sudo gdebi skype.deb

Si vous ne l'avez pas gdebidéjà installé, installez-le avec sudo apt install gdebi-core.

Pourquoi gdebi?

gdebicherchera toutes les dépendances du .debfichier et les installera avant de tenter d'installer le .debfichier. Je trouve cela beaucoup préférable que sudo dpkg -i skype.deb && sudo apt install -f. Ce dernier est beaucoup trop désireux de supprimer les dépendances dans certaines situations. Par exemple, lorsque j'ai essayé d'installer Skype, le logiciel a tenté de supprimer 96 (!) Paquets, y compris des paquets tels que compizet unity! gdebia donné un message d'erreur beaucoup plus clair:

 $ sudo gdebi skype.deb
 Cannot install 'libqtgui:i386'

(En passant, voici la solution à ce problème particulier .)

Flimm
la source
travaillé super thx! En fait, est-ce que la tentative de suppression concernait des paquets transitoires / temporaires? ou vous pensez que cela briserait vraiment le système?
Aquarius Power
Mec j'ai rencontré un problème avec votre solution. J'essayais d'installer Rstudio. Il a automatiquement trouvé une ancienne version de R pour moi. Lors de l'utilisation de la solution par @g_p, je n'ai pu installer que Rstudio.
Dr_Hope
39

Vous pouvez installer un paquet .deb local en:

sudo apt install ./foo.deb

Assurez-vous de spécifier un chemin relatif ou absolu local ( ./s'il est dans le répertoire en cours), sinon il recherchera foo.debdans le dépôt distant et échouera.

sage
la source
2
Cela devrait être marqué comme la bonne réponse.
Rael Gugelmin Cunha
@RaelGugelminCunha pas 100% correct. sudo apt install libstdc ++ 6_8-20180414-1ubuntu2_amd64.deb apt: erreur lors du chargement des bibliothèques partagées: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: en-tête ELF non valide
mvladk
2
@mvladk S'il vous plaît, faites attention à la syntaxe: il vous manque l' ./avant le debfichier.
Rael Gugelmin Cunha le
Absolument la meilleure solution / la plus simple.
gerardw
15

Vérifiez les dépendances avec dpkg -I my.debet apt-get installles dépendances avant dpkg -i my.deb.

Peut-être que vous pouvez copier le my.debdans /var/cache/apt/archiveset l'installer directement avec apt-getmais je n'ai jamais essayé. Ne fonctionne pas apt-getet dpkgcherche des paquets listés dans les archives.

Alex
la source
Merci. dans votre premier sentenct, voulez-vous dire apt-get install my.debpar apt-get install? Est-ce à installer à partir du fichier deb? Pourquoi avons-nous besoin dpkg -i my.debaprès cela?
Tim
J’ai toujours installé les .debs locaux avec dpkg -i, je crois comprendre qu’ils aptn’ont pas d’option pour les installer, à part le répertoire /var/cache/...où sont téléchargés (j’ai peut-être tort)
Alex
Il semble que cela apt-get install ./my.debva faire quelque chose, car il produit beaucoup de choses. Qu'est ce que ça fait?
Tim
Ça fait trop :-) ne fonctionne pas, voir @Igor_Dvoretskyi la réponse est tout simplement parfaite, j'ai oublié-f
Alex
5

La réponse la plus simple serait d'utiliser dpkg en cours d'exécution dpkg -i packagename.deb. Vous pouvez ensuite le désinstaller en exécutant dpkg -r packagename.deb.
apt-getest un installateur de niveau supérieur basé sur dpkg, et vous pouvez le faire en tant que tel apt-get install packagename.deb.
Il serait avantageux de l'ajouter à votre répertoire apt-get archives ( /var/cache/apt/archives) afin de pouvoir le référencer comme un paquet avec des dépendances et non comme une archive .deb autonome.
De plus, en l'ajoutant à votre répertoire d'archives apt-get, vous avez la possibilité d'utiliser des dépendances avec apt-get install packagename. Cela vous permettrait de l'installer avec toutes les dépendances ajoutées manuellement au lieu du système d'archive autonome de dpkg.

Intéressant...
la source
5

Modern apt-get peut être utilisé pour installer un paquet simplement avec apt-get install /path/to/package/name.deb.

(doit être modifié à la première réponse, mais a été rejeté - voir https://unix.stackexchange.com/posts/159114/edit )

Mateusz Konieczny
la source
Cela n'a pas fonctionné avecapt 1.0.9.8.4 for amd64 compiled on Dec 11 2016 09:48:19
Bruno Bronosky
-3

C'est très simple si je veux installer Chrome.

Installez votre fichier Chrome en tant que:

dpkg -i googlechrome.deb.

Il est parfois possible que des erreurs de dépendance se produisent, telles que:

dpkg: dependency problems prevent configuration of google-chrome-stable:
google-chrome-stable depends on libappindicator1; however:
Package libappindicator1 is not installed.

Donc, pour résoudre les problèmes ci-dessus, vous devez ajouter des dépendances. donnez la commande suivante:

apt-get install -f

Après avoir donné la commande ci-dessus, des dépendances seront ajoutées à votre ordinateur et votre .debfichier package Debian ( ) sera installé.

Pavan Vadrevu
la source