我拿了之前寫好的 oracle_preinstall.sh 來用,
以為在Fedora 7和ubuntu 6.10和Cent OS 4.5能用。
應該也在現在這個Fedora 8適用!
結果在執行oracle10g R2這版的runInsaller時,
出現了“xcb_xlib.c:50: xcb_xlib_unlock: Assertion `c->xlib.lock failed.”這樣的錯誤訊息!
這是java執行引用xlib函式庫的問題,而oracle安裝的介面,不巧正是java寫的。
為了讓我oracle資料庫能順利安裝到Fedora 8,找了些文件!
解決的辦法是:
1.先以root更新xlib的一個函式庫
yum --enablerepo=development update libxcb
2.再回到oracle安裝帳號的環境裡,設定一個變數
export LIBXCB_ALLOW_SLOPPY_LOCK=1
重新用oracle帳號執行 ./runInsaller就能順利執行了!
至於若是用ubuntu 7.4以後版本,出現在這樣的問題,
可以參考以下的連結文章:
xlib.lock’ failed."">Ubuntu feisty 的問題: xcb_xlib.c:50: xcb_xlib_unlock: Assertion `c->xlib.lock’ failed.
執行步驟如下:
apt-get source libxcb-xlib0
sudo apt-get build-dep libxcb-xlib0
cd libxcb-1.0
vi src/xcb_xlib.c
+===========================================================+
編輯重點是 src/xcb_xlib.c 的第 41 , 50 行的 assert 都註解掉.
我參考 archlinux 的 patch , 把 assert 換成 if . 如下:
void xcb_xlib_lock(xcb_connection_t *c) {
_xcb_lock_io(c);
// assert(!c->xlib.lock);
if (!c->xlib.lock) {
c->xlib.lock = 1;
c->xlib.thread = pthread_self();
}
_xcb_unlock_io(c);
}
void xcb_xlib_unlock(xcb_connection_t *c) {
_xcb_lock_io(c);
// assert(c->xlib.lock);
if (c->xlib.lock) {
assert(pthread_equal(c->xlib.thread, pthread_self()));
c->xlib.lock = 0;
pthread_cond_broadcast(&c->xlib.cond);
}
_xcb_unlock_io(c);
}
+===========================================================+
接著回來重編deb套件包,再安裝它。
dpkg-buildpackage -rfakeroot -b -uc
sudo dpkg -i ../libxcb-xlib0_1.0-1.1_i386.deb
沒有留言:
張貼留言