Showing posts with label Linux. Show all posts
Showing posts with label Linux. Show all posts

Thursday, April 30, 2009

LDAP安装过程

前段时间在看LDAP方面的东西,最近重装了Ubuntu之后开始在自己的机器上装一个OpenLDAP。
装的过程中遇到不少问题,不过通过Google的帮忙,全部得到解决。下面装安装过程记录如下:

Berkeley DB 安装需要注意的地方
今天在装OpenLdap,结果要求先装上Berkeley DB,于是就先装BDB了。
按照Linux下安装软件三部曲,进行安装,但是在执行第一步configure时就报出下面这个错误:

Berkeley DB should not be built in the top-level or dist directories.

加上-prefix=/usr/local/BerkeleyDB之后问题同样存在,于是到网上去找了一个解决方案。具体方法如下:
# tar xvfz db-4.4.16.tar.gz
# cd db-4.4.16/build_unix/
# ../dist/configure -prefix=/usr/local/BerkeleyDB
# make
# sudo make install

BerkeleyDB安装完毕之后继续安装OpenLdap,但是configure时又出如下问题:
configure: error: BDB/HDB: BerkeleyDB not available

BerkeleyDB已经安装好了,为什么仍然出现这个错误呢? 继续Google之,发现解决方法如下:
$export CPPFLAGS="-I/usr/local/BerkeleyDB/include"
$export LDFLAGS="-L/usr/local/BerkeleyDB/lib"

需要注意的是上面两个命令需要以root身份执行。
执行完之后,继续configurate,这次还是有错,这次错误变成了:
configure: error: Berkeley DB version mismatch

增加下面一行之后,安装正确.
export LD_LIBRARY_PATH="/usr/local/ssl/lib:/usr/local/BerkeleyDB/lib"


[update in 2008-12-15]
今天重装Openldap再次遇到问题,通过Google找到一位兄弟的解决方案,特地补充进来,希望对于其它遇到相同问题朋友有用。
使用berkeleydb 4.7作为后端数据库时,安装Openldap过程中make这个过程会出现如下错误:
/bin/sh ../../..//libtool --tag=disable-shared --mode=compile cc -g -O2 -I../../../include -I../../../include -I.. -I./.. -I/ceno/lab/berkeleydb/include -c init.c
cc -g -O2 -I../../../include -I../../../include -I.. -I./.. -I/ceno/lab/berkeleydb/include -c init.c -o init.o
init.c: In function `bdb_db_open':
init.c:509: structure has no member named `lk_handle'
init.c: In function `bdb_back_initialize':
init.c:752: warning: passing arg 1 of `db_env_set_func_yield' from incompatible pointer type
make[3]: *** [init.lo] Error 1
make[3]: Leaving directory `/work/ceno/lab/openldap-2.4.11/servers/slapd/back-bdb'
make[2]: *** [.backend] Error 1
make[2]: Leaving directory `/work/ceno/lab/openldap-2.4.11/servers/slapd'
make[1]: *** [all-common] Error 1
make[1]: Leaving directory `/work/ceno/lab/openldap-2.4.11/servers'
make: *** [all-common] Error 1

现在的邮件列表有一个解决方法,不过这不是官方给出的解决方法,可能会在使用过程中引起其它问题:
http://www.openldap.org/lists/openldap-bugs/200805/msg00154.html

上述错误具体原因应该是berkeleydb 4.7中已经没有了lk_handle这个structure,而在Openldap中没有更新,导致该问题。
具体方法如下:
cd openldap-2.4.11/servers/slapd/back-bdb/
将init.c 和 cache.c中

#if DB_VERSION_FULL >= 0x04060012
改为
#if 0 && DB_VERSION_FULL >= 0x04060012
之后再make 就能通过了。


Openldap安装指南:http://www.openldap.org/doc/admin24/install.html

update 2009/03/13
今天查了些资料,把在安装过程中设置的几个参数搞明白了。
CPPFLAGS,LD_LIBRARY_PATH,LDFLAGS等参数需要在configure时指定,该参数会影响生成的Makefile文件。各参数的具体意义如下:

CPPFLAGS C/C++预处理器的命令行参数。
LDFLAGS 链接器的命令行参数。

LD_LIBRARY_PATH等PATH的意义如下:

CLASSPATH = specifies where the computer searches for java class libraries

LD_LIBRARY_PATH = specifies where the computer looks for dynamically-loaded libraries

PATH = specifies where the computer looks for executables

LIBPATH = also specifies where the computer looks for dynamically-loaded libraries (usually set just in case something doesn't support LD_LIBRARY_PATH)

update:
将文章从javaeye博客转移到目前这个博客中。

Friday, April 3, 2009

一个批量下载文件的脚本

最近在重新学习英语发音,李笑来老师的博客上提供了很多相关方面的资料。 其中有些页面有很多单词发音的wav音频文件,但是我的浏览器无法播放这些音频文件。于是准备把他下载下来,但是呢一个一个地下载实在是太慢了,而且也感觉比较笨。 于是自然想到写一个脚本来干这件事情。
先去看了一下包含有音频文件的HTML页面的源码,音频文件的行非常有规律。
对于这样的文件使用Shell非常容易处理。 下面就是我写的一个简单的脚本:
#!/bin/bash
wget $1 -O wav.html
egrep ".wav\>" wav.html | awk -F '"' '{print $2}' > wav.list
wget -i wav.list

怎么使用呢?只要这样就行:

star@star-desktop:~/Documents/English/pronounce/words$ ./getWav.sh http://www.xiaolai.net/index.php/archives/4047.html

其实还可以再改一改,比如把下载文件名也改成通过参数传递进去。 不过这个已经够我用了。
一转眼功夫就下载完了所有文件,实在是高效啊。
Linux下通过Shell脚本高效地完成一些繁琐的事情实在是太酷了。

Thursday, March 19, 2009

Ubuntu 8.10安装Oracle 10g笔记

上周末重新换了一块硬盘,因此操作系统和数据库都要重装一遍。重新安装Oracle 10g的过程中遇到不少有趣的问题,在解决这些问题的过程中学到了不少东西。
安装过程主要是参照孙高勇的那份文档来做的,但是在Ubuntu 8.10上面还会遇到一些其它问题。
1、关于安装是OUI中文的问题
该问题困扰我很久,一直没找到解决办法,最终采用英文环境进行安装以避免安装过程中的中文乱码问题。

2、安装过程运行runInstaller过程中会出现unzip的错误
该问题是由于Oracle 10g安装文件中/install 下的unzip与Ubuntu 8.10自带的unzip版本不一致导致的,我的解决方法如下:
install$ mv unzip unzipbak
install$ ln -s /usr/bin/unzip unzip

3、运行runInstaller后出现如下报错:
Error in writing to directory /tmp/OraInstall2009-03-16_02-26-36PM. Please
ensure that this directory is writable and has at least 60 MB of disk space.

该问题通过修改/install下所有文件的权限得于解决

在解决安装过程出现的问题时,发现了自己现在有一个很不好的习惯:在出现问题是首先想到的不是分析问题并尝试解决,而是通过Google找答案。
查了一下google的web history,发现只要在上网,每天都用使用Google进行搜索。在这过程中很多问题或许能找到答案,但是对于问题的理解并不深刻,下次出现该问题仍然无法解决。
在解决第二个问题过程中,我在Google没有发现任何有效信息,最终还是自己静下心来分析出错的日志,最终确认是由于unzip的版本冲突导致该问题。
在这过程中给我印象非常深刻,很多的问题在分析日志的过程中肯定能找到线索, 这在使用Ubuntu的过程中非常重要。

Tuesday, March 10, 2009

expect小记

今天在找资料时意外地学到了如何在Shell中进行交互。 学习资源在这里
下面是我写的一个在Terminal里通过bash操作SQLPlus的脚本。
#!/usr/bin/expect

spawn sqlplus

expect "name"

send "umail\r"

expect "password\r"

send "umail\r"

expect "SQL>"

send "desc employees\r"

expect "SQL>"

send "quit\r"
上面的几个指令的意义如下:
pawn命令激活一个Unix程序来进行交互式的运行。 
send命令向进程发送字符串。
expect命令等待进程的某些字符串。 
expect支持正规表达式并能同时等待多个字符串,并对每一个字符串执行不同的操作

这个东西非常有用,可以直接将SSH,FTP等写到脚本里面,不需要人工来干预它。在系统维护中可以写一些脚本处理某些批量处理的问题,而不需要有人来看着它。
更多内容请看这里