Драйверы Microsoft ODBC не полностью установлены и нет возможности их удалить
Я скачал этот пакет 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
Затем я выполнил следующую команду:
sudo ACCEPT_EULA=Y dpkg -i msodbcsql_13.1.4.0-1_amd64.deb
И я получил следующие сообщения:
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
Итак, я понял, что должен был установить unixodbc
так я и сделал sudo apt-get install unixodbc
получить следующий вывод:
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).
В этот момент я начал пытаться удалить "наполовину установленный" пакет и попробовал несколько разных подходов:
это sudo dpkg -r msodbcsql
дает:
(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
это sudo apt-get autoremove
дает:
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)
это sudo apt-get --purge remove && sudo apt-get autoclean
дает:
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)
это sudo apt-get -f install
дает:
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)
Я также попытался найти некоторые шаблоны с sudo find / -name *msodbc*
В файловой системе можно надеяться найти огромный двоичный файл и удалить его вручную, но ничего интересного не вышло.
Я немного обеспокоен этим удалением, так как все предыдущие попытки, похоже, возвращают одно и то же сообщение об ошибке / код, и я не нахожу способ ни удалить этот "наполовину установленный" пакет, ни устранить проблему.
Есть ли какой-нибудь файл журнала, который я мог бы посмотреть, или что-нибудь еще, что я мог бы сделать, чтобы удалить этот пакет?
Мои детали 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
2 ответа
Обычно при установке пакета с dpkg -i
мы будем выполнять с помощью:
sudo apt install -f
В зависимости от того, требуются ли зависимости, и чтобы убедиться, что необходимые зависимости установлены, но в вашем случае вы попытались удалить пакет, который изначально не был настроен. Итак, используя:
sudo apt update
sudo dpkg --configure -a
сделал две вещи (1): обновил записи индекса менеджера пакетов, (2): исправил любые ошибки конфигурации, которые вы вызвали при попытке установить и удалить. sudo apt update
это привычка, которой я обычно следую для решения проблем зависимостей, и последняя команда добилась цели.
Проблема, с которой вы столкнулись, состоит в том, что dpkg не разрешает зависимости. Это усугублялось тем, что вы, похоже, не читали и не следовали полученному сообщению "Попробуйте 'apt-get -f install'" .
В общем-то sudo apt-get -f install
решает проблему, так как apt разрешит и установит зависимости. Это было бы в вашем случае, поскольку проблема wsa решена после того, как вы вручную установили зависимости.
Если бы у вас были проблемы с sudo apt-get -f install
вам придется копать глубже и разрешать зависимости вручную.
Таким образом, при установке.deb таким образом вы бы:
sudo dpkg -i foo.deb
sudo apt-get -f install #this command will install dependencies
sudo dpkg -i foo.deb
Вы получали сообщения об ошибках, когда пытались удалить пакет, который не был полностью установлен из-за отсутствующих зависимостей, и вы решили проблему, установив зависимости вручную.
Я рад, что вы исправили свою проблему, но в следующий раз не паникуйте, прочитайте сообщения.
В будущем, если это вообще возможно, используйте ppa и / или прочитайте сначала.
Также проверьте подробные инструкции на странице Установка драйвера Microsoft ODBC для SQL Server в Linux и macOS, поддерживаемой 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
Проверьте также: apt-get, как исправить очень испорченные пакеты для дальнейшего устранения неполадок.