如何修復損壞的 glibc 包

如何修復損壞的 glibc 包

我使用的是 Ubuntu 18.04,我嘗試將 libc6 從版本 2.27 升級到 2.29,但最終破壞了軟體包系統。我無法修復,因為當我嘗試使用修復命令時,它總是顯示系統中的大量軟體包將被刪除。

Synaptic 將這些軟體包顯示為損壞:

  • glibc-doc 2.27-3
  • libc-dev-bin 2.27-3
  • libc6 2.29-0
  • libc6-dbg 2.27-3
  • libc6-dev 2.27-3
  • libc6:i386 2.27-3

我怎麼破了?我從以下位置下載了以下軟體包https://packages.ubuntu.com/

  • glibc-doc_2.29-0ubuntu2_all.deb
  • glibc-source_2.29-0ubuntu2_all.deb
  • libc6_2.29-0ubuntu2_amd64.deb
  • libc6-amd64_2.29-0ubuntu2_i386.deb
  • libc-bin_2.29-0ubuntu2_amd64.deb
  • locales_2.29-0ubuntu2_all.deb

我嘗試透過 dpkg 一一安裝它們,但由於依賴性錯誤而無法工作,最後我使用了以下命令:

sudo dpkg -i libc-bin_2.29-0ubuntu2_amd64.deb libc6_2.29-0ubuntu2_amd64.deb libc6-amd64_2.29-0ubuntu2_i386.deb 

之後,我在提示中說“是”,提示需要重新啟動一些程式(例如 postgres)。

然後我看到了損壞的包錯誤。

sudo apt update沒有給出錯誤。當我嘗試修復時,它顯示幾乎所有內容都需要刪除:

sudo apt install -f
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Correcting dependencies... Done
The following packages were automatically installed and are no longer required:
  alex freeglut3 freeglut3-dev happy hscolour libbsd-dev libdrm-dev libffi-dev
  libgl1-mesa-dev libgles1 libglu1-mesa-dev libglvnd-core-dev libglvnd-dev
  libgmp-dev libgmpxx4ldbl libopengl0 libtinfo-dev libx11-xcb-dev
  libx11-xcb1:i386 libxcb-dri2-0-dev libxcb-dri3-dev libxcb-glx0-dev
  libxcb-present-dev libxcb-randr0-dev libxcb-render0-dev libxcb-shape0-dev
  libxcb-sync-dev libxcb-xfixes0-dev libxdamage-dev libxext-dev libxfixes-dev
  libxi-dev libxmu-dev libxmu-headers libxshmfence-dev libxxf86vm-dev
  linux-headers-4.18.0-17 linux-headers-4.18.0-17-generic
  linux-image-4.18.0-17-generic linux-libc-dev linux-modules-4.18.0-17-generic
  linux-modules-extra-4.18.0-17-generic mesa-common-dev x11proto-damage-dev
  x11proto-fixes-dev x11proto-xext-dev x11proto-xf86vidmode-dev
Use 'sudo apt autoremove' to remove them.
The following additional packages will be installed:
  glibc-doc-reference
The following packages will be REMOVED:
  build-essential cabal-install g++ g++-7 ghc haskell-platform libbsd0:i386
  libc-dev-bin libc6:i386 libc6-amd64:i386 libc6-dbg libc6-dev
  libdrm-amdgpu1:i386 libdrm-intel1:i386 libdrm-nouveau2:i386
  libdrm-radeon1:i386 libdrm2:i386 libedit2:i386 libelf1:i386 libexpat1:i386
  libffi6:i386 libgcc1:i386 libghc-async-dev libghc-attoparsec-dev
  libghc-call-stack-dev libghc-case-insensitive-dev libghc-fgl-dev
  libghc-fixed-dev libghc-gluraw-dev libghc-glut-dev libghc-half-dev
  libghc-hashable-dev libghc-haskell-src-dev libghc-html-dev libghc-http-dev
  libghc-hunit-dev libghc-integer-logarithms-dev libghc-mtl-dev
  libghc-network-dev libghc-network-uri-dev libghc-objectname-dev
  libghc-opengl-dev libghc-openglraw-dev libghc-parallel-dev
  libghc-parsec3-dev libghc-primitive-dev libghc-quickcheck2-dev
  libghc-random-dev libghc-regex-base-dev libghc-regex-compat-dev
  libghc-regex-posix-dev libghc-scientific-dev libghc-split-dev
  libghc-statevar-dev libghc-stm-dev libghc-syb-dev libghc-text-dev
  libghc-tf-random-dev libghc-unordered-containers-dev libghc-vector-dev
  libghc-zlib-dev libgl1:i386 libgl1-mesa-dri:i386 libgl1-mesa-glx:i386
  libglapi-mesa:i386 libglvnd0:i386 libglx-mesa0:i386 libglx0:i386
  libllvm7:i386 libncurses5-dev libnvidia-compute-418:i386
  libnvidia-decode-418:i386 libnvidia-encode-418:i386 libnvidia-fbc1-418:i386
  libnvidia-gl-418:i386 libnvidia-ifr1-418:i386 libpciaccess0:i386
  libsensors4:i386 libstdc++-7-dev libstdc++6:i386 libtinfo5:i386
  libx11-6:i386 libxau6:i386 libxcb-dri2-0:i386 libxcb-dri3-0:i386
  libxcb-glx0:i386 libxcb-present0:i386 libxcb-sync1:i386 libxcb1:i386
  libxdamage1:i386 libxdmcp6:i386 libxext6:i386 libxfixes3:i386
  libxshmfence1:i386 libxxf86vm1:i386 zlib1g:i386 zlib1g-dev
The following NEW packages will be installed:
  glibc-doc-reference
0 upgraded, 1 newly installed, 97 to remove and 0 not upgraded.
6 not fully installed or removed.
Need to get 5.483 kB of archives.
After this operation, 1.303 MB disk space will be freed.
Do you want to continue? [Y/n] 

答案1

Apt 並沒有壞掉——它仍然工作得很好。但你不明智地告訴 apt 做一個弗蘭肯系統,混合來自 Ubuntu 不同版本的軟體包。

Apt 永遠無法解決現在不合邏輯的依賴關係。 (你也不會)。由於 apt 無法運行,因此除非刪除錯誤版本的軟體包,否則您將永遠無法獲得任何升級或安全性修補程式。

我們不為 Frankensystems 提供支援。根據定義,它們不穩定,容易出現不尋常且難以診斷的問題。基於 Deb 的系統被設計為具有特定版本的軟體包的功能。錯誤版本的軟體包會導致問題。

刪除錯誤版本的軟體包。如果您想執行 19.04 軟體包,請考慮安裝 Ubuntu 19.04。如果您希望保留目前的 18.04 系統,則可以在虛擬機器或備用分割區中。

答案2

我透過下載所有這些軟體包的 2.27 版本並在它們上運行 dpkg 來修復。

在損壞之前,我嘗試按照相同的順序安裝它們。我在多個 deb 檔案上使用 dpkg 來防止循環依賴或類似的情況。不確定它是否會改變什麼。

答案3

因此,如果您需要一個僅隨新發行版提供並且一些遊戲需要的庫,真正的解決方案是升級發行版...

如果你打算在Ubuntu 系統上玩遊戲,那麼到2023 年為止對18.04 的支援就到此為止了…例如,我有2020 年的三款Linux 遊戲,一旦更新,就需要glibc6-2.29 或更高版本!除此之外,對我來說這意味著下載新的發行版 ISO 並進行完整安裝!由於 disptr 升級失敗...

相關內容