RHEL5 在VMware Workstation 7中运行时停止在Starting udev的原因

最近在配置多台使用RHEL5
X86_64的虚拟机,由于要做门户开发的实验。发现一个奇怪的现象:VMware中的RHEL5经常停止在Starting
udev阶段,由于时间有限没有等太长时间,一般几分钟没响应我就reset了。这时重启几次虚拟机或者修改一下虚拟机的配置,比如改成单cpu单核心启
动就又成功了。今天终于发现了原因:

Clocksource is the name of the new timekeeping
subsystem introduced in the Linux 2.6.18 kernel. In this subsystem
there are several clocksources that can be used to read the time. One
of them is the tsc clocksource which
uses the Time Stamp Counter that is present on each processor and can
be used to track how much time has elapsed. The TSCs on the different
processors are not necessarily perfectly in sync with each other, so
time can appear to go backward if the TSC is read on one processor and
then another processor. Early versions of the tsc
clocksource did not handle this case, which can lead to the guest
operating system not responding. Due to the different timing behavior
of running in a virtual machine, this can be observed more frequently
in a virtual machine.

所以如果遇到这种情况,只需要修改CPU为单CPU,启动系统后编辑/etc/grub.conf,在对应kernel的启动项后加入对应系统的参数即可。

http://kb.vmware.com/selfservice/microsites/search.do?cmd=displayKC&externalId=1007020
http://kb.vmware.com/selfservice/microsites/search.do?cmd=displayKC&externalId=1006427

RHEL5 中 Oracle 11g R2 X86_64 安装



安装步骤类似于10g安装,基本上按照Quick Installation Guide配置好系统包依赖及环境变量即可。

需要注意的地方有:

1. 安装完成后要为用户配置ORACLE_BASE, ORACLE_HOME, ORACLE_SID环境变量,配置入.bash_profile中,注意Linux系统是大小写敏感的。
2. 关闭RHEL5的SELinux及防火墙,否则数据库可能无法启动/无法从远程访问。
使用root权限进行下列操作

RHEL5 下 Apache + PHP + MySQL 环境搭建



Apache Ver. 2.2.14
PHP Ver. 5.2.12
MySQL Ver. 5.1.44

首先安装MySQL,在RHEL5平台下这一步很简单,只需要去MySQL网站下载对应Red Hat Linux版本的MySQL rpm包进行安装即可,一般需要安装client和server,安装完成后MySQL路径为/usr/share/mysql。


后安装Apache,在Apache网站下载对应源码包,可以不带参数编译,进入Apache源码包解压目录运行./configure &
make & make
install即可,注意configure阶段报错,一般是依赖包缺乏,可在安装光盘中找到相应依赖包安装即可。Apache编译完成后默认路径为
/usr/local/apache2。
Apache编译完成后运行其bin目录下的apachectl start,即可启动apache,在浏览器中访问localhost能看到it works就说明安装成功。

陷阱1:本地访问提示Connection Refused
需要检查htdocs文件夹的权限及关闭SELinux。
chmod -p 777 htdocs/
不重启关闭selinux:setenforce 0
默认不启动selinux:修改/etc/sysconfig/selinux,设置SELINUX=disabled

陷阱2:在远程访问apache发现无法访问,这里需要修改redhat的防火墙配置。为了方便直接关闭redhat防火墙
使用root权限
service iptables status 查看防火墙状态
service iptables stop 关闭防火墙
运行ntsysv,后去掉iptables/ip6tables前的
可防止防火墙自动启动

然后是编译PHP并配置入Apache
首先安装zlib,jpeg, libpng, libxml2, zend, freetype这些库,可在RHEL5安装盘中找到。
php编译语句
./configure
–prefix=/usr/local/php –with-mysql=/usr/share/mysql
–enable-force-cgi-redirect –with-freetype-dir=/usr
–with-png-dir=/usr –with-gd –enable-gd-native-ttf –with-ttf
–with-gdbm –with-gettext –with-iconv –with-jpeg-dir=/usr
–with-png-dir=/usr –with-libxml-dir=/usr –enable-calendar
–with-apxs2=/usr/local/apache2/bin/apxs

陷阱1:在RHEL5环境下,不要去编译gd,libjpeg等库,直接安装RHEL5提供的对应包,后将路径配置至/usr。这是因为RHEL5的rpm包默认将这些库安装至/usr路径下。

陷阱2:configure: error: xml2-config not found. Please check your libxml2 installation.
提示xml2-config找不到,这是因为必须同时安装libxml2和libxml2-devel,通常会忘记装后者。

陷阱3:configure: error: libjpeg.(a|so) not found.
虽然安装了libjpeg/libpng,但还是提示找不到libjpen(a|so),libpng(a|so),只需要将/usr/lib下的libjpeg.so.x.xx.xxx 链接成 libjpeg.so即可。

陷阱4:configure: error: Cannot find MySQL header files under /usr/share/mysql.
没有安装mysql-devel,在mysql网站下载对应系统版本的rpm包安装即可。

陷阱5:configure: error: Cannot find libmysqlclient under /usr.
首先确定安装了mysql-devel,后将/usr/lib64/mysql/libmysqlclient.a 链接至 /usr/lib/libmysqlclient.a即可。

配置php与apache
修改apache安装目录下conf/httpd.con 让apache支持php5
在loadmodule处添加 loadmodule php5_module module/libphp5.so
在directoryindex处添加 index.php
在addtype application处添加
addtype application/x-httpd-php .php .phtml
addtype applicatoin/x-httpd-php-source .phps

测试apache ,php是否正常运行。
在apache安装目录下 htdocs/test.php 中放入如下语句
<?
phpinfo()
?>
启动apache后访问 http://localhost/test.php 可以看到php信息说明正常。

Firefox 3.6 for Linux amd64



Ubuntu 9.10

Mozilla官方不提供64位编译的Linux Firefox,安装官方的i686
firefox将导致flash等插件不能够够使用,ubuntu又没有对9.10提供支持的打算,听说10.04才会支持。好在Mozilla
Firefox开源,拿了一个下来编译了一下,替换了图标安装了语言包,有需要的拿去解压出来,再修改下/usr/bin/firefox使其指向新的
firefox就可以用了。

点我进入下载页

在最小安装的RedHat i386上安装Oracle 10.2.0.1



1. 解决包依赖
rpm -Uvh ./disk3/RedHat/RPMS/glibc-kernheaders-2.4-9.1.100.EL.i386.rpm
rpm -Uvh ./disk3/RedHat/RPMS/glibc-headers-2.3.4-2.36.i386.rpm
rpm -Uvh ./disk3/RedHat/RPMS/glibc-devel-2.3.4-2.36.i386.rpm
rpm -Uvh ./disk3/RedHat/RPMS/gcc-3.4.6-8.i386.rpm

rpm -Uvh ./disk2/RedHat/RPMS/libstdc++-3.4.6-8.i386.rpm
rpm -Uvh ./disk3/RedHat/RPMS/libstdc++-devel-3.4.6-8.i386.rpm

rpm -Uvh ./disk4/RedHat/RPMS/compat-gcc-32-c++-3.2.3-47.3.i386.rpm
rpm -Uvh ./disk4/RedHat/RPMS/compat-gcc-32-3.2.3-47.3.i386.rpm

rpm -Uvh ./disk2/RedHat/RPMS/compat-libstdc++-33-3.2.3-47.3.i386.rpm

2. 创建组
groupadd oinstall
groupadd dba

3. 创建用户
useradd -g oinstall -G dba oracle
passwd oracle

4. 确认用户nobody存在
id nobody
应返回类似uid=99(nobody) gid=99(nobody) groups=99(nobody)

5. 检查内核设置
参考文档
或直接修改/etc/sysctl.conf,添加内容如下
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
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

(需要重新启动)

6. 修改oracle用户配置
修改 /etc/security/limits.conf,增加如下内容
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536

修改 /etc/pam.d/login,增加如下内容
session required /lib/security/pam_limits.so

修改 /etc/profile,增加如下内容
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi

7. 创建文件夹
格式为/<mount_point>/app/<oracle_sw_owner>
这里用/u01/oracle/app/oracle
mkdir -p /u01/oracle/app/oracle
chown -R oracle:oinstall /u01/oracle/app/oracle
chmod -R 775 /u01/oracle/app/oracle

修改oracle用户的.profile,设置环境变量
ORACLE_BASE=/u01/oracle/app/oracle
export ORACLE_BASE

8. 创建Database文件夹及Recovery文件夹
mkdir /u01/oracle/app/oracle/oradata
chown oracle:oinstall /u01/oracle/app/oracle/oradata
chmod 775 /u01/oracle/app/oracle/oradata

mkdir /u01/oracle/app/oracle/flash_recovery_area
chown oracle:oinstall /u01/oracle/app/oracle/flash_recovery_area
chmod 775 /u01/oracle/app/oracle/flash_recovery_area

9. 运行runInstaller进行安装
使用oracle用户进行安装
出现java.lang.InternalError: Can’t connect to X11 window server using ‘:1.0’ as the value of DISPLAY variable.
解决:以root用户运行xhost +命令,再切换入oracle用户进行安装
后依据引导进行安装即可

10. 设置环境变量
ORACLE_BASE=/u01/oracle/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

Customization Part 4: Deploy



Fusion Middleware Ver. 11.1.1.2.0

OS Ver. redhat-4.5


本文主要描述部署启用Customization的应用至Weblogic,包括weblogic的配置、MDS Repository的配置以及应用的部署。

安装Application Develop Runtime


下载链接

解压运行runInstaller -jreLoc <Local Jre or Jdk Directory>,注意需要指定本机Jre的目录。


先会在命令行检查系统需求,报错 could not execute auto check for display colors using
command /usr/X11R6/bin/xdpyinfo. check if the DISPLAY variable is set.
Failed<<

这是由于使用root登录,在控制台中切换至另一用户进行安装造成的。

使用root权限在控制台运行xhost +后,重新进行安装即可。

重新执行进入界面,继续检查系统需求

系统需求:enterprise-5.4, enterprise-4, enterprise-5, redhat-5.4, redhat-4, redhat-5, SuSE-10 中的一种

统依赖包需求:由于依赖包比较多不一一列举,可使用rpm Uvh
<包路径>进行安装。如若依赖包gcc-3.4.3-22.1,则可在操作系统(如redhat)安装盘中find -name
"gcc",查找到gcc包路径后使用rpm Uvh <包路径>进行安装。
系统核心变量需求:
VERSION = 2.6.9 Linux Kernel必须为2.6.9以上,若满足系统需求,则Kernel Version需求一般都满足
hardnofiles = 4096
softnofiles = 4096
hardnofiles和softnofiles是系统同时打开文件数的限制,linux默认为1024,需要修改/etc/security/limits.conf,在文件末尾加入
<用户名或> soft nofile 4096
<用户名或
> hard nofile 4096

下一步需要指定系统中已经安装的中间件目录,安装ADR的前提是已经安装了Weblogic,一般中间件目录即为Weblogic安装目录的上级目录。

完成安装后运行<中间件目录>/oracle_common/common/bin/config.sh,进行Weblogic域配置,可以选择新建域或扩展域

下一步需要勾选Oracle Enterprise Manager及Oracle JRF,以便安装Enterprise Manager(以下简称em)及ADF运行环境。

其余步骤与weblogic创建或扩展域相同,不再赘述。

完成域的创建或更新后启动域,运行域目录下的startWeblogic.sh即可。
注意安装了em的weblogic域启动相比没有安装em的weblogic域较慢。

域启动后可使用http://<ip地址>:<端口>/console访问weblogic控制台,使用http://<ip地址>:<端口>/em访问Enterprise Manager。

使用em创建MDS Repository
Fusion
Middleware支持两种MDS
Repository,基于数据库的repository及基于文件的repository。若使用基于数据库的Repository则需要使用
Oracle Repository Creation Utility在数据库中创建MDS schema,并将其配置到em,具体见这篇文章。这里主要说明基于文件的repository创建。

在左侧树状图中选择需要创建MDS repository的weblogic域,

在其上点击右键选择元数据资料档案库(Metadata Repositories),

选择下部基于文件中的元数据库(File-Based
Repositories)下的注册(Register…),填入repository的名称和路径即可。注意,Repository的名称若不以
mds-作为前缀,则会自动增添该前缀;路径中指定的路径下的所有子文件夹将作为MDS的分区(Partition)。


部署启用了客制化功能的ADF应用
在EM中选择需要将ADF应用部署至的Server,在其上点击右键,选择应用程序部署(Application Deployment)中的部署(Deploy…)



选择需要部署的ear包,点击下一步,勾选配置好Matadata Repositories的服务器

点击下一步,在Target Metadata Repository中选择需要使用的MDS Repositories及输入使用的分区(partition)名称,点击完成完成部署。

在Ubuntu下使用adb

配置:

基本配置很简单,按照Android SDK配的文档安装好SDK,关键是将sdk目录下tools目录设置入环境变量,即可在命令行使用adb等命令。


ubuntu中使用时发现如下问题:使用adb
devices不能发现已经连接的android设备。产生该问题的原因在于adb命令首次运行时会启动一个server守护进程,用于与android
设备的交互。由于ubuntu的权限问题导致该守护进程无法访问设备。因此可以以如下方式解决(注意,需将adb设置入root环境变量或者使用全路
径):
sudo adb start-server
显示守护进程启动成功后再以adb XXX进行使用即可

不再使用adb时可以通过
sudo adb kill-server
结束守护进程。

———————————————————————-

使用:

adb devices
用于查看当前连接到开发机的设备,包括真实设备及模拟器。

该命令返回的结果为连接至开发机的android设备序列号及状态。序列号用于唯一标示一台android设备,通常为<设备名称>-<端口号>;状态具有如下两种:

offline - 设备没有连接到开发机或无响应 device - 设备已经连接到开发机。注意,该状态并不表示android设备可用,当android设备处于启动阶段时,若连接成功也会返回该状态。

adb [-d|-e|-s <序列号>] <命令>
adb命令的基本格式,其中序列号即为adb devices命令查看到的序列号。

如前所述adb首先会启动server,该server使用5037端口进行监听,并尝试使用5555~5585端口连接Android设备/模拟器。当多台android设备连接至同一开发机时,需要使用-s <序列号> 区分设备进行操作。

-d 表示该命令应用于USB设备,当存在多个连接的USB android设备时返回错误。 -e 表示该命令应用于模拟器,当存在多个连接的模拟器时返回错误。
-s <序列号> 表示该命令应用于具有指定序列号的设备。

adb install <.apk文件路径>
将.apk文件安装至android设备。

adb push <本地文件路径> <android设备文件路径> / pull <android设备文件路径> <本地文件路径>
复制本地文件进入android设备/从android设备复制文件入本地。

adb logcat
查看设备日志信息。

adb get-serialno
获得设备序列号。

adb get-state
获得设备状态。



adb wait-for-device

可用该命令暂时阻断脚本执行直至设备就绪。如命令adb wait-for-device install xxx.apk则会在设备连接就绪后进行xxx.apk安装,若执行时设备未连接就绪则会在此等待。

adb shell
在连接的android设备上启动脚本。

adb shell <shell脚本>
执行指定shell脚本。

———————————————————————-

adb shell

如同UNIX/LINUX下提供的sh、bash等,google提供了ash作为android系统的shell。adb shell即用来进行ash的调用。调用方法如下

adb [-d|-e|-s <序列号>] shell <shellCommand>

或者

adb [-d|-e|-s <序列号>] shell

进入shell模式进行操作,使用Ctrl + D或exit命令退出shell模式。

*可用的shell命令


位于 /system/bin/ 路径下,可通过ls命令进行查看。

使用Taskflow Router进行有条件的Taskflow导航

JDev Ver. 11.1.1.2.0
DB Ver. Oracle 10g(XE)

本文示例使用taskflow中的Router进行有条件的导航。使用Oracle实例Schema HR中的EMPLOYEES表进行实现。

示例代码下载

首先创建ADF应用,及构建EMPLOYEE表的model部分(EO、VO、AM),这里不再赘述。

创建页面MainPage,布局如下截图所示。
本Demo目标为在点击左侧table中action链接时根据当前行雇员salary决定右侧页面显示内容。其中MainPage中PanelSplitter, Table, Link 等创建过程略去。

1. 创建两个jsff页面,分别对应Salary大于10000及小于等于10000的情况,显示UPPER/LOWER。

2. 创建bounded taskflow,在Overview页面的Parameters中为其添加变量名为SalaryStatus,并勾选Required。注意这里IDE自动生成了表达式为#{pageFlowScope.SalaryStatus}的变量。

3. 在
taskflow的Diagram中首先拖放Router(Component Palette ->
router),它将作为该bounded taskflow的Default
Activity。接着将Upper.jsff及Lower.jsff拖入taskflow,并以Control Flow Case
(Component Palette -> Control Flow
Case)进行连接,分别将连接命名为toUpper,toLower。拖放TaskFlowReturn(Component Palette
-> Task Flow Return),并以Comtrol Flow
Case进行连接,命名为default,它将作为router的默认导航结果。

4. 点击router1,在Property Inspectory中设置Default Outcome为default,并创建表达式,设定
#{pageFlowScope.SalaryStatus > 10000}时OutputCome为toUpper,
#{pageFlowScope.SalaryStatus <= 10000}时OutputCOme为toLower

5. 为
MainPage.jspx设定绑定变量,在MainPage.jspx的binding页面中右键点击executable中的variables,选
择insert inside variables ->
variable,Name为salary,Type为java.lang.String,创建的变量可在Structure面板中看到。点击
Bindings上的加号添加类型为AttributeValues类型的绑定,名称为salary1,使其指向刚刚创建的salary变量。再为
Bindings添加另一AttributeValue使其指向EmployeesView1Iterator中Salary字段,名为Salary。

6. 将
第2步创建的bounded
taskflow拖入MainPage右侧区域,在弹出菜单中选择Region。由于taskflow中设定了required变量
SalaryStatus,需要为其设定表达式为#{bindings.salary1.inputValue}。
7. 设置MainPage左侧区域表格中action Link的Action Listener,使其调用BackingBean方法以将第五步创建的Salary值设置入salary1,并执行MainPage右侧区域region的refresh方法,具体代码如下
(需要将右侧区域的region绑定入BackingBean)
FacesContext fc = FacesContext.getCurrentInstance();
Application app = fc.getApplication();

// get current row Salary value
Number salary = (Number)app.evaluateExpressionGet(fc, "#{bindings.Salary.inputValue}", Object.class);

// set salary value to salary1 to effort in taskflow

FacesCtrlAttrsBinding salary1 =
(FacesCtrlAttrsBinding)app.evaluateExpressionGet(fc,
"#{bindings.salary1}", Object.class);
salary1.setAttributeValue(salary.toString());

// refresh region on the right side of MainPage
this.region1.refresh(fc);

示例代码下载

参考OTN Oracle Magazine January/February 2010, The Route to Success

Using Maven in Oracle ADF ( as build tool )

JDev ver. 11.1.1.2.0
Maven 2.2.1

(本文所述不是严格意义上的maven在Oracle ADF应用开发中的使用,仅尝试使用maven作为ADF开发的每日编译工具。)

JDeveloper
11.1.1.2.0以插件的形式为JDeveloper
11g带来了maven的支持。这种支持在11.1.1.2.0中仅限于对常规开发的maven支持,而对于如何为ADF应用添加maven的支持以解决
诸如ADF应用对于Library的依赖、ADF应用打包为ADF Library Jar
File、ADF应用之间的依赖等问题并未提出解决方案。Oracle官方表示在11.1.1.2.0中maven尚属于技术预览,尚未完成。


某特定ADF应用中,将ADF应用分为主应用、模块、功能,主应用为不包含BC的ADF应用,用于解决登录、Session管理等内容;应用分为模块进行
开发,如系统管理模块,每个模块具体分为功能进行开发,如用户管理、组管理等。进行应用构建时,将每个功能打包为ADF Library Jar
File,将同一模块的所有功能jar包合并为该模块的ADF Library Jar File,再以jar library的形式将该ADF
Library Jar
File加入主应用,最后将主应用打包为EAR进行部署。出于每日构建的需要及考虑到未来可能的模块间依赖,希望引入maven以解决该问题。

解决问题的基本思路如下:
首先依照maven的设计思想,设置构建结构如下:
如此则每次构建父项目,将自动按序构建功能项目 -> 模块项目 -> 主项目。具体应用中一个主项目依赖于数个模块项目,一个模块项目依赖于数个功能项目。
该结构下功能项目均将具体ADF项目打包为ADF Library Jar File,模块项目将该模块所依赖的所有功能项目打包为一个Jar,而主项目构建时将所有打包的模块项目引入并最终打包为EAR。


于不了解ADF Library Jar File/ADF
EAR打包的具体内容,故使用Oracle官方提供的命令行打包工具ojdeploy进行ADF Library Jar
File及EAR的打包,使用另外开发的Jar合并程序进行ADF Library Jar File的合并。故需要开发Maven插件如下:

1. 用于调用 ojdeploy 的 maven-adfdeploy-plugin。
2. 用于将 ADF Library Jar File 合并的 maven-jarmerger-plugin。

合Maven进行项目管理的构建生命周期,由于本次只使用其作为每日构建工具,则只需实现package阶段即可,考虑到未来解决依赖的需要,亦实现
install及deploy阶段,分别用于将maven项目部署至本地repository及远程repository。

maven-adfdeploy-plugin
maven-jarmerger-plugin
jarmerger(maven-jarmerger-plugin依赖于此)

使用实例:

1. 首先将插件安装至本地repository,按照jarmerger -> maven-jarmerger-plugin -> maven-adfdeploy-plugin的顺序进行安装,进入每个目录运行mvn install即可。
2. 构建父maven项目pom.xml文件,按照前述图示结构将模块项目、功能项目均作为父maven项目的模块,并指定使用1.6版本JDK进行编译。
3. 构建功能项目pom.xml
件,设定父项目为第2步所创间的项目,设定打包类型为adfdpl.jar,并应用maven-adfdeploy-plugin插件,由于调用
ojdeploy进行编译打包,故需要使用JDeveloper在ADF应用中设定好对应的Deploy
Profile,并以据文件中注释所示进行配置。
4. 构建模块项目pom.xml文件,设定父项目为第2步所创间的项目,设定打包类型为hadfmerge.jar,并应用maven-jarmerger-plugin插件,设置针对第3步创建的功能项目的依赖,并依据文件中注释进行配置。
5. 构建主项目对应的pom.xml文件,同样调用ojdeploy进行实现,设置方式类似于步骤3。

设置成功后,只需在父maven项目的pom.xml所在文件夹运行mvn package即可完成项目打包。结合Hudson等持续集成工具及SVN,即可完成每日构建的任务。

已知的问题:

由于调用ojdeploy进行编译及打包,则这种思路下不可能解决项目编译时自动寻找/解决依赖的问题,仍需要手工调整每日构建所用的构建源码所引入的包/库。 插件没有实现构建生命周期中的unit test及report阶段,仍需完善。