Recently in Hacking Category

这篇文章旨在提供一些编译X窗口系统的指导步骤。细节步骤会因为大家的系统环境不一致而有所不同,而且编译步骤和环境的不同也会造成各种问题。

为什么要编译X窗口系统?你的显卡驱动要求更新版本的X窗口系统,但是 yum 没有更新的版本,所以只能自己编译。

X窗口系统的编译指南 提供了两种编译方法,一种是使用 build.sh 脚本,另一种是使用 jhbuild。这篇文章使用的是 jhbuild,X的官网上也给了 jhbuild 的 编译指南 ,但是比较粗略,这篇文章会详细介绍 jhbuild 的使用,编译X系统时可能遇到的问题,安装和使用X系统时可能遇到的问题。

首先你要安装编译工具和依赖库。这里列出的依赖库可能不完全,请依照实际需要安装更多的软件包。

yum install @gnome-devel @development-tools gnome-common glib2-devel gnome-doc-utils docbook-style-xsl waf
yum install zlib-devel freetype-devel libxslt-devel libxml2-devel expat-devel gperf libgcrypt-devel

安装 python 2.7, pip, 然后用 pip 安装 mako, lxml, six。编译 mesa 时会用到 mako。编译 fontconfig 时会用 lxml 和 six。

yum install centos-release-SCL
scl enable python27 bash
cd /opt/rh/python27/root/usr/bin/ # 进入python2.7安装路径
./easy_install-2.7 pip
./pip2.7 install requests
pip install mako lxml six

准备工作完成后,下载 jhbuildh 开始配置工作。

注意:jhbuild 不能以 root 身份运行,所以你要创建一个新的普通用户并给予 sudoer 权限。

执行 scl enable python27 bash 开启一个新的 shell,在这个 shell 里面,python 是 python 2.7。

以下操作都是以普通用户去执行。

cd # 进入普通用户的 home 目录
git clone git://git.gnome.org/jhbuild
cd jhbuild
./autogen.sh
make
make install

jhbuild 会安装到 ~/.local/bin 目录下,编辑 ~/.bashrc 把这个路径添加到 $PATH 环境变量,用 export PATH=$PATH:$HOME/.local/bin 。然后执行 . ~/.bashrc 去重新加载 .bashrc。

现在你可以找到 jhbuild 这个命令了,用 which jhbuild 去确认一下。

下载使用 jhbuild 去编译 X 的配置文件:

cd # 进入你的 home 目录
mkdir -p xorg/util
git clone git://anongit.freedesktop.org/git/xorg/util/modular/ xorg/util/modular

拷贝 jhbuildrc 文件到你的 home 目录下进行编辑:

cd # 进入你的 home 目录
cp xorg/util/modular/jhbuildrc ./jhbuildrc
nano jhbuildrc

jhbuildrc 是 jhbuild 的配置文件,这个文件实际上是一个 python 脚本,其中你可以配置需要编译哪些 module,编译时的环境变量,编译时配置用的参数,编译和安装路径前缀,等等。

你可以使用 X 提供的默认 jhbuildrc,它会编译整个 X 窗口系统,大概有255个 module。编译路径前缀和安装路径将是你的 home 目录下的 xorg-build。

每个 module 的定义在 xorg/util/modular/xorg.modules 文件里,这个文件实际上是一个XML文档,里面定义了如何去获取源代码,git 仓库的链接在哪里,module 依赖关系。你可以通过修改这个文件去定义某个 module 的版本,比如,你想用11.1.2版本的 mesa,那么你要先查一下 git 仓库里的标签,看哪个 tag 对应的是11.1.2,比如"mesa-11.1.2"对应11.1.2版,那么你在名为 branch 的XML元素里加上 tag="mesa-11.1.2" 即可。(用 git tag -l 去列出 git 标签。)

友情提示:CentOS 6.x 使用的是 HAL,所以你在配置 xserver 时,要用 --enable-config-hal --disable-config-udev ,并且要给编译出来的 Xorg 可执行文件添加 SUID,即 chmod +s Xorg

配置完后 jhbuildrc 文件后,开始编译:

jhbuild -f jhbuildrc

第一次编译时,jhbuild 需要下载 git 仓库,如果你的网络速度不太理想,可能会需要很久。

下面列出来常用的 jhbuild 命令,方便在改变了配置后重新编译。

重新编译所有 module,禁止网络即不更新git信息:

jhbuild -f jhbuildrc build --no-network --force

重新编译一个 module 即 xserver,编译前运行 make clean:

jhbuild -f jhbuildrc buildone xserver --force --clean

在编译时,你可能会遇到各种问题而无法编译下去,jhbuild 会自动问你如何处理编译错误。

FFmpeg for RTSP to RTMP conversion

|
ffmpeg -rtsp_transport tcp -i rtsp://user:password@localhost:554/rtsp -vcodec copy -f flv -r 25 -s 1920x1080 -an "rtmp://localhost/rtmp"

-an: Disable audio

-f: Force format

-r: Frame rate

-s: Video resolution

-vcodec: Set the video codec. "copy" means no decoding/encoding.

FFmpeg is so awesome.

Ubuntu and Realtek 8192cu Driver

|

Today I wasted several hours configuring a Ubuntu machine for development. The major problem I had involves getting a wifi USB adapter to work properly. It uses Realtek 8192cu chipset, and apparently the driver that comes with the kernel is really outdated. If you don't upgrade the driver, it'll appear to work (you get connected but you'd get disconnected later) and then stops and no matter how you configure the routes it just won't work. You must blacklist the old drivers and install this one.

First, check if you are using the old drivers with lsmod | grep ^rt. If you are, use modprobe -r xxx to unload them. Unplug the wifi adapter now.

Then add these 3 lines to /etc/modprobe.d/blacklist.conf:

blacklist rtl8192cu
blacklist rtl8192c_common
blacklist rtlwifi

Now unfortunately you still need internet connection to proceed, just use cable.

Install rtl8192cu-tjp-dkms_1.6_all.deb. Note that may take a few minutes.

Finally, add 8192cu on a new line to /etc/modules. Reboot (reboot -h now) and your wifi should be working.

2G iPhone updating to iPhone OS 3.0

|

It's confirmed that if you have a 2G iPhone that is unlocked with BootNeuter (running firmware 2.2.1), you can safely update to OS 3.0 using iTunes (yes just press that Update button).

For detailed and step-by-step instructions see here

This method requires: jailbreaked iPhone 2.x, Cydia, Term-vt100, OpenSSH

Install MobileInstallation Patch from Cydia via “http://www.iphone.org.hk/apt/”, the patch is under section “Tweaks”. If you currently have the hackulo.us MobileInstallation, you ALSO need to install the patch. Don’t worry, you can install appulous apps with this patch.

  • In XCode, go to Project > Edit Project Settings.
  • Set Base SDK to "Device - iPhone OS 2.0"
  • Under Code Signing Identity, set Any iPhone OS Device to "Don't Code Sign"
  • Delete the value of Code Signing Resource Rules Path
  • Delete all previous build files.
  • Go to Project > Set Active SDK > Device - iPhone OS 2.0
  • Go to Project > Set Active Build Configuration > Release
  • Build. NOT Build and Go.
  • Copy MyApp.app to iPhone under /Applications using ssh or whatever method you prefer.

Now open Terminal on iPhone and execute the following code

su -
chmod +x MyApp.app
ldid -S MyApp.app/MyApp
killall SpringBoard //restart the SpringBoard

Run MyApp by touching the icon on SpringBoard.

Update: With the MobileInstallation Patch mentioned above, iPhone 2.2 seems unable to install/upgrade app by itself, you have to use iTunes (8.x) to uninstall an app first, then install/upgrade it.