iscsi网络存储介绍及客户端配置操作

本文不介绍iSCSI服务端的搭建过程,不然就会很累赘。主题就是怎么去完成iscsi网络存储的挂载过程,并顺带介绍一些必要的概念。 1. iscsi介绍与initiator安装 1.1 iSCSI介绍 iSCSI简单来说,就是把SCSI指令通过TCP/IP协议封装起来,在以太网中传输。iSCSI 可以实现在IP网络上传递和运行SCSI协议,使其能够在诸如高速千兆以太网上进行数据存取,实现了数据的网际传递和管理。基于iSCSI建立的存储区域网(SAN)与基于光纤的FC-SAN相比,具有很好的性价比。 iSCSI属于端到端的会话层协议,它定义的是SCSI到TCP/IP的映射(如下图),即Initiator将SCSI指令和数据封装成iSCSI协议数据单元,向下提交给TCP层,最后封装成IP数据包在IP网络上传输,到达Target后通过解封装还原成SCSI指令和数据,再由存储控制器发送到指定的驱动器,从而实现SCSI命令和数据在IP网络上的透明传输。它整合了现有的存储协议SCSI和网络协议TCP/IP,实现了存储与TCP/IP网络的无缝融合。在本文中,将把发起器Initiator称为客户端,将目标器Target称为服务端以方便理解。 iSCSI 服务端和客户端的通讯就是一个在网络上封包和解包的过程,在网络的一端,数据包被封装成包括TCP/IP头、iSCSI 识别包和SCSI 数据三部分内容,传输到网络另一端时,这三部分内容分别被顺序地解开。为了保证安全,iSCSI 有约定操作顺序。在首次运行时,客户端(initiator)设备需要登录到服务端(target)中。任何一个接收到没有执行登录过程的客户端的iSCSI PDU (iSCSI rotocol Data Units,iSCSI 协议数据单元)服务端都将生成一个协议错误,并且关闭连接。在关闭会话之前,服务端可能发送回一个被驳回的iSCSI PDU。 在工作时,iSCSI使SCSI数据块由原来的SCSI总线连接扩展到internet上,这一过程有些产品通过硬件来实现,这种硬件产品被简称为TOE(TCP Offload Engine),随着近年来服务器芯片技术的不断发展,服务器处理能力日益强劲,目前更为普遍的是通过软件来实现SCSI数据块的封装过程。这种软件通常被称为iSCSI Initiator软件/驱动。Initiator软件可以将以太网卡虚拟为iSCSI卡,接受和发送iSCSI数据报文,通过普通以太网卡来进行网络连接,但是需要占用CPU资源。另外的TOE和HBA连接转换方式都需要专门的硬件设备来完成,虽然相对昂贵但执行效率高,也可以减轻主机CPU的负载。本文客户端采用Initiator驱动的连接方式。 1.2 Initiator安装 在Linux 2.6内核中提供了iscsi驱动,iSCSI 驱动(driver)使主机拥有了通过IP网络访问存储的能力,但还需要一个具体的客户端工具(Linux用户空间组件)初始化iSCSI驱动,即iscsi-initiator-utils,也是大家常说的open-iscsi。 # rpm -qa|grep iscsi iscsi-initiator-utils-6.2.0.873-10.el6.x86_64 iscsi-initiator-utils-devel-6.2.0.873-10.el6.x86_64 # rpm -qi iscsi-initiator-utils (yum install iscsi-initiator-utils iscsi-initiator-utils-devel) 这个安装将iscsid、iscsiadm安装到 /sbin 目录下,它还将把默认的配置文件安装到/etc/iscsi/目录下: /etc/iscsi/iscsid.conf:所有刚发起的iSCSI session默认都将使用这个文件中的参数设定。 /etc/iscsi/initiatorname.iscsi:软件iSCSI initiator的intiator名称配置文件。 确保iscsid和iscsi两个服务器开机自启动,chkconfig --list |grep iscsi,在iscsi启动的时候,iscsid和iscsiadm会读取这两个配置文件。 service iscsid [status|start] service iscsi status 查看iscisi的信息,只有在连接成功后才输出 这里可能遇到start始终没有启动成功的信息输出,请继续往下执行discovery,一般会启动iscsid。 1.3 open-iscsi initiator说明 open-iscsi包括两个守护进程iscsid和iscsi,其中iscsid是主进程,iscsi进程则主要负责根据配置在系统启动时进行发起端(Initiator)到服务端(target)的登录,建立发起端与服务端的会话,使主机在启动后即可使用通过iSCSI提供服务的存储设备。 iscsid进程实现iSCSI协议的控制路径以及相关管理功能。例如守护进程(指iscsid)可配置为在系统启动时基于持久化的iSCSI数据库内容,自动重新开始发现(discovery)目标设备。 Open-iSCSI是通过以下iSCSI数据库文件来实现永久配置的: Discovery (/var/lib/iscsi/send_targets) 在 /var/lib/iscsi/send_targets 目录下包含iSCSI portals的配置信息,每个portal对应一个文件,文件名为“iSCSI portal IP,端口号”(例如172....

April 28, 2015 · admin

怎么用pfSense为你的web服务做负载均衡(翻译)

本文翻译自Howtoforge上的一篇文章 How To Use pfSense To Load Balance Your Web Servers。注意pfSense的负载均衡有两种:一是设置多个WAN做双线负载均衡,二是本文的为LAN内的web服务器做inbound-loadbalancer。 这篇howto中展示了怎么使用pfSense 2.0 为你的多个web服务器配置负载均衡(load balancer)。这里假定在你的网络环境中已经拥有了一个pfSense服务器和2个以上的apache服务器,并且具有一定的pfSense知识。(参考图解pfSense软路由系统的使用(NAT功能) 1. 前提 一个安装好的pfSense 2.0 机器(如果它是你的外围防火墙,建议安装在物理机上) 至少2个apache服务器(可以是虚拟机) 确保在apache服务器之间代码文件是同步的(rsync、cororsync或其它可以保持web服务器间文件更新) 2. 配置pfSense pfSense可以使用负载均衡的功能让特定的请求压力由多台服务器分担,这对于有多台应用的服务器很有帮助,因为你可以把负载压力分散到其它节点上而不是死磕一个节点。 2.1 Monitor 我们正式开始。首先点击Services -> Load Balancers,然后选择Monitor标签。 点击右边的+加号来添加一条记录,输入monitor的名字Name和描述Description(在这个示例名字和描述我都使用ApacheClusterMon),把类型Type设置成HTTP,主机地址Host设置一个还未使用的IP(后面我们将在这个IP上建立虚拟IP,这个虚拟IP会被分配到故障转移failover节点上,注:也有文章说把它设成WAN IP),HTTP Code保存默认的200 OK,然后点击Save保存并且使修改生效Apply Changes。 2.2 Pool 接着建立服务器池server pool。点击Pools标签的+按钮来添加一个池。 在该示例我指定ApacheSrvPool为服务池名称,设置Mode为Load Balance,端口80(。这个端口时你后端服务器的监听端口,你当然可以设定其它应用的其它端口,不一定非是web)。为这个池设定上一步创建的ApacheClusterMon,依次将你的所有web服务器IP添加到这个池中Add to pool,保存并应用。 2.3 Virtual Server 最后一步,选择Virtual Servers标签页,点击+来添加一条记录。填写名称ApacheClusterVirtualServer、描述和IP地址,这个IP地址与第1步中说的未使用的IP相同,端口80,所有发送到这个WAN IP:port的连接都会被转发到服务器池中。虚拟服务器池Virtual Server Poll选择上一步创建的。提交并应用。 搞定!最后不要忘记为虚拟服务器IP和池添加防火墙规则。

April 24, 2015 · admin

图解pfSense软路由系统的使用(NAT功能)

pfsense是一款开源的路由和防火墙产品,它基于freebsd系统定制和开发。pfsene拥有友好的web的配置界面,且具有伸缩性强又不失强大性能,在众多开源网络防火墙中属于佼佼者。 2004年,pfsense作为m0n0wall项目(基于freebsd内核的嵌入式软防火墙)的分支项目启动,增加了许多m0n0wall没有的功能(pfSense的官方网站称它为the better m0n0wall).pfSense除了包含宽带路由器的基本功能外,还有以下的特点: 基于稳定可靠的FreeBSD操作系统,能适应全天候运行的要求 具有用户认证功能,使用Web网页的认证方式,配合RADIUS可以实现记费功能 完善的防火墙、流量控制和数据包功能,保证了网络的安全,稳定和高速运行 支持多条WAN线路和负载均衡功能,可大幅度提高网络出口带宽,在带宽拥塞时自动分配负载 内置了IPsec 和PPTP VPN功能,实现不同分支机构的远程互联或远程用户安全地访问内部网 支持802.1Q VLAN标准,可以通过软件模拟的方式使得普通网卡能识别802.1Q的标记,同时为多个VLAN的用户提供服务 支持使用额外的软件包来扩展pfSense功能,为用户提供更多的功能(如FTP和透明代理). 详细的日志功能,方便用户对网络出现的事件分析,统计和处理 使用Web管理界面进行配置(支持SSL),支持远程管理和软件版本自动在线升级 本文简单介绍pfSense的安装及配置过程,完成一个基本的路由器该有的功能,如访问局外网、设置防火墙规则、配置端口映射。这里演示在ESXi虚拟服务器上,解决IP不足的问题。 创建虚拟机 首先去 https://www.pfsense.org/download/ 下载稳定版本的pfSense,如pfSense-LiveCD-2.2.2-RELEASE-amd64.iso.gz(网上看到有人提到这个版本不稳定,我在使用中偶尔也发现突然很慢,建议2.1.5)。在vSphere上创建虚拟机的过程省略,取名01_pfSense,创建虚拟机操作系统时选择“其他 -> FreeBSD 64位”,单CPU,512Mb内存,4G硬盘。将下载的系统解压成iso后挂载到CD/DVD,并“打开电源时连接”。 下图是网卡情况: 为pfSense分配两个网卡,分别是可以连接公司内网的172.29.88.1/24网段的vSphere_Admin端口组,和IP范围是172.30.31.1/24的内部局域网端口组VM Local。 记录下Mac地址 外网接口:00:0c:29:36:b6:c2 内网接口:00:0c:29:36:b6:cc 安装pfsense 启动电源后出现欢迎界面,选择1.Boot pfSense [default],或等待几秒钟自动选择,进入如下界面: 输入I,回车,然后是一个蓝屏,开始安装。 也可以什么都不用管,系统会一直启动从CD启动得到一个完整的pfSense系统,因为没有安装所以在屏幕下方会有一个选项99) Install pfSense to a hard drive, etc.,输入99同样会进入下面的安装操作系统的过程。 一路保存默认:< Accept these Settings > → < Quick/Easy InStall > → erase all content < OK > → < Standard Kernel > → < Reboot >。 重启后安装完成,断开CD介质。 详见见官网文档 https://doc....

April 23, 2015 · admin

配置 Oracle 11gR2 在 CentOS6 上开机自启动

修改配置 要达到oracle随开机自启动,一般使用11g自带的dbstart脚本:$ORACLE_HOME/bin/dbstart,但要先修改/etc/oratab的内容,将N改成Y,表示允许实例自启动,假如有2个实例要启动,再写一行: $ vi /etc/oratab EXCRMPROD:/db/oracle/product/11.2.0/db_1:Y 然后在oracle用户下执行$ORACLE_HOME/bin/dbstart即可启动,日志被记录在$ORACLE_HOME/startup.log。但是,默认情况dbstart和dbshut脚本不能自动启动或关闭监听,所以也要加以修改: $ vi /db/oracle/product/11.2.0/db_1/bin/dbstart ## 找到下面的代码(约第80行),在实际脚本代码的前面 # First argument is used to bring up Oracle Net Listener ORACLE_HOME_LISTNER=$1 ## 将此处的 ORACLE_HOME_LISTNER=$1 修改为 ORACLE_HOME_LISTNER=$ORACLE_HOME if [ ! $ORACLE_HOME_LISTNER ] ; then echo "ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener" echo "Usage: $0 ORACLE_HOME" else LOG=$ORACLE_HOME_LISTNER/listener.log 同样也修改dbshut脚本(约第50行): $ vi /db/oracle/product/11.2.0/db_1/bin/dbshut # The this to bring down Oracle Net Listener ORACLE_HOME_LISTNER=$ORACLE_HOME if [ ! $ORACLE_HOME_LISTNER ] ; then echo "ORACLE_HOME_LISTNER is not SET, unable to auto-stop Oracle Net Listener" echo "Usage: $0 ORACLE_HOME" else LOG=$ORACLE_HOME_LISTNER/listener....

April 11, 2015 · admin

使用vmware vconverter从物理机迁移系统到虚拟机P2V(多图)

本文完整记录了如何从物理服务器,保持所有环境配置信息,纹丝不动的迁移到虚拟机上,俗称 P2V 。采用的工具是VMware公司的 VMware vcenter vconverter standalone,它支持将windows和linux操作系统用作源,可以执行若干转换任务: 将正在运行的远程物理机和虚拟机作为虚拟机导入到vCenter Server管理的独立ESX/ESXi或ESX/ESXi主机 将由VMware Workstation或Microsoft Hyper-V Server托管的虚拟机导入到vCenter Server管理的ESX/ESXi主机 将第三方备份或磁盘映像导入到vCenterServer管理的ESX/ESXi主机中 将旧版服务器迁移到新硬件,而不重新安装操作系统或应用程序软件等 完整功能见《Converter Standalone 用户指南》 Converter Standalone的组件,只能安装在Windows操作系统上: Converter Standalone Server —— 启用并执行虚拟机的导入和导出 Converter Standalone agent —— Converter Standalone Server会在Windows物理机上安装代理,从而将这些物理机作为虚拟机导入,完成后可以选择自动删除 Converter Standalone client —— 与Converter服务端配合使用,包括看到的用户界面、创建和管理转换任务等 Vmware vCenter Converter引导CD:是单独的组件,可用于在物理机上执行冷克隆 冷克隆可以创建一致的源计算机的精确副本,而我们更多的是进行热克隆,也就是源服务器在迁移过程中会继续工作,这就可能会出现某些文件不一致,但Converter Standalone会在热克隆后将目标虚拟机与与主机同步,同步执行过程是将在初始克隆期间更改的块从源复制到目标。 本文记录的过程是,源主机是 SUSE 11.x 物理机,运行华为的智能呼叫中心应用,因此安装有Oracle数据库,对于数据文件和控制文件的一致性和安全性较高,所以建议先把oracle数据库关闭再操作;目标虚拟服务器是 ESXi 5.1,但我使用的Converter是 5.5-en,操作过程类似。下面正式开始 源主机:172.30.31.0/24 ESXi: 172.29.88.0/24,与源主机IP段无法通信 Helper VM: 172.29.41.0/24,与上面两个IP段都通 1. 设置源和目的主机地址 Source System 选择你要转换的源系统,物理机为 Powered-on machine,填写其他登陆信息: Destination System 填写要在哪个主机上创建虚拟机,也就是ESXi服务器地址: 这两个过程有个简短的拉去主机信息的过程。 2. 选择目标虚拟机和存放位置 Destination Virtual Machine 目标虚拟机名字默认是源hostname,不用选择folder: Destination Location...

April 5, 2015 · admin

在Mac在Mac/win7下上使用Vagrant打造本地开发环境

1. vagrant介绍 1.1 vagrant能做什么 做Web开发(java/php/python/ruby…)少不了要在本地搭建好开发环境,虽然说目前各种脚本/语言都有对应的Windows版,甚至是一键安装包,但很多时候和Windows环境的兼容性(如配置文件、编译的模块)并不是那么好,麻烦的问题是实际部署的环境通常是Linux,常常还要面临着开发和部署环境不一致,上线前还要大量的调试。而如果让每个开发人员都自己去搭建本地环境,安装虚拟机、下载ISO镜像、选择规格安装创建vm、安装OS、配置,会耗费非常多的时间,如果是团队开发应该要尽量保持每个人的运行环境一致。此时vagrant正式你所需要的。不适用正式环境部署。 vagrant实际上一套虚拟机管理工具,基于Ruby开发,底层支持VirtualBox、VMware甚至AWS、docker等作为虚拟化系统。我们可以通过 Vagrant 封装一个 Linux 的开发环境,分发给团队成员。成员可以在自己喜欢的桌面系统(Mac/Windows/Linux)上开发程序,代码却能统一在封装好的环境里运行,“代码在我机子上运行没有问题”这种说辞将成为历史。 通过上面的介绍如果你还在困惑有virtualbox或vmware为什么还要加入vagrant,纠结于要不要使用,可以参考这个问答 使用vagrant的意义在哪,另外docker作为后起之秀也可以做vagrant能完成的事情,stackoverflow有关于两位作者讨论各自应用场景的精彩"互掐",传送门→ (中文)。 1.2 几个概念 Provider:供应商,在这里指Vagrant调用的虚拟化工具。Vagrant本身并没有能力创建虚拟机,它是调用一些虚拟化工具来创建,如VirtualBox、VMWare、Xen、Docker,甚至AWS,这些虚拟化工具只要安装好了,vagrant会自动封装在底层通过统一的命令调用。也就是说使用vagrant时你电脑上还需要安装对应的Provider,默认是免费开源的virtualbox。 Box:可被Vagrant直接使用的虚拟机镜像文件,大小根据内容的不同从200M-2G不等。针对不同的Provider,Box文件的格式是不一样的,从 vagrantcloud.com 你可以找到社区维护的box。 Vagrantfile:Vagrant根据Vagrantfile中的配置来创建虚拟机,是Vagrant的核心。在Vagrantfile文件中你需要指明使用哪个Box(可以下载好的或自己制作,或指定在线的URL地址),虚拟机使用的内存大小和CPU,需要预安装哪些软件,虚拟机的网络配置,与host的共享目录等。 Provisioner:是Vagrant的插件的一种。大部分现成的box并不是你正好想要的,通过使用你熟悉的provisioner,比如Puppet,可以在你使用vagrant up启动虚拟机时自动的安装软件、修改配置等初始化操作。当然你也可以在最先启动虚拟机后,使用vagrant ssh进去然后手动安装软件,但毕竟不是所有人都是系统管理员,写好Vagrantfile后无需人工干预马上就可以使用vm。目前支持并实现的provisioning有Puppet、Salt、Ansible、Chef这些知名的自动化运维工具,当然需要一定的使用经验;也可以使用shell provisioner,故名思议这个插件就是通过执行shell命令完成统一的作用。 Guest Additions:这个是常在下载 base box 介绍里有的,一般用来实现host到vm的端口转发、目录共享,在开发环境上都建议装上以便测试。 2. 安装vagrant VirtualBox: 4.3.12,https://www.virtualbox.org/wiki/Download_Old_Builds_4_3 。我上手使用的是4.3.20,折腾出过几个问题,据说说4.3.12版本较稳定。 建议选择VirtualBox ,即使你电脑上已经安装VMware Workstation或Fushion,它的vagrant插件还是要收费的 Vagrant: 1.7.1,http://www.vagrantup.com/downloads-archive.html 选择适合你的平台(Windows、Mac、Linux),下载对应格式的安装包。如Mac下 vagrant_1.7.1.dmg、VirtualBox-4.3.20-96997-OSX.dmg 。 3. 使用vagrant打造一个本地开发环境 本文将会演示从 nrel CentOS6.5 开始,安装必要的开发包、python、插件、Puppet,然后打包成一个box分发给团队的全过程。你也可以在别人box的基础上进一步通过Vagrantfile定制自己的环境。 3.1 初始化 3.1.1 vagrant box add {box-name} {box-url} $ vagrant box add ct65_00 Downloads/centos65.box ==> box: Adding box 'ct65_00' (v0) for provider: box: Downloading: file:///Users/sean/Downloads/centos65....

March 25, 2015 · admin

习惯晚睡

很久没有像今天这样坐下来写东西了,也不知道抽的什么风,大上午背着电脑跑到南山图书馆来了,可能是实在想不到大好的周末能做些什么吧。其实也倒不是心血来潮,过年回到深圳以后,很长一段时间都在思考过去,规划以后的方向,零零碎碎的记录了一些,但至今未能成文。但今天不是讲规划,而是——习惯,晚睡的习惯。 作为刚24的满血青年,很多人可能会反驳晚一点睡算什么,此时不任性何时才任性。我倒不是说晚睡不行,问题是我因何而晚睡。最近一直在看池建强老师的《MacTalk-人生元编程》这本书,无论Apple的联合创始人沃茨,还是微软的艾伦,在初期哪一个不是没日没夜的工作。当然咱无法与这些传奇人物比拟,但至少说明熬夜,要值得,如果我是在熬夜积累自己,或能对改善以后的状况,我就觉得值得。 可是现在我们大多数人熬夜在干嘛呢,包括我也有反思自己。 这里先说说我的熬夜习惯从何而来吧。大学时候有电脑开始。那时候除了学业,还有部分学生工作,再有就是qq,往往深夜凌晨一两点还在挂着电脑qq,还记得太晚不睡免得有同学说,特意到了1点左右调成隐身,一边看电影,还一边刷微博。当时有个玩的较好的室友,他的原则是过点(0点)必睡,我还曾与他争论过“到点睡觉,规规矩矩”“大学时不疯狂一下没多大意义”,可是现在我回头想来我也并没有因为比他多熬几个夜而记起怎样怎样刻骨铭心的记忆。现在想来更难以理解的是,我大三大四好像竟然是因为学习任务而熬夜加班加点,甚至考研的时间里依旧毫无规律,噢不,有规律的熬夜,而且愈发厉害熬到3点。这样都能考上的话我就不用坐在这里一边埋怨一边writing了。当然还有部分属于我个人的故事…… 也就是这样习惯,毕业后延续到现在,不过较好的一点是没那么严重,平日晚一点到1点,因为考虑到第二天还要上班这样一个事实,一到周末,又毅然决然的熬到凌晨三四点,而大部分情况是在看电影电视,似乎周五的晚上是从11点开始,周六的白天从下午一点开始…… 写到这里,我倒不是谴责自己晚睡这样一个习惯,因为我相信肯定还是有很大一部分人跟我一样有着凌晨一点才睡的习惯,目前跟我一起合租的同事就是两个活生生的例子,更不是告诉自己“熬夜对身体有害”这样一个众所周知的烂道理。有些人熬夜是迫不得已,而我是因为三四年时间形成的习惯。我依然坚持大学里我对室友说的那个观点(前提是我是男的,身体也没什么旧疾),熬夜疯一下可以,问题是干什么。有多少人可以熬夜而不用考虑明天。 最近上班没什么特别的工作,拿出不少时间去简书上看看文章,或搜到某个人博客,就闲来无事的点开Archive列表,随机点开看看。看到人家几年来做的点点滴滴,同龄人群里,我却丝毫想不起那时候我在做什么,依旧是同龄人我现在正在学的东西,人家两三年前就在用了。这也不难解释我现在的处境了。不止一次有过努力追赶别人的想法,可是晚上一回到家,不是迷上电视就是电脑手机。回家前我计划要做的事情实施了吗?这样是会有一点点累,可我24岁的年龄过着如此安逸的生活,这不是我应得的。来自家里的压力,我应该是努力在工作技能上积累,在生活情商上积累,而我没那么多时间,慢慢来… 一个人的努力是孤独的,也是幸运的。毫无理由的晚睡,第二天迷迷糊糊起床,这不是我想要的状态。想要有所作为,可能就因为一个不经意的习惯而磨损了自己的动力。 我想象这样一个场景: 早上提前30分钟(七点)起来,轻轻松松的洗漱,打扮,然后从容的吃个早饭,车上看看知乎。 上班时间,没事少刷朋友圈,早中晚看几次就行了。中午看看新闻,午休一觉,快速进入工作状态,不能再迷糊半个小时(这也成习惯了吧)。 下午三四点上班累了,走动走动,聊聊天,打打水。眼睛酸了,滴滴眼药水(买了别浪费) 晚上下班车上,听听歌。早的话,跟室友一起买买菜做做饭。 10点以后是自己的时间,我可以舒舒服服的洗个澡,不开电脑,然后看一个半小时的书,或者看看新闻和喜欢的节目,再或者利用好Mac学点东西,写点东西。 周末,九点钟起来。偶尔聚聚,逛逛,但至少拿出一天时间去图书馆,家里真不适合学习、阅读和写作。拿一个晚上去打打球,看看电影什么的。 有人会说,不就是晚睡而已吗,至于这样吗,功利性太强了! 就我目前各方面不稳定因素来说,我觉得有必要这样一个list。把平时和睡前那些零碎时间利用起来,安安静静的坚持多看几书,不再拘泥于自己知道的小圈子,才会发现更多机会。 ——闹钟真是一个伟大的发明,它让你放心的入睡,也无情的把你叫醒,为了减轻你的埋怨还允许你贪睡。

March 14, 2015 · admin

php5.3连接oracle的客户端及pdo_oci模块安装

php连接oracle数据库虽然不是最佳拍档,但组内开发确实有这样需求。如果没有参考合适的文档,这个过程还是挺折磨人的,下面是一个记录,原型是国外的一篇博客 Installing PDO_OCI and OCI8 PHP extensions on CentOS 6.4 64bit。 假设你已经安装好php的环境,php版本为5.3,要连接的oracle服务器是 11g R2,操作系统版本CentOS 6.4 x86_64。如果没有安装php,可以通过以下命令安装: # yum install php php-pdo # yum install php-devel php-pear php-fpm php-gd php-ldap \ php-mbstring php-xml php-xmlrpc php- zlib zlib-devel bc libaio glibc 假如web服务器使用apache。 1. 安装InstantClient instantclient是oracle的连接数据库的简单客户端,不用安装一个500Moracle客户端就可以连接oracle数据库,有windows和linux版本。从 这里 选择需要的版本下载,只需Basic和Devel两个rpm包。 安装 # rpm -ivh oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm # rpm -ivh oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm 软链接 # ln -s /usr/include/oracle/11.2/client64 /usr/include/oracle/11.2/client # ln -s /usr/lib/oracle/11.2/client64 /usr/lib/oracle/11.2/client 64位系统需要创建32位的软链接,这里可能是一个遗留bug,不然后面编译会出问题。 接下来还要让系统能够找到oracle客户端的库文件,修改LD_LIBRARY_PATH: # vi /etc/profile.d/oracle.sh export ORACLE_HOME=/usr/lib/oracle/11....

March 10, 2015 · admin

rpm或yum安装软件提示error-rpmts_HdrFromFdno-key-ID-BAD

问题 在 CentOS 6.4 x86_64 上无论通过yum或rpm安装软件时,出现以下错误: yum install glibc-devel ... error: rpmts_HdrFromFdno: Header V3 RSA/SHA1 Signature, key ID c105b9de: BAD ... Problem opening package *.el6.x86_64.rpm 分析 rpm -ivh单独去安装软件也提示上面的错误。rpm -qa 无法列出系统中安装过的软件包,但许多库文件和软件命令是存在的。也尝试过rpm --rebuilddb来重建数据库,但情况依然没有得到改善(centos官网说千万不要在系统broken的情况下rebuilddb,不然有可能变成destroy) 由上面的推断可知问题出现在rpm这个软件包管理工具本身,但此时又无法通过rpm来重新安装自己,所以只能找到具体是什么因素导致的。好在官网的这篇较新的文章正好就是解决该BUG:WARNING: nss-softokn-3.14.3-19.el6_6 updates may be broken : 大致是说当你使用yum update去更新你的系统时,nss-softokn、nss-softokn-freebl和其它软件一起都得到更新,所以不会有问题。但如果单独去更新某一个软件,如yum update nss-softokn或yum install <software>引起它的依赖包也升级,使得nss-softokn和nss-softokn-freebl版本不匹配,就会导致 rpm/yum 全面停止工作,表现就是上面的key .. BAD。 解决 解决起来也很方便,首先你可以通过cat /var/log/messages|grep nss看到nss-softokn-freebl的版本: # cat /var/log/messages|grep nss-softokn Mar 2 09:56:18 poprod yum[14920]: Updated: nss-softokn-3.14.3-19.el6_6.x86_64 Mar 2 14:43:29 poprod yum[33040]: Installed: nss-softokn-freebl-3.14.3-19.el6_6.x86_64 Mar 2 14:44:14 poprod yum[33047]: Installed: nss-softokn-freebl-3....

March 2, 2015 · admin

我为何厌恶百度的产品

今天因为使用百度云同步盘出错,导致我的文件永远丢失,忍无可忍又给“百度倾听”发了条牢骚。 事情是这样的,我在 MarkdownPad2 修改最近写的3篇文章,文章正好在百度云同步盘的同步目录下,因为一直养成了一边编辑一边Ctrl+S保存的习惯,难道由于这3篇文章反复修改,百度云同步盘竟然支撑不住?弹出窗口大概是说同步出错,需要重启应用(近期出现过好几次),随手点了个确定,MarkdownPad2提示我当前编辑的文件不存在,是否继续保留在窗口,反正文章修改完了,也没多想,duang,悲剧发生了,两个小星期的成果都不见了。还在失落当中…… 为什么叫“又”呢,因为在去年1月份的时候也在手机上使用过百度云同步盘,不记得是同步什么,也不是文件丢失。Android版有一个“仅在wifi下同步”的选项,像我这种3G流量哪够同步文件使用啊,当时还觉得挺贴心的,开着应用在后台一上午,中午吃饭拿起手看时,尼玛提示我本月流量已超50多M,也给百度意见反馈写了200多字的声讨书,结果几天后回复的内容不知是从哪摘抄的一段无价值的内容。还有一次是登录注销的问题,20多天后才回复邮件,结尾还不忘带上小米的广告,简直让用户抓狂。(邮件正文就不贴了,每每出现这样的问题都十分狂躁,不少脏话) 我想这样的同步工具最多对于百度是个附属产品,并不能带来多大收益,在团队投入上并不尽心。给我自己的教诲是,选择产品或工具,不能因为公司名声大而就给予信任,一个公司能够把一件事情做好了就会迎来不错的口碑,选择它的主打产品。说到这里不得不继续吐槽了,百度搜索应该是它的命脉了,但对于我用习惯了google来说,没有条件不得不使用百度搜索,索引到的结果,唉~ 大!惊!失!色! 如此种种,不得不让我怀疑百度其他产品的使用问题。 无奈 Dropbox 在国内被封,也只有偶尔在家用电脑时打开VPN才能访问,被百度云同步盘伤过那么多次心之后,感觉再也不会用了,还是老老实实挂VPN吧,虽麻烦但也免去了不必要的担忧。

February 28, 2015 · admin