apt-get 更新本地化祥细步骤

apt-get 更新本地化祥细步骤

前言:linux一直因为太依赖网络而被人诟病,说linux不适合作为桌面系统,当然这个问题在过去可能很严重,现在网络如此普及,这已经不是什么问题了。但是依然有挑剔的人说,在windows下安个软件只要到网吧下下来回去就可以装了,而linux依赖(注1)非常之严重。安装一个软件要额外装其它的软件。其实这个问题理性地说,windows之所以下一个就能装了,那是因为windows装完了之后基本上什么都装齐了,而linux则不然,装完了之后可能只是一个基本系统。这一点从系统大小(注2)来看就可以看出来。再加上linux更新过于频繁,联网的用户时不时的就有更新。所以不联网的用户用起来感觉很是不爽。但是时至今日,linux的依赖不再应该成为桌面版发展的阻碍,因为各个发行版为了解决依赖都开发了相应的软件管理器,如debian的apt, redhat的yum,suse的yast, 当然这些都是基于网络的。虽然基于网络,却可以在自己本身没有网络时借助别处的网络(网吧啊,QQ群啊),实现自身的更新。所以该帖子就以ubuntu这个更新相当频繁的linux发行版下的apt为例来说明linux更新本地化的祥细步骤。

原理我也在先前的探索帖中写过(http://www.linuxdiyf.com/bbs/thread-181325-1-1.html),apt的更新步骤分为四步:

一、 apt-get update,依赖网络,更新软件列表,保存在本地
二、 apt-get upgrade命令的第一步:分析软件是否需要升级,并建立依赖关系,分析出需要更新的软件包列表。这一步,不需要网络

三、 apt-get upgrade的第二步,依据上一步所产生的更新列表,从网上下载所需更新。这一步显然是需要网络的,但是如果我们能取得更新软件列表,可以手动地从网络上下载,拷贝到本地。
四、 最后一步当然就是安装软件包啦,这一步在绝绝绝绝绝大多数情况下是不需要网络的,因为正常情况下动用了dpkg,依赖在第二步已经解决,所以不需要上网。但是也不例外,如果你安装flashplayer,那它的deb包会下载一个tar包,这点在ubuntu的software center里有明显的warning。还有,在安装opera浏览器的时候虽然提示依赖己满足,但是安装的过程中dpkg反而调用了apt去下载依赖包,不过新出的beta版已经解决了。 


  从原理上来看,我们需要在网络上做的就是apt-get update,然后就是第三步,下载更新的软件包了。那么其它的两步怎么做呢?也许你已经猜出来了,第一步更新列表后软件列表是存放在本地的,所以我们要找的就是软件列表存放在哪儿?根据apt-get的howto文档,更新的软件列表存放的位置是/var/lib/apt/lists,在该目录下除了软件列表以外还有一个lock文件和partial目录,这两个东西正常情况下都是空的,lock肯定就是锁定软件包管理器用的,即命令行下的apt,图形界面的更新管理器、新立得、软件中心都是调用的apt,而apt要分析依赖最终是为了dpkg服务的,在/var/lib/dpkg/info里有一堆的软件相关的内容,看似很重要,不过笔者曾将其删除,apt工作正常。此目录不在本帖说范围内。

  
  接下来是第三步,如果我们将得到了软件列表拷贝到本地的/var/lib/apt/lists下,那么接下来,启动更新管理器,apt就会分析软件的更新情况和依赖关系。产生下载列表。那么怎么取得更新列表呢?难道要在别处下载一遍?我在先前的探索帖里认为需要在虚拟机里更新一遍,但是后来一想,虚拟机和实体机是不一样的,虚拟机里更新的东西我自己的机子可能不需要,如果靠虚拟机来取得下载列表,还要再装一遍,那不是依然需要网络吗?我们要的是下载列表,而且是只针对本机更新的下载列表,在这个过程中我们并不需要下载任何东西,那么那个下载列表又放在哪儿呢?很遗憾,这个列表到底存放在哪儿我并没有找到,但是我们依然可以通过别的方法得到,那就是在本地未联网的情况下“安装”更新。显然本地并未联网,会出现错误提示,但是我们要的就是这个提示,因为它会告诉我们哪些软件包需要下载而又无法下载,请看图吧。
  
  没错,只要ctrl+a全选,ctrl+c拷贝即可,你就得到了软件列表,不过在粘贴之前不要关闭上面的窗口,否则粘贴不到任何东西。如下图:
  
  剩下的事情只是对列表进行小小的处理了,先看下下面的图:
  
  好了,从上面的一条命令可以看出已经提取下载连接所在的行了,懂一点shell的人肯定知道怎么处理了,只要用sed工具把http前面的头去掉就可以了,而开头都是一样的,所以,请看图:
  

更新:修改下载列表,直接用vi编辑器更方便。
  
  接下来就是下载了,话说网吧里都是windows,光知道下载列表难道要一个一个下?显然不需要,linux我们有强大的wget命令,那windows下呢?也有,如果windows下实在找不到工具,那就下载wget for windows吧。更新包全下载回来之后怎么安装?还是根据apt的howto,apt默认的软件缓存是在/var/cache/apt/archives下,所以下载回来的包就放在该目录下即可。

至此理论问题全部解决了,接下来总结步骤如下:
一、取得更新列表:如果你附近有使用ubuntu的朋友,你可以从他那里直接拷贝/var/lib/apt/lists/下除了lock和partial的所有文件。反之,你可能需要从QQ群里和别人要他们的list文件夹,很小,让别人传给你或者发个邮件寄给你。最次的你可以在网吧开个虚拟机只用livecd,不要安装,换成你自己的源,apt-get update一下或者在更新管理器里check一下即可,取得下载列表就可以下机了。当然,我还是建议大家加几个linux的群,找ubuntu用户直接传给你,因为有的网吧可能封的太厉害,虚拟机都装不了啊。

======================================================
二、取得下载列表:回来之后,把列表拷贝到本地的/var/lib/apt/lists下,然后启动更新管理器或语言支持,点击安装,复制错误信息。如果在命令行里用apt-get upgrade(install xxx)那请用重定向将错误信息重定向到文件里,直接回车亦可取得下载列表,就是sudo apt-get upgrade 2>list.txt 这样list.txt就是所需的文件。接下来就是提取下载列表了,在图形界面和命令界面的错误信息有点区别,图形化的需要去头,命令行下的需要掐头去尾。而头尾都是相同的,所以很简单,当然如果你的源很多的话,结尾说无法解析的网址可能不一样,那就一点一点地来。如:


cat list.txt|grep deb|sed ‘s/错误信息头//g’>list3.txt, list3.txt就是最终的下载列表。这里简单说一下,grep是为了过滤出deb行,之后,用sed工具去头去尾,sed 后接单引号,s/表示search,//表示替换成空,相当于删除了,而最后的g表示global,即全局替换。如果需要去尾的话要用两次sed。

======================================================

还是直接用vi方便

======================================================

三、去网吧下载,安装wget for windows,应该下第一个setup那个。安装好后因为windows和linux不一样,你可以搜索设置环境变量。不设的话就需要进行具体的wget目录下。看下图:



四、下载完成后就回来把软件包放到/var/cache/apt/archives下。当然,如果你嫌根目录不够的话,可以考虑先把该目录改名,再在家目录下建个目录指向/var/cache/apt/archive,把原目录中的lock和partial复制到新目录中,这样就有足够的空间了,但是权限一定要设置好,属主也要改成root。




注1:所谓依赖虽然是万恶的,但是也是可以理解的,依赖就意味着需要,记得在windows下删除文件的时候,有时会出现说“可能导致某些程序无法使用”,这与依赖如出一辙。依赖并非linux独有。


注2:linux系统的大小不像windows那样光看C盘就行了,linux下所有目录都从根目录开始,因为有挂载点的概念,所以你可以把系统有关的目录单独分区。一般的,linux中能够挂载的系统目录有根目录(/),/usr,/var。所以如果你想算算linux系统的大小,把这三个目录所在的分区的使用大小加起来就行了。不要把/home算在里面,否则请把windows下的我的文档之类的目录大小加到windows下再与linux比较。

































Linux学习网收集整理 ,(如果您觉得本站不错,请告诉身边的朋友,或转载到论坛、百度知道、贴吧等,记得带网址哟,不胜感激!

你可能感兴趣的:(apt-get 更新本地化祥细步骤)