今天偶然間發現的一個小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,然后重新運行安裝程序。
大功告成!

其實很多時候問題很簡單,完全沒有必要大動干戈。