* MagicInstaller 当前的功能集合 * 软盘启动、光盘启动、硬盘启动; * 能够从光盘、硬盘中获取软件包完成安装; * 安装过程中能够配置帐号、启动管理器; * 支持 PS/2 鼠标和 USB 鼠标; * 支持配置 Xwindow; * 启动 MagicInstaller 下载或生成 .iso 文件之后,即可准备启动 MagicInstaller 从而实际安装系统。 . 软盘启动 将准备好的软盘插入软盘驱动器,在 linux 环境下,以根用户身份运行: cat mbboot > /dev/fd0 并等待操作完成。操作完成后启动软盘即制作完毕。 若在 Windows 环境下,则请使用 rawwrite.exe 将 mbboot 写入软盘。 . 光盘启动 可使用各种刻盘工具将生成或下载得到的 .iso 刻成光盘。如果使用 cdrecord,可以使用命令 cdrecord -eject -v dev=... xxx.iso(dev 的值可以通过运行 cdrecord -scanbus 来获得)。 . 硬盘启动 在 linux 环境下,可以加载 mbboot,从中将 initrd.gz 和 vmlinuz 复制到 /boot 分区 (为了避免冲突,在复制时可以把 initrd.gz 和 vmlinuz 分别改名为 mb-initrd.gz 和 mb-vmlinuz),并按以下提示修改启动管理器配置文件: Grub title MagicInstaller root (hd0,1) kernel /mb-vmlinuz ro root=/dev/ram0 ramdisk_size=18432 vga=788 initrd /mb-initrd.gz 请注意,实际编辑时应根据 /boot 所在分区调整 root 行的参数和 kernel 行、 initrd 行中 mb-vmlinuz、mb-initrd.gz 的路径。 lilo image=/boot/mb-vmlinuz label=MagicInstaller initrd=/boot/mb-initrd.gz read-only root=/dev/ram0 append="ramdisk_size=18432" vga=788 在 Windows/DOS 环境下,需下载 mb-initrd.gz、mb-vmlinuz 和 loadlin.exe,并运行命令: loadlin mb-vmlinuz ro root=/dev/ram0 initrd=mb-initrd.gz ramdisk_size=18432 vga=788 * 启动 MagicInstaller . 从硬盘 最方便的方法是将下载到的 .iso 文件,保存在任意分区的 /boot、/MagicLinux、 /usr/share/MagicInstaller、/ 或 /tmp 目录下 (MagicInstaller 将按此顺序进行搜索)。需要注意的是不能改变下载的 .iso 的文件名。例如,若下载的文件名为 MagicLinux-1.2pre4b-1.iso,则必须以此文件名保存在目录中。否则 MagicInstaller 将找不到此 iso 文件。 此外,还可以把第一张光盘中 MagicLinux/base/pkgarr.py,复制到任何一个分区的 /boot、/MagicLinux、/usr/share/MagicInstaller、/ 或 /tmp 目录下。而后把所有包都复制到 pkgarr.py 所在目录的 packages 子目录中,或者把各张光盘的包分别复制到 pkgarr.py 所在目录的 packages-光盘号 子目录中。例如,若将 pkgarr.py 放到某分区的 /MagicLinux 目录下,则可将第一张光盘的所有软件包复制到 /MagicLinux/packages-1 目录下,第二张光盘的所有软件包复制到 /MagicLinux/packages-2 目录下,依此类推。或者可以将所有光盘中的所有软件包复制到 /MagicLinux/packages 目录下。 . 从光盘 将各张光盘的 .iso 分别刻入光盘即可。 下载 MagicInstaller 由源代码、编译 magicbooter 需要的 RPM、组成 MagicInstaller 运行环境需要的 RPM 几个部分组成。没有将 magicbooter 编译 RPM 和运行环境组成 RPM 放入 CVS 是为了控制 CVS 的体积,以便提高 cvs 使用的效率。 * 获取源代码 MagicInstaller 的源代码由 subversion 管理,可以在http://svn.linux.net.cn/repos/MagicInstaller访问到。如果需使用 svn 客户端访问,则应使用如下命令: svn co http://svn.linux.net.cn/repos/MagicInstaller * 下载编译 magicbooter 需要的 RPM 为了控制 magicbooter 的体积,magicbooter 需要同 uclibc 静态连接。为了编译 magicbooter,就需要将专为 magicbooter 编译的 uclibc 和一些其它库编译安装到系统之中。这里给出所有必须的 RPM 的连接: MIuclibc-0.9.21-1.src.rpm MIuclibc-0.9.21-1.i386.rpm MImxml-1.3-1.src.rpm MImxml-1.3-1.i386.rpm MIslang-1.4.5-1.src.rpm MIslang-1.4.5-1.i386.rpm MIpopt-1.8-1.src.rpm MIpopt-1.8-1.i386.rpm MInewt-0.51.6-1.src.rpm MInewt-0.51.6-1.i386.rpm MIpciutils-2.1.10-1.src.rpm MIpciutils-2.1.10-1.i386.rpm MIkudzu-1.1.36-1.src.rpm MIkudzu-1.1.36-1.i386.rpm 下载后请使用此命令编译:rpmbuild --rebuild MIuclibc-0.9.21-1.src.rpm,再使用此命令安装:rpm -ivh /usr/src/redhat/RPMS/i386/MIuclibc-0.9.21-1.i386.rpm。并依次编译、安装其它 RPM 包。 * 下载用于组成 MagicInstaller 运行环境的 RPM 为了简化组成 MagicInstaller 主运行环境的工作,MagicInstaller 使用现成的 RPM,并从中选出需要的文件。所有需要的 RPM,都保存在 mi-fedora.tar。下载后进入 MagicInstaller/bindir 目录,并运行此命令: tar xf mi-fedora.tar; mv mi-fedora/* .; rmdir mi-fedora 完成以上步骤以后,即完成 MagicInstaller 的源代码准备工作。 设定 在随后的文档中,以 MagicInstaller/ 表示 MagicInstaller 的源代码根目录。 为了制作目标 iso 文件,除了创建者需要提供目标 iso 文件必须包含的 RPM 之外,还需要给出许多参数以控制安装细节。如果以命令行参数的形式指定这些细节,则创建者每次创建都不得不重复输入相同的参数,并可能在这一过程中输入错误。因此 MagicInstaller 使用 spec 文件。 在默认情况下,创建者应该将编译参数保存在 MagicInstaller/spec/specinfo.py 中。所有需要安装的 RPM 都应该保存在 MagicInstaller/spec/packages/ 目录中。 这里需要注意区分的是:MIuclibc-0.9.21-1.i386.rpm 等 RPM 包,是必须安装到用于编译 MagicInstaller 的系统中的 RPM 包;mi-fedora.tar 中的 RPM 包是用于组建 MagicInstaller 主运行环境的;而保存在 MagicInstaller/spec/packages/ 中的 RPM 包,则是将要安装到目标系统的 RPM 包。 specinfo.py 的内容和含义 specinfo.py 是一个 Python 脚本。MagicInstaller/sample.specinfo.py 是一个范例文件。在其中给出了各个参数的含义和格式,创建者只需要将 MagicInstaller/sample.specinfo.py 复制到 MagicInstaller/spec/specinfo.py,并编辑它就可以了。这里再做一些相关的说明: distname Python 字符串,设定发行版名称。默认为 AutoDistribution。可根据需要修改此值,例如:MagicLinux distver Python 字符串,设定发行版版本。默认为 0.0。可根据需要修改此值,例如:1.2pre5c distkernelver Python 字符串,发行版使用的内核的版本号。默认值为 2.4.22-1。 pkgtype Python 字符串,发行版使用的包管理工具。默认值为 rpm。目前仅支持 RPM 格式。 pkgdirs Python 字符串。是一个以冒号分隔的目录列表,所有不以 / 开头的目录都是相对于 MagicInstaller/ 目录的。MagicInstaller 的 BuildSystem 将在所有给出的目录中寻找将安装到目标系统的 RPM 包。默认值为 spec/packages。 langset Python 字符串。是一个以冒号分隔的语种列表,用于给出在安装过程中可以使用的语种列表。目前仅支持 en 和 zh_CN。默认值为 en:zh_CN。 welcome Python 字符串,用于给出显示在 magicbooter 的第一个欢迎界面时使用的欢迎词。由于 magicbooter 只支持英文,所以此字符串只能含有 ASCII 字符。 kmods_arrange Python 映射(map)。它的 Key 是启动或驱动软盘的名字,而对应的 Value 是一个 Python 列表,此列表的每一个元素均给出应该保存在此软盘中的内核模块或目录。模块名或目录名可以以 @ 开头。以 @ 开头的模块或目录,都会强制加入软盘。不以 @ 开头的模块,如果没有在 pcitable 中出现,就会被忽略。 volume_limit_list Python 列表(list)。它的各个元素依次给出第一张、第二张、.... 光盘中用于保存被安装 RPM 的空间。单位是字节。默认值为 [620*1024*1024, 640*1024*1024, 640*1024*1024],表示第一张盘可用于保存 RPM 的空间最大不超过 620M,第二、第三张盘可用于保存 RPM 的空间最大不超过 640M。 placement_list Python 列表(list)。它的各个元素依次给出第一张、第二张、.... 光盘中必须含有的 RPM 包的列表。例如:[['mktemp-1.5-18.i386.rpm'], ['bash-2.05b-20.i386.rpm'], []] 表示 mktemp 必须放在第一张光盘中,bash 必须放在第一张或第二张光盘中。 toplevel_groups Python 映射(map)。它的 Key 给出组名,Value 是此组必须含有的 RPM 包的列表。MagicInstaller 的 BuildSystem 将自动根据倚赖性关系,将给出 RPM 包直接倚赖和间接倚赖的 RPM 添加到组中。组名为 lock 的组具有特殊含义,凡是在这个组里面的 RPM 都必须被安装到系统之中。 add_deps Python 映射(map)。用于补充缺失的倚赖关系。例如: { 'libacl1-2.2.4-1.i386.rpm' : ['libattr1-2.2.0-1.i386.rpm'] } 表示:libacl1-2.2.4-1.i386.rpm 倚赖于 libattr1-2.2.0-1.i386.rpm,因此 libattr1 应该在 libacl1 之前安装。 remove_deps Python 映射(map)。用于删除多余的倚赖关系,在解决循环倚赖的时候比较有用。例如: { 'pam-0.75-49.i386.rpm' : ['initscripts-7.14-9.i386.rpm'] } 表示:pam-0.75-49.i386.rpm 不应该倚赖于 initscripts-7.14-9.i386.rpm。 通常需要修改的项目是:distname、distver、distkernelver。 制作 iso * 确认系统安装的 Python 版本 由于 MagicInstaller 主体是使用 Python 编写的,为了提高代码的载入速度,有不少代码是以 .pyc 的形式提供的。不过,不同版本的 Python 所生成的 .pyc 并不兼容。MagicInstaller 主运行环境中的 Python 是 2.2,所以安装到主运行环境中的所有 .pyc 都必须是由 Python 2.2 编译生成的 .pyc。同时,MagicInstaller 的 BuildSystem 还需要调用 python 的 rpm 模块,这个模块往往只有系统默认版本的 Python 才配备。 所以,在 MagicInstaller 中对用于编译 .pyc 的 python 和用于调用脚本 MagicInstaller/scripts/RpmPkgInfor.py 的 python 加以了区分。对于创建者来说,如果系统默认安装的 python 的版本是 2.2,那么不需再加以任何改动即可使用。如果系统默认安装的 python 版本不是 2.2,那么系统必须补充安装 python 2.2。补充安装 python 2.2 之后,必须确保 /usr/bin/python 为系统默认版本的 python,必须确保 /usr/bin/python2.2 为 2.2 版的 python。 * 确认系统安装了 scons MagicInstaller 采用更先进的创建工具 scons 来管理整个创建过程。采用 scons 的理由这里不予详细讨论。可以到这里下载 scons。请使用 0.94 或更新版本的 scons。 * 最后的确认 完成上述两项确认,请再次确认 1、MagicInstaller/spec/specinfo.py 存在,并经过了适制作 iso * 确认系统安装的 Python 版本 由于 MagicInstaller 主体是使用 Python 编写的,为了提高代码的载入速度,有不少代码是以 .pyc 的形式提供的。不过,不同版本的 Python 所生成的 .pyc 并不兼容。MagicInstaller 主运行环境中的 Python 是 2.2,所以安装到主运行环境中的所有 .pyc 都必须是由 Python 2.2 编译生成的 .pyc。同时,MagicInstaller 的 BuildSystem 还需要调用 python 的 rpm 模块,这个模块往往只有系统默认版本的 Python 才配备。 所以,在 MagicInstaller 中对用于编译 .pyc 的 python 和用于调用脚本 MagicInstaller/scripts/RpmPkgInfor.py 的 python 加以了区分。对于创建者来说,如果系统默认安装的 python 的版本是 2.2,那么不需再加以任何改动即可使用。如果系统默认安装的 python 版本不是 2.2,那么系统必须补充安装 python 2.2。补充安装 python 2.2 之后,必须确保 /usr/bin/python 为系统默认版本的 python,必须确保 /usr/bin/python2.2 为 2.2 版的 python。 * 确认系统安装了 scons MagicInstaller 采用更先进的创建工具 scons 来管理整个创建过程。采用 scons 的理由这里不予详细讨论。可以到这里下载 scons。请使用 0.94 或更新版本的 scons。 * 最后的确认 完成上述两项确认,请再次确认 1、MagicInstaller/spec/specinfo.py 存在,并经过了适当修改以满足创建者的要求;2、MagicInstaller/spec/packages 存在,并含有所有被发行的 RPM 包;3、MagicInstaller/bindir 含有 mi-fedora.tar 提供的所有 RPM 包;4、系统安装了 MIxxx RPM 包。 * 制作 .iso 文件 进入 MagicInstaller 目录,运行命令scons root_src,再运行命令scons。 如果一切正常,将生成 MagicInstaller/result 目录。其中含有:initrd.gz、 mbboot、mbvmlinuz、miinitrd、miinitrd.cramfs、syslinux.cfg。这些都是可能有用的中间文件。MagicInstaller/result 目录还会含有用于发行的 iso,这是我们需要的最终目标。 如果出现问题,请首先阅读 MagicInstaller 的文档部分,以获得更进一步的信息。 当修改以满足创建者的要求;2、MagicInstaller/spec/packages 存在,并含有所有被发行的 RPM 包;3、MagicInstaller/bindir 含有 mi-fedora.tar 提供的所有 RPM 包;4、系统安装了 MIxxx RPM 包。 * 制作 .iso 文件 进入 MagicInstaller 目录,运行命令scons root_src,再运行命令scons。 如果一切正常,将生成 MagicInstaller/result 目录。其中含有:initrd.gz、 mbboot、mbvmlinuz、miinitrd、miinitrd.cramfs、syslinux.cfg。这些都是可能有用的中间文件。MagicInstaller/result 目录还会含有用于发行的 iso,这是我们需要的最终目标。 如果出现问题,请首先阅读 MagicInstaller 的文档部分,以获得更进一步的信息。