2008年1月25日星期五

解决“由于应用程序配置不正确,程序未能启动”

昨天不知道怎么搞的,3天没用Windows就给我找茬,所有基于.Net的程序都报错:“由于应用程序配置不正确,程序未能启动”(包括卡巴斯基,MS Office2007,MSN, MS VS2005...)
折腾半天,又是修复系统的,还是没搞定。刚终于百度到一个好方法:
在目标机器安装VCRedist_x86.exe可以解决这个问题。该文件可以在MSDN网站上下载。
Microsoft Visual C++ 2005 Redistributable Package (x86)下载
Microsoft Visual C++ 2005 SP1 Redistributable Package (x86)下载
原因:


        一般认为,VC2005编译出来的东西,如果用了atl或者mfc,需要atl80.dll 或者msmfc80.dll,我在一开始的时候也是这么认为的,我把这两个文件放在了path中可以找到的地方。因此用depends看出来是没问题的。
        但是事实上,从VC2005开始,(可能2003,但是我没有用过)这些dll是不像以前的程序那样直接被加载进进程的。查看%SYSTEMROOT%\winsxs会发现里面有很多类似于x86_Microsoft.VC80.ATL_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_6e805841的目录,这些目录里面包含了atl80.dll, msmfc80.dll。然后在manifests 目录里面有对应的manifests:
x86_Microsoft.VC80.ATL_1fc8b3b9a1e18e3b_8.0.50727.42_x-ww_6e805841.manifest
这是VC8的一个改变。VC8编译的程序在运行时加载动态库(crt, mfc, atl )都是放在一个类似全局类型库的地方。不再像以前MS所建议的那样,为了避免dll hell而把动态库放在程序同级目录。而这个全局类型库的地方就是winSxS,同时加载之前还需要有该dll对应的manifest。
        具体加载dll的时候为什么需要Manifest我不是很清楚,Visual C++ 2005的 program manager Martyn Lovell在他的blog中有提到要解释这样做的原因,但是至今没有下文:(
        暂时能够知道的是,加载dll需要manifest,没有manifest的动态库即使放在path下也不会加载。而VCRedist_x86.exe会帮你把manifest和dll放在正确的地方。

阅读全文...

2008年1月24日星期四

Ubuntu下安装Oracle 10g企业管理器

解压三个10.2.1.0的zip包,运行后 ./runInstaller 提示系统不支持
如下:
检查操作系统版本: 必须是redhat-3, SuSE-9, redhat-4, UnitedLinux-1.0, asianux-1 or asianux-2
未通过 <<<< 解决办法:sudo vi /etc/redhat-release
内容:entOS release 4.4 (Final) 保存退去就可以了

阅读全文...

Unubtu下安装Oracle 10g企业管理器乱码

好不容易Down下来的OEM ./runInstall的时候居然乱码。java中文环境的问题。安装的过程中看到控制台信息显示Orale的安装程序使用的自带的jre放在tmp目录下,退出后就自动删除了,没法配置,Google了一下找到带参数使用系统jre的办法。
当然前提要系统装的jre中文环境显示正常(以JRE1.5.0为例):
$ cd /usr/lib/jvm/java-1.5.0-sun/jre/lib/fonts
$ sudo mkdir fallback
拷贝中文字体到fallback
$ sudo cp ~/ZhunYan.ttf fallback/
$ sudo mkfontscale
此时生成一个fonts.scale文件,将其加到/usr/lib/jvm/java-1.5.0-sun/jre/lib/fonts/fonts.dir后
注意修改fonts.dir成可写属性
$ sudo cat fonts.scale >> ../fonts.dir
修改环境变量
$ sudo vi /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
:/usr/games:/usr/lib/jvm/java-1.5.0-sun/bin"
此时JRE1.5.0应该就可以正常显示中文了。
接下来就是运行runInstaller了
$ ./runIstaller -jreLoc /usr/lib/jvm/java-1.5.0-sun/jre
OK 中文界面出来了,再也不是一群方框框了,哈哈

阅读全文...

2008年1月23日星期三

[转]RedHat AS4下安装oracle 10g

  系统环境:
  1、物理内存:16G
  2、交换空间12G
  3、禁用secure Linux
  4、已经安装下列包(为简单起见,安装RedHat AS 4时最好选择全部安装):
   A、X Window System
   B、GNOME Desktop Environment
   C、Editors
   D、Graphical Internet
   E、Text-based Internet
   F、Server Configuration Tools
   G、Development Tools
   H、Administration Tools
   I、System Tools



  开始:
  1.下载软件
  2.解压软件
  3.修改host文件
  4.设置核心参数
  5.参数配置
  6.安装
  7.安装后配置


  
  下载软件
  1.Oracle Database 10g Release 2 (10.2.0.1) Software下载位置:
  http://otn.oracle.com/software/products/database/oracle10g/index.html
  解压软件
  1.解压命令:unzip 10201_database_linux32.zip
  2.解压后产生一个包含安装文件的目录(db/Disk1)(实际上解压到一个名为database的目录,不知道是官方文档有误还是怎么回事)



   修改host文件
  1./etc/hosts文件中必须包含a fully qualified name for the server
  <IP-address> <fully-qualified-machine-name> <machine-name>


  设置核心参数
  1.在/etc/sysctl.conf文件中加入下列行:
  kernel.shmall = 2097152
  kernel.shmmax = 2147483648
  kernel.shmmni = 4096
  # semaphores: semmsl, semmns, semopm, semmni
  kernel.sem = 250 32000 100 128
  fs.file-max = 65536
  net.ipv4.ip_local_port_range = 1024 65000
  net.core.rmem_default=262144
  net.core.rmem_max=262144
  net.core.wmem_default=262144
  net.core.wmem_max=262144
  2.运行下列命令改变核心参数:/sbin/sysctl –p
  3.在/etc/security/limits.conf文件中加入下列行:
  * soft nproc 2047
  * hard nproc 16384
  * soft nofile 1024
  * hard nofile 65536
  4.在/etc/pam.d/login文件中加入下列行,如果里面没有的话:
  session required /lib/security/pam_limits.so
  5.通过编辑/etc/selinux/config 文件禁用secure linux,确认其中的SELINUX标记如下:SELINUX=disabled。也可以通过GUI工具(Applications > System Settings > Security Level),选择SELinux禁用该属性。



  参数配置
  1.检查下列包是否安装,若未安装则要先安装:
  # From RedHat AS4 Disk 2
  cd /media/cdrecorder/RedHat/RPMS
  rpm -Uvh setarch-1.6-1.i386.rpm
  rpm -Uvh compat-libstdc++-33-3.2.3-47.3.i386.rpm
  rpm -Uvh make-3.80-5.i386.rpm
  rpm -Uvh glibc-2.3.4-2.i386.rpm


  # From RedHat AS4 Disk 3
  cd /media/cdrecorder/RedHat/RPMS
  rpm -Uvh openmotif-2.2.3-6.RHEL4.2.i386.rpm
  rpm -Uvh compat-db-4.1.25-9.i386.rpm
  rpm -Uvh libaio-0.3.102-1.i386.rpm
  rpm -Uvh gcc-3.4.3-9.EL4.i386.rpm



  # From RedHat AS4 Disk 4
  cd /media/cdrecorder/RedHat/RPMS
  rpm -Uvh compat-gcc-32-3.2.3-47.3.i386.rpm
  rpm -Uvh compat-gcc-32-c++-3.2.3-47.3.i386.rpm
  2.创建下列组和用户
  groupadd oinstall
  groupadd dba
  groupadd oper


  useradd -g oinstall -G dba oracle
  passwd oracle
  3.创建安装oracle的目录
  mkdir -p /u01/app/oracle/product/10.2.0/db_1
  chown -R oracle.oinstall /u01
  4.用root登录,执行下列指令:
  xhost +<machine-name>
  5.用oracle登录把下列行加在.bash_profile文件末尾,注意把其中ORACLE_SID换成自己的实例名:
  # Oracle Settings
  TMP=/tmp;
  export TMP
  TMPDIR=$TMP;
  export TMPDIR



  ORACLE_BASE=/u01/app/oracle;
  export ORACLE_BASE
  ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1;
  export ORACLE_HOME
  ORACLE_SID=orcl;
  export ORACLE_SID
  ORACLE_TERM=xterm;
  export ORACLE_TERM
  PATH=/usr/sbin:$PATH;
  export PATH
  PATH=$ORACLE_HOME/bin:$PATH;
  export PATH


  LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;
  export LD_LIBRARY_PATH
  CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
  export CLASSPATH
  #LD_ASSUME_KERNEL=2.4.1;
  export LD_ASSUME_KERNEL



  if [ $USER = "oracle" ]; then
   if [ $SHELL = "/bin/ksh" ]; then
   ulimit -p 16384
   ulimit -n 65536
   else
   ulimit -u 16384 -n 65536
   fi
  fi



  安装
  1.用oracle用户登录。如果用的是X模式,要把DISPLAY设置如下:
  DISPLAY=<machine-name>:0.0; export DISPLAY
  2.在Disk1目录下用如下命令开始安装:
  ./runInstaller
  3.在安装过程中输入合适的ORACLE_HOME和实例名。详细过程就不说了,大家看着提示填写就好。完成后的画面中会有管理端入口地址和sqlplus入口地址。


  安装后配置
  1.编辑/etc/oratab文件设置每个实例的重启标志为“Y”:
  TSH1:/u01/app/oracle/product/10.2.0/db_1:Y


  OK,安装结束了,你可以从浏览器了键入安装完成管理端地址即可登录进行数据库性能监测调整和用户管理了。



  rpm -Uvh参数是更新安装的意思,如果你根本没装这些包,需要用rpm -ivh参数,查看包的参数是rpm -qa|grep 包名


  [root@jsj ~]# cd /media/cdrom/RPMS
  [root@jsj RPMS]# rpm -Uvh openmotif-2.2.3-6.RHEL4.2.i386.rpm
  openmotif-2.2.3-6.RHEL4.2.i386.rpm: not an rpm package (or package manifest): 输入/输出错误
  [root@jsj RPMS]# rpm -Uvh compat-db-4.1.25-9.i386.rpm
  warning: compat-db-4.1.25-9.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
  Preparing...#######################################[100%]
  package compat-db-4.1.25-9 is already installed
  [root@jsj RPMS]# rpm -Uvh libaio-0.3.102-1.i386.rpm
  libaio-0.3.102-1.i386.rpm: not an rpm package (or package manifest): 输入/输出错误
  [root@jsj RPMS]# rpm -Uvh gcc-3.4.3-9.EL4.i386.rpm
  warning: gcc-3.4.3-9.EL4.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e
  Preparing... ########################################### [100%]
  package gcc-3.4.3-9.EL4 is already installed

阅读全文...

2008年1月22日星期二

Ubuntu7.1下进入Motorola E6 USBLan

搞了半天终于能在Ubuntu7.1下Telnet进Motorola E6了。
不知Ubuntu7.1下怎么没有zaurus模块了,要自己重新编译内核
参考:http://www.mail-archive.com/ubuntu-bugs@lists.ubuntu.com/msg572598.html

得到zaurus.ko(这里上传一个提供下载)Ver:2.6.22-14-generic zaurus.ko

$ sudo mkdir /lib/modules/2.6.22-14-generic/kernel/drivers/net/usb
$ sudo cp /usr/src/linux-source-2.6.22-2.6.22/drivers/net/usb/zaurus.ko
/lib/modules/2.6.22-14-generic/kernel/drivers/net/usb
$ sudo depmod -a
$ sudo modprobe zaurus
$ sudo modprobe usbnet
$ sudo modprobe cdc-acm

将E6连接方式设置为USB LAN,连接数据线。dmesg可以看到硬件插入的信息:
$ demsg | grep usb | more
[ 4836.364634] usbcore: registered new interface driver cdc_ether
[ 4836.365758] usbcore: registered new interface driver zaurus
[ 4869.864024] usb 5-5: new high speed USB device using ehci_hcd and address 2
[ 4869.997306] usb 5-5: configuration #1 chosen from 1 choice
[ 4869.998786] usb0: register 'zaurus' at usb-0000:00:1d.7-5, pseudo-MDLM (BLAN) device, b6:68:
8a:d2:17:75

这时ifconfig就已经能看见usb0的一个网卡了
$ sudo ifconfig usb0 192.168.1.1
$ telnet 192.168.1.2
Trying 192.168.1.2...
Connected to 192.168.1.2.
Escape character is '^]'.

MontaVista(R) Linux(R) Consumer Electronics Edition 3.1
Linux/armv5tel 2.4.20_mvlcee31-mainstone_pxa27x
(none)login: root

OK,久违了的telnet见面出现了,HOHO~
参考:http://wiki.openezx.org/Get_a_shell
http://blog.csdn.net/yingfox/archive/2007/10/18/1831860.aspx

阅读全文...

2008年1月18日星期五

MYSQL:Host 'hostname' is blocked because of many connection errors

连接数据库出错:MYSQL:Host 'hostname' is blocked because of many connection errors
Google了下
这说明mysqld已经得到了大量(max_connect_errors)的主机'hostname'的在中途被中断了的连接请求。在 max_connect_errors次失败请求后,mysqld认定出错了(象来字一个黑客的攻击),并且阻止该站点进一步的连接,直到某人执行命令 mysqladmin flush-hosts。(如:mysqladmin --socket=/data/app/mysql/data/mysql.sock flush-hosts -h 192.168.50.1 -uroot)
缺省地,mysqld在10个连接错误后阻塞一台主机。你可以通过象这样启动服务器很容易地调整它: shell> safe_mysqld -O max_connect_errors=10000 &
或者直接在/etc/my.cnf里面增加: set-variable = max_connect_errors=500 ,设置之后重启MYSQL生效.
注意,对给定的主机,如果得到这条错误消息,你应该首先检查该主机的TCP/IP连接有没有问题。如果你的TCP/IP连接不在运行,增加max_connect_errors变量的值对你也不会有帮助!

阅读全文...

2008年1月10日星期四

【转】find命令常用法

find . -size 8 -prune
寻找大小为8个块(8*512=4096 byte,目录文件的大小)的文件,且仅在当前层目录下 (-prune)

find /logs -name 'admin.log.[0-9][0-9][0-9]' -mtime +7 -exec rm {} \;
删除/logs目录中访问时间在7日以前的,含有数字后缀的admin.log.xxx文件.


find . -name "*.LOG" -mtime +5 -ok rm {} \;
在当前目录中查找所有文件名以.LOG结尾,更改时间在5日以前的文件,并删除它们(删除前先给出提示).

find . -name "*.LOG" -mtime +5 -exec rm {} \;
在当前目录中查找所有文件名以.LOG结尾,更改时间在5日以前的文件,并删除它们(不给出提示,直接删除).

find . -name "core" -print xargs echo " " > /tmp/core.log
在当前目录下查找内存信息转储文件,然后把结果保存到/tmp/core.log文件中
(文件可能很多,使用 xargs 能使结果批量而不是一次输出,以避免参数长度限制或一下生成处理进程数过多)

find / -type f -print xargs file
查找系统中的每一个普通文件,然后使用xargs命令(批量输出而不是一下全部输出)来测试它们分别属于哪类文件

寻找当前目录下所有的可执行文件:
[method 1]
[14:11:25 ~]$ more find_exe.sh
#! /bin/sh
find $1 -name "*" xargs file grep -i "executable" awk -F: '{print $1}'
#find $1 -name "*" xargs file grep -i "executable" cut -d":" -f1
[14:11:25 ~]$ find_exe.sh /root
[method 2]
find . -perm -001 -or -perm -010 -or -perm -100
[ 注: 可理解为 find . -perm -744 查找 比权限744更宽松的,包括755(对应位越大越有相应权限,越宽松) ]

根据时间值来查找
[11:53:43 ~]$ touch file1
[11:54:01 ~]$ touch file2
[11:54:03 ~]$ touch file3
[14:11:24 ~]$ find . -newer file1 ! -newer file3
.
./file2
./file3
[14:11:25 ~]$ find . -newer file1 -and ! -newer file3
.
./file2
./file3
[ 注: 列出一个文件精确到秒的时间值: date -r file1 ]

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2002381

阅读全文...