LinuxSir.cn,穿越时空的Linuxsir!

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

非 FHS 兼容系统 与 app bundle

[复制链接]
发表于 2010-8-29 22:43:08 | 显示全部楼层 |阅读模式
非 FHS 兼容系统

LFS/CLFS 目标之一是构建 FHS 兼容基本系统。
FHS 是 *nix-like 系统标准,满足标准可达到最大兼容性,用着舒服。
http://www.pathname.com/fhs/
http://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard

不过 FHS 也带来一些问题,无法把两套系统 无缝、舒服得 结合在一起。
如 x86_64 主机上 i686-pc-linux-gnu x86_64-pc-linux-gnu 两套系统:
要么构建 multilib 系统,有讨厌的 /lib32 或 /lib64,
要么构建两套独立系统,使用 chroot 方式,无法方便同时访问两套系统。

如果抛开 FHS,其实解法很简单:
用类似 LFS/CLFS-1.x.x 临时系统方式构建整个系统,安装系统到非 FHS 兼容目录,使用非标准动态连接器,如 /tools/lib/ld-xxx.so。

其它可供参考资源:
Gentoo prefix: 使用宿主系统 动态连接器 /lib/ld-xxx.so,如其名,目录结构为 FHS 基础上加上前缀,与宿主系统有效隔离。
android x86: 系统目录为 /system/,/ 下建立 FHS 兼容目录、软链接。
syllable OS: 系统目录为 /system/,安装软件包时要建立一大堆软链接。

具体点,假设我们系统安装到 /myos/ 下,我们需要解决不少麻烦问题,好在只需要解决一次。
0、/sbin/init
可用 initrd 解决,否则需内核启动参数 init=/myos/sbin/init。
1、目录结构
FHS 基础上加前缀方式,易实现。
可简单用一 sed 命令行给所有软件包源码做路径替换,加上路径前缀 /myos/ 或 使用相对路径。
为了运行第三方软件,需要建立 FHS 兼容目录 或 目录软链接。
2、动态连接器
加前缀,使用 /myos/lib/ld-xxx.so 或 使用相对路径。
可参考 CLFS-1.x.x 对 gcc binutils 做修正。
为了运行第三方软件,需要建立 FHS 兼容软链接 /lib/ld-xxx.so 指向 /myos/lib/ld-xxx.so。
3、可选
再进一步,上面系统能满足重定位会更方便。
/myos/ 下系统构建好后,把 /myos/ 修改成 /newpath/ 系统仍能正常运行。
显然为达到此要求,系统必须使用相对路径,软件包也许需要额外修补使其满足重定位要求。

如此,可在 x86_64 主机上同一个 / 下分别构建两套系统:
i686-pc-linux-gnu 系统 /myos_i686/,
x86_64-pc-linux-gnu 系统  /myos_x86_64/。
使用开启 IA32 兼容模式 x86_64 内核,可无缝运行 /myos_i686/ /myos_x86_64/ 系统。

同时,上面描述系统 和 发行版 也可以无缝结合到一起,只要内核好用。


app bundle

正常 *nix-like 系统中不常见 app bundle 方式:一个软件包,一个目录 或 文件。
http://en.wikipedia.org/wiki/Application_Bundle
http://en.wikipedia.org/wiki/Application_Directory

*nix-like 系统一般只有一个 bundle,即系统本身,所有软件包文件在 FHS 指引下放在一起。
各种包管理器要解决的主要问题之一,是记录每个软件包所提供文件。

app bundle 优势是方便,缺点是体积。
常常要打包进去很多动态库文件,如 firefox skype googleearth 预编译包。

app bundle 可作为基本系统补充,如果系统中软件包以 app bundle 形式存在基本系统除外,升级系统工作量可明显降低,主要升级基本系统即可。

linux 环境下 app bundle 形式好多种,暂时未见胜出者。
其中 http://portablelinuxapps.org/ 提供方法比较令人费解:
下载单文件,设置执行权限,运行即可,运行时需要 fuse,
此文件是 iso9660 文件系统映像,同时也是可执行文件。
另外,http://people.gnome.org/~alexl/glick/ 实现方式非常 bt。

个人倾向原始的一软件包一目录方式。


杂项
http://en.wikipedia.org/wiki/Fat_binary
http://icculus.org/fatelf/
两种架构可执行文件、库文件可合并到一起。
发表于 2011-2-7 20:36:00 | 显示全部楼层
同感!

本人在翻旧帖中,找到了这个贴,感到很同感!

本人D EHLB1 就是这麽做的!

本人做法:

建立目录devel,basic,network,init

链接各lib,libexec,include

开发包装在devel
基本包装在basic
网络包装在network
系统启动需要的包装在init

这样甚至可以把LFS工具链重用!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-2-16 19:36:59 | 显示全部楼层
Post by zxd123314;2127573

开发包装在devel
基本包装在basic
网络包装在network
系统启动需要的包装在init

如前面所提到的:
非 FHS 兼容系统使用 FHS 加前缀的目录结构较好, 尽量与现有系统兼容;
app bundle 单个应用可考虑装在单独目录,大规模使用会浪费不少空间,所以有必要控制软件包数量。

您玩法有些像 M$ MAC,个人不喜,见谅。
还是习惯力量大。
回复 支持 反对

使用道具 举报

发表于 2011-2-17 01:31:29 | 显示全部楼层
用合适自己的方式去用Linux,才是LFS真正教导的知识!
回复 支持 反对

使用道具 举报

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

本版积分规则

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