Compile Xorg on CentOS 6.x

在 CentOS 6.x 系统上编译 Xorg

篇文章旨在提供一些编译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 会自动问你如何处理编译错误。