今天偶然间发现的一个小hack:)
我要安装dvsdk的4.0版本。它的安装包是一个单个的可执行文件:
它提示,只能在Ubuntu 10.04上面安装。
我自己的Ubuntu是11.04,文件系统resierfs,如果resize的话貌似会清空。当然也不愿意再装一个旧版的。
所以琢磨着怎么把这个限制去掉。
首先我估计它是读了某个文件来获取的发行版本号。
所以先用 strace 命令看一下。加一个 -f 表示跟踪 fork 出来的子进程。
这个工具可以打印出程序所有的 syscall。因此 open,read,write,select 之类的调用都会被打印出来。
这时候出来很多结果,好比大海捞针一般,要仔细看哦。
突然发现一行显眼的:
“natty”是Ubuntu 11.04的代号,也就是说这个程序在某个地方读到了Ubuntu的版本号。
我对这些不了解,于是google了一下,发现是通过调用 lsb_release 这个工具来读到的。
然后又发现一个好消息,这个工具是 python 写的。
于是加了半句优雅的代码:
其中“lucid”是 Ubuntu 10.04 的版本号。如果 /tmp/lucidhack 这个文件存在,就输出 lucid 。
看看效果吧:
创建 /tmp/lucidhack,然后重新运行安装程序。
大功告成!
其实很多时候问题很简单,完全没有必要大动干戈。