Ubuntu自動備份軟件包和製作本地源

 Ubuntu之所以成爲衆多Linux發行版裏面最受歡迎的版本之一,除了可以免費申請安裝光盤以外,另外一個影響很大的原因在於:軟件豐富、速度快。比如想要安裝媒體播放器mplayer,確保聯網以後只要一個命令:apt-get install mplayer以後,所有的工作(解決依賴關係,下載和安裝軟件等等)計算機都會自動進行;系統有了更新以後,只要輸入:apt-get dist-upgrade就可以全面更新系統。這種“類傻瓜(真正傻瓜的是Window$,但它的“傻”和Linux的又有明顯不同,不多討論)似的”安裝和升級方法給用戶帶來了極大的方便。但伴隨這種方便的軟件安裝和升級而來的,是網絡的速度和流量問題。比如,在用了很長一段時間以後,某人的機器因爲個人操作不當而導致崩潰,那麼重裝以後想要執行系統更新,那麼很可能會耗費幾百兆的流量,即便有些寬帶服務提供者並不按照流量計費,但是如果網速不快的話這些更新的下載所耗費的時間也會讓人惱火。又比如,如果一個實驗室或者一個局域網內,如果有多個Ubuntu(或者其他的Linux)用戶,如果每個人都各自去從外網上安裝或者更新軟件,這對網絡流量和時間來講會有很大的浪費。

    解決這一問題的方法其實很簡單,就是──備份安裝或者更新時候下載的軟件包,並添加本地源。這樣可以節省很多的流量和時間,尤其是對於網速不高或者對網絡流量有限制的人來講,好處無疑是很大的。本文分爲了兩個部分,第一部分講了如何手動製作和添加本地源;第二部分針對手動方法帶來的幾個不便進行了修正,給出了自動解決方案。

    一、手動製作和添加本地源

    每一次install時系統下載的軟件包,包括各個軟件所依賴的包都會保存在/var /cache/apt/archives/目錄下,選定某一次通過網絡安裝完自己所常用到的所有軟件之後,將該文件夾下的所有文件都複製到一個不常格式化的分區裏面,即可作爲以後重裝系統時的本地源,具體步驟如下。

    1、在某個系統重裝時候不會被格式化的磁盤分區下建立一個目錄,用於放所有下載的軟件包,另外建立一個目錄用於存放Packages.gz包,比如我的:

   

 mkdir -p /media/sda7/Backup/Ubuntu/Pakcages

mkdir -p /media/sda7/Backup/Ubuntu/dists/hardy/main/binary-amd64

    其中的binary-amd64根據自己的系統類型會有所變化,比如binary-i386等等,根據自己的機器酌情更改。

    2、複製文件到前面建立的文件夾下:

   

 sudo cp /var/cache/apt/archives/* /media/sda7/Backup/Ubuntu/Pakcages

    3、將建立Packages.gz包,裏面記錄了packs文件夾下面的軟件包信息,包括依賴信息。

   

 dpkg-scanpackages Packages hardy | gzip > dists/hardy/main/binary-amd64/Packages.gz

    4、加本地源

 sudo gedit /etc/apt/sources.list

    加入 deb file:///media/sda7/Backup/Ubuntu/ hardy main ,注意,這裏只是我電腦上的路徑,請依實際位置修改。如果出錯,請按照系統的出錯提示進行相應設置。

    5、設置完成

    完成以上設置和文件複製之後,就可以開始正常使用本地的源了和使用網絡上的源一樣操作。

   

 sudo apt-get update

sudo apt-get dist-upgrade

sudo apt-get install XXX

    這樣就完成了本地源的手動配置。


 二、自動備份軟件包和製作本地源

    手動備份軟件包時卻常常會出現另外一個問題,即新舊軟件包的重複。比如:原來最初備份的是kdesktop_4%3a3.5.8-0ubuntu7.3_amd64.deb,現在更新以後有了其更新版本:kdesktop_4%3a3.5.9-0ubuntu7.3_amd64.deb,將他們放在同一個備份文件夾的話,浪費磁盤空間,而且在用dpkg-scanpackages生成本地源的時候還會產生大量、煩人的警告信息。當然我們可以手動其刪除老闆本的包,但如果一次更新了幾十幾百個包的話,這個刪除工作恐怕就讓人爲難了。以下是一個腳本,更新完之後執行一下,就可以實現軟件包備份、陳舊包刪除、新軟件添加進本地源這一系列工作,省了不少事情,嘿嘿。

  

 #! /bin/sh
SOURCE=/var/cache/apt/archives
DEST=/media/sda7/Backup/Ubuntu/Packages
cd $SOURCE
for name in $(ls *.deb);
do
cd $DEST
rm $(dpkg --info $SOURCE/$name | grep Package: | sed 's/Package://')_*
mv $SOURCE/$name $DEST/
cd $SOURCE
done

cd $DEST
cd ..
dpkg-scanpackages Packages hardy | gzip > dists/hardy/main/binary-amd64/Packages.gz

 



原文地址:http://linux.chinaitlab.com/administer/758359_2.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章