存档

‘OpenSource’ 分类的存档

shell 的变量作用域

2008年7月8日 评论已被关闭

shell变量的作用域
while read line
  do
    str[$i]=$line1
    echo $i
    echo ${str[i]}
    let i=i+1
  done  < data
 
  len=${#str[@]}
  echo $len
 
  $len长度为实际data文件的行数
  str[]变量的作用域一直有效
  ===================
  cat data|while read line
  do
    str[$i]=$line1
    echo $i
    echo ${str[i]}
    let i=i+1
  done
 
  len=${#str[@]}
  echo $len
 
  $len长度为0
 
  说明str[]变量的作用域到done结束即失效。
 
  原因是局部变量是普通的变量,仅在创建它的Shell中有效。
   cat data|while read line  使用了管道符 “|”
  表明父shell中的局部变量不会传递到子shell中

分类: OpenSource, shell 标签:

kernel panic – not syncing: 的思考

2008年7月5日 2 条评论

kernel panic 出错会在屏幕上显示,看了下message文件、并没有相关记录。

kernel panic 主要有以下几个出错提示:

kernel panic – not syncing: Attempted to kill the idle task!
kernel panic – not syncing: killing interrupt handler!
Kernel Panic – not syncing:Attempted to kill init !

查看了一下 linux的源码文件,找到相关位置

kernel/panic.c

NORET_TYPE void panic(const char * fmt, …)
{
    static char buf[1024];
    va_list args;

    bust_spinlocks(1);
    va_start(args, fmt);
    vsnprintf(buf, sizeof(buf), fmt, args);
    va_end(args);
    printk(KERN_EMERG “Kernel panic – not syncing: %s\n”,buf);
    bust_spinlocks(0);
    
   
kernel/exit.c

    if (unlikely(in_interrupt()))
        panic(“Aiee, killing interrupt handler!”);     #中断处理
    if (unlikely(!tsk->pid))
        panic(“Attempted to kill the idle task!”);     #空任务
    if (unlikely(tsk->pid == 1))
        panic(“Attempted to kill init!”);              #初始化
       

       
从其他源文件和相关文档看到应该有几种原因:

1、硬件问题

使用了 SCSI-device 并且使用了未知命令

#WDIOS_TEMPPANIC        Kernel panic on temperature trip
#   
#        The SETOPTIONS call can be used to enable and disable the card
#    and to ask the driver to call panic if the system overheats.
#   
#    If one uses a SCSI-device of unsupported type/commands, one
#      immediately runs into a kernel-panic caused by Command Error. To better
#      understand which SCSI-command caused the problem, I extended this
#      specific panic-message slightly.
#     
#read/write causes a command error from
#      the subsystem and this causes kernel-panic

2、系统过热
如果系统过热会调用panci,系统挂起

#WDIOS_TEMPPANIC        Kernel panic on temperature trip
#   
#        The SETOPTIONS call can be used to enable and disable the card
#      and to ask the driver to call panic if the system overheats.

3、文件系统引起

#A variety of panics and hangs with /tmp on a reiserfs  filesystem
#Any other panic, hang, or strange behavior
#
#  It turns out that there’s a limit of six environment variables on the
#  kernel command line.  When that limit is reached or exceeded, argument
#  processing stops, which means that the ‘root=’ argument that UML
#  usually adds is not seen.  So, the filesystem has no idea what the
#  root device is, so it panics.
#  The fix is to put less stuff on the command line.  Glomming all your
#  setup variables into one is probably the best way to go.

Linux内核命令行有6个环境变量。如果即将达到或者已经超过了的话 root= 参数会没有传进去
启动时会引发panics错误。

vi grub.conf
#####################
title Red Hat Enterprise Linux AS (2.6.9-67.0.15.ELsmp)
        root (hd0,0)
        kernel /boot/vmlinuz-2.6.9-67.0.15.ELsmp ro root=LABEL=/
        initrd /boot/initrd-2.6.9-67.0.15.ELsmp.img
title Red Hat Enterprise Linux AS-up (2.6.9-67.EL)
        root (hd0,0)
        kernel /boot/vmlinuz-2.6.9-67.EL ro root=LABEL=/
        initrd /boot/initrd-2.6.9-67.EL.img

应该是 其中的 root=LABEL=/   没有起作用。

4、内核更新
网上相关文档多半是因为升级内核引起的,建议使用官方标准版、稳定版

另外还有使用磁盘的lvm 逻辑卷,添加CPU和内存。可在BIOS中禁掉声卡驱动等不必要的设备。

也有报是ext3文件系统的问题。
解决: 手工编译内核,把 ext3相关的模块都编译进去,
 

5、处理panic后的系统自动重启

panic.c源文件有个方法,当panic挂起后,指定超时时间,可以重新启动机器

if (panic_timeout > 0)
    {
        int i;
        /*
          * Delay timeout seconds before rebooting the machine.
         * We can’t use the “normal” timers since we just panicked..
          */
        printk(KERN_EMERG “Rebooting in %d seconds..”,panic_timeout);
        for (i = 0; i < panic_timeout; i++) {
            touch_nmi_watchdog();
            mdelay(1000);
        }
       
修改方法:
/etc/sysctl.conf文件中加入
kernel.panic = 30    #panic错误中自动重启,等待时间为30秒
kernel.sysrq=1       #激活Magic SysRq!  否则,键盘鼠标没有响应  

分类: OpenSource 标签: ,

eclipse+pydev搭建python开发环境

2008年6月30日 评论已被关闭

开始学习python,试着配置了一下开发环境

PS:系统Win,已经安装了python2.4以上、并且配置好环境变量,另外安装jdk 1.4以上版本、

eclipse+pydev

下载eclipse的最新版本3.4,

登陆http://www.fabioz.com/pydev/站点下载最新版本Release 1.3.18 ,我试过使用eclipse自带的plug更新没有成功,虽然我指定了可以更行的URL,并且可以找到pydev的模块,可惜出现了异常,所以只好手动下载zip文件。

可以到http://www.fabioz.com/pydev/zips/找到最新版本进行下载

解压到eclipse的plugin目录和features目录,然后配置eclipse的pydev插件,可以指定python.exe的安装目录,

eclipse提到了jython的插件,使用户能以Python语言的语法编写在Java虚拟机上运行的软件。它的特点有:与相似的Java程序相比,Jython极大的的减少了编程代码量。Jython同时拥有解释器和编译器,使其无需编译就可以测试程序代码。

配置好以后,就可以进行python的开发了,带有自动缩进和高亮提示及语法提示,eclipse的功能还真是强大!

 

分类: OpenSource 标签: ,

apache 与resin2或者resin3 的整合配置

2008年6月28日 评论已被关闭

apached的下载及编译:
http://www.apache.org/
这里选择动态加载模块,如果需要其他模块的可以自行添加。

./configure –prefix=/home/2hei/apache2 –enable-module=so
make
make install

resin的下载及编译:
http://www.caucho.com/download  下载resin2的版本或者resin3的版本
./configure
make
make install

修改apache的配置:默认安装resin后会给httpd.conf写入一些东西,
但是对于resin2不好用,网上的一些配置也没有找到真正能用得,google了许久,下面的终于可以使用了。

#httpd.conf for resin2.1.*

#
# mod_caucho Resin Configuration
#

LoadModule caucho_module /home/2hei/apache2/modules/mod_caucho.so
#CauchoConfigFile /home/2hei/soft/resin/conf/resin.conf
#CauchoServerRoot /home/2hei/apache2
CauchoHost localhost 6802
AddHandler caucho-request jsp
<Location /servlet/*>
   SetHandler caucho-request
</Location>

对于resin3,安装后的配置基本上可以使用。

httpd.conf   for resin3.1.6
#
# mod_caucho Resin Configuration
#

LoadModule caucho_module /home/2hei/apache2/modules/mod_caucho.so

ResinConfigServer localhost 6800
CauchoConfigCacheDirectory /tmp
CauchoStatus yes

也可以配置resin多台主机的负载,或者一台resin上多个srun端口。
如:
<caucho.com>
<http-server>
  <http id=’a’ port=’80’/>
  <srun id=’a’ port=’6802′ host=’192.168.0.1′ srun-index=’1’/>

  <http id=’b’ port=’80’/>
  <srun id=’b’ port=’6802′ host=’192.168.0.2′ srun-index=’2’/>

  <http id=’c’ port=’80’/>
  <srun id=’c’ port=’6802′ host=’192.168.0.3′ srun-index=’3’/>

  <!– enable tcp-store for all hosts/web-apps –>
  <session-config>
    <tcp-store/>
    <save-on-shutdown/>
  </session-config>
  …
</http-server>
</caucho.com>
或者:
<caucho.com>
<http-server>

  <srun id=”a” host=’2hei.net’ port=’6802′ srun-index=’1’/>
  <srun id=”b” host=’2hei.net’ port=’6803′ srun-index=’2’/>
 
</http-server>
</caucho.com>

可以把resin的web-app的doc指向apache的发布目录,如htodoc下面:

接着自己可以写一个jsp页面测试一下:
新建test.jsp 添加如下: 1+1=<%=1+1%>
http://testiP:8080/test.jsp
http://testiP/test.jsp
如果起作用表示整合成功。
http://testiP/caucho_status看看jvm状态。
 

分类: OpenSource, resin 标签: ,

openssh version mismatch 的解决

2008年6月25日 评论已被关闭

升级了一下openssh到最新版本openssh-5.0

$ssh -V
OpenSSH_5.0p1, OpenSSL 0.9.7g 19 Oct 2007

发现Openssl版本也是比较低
于是升级,下载openssl-0.9.8g.tar.gz

使用ssh登陆的时候报错
提示无法找到libcrypto.so.4
于是做了链接
ln -s /usr/lib/libssl.so.0.9.8 /lib/libssl.so.4

但是ssh还是报错,提示如下:

openssh version mismatch. Built against 908070, you have 90808g

google了一番,原来openssh和openssl的安装顺序是有一定限制的,
可以单独升级openssh,但是如果升级了openssl后,一定要重新编译openssh或者升级,否则openssh无法连上

分类: OpenSource 标签:

install anywhere多个Jar的问题

2008年5月1日 评论已被关闭

 

以前都是把java程序打成一个jar文件,其他关联的jar文件可以放到lib中,加入到classpath中即可。

今天遇到特殊情况了,可执行程序需要使用两个jar文件,按照以往的经验,把第二个jar add进去,其中也不知道点了什么,可能是随手点击了一下set classpath  ,安装后出现了问题,程序跑不起来了。 2hei我遇到问题了,汗!

检查打完包后的安装目录,与exe文件同名字的lax文件,
使用UE打开后,发现如下:
lax.class.path=lax.jar

原来设定的classpath都不见了踪影。可执行文件双击后没有任何反应,程序根本没有起来,手工把相关联的lib文件写进去后,exe文件竟然可以正常跑起来,于是回到install anywhere中寻找问题。

一个一个的排查,终于,在数小时后,发现在Launcher Properties 下的 Edit Properties 按钮下面有设置了lib目录,
lax.class.path 对应的值填写需要的jar及自己打的jar文件
 
安装完成后,再次打开lax文件,
lax.class.path=lib/jdic.jar;lib/org.jar;lib/iText-2.0.7.jar;lib/swing-layout-1.0.jar;lax.jar
问题解决,希望能对使用install anywhere打包的朋友有所帮助。

 

分类: java, OpenSource 标签: ,

mantis安装与使用

2008年4月23日 评论已被关闭

mantis是不错的Bug反馈系统,值得体验。

http://www.mantisbt.org/ 下载最新版本:mantis-1.1.1

http://www.mantisbt.org/manual/ 使用帮助

前提:apache+php4.4以上+mysql已经配置正确

cp config_inc.php.sample config_inc.php

vi config_inc.php
        # — database variables ———

        # set these values to match your setup
        $g_hostname      = “localhost”;
        $g_db_username   = “root”;
        $g_db_password   = “123456”;
        $g_database_name = “bugtracker”;
        $g_db_type       = “mysql”;

        $g_default_language = “chinese_simplified”;

        # — email variables ————-
        $g_administrator_email  = ‘bugtracker@yourdomain.com’;
        $g_webmaster_email      = ‘bugtracker@yourdomain.com’;

        # the “From: ” field in emails
        $g_from_email           = ‘noreply@yourdomain.com’;

        #——— own email —-
        $g_smtp_host = ‘mail.yourdomain.com’; # SMTP 服务器
        $g_smtp_username = ‘bugtracker’; # 邮箱登录用户名
        $g_smtp_password = ‘123456’; # 邮箱登录密码
        $g_use_phpMailer = ON; # 使用 PHPMailer 发送邮件
        $g_phpMailer_path =’.\core\phpmailer’; # PHPMailer 的存放路径
        $g_phpMailer_method = 2; # PHPMailer 以 SMTP 方式发送 Email

#       $g_path = “http://172.16.0.252/bugtest“;
#       $g_icon_path = $g_path.”images/”;
#       $g_absolute_path = “/home/mantis-1.1.1/”;
        $g_use_iis = OFF;       #我用的是linux
        $g_show_version = ON;

        # the return address for bounced mail
        $g_return_path_email    = ‘bugtracker@yourdomain.com’;
 $g_allow_file_upload    = ON;

 

apache的配置:

vi httpd.conf

Alias /bugtest “/home/mantis-1.1.1”

<Directory “/home/mantis-1.1.1”>
  Options Indexes MultiViews Includes FollowSymLinks +ExecCGI
  AllowOverride None
  Order allow,deny
  Allow from all
</Directory>

http://172.16.0.252/bugtest/admin/install.php

after install , you can delete the admin’s dir

mantis_2.jpg

 

 

 

mantis_1.jpg

 

 

 

 

 

 

 

 

 

 

 

 

the most interesting thing is you can register in mantis and recieve a comfirm mail!

 

分类: OpenSource 标签:

date_default_timezone_set

2008年4月17日 评论已被关闭

找了一下企业网站的php程序,开源的很少,让我满意的就更少了。

找来找去,找到了深喉咙http://www.deepthroat.com.cn

网上宣传的确实不错,而且有个Deepthroat [Version 2.3 ] Php版本(开源版本) 。
果然是傻瓜式安装啊,都给打成了集成包。不过我的系统都是Linux的,所以还是手工安装了一下。
感觉开源的版本的模板少的可怜,好看的模板都是商业版本的。

安装了一下商用版本,提示让我导入授权文件,汗!既然收费了,那就不用了。

不过安装商用版3.5时,也是颇费周折,遇到了 date_default_timezone_set()的问题。

打开index.php,提示

Fatal error: Call to undefined function: date_default_timezone_set() in /home/www/deep/index.php on line 5

Google了一下,原来是我的php版本的问题,原来的版本是php5.0.5,于是把php升级到5.2就可以了。

分类: OpenSource 标签:

使用vbs脚本写注册表来设置Ghostscript环境

2008年4月13日 评论已被关闭

 

很多与pdf相关的开源的插件(如:imagemagick ),
一般都需要ghostscript的支持,imagemagick的一些命令行的工具非常方便,但是用户往往不希望安装多个软件,
所以需要解决绿色安装的方式,通过脚本来写注册表。

具体方式如下:

首先可以先到http://www.ghostscript.com下载最新的版本。
比如gs8.61,先安装上,然后把整个安装目录复制出来。
搜索注册表,看到gs注册了两个键值,然后我们通过直接写注册表的方式来手工注册。

关键是配置gs的lib目录和字体目录。

建立vbs文件 gs_install.vbs

Set ws = WScript.CreateObject(“WScript.Shell”)

Dim ws, n, p, itemtype

p = “HKEY_LOCAL_MACHINE\SOFTWARE\GPL Ghostscript\8.61\GS_DLL”
itemtype = “REG_SZ”
n = “E:\2hei.net\gs\gs8.61\bin\gsdll32.dll”
ws.RegWrite p,n,itemtype

p = “HKEY_LOCAL_MACHINE\SOFTWARE\GPL Ghostscript\8.61\GS_LIB”
itemtype = “REG_SZ”
n = “E:\2hei.net\gs\gs8.61\lib;E:\2hei.net\gs\fonts;E:\2hei.net\gs\gs8.61\Resource;C:/WINDOW/fonts”
ws.RegWrite p,n,itemtype

ws.Run “cmd.exe /c cmd.bat”,vbhide

说明:
cmd.bat 是你想要真正执行的脚本文件,上面的则是设置依赖的gs环境。
——————————————

 

或者写reg文件

gs.reg

Windows Registry Editor Version 5.00
 
[HKEY_LOCAL_MACHINE\SOFTWARE\GPL Ghostscript\8.61]
“GS_DLL”=”E:\\2hei.net\\gs\\gs8.61\\bin\\gsdll32.dll”;
“GS_LIB”=”E:\\2hei.net\\gs\gs8.61\\lib;E:\\t2hei.net\gs\fonts;E:\\2hei.net\\gs\\gs8.61\\Resource;C:/WINDOWS/fonts”;

说明:
Windows Registry Editor Version 5.00
// – 注释 (空一行)
[路径] (注意用大小写);
“键名”=”键值” (针对字符串型键值);
“键名”=hex:键值 (针对二进制型键值);
“键名”=dword:键值 (针对DWORD键值);

分类: OpenSource 标签: ,

shell 批量替换文件名,实现目录合并

2008年3月30日 评论已被关闭

使用shell脚本替换 文件名,并把两个目录合并

源文件目录结果如下:

ls -l /temp/filelist/2001/

-rw-r–r– 1 test test  6472 03-28 19:19 100-2001-9-2-0.png
-rw-r–r– 1 test test  5860 03-28 19:19 100-2001-9-2-1.png
-rw-r–r– 1 test test  6472 03-28 19:20 100-2001-9-3-0.png
-rw-r–r– 1 test test  5860 03-28 19:20 100-2001-9-3-1.png
-rw-r–r– 1 test test  6472 03-28 19:20 100-2001-9-4-0.png
-rw-r–r– 1 test test  5860 03-28 19:20 100-2001-9-4-1.png
-rw-r–r– 1 test test  6472 03-28 19:20 100-2001-9-5-0.png
-rw-r–r– 1 test test  5860 03-28 19:20 100-2001-9-5-1.png

ls -l /temp/filelist/2003/

-rw-r–r– 1 test test  6472 03-28 19:19 100-2003-8-2-0.png
-rw-r–r– 1 test test  5860 03-28 19:19 100-2003-8-2-1.png
-rw-r–r– 1 test test  6472 03-28 19:20 100-2003-8-3-0.png
-rw-r–r– 1 test test  5860 03-28 19:20 100-2003-8-3-1.png
-rw-r–r– 1 test test  6472 03-28 19:20 100-2003-8-4-0.png
-rw-r–r– 1 test test  5860 03-28 19:20 100-2003-8-4-1.png
-rw-r–r– 1 test test  6472 03-28 19:20 100-2003-8-5-0.png
-rw-r–r– 1 test test  5860 03-28 19:20 100-2003-8-5-1.png

要求把2003目录中的“2003”替换为“2001”,并且把2003目录中修改文件名后的文件合并到2001目录中。

[local#2hei.net]# more ChangeName.sh

#!/bin/sh
# Edit By 2hei

Path=”/temp/filelist”

ls -l $1 |awk ‘{if($8>0) print $8}’  >  $Path/list

while read Line
do
Name=`echo $Line|sed ‘s/2003/2001/g’`
cp $Path/2003/$Line $Path/2001/$Name

done < $Path/list

Usage:  sh ChangeName.sh /temp/filelist/2003

分类: OpenSource, shell 标签: