casio1374633

导航

 

雕啸长空
新手重新系统的概率很高,每次重装系统后都要经过漫长的apt-get install来装回那些我们自己所需要的,但系统安装光盘里又没有的软件,实在是件痛苦的事

终于,经过无数次的试验,找到了解决办法。
每一次install时系统下载的软件包,包括各个软件所依赖的包都会保存在/var/cache/apt/archives/目录下,选定某一次通过网络安装完自己所常用到的所有软件之后,将该文件夹下的所有文件都复制到一个不常格式化的分区里面,作为以后重装系统时的本地源,可谓省时省心省力。
以下为操作过程,为验证,特意重装一次系统,无语。
一、在自己的根目录下建立一个目录,用于放所有下载的软件包,目录名随自己喜欢,建议新手在自己的根目录下进行以下操作,以避免操作权限问题的困扰。
mkdir ~/ packs

二、复制文件到packs文件夹下,目录依各人情况变化。
sudo cp /var/cache/apt/archives/* ~/packs

三、将建立Packages.gz包,里面记录了packs文件夹下面的软件包信息,包括依赖信息。
dpkg-scanpackages packs /dev/null |gzip > packs/Packages.gz
完成此操作后,将packs文件夹复制到一个不常格式化的分区中,作为长久使用,比如我将它放在一个fat32的分区时面,路径是 /media/hda6/linux/soft/packs

四、加本地源
sudo gedit /etc/apt/sources.list
加入 deb file:///media/hda6/linux/soft/packs/ edgy main ,注意,这里只是我电脑上的路径,请依实际位置修改edgy 是我的ubuntu版本,main也不是固定的,也可以用restricted等,只是在下面第五步中的操作中对应建立的目录结构不同而已,这里只举main的例子。有兴趣的同仁可以加一个试试,系统的出错提示会有文件夹设置信息。

五、设置packs目录下的目录结构
在packs目录下建立这样的结构
packs/dists/edgy/main/binary-i386/
packs/packs/ #也就是在packs下再建立一个packs
以上这两层的目录用于放置不同类型的包,据我电脑上试验过程中的提示,好像binary-386目录下放的是各种软件的安装包,packs/packs/目录下放的是各个依赖的包以及系统更新的包,基本上是以lib开头的,最保险的办法是把所有包都复制到这两个文件夹下面。

六、设置完成
完成以上设置和文件复制之后,就可以开始正常使用本地的源了和使用网络上的源一样操作。
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get install XXX

Enjoy Your Ubuntu!
--------------------------------
刚刚试了一下更简单的办法,完第一个目录结构后,把Packages.gz那个包放在binary-i386文件夹下面,然后把所有的deb包复制到/var/cache/apt/archives/下就可以了。
估计apt-get install的工作原理是这样的,先从Packages.gz包里读取软件列表和包依赖信息,安装某个软件时先扫描本地archieves目录,如果可以找到对应的包,就开始安装,否则从源里下载该包。

其实我实现这些操作的思路很简单啊
1、备份手上已有的软件包
2、建立这些软件列表和依赖信息 packages.gz
3、建立目录结构,可随意在本地源地址后加上 main、 restricted之类的关键字,然后apt-get update,系统会给出出错提示,里面就包含了各个关键字对应的目录结构,
4、添加本地源 deb file:/// dir/dir/dir/...

建议大家在碰到系统错误时认真看系统的提示,linux的系统出错提示可不像比尔先生的那样都是说废话
-------------------------------------------
-----------------------------------------
下载DVD版本,然后把它作为源. 有两种方式.

1. 可以直接放在硬盘上,然后mount到某个目录里,比如: sudo mount -t iso9660 -o loop xxx.iso /mnt

然后修改sources.list,改成 deb file:///mnt edgy main .... 后面和你的原来的格式一样.

2. 刻盘.然后在新立得里面用将CD Rom设置为源
-----------------------------------------------------
下次要是再sudo apt-get update时,有可能有新的包文件,是不是还要这样添加呢,
还有如果自己从别的站点下载的包,可否也加入到其中而用sudo apt-get install xxx来安装呢?

它的原理是从Packages.gz里面读取软件包及依赖信息,如果你往里面加了新的包,就要重新执行
dpkg-scanpackages packs /dev/null |gzip > packs/Packages.gz
来更新里面的文件信息了,然后再
sudo apt-get udpate
应该就OK了,

如果是你自己下载的包,那必須是deb的包,而且保证把它所依赖的包都 下到本地。

最好是在那准备重装系统之前把/var/cache/apt/archives/下面的文件都保存下来,再建立这些文件的packages.gz
-----------------------------------------
把你下载的东西放一个地方,然后用sudo ln -s 到/var/cache/apt/archives 不就得了?
-------------------------------------
我是直接在别的地方建的文件夹
我的操作: 引用:
mkdir -p /media/hda9/ubuntu/packages/dists/dapper/main/binary-i386
cd /media/hda9/ubuntu/packages/dists/dapper/main/binary-i386
sudo cp /var/cache/apt/archives/* ./binary-i386/
dpkg-scanpackages ./binary-i386/ /dev/null |gzip > ./binary-i386/packages.gz


然后,编辑/etc/apt/sources.list 加入deb file:///media/hda9/ubuntu/packages/ dapper main
保存!
-----------------------------------------------------

我的是ubuntu,到第三步时提示找不到 dpkg-scanpackages 这个命令,要用什么命令???------装包 dpkg-dev
=============================================
  楼主辛苦了,但是为了避免误导更多人,我还是在这里做个恶人吧。
  当使用sudo apt-get install时,它是先在/var/cache/apt/archives中查找,当有文件时就不用下载了,没有则在网上查找。
  而即使断网,只要/var/cache/apt/archives中有需要的文件就依然能够安装,我已做过实验。
  因此,加源的做法实是事倍功半。
  只需要备份/var/cache/apt/archives的内容即可。
  嘿嘿,我也是做过实验的。

  有一点要说明的就是,安装软件是需要文件的安装信息的。
  也就是说我的实验有一步是先上网执行sudo apt-get update,通过这一步得到安装包的信息。
  然后断网安装软件是没有问题的。
  这一点和FreeBSD类似。
_________________
回复楼上的:为验证楼上所说,特重装系统一次,耗时近半个多小时,
结果:坚持原观点不变,即楼上所说有误
以下为操作过程
1.重装系统,并不进行网络配置,即保持断网状态
2.修改sources.list,只留下CDROM,其他源全部删除
3.复制事先备份好的软件包sudo cp /media/hda6/linux/soft/packs/* /var/cache/apt/archive/
4.sudo apt-get update
运行结果
fideas@zerone:~$ sudo apt-get update
Ign cdrom://Ubuntu 6.10 _Edgy Eft_ - Release i386 (20061025) edgy/main Translation-en_US
Ign cdrom://Ubuntu 6.10 _Edgy Eft_ - Release i386 (20061025) edgy/restricted Translation-en_US
Reading package lists... Done
fideas@zerone:~$
5.尝试安装第一个软件(注:确保该软件存在于刚才所复制的软件包中)
fideas@zerone:~$ sudo apt-get install scim-qtimm
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Couldn't find package scim-qtimm
fideas@zerone:~$
6.尝试安装第二个软件
fideas@zerone:~$ sudo apt-get install scim-bridge
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Couldn't find package scim-bridge
fideas@zerone:~$
7.尝试安装第三个软件
fideas@zerone:~$ sudo apt-get install sun-java5-jdk
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Couldn't find package sun-java5-jdk
fideas@zerone:~$

8.失去耐心,放弃安装其他软件的尝试

9.结论,楼上所说才是真的误导,试分析系统的提示信息
fideas@zerone:~$ sudo apt-get install sun-java5-jdk
Reading package lists... Done---读取软件列表
Building dependency tree ---建立包依赖信息
Reading state information... Done---读取(软件准备)状态
E: Couldn't find package sun-java5-jdk---找不到XX软件包
fideas@zerone:~$
看系统的提示就很清楚了,
当执行apt-get install时,系统首先扫描的是软件列表信息,也就是我前文所提到的通过dpkg建立的packages包里的信息;
然后是读取里面的包依赖信息;
第三部是检查各个软件包是否准备好;---个人认为,这个时候系统才开始扫描/archive文件夹
第四部找不到相关信息,退出安装;---如果这时网络是通的,那就会到网络源里面下载对应软件包。
联想一下,假如楼上所说成立,那ubuntu完全可以把apt-get update ,apt-get dist-upgrade,两个命令删除了,因为它们根本没有存在的意义了。

10.总结:没有试验就没有发言权。

posted on 2013-04-27 19:54  casio1374633  阅读(317)  评论(0编辑  收藏  举报