2015-05-20

Ubuntu 用 apt-mark 指令設定套件不更新

在正式運行環境中,有時候,因為程式設計或相依套件的的關係,不適合讓一些像資料庫或開發語言這樣的套件來跟著 Ubuntu 或是它使用的儲存庫發佈更新的時候就自動一起更新,依阿舍的經驗來說,通常這樣的下場就是要花不少時間收拾殘局,當然,也有人就偷懶就乾脆都不更新,比較省事,但是,這樣的風險更大,萬一有個系統漏洞被人打中了,那就有可能連救都救不回來哩 !



所以,建議的做法,就是告訴 Ubuntu 說那幾個套件不要更新它們,然後,其它的,也許就可以考慮讓 Ubuntu 自動更新或由系統管理手動更,這樣,應該會比較保險一點哩 ! 而要設定套件為不更新的方式有二種,一個是用 dpkg 指令,另一個則是使用 apt-mark 這個指令來操作,而阿舍這篇的是第二種,因為阿舍覺得用 apt-mark 好像有比較方便哩 !

apt-mark 執行後會列出已變更的套件清單

下面就是用 apt-mark 指令來操作套件更不更新及檢視各種狀態的的操作方式哩 !

1. 找出套件名稱
套件名稱原則和安裝時所使用的相同,但是,不一定是你記住的相同,所以,建議用下面的指令來找出完整的套件名稱哩 ! (下面以找出 mongodb 套件為例 )

$ dpkg --get-selections | grep mongodb

2. 設定為停止自動更新
使用 apt-mark 加上 hold 選項,後面跟一個或多個套件名稱就可以把它們設定為停止自動更新,另外,套件名稱也可以用 * 號來讓 apt-mark 指令自己去搜尋符合的套件名稱來變更狀態,不過,用這個方式的話,要多注意一下它執行後所列出的符合清單哩 !

# 下面這一行是設定停止更新 mongodb 和 mongodb-dev 套件
$ sudo apt-mark hold mongodb mongodb-dev

# 使用 * 號的方式
$ sudo apt-mark hold mongodb*

3. 回復為自動更新
操作方式和上述的停止自動更新相同,只是把 hold 選項改成 unhold 或 auto 選項就可以了,而 unhold 和 auto 選項的差別,主要是在 unhold 只是解除 hold 的狀態,而 auto 則是回復交由套件管理系統自動管理,但 unhold 只是單純的取消掉 hold 的狀態而已哩 !

# 回復成自動狀態
$ sudo apt-mark auto mongodb-dev

# 取消 hold 狀態
$ sudo apt-mark unhold mongodb-dev

4. 設定為不被自動移除
當套件的更新狀態被設定為 auto 時,當系統發現某個套件沒有人用到它時,就會自動把它移除,如果你不希望系統幫你自動移掉某個你想用的套件時,就可以用 manual 選項來把防止被自動移除哩 !

$ sudo apt-mark manual mongodb-dev

5. 檢視手動、停用及自動更新的套件清單
最後,可以用 showhold 和 showauto 選項來看那些套件現在是 hold 的或是 auto 的狀態哩 !

# 檢視停用自動更新清單
$ sudo apt-mark showhold

# 檢視手動移除清單
$ sudo apt-mark showmanual

# 檢視自動更新清單
$ sudo apt-mark showauto | more

依阿舍的經驗來說,操作這此變更不難,而是難在維護,因為,如果沒有做定期檢視更新狀態的話,時間一久,再加上換人沒交接清楚,就有可能會到出問題了才知道有套件永遠都沒有更新到,所以,阿舍建議,這些動作可以在做自動更新前執行,然後,完成後,再把狀態改回來,這樣會比較不會留下一個洞哩 !

推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

沒有留言 :

張貼留言

歡迎留言提問和討論 .... 😁