CentOS 3rd party yum repos

Linux 的作業系統都會自己維護一套軟體套件,像 CentOS 是用 yum 來安裝,

所以這些自己上網確認更新的套件都是 CentOS 官方再維護的,這些軟體的伺服器資訊都在 /etc/yum.repos.d/ 下面

但是有些軟體比較新不想要自己 make 跟維護關聯性,可以採用第三方的 repos 來安裝,

例如 ius、EPEL、rpmforge 還蠻常見的,裡面有一些 php , python 新版的套件,可以裝。

安裝方式 http://wiki.iuscommunity.org/Doc/ClientUsageGuide,以 ius 為例

root@linuxbox ~]#
   wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/i386/epel-release-5-4.noarch.rpm

root@linuxbox ~]#
   wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/i386/ius-release-1.0-8.ius.el5.noarch.rpm

root@linuxbox ~]#
   rpm -Uvh ius-release*.rpm epel-release*.rpm

如果路徑錯了可以自己去 http://dl.iuscommunity.org/pub/ius/stable/Redhat/ 裡面找自己要得版本,然後安裝好就能更新一些新的套件例如 php5.2


$ yum install php52

ldap install and linux users

Name Service Switch 是 Linux 幫助查詢與統整各式資料的協定,例如帳號、群組、主機名稱~

PAM 則是帳號認證的模組,讓你可以動態的換掉認證的方式。

透過 Ldap 資料庫跟這兩個模組的合併,對伺服器帳號統整管理有很大的威力~

這文章主要在介紹大致上需要安裝的流程與相關設定檔,並簡介 ldap 相關概念。

Continue reading…

gearmand

下載: http://gearman.org/index.php?id=download

作業系統:CentOS

前置作業:yum install libevent-devel , boost –with-program-options , yum libdrizzle-devel

drizzle 好像是一個 MySQL 的分支,是要處理擴展性跟底層修改測試部份的專案,所以他也可以跟原生的 MySQL 溝通,

要先裝好 libdirzzle-devel ,這樣在裝 gearmand 的時候 configuration 才會啟用 libdrizzle 可以把 job 的資料配合存進 MySQL 內的佇列。

但是在 0.20 的 gearmand 在這部份有些問題 自動建立表跟插入的 SQL 有錯,可以參考下面這個修正再重編譯,算是少兩個逗號吧 Create 跟 Insert 的地方

https://code.launchpad.net/~clint-fewbar/gearmand/fix-sql-regression/+merge/59064

後來 Woker 在處理 Queue 時出錯…,訊息如下:

ERROR [ proc ] snprintf(DELETE)(Success) -> libgearman-server/plugins/queue/drizzle/queue.cc:416
ERROR [ proc ] Remove from persistent queue(QUEUE_ERROR) -> libgearman-server/server.c:495

https://bugs.launchpad.net/gearmand/+bug/778306

參考上面這篇的問題一樣改 queue.cc 裡面,維護者說已經修正過了,所以去找一下 build 版本的 source code

http://bazaar.launchpad.net/~gearman-developers/gearmand/build/view/head:/libgearman-server/plugins/queue/drizzle/queue.cc

所以改這段~

- if (query_size < 0 || query_size > (ssize_t)sizeof(query))
+ if (query_size < 0 || size_t(query_size)> query.size())

改完上面的好像跑來就ok了~可以測不開 Woker 只跑 client ,job 就會進 Queue 裡面了~

其他細節待續 ,…趕林揚…伺服器被打雷打掉了沒有細節了~

開伺服器的命令,主要指定 libdrizzle 的 host 跟 user 跟資料表還有 bug 不能指定 mysql 密碼…

vvv 是 log 顯示等級


$ gearmand -u apache --queue-type=libdrizzle --libdrizzle-host=antslab.tw --libdrizzle-user=assist --libdrizzle-db=assist --libdrizzle-table=global_gearman_queue --libdrizzle-mysql -vvv &

參考資料:

jQuery 隱藏元件取得寬高

actual plugin

http://dreamerslab.com/blog/en/get-hidden-elements-width-and-height-with-jquery/

stack-overflow 的討論

http://stackoverflow.com/questions/2345784/jquery-get-height-of-hidden-element-in-jquery-1-4-2

jQuery 有 height , width , outerWidth , outerHeight 這些函式可以取得元件的面積資訊,

但是有時候有些元件是被隱藏(hidden)的,還是需要取得他的面積,所以上面兩篇文章都是在處理這方面的問題,

大都是修改元件隱藏的方式,來讓元件雖然是看不到的(假隱藏)但是還是可以取得寬高,

但是我自己的情況是…不是該元件被隱藏,而是他的老爸被隱藏,所以這些方法把他的隱藏方式修改…其實還是看不到…

所以想到另外一個概念,就是把他 clone 出來 body 好了,這樣應該不會看不到了,把資訊取完再砍掉吧…

如果該元素有其他 class 的 css 設定下可能會有不太準…只是至少我暫時解決了…


/**
 * @license jQuery Hawk 0.1
 *
 * Copyright 2011 mlwmlw
 * licensed under the MIT.
 */

(function($) {
	var supported = ['height', 'width', 'outerHeight', 'outerWidth', 'innerHeight', 'innerWidth'];
	var check = {};
	for(var i in supported) {
		check[supported[i]] = true;
	}

	var ref = {};

	var $target = $('body');
	$.fn.hawk = function(type) {
		if(typeof(check[supported[i]]) == 'undefined') {
			throw 'unsupported method';
		}
		var $clone = $(this).clone();
		$clone.css({'position':'absolute', 'visibility':'hidden', 'display':'block'}).appendTo($target);
		var result = null;

		if(typeof(ref[type]) != 'undefined') {
			result = ref[type].apply($clone,[]);
		}
		else {
			result = $clone[type]();
		}
		//alert($(this).attr('class') + ': '+ type + ': '+ result);
		$clone.remove();
		return result;
	}

	$.hawk = function(cmd, options) {

		if(cmd == 'install') {
			for(var i in supported) {
				ref[supported[i]] = $.fn[supported[i]];
				$.fn[supported[i]] = (function(type) {
					return (function() {
						return $(this).hawk(type);
					})
				})(supported[i]);
			}
		}
		else if(cmd == 'restore') {
			for(var i in supported) {
				$.fn[supported[i]] = ref[supported[i]];
			}
			ref = {};
		}
	}
})(jQuery);

api 是參考 actual 的設計…

$('xxx:hidden').hawk('width');
$('xxx:hidden').hawk('height');
$('xxx:hidden').hawk('innerWidth');
$('xxx:hidden').hawk('outerWidth');

只是因為我遇到得問題是其他的 plugin 在取的時候出錯,
也不太可能去把他的 source code 都改成這個 API 吧…太麻煩,之後更新也會有問題,
所以就額外寫了安裝這個 plugin 的函式:
$.hawk(‘install’)
這樣就會把上述那些取寬高資訊的函式預設成 jQuery 內建的,
例如 $(‘xx’).height 就會被換成 $(‘xx’).hawk(‘height’);
只是安裝了以後一直這樣取值效能會很差,這些函式會一直 clone dom,
所以安裝了以後,但是用完了就能用這函式移除這層關聯:
$.hawk(‘restore’); 這樣就沒事了…

資料庫擴展

MySQL Cluster 、HBase、Cassandra

該怎麼知道自己的應用適合什麼軟體,自行架設的環境是否有達到想像的能力呢?

那就自行架設測試環境來對這些細節做測試吧!

測試什麼?

硬碟 io、連線承受數、每秒讀取寫入數量。

sysstat:

系統狀況讀取軟體,內有附 iostat 可以測硬碟瞬間讀寫的速度。

MySQL:

http://mysqldatabaseadministration.blogspot.com/2006/08/mysql-benchmarking-1.html

使用 MySQL 5.1 之後內建的 mysqlslap 來模擬大量用戶連線。

./bin/mysqlslap –host=antslab.tw –user=user -p -a –auto-generate-sql-guid-primary –auto-generate-sql-load-type=mix –auto-generate-sql-unique-query-number=5 –auto-generate-sql-unique-write-number=6 –auto-generate-sql-secondary-indexes=4 –concurrency=100 –create-schema=test –auto-generate-sql-execute-number=10011

參數解釋 http://jingstory.com/tag/mysqlslap