Wednesday, September 2, 2009

RHEL 5 配置ORACLE ODBC

ODBC效率超低,但沒辦法,有個ARCPLAN的項目要用到ODBC連ORACLE。

1.ODBC MANAGER:在LINUX中用unixODBC作為ODBC管理器。
2.ORACLE ODBC DRIVER:ORACLE官方的Instant Client Package中包含了ODBC驅動。

unixODBC要選擇2.2.12以上版本,否則跟ORACLE Instant Client Package 10.2.0.4版本不兼容。
ORACLE Instant Client Package 10.2.0.4安裝Basic和ODBC這兩個,最好再裝上SQL*Plus這個,以便檢查分析之后的配置是否有錯。

配置ODBC DRIVER(/etc/odbcinst.ini)
[oracle_driver]
Description=odbc for oracle
Driver=/usr/lib/oracle/10.2.0.4/client64/lib/libsqora.so.10.1

[ODBC]
Trace=1
Debug=1
Pooling=No

配置SYSTEM DSN(/etc/odbc.ini)
[FINE_ZHH]
Driver=oracle_driver
Description=
DSN=FINE_ZHH
ServerName=FINE_CK
Database=ora92
UserID=theusrname
Password=thepasswd
METADATA_ID=0
ENABLE_USER_CATALOG=1
ENABLE_SYNONYMS=1

在/etc/profile文件最后加上所需的環境變量,如下(具體參數需要根據自己實際修改):
#ORACLE INSTANT CLIENT
#ADD BY JOJO
ORACLE_HOME=/usr/lib/oracle/10.2.0.4/client64
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib
SQLPATH=$ORACLE_HOME/lib:$SQLPATH
TNS_ADMIN=$ORACLE_HOME
PATH=$PATH:$ORACLE_HOME/bin:.
TWO_TASK=orcl

export ORACLE_HOME
export SQLPATH
export TNS_ADMIN
export LD_LIBRARY_PATH
export TWO_TASK
export PATH

保存profile文件后執行#source /etc/profile命令使設置的環境變量在不重新登錄的情況下生效。
后來發現設置LD_LIBRARY_PATH這個變量重新登錄后無法生效。GOOGLE了一下發現不建議設置這個系統全局環境變量,于是干脆就把/usr/lib/oracle/10.2.0.4/client64/lib目錄下的文件都cp到/usr/local/lib目錄下。

在$TNS_ADMIN目錄下建立sqlnet.ora文件,內容如下:
SQLNET.AUTHENTICATION_SERVICES=(NTS)
NAMES.DIRECTORY_PATH=(TNSNAMES,ONAMES,HOSTNAME)

在同一目錄下建立tnsnames.ora,內容如下(具體參數需要根據自己實際修改):
FINE_CK=
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.3.3)(PORT=1521))
)
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=ora92)
)
)

到此為止配置都已經完成,通過sqlplus theusrname/passwd@FINE_CK命令如果能成功連接到ORACLE數據庫,那說明tnsnames.ora文件配置沒有問題。然后可以用unixODBC提供的isql FINE_CK -v命令測試ODBC配置是否正確了,成功連接的話就表明配置都沒有問題,可以使用ODBC連ORACLE了。

补充:
今天发现用2.2.14 x86_64版本的unixODBC虽然能连数据库,但在实际应用程序中无法SELECT,用ISQL工具登录执行select 1 from dual;发现报“IM003”错误。GOOGLE了一下,原来是个BUG,可以手动修改源代码,见http://forums.oracle.com/forums/thread.jspa?threadID=340030&start=15&tstart=60
一个省心的办法是直接下载测试版本的2.2.15pre,然后编译并安装。此时运行odbcinst -j;发现系统DSN和ODBC DRIVER配置文件的目录从/etc/目录改为/usr/local/etc/这个目录。要把原来的文件复制到新目录,其他不变。

Tuesday, December 30, 2008

wl-500gp v2 boots kamikaze(kenel2.6) without wifi

发觉如果仅仅是用来做路由或者加上U盘做个FTP的话,WL-500gp v2刷openwrt的2.4内核+brcm wl的wifi驱动应该是完美了。

但对于wl-500gp+linux 2.6来说,能发挥想象的空间真的是太多了,虽然现在open source的b43驱动对于wl-500gp v2的那个妖腻的无线模块来说还不能用,不过还是有先放弃WIFI,刷2.6做自己想做的东西的冲动~~!

冲动之下,参照http://wiki.openwrt.org/OpenWrtDocs/Hardware/Asus/WL500GPV2先尝试了一下没有USB的配置,成功BOOT。一开始是SVN了最新的kamikaze代码(r13774),且没有修改prom.c和setup.c(CFE的问题导致无法BOOT),不修改是为了偷懒(哈哈),想看看是不是最新的代码里解决了这个CFE的问题,结果发觉不行,启动不了,倒~~!

期待B43快点搞定LP PHY~~~!

对于USB2.0,似乎存在问题,所以只启用了USB1。在make menuconfig里面没有选USB2,只是选了OHCI的USB1,然后也没有patch usb2.0,直接在make kernel_menuconfig的Device Drivers-->
USB support-->OHCI support for Broadcom SSB OHCI core。

Monday, December 22, 2008

OpenWRT kamikaze with linux2.4 on wl-500gp v2

京东上买了一个wl-500gp,看中的是有2个USB2.0口,用处多多啊~~!拿到手一看是v2版本的。昏倒了,V1的缩水版,不过没关系,跟自己比是缩水了,但和其他的比还是不错的。由于bcm5354芯片在LINUX2.6下WIFI部分暂时不能用,所以本来是想用kamikaze linux2.6内核的,只能暂时等等,希望OpenWRT的开发队伍努力把WIP这个状态快点改变成SUPPORT。

对于BCM5354,TOMATO支持的是不错的,DD-WRT也支持,貌似都是2.4内核。可惜DD不太稳定,慢;TOMATO是不支持USB,只能放弃这2个。对于ASUS的那个OLEG,准备在刷OpenWRT和DD以及TOMATO都不成功的情况下尝试。

在OpenWRT的主页上发现跟WL-500GP V2几乎一样硬件的WL-520GU,最后给出了一个WL-520GU上刷kamikaze with linux2.4内核的一个页面http://mightyohm.com/blog/2008/11/building-a-wifi-radio-part-4-installing-openwrt。这个完全兼容WL-500GP V2,那个页面也有作者自己编译好的TRX文件下载。我自己也编译了,但是因为没有CONSOLE,不高兴尝试。直接拿来主义。

刷的过程挺简单,比上次刷WHR-HP-G54要简单:
1.先是把电源拔掉,然后按住RESET不放,接上电源。
2.看到灯闪了之后过一秒,然后放掉RESET,此时应该进入了RESTORE模式。
3.应该这个时候能PING到路由器192.168.1.1。
4.然后TFTP把trx文件传上去(我是在XP的CMD里的):tftp -i 192.168.1.1 PUT openwrt-brcm-2.4-squashfs.trx
5.我发现4秒钟就搞定了。按照网上说的,因为ASUS的路由没有刷好之后自己重新启动的功能,所以要等个3到5分钟(主要是没有串口连接,否则人家都能从串口输出上看是不是完成)。
6.3分钟后我拔掉了电源,然后等了几秒再接上电源。
7.发现很快就能PING到路由,但是POWER的灯要过一段时间才亮,因为在创建JFFS文件系统(就是那个可写的文件系统)。
8.一切OK之后就可以TELNET进去了,如果进去之后改了密码,就开启了SSH同时关闭了TELNET。
9.一开始无线是关闭的,要进行配置,具体见http://mightyohm.com/blog/2008/11/building-a-wifi-radio-part-4-installing-openwrt

Monday, September 29, 2008

淘了一台PowerMac G4 400 (AGP 2X, Graphite)

本来是想淘PowerMac G3 450的,谁知道淘宝卖家快递过来的居然是G3 300,我倒!powermac g3系列只有450肯定是第二版改进过的主板,而300的肯定是第一版不支持slave硬盘的,那本来想放家里搞个文件ftp server都不行,只好退货。

继续淘,大多都是非本地卖家,只有一家本地卖家,但价格开得有些高。最终看到有个实体店在龙漕路上的,就直接过去看了。果然,g3 450在国内应该属于是希世珍品了,那个实体店也只有2台残缺不全的g3 350,而且ide控制芯片也是第一版的,淘g3绝望中。。。。。

不过无意间发现他们有好多powerMac g4 400的机器,因为广告公司退下来的,仔细看了一下,成色还是不错的,9成新一定有。500rmb一台。再看看旁边一排镜面的PowerMac G4,这个贵了,2000+rmb,放弃。powerpc g4 400Mhz的芯片好歹也要比intel的piii 1Ghz强吧!本来准备把给爸爸上网的机器的cpu换成piii 1G的,再给他加个dvd光驱和sdram的内存,现在想想,一个PowerMac G4主机才500,里面包括了sdram和dvd光驱,以及艺术品般的机箱!而且来都来了,挑个回去mac os x 10.3一下应该没问题。

或许大多数国人都是这样,不是自己的东西是不会去爱惜的!我一共看了5台机箱,每个机箱里的塑料扣子都有坏的,有些甚至几个全掉了,明显都是关机箱的时候蛮力的结果!最终选了一个扣子都在,但有一个坏掉的,哎~~!试了下机器,里面预装的是mac os 9.2,用起来不太习惯,明显跟10系列有些不一样。看了下内存,有128在上面,一看就是自己加的,就是那种kingmax tiny bga封装的,我自己也有2根这样的,pc-150,128m的,哎,太小了,是512就好了。显卡是AGP 2X的镭pro,不是最早一批的pci显卡,也不是后来的AGP 4x,中规中举。

决定就这台了,叫卖家送根256的内存,硬是不肯,只肯送128的。回家一看,他给错了,给了根256M pc-150的kingmax,窃喜。哈哈!加上一根自己的128之后512的内存,把原装的20g的5400转的硬盘换成了80g的7200转的硬盘,更新到2001年的那个4.2.8的firmware,然后装了Mac OS X 10.3.5,先试试速度如何。发现平常的应用完全没问题,响应速度大大出乎我意料,跟我的iBook G4 1Ghz的差不多速度,谁叫笔记本硬盘弱呢?

也许pc业里只有苹果的电脑有收藏价值,几乎每一部苹果电脑的主机都是一个精心设计的艺术品(不排除有几款的确也很傻)。
可惜啊,苹果抛弃了优秀的power这个架构投向了intel,对于苹果来说绝对是件好事,聪明之举,既降低了成本,又迎合了广大x86架构使用者。但我的一个梦想就因此永远无法实现——用自己的钱买一台全新的PowerMac G6。

Saturday, September 13, 2008

miniBSD from FreeBSD 7.0r

网上有使用FreeBSD 4.x , FreeBSD 5.x , FreeBSD 6.x 制作miniBSD的具体方法(miniBSD from FreeBSD 4.x),但我手头只有FreeBSD 7.0r,所以参照FreeBSD 6.x的方法作了一个尝试,原文是刷到CF卡里的,但我没有CF卡,但有U盘,所以刷到了U盘里,可是用U盘启动总是显示出所有寄存器的值之后报BTX halted错误。最后只好使用vmware虚拟出一块ide硬盘测试从FreeBSD 7.0制作的miniBSD。

1.安装FreeBSD 7.0
这个不用多说,你有盘装起来应该不成问题,选择minimal安装即可。

2.安装jail
2.1安装jail软件包
sysinstall进入到配置里,先进入Options,把Install Root改成/usr/jail
然后进入Custom里的Distributions,选中minimal,之后commit安装。
2.2复制文件到jail里
#cp /etc/resolv.conf /usr/jail/etc/resolv.conf
#cp /boot/kernel/kernel /usr/jail/boot/kernel/kernel
#cp /boot/defaults/loader.conf /usr/jail/boot/defaults/loader.conf
#cp /etc/localtime /usr/jail/etc/localtime
#cp /etc/wall_cmos_clock /usr/jail/etc/wall_cmos_clock

3.进入jail
3.1.设置prompt变量,否则你进入到jail之后自己也不知道有没有退出。
编辑/usr/jail/root/.cshrc文件,在最后加上
set prompt = " miniBSD %~ %# "
3.2.挂载dev并进入jail
#mount -t devfs devfs /usr/jail/dev
#chroot /usr/jail /bin/csh
此时命令提示符就变成之前设置的miniBSD#了,这样就知道自己在jail里。

4.创建文件夹
这一步可以自己创建,也可以使用脚本文件(脚本文件的原作者在脚本中有注明)。create-minibsd-dirs.sh


5.复制boot里的文件和binary
5.1.复制loader
#cd /boot
#cp -r loader /usr/minibsd/boot/
#cp beastie.4th /usr/minibsd/boot/
#cp frames.4th /usr/minibsd/boot/
#cp screen.4th /usr/minibsd/boot/
#cp defaults/loader.conf /usr/minibsd/boot/defaults/
5.2.复制工具binary
使用一个脚本,mkmini.sh 参数为minibsd6.files
mkmini.sh
minibsd6.files

6.定制kernel
我直接用了general的,省时省力,等boot miniBSD成功之后再定制也不迟,呵呵。
最好把kernel压缩一下,这样可以节省空间。
#cp /boot/kernel/kernel /usr/minibsd/boot/kernel/
#cd /usr/minibsd/boot/kernel
#gzip -9 kernel

7.复制lib
mklibs.sh
用脚本根据复制的binary来复制lib之后,还差几个lib需要复制。
#cp -p /usr/lib/pam* /usr/minibsd/usr/lib/

8.复制/etc里的配置文件
8.1.设置密码
因为密码文件是由passwd命令产生的,所以先在jail里把密码用passwd设置好,然后再把密码文件复制到miniBSD里。
8.2.复制/etc
这个是原本是freebsd6的,7里面我已经修改过了。
copy-etc-6.sh

9.设置配置文件
9.1.把/usr/minibsd/etc/fstab作一下修改,因为当用硬盘启动miniBSD的时候,硬盘是被认作ad0的,设置成只读,这样对于CF卡之类有好处,不至于卡很快报废,呵呵。内容如下:
/dev/ad0s1a / ufs ro 1 1
9.2.对于/usr/minibsd/etc/rc.conf需要进行设置,根据自己实际情况设置,
因为没有swap,所以dumpdev="NO",另外要使用到内存盘,因为我们的/文件系统是read only的。这里可以使用rc.diskless2,有空我研究一下。我的内容如下:
hostname="jojo.minibsd"
sshd_enabled="NO"
usbd_enabled="NO"
sendmail_enabled="NO"
inetd_enabled="NO"
portmap_enabled="NO"
update_motd="NO"
varsize=8192
varmfs="YES"
tmpmfs="YES"
tmpsize=8192
dumpdev="NO"
9.3.为了跳过启动时的十秒等待,可以编辑/usr/minibsd/boot/boot.rc这个文件,加入如下这行:
autoboot 0

10.打包miniBSD
#cd /usr/minibsd
#tar cfvz /usr/minibsd-7.tar.gz *

11.把miniBSD复制到硬盘(CF卡或者U盘)上(如果你想用dd命令把磁盘文件直接刷到硬盘上,直接跳到12)
因为我的主板USB启动有些问题,可能是FreeBSD的loader跟我的主板不兼容,所以我使用IDE硬盘,如果你是U盘的话,下面的ad1和ad0都改成da0即可。
10.1.格式化硬盘,因为ad0是第一块IDE,所以新接上去的这里是ad1。
#fdisk -BI /dev/ad1
11.2.创建一个slice,使用整个硬盘空间。
#bsdlabel -B -w ad1s1
11.3.创建filesystem。
#newfs -U /dev/ad1s1a
11.4.挂载到/mnt。
#mount /dev/ad1s1a /mnt
11.5.把刚才打包的miniBSD全解包到/mnt目录。
#cd /mnt
#tar xfvzP /usr/minibsd-7.tar.gz
11.6.设置成可引导,即把boot0程序写进硬盘的mbr
#boot0cfg -v -B ad1
11.7.跳到13

12.把miniBSD刷到硬盘(CF卡或者U盘)上
12.1首先获得要刷的磁盘大小
#bsdlabel -w -An-B ad1 auto | grep sectors/unit
得到一个sector的数量。
12.2创建磁盘文件(内容用零填充),[number of sector]就是刚才得到的数字
#dd if=/dev/zero of=/usr/minibsd-disk.bin bs=512 count=[number of sector]
12.3创建一个minibsd-disk.bin文件的vnode
#mdconfig -f /usr/minibsd-disk.bin -u 0
12.4现在我们对/dev/md0这个vnode的操作就等于是对磁盘文件minbsd-disk.bin的操作了。
#fdisk -BI /dev/md0
#bsdlabel -B -w md0s1
#newfs -U md0s1a
#mount /dev/md0s1a /mnt
这几步格式化了vnode,创建了一个slice和一个ufs文件系统,并挂载到/mnt目录下。
12.5把我们的minibsd解包到/mnt
#cd /mnt
#tar xfvzP /usr/minibsd-7.tar.gz
12.6对vnode的操作结束,清理一下
#cd /
#umount /mnt
#mdconfig -d -u 0
12.7现在可以用dd命令把装有miniBSD的minibsd-disk.bin文件刷到硬盘上了
#dd if=/usr/minibsd-disk.bin of=/dev/ad1 bs=8k

13.用装好的minibsd引导
把这块装有miniBSD的硬盘接到电脑上启动吧。

我这样做出来的miniBSD打包后9M,这样的一个精简的Freebsd能干什么呢?加入自己想要的,像m0n0wall和pfSense一样做个路由不错。不过这可是DIY的哦。

Monday, September 8, 2008

从dd-wrt v24-sp1刷到tomato v1.21

能刷dd-wrt不代表你能高效得运行。果然今天就遇到了路由CPU 100%的时候,网页都开不了。而且dd的控制页面虽然蛮漂亮,但内存少了之后就反应很慢了。看来16M内存还是相当不够的,况且我还有很多DD的服务都是没有开的。这么看升级到32M甚至64M的内存不是没道理。

既然效率不高,就打算换tomato,从二进制的bin文件上看,tomato东西的确应该比dd要少,dd标准版2.4sp1是3.6M,而tomato v1.21是2.7M,小了差不多1M,跟dd的micro版本差不错。同时LINUX2.4内核,东西小,功能就少,希望效率也高,呵呵。

从原厂刷比从dd刷步骤繁琐(这个繁琐的步骤在刷DD的时候已经体验过了),幸好现在我是从dd刷起。网上说dd在nvram中的密码是加密的,而tomato是不加密的,所以要把dd的密码设置成密文大家都知道的admin(尤其是没有reset按键的路由,一开始没理解为什么),其密文是bJz7PcC1rCRJQ,也就是tomato的密码。否则不是admin作为密码的话你就要自己登录到路由的控制台去看nvram里的密文了,具体操作GOOGLE一下就知。

从DD的更新页面选tomato.trx,点UPDATE的时候说不是BIN文件,看来够笨的,只从后缀看,那就把后缀改成BIN,然后再选择,再点UPDATE。然后就是等待,发现等待的时候会出现秒数倒计时,不过明显不准的,呵呵。

好了之后路由自己就重新启动了,最紧张的时候到了,因为我在更新的时候选的是don't reset,不回复到默认设置,所以现在路由的地址还是原来的192.168.2.1。果然,打这个地址要求登录,不过怪了,死活登录不了,用了root+bJz7PcC1rCRJQ和admin+bJz7PcC1rCRJQ都不行,不知道哪里出问题了。这回才体会到reset按键的重要性,不管三七二十一,反正进不去了,直接按了RESET,重启之后用PSP连了一下,发觉路由地址变成192.168.1.1了,看来RESET起作用了,由192.168.1.1登录,然后用默认用户名和密码root+admin顺利进去了。

第一感觉,web的ui管理界面速度很快,比DD的快不少!看了下菜单,功能的确没有DD多。功能没有DD多不是说拥有的功能没有DD强!用了一下,看了下空闲内存,果然印证了网上流传的一句话,用来玩刷DD,用来当路由刷TOMATO。现在要把NVRAM清空一下,这样就可以去除之前遗留在NVRAM中但TOMATO用不到的数据。TOMATO的WEB管理UI中直接有清除NVRAM的功能,在administration->Configuration->Restore Default Configuration中,选择Erase all data in nvram memory(throrought),点OK之后所以的设置就像按了RESET一样(不知道我之前按的RESET是不是已经做了这步了?)。希望TOMATO能稳定快速的运行。

对于DD,其实我还是蛮喜欢的,但就是硬件机能不够,玩DD不爽。现在DD有支持X86的了,貌似可以考虑把家里的c400+i810+256M的老台机整成DD的路由玩。呵呵~~!

Friday, September 5, 2008

给WHR-HP-G54-AP洗脑

本来是想用一阵子Buffalo AirStation的原厂固件的,但发现老是有人蹭我的网,而且你蹭就算了,关键是搞得我下载东西只有10k/s的速度了。可以做MAC过滤,但这个比较不好玩,直接到www.dd-wrt.com去下了v24-sp1版本的固件准备刷到小黑脑袋里。然后玩玩QoS,呵呵!

做任何事情貌似还都要求手快,原来把下载的固件传到路由上还不是那么简单的,不过说不简单,其实对于手快的朋友简直就是小事。

按照网上教程所说的:
1.按住RESET(居然说至少30秒,我用牙签按得手酸快了),然后拔掉路由电源。
2.到固件存放的本地目录准备好用tftp上传固件到路由。先把命令打好,回车先不按,要等下考验眼明手快的,哈哈。
我的固件放在I盘,上传命令:tftp -i 192.168.11.1 PUT dd-wrt.v24_std_generic.bin
3.这部是关键,先接上路由电源,按住RESET,当面板上红灯开始闪的时候立马放开RESET去按回车。我失误了2次,主要是对于红灯闪的时机没有判断好,导致了2次上传失败的TIMEOUT。成功的话会告诉你TRANSFER SUCCESSFUL。之后就是等路由重启。现在可以通过192.168.1.1进入DD-WRT的设置界面了。哈哈。

听说TOMATO比DD稳定,等我发现DD不稳定的时候再洗脑一次,洗个烂番茄进去,咔咔~~!