web-dev-qa-db-fra.com

Les pilotes Microsoft ODBC ne sont pas complètement installés et il est impossible de les désinstaller.

J'ai téléchargé ce paquet Debian:

curl https://packages.Microsoft.com/ubuntu/16.04/prod/pool/main/m/msodbcsql/msodbcsql_13.1.4.0-1_AMD64.deb -o msodbcsql_13.1.4.0-1_AMD64.deb 

Ensuite, j'ai lancé la commande suivante:

Sudo ACCEPT_EULA=Y dpkg -i msodbcsql_13.1.4.0-1_AMD64.deb

Et j'ai reçu les messages suivants:

Selecting previously unselected package msodbcsql.
(Reading database ... 255078 files and directories currently installed.)
Preparing to unpack msodbcsql_13.1.4.0-1_AMD64.deb ...
Unpacking msodbcsql (13.1.4.0-1) ...
dpkg: dependency problems prevent configuration of msodbcsql:
 msodbcsql depends on unixodbc (>= 2.3.1); however:
  Package unixodbc is not installed.

dpkg: error processing package msodbcsql (--install):
 dependency problems - leaving unconfigured
Errors were encountered while processing:
 msodbcsql

Alors j'ai réalisé que je devais installer unixodbc, alors j'ai fait Sudo apt-get install unixodbc obtenir le résultat suivant:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies.
 unixodbc : Depends: libodbc1 (>= 2.3.1) but it is not going to be installed
            Depends: odbcinst1debian2 (>= 2.3.1) but it is not going to be installed
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

À ce stade, j'ai commencé à essayer de supprimer le paquet "moitié installé" et j'ai essayé différentes approches:

Ce Sudo dpkg -r msodbcsql donne:

(Reading database ... 255091 files and directories currently installed.)
Removing msodbcsql (13.1.4.0-1) ...
dpkg: error processing package msodbcsql (--remove):
 subprocess installed post-removal script returned error exit status 127
Errors were encountered while processing:
 msodbcsql

Ce Sudo apt-get autoremove donne:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED
  msodbcsql
0 to upgrade, 0 to newly install, 1 to remove and 10 not to upgrade.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] Y
(Reading database ... 255077 files and directories currently installed.)
Removing msodbcsql (13.1.4.0-1) ...
dpkg: error processing package msodbcsql (--remove):
 subprocess installed post-removal script returned error exit status 127
Errors were encountered while processing:
 msodbcsql
E: Sub-process /usr/bin/dpkg returned an error code (1)

Ce Sudo apt-get --purge remove && Sudo apt-get autoclean donne:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED
  msodbcsql
0 to upgrade, 0 to newly install, 1 to remove and 10 not to upgrade.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] Y
(Reading database ... 255077 files and directories currently installed.)
Removing msodbcsql (13.1.4.0-1) ...
dpkg: error processing package msodbcsql (--remove):
 subprocess installed post-removal script returned error exit status 127
Errors were encountered while processing:
 msodbcsql
E: Sub-process /usr/bin/dpkg returned an error code (1)

Ce Sudo apt-get -f install donne:

Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following packages will be REMOVED
  msodbcsql
0 to upgrade, 0 to newly install, 1 to remove and 10 not to upgrade.
1 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] Y
(Reading database ... 255077 files and directories currently installed.)
Removing msodbcsql (13.1.4.0-1) ...
dpkg: error processing package msodbcsql (--remove):
 subprocess installed post-removal script returned error exit status 127
Errors were encountered while processing:
 msodbcsql
E: Sub-process /usr/bin/dpkg returned an error code (1)

J'ai également essayé de rechercher des caractères génériques avec Sudo find / -name *msodbc* dans le système de fichiers pour espérer trouver un gros fichier binaire et le supprimer manuellement, mais rien d'intéressant n'est sorti.

Je suis un peu préoccupé par cette suppression car toutes les tentatives précédentes semblent donner le même message d'erreur/code et je ne trouve pas le moyen de supprimer ce paquet "à moitié installé" ou de résoudre le problème.

Existe-t-il un fichier journal que je pourrais consulter ou toute autre chose que je pourrais faire pour supprimer ce paquet?

Mes détails Ubuntu:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 16.04.3 LTS
Release:    16.04
Codename:   xenial
$ uname -a
Linux oe-laptop 4.10.0-37-generic #41~16.04.1-Ubuntu SMP Fri Oct 6 22:42:59 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
1
TPPZ

Normalement, lorsque vous installez un paquet avec dpkg -i, nous allons suivre avec:

Sudo apt install -f

Selon que des dépendances sont requises ou non, et pour vous assurer que les dépendances nécessaires sont installées, vous avez tenté dans votre cas de supprimer un package qui n'avait pas été configuré correctement. Donc en utilisant:

Sudo apt update 
Sudo dpkg --configure -a

fait deux choses (1): mettre à jour les enregistrements d'index du gestionnaire de paquets, (2): corriger les configurations manquées que vous avez causées lors de l'installation et de la suppression. Le Sudo apt update est une habitude que je suis généralement en train de suivre pour résoudre des problèmes de dépendances, et cette dernière commande a fait l'affaire.

3
George Udosen

Le problème que vous avez rencontré est que dpkg ne résout pas les dépendances. Cela était aggravé par le fait que vous ne sembliez pas lire ou suivre le message "Essayez 'apt-get -f install'".

Généralement, Sudo apt-get -f install résout le problème car apt va résoudre et installer les dépendances. Il s’agirait dans votre cas de la résolution du problème après l’installation manuelle des dépendances.

Si vous rencontriez un problème avec Sudo apt-get -f install, il vous faudrait creuser plus profondément et résoudre les dépendances manuellement.

Ainsi, lorsque vous installez un fichier .deb de cette manière, vous devez:

Sudo dpkg -i foo.deb
Sudo apt-get -f install #this command will install dependencies
Sudo dpkg -i foo.deb

Vous receviez des messages d'erreur lorsque vous tentiez de supprimer un package qui n'était pas entièrement installé en raison de dépendances manquantes et que vous avez résolu le problème en installant les dépendances manuellement.

Je suis heureux que vous ayez résolu votre problème, mais la prochaine fois, ne paniquez pas, lisez les messages.

À l'avenir, utilisez si possible un ppa et/ou lisez-le en premier.


Consultez également les instructions détaillées à la section Installation du pilote Microsoft ODBC pour SQL Server sous Linux et macOS page gérée par Microsoft:

Sudo su 
curl https://packages.Microsoft.com/keys/Microsoft.asc | apt-key add -
curl https://packages.Microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
exit
Sudo apt-get update
Sudo ACCEPT_EULA=Y apt-get install msodbcsql
# optional: for bcp and sqlcmd
Sudo ACCEPT_EULA=Y apt-get install mssql-tools
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
# optional: for unixODBC development headers
Sudo apt-get install unixodbc-dev

Vérifiez également: apt-get comment réparer les paquets très cassés pour un dépannage plus approfondi.

1
Panther