zy_sunshine 发表于 2010-8-25 22:08:35

MagicInstaller-rc14

1、rpm安装模式已经正常了。
2、恢复了包依赖分析,basepkg_list还可以用,但是尽可能不要用remove_deps来调节包顺序,除非调节后的pre_install可以正常执行。
3、添加了一个新模式,copy install mode。但是被隐藏了,如果要使用这个模式,请按照以下说明操作。

需要解释一下这个模式安装的原理和开启的方式。

* 开启方式,在spec/下添加 两个文件夹 etc_install 和 rpmdb,并在etc_install 下放置一个空的脚本 etc_install.sh

OK现在已经开启了,下一步要解释一下相关配置,和安装原理。

* 相关配置,spec/etc_install 下应该放置需要的配置文件(可以打成包),这些完全随意,因为MI只负责执行你的脚本spec/etc_install/etc_install.sh 。rpmdb 不用配置。
* MI打包时做的操作: 读取所有rpm 在 spec/rpmdb 中生成rpm数据库并打包为rpmdb.tar.bz2 放置在光盘中的packages目录下,将 spec/etc_install目录打包为 etc.tar.bz2 放置在 packages目录下。
* 安装原理,安装时利用rpm2cpio解压所有rpm至目标盘符,解压完成后将会把rpmdb.tar.bz2中的rpm数据库释放到新系统中,接着将 etc.tar.bz2 解压到目标系统中的 tmp/MI_configure 目录下,chroot 进入目标系统并执行其中的/tmp/MI_configure/etc_install.sh,现在你应该知道在etc_install/ 下应该放置什么了 :) 并且应该知道需要在etc_install.sh 写些什么了 ;)

几个细节:
etc.tar.bz2 和 rpmdb.tar.bz2 在目标系统中使用完后就会自动清除因此,重启系统后没有 tmp/MI_configure目录。
如果不想每次都生成 rpm 数据库,那就不要运行 scons -c 命令,如果想要重新生成rpm数据库需要将spec/rpmdb/下的所有文件都删除(包括一个隐藏文件)
如果不开启 copy install 模式 那么就和上一个版本的MI差不多。
etc_install.sh 会默认传给它一个参数即 $1 ,为脚本所在目录(当然是chroot后的)。
开启 copy install 后在MI安装系统时会给予一个选项,需要选择 copy install mode 安装,否则就是 rpm 安装。

最后说一下etc_install 目录中需要的文件和 etc_install.sh需要做的事情。
etc_install.sh 需要做的是将目标系统缺少的配置文件(这些文件应该也放置在etc_install目录下)拷贝过去,大多是etc目录下的东西,但是其他的目录中有可能也有,最好写一个比较两个目录中所有不同文件的批处理。先用 rpm2cpio 释放到一个临时目录,然后与当前系统中除
home lost+foundmediamntprocsrvsystmptmpfs 以外的所有文件目录中的文件相比较。
etc(我估计这个应该全部拷贝过去)
dev下不需要所有的设备文件,但是我发现这几个应该拷贝过去
fdfullfusenullptmxpts(一个包含设备文件的目录)randomstderrstdinstdoutttyurandomzero
(怎么没有console ?? 上面只做参考,因为是查看的fedora目录下的dev文件)

[ 本帖最后由 zy_sunshine 于 2010-8-26 10:18 编辑 ]

haulm 发表于 2010-8-25 22:32:01

:shock:也就是说解压所有的rpm,挑选有必要的脚本进行按顺序运行即可,脚本可以从分析得出,但执行顺序就只能人工了。

[ 本帖最后由 haulm 于 2010-8-25 22:33 编辑 ]

zy_sunshine 发表于 2010-8-25 23:18:51

挑选有必要的脚本进行按顺序运行即可,脚本可以从分析得出,但执行顺序就只能人工了。
我们从头到尾都不执行rpm中的依赖脚本,只是将rpm中缺少的配置文件释放过去。

zy_sunshine 发表于 2010-8-25 23:19:35

至于哪些配置文件需要复制过去,就需要自己分析了。

haulm 发表于 2010-8-26 00:08:44

原帖由 zy_sunshine 于 2010-8-25 23:19 发表 http://www.linuxfans.org/bbs/images/common/back.gif
至于哪些配置文件需要复制过去,就需要自己分析了。
这个模式甚好,只是从实现难度来看,可能还是将所有脚本读取出来,然后人工调整顺序还要简单。。。,第一次脚本确认非常困难,但如果确定下来,以后再调整就简单多了。而配置移动可以用于连脚本都很难完的其它设置。

haulm 发表于 2010-8-26 00:13:01

第一次的脚本顺序完全可以用旧模式MI导出的顺序导出其脚本,然后测试安装给出log,交给人工调整顺序、添加修改或添加文件,最后完成干预。

haulm 发表于 2010-8-26 00:22:08

我觉得是不是拐了一圈。。。。第一步,先确认所有RPM包的依赖顺序;第二步,解压所有的RPM包;第三步,解压RPM数据库;第四步,按照 RPM包的依赖顺序执行脚本;第四步,分析日志,填写修正脚本;第五步,生成最终的ISO。
新模式比旧模式优越区别:
1. 脚本最后执行,优于边安装边执行,避免脚本运行的部份依赖缺失;
2. rpm数据库在安装前就准备好了,加快了安装速度;
3. 便于调试,因为脚本运行失败的机会先小于旧模式,其次因为仍按原rpm依赖顺序执行的脚本,出错机会更小;
4. 方便调试,给出日志,直接可以找出有缺失的包或者是脚本顺序的不对。
5. 脚本很可能是完全可以固定下来的,成为MI建立系统的独特脚本。

haulm 发表于 2010-8-26 00:51:44

再说简单点就是,旧模式边安装边执行脚本,出错后分析日志重新执行一次脚本,而新模式从只顾安装文件,最后执行脚本,所以无所谓修正执行了。。。
顺序仍然还是要参照rpm依赖分析,虽然还是有出错机率,但要小的多。

zy_sunshine 发表于 2010-8-26 09:40:23

原帖由 haulm 于 2010-8-26 00:51 发表 http://www.linuxfans.org/bbs/images/common/back.gif
再说简单点就是,旧模式边安装边执行脚本,出错后分析日志重新执行一次脚本,而新模式从只顾安装文件,最后执行脚本,所以无所谓修正执行了。。。
顺序仍然还是要参照rpm依赖分析,虽然还是有出错机率,但要小的多。 ...

copy install mode 模式从头到尾都不执行 rpm 中的脚本(解压 rpm 的顺序可以无序)。因此出错几率为 0 。只是最后将缺少的配置文件需要复制过去,因此最后的安装状态和LiveCD的安装状态相同。(etc_install 相当于 diff patch 功能)

haulm 发表于 2010-8-26 23:12:27

原帖由 zy_sunshine 于 2010-8-26 09:40 发表 http://www.linuxfans.org/bbs/images/common/back.gif


copy install mode 模式从头到尾都不执行 rpm 中的脚本(解压 rpm 的顺序可以无序)。因此出错几率为 0 。只是最后将缺少的配置文件需要复制过去,因此最后的安装状态和LiveCD的安装状态相同。(etc_install 相当于 dif ...
别的不提,就是有点占用空间哪,新的MI就算用旧模式,生成的ISO也已经大出6M。

zy_sunshine 发表于 2010-8-27 10:52:22

:? 是吗? 那我再单独发布一个root.step1.tar.bz2吧,可能是这个东西加了些copy install mode 需要的文件变的稍大些了。

zy_sunshine 发表于 2010-8-27 18:49:26

不行,去不了多少,如果想要缩小就自己来吧,下面几个文件可以去掉

bindir/kmodules-*.tar.bz2 中的所有内核模块

bindir/root.step1.tar.gz 中的sbin/ldconfig /usr/bin/strace
如果不用copy install mode
/bin/cpio
/usr/bin/rpm2cpio
可以删除,并指向busybox

其实这样删除后顶多减少1mb

还有新版本MI的内核 比旧版本MI的 小一些,不知道当时是怎么配置的.....小了好呵呵.

兽医博士 发表于 2011-7-28 10:14:44

楼上的两位辛苦了

haulm 发表于 2011-10-17 20:34:46

scons: Reading SConscript files ...
TypeError: 'builtin_function_or_method' object is unsubscriptable:
File "/doc/bakcup/mI/magicinstaller2-48/SConstruct", line 148:
    SConscript('SConstruct-mi')
File "/usr/lib/scons/SCons/Script/SConscript.py", line 612:
    return apply(method, args, kw)
File "/usr/lib/scons/SCons/Script/SConscript.py", line 549:
    return apply(_SConscript, + files, subst_kw)
File "/usr/lib/scons/SCons/Script/SConscript.py", line 259:
    exec _file_ in call_stack[-1].globals
File "/doc/bakcup/mI/magicinstaller2-48/SConstruct-mi", line 93:
    misrc.make()
File "scripts/PkgMaker.py", line 97:
    self.source_list, self.build_cmds = self.all_steps()
File "scripts/PkgMaker.py", line 89:
    srcs, cmds = getattr(self, step)()
File "/doc/bakcup/mI/magicinstaller2-48/SConstruct-mi", line 84:
    'cp -a %s %s' % (inst_file, dest_file)]

zy_sunshine 发表于 2011-10-17 23:12:49

请给出操作步骤..
运行目录, 运行命令. 之前有做过什么配置..
页: [1] 2
查看完整版本: MagicInstaller-rc14