这个命题够古怪的.

理由是公司周五下午到了一台新的dell机器,恰好周五我请假,同事帮着装了个Linux在这台机器上,配好了IP。
而领导要求在周六做个应急方案,说白了就是必须在这套dell机器上装Vmware,搭出两个虚机出来。

懒得周末去公司啊。而装vmware必须启动dell机器bios里cpu的virt虚拟特性。
简单说就是需要远程修改dell机器的Bios并重启,没办法啊。懒人大法:

wget -q -O - http://linux.dell.com/repo/hardware/latest/bootstrap.cgi | bash

yum install srvadmin-all

90多兆

/etc/yum.conf必须有plugins=1这一行

装好后
/opt/dell/srvadmin/sbin/srvadmin-services.sh start

然后访问 http://xxx.xxx.xxx.xxx:1311/
输入root和密码即可进去了.

Popularity: 31% [?]

  可能会用到要调试soap的时候,简单的方法就是用python+suds
  下载suds-0.4.tar.gz,然后安装,比较麻烦的是用的是python 2.6.2,缺省是没有装setuptools的。
  1、下载setuptools-0.6c11-py2.6.egg,然后:
    sh ./setuptools-0.6c11-py2.6.egg
  2、tar zxvf suds-0.4.tar.gz
    cd suds-0.4;python ./setup.py install
  3、可以调试了


 

  Python 2.6.2 (r262:71600, Nov 16 2010, 17:02:52)

  [GCC 4.1.2 20080704 (Red Hat 4.1.2-44)] on linux2
  Type "help", "copyright", "credits" or "license" for more information.
  >>> import suds
  >>> url = 'http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx?wsdl'
  >>> client = suds.client.Client(url)
  >>> print client
  
  Suds ( https://fedorahosted.org/suds/ )  version: 0.4 GA  build: R699-20100913
  
  Service ( MobileCodeWS ) tns="http://WebXml.com.cn/"
     Prefixes (1)
        ns0 = "http://WebXml.com.cn/"
     Ports (2):
        (MobileCodeWSSoap)
           Methods (2):
              getDatabaseInfo()
              getMobileCodeInfo(xs:string mobileCode, xs:string userID, )
           Types (1):
              ArrayOfString
        (MobileCodeWSSoap12)
           Methods (2):
              getDatabaseInfo()
              getMobileCodeInfo(xs:string mobileCode, xs:string userID, )
           Types (1):
              ArrayOfString
  
  
  >>> result =  client.service.getMobileCodeInfo(13911904392)
  >>> print result
  13911904392:北京 北京 北京移动全球通卡
  >>> print client.last_received()
  <?xml version="1.0" encoding="UTF-8"?>
  <soap:Envelope>
     <soap:Body>
        <getMobileCodeInfoResponse xmlns="http://WebXml.com.cn/">
           <getMobileCodeInfoResult>13911904392ㄧ乱码</getMobileCodeInfoResult>
        </getMobileCodeInfoResponse>
     </soap:Body>
  </soap:Envelope>
  >>>

  注  意啊,暴露出来的函数还有一个getDatabaseInfo(),可以试试。加快调试过程。

Popularity: 40% [?]

其实很简单啦,首先要搭好asterisk系统,八戒这里一直用的是elastix系统,升级到2.0了
写个网页,准备提交(这台机器的ip是192.168.1.1,而elastix是192.168.1.2):

<center><font class="title"><font face=verdana size=2>VOIP电话互通系统, 八戒制作</font></font></center>
<center>
      <form method="POST" action="action.php" name="loginform">
        <table border="0" cellspacing="2" cellpadding="4">
        <tr>
            <td bgcolor="#E2E2E2"><font face=verdana size=2>你的电话号码: </font></td>
            <td bgcolor="#E2E2E2"><input type="text" name="user1" size="11"></td>
        </tr>
        <tr>
            <td bgcolor="#E2E2E2"><font face=verdana size=2>你要拨打的电话号码: </font></td>
            <td bgcolor="#E2E2E2"><input type="text" name="user2" size="11"></td>
        </tr>
        <tr>
            <td>&nbsp;</td>
            <td>
                 <input type="submit" value="提交"></p>
            </td>
        </tr>
        </table>
      </form>
</center>


重点是要剖析的action.php

<?php
        $user1 = $_POST["user1"];
        $user2 = $_POST["user2"];
 
        $socket = fsockopen ("192.168.1.2", 5038, $errno, $errstr, 20);
        fputs($socket, "Action: Login\r\n");
        fputs($socket, "UserName: phpagi\r\n");
        fputs($socket, "Secret: phpagi\r\n\r\n");
 
        fputs($socket, "Action: Originate\r\n");
        fputs($socket, "Channel: Local/00".$user1."@from-internal\r\n");
        fputs($socket, "MaxRetries: 18\r\n");
        fputs($socket, "RetryTime: 15\r\n");
        fputs($socket, "WaitTime: 15\r\n");
        fputs($socket, "Context: outrt-001-9_outside\r\n");
        fputs($socket, "Exten: 00".$user2."\r\n");
        fputs($socket, "Priority: 1\r\n\r\n");
 
        $wrets=fgets($socket,128);
        fclose($socket);
        echo "<big>发送成功!!请等待拨叫.</big><br/>";
?>


这里有几个地方要注意:
一个就是 Local/00,主意这个00,因为是elasix接了2个分机的线,所以一个0是出elastix,一个0是出实际的分机。
outrt-001-9_outside已经被改,出局的号码由9改成了0。如果用缺省的,应该是Local/09和Exten: 09

还有就是这里用的是phpagi的方式,所以这台的ip必须是在phpagi允许访问的范围内,修改:
/etc/asterisk/manager_custom.conf
[phpagi]
secret = phpagi
deny=0.0.0.0/0.0.0.0
permit=192.168.1.1/255.255.255.0
read = system,call,log,verbose,command,agent,user,config,dtmf,reporting,cdr,dialplan
write = system,call,log,verbose,command,agent,user,config,command,reporting,originate

然后asterisk -r -vvvvvgc
reload一下,开始通话吧,哈哈。

Popularity: 36% [?]

Asterisk 通道变量

No Comments. Posted in Asterisk by admin on 01-27-2011.

这些非常之有用啊,我们写exten是必须用到的。

${ACCOUNTCODE}: 用户计费帐号 sip.conf 里的 account=XXXX
${ANSWEREDTIME}: 通话时长(秒)
${BLINDTRANSFER}: 通道是否为转接类型
${CALLERID(all)}: 主叫用户名(主叫ID) 格式 name(123454)
${CALLERID(name)}: 主叫用户名 sip.conf 里的 username=XXXX
${CALLERID(num)}: 主叫号码sip.conf 里的 callerid=XXXX
${CALLINGPRES}: PRI Call ID Presentation variable for incoming calls (See callingpres )
${CHANNEL}: 当前通道标识
${CONTEXT}: 当前context
${DATETIME}: 当前日期时间
${DIALEDPEERNAME}: Name of the called party. Broken for now, see DIALEDPEERNAME
${DIALEDPEERNUMBER}: Number of the called party. Broken for now, see DIALEDPEERNUMBER
${DIALEDTIME}: Time since the number was dialed (only works when dialed party answers the line?!)
${DIALSTATUS}: 当前通道状态
${DNID}: 用户所拨打的号码
${EPOCH}: The current UNIX-style epoch (number of seconds since 1 Jan 1970)
${EXTEN}: 当前所拨打分机号码
${HANGUPCAUSE}: The last hangup return code on a Zap channel connected to a PRI interface
${INVALID_EXTEN}: The extension asked for when redirected to the i (invalid) extension
${LANGUAGE}: 提示语言
${MEETMESECS}: Number of seconds a user participated in a MeetMe conference
${PRIORITY}: The current priority
${RDNIS}: The current redirecting DNIS, Caller ID that redirected the call. Limitations apply, see RDNIS
${SIPDOMAIN}: SIP destination domain of an inbound call (if appropriate)
${SIP_CODEC}: Used to set the SIP codec for a call (apparently broken in Ver 1.0.1, ok in Ver. 1.0.3 & 1.0.4, not sure about 1.0.2)
${SIPCALLID}: The SIP dialog Call-ID: header
${SIPUSERAGENT}: The SIP user agent header
${TIMESTAMP}: Current date time in the format: YYYYMMDD-HHMMSS This is deprecated as of Asterisk 1.4, instead use :${STRFTIME(${EPOCH},,%Y%m%d-%H%M%S)})
${TRANSFERCAPABILITY}: 通道类型。是否可以转接
${TXTCIDNAME}: Result of application TXTCIDName (see below)
${UNIQUEID}: 当前唯一标识
${TOUCH_MONITOR}: used for "one touch record" (see features.conf, and wW dial flags).

Popularity: 35% [?]

SHELL下的数字比较及计算
比较:
方法一: if [ ${A} -lt ${B} ]; then ...
这是最基本的比较方法,使用lt(小于),gt(大于),le(小于等于),ge(大于等于),优点:还没发现;缺点:只能比较整数,使用lt,gt等不直观
方法二: if ((${A} < ${B})) then ...
这是CShell风格比较,优点:不用使用lt,gt等难记的字符串;缺点:还是只能比较整数
方法三: if (echo ${A} ${B} | awk '!($1>$2){exit 1}') then ...
这是使用awk比较,优点:可以比较小数;缺点:表达式太复杂,难记
方法四: if (echo ${A} - ${B} | bc -q | grep -q "^-"); then ...
这是使用bc计算比较,优点:可以比较小数;缺点:表达式更复杂,难记
计算:
方法一:typeset C=$(expr ${A} + ${B});
SHELL中的基本工具,优点:方便检测变量是否为数字;缺点:只能计算整数,且只能计算加减法,不能计算乘除法
方法二:let "C=${A}+${B}"; 或 let "C=A+B"
内嵌命令计算,优点:能计算乘除法及位运算等;缺点:只能计算整数
方法三:typeset C=$((A+B))
CShell风格的计算,优点:能计算乘除法及位运算等,简介,编写方便;缺点:不能计算小数
方法四:typeset C=${echo ${A} ${B} | awk '{print $1+$2}')
使用awk计算,优点:能计算小数,可以实现多种计算方式,计算灵活;缺点:表达式太复杂
方法五:typeset C=${echo ${A} + ${B} | bc -q)
使用awk计算,优点:能计算小数,计算方式比awk还多,计算灵活;缺点:表达式太复杂,小数点后面的位数必须使用scale=N来设置,否则可能会将结果截断为整数

Popularity: 80% [?]

  nfs服务器由于毛病重启了,但是客户端挂了好几个,并未重启。这时候导致整个nfs客户端进程异常。umount吧也umount不下去:

streaming01:~# umount /storages/2
umount: /storages/2: device is busy
umount: /storages/2: device is busy
  busy个P啊,急死人也。
  解决方法:
  先找出那些等待这个share的进程,ps axu查看一下,找出STATE是D的进程,然后kill -9 这些进程(实际上根本杀不掉这些东西,就是给个信号过去),然后再kill -9叫做rpciod的进程,这样之后就可以顺利的unmount nfs了。

Popularity: 97% [?]

Freevpn的选择

No Comments. Posted in Linux系统管理 by admin on 12-04-2009.

  在网上搜了半天,绝大多数的都被和谐封掉了,搞的连www.yi.org都上不去。

  有两个是可以用的,www.itshidden.com。这个测试过了,不错。

  另外一个就是证书大户comodo的,http://easy-vpn.comodo.com/download.html,个人使用也是免费的。

  大家赶紧下载注册使用把。

Popularity: 90% [?]

Redhat4和5下使用裸设备

No Comments. Posted in java by admin on 12-04-2009.

  需要安装Oracle的RAC,用到了裸设备,4和5的方式是不同的

  RHEL4

  1: 编辑/etc/sysconfig/rawdevices file
    /dev/raw/raw1 /dev/sdf1

  2: 重启rawdevice服务,使改动立即生效
    $>service rawdevices restart

  3: 为裸设备更换属主
    $>chown oracle:dba /dev/raw/raw1

  RHEL5 / OEL5

  1: 修改/etc/udev/rules.d/60-raw.rules或者建立一个新文件,序列号不小于60,如63-oracle-raw.rules
    ACTION==”add”, KERNEL==”sdf1″, RUN+=”/bin/raw /dev/raw/raw1 %N”

  2: 运行如下命令,使裸设备立即生效
    $>/bin/raw /dev/raw/raw1 /dev/sdf1

  Over,这样就搞定了。

Popularity: 85% [?]

Linux下防止DDOS的脚本

No Comments. Posted in Linux系统管理 by admin on 11-06-2009.

wget www.inetbase.com/scripts/ddos/install.sh
chmod 0700 install.sh
./install.sh

很简单吧,非常有效,记得把ddos.conf中的
APF_BAN=1改成APF_BAN=0,用iptables 来阻挡IP。

Popularity: 89% [?]

因为PCI-DSS审计的原因,需要在Oracle上面打开Audit功能。

sqlplus "/ as sysdba"

SQL*Plus: Release 10.2.0.3.0 - Production on Thu Jun 18 09:51:28 2009

Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Release 10.2.0.3.0 - 64bit Production

SQL> show parameter audit

NAME TYPE VALUE
------------------------- ----------- -----------------------
audit_file_dest string /data/SID/trace/adump
audit_sys_operations boolean FALSE
audit_syslog_level string
audit_trail string NONE

1.打开审计

SQL> alter system set audit_sys_operations=TRUE scope=spfile;

SQL> alter system set audit_trail=XML scope=spfile;

2.重启实例

3.SQL> show parameter audit

NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /data/SID/trace/adump
audit_sys_operations boolean TRUE
audit_syslog_level string
audit_trail string XML

4.检查日志文件
在adump目录下的日志文件里面,可以看到你的操作都记录在案了。

Popularity: 79% [?]