5 22 2008

Ubuntu建立本地备份源

Published by muzuiget at 5:50 下午 under Linux

Ubuntu的apt就是强悍,装软件非常方便,前提是能连接互联网,网速也要快才行,对于不能联网的电脑就 有点郁闷了,装一个软件还有把依赖的包也下载回来才行,但依赖关系蜘蛛网那样纵横交错,哪个搭哪个,非手工能搞定。重装也是比较痛苦的(如果没有单独挂在 /usr),参考网上流传的《Ubuntu Linux系统三种方法添加本地软件库》(出处不知道了),最好系统事先装好一切常用软件,播放器解码器之类的,然后建立一个备份的本地源,方便重装和给不能联网的电脑使用。

导出系统安装包列表
apt下载的包是保存在“/var/cache/apt/archives“里,如果没有使用

sudo apt-get clean

清除过的话,清除过也没关系,我找到一个好方法重新下载回来,执行

dpkg --get-selections | grep -v deinstall | sed 's/[\t ]\+install//g’ > ~/packageslist

这样就把系统中已经安装的包列表导出到“packageslist“文件中。原先还要用Vim处理的,看注1

重新下载包
然后就是包系统中的包重新下载回来,当然在“/var/cache/apt/archives“已经有的就不用下载了,先

sudo apt-get update

更新一下包列表,如果有更新就更新啦,然后

sudo apt-get autoclean

删掉过时的包。然后就重新下载包,执行

cat ~/packageslist | xargs sudo apt-get -d --reinstall -y install

这命令要解释一下,至于要用cat和xargs配合,是因为开始我用

sudo apt-get -d -reinstall -y install < packageslist

却没有执行下载过程,所以要用cat和xargs配合。apt那一段参数“-d”表示只下载不安装,“-reinstall”表示重新安装,如不用这个参数,那么系统已经有装的包就不下载了, “-y”表示有询问是自动回答是,而不加这个参数在询问那行却退出了(描述不清楚,试试就知)。一段漫长的等待后,在“/var/cache/apt/archives“里应该塞满了deb文件了。

建立包描述信息文件
先把“/var/cache/apt/archives“备份出来,删掉partial文件夹(这个是下载包时的临时文件夹,一个包完整下载后就会被移出,一般是空的)

mkdir ~/pool
sudo cp -r /var/cache/apt/archives ~/pool
cd pool
rmdir archives/partial

然后建立包信息

dpkg-scanpackages archives /dev/null | gzip -9c > Packages.gz

这样就基本完成了。

添加光盘和闪盘
光盘和闪盘都是直接把pool文件夹复制过去就行了
添加到光盘还可以用图形化界面的APTonCD

sudo apt-get install aptoncd

APTonCD会自动搜索“/var/cache/apt/archives“并建立iso镜像,很简单。

使用本地源
在sourse.lst里添加

deb file:/media/cdrom0/pool ./

其中目录自行修改,注意后边的空格和点,因为文件目录和官方的不同,所以不能用

sudo apt-cdrom add

来添加。又或者在“软件源”,“第三方软件”,选择“添加光驱”。最后就是使用

sudo apt-get update

更新列表啦。

注1:

原来是2个步骤的,先

dpkg --get-selections | grep -v deinstall > ~/packageslist

把系统安装过的包列表导出,然后用Vim,执行Ex命令

%s/[\t ]\+install/ /gc

把列表格式整理为包名字用空格分隔,注意“\t“后和2个”/“之间的空格(改了,不再需要),然后保存。 后来合并到一条命令就实现了。

4 Responses to “Ubuntu建立本地备份源”

  1. zzzyyon 14 6 2008 at 4:23 下午

    我执行%s/[\t ]\+install/ /gc命令时提示:bash: s/[t: 没有该文件或目录

  2. muzuigeton 14 6 2008 at 7:49 下午

    @zzzyy
    那个命令是运行在Vim下的,现在我改了一下,把两个步骤合成一个,不再需要用Vim。

  3. mayzhang1024on 14 12 2008 at 5:29 下午

    root@ubuntu:~# sudo cp /var/cache/apt/archives ~/pool
    cp: 略过目录 “/var/cache/apt/archives”

    这是什么意思呀,怎么没复制过去呢。

  4. muzuigeton 15 12 2008 at 10:23 上午

    @mayzhang1024
    噢,我忘记添加“-r”参数了,表示递归复制,应该是
    sudo cp -r /var/cache/apt/archives ~/pool

Trackback URI | Comments RSS

Leave a Reply