Linux
設置 apt-get 選項以容忍無害的 ‘dpkg –force-conflicts’ 混亂?
通過執行foo可以使一個簡單衝突的包foo 與bar一起使用
dpkg --force-conflicts -i foo
。但最終是時候升級和“apt-get”對象了:% apt-get upgrade 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: foo : Conflicts: bar but 0.2-1 is installed E: Unmet dependencies. Try using -f.
可以調整/強制apt-get以容忍(幾乎固定的)衝突,然後升級嗎?
(快速存在證明:解除安裝foo,然後升級,然後像以前一樣重新安裝foo。因此,有可能,問題是找到最不麻煩的機制。)
一個例子,但這個問題與任何兩個特定的包無關。
幾年來,GNU並行與moretutils發生了小衝突。每個都提供**/usr/bin/parallel**。 dpkg可以強制共存:
# assume 'moreutils' is already installed, and 'parallel' is in # apt's cache directory. dpkg --force-conflicts -i /var/cache/apt/archives/parallel_20141022+ds1-1_all.deb
這會造成轉移,將moreutils版本重命名為**/usr/bin/parallel.moreutils**。這兩個程序都可以工作,直到使用者升級。
我嘗試了一個**-o**選項,但這並沒有帶來和平:
apt-get -o Dpkg::Options::="--force-conflicts" install parallel moreutils
可能的**-o**選項有數百個,但是……
由於 OP 在 Gilles 答案的評論中要求提供命令列表(用於更改包的相關元數據),因此它是:
# download .deb apt download parallel # alternatively: aptitude download parallel # unpack dpkg-deb -R parallel_*.deb tmp/ # make changes to the package metadata sed -i \ -e '/^Version:/s/$/~nomoreutconfl/' \ -e '/^Conflicts: moreutils/d' \ tmp/DEBIAN/control # pack anew dpkg-deb -b tmp parallel_custom.deb # install dpkg -i parallel_custom.deb
這是假設衝突行僅
moreutils
作為條目(並且沒有版本限制),就像我的安裝中的情況一樣。否則,'/^Conflicts:/s/\(, \)\?moreutils\( [^,]\+\)\?//'
作為第二個sed
腳本使用,僅刪除行的相關部分並支持版本限制。您安裝的軟體包不會被儲存庫中的較新版本覆蓋,如果您想保持此軟體包最新,則必須手動重複此過程以對 GNU 並行軟體包進行每次更新。