LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 906|回复: 7

关于 upgradepkg

[复制链接]
发表于 2005-8-12 16:31:47 | 显示全部楼层 |阅读模式
"Slackware Linux Essentials" (The Second Edition) 上写到:“upgradepkg works by first installing the new package and then removing the old package so that old files are no longer around on the system. ” (见 18.2.4 节)
但事实上 upgradepkg 的过程恰好相反,是先删除原来的软件包然后再安装的。按道理说也应该是这样不删除原来的怎么装新的?请教一下《Slackware Linux Essentials》为什么会这么写?
发表于 2005-8-12 16:42:16 | 显示全部楼层
这是正确的,过程的确如此,先以新版本的文件覆盖旧的,然后删除老版本软件包中不包含在新版本中的文件,一个典型的例子是/usr/doc/package-version这个目录。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-12 19:19:58 | 显示全部楼层
/usr/doc/<package-version> 这个目录下无非是些 README, ChangeLog, COPYING, AUTHORS 之类的东东,不知道有什么玄机,还请 troll 兄指教一二。
回复 支持 反对

使用道具 举报

发表于 2005-8-12 19:31:32 | 显示全部楼层
没什么玄机啊,我是说因为这个目录的名字总是package-version,所以一般软件包升级到新版本,旧版本所带的这个目录都是会被删除的,除非像xmms-1.2.10-i486-2升级到xmms-1.2.10-i486-3这样build升级。
回复 支持 反对

使用道具 举报

发表于 2005-8-13 00:55:39 | 显示全部楼层
troll兄,这就是为什么有*.new文件出现的原因吧!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-13 08:36:17 | 显示全部楼层
但是我在做 upgradepkg 的时候发现是先 --> Deleting xxx.xxx 然后再安装的。
而且,如果说真的是先安装新的软件包,把旧的软件包中的同名文件覆盖的,最后再删除旧软件包中不包含在新软件包中的文件的话,怎么可能有这么多个 --> Deleting xxx.xxx。尤其是升级 Mozilla 的时候显示了好几屏的 Deleting。
回复 支持 反对

使用道具 举报

发表于 2005-8-13 08:41:57 | 显示全部楼层
但一般都会保留原配置文件改名叫*.old的吧。
按照那个配置文件就可以配新的配置文件。
回复 支持 反对

使用道具 举报

发表于 2005-8-13 10:31:53 | 显示全部楼层
刀兄,你再观察一下,在输入upgragepkg到deleting xxx,之前会有一段时间间隔,这就是在安装新文件。

.new文件是如何处理的,看看下面这个函数就知道了


[PHP]config() {
  NEW="$1"
  OLD="`dirname $NEW`/`basename $NEW .new`"
  # If there's no config file by that name, mv it over:
  if [ ! -r $OLD ]; then
    mv $NEW $OLD
  elif [ "`cat $OLD | md5sum`" = "`cat $NEW | md5sum`" ]; then # toss the redundant copy
    rm $NEW
  fi
  # Otherwise, we leave the .new copy for the admin to consider...
}[/PHP]

没有.old文件会留下,因为配置文件不是包自带的,而是由.new文件重命名得来的,所以删除包时不会被一并删除。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表