星期四, 十月 02, 2008

Debian Linux 完整移除套件 / 重新安裝套件 / 鎖定套件版本(apt)

很多人常會發生把某個套件搞爛了, 或者設定檔之類不小心砍掉了, 再來想到的當然是移除再重新安裝 或直接 (apt-get install --reinstall package), 但是怎麼裝, 設定檔就是回不來, 搞爛的資料也還是留著.

這並不是 Debian 的錯, 主要是怕你在移除時, 不小心就將重要資料跟著就砍掉了(ex: MySQL 不小心移除就把 DB 砍掉, 這就很尷尬了.)

此篇文章也有說明發生狀況: 如何在 Debian Etch 系統下完全移除套件與實體目錄?

套件重新安裝

就上述那篇文章的例子, 不小心將 Apache 的設定檔蓋掉/砍掉, 所以打算重新安裝 Apache.

套件移除重新安裝, 和 apt-get install --reinstall apache2 並沒有錯, 只不過問題是, apache2 的 package 裡面並沒有 設定檔. Orz.

由此可見 Package 套件內容:

  • dpkg -L apache2 | grep conf
  • dpkg -L apache2.2-common | grep conf # Debian 設定檔都放在 package_name-common 中
  • 或者上述文章作者的做法是 less /var/lib/dpkg/info/apache2.list 也是可以.
  • 所以要重新取得設定檔, 應該直接
    apt-get install --reinstall apache2.2-common
    即可. (請修改成自己系統的 apache2 版本)

套件完整移除

現在遇到的另一個狀況是, MySQL 被搞爛了, 所以要將全部移除(含資料都要移除), 再重新安裝.

完整移除的步驟:

apt-get remove --purge mysql-server mysql-server-5.0 mysql-common mysql-client mysql-client-5.0

這一行就會將 DB/設定檔都完整移除(--purge 會將所有移除), 不過大多人的問題是, --purge 後面那一串是從哪來的?

可用下述查法:

  • dpkg -l | grep mysql # dpkg -l 會列出此系統安裝的所有 package
  • ls /var/lib/dpkg/info/*mysql*

移除之後, 重新安裝直接 apt-get install 就可以囉~ :)

註: 若只是 Database file 爛了, 只要 apt-get remove --purge mysql-server-5.0, 再重新安裝 mysql-server-5.0 即可.

套件鎖定版本

此段內容詳可見: Apt和dpkg快速參考

假設現在要鎖定 gaim 版本, 不想要 gaim 被升級或降級,有下述兩種做法:

  1. echo "gaim hold" | dpkg --set-selections # 將 gaim 鎖定版本
    dpkg --get-selections "gaim" # 檢查: 出現 gaim hold # 狀態是 hold, 就不能被升級了.
  2. vim /etc/apt/preferences # 內容如下, 把版本編號寫死.
    Package: gaim
    Pin: version 0.58*

套件解除鎖定

  1. echo "gaim install" | dpkg --set-selections
  2. dpkg --get-selections "gaim" # 檢查: 出現 gaim install # 狀態被重置為 install, 就可以繼續升級了

狀態檔案位置

  • hold / install 這些狀態標誌都寫在 /var/lib/dpkg/status 裡, 也可以手動去修改變 hold / install 等狀態.

其它相關

  • apt-get clean #/var/cache/apt/archives 會清掉 *.deb 檔
  • apt-get update # 會更新 /var/lib/apt/lists 的資料

相關網頁

尋找要安裝的檔案是哪個 Package

感謝 Thomas 提供的方法

除了上述已經知道檔案是在哪個 Package, 若是檔案不確定是在哪個 Package 的狀況, 可以用下述方法:

  • dpkg -S apache2.conf (apache2.conf 可以代換成你知道的 keyword 或 filename)
  • 找出來的列表最前面就是 Package name, 重新安裝那個 Package 即可.

延伸閱讀

相關標籤

this is comment icon [回覆]

有時候如果知道檔案位置或是檔案關鍵字 例如 apache2.conf
可以用 dpkg -S $keyword
ex:
dpkg -S apache2.conf
apache2.2-common: /usr/share/doc/apache2.2-common/examples/apache2/apache2.conf.gz
apache2.2-common: /etc/apache2/apache2.conf
就可以清楚知道該重新安裝哪個套件!

Comment by Thomas (10/15/2008 11:13)

this is comment icon 回 Thomas [回覆]

阿, 您這做法很棒, 感恩~~~ Orz..

Comment by Tsung (10/15/2008 11:23)

this is comment icon 文章轉錄 [回覆]

版大您好

我將此文章轉載至個人小站 電腦茶包,作為技術備忘
http://www.minitw.com/archives/386

如有不妥,請來信告知小弟,將立即處理

Comment by 電腦茶包 (05/11/2009 09:27)

this is comment icon 回 電腦茶包 [回覆]

能否補上從哪邊轉載的? :)
通常轉載都會建議加上作者和從哪邊轉載過, 目前大多數的 CC 授權都是這樣子, 可以參考一下 :)

Comment by Tsung (05/11/2009 09:47)

this is comment icon 已補上連結 [回覆]

拖的有點久~~抱歉抱歉

Comment by jason (09/29/2009 20:53)

this is comment icon 回 jason [回覆]

哈, 我完全不記得有這件事了. XD
別在意~ :P

Comment by Tsung (09/29/2009 21:53)
Add this page to del.icio.us

發表迴響

標題

內容 (限制 1000 字)

暱稱

電子郵件

個人網頁


 authimage


PS: 若無法留言, 請先確認是否有打開 JavaScript, 造成您的困擾, 實在萬分對不起 Orz...(如果無法留言, 勞煩可以發信給我好嗎? 謝謝.)
PS2: 若您的留言被誤判, 我都會再自行看過, 不需要一直重覆張貼~