Press "Enter" to skip to content

Month: November 2013

构建Koji编译服务器(1): Koji Server端的配置

Koji 是 Fedora 的包编译管理工具。功能十分强大,使用 Mock 作为底层,用于批量编译软件包。下面介绍使用方法。本文的实验环境为CentOS 6.4 64bit。

架构

1,我们都知道 rpmbuild 是 Linux 平台下一款编译 RPM 包的工具,而 Mock 则是在 rpmbuild 之上封装了一层(查看 Mock 的使用方法),利用 yum 来下载一个最小的系统环境,从而实验跨系统的编译工作。而 Koji 则是在 Mock 之上再次进行了封装,由 Koji Server 统一管理,将大量编译任务交给若干个安装了 Mock 的编译机来完成,这些编译机也叫 Koji Builder。

2,本例使用两台服务器(服务端+编译机)配合完成,本例将服务端称之为 Koji Server,将编译机称之为 Koji Builder。

3,本例中的 Koji Server 由 Postgresql 数据库(用来记录软件包的信息)、KojiHub(主程序)、KojiWeb(依赖于Httpd) 等组件组成。Kojira 用于管理和维护yum库,装在哪里都行。本文中的实例是将 Kojira 与 KojiHub 装在同一台服务器上。

4,本例中的 Koji Builder 运行着 Kojid 这个编译守护程序,以及底层的 Mock。

5,KojiHub 是整个体系的核心,通过 XML-RPC 运行于 Apache 的 mod_python 模块下。KojiHub 采用被动方式,仅仅接受 XML-RPC 请求,依赖编译守护模块和其他模块来进行交互。这意味着,无须在 KojiHub 里指定 Koji Builder 的IP地址信息,因为 KojiHub 是被动通信的,需要 Koji Builder 主动与之“联系”。 koji 是一个用 python 写的程序,用户通过 koji 命令,来查询信息或者执行编译工作。

6,Koji 各组件之间的通信使用SSL证书,所以本文的第一步就是为各组件创建证书。

5 Comments

修改WordPress代码高亮插件SyntaxHighlighter的字体大小

SyntaxHighlighter Evolved 是 WordPress 码农必备的一款插件,功能是实现代码高亮显示。这款插件应该是 WordPress 使用量最广泛的一款代码高亮插件了。但该插件的设计人员不知道是怎么想的,用的那么大的字体来显示代码,让原本就复杂的代码看起来眼花缭乱的。特别是当一行代码很长时,更是显得很乱。

要修改 SyntaxHighlighter Evolved 插件的字体,其实很简单,编辑 wp-content/plugins/syntaxhighlighter/syntaxhighlighter3/styles/shCore.css,修改如下两个地方:

.syntaxhighlighter a,
 .syntaxhighlighter div,
 .syntaxhighlighter code,
 .syntaxhighlighter table,
 .syntaxhighlighter table td,
 .syntaxhighlighter table tr,
 .syntaxhighlighter table tbody,
 .syntaxhighlighter table thead,
 .syntaxhighlighter table caption,
 .syntaxhighlighter textarea {
-moz-border-radius: 0 0 0 0 !important;
-webkit-border-radius: 0 0 0 0 !important;
background: none !important;
border: 0 !important;
bottom: auto !important;
float: none !important;
height: auto !important;
left: auto !important;
line-height: 1.5em !important; /* 行间距加到1.5em刚刚好 */
margin: 0 !important;
outline: 0 !important;
overflow: visible !important;
padding: 2px !important; /* 加个内边框吧 */
position: static !important;
right: auto !important;
text-align: left !important;
top: auto !important;
vertical-align: baseline !important;
width: auto !important;
box-sizing: content-box !important;
font-family: "Consolas", "Courier New", monospace !important; /* 经测试,这几个字体最美观 */
font-weight: normal !important;
font-style: normal !important;
font-size: 13px !important; /* 这里我改成了13px */
/*min-height: inherit !important; */
/*min-height: auto !important;*/
……
3 Comments

3个第三方RHEL/CentOS软件库简介

RHEL/CentOS的系统可以通过yum来安装软件,但官方的资源库里软件较少,这时我们就需要第三方的软件库了。熟悉Linux的人应该都知道,RHEL/CentOS系统有三个大的第三方资源库,分别是EPEL,RPMForge和RPMFusion。下面简单介绍一下。

EPEL(Extra Packages for Enterprise Linux),翻译过来就是“企业版 Linux 附加软件包”,这是一个由Fedora小组负责创建和维护的资源库。由于Fedora是受Redhat赞助的,因此这个库也可以理解成Redhat的官方的库。里面的软件数量已达到5000多个。可以看看它的中文简介。我的感觉是,如果你想获得高质量,高稳定性的软件库,可以考虑使用EPEL。本博客曾经有一篇博文介绍了EPEL软件库的安装方法

RPMForge被CentOS社区认为是最安全也是最稳定的一个第三方软件库。该库现在已经拥有超过10000种的CentOS的软件包,该库的特点是软件数量多,已达上万种。本博客以前曾介绍过安装RPMForge的方法根据CentOS官方的说法,RPMForge/RepoForge的计划已终止。不被维护。不要使用。

RPMFusion官网介绍称提供Redhat和Fedora Project不愿意ship的软件,但据CentOS官方称,这个软件库里面的软件稳定性不如rpmforge,因此建议选用!该软件库为当前所有Fedora和rhel5、6以预编译的方式提供软件。你可以用yum等工具使 用这个仓库。RPM Fusion有两个仓库,一个free,另外一个nofree。free是自由软件,nofree有版权,nofree仓库只有少数的软件,很少用到。

注意:不要同时安装若干种资源库,否则会引起错乱。如果一定要装,请考虑yum-priorities插件,它可以设置yum在调用软件源时的顺序。

更多的第三方源请参考CentOS推荐的第三方源列表

RHEL的源码包下载: ftp://ftp.redhat.com/pub/redhat/linux/enterprise/6Server/en/os/SRPMS/

Leave a Comment

清风小荷塘改名了

清风小荷塘改名了,从此不再叫清风小荷塘了。
自从07年定下这个名字,一直沿用至今。
现在的清风小荷塘,已不再是一个书生意气、单纯懵懂的少年了,变成了一个满脸胡渣的大叔。
一直想不到啥好的博客名字。就乱起一个吧。
麻烦友情链接里的朋友们,改一下我的链接名吧,谢谢。

生查子
宋·欧阳修
去年元夜时,花市灯如昼。
月上柳梢头,人约黄昏后。

今年元夜时,月与灯依旧。
不见去年人,泪湿春衫袖。

58 Comments

Linux的patch原理

通过一个简单的小例子,讲述一下Linux的patch原理。

假设有个系统源码,位于mm/slab.c

[root@os1 tmp]# ls mm
slab.c
[root@os1 tmp]# cp -r mm newmm
[root@os1 tmp]# vim newmm/slab.c    #手动更新一下系统源码,随便作点改动,作为新版本
ZXXXXXX            /*手动添加这一行*/
/*
 * linux/mm/slab.c
 * Written by Mark Hemment, 1996/97.
 * ([email protected])
 *
 * kmem_cache_destroy() + some cleanup - 1999 Andrea Arcangeli
 *
 * Major cleanup, different bufctl logic, per-cpu arrays
 *      (c) 2000 Manfred Spraul
……

提取patch

[root@os1 tmp]# diff -u mm/slab.c newmm/slab.c  > t.patch

看看patch里都有什么

[root@os1 tmp]# more t.patch
--- mm/slab.c	2013-11-04 23:28:25.646753453 +0800
+++ newmm/slab.c	2013-11-04 23:38:50.355752475 +0800
@@ -1,3 +1,4 @@
+ZXXXXXX
 /*
  * linux/mm/slab.c
  * Written by Mark Hemment, 1996/97.

更新一下patch吧

[root@os1 mm]# cd mm
[root@os1 mm]# patch -p1 < ../t.patch
patching file slab.c
[root@os1 mm]# more slab.c   #看看原始文件发生了什么变化
ZXXXXXX
/*
 * linux/mm/slab.c
 * Written by Mark Hemment, 1996/97.
 * ([email protected])
 *
 * kmem_cache_destroy() + some cleanup - 1999 Andrea Arcangeli
 *
 * Major cleanup, different bufctl logic, per-cpu arrays
 *	(c) 2000 Manfred Spraul

原文件竟然被更新了耶!

Leave a Comment

定制Apache索引(目录浏览)样式

今天才知道,原来Apache的索引(目录浏览)样式是可以定义的,下面简单介绍一下方法。

1,开启Apache索引(目录浏览)功能
编辑httpd.conf文件:
[code lang=”plain”]
<Directory "/var/www/html">
……
Options Indexes FollowSymLinks
IndexOptions FancyIndexing ScanHTMLTitles FoldersFirst NameWidth=85 DescriptionWidth=128 IconHeight=16 VersionSort Charset=UTF-8
……
AllowOverride None
Order allow,deny
Allow from all
</Directory>

在Options选项中写入Indexes,即是打开了目录浏览功能。我的CentOS6中安装好了Apache以后默认就是打开了目录浏览的。但是使用浏览器访问首页,却不能显示出目录,原因在于/etc/httpd/conf.d/welcome.conf文件中的Indexes前面有个减号,原来Apache默认禁止了首页的目录浏览功能。去掉减号,再重启Apache就OK了。

2,定义索引(目录浏览)样式
IndexOptions项定义了索引(目录浏览)的样式,其中:
ScanHTMLTitles 搜索HTML标题
FoldersFirst 目录排在前面
NameWidth=85 表示文件名可以最多显示85个字符
DescriptionWidth=128 表示描述可以显示的字符数
IconHeight=16 小图标的长度
VersionSort 版本排序,如果没有此项,将按照拼音顺序排序
Charset=UTF-8 字符集

3,目录加密
编辑httpd.conf文件:
[code lang=”plain”]
<Directory "/var/www/html">
……

AuthType basic
AuthName "Authorization"
AuthUserFile /var/www/html/.htpasswd
Require user user1
……
</Directory>

其中,AuthName是弹出的提示文本,/var/www/html/.htpasswd是记录用户名与密码的文件,equire user指允许登陆的用户名。

管理登陆用户
[code lang=”plain”]
$ htpasswd -c /var/www/html/.htpasswd user1 #回车会要求输入两遍密码,会清除所有用户!
$ htpasswd -bc /var/www/html/.htpasswd user1 password #不用回车,直接指定user1的密码为password
$ htpasswd -b /var/www/html/.htpasswd user2 password #添加一个用户,如果用户已存在,则是修改密码
$ htpasswd -D /var/www/html/.htpasswd user2 #删除用户
Leave a Comment

Linux之Mock使用方法

在进行编包的时候大多数人会使用rpmbuild命令在本机进行编译,这样可以使一些依赖及本地相关包的修改可以生效,但在开发过程中必须模拟用户的环境或是构建一个“干净的”环境(既没有任何其他依赖的改动,直接从yum下载构建一个纯用户环境),这样我们就需要mock命令来构建这样一个编译的纯环境来进行编译软件包。

1,安装mock
mock的安装方法比较简单,请参照这篇文章即可。安装完成以后,系统会自动多出一个名为mock的组。

2,mock使用方法
mock编译过程不要用root身份,先建立一个普通的用户,然后把用户加入mock组。

[root@test ~]# useradd mockbuilder 
[root@test ~]# usermod -a -G mock mockbuilder 
[root@test ~]# su - mockbuilder

注意:如果强行使用root身份执行mock命令,python将会抛出“RuntimeError: mock will not run from the root account”的错误。

使用内置的mock配置文件来进行编译

mock 的配置文件在/etc/mock/目录下,系统默认内置了fedora、epel-5、epel-6等系统的配置文件,通过查看这些.cfg的配置文件,可以了解到Mock的原理,即软件使用yum来下载一个最小化的系统,并放入chroot环境中。

下面以编译fedora 15 64位系统的软件包来举例(对应的配置文件为fedora-15-x86_64.cfg)

3 Comments