天天看點

Ubuntu 如何downgrade降級系統

大家都熟悉通過網絡upgrade更新Linux系統,這裡要介紹的是如何downgrade降級系統。背景情況是這樣的:我将系統更新到feisty h3之後,發現libvte-0.15.3有個bug,會影響gnu screen的正常使用。雖然看見bugzilla@gnome已經有了report不過好像還沒有啥正式resolv的希望,就隻好希望能復原到edgy的libvte9對應版本。 

  大概過程是這樣,首先是修改/etc/apt/sources.list,添加對應的edgy source。這個步驟比較簡單,用vim吧feisty源先複制一遍,然後将feisty替換成edgy就可以了。修改完了

  apt-get update

  更新一下資料。這麼做的目的,就是希望package database裡面同時包括新老兩個版本的包版本資訊。這裡說一下,目前就我的實際經驗看,好像也沒有什麼負面影響,因為apt會盡力把包更新到最新的版本,也就是說,一般情況下,老版本的包資料并不會影響新版本的更新。完成第一步之後,就是請出aptitude這個工具。原來隻是簡單的認為aptitude隻是一個apt的簡單殼子,今天深入研究一下,才發現aptitude擴充功能相當的強大,算是等同于dselect吧,用起來比dselect順手不少。言歸正傳,首先用

  apt-cache showpkg libvte9

  察看一下可用的package版本。這時候可以看到libvte9的兩個版本,一個對應feisty一個對應edgy。看清版本号之後,使用

  aptitude upgrade libvte9=1:0.14.1-0ubuntu1

  這樣的寫法,強制更新制定版本号的包,設定版本的寫法還有其他,可以man一下詳細資訊。aptitude會自動計算依賴關系,如果一切順利,libvte9以及相關的包,就會降級到老的edgy版本。做完之後,可以使用

  aptitude hold libvte9

  來保持這個包的狀态,避免在以後upgrade過程中被升回feisty的版本。最後要記得的事情,如果想讓libvte9重新可以更新,需要unhold這個包。指令行是aptitude keep libvte9,這樣就可以繼續正常更新libvte9到最新版本了。這裡有個比較奇怪的事情,就是我用aptitude unhold libvte9好像沒有什麼用,到使用aptitude keep libvte9可以清除包的hold标志。另外一個推薦的方法,就是用aptitude upgrade libvte9=xxx強制将包更新到指定版本,這個就和前面說的一樣,需要先showpkg看一下可用版本。

  順便說兩句,可以用aptitude search libvte9來察看目前包的狀态。aptitude本身就提供一個字元互動界面,如果指令行沒有參數,就會進入這個界面,操作也是很直覺的。折騰了這麼一輪,對deb/apt/aptitude這個debian系的包管理系統了解又進了一層,對這樣現代科技真實歎為觀止。整個包系統也能像cvs/svn管理代碼這樣來回翻滾版本,還真是很友善。計劃過年無事的時候,稍微深入了解一下deb相關的包系統。