創用 CC 授權條款
除非另有註明,本網站的著作Fygul Hether製作,以創用CC 姓名標示-非商業性-禁止改作 4.0 國際 授權條款釋出。

2020年11月4日 星期三

Ubuntu錯誤:套件有未滿足的相依關係-1

概要

Ubuntu以APT管理套件時一般少有問題,前一段日子裝了Ubuntu MATE 20.04之後在安裝軟體時卻出現過好幾回unmet dependencies(下列的套件有未滿足的相依關係)的錯誤訊息,後來發現可能是所用的套件源鏡像的版本有問題導致出現此錯誤。這錯誤也有可能是其他原因造成,我發現很久之前就有人寫過幾種方式來解決這錯誤。但在解決此錯誤的同時,也可能出現其他問題,要特別注意一下。以下寫自己實際遇到此錯誤的問題描述、解決方法與注意事項。

以下的圖片與錯誤訊息文字,是之前在遇到錯誤時所記錄保存下來的,問題也許無法馬上即時解決掉,保存記錄可方便事後排除問題時,回顧整個事件過程以釐清問題點所在。不然可能過段時間,忘了之前發生的錯誤,其實與最近發生的是有關聯的。以下所寫的幾個狀況就是幾個不同時間點的記錄,但問題並非可馬上完全解決掉,事後將幾個串起來,發現是同一類型的錯誤,做了些調查後才完全解決此問題。

問題描述

遇到幾回錯誤,有做了記錄,這裡就只寫較代表性的,不是按照發生時間排列,而是依問題的複雜度,簡單的先寫。

狀況一

其中一回是才剛安裝好Ubuntu MATE 20.04.1,進“軟體與更新”-->“選擇最佳伺服器”,選到一個自己不常用的服務器,之後進入“語言支援”,提示安裝,裝了就出現以下圖“無法安裝完整語言支援”:

其中是這樣的錯誤訊息:


The following packages have unmet dependencies:

libreoffice-help-en-gb: Depends: libreoffice-help-common (= 1:6.4.2-0ubuntu3) but 1:6.4.6-0ubuntu0.20.04.1 is to be installed
libreoffice-help-zh-tw: Depends: libreoffice-help-common (= 1:6.4.2-0ubuntu3) but 1:6.4.6-0ubuntu0.20.04.1 is to be installed

訊息中可見已裝的是較新的版本,而目前要安裝套件的依賴反而是較舊版的。事後進Synaptic看了像這樣(已換了暗主題):

才裝好的機器,只是換了套件鏡像源就出了錯,在了解可能是該服務器鏡像複製不全之後,還是自行換回平常習慣用的服務器。“選擇最佳伺服器”的過程中可能較快的服務器正好較忙碌,所以選到了較不忙,但也許反而較慢的服務器。之前還曾選到國外的服務器,後來還是決定自行調回來。關於這點,如果確定平常慣用的服務器穩定沒問題,可自行直接選用即可。

上述是較簡單的狀況,把有問題的舊依賴 libreoffice-help-common 移除,再進行安裝工作即可解決,不過後面有較好的方法。

※Synaptic套件管理器不是系統預裝的,要自己另行安裝: sudo apt install synaptic

狀況二

另一個Ubuntu 20.04.1的系統,以 sudo apt install openssh-server 安裝openssh-server時的錯誤訊息:


正在讀取套件清單... 完成
正在重建相依關係          
正在讀取狀態資料... 完成
有些套件無法安裝。這可能意謂著您的要求難以解決,或是若您使用的是
unstable 發行版,可能有些必要的套件尚未建立,或是被移出 Incoming 了。
以下的資訊或許有助於解決當前的情況:

下列的套件有未滿足的相依關係:
 openssh-server : 相依關係: openssh-client (= 1:8.2p1-4)
                  相依關係: openssh-sftp-server
                  推薦: ssh-import-id 但它卻將不會被安裝
E: 無法修正問題,您保留 (hold) 了損毀的套件。

apt search openssh 看了一下,openssh-client並沒有顯示已安裝的字樣,但在Synaptic卻看到openssh-client是已安裝的。

試著用Synaptic把openssh-client移除,顯示也會移除:

  • gnome-software-plugin-snap
  • snapd
  • sshfs

不想移除上列三個,那麼試著重裝openssh-client:sudo apt install --reinstall openssh-client 卻出現以下錯誤(為避免篇幅過長,以下只節錄重點訊息):


無法重新安裝 openssh-client,因為它無法下載。

既然不行,只好將其移除:sudo apt remove openssh-client


以下套件為自動安裝,並且已經無用:
  libcbor0.6 libfido2-1 squashfs-tools
使用 'sudo apt autoremove' 將之移除。
下列套件將會被【移除】:
  gnome-software-plugin-snap openssh-client snapd sshfs

影響的層面不算大,就幾個套件,記錄一下,繼續刪除工作,事後把被刪的重裝回去即可:


sudo apt autoremove
sudo apt install openssh-server
sudo apt install gnome-software-plugin-snap snapd sshfs

這裡又出現前述類似的錯誤了:


下列的套件有未滿足的相依關係:
 gnome-software-plugin-snap : 相依關係: gnome-software (= 3.36.0-0ubuntu3) 但 3.36.1-0ubuntu0.20.04.0 卻將被安裝
E: 無法修正問題,您保留 (hold) 了損毀的套件。

只好先把沒問題的裝回去,再刪掉卡到的 gnome-software ,再繼續安裝最後的:


sudo apt install snapd sshfs
sudo apt remove gnome-software
sudo apt autoremove
sudo apt install gnome-software gnome-software-plugin-snap

終於搞定,回頭去設置openssh-server。這只是當初處理此問題的過程,同樣的,後面會提供較好的解決方法。

狀況二較狀況一複雜點,涉及較多的套件以及依賴層級。萬一牽扯的包更多,上面的方法就不好用了。而這裡也要注意,刪除時也會刪掉某些依賴的套件,如果沒注意看,也許桌面環境或網路就沒了,像狀況三。後面的注意事項中,會有較進一步的說明。

狀況三

安裝nVIDIA專有驅動並非第一次,但這回裝不成功,有線網路也沒了,這是真實事件的記錄。

安裝私有驅動時出現了這樣的錯誤:

若試著改用命令行 sudo apt install nvidia-driver-390 ,出現這樣的錯誤訊息:


下列的套件有未滿足的相依關係:
 nvidia-driver-390 : 相依關係: nvidia-utils-390 (= 390.138-0ubuntu0.20.04.1) 但它卻將不會被安裝

那麼按照著前面的思路,把卡到的包 nvidia-utils-390 成功移除掉,然後在圖形環境安裝私有驅動,還是出錯:

試著用Synaptic安裝nvidia-driver-390 提示會移除與桌面環境有關的包(無擷圖)。改用命令行 sudo apt install nvidia-driver-390 則是顯示以下,會刪除不少東西,好奇結果如何,於是硬著頭皮按了Y:


...略...
以下套件為自動安裝,並且已經無用:
  git-man gstreamer1.0-gtk3 libcdr-0.1-1 liberror-perl libestr0 libfastjson4 libfreehand-0.1-1 libglu1-mesa libmspack0 libmspub-0.1-1
  libpagemaker-0.0-0 libqt5quickwidgets5 libvisio-0.1-1 linux-headers-5.4.0-47 lp-solve python3-netifaces x11-apps x11-session-utils xinit
使用 'sudo apt autoremove' 將之移除。
下列的額外套件將被安裝:
  dkms libnvidia-cfg1-390 libnvidia-common-390 libnvidia-decode-390 libnvidia-encode-390 libnvidia-fbc1-390 libnvidia-gl-390 libnvidia-ifr1-390
  libxnvctrl0 nvidia-compute-utils-390 nvidia-dkms-390 nvidia-kernel-common-390 nvidia-kernel-source-390 nvidia-settings screen-resolution-extra
  xserver-xorg-video-nvidia-390
推薦套件:
  sudo libnvidia-compute-390:i386 libnvidia-decode-390:i386 libnvidia-encode-390:i386 libnvidia-ifr1-390:i386 libnvidia-fbc1-390:i386
  libnvidia-gl-390:i386
下列套件將會被【移除】:
  sudo ubuntu-mate-core ubuntu-mate-desktop xorg
下列【新】套件將會被安裝:
  dkms libnvidia-cfg1-390 libnvidia-common-390 libnvidia-decode-390 libnvidia-encode-390 libnvidia-fbc1-390 libnvidia-gl-390 libnvidia-ifr1-390
  libxnvctrl0 nvidia-compute-utils-390 nvidia-dkms-390 nvidia-driver-390 nvidia-kernel-common-390 nvidia-kernel-source-390 nvidia-settings
  screen-resolution-extra xserver-xorg-video-nvidia-390
...略...
正在移除 sudo (1.8.31-1ubuntu1.1)……
You have asked that the sudo package be removed,
but no root password has been set.
Without sudo, you may not be able to gain administrative privileges.

If you would prefer to access the root account with su(1)
or by logging in directly,
you must set a root password with "sudo passwd".

If you have arranged other means to access the root account,
and you are sure this is what you want,
you may bypass this check by setting an environment variable 
(export SUDO_FORCE_REMOVE=yes).

Refusing to remove sudo.
dpkg: error processing package sudo (--remove):
 installed sudo package pre-removal script 子進程傳回了 1 錯誤退出狀態碼
dpkg: 錯誤太多,停止執行
處理時發生錯誤:
 sudo
錯誤太多,處理作業中斷。
E: Sub-process /usr/bin/dpkg returned an error code (1)

上面說會刪除一堆套件,包含sudo以及與桌面環境有關的幾個套件,有點意外。終究沒成功,所以沒刪完,桌面環境還在,但有線網路已沒法用了,還好WiFi還可用。

狀況三後來用Aptitiude解決了,但有後遺症,同樣是有線網路無法用,見下圖。後面的注意事項會提到如果處理。

(太長了,分成兩篇)

沒有留言:

張貼留言