设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
Linux 发行版讨论区 —— LinuxSir.cn
›
LFS(LinuxfromScratch)
›
LFS下滚动升级(rolling upgrade)怎么实现?
返回列表
查看:
1024
|
回复:
7
LFS下滚动升级(rolling upgrade)怎么实现?
[复制链接]
swordhui
swordhui
当前离线
积分
303
IP卡
狗仔卡
发表于 2010-4-17 18:24:41
|
显示全部楼层
|
阅读模式
我有glibc2.10.1, 想升级到glibc2.11. LFS下有简单的包管理器, 记录了 glibc2.10.1安装的所有文件. 升级的步骤如下: (应该是这样)
1. 编译glibc 2.11, 用tar打包并记录所有文件
2. 删除原来glibc2.10.1包中的所有文件
3. 用tar将glibc 2.11的所有文件解压到根目录
问题是删除脚本依赖于bash和glibc, tar依赖于glibc... 有什么好的方法?
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
swordhui
swordhui
当前离线
积分
303
IP卡
狗仔卡
楼主
|
发表于 2010-4-17 18:39:42
|
显示全部楼层
方案2:
1. 编译glibc 2.11, 记录所有文件信息,打包
2. 在根目录解压二进制包, 直接覆盖glibc 2.10.1
3. 然后在卸载glibc 2.10.1. 先检查glibc 2.10.1 包里的所有文件, 如果它也出现在glibc2.11包里, 则跳过,否则删除.
哪个方案好些?
回复
支持
反对
使用道具
举报
显身卡
聚焦深空
聚焦深空
当前离线
积分
1133
IP卡
狗仔卡
发表于 2010-4-18 20:22:48
|
显示全部楼层
这是个策略和经济问题。
懒人做法:
除非看到感兴趣的新特性、或安全相关补丁,从不升级系统,特别是基础软件包;
即使升级也要保证损害最小化,如升级 Xorg 可仅升级 X server 部分;
如涉及基础软件包大更新,x.y.z -> x.y+,则重做系统(不停机,在线更新系统可行,但费脑子,不值得)。
回复
支持
反对
使用道具
举报
显身卡
swordhui
swordhui
当前离线
积分
303
IP卡
狗仔卡
楼主
|
发表于 2010-4-18 21:55:06
|
显示全部楼层
方案1需要一个静态链接的删除/安装程序,即使删掉C库和bash, 照样 可以把新包装上去.
方案2需要冒一些险, 不知道动态库还在内存中, 硬盘上的文件已经被更新了会出现什么后果,有空研究一下.
我打算在下个LFS系统里正式加入包管理系统, 改费脑子就费点吧, 相信以后会用着很爽...
回复
支持
反对
使用道具
举报
显身卡
聚焦深空
聚焦深空
当前离线
积分
1133
IP卡
狗仔卡
发表于 2010-4-18 22:42:12
|
显示全部楼层
包管理和前面懒人做法不冲突。
建议看看本版升级 glibc 相关讨论。
建议查查 mmap() tar install cp rm。
PS: 可以用 google 搜索。
http://www.linuxsir.cn/bbs/thread355298.html
http://www.linuxsir.cn/bbs/post2018084-15.html
回复
支持
反对
使用道具
举报
显身卡
swordhui
swordhui
当前离线
积分
303
IP卡
狗仔卡
楼主
|
发表于 2010-4-19 08:33:38
|
显示全部楼层
谢谢深空兄, 正是我需要的.
既然我有软件包文件列表, 表里也有文件权限等信息, 照表使用install即可.
然后再用unlink删除旧包中有,新包中没有的文件.
也即采用方案2.
回复
支持
反对
使用道具
举报
显身卡
swordhui
swordhui
当前离线
积分
303
IP卡
狗仔卡
楼主
|
发表于 2010-4-19 08:42:56
|
显示全部楼层
在更新期间, 只有bash在内存中,不停的调用install.
更新bash, 不会有问题. 新的bash程序会使用新的版本,更新前启动的bash程序,在内存中使用旧版本.
更新install, 不会有问题. install程序被修改后, 下次再调用install, 会启动新版的install.
c库呢? 更新后, 同bash一样,旧的在内存中. 新程序启动新版本.
回复
支持
反对
使用道具
举报
显身卡
swordhui
swordhui
当前离线
积分
303
IP卡
狗仔卡
楼主
|
发表于 2010-4-19 09:11:02
|
显示全部楼层
列举一种滚动更新可能会失败的情况.
libc(或bash)使用了文件A, 但不是一直保持打开状态, 只是在某些情况下打开A, 使用,然后关闭.
第二个假定是 旧libc+旧A工作正常, 新libc+新A工作正常, 旧Libc+新A工作不正常.
更新程序更新了libc和A. 旧的libc一直在内存中, 等下次打开文件A时会变成新A, 导致出现问题.
如果A是另一个按需加载的动态链接库,就是传说中的DLL HELL的问题...
养成好的编程习惯很重要
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表