标签归档:geexbox

geexbox从iso文件启动的自动化改造

有朋友需要指定uuid的支持,弄来弄去也挺麻烦的,干脆一劳永逸搞个脚本

[用法]
./diy_geexbox.sh 官方geexbox的iso文件
生成以”原文件名_new.iso”的新iso文件

[处理逻辑]
1.创建目录结构,解原始iso
2.解initrd,更新修改
3.重新封包

[修改点]
1.重新编译busybox替代geexbox中的,添加了findfs的applet
2.修改init初始化脚本,添加from参数的支持
注:3.0的版本内置了ntfs-3g,因此不需要单独添加

[与以往不同]
以前仅仅支持/dev/sda5这种真实设备名的指定,现在支持指定标签和uuid。
探测逻辑是: 设备名 > 磁盘标签 > uuid

from参数的示例:
1.设备名方式
from=ISO:/dev/sda7:/SYSTEM/geexbox-3.0-x86_64.iso
2.磁盘标签方式
from=ISO:HOME-LINUX:/SYSTEM/geexbox-3.0-x86_64.iso
3.uuid方式
from=ISO:9fa15ff6-991e-40b9-8fbd-b8ecdb3b9485:/SYSTEM/geexbox-3.0-x86_64.iso

以前的文章:
http://www.rainhome.org/geexbox3-0-直接从iso启动
http://www.rainhome.org/geexbox2-0硬盘启动支持ntfs和iso

工具下载地址:
https://github.com/tangfu/geexbox-diy

geexbox3.0 直接从iso启动

geexbox3.0出来了,重新修改了脚本,现在ISO启动的情况下也支持PERSISTENT持久化参数,注意不能和external-persistent一起使用,
initrd地址initrd-3.0

geexbox3.0中
启动参数中带这两项,才能使用持久话
persistent=/dev/sd7:/geexbox/casper-data

FROM_DIR默认还是geexbox所在目录的casper-rw文件
FROM_ISO使用的则是persistent中指定的持久化文件

使用:

其他的细节详见geexbox2.0 硬盘启动支持ntfs和iso

geexbox2.0硬盘启动—-支持NTFS和ISO

【目的】

1.使geexbox 2.0支持NTFS分区格式
2.使geexbox 2.0能够直接从ISO格式的文件启动
3.方便使用持久化

【分析】

Geexbox 2.0使用的是2.6.38.8内核和busybox 1.19.2
通过rootfs的config文件我们可以查处内核的编译选项:
1.内核支持initrd的xz压缩
2.内核不支持ntfs,但开启了ntfs-3g的支持

对init启动脚本的修改:
1.initrd处理
依次使用xz 4.999beta,5.0.0,5.0.1,5.0.2,5.0.3,5.1.1alpha对修改后的initrd进行压缩,原内核都不能进行解压启动,因此initrd镜像暂时没有进行压缩,只是cpio的格式

2.增加ntfs-3g命令
initrd镜像中没有包含ntfs-3g程序,因此必须将rootfs中的ntfs-3g移植进去,从rootfs中拷贝这些库到initrd的/lib中(注意不是软链接,而是其直接指向的库文件)ld-linux.so.2 libdl.so.2 libgcc_s.so.1 librt.so.1 libc.so.6 libfuse.so.2 libpthread.so.0,拷贝ntfs-3g到/bin

3.关于数据保存
开启persistent,相当于使能数据持久化开启persistent与不开启persistent的主要区别(在不使用ro,rw等参数的情况下)
PERSISTENT_OPT=”-o loop -t ext2″挂载参数变成挂载件
ROOT_MODE_PART=rw 挂载选项不是只读挂载,而是读写挂载
默认情况下,开启persistent,持久化文件是/mnt/casper-rw

4.系统文件查找
a)指定ROOT之后,脚本会自动去挂载ROOT指定的设备,ROOTFS指定文件系统模式,官方发布的iso中他为rootfs文件,即非flat,指定为flat之后,脚本不会再去找rootfs,认定rootfs中的内容已经放入ROOT中,并非存在于一个squashfs文件中
b)未指定ROOT设备时,init脚本将扫描磁盘(scan the block devices for rootfs)

默认只探索光驱,单分区优盘,其他磁盘的第一个分区,修改探测时遍历所有设备,且识别ntfs分区。

5.添加选项from,支持从硬盘启动
该参数优先级最高,启用该参数后,不会使用ROOT设备来查找,也不会自动扫描硬盘

格式:</类型:设备:对应的文件或文件夹/>
类型可以是DIR:ISO,如果是其他直接退出
设备通常是dev下的硬盘,U盘或光盘

例子:
ISO:/dev/sda7:geexbox-i386-2.0.iso
DIR:/dev/sda6:GEEXBOX

DIR情况下
1)persistent默认是该目录下的casper-rw
2)ROOTFS不支持flat模式,ROOTFS默认是该目录下的rootfs

ISO情况下
1)persistent默认被禁用,即便设置也无效
2)ISO情况下ROOTFS肯定不是flat模式,因此不用考虑

另外由于需要持久化,必然会占据硬盘,持久化数据所在分区可能无法在geexbox的界面中显示,如果DIR下不使用持久化或者ISO情况下,不会出现某个硬盘分区不显示的状况

6.中文化
这一代不需要中文设置的原因是2.0的geexbox本身就相当于一个xmbc,而xmbc本身是支持中文,因此只需在xmbc界面下设置下即可

 

【使用方式】

1.启动菜单(grub4dos):

#直接从ISO启动,需要按照以下格式指名from参数

#从硬盘启动(目录),同样需要借助于from参数,这种方式下一般都使用persistent做持久化处理

 

2.重新打包iso

a)下载修改过的initrd文件
http://115.com/file/e6ef8j86#initrd.zip
b)替换原版geexbox-2.0-i386.iso的initrd,像7z等解压工具都可以,然后重新打包,mkisofs -J -R -T -v -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../../geexbox-2.0-i386.iso .,这是linux下的参数,window下进行应该也可以

不足之处:
1)initrd没有压缩,体积稍大(有谁知道kernel-2.6.38.8对应的xz版本请告诉我,测试了4.999beta,5.0.0,5.0.1,5.0.2,5.0.3,5.1.1alpha都不行)
2)ISO启动方式没有提供数据持久化(主要是觉得没有必要)