今天偶然間發(fā)現(xiàn)的一個(gè)小hack:)
我要安裝dvsdk的4.0版本。它的安裝包是一個(gè)單個(gè)的可執(zhí)行文件:
它提示,只能在Ubuntu 10.04上面安裝。
我自己的Ubuntu是11.04,文件系統(tǒng)resierfs,如果resize的話貌似會(huì)清空。當(dāng)然也不愿意再裝一個(gè)舊版的。
所以琢磨著怎么把這個(gè)限制去掉。
首先我估計(jì)它是讀了某個(gè)文件來(lái)獲取的發(fā)行版本號(hào)。
所以先用 strace 命令看一下。加一個(gè) -f 表示跟蹤 fork 出來(lái)的子進(jìn)程。
這個(gè)工具可以打印出程序所有的 syscall。因此 open,read,write,select 之類的調(diào)用都會(huì)被打印出來(lái)。

這時(shí)候出來(lái)很多結(jié)果,好比大海撈針一般,要仔細(xì)看哦。
突然發(fā)現(xiàn)一行顯眼的:
“natty”是Ubuntu 11.04的代號(hào),也就是說(shuō)這個(gè)程序在某個(gè)地方讀到了Ubuntu的版本號(hào)。
我對(duì)這些不了解,于是google了一下,發(fā)現(xiàn)是通過(guò)調(diào)用 lsb_release 這個(gè)工具來(lái)讀到的。
然后又發(fā)現(xiàn)一個(gè)好消息,這個(gè)工具是 python 寫的。
于是加了半句優(yōu)雅的代碼:
其中“lucid”是 Ubuntu 10.04 的版本號(hào)。如果 /tmp/lucidhack 這個(gè)文件存在,就輸出 lucid 。
看看效果吧:

創(chuàng)建 /tmp/lucidhack,然后重新運(yùn)行安裝程序。
大功告成!

其實(shí)很多時(shí)候問題很簡(jiǎn)單,完全沒有必要大動(dòng)干戈。