im rem1x.

我又挪地方了。

net-snmp之利用pass做snmpget和snmpset

without comments

前几天写了一个运维工具,用来监控夜间业务的处理情况。

虽然是生产网,但由于都是内部网络,所以决定谨慎采用snmp来获取一些信息。其中的一个需求是,根据某个指定的业务日期从远程服务器的日志中分析产生结果,然后将结果在本地监控机上呈现。

这个需求的实现有很多种方法,我这边利用 net-snmp 的扩展命令 pass 调用 shell 脚本来实现。通过 man snmpd.conf(5) 可知,net-snmp支持自定义的脚本以获取需要的信息,那就是扩展命令exec、extend 和 pass(三者的区别详见此 FAQ)。 Read the rest of this entry »

Written by rem1x

七月 22nd, 2011 at 5:51 下午

Posted in linux

Tagged with , ,

Archlinux上使用PRO*C 开发Oracle程序之sqlca (1)

without comments

关于在archlinux上安装oracle客户端,可参考wiki:https://wiki.archlinux.org/index.php/Oracle

访问Oracle数据库的C语言编程接口,比较常见的是PRO*C和oci,前者是一种以C语言作为宿主的预编译语言,后者则是一套现成的数据库访问API。比如,俺们公司的后台的一些重要系统现在主要以Oracle系列数据库为主,开发语言基本是C,pro*c和oci在项目中都有使用。一句话,PRO*C上手容易,编码简单,但受约束;oci直接以API形式调用,效率最高,但学习成本高,一般都会做二次封装(有个C++的封装库:OTL)。

本文主要说明在使用PRO*C时,如果需要定义局部sqlca变量时,该做哪些准备工作。

如果你的程序只使用全局的sqlca变量,那么 #include <sqlca.h> 就完事儿了,文章到此可以直接 return 0 。

Read the rest of this entry »

Written by rem1x

六月 26th, 2011 at 2:11 下午

Posted in programing

Tagged with , , ,

Archlinux升级grub至grub2 [针对bios]

without comments

GRUB2是下一代的多系统引导器,grub即将退位,项目名也改成了grub-legacy。相比grub(目前的版本是0.97)而言,grub2重写了代码以实现模块化和可移植性。

有趣的Grub Logo:

将archlinux的grub升级到grub2是一件很简单的事情,你只需要通过pacman安装新的grub2软件包,转换menu.lst为grub.cfg就可以了。这篇日志的大部分资料来自Archlinux的wiki,命令操作记录来自我的笔电。

首先来搜索一下仓库里的grub2软件包:

~>; pacman -Ss grub2
extra/grub2-bios 1.99~rc2.r3238-1
The GNU GRand Unified Bootloader version 2 – Built for PC BIOS
extra/grub2-common 1.99~rc2.r3238-1
The GNU GRand Unified Bootloader version 2 – Files common for all platforms
extra/grub2-efi-i386 1.99~rc2.r3238-1
The GNU GRand Unified Bootloader version 2 – i386 UEFI version
extra/grub2-efi-x86_64 1.99~rc2.r3238-1
The GNU GRand Unified Bootloader version 2 – x86_64 UEFI version

你会发现目前仓库里有4个grub2的软件包,做个简单的介绍吧:

grub2-bios            –> 适用于PC BIOS

grub2-commin    –> 文件集合(包含了所有平台相关的文件)

grub2-efi-i386      –> 适用于32位平台的UEFI

grub2-efi-x86_64 –> 适用于64位平台的UEFI

一般情况下,我们选择安装grub2-bios。什么是UEFI呢?这货全称Unified Extensible Firmware Interface,直译叫做“统一的可扩展固件接口”,这种接口用于操作系统自动从预启动的操作环境,加载到某种操作系统上,从而使开机程序化繁为简,节省时间。UEFI将替代已存在多年的BIOS,目前市场上的主板已经开始采用UEFI 。

Read the rest of this entry »

Written by rem1x

五月 22nd, 2011 at 10:53 上午

Posted in linux

Tagged with , , , ,

在Archlinux上使用华为E1780 3G上网

without comments

出差在外,所以买了一张联通的186 3G卡来无线上网,上网设备选择了华为的E1780,因为我觉得外观很好看…

在linux上3G上网基本上是如下的两步配置流程:

1、使用usb_modeswitch将上网设备的模式转换为modem

2、使用wvdial自动生成配置文件并拨号

关于3G的配置步骤这里不再赘述,google会告诉你很多结果。

Read the rest of this entry »

Written by rem1x

一月 12th, 2011 at 10:54 下午

Posted in linux

Tagged with , , , ,

在ESXi 3.5中安装 sco openserver 5.0.7

without comments

注:本日志提到的安装方法来源于互联网,经本人实际测试后整理呈现,对原作者的共享表示感谢

想要在现在的服务器上安装sco unix 5系列有时候真的会让你无奈,主要问题在于各种硬件的不支持(有好硬件,却没有驱动支持,这是最悲催的),比如阵列卡、主板、网卡等等。

通常,我们可能会这么解决这个尴尬的问题:

  1. 将部分硬件更换为SCO支持的老硬件
  2. 找一台旧服务器或者是PC机

不过,随着虚拟化技术的快速发展,我们已经有了新的选择:用虚拟机安装sco unix 5

Read the rest of this entry »

Written by rem1x

十一月 17th, 2010 at 2:10 下午

Posted in linux

Tagged with , , ,

磁带机的磁带操作

without comments

这两天发现,对于同样大小的文件,磁带机越往后面用,写入时间就越长。

之前介绍了用tar对磁带机进行数据操作,今天把磁带机的磁带操作简单整理下。

所谓的磁带操作,就是如何进行倒带,擦除磁带,弹出磁带等,来看具体的操作命令:

倒带,将磁带卷至起始位置:

# mt -f /dev/st0 rewind

擦除,擦掉磁带上的内容:

# mt -f /dev/st0 erase

这里要注意,磁带的擦除是很慢的,而且会对磁带造成损伤,所以一般情况下我们可不会去做这吃力不讨好的事情。
如果你擦除磁带是为了从头开始使用,那可以先倒带到磁带的起始位置,然后tar cvf /dev/st0 file_name来重新写入数据。
当磁带
此外,新的磁带拆封后可以直接放入磁带机使用,不用执行擦除。
出带,将磁带卷至初始位置然后从磁带机内弹出:

# mt –f /dev/st0 offline

Written by rem1x

九月 17th, 2010 at 7:56 下午

Posted in linux

Tagged with ,

杂记:python中使用public key做RSA加密

with 7 comments

这一个星期在用python实现写一个命令行的飞信发信息小工具,为了放在服务器监控程序中用于短信报警。飞信在做用户认证时会先把一个RSA公钥传给客户端,客户端用这个RSA公钥做加密,然后把加密后的16进制串送到远端去验证。

我是个业余码农,所谓的cryptography,即密码学,那是几乎没接触过。通过wiki和google,对RSA简单了解了一下,然后找了一下如何用python来做RSA加密的方法,多数都提到了pycrypto和M2Crypto这两个模块(都是对openssl的封装)。

飞信传给客户端的公钥key由两部分组成,就是RSA公钥的exponent(俗称e)和modulus(俗称n),通过exponent和modulus来生成真正的public key。我就卡在了如何用现成的python模块来使用e和n做公钥加密。一般情况下,都是通过导入PEM结构的公钥来做RSA加密,而我只有e和n,怎么把它们转化成PEM结构呢?

后来发现M2Crypto有一个new_pub_key((e, n)) 方法可以导入e和n来生成公钥,可是它有格式的限制:

e (string) – The RSA public exponent; it is a string in OpenSSL’s MPINT format – 4-byte big-endian bit-count followed by the appropriate number of bits.
n (string) – The RSA composite of primes; it is a string in OpenSSL’s MPINT format – 4-byte big-endian bit-count followed by the appropriate number of bits.

也不知道这OpenSSL’s MPINT format 是什么标准的格式,我没捣鼓出来。
然后又试用pycrypto模块,它也有一个类似的方法:RSA.construct((n, e))。惊喜的发现它只要传入long型的参数,就能正常工作。可是,飞信登录验证时的RSA加密用到的是RSA_PKCS1_PADDING 填充模式,pycrypto没有提供模式选择(有patch可以实现,未证实)。
懒惰的我最终决定由pycrypto使用e和n生成公钥,导出为PEM格式,再把这个PEM的公钥提供给M2Crypto,是不是很蛋疼? :)

几行示例:

import Crypto.PublicKey.RSA
import M2Crypto.BIO
import M2Crypto.RSA
.........................
rsakey = Crypto.PublicKey.RSA.construct((n, e))
public_key = rsakey.publickey().exportKey()
bio = M2Crypto.BIO.MemoryBuffer(tmpkey)
rsa = M2Crypto.RSA.load_pub_key_bio(bio)
rsa.public_encrypt('要加密的东东',M2Crypto.RSA.pkcs1_padding))

我还试过用ctypes来调用openssl的函数,结果表示可行。

我知道这样的实现很ugly,在python中有没有更直接的方法使用e和n做RSA公钥加密的呢?

Written by rem1x

八月 29th, 2010 at 9:54 下午

Posted in python

Tagged with , ,

Linux命令行查字典

with 5 comments

这两天想找个CLI命令行的字典小工具,搜到了LinuxTOY的这篇:http://linuxtoy.org/archives/gdict.html

文中提到的gdict.sh是使用curl从google dictionary中查询单词解释,然后sed截取出中文解释。但现在google dictionary已改用袖珍牛津英语词典(见这里),只能查英语-英语了,并且查询结果由于html2text的原因还带有一些特殊字符,影响使用。

看到文章中各位Linuxer的回贴,我简单改写了一个查字典shell,查询的信息来自百度词典。由于我对sed不熟,所以写的比较笨拙,好在还能用用。代码如下:

#!/bin/bash
ARGS=1
E_BADARGS=65

if [ $# -ne "$ARGS" ]
then
    echo "Usage:`basename $0` word"
    exit $E_BADARGS
fi

w3m -no-cookie -dump 'http://dict.baidu.com/s?wd='$1'&f=3'
| sed '/以下结果来自互联网网络释义/,$d'| sed '1,15d' | tac
| sed '1,2d' | tac |sed -r '/^[0-9]+./N;s/n//' > /tmp/rxdict.tmp

echo
echo -e "--------------------33[1;40;33m $1 33[0m--------------------"
cat /tmp/rxdict.tmp

exit 0

效果预览:

Written by rem1x

八月 7th, 2010 at 11:24 上午

Posted in linux

Tagged with , , ,

Linux下使用tar操作磁带机的基本方法

without comments

这是资料整理帖,所有内容来自互联网不同站点的没良心转载(出处无法确定…),对原作者表示感谢。

我现在可以玩弄一款 IBM 8767-HNX的外置磁带机,在RHEL 4中被认成/dev/st0 (还有一个/dev/nst0),来看一下dmesg输出

# dmesg

…………

Attached scsi tape st0 at scsi1, channel 0, id 0, lun 0

st0: try direct i/o: yes (alignment 512 B), max page reachable by HBA 4503599627370495

Attached scsi generic sg0 at scsi0, channel 0, id 1, lun 0,  type 0

Attached scsi generic sg1 at scsi0, channel 0, id 4, lun 0,  type 13

Attached scsi generic sg2 at scsi1, channel 0, id 0, lun 0,  type 1

Attached scsi generic sg3 at scsi4, channel 0, id 0, lun 0,  type 0

Attached scsi generic sg4 at scsi4, channel 0, id 0, lun 1,  type 0

Attached scsi generic sg5 at scsi4, channel 0, id 0, lun 31,  type 0

st0: Block limits 1 – 16777215 bytes.

…………

Read the rest of this entry »

Written by rem1x

八月 6th, 2010 at 3:35 下午

Posted in linux

Tagged with , ,

Shell中快速清空文件内容的几种方法

without comments

闲来蛋疼,简单罗列如下5种快速清空文件内容的方法:

$ : > filename           #其中的 : 是一个占位符, 不产生任何输出.

$ > filename

$ echo “” > filename

$ echo /dev/null > filename

$ echo > filename

怎么习惯就怎么用,以上命令均在bash 3.2版本上通过测试。

如果你想深入学习shell脚本的知识,可以猛点击这里: http://tldp.org/LDP/abs/html/

ABS的中文版在这里:http://www.tsnc.edu.cn/default/tsnc_wgrj/doc/abs-3.9.1_cn/html/index.html

Written by rem1x

七月 20th, 2010 at 4:08 下午

Posted in linux

Tagged with ,