5 22 2008
Ubuntu建立本地备份源
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个”/“之间的空格(改了,不再需要),然后保存。 后来合并到一条命令就实现了。

我执行%s/[\t ]\+install/ /gc命令时提示:bash: s/[t: 没有该文件或目录
@zzzyy
那个命令是运行在Vim下的,现在我改了一下,把两个步骤合成一个,不再需要用Vim。
root@ubuntu:~# sudo cp /var/cache/apt/archives ~/pool
cp: 略过目录 “/var/cache/apt/archives”
这是什么意思呀,怎么没复制过去呢。
@mayzhang1024
噢,我忘记添加“-r”参数了,表示递归复制,应该是
sudo cp -r /var/cache/apt/archives ~/pool