红联Linux门户
Linux帮助

Ubuntu本地源制作与本地源的维护

发布时间:2012-05-26 10:50:51来源:Linux社区作者:铁名

  1、制作软件源


  使用Ubuntu一段时间的人都应该知道,所有从软件仓库中安装的软件包都会在本地的。


  /var/cache/apt/archives


  中进行缓存。而且每次安装完Ubuntu,重新上网安装中文语言包是个非常麻烦的事情,而且每次都要安装MP3等音频视频程序的版权驱动,十分麻烦。所以,本地源的制作就非常必要了。


  言归正传,首先需要安装软件包dpkg-dev


  #sudo apt-get install dpkg-dev


  等配置好后,在/下建立一个目录software作为软件包的存放地点,或者放在硬盘中任意位置。


  将/var/cache/apt/archives中的所有软件包拷贝到这个文件夹里。


  执行以下命令,进行软件源的制作


  #sudo dpkg-scanpackages /software /dev/null | gzip>/software/Packages.gz


  等待系统扫描完所有的软件包后,会返回命令行,并且在software文件夹中生成一个名为Packages.gz的压缩文件,存有这个文件夹中的软件包信息及其依赖关系。


  2、使用软件源


  接上文


  #sudo gedit /etc/apt/sources.list


  删除所有内容,添加


  deb file:/// software/


  保存。


  打开终端,输入


  #sudo apt-get update


  以更新本地的软件包列表


  然后可以用apt-get命令安装本地源中含有的软件包或者像我一样直接执行


  #sudo apt-get dist-upgrade


  命令更新系统。如果再懒一点,可以输入以下命令


  #sudo apt-get update;sudo apt-get dist-upgrade


  来直接进行以上工作。


  3、维护软件源


  如果软件源只是你在本地备份的软件包,以便给其他电脑安装系统时候所用,而平时你都是上网更新系统。那么维护你的软件源就显得比较重要了。过去我的做法是,一旦网上更新了系统,就把本地缓存文件夹中的更新软件包拷贝到本地源文件夹中,然后执行dpkg-scanpackages命令制作索引文件。但是久而久之问题也凸显出来,有些程序的更新文件,却不被索引到文件中去,还占用着巨大的空间。于是网上搜索发现有一个命令apt- get autoclean,于是乎试验之,发现收效甚微,却又苦于不了解依赖关系而不敢手动删除多余的软件包。更加郁闷的是,我的本地源已经有4.1G之巨,手动删除乃费力之举,而且一旦错删,后果可想而知。联想到制作本地源过程中出现在终端的警告信息,和Bash的IO重定向功能。本人今日做了如下试验:


  #sudo dpkg-scanpackages /software 2>/home/kernel/桌面/errors


  此命令意思为,将dpkg-scanpackages命令的标准错误输出重定向到桌面的errors文件中去,这样就可以在错误输出信息中找出重复的软件包并加以删除了。


  在此引用以下此错误文件的部分内容


  *********以下为内容*********

  dpkg-scanpackages: 警告: Package acroread (filename /media/localsources/software/acroread_9.3.3-1lucid1_i386.deb) is repeat but newer version;

  dpkg-scanpackages: 警告: used that one and ignored data from /media/localsources/software/acroread_9.3.2-lucid1_i386.deb!

  dpkg-scanpackages: 警告: Package adobe-flashplugin (filename /media/localsources/software/adobe-flashplugin_10.1.53.64-1lucid1_i386.deb) is repeat but newer version;

  dpkg-scanpackages: 警告: used that one and ignored data from /media/localsources/software/adobe-flashplugin_10.0.45.2-1lucid1_i386.deb!

  dpkg-scanpackages: 警告: Package apache2-utils (filename /media/localsources/software/apache2-utils_2.2.14-5Ubuntu8_i386.deb) is repeat;

  dpkg-scanpackages: 警告: ignored that one and using data from /media/localsources/software/apache2-utils_2.2.14-5Ubuntu8.2_i386.deb!

  dpkg-scanpackages: 警告: Package apt-transport-https (filename /media/localsources/software/apt-transport-https_0.7.25.3Ubuntu9.1_i386.deb) is repeat but newer version;

  dpkg-scanpackages: 警告: used that one and ignored data from /media/localsources/software/apt-transport-https_0.7.25.3Ubuntu8_i386.deb!

  dpkg-scanpackages: 警告: Package apt-transport-https (filename /media/localsources/software/apt-transport-https_0.7.25.3Ubuntu9.3_i386.deb) is repeat but newer version;

  dpkg-scanpackages: 警告: used that one and ignored data from /media/localsources/software/apt-transport-https_0.7.25.3Ubuntu9.1_i386.deb!

  dpkg-scanpackages: 警告: Package apt-transport-https (filename /media/localsources/software/apt-transport-https_0.7.25.3Ubuntu9_i386.deb) is repeat;

  dpkg-scanpackages: 警告: ignored that one and using data from /media/localsources/software/apt-transport-https_0.7.25.3Ubuntu9.3_i386.deb!

  *********以上为内容*********


  然后分析提示信息,得出什么软件包是需要留下的,什么软件包是需要删除的,再通过一系列的替换等命令,将此文件作成一个Shell脚本文件,赋予脚本文件可执行权限即可了。


  脚本文件如下内容(举例)


  *********以下为内容*********

  #! /bin/sh

  rm /media/localsources/software/acroread_9.3.2-lucid1_i386.deb

  rm /media/localsources/software/adobe-flashplugin_10.0.45.2-1lucid1_i386.deb

  rm /media/localsources/software/apache2-utils_2.2.14-5Ubuntu8_i386.deb

  rm /media/localsources/software/apt-transport-https_0.7.25.3Ubuntu8_i386.deb

  rm /media/localsources/software/apt-transport-https_0.7.25.3Ubuntu9.1_i386.deb

  rm /media/localsources/software/apt-transport-https_0.7.25.3Ubuntu9_i386.deb

  *********以上为内容*********


  执行后,即可见到本地源目录中不需要的文件已经被删除掉!


  说明:本文只是笔者今天突发奇想的一种方法,实际会有更简洁的解决办法,希望大家能够对笔者的方法进行批评和指正。