So Tired !_! 逆水行舟, 不进则退!

31May/10

debian 桌面安装小记

Posted by Nick Xu

debian 的确是一个非常出色的linux 系统.不管是服务器方面,还是桌面.都很出色.下面是我收集的一些debian桌面安装的一些记录共享一下…

ssh:默认没有安装ssh 所以需要单独安装
# apt-get install openssh-server 安装ssh服务
#/usr/sbin/sshd 开启ssh服务
# netstat -antu 查看是否正常开启 22 端口

ssh安装好后 下面继续安装桌面环境.
1.首先需要一个源
安装源/etc/apt/sources.list.我的sources.list文件如下:
deb http://security.debian.org/ lenny/updates main
deb-src http://security.debian.org/ lenny/updates main
deb http://volatile.debian.org/debian-volatile lenny/volatile main
deb-src http://volatile.debian.org/debian-volatile lenny/volatile main
deb http://http.us.debian.org/debian/ lenny main
deb http://ftp.tw.debian.org/debian/ lenny main
deb http://debian.cn99.com/debian/ lenny main
deb http://mirrors.163.com/debian/ lenny main
这个是我使用的源
2.更新源
apt-get update
3.安装VIM编辑器
apt-get install vim
4.安装x-window
apt-get install x-window-system
5.安装窗口管理器gnome
apt-get install gnome-core
6. 安装登录管理器
apt-get install gdm
7. 声卡安装alsa
apt-get install alsa-base alsa-utils(我在虚拟机下运行此命令 有效 但是虚拟机显示没有安装声卡)
alsaconf 一路回车
8.浏览器 iceweasel(火狐核心 很不错)
apt-get install iceweasel-l10n-zh-cn
9. 输入法scim
apt-get install scim-pinyin scim-tables-zh 拼音和五笔
/etc/X11/Xsession.d里创建新文件夹95xinput写放export XMODIFIERS=@im=SCIM
exprot GTK_IM_module=scim
10.安装FileZilla
解压:tar jxvf FileZilla_3.0.8.1_i586-linux-gnu.tar.bz2.
将解压后的文件夹放在你的home中。
直接cd 到解压后的FileZilla3/bin文件夹
./filezilla即可运行。
11.Flash 10安装
加入源
deb http://www.backports.org/debian lenny-backports main contrib non-free
更新源
apt-get update
apt-get install flashplugin-nonfree
安装
/usr/sbin/update-flashplugin-nonfree –install
这里是Flash 10 debian 官方的详细安装步骤
http://wiki.debian.org/FlashPlayer

31May/10

64MB VPS 上优化 Debian 5

Posted by Nick Xu

64MB 的 VPS 能不能跑一个小规模访问量的 WordPress 博客,这里的小规模是指每日500 PV 以下。然后分别试着跑了一下 Debian 和 CentOS,默认安装后跑Debian没有问题,但是运行 CentOS 时明显感到系统很慢。CentOS/RHEL 官方推荐的最小配置(不带图形界面)虽然是 64MB 内存,但是考虑到同时要跑 MySQL,PHP,Wordpress 等程序 64MB CentOS就有点吃力了。还有一个考虑就是运行一次 yum 需要比 apt-get 多得多的内存资源。所以按照我的 VPS 配置,64MB内存,128MB 交换,2.5GB 的硬盘,就只能选 Debian 了。

Debian 是一个古老,严谨,自由而且流行的 Linux 发行版,有 n 多的软件包可以用,有很好的稳定性和安全性,是各大 Linux hosting 服务商的主流系统之一,几乎所有 Linux VPS 都支持 Debian 版本。安装 Debian 的系统最低内存要求是 64MB,但是官方文档也说了真正的最低内存配置要比 64MB 低一些,根据不同的硬件体系安装在只有 48MB 的 i386 上也是可能的。

查看 VPS 配置
1、查看以下 VPS 的硬件信息,做到心中有数

# free# cat /proc/cpuinfo

安装和升级系统
2、登录 VPS 安装 Debian 5

3、安装完毕后马上升级整个系统

# apt-get update && apt-get upgrade
寻找小资源的替代软件
4、用 pdksh 替代 bash

当你在使用 64MB VPS 的时候,为了多压榨一些可用的内存通常不得不去用一些轻量的程序替代那些笨重的程序,比如用 niginx/lighttpd 替代 apache,把省下来的内存留给那些必须的程序,像省钱一样不是吗?,把一些不必要的开支省下来应付那些必不可少的开支,用在刀刃上。

Bash 是现在大多数 Linux 发行版本的默认 shell,是大多数 Linux 命令行用户的默认界面。从本人十多年前接触 Linux 以来,换过很多发行版本,换过不同的邮件服务器,换过不同的 web/ftp 服务器。不过从来没有换过 shell,期间试过一些不同的 shell,如csh,korn shell,不过总是感觉不满意。随着 bash 功能的增强,多年下来 bash 也变得越来越臃肿,消耗越来越多的 CPU 资源,占据越来越多的内存。由于我的电脑也在与时俱进的更新换代,硬件越来越强大,所以 bash 用到的那一点点资源都不是问题,甚至都感觉不到。当有一天我需要在一个 64MB 的 VPS 上运行 WordPress的时候,才发现 bash 的”身材”一点也不苗条。一个只有 64MB 的机器如果有多人同时登录的话,bash 占据的内存就显得比较可观了(那可是只有 64MB 的 VPS)。所以需要用一个轻量级的 shell 来替换 bash。

在网上搜了一圈,最终落在 pdksh 上,pdksh 是从 korn shell 的分出来的一个版本,这里有更多关于 pdksh 的介绍。运行一个 bash 需要 4MB 左右的内存,而运行一个 pdksh 只要 1MB 左右。如果你的习惯和我一样一登录上来就启6个 ssh 的话,那么替换掉bash绝对必要,那可是约 18MB 左右的内存,对于只有 64MB 的主机来说是一个大买卖。让我来解释一下买卖 : ),对于一般用户来说现在 VPS 提供的硬盘够用了,带宽够了,CPU 也够了,唯独 VPS 配置里面最紧缺的就是内存。现在提供 64MB VPS 主机的 hosting服务商一般都把价格定在8美元每月到20美元每月之间,那 18MB 可就是省了2美元到6美元每个月。pdksh 看上去像是个很好的 bash 替代品,简单,自动 tab 补齐, history 记录,bourne shell 的语法(如果你不喜欢 csh/tcsh 的话),这已经足够了,正是我需要的。如果你对 shell 感兴趣的话,这里有更多关于不同shell的比较。

# ps -C bash v PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND 1254 ? Ss 0:00 26 663 2272 36 1.2 /bin/bash –# apt-get install pdksh# chsh -s /bin/pdksh重新用 ssh 登录 VPS# ps -C pdksh v PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND27700 pts/0 Rs 0:00 17 174 1765 344 0.5 -pdksh
值得注意的是,如果你用的是 VPSLink 的 VPS 的话会发现即使替换掉了 bash 系统还是会自动启动一个bash进程出来,原来 VPSLink 在 /etc/inittab 的最后加了一行,只要把最后一行的 /bin/bash 改成 /bin/sh 或者 /bin/pdksh,运行 init q 重新载入 init(1),然后 kill 掉那个 bash 进程就可以了。

shell 是个很个人的事情,一旦你习惯了一种 shell 就不大容易马上替换掉它,就像虽然我知道 nano 比 vi 更小巧更简单,需要的内存更少,但是我也不会用 nano 来替换 vi 的,我不能没有 vi。

5、用 Dropbear 替代 OpenSSH

OpenSSH 是个必不可少的服务程序,不过如果同时很多次登录 ssh 的也会吃掉很多内存,用一个轻量级的程序替代的话会省下更多的内存。Dropbear 是一个相对较小的 SSH 2 服务器,这里有更多关于 Dropbear介绍 的信息。如果不需要 OpenSSH 其他强大的功能的话 Dropbear 是一个不错的替代品,很多嵌入式产品,如:路由器,交换机等都把 Dropbear 作为默认的 SSH 服务。Dropbear 体积小还有一个原因是:如果你用非 root 用户登录,Dropbear 只需要创建1个进程,而 OpenSSH 则需要创建2个进程,更多的进程意味着更多的地址空间,更多的内存资源。虽然从功能上说 Dropbear 目前还不如 OpenSSH 强大,不过如果只想拿它来做远程登录 VPS,打打几个命令来管理一下 VPS 还是可以的。重要的是相对于 OpenSSH 的庞大体积来说,Dropbear 省了大约30%到50%的内存。

# touch /etc/ssh/sshd_not_to_be_run# apt-get install dropbear# vi /etc/default/dropbear# /etc/init.d/dropbear start
6、用 syslog-ng 替代 rsyslog

Rsyslog 是 Debian 5 的默认日志工具,是一个专注于安全和稳定的增强型多线程日志工具,有着丰富的功能,强大的可定制能力,可以把日志写入数据库(支持 MySQL,PostgresSQL,Oracle 等),E-mail 警报,可定制的日志输出等等,不过对于一个运行在 64MB VPS 的博客/网站来说,Rsyslog 未免显得过于强大,功能强大就意味着占用更多的 CPU/内存 资源。但是也不能没有一个日志工具,没有系统日志记录功能的系统是非常危险的,尤其是受到外部或者内部的威胁的时候,监控排错都需要一个好的日志系统的支 持。不用日志系统就像用 gcc 不用 gdb 一样,调试程序不用 debug 一样。

Syslog-ng 是一个不错的 Rsyslog 替代品,被 SUSE,Fedora,旧版本 Debian, Gentoo 等发行版当作默认日志工具。不过 apt-get install syslog-ng 后发现 syslog-ng需要 libevtlog0, libglib2.0-0,libglib2.0-data 软件包,并且需要约 5349KB 的额外硬盘空间,这对一个只有2.5GB硬盘的 VPS 来说”太”大了,5MB 空间可以写500篇左右的博客啊。

看了这篇 Limitations of syslogd on Unix 和这篇 Logging with syslog-ng 以后觉得 syslog-ng 的增强功能对于我这个小小 VPS 来说不必要,用简单的 syslogd 就可以满足我的要求,于是决定用 syslogd 来替代 Rsyslog。注意安装 syslogd 的软件包名字是 sysklogd。

# ps -C rsyslogd v PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND 20441 ? Sl 0:00 0 27 32836 1220 1.8 /usr/sbin/rsyslogd -c3# apt-get install sysklogd && dpkg –purge rsyslog# ps -C syslogd v PID TTY STAT TIME MAJFL TRS DRS RSS %MEM COMMAND27769 ? Ss 0:00 11 25 1806 324 0.4 /sbin/syslogd

Tagged as: , , No Comments
31May/10

debian 安装 wordpress

Posted by Nick Xu

1.配置好PHP的基本环境,这个不说了

2.创建WORDPRESS的数据库和账号

3.下载最新版本WORDPRESS:

wget http://wordpress.org/latest.tar.gz

解压:

tar -xvf latest.tar.gz

将解压出来的wordpress目录复制到/var/www/目录下

浏览器打开 http://ip/wordpress

根据提示安装WORDPRESS即可完成。

31May/10

解决 Debian apt-get install 自动完成

Posted by Nick Xu

Bash completion is a useful tool for completion of file paths, commands etc. By default it is enabled on Ubuntu but not on Debian. With two simple steps it can also be enabled on Debian.

1. Install bash-completion

First of all we need the install the according package:

apt-get install bash-completion

2. Add it to the bash profile

Either edit the ~/.bash_profile file to enable it only for a given user or edit /etc/profile to add it system-wide. Add the following code:

if [ -f /etc/bash_completion ]; then
 . /etc/bash_completion
fi

3. Try it

In order for it to work you have to log out and relogin and then you can make use of bash completion the usual way. E.g. issue:

apt-g

and then press the TAB key once and the command will be completed to apt-get. Or issue this:

apt

and then press TAB key twice. You can also try with

apt-get install apa

and then press TAB key once to complete as far as possible and a second time to list all options.

26May/10

Image.GetPropertyItem的propid对应常数,参考C++的

Posted by Nick Xu

IGPImage.GetPropertyItem();    { 获取属性项 }
IGPImage.SetPropertyItem();    { 设置属性项 }
IGPImage.RemovePropertyItem(); { 删除属性项 }

IGPImage.PropertyIdList; { 获取图像属性 ID 数组 }
IGPImage.PropertyItems;  { 获取图像属性集合 }

IGPImage.PropertyItems 指向一个 IGPPropertyItems 类型的数组;
IGPPropertyItem 是 IGPPropertyItems 属性数组中的一个属性(或叫属性项).

每个属性项都包含:


IGPPropertyItem.Id;        { 属性 ID, 也就是属性类别, 譬如是标题还是版权说明等 }
IGPPropertyItem.ValueType; { 属性的数据类型 }
IGPPropertyItem.Length;    { 属性数据长度 }
IGPPropertyItem.Value;     { 属性数据指针 }

IGPImage.PropertyIdList 只是获取属性 ID 的数组.


IGPPropertyItem.ValueType 常数:


PropertyTagTypeByte        = 1; { 字节数组 }
PropertyTagTypeASCII       = 2; { PAnsiChar }
PropertyTagTypeShort       = 3; { Word }
PropertyTagTypeLong        = 4; { Cardinal }
PropertyTagTypeRational    = 5; { Cardinal/Cardinal; 第一个数是分子, 第二个数是分母 }
PropertyTagTypeUndefined   = 7; { 可包含任何数据类型的字节数组 }
PropertyTagTypeSLONG       = 9; { Integer }
PropertyTagTypeSRational  = 10; { Integer/Integer; 第一个数是分子, 第二个数是分母 }

IGPPropertyItem.Id 常数:


PropertyTagGpsVer                         = $0000
PropertyTagGpsLatitudeRef                 = $0001
PropertyTagGpsLatitude                    = $0002
PropertyTagGpsLongitudeRef                = $0003
PropertyTagGpsLongitude                   = $0004
PropertyTagGpsAltitudeRef                 = $0005
PropertyTagGpsAltitude                    = $0006
PropertyTagGpsGpsTime                     = $0007
PropertyTagGpsGpsSatellites               = $0008
PropertyTagGpsGpsStatus                   = $0009
PropertyTagGpsGpsMeasureMode              = $000A
PropertyTagGpsGpsDop                      = $000B
PropertyTagGpsSpeedRef                    = $000C
PropertyTagGpsSpeed                       = $000D
PropertyTagGpsTrackRef                    = $000E
PropertyTagGpsTrack                       = $000F
PropertyTagGpsImgDirRef                   = $0010
PropertyTagGpsImgDir                      = $0011
PropertyTagGpsMapDatum                    = $0012
PropertyTagGpsDestLatRef                  = $0013
PropertyTagGpsDestLat                     = $0014
PropertyTagGpsDestLongRef                 = $0015
PropertyTagGpsDestLong                    = $0016
PropertyTagGpsDestBearRef                 = $0017
PropertyTagGpsDestBear                    = $0018
PropertyTagGpsDestDistRef                 = $0019
PropertyTagGpsDestDist                    = $001A
PropertyTagNewSubfileType                 = $00FE
PropertyTagSubfileType                    = $00FF
PropertyTagImageWidth                     = $0100
PropertyTagImageHeight                    = $0101
PropertyTagBitsPerSample                  = $0102
PropertyTagCompression                    = $0103
PropertyTagPhotometricInterp              = $0106
PropertyTagThreshHolding                  = $0107
PropertyTagCellWidth                      = $0108
PropertyTagCellHeight                     = $0109
PropertyTagFillOrder                      = $010A
PropertyTagDocumentName                   = $010D
PropertyTagImageDescription               = $010E
PropertyTagEquipMake                      = $010F
PropertyTagEquipModel                     = $0110
PropertyTagStripOffsets                   = $0111
PropertyTagOrientation                    = $0112
PropertyTagSamplesPerPixel                = $0115
PropertyTagRowsPerStrip                   = $0116
PropertyTagStripBytesCount                = $0117
PropertyTagMinSampleValue                 = $0118
PropertyTagMaxSampleValue                 = $0119
PropertyTagXResolution                    = $011A
PropertyTagYResolution                    = $011B
PropertyTagPlanarConfig                   = $011C
PropertyTagPageName                       = $011D
PropertyTagXPosition                      = $011E
PropertyTagYPosition                      = $011F
PropertyTagFreeOffset                     = $0120
PropertyTagFreeByteCounts                 = $0121
PropertyTagGrayResponseUnit               = $0122
PropertyTagGrayResponseCurve              = $0123
PropertyTagT4Option                       = $0124
PropertyTagT6Option                       = $0125
PropertyTagResolutionUnit                 = $0128
PropertyTagPageNumber                     = $0129
PropertyTagTransferFunction               = $012D
PropertyTagSoftwareUsed                   = $0131
PropertyTagDateTime                       = $0132
PropertyTagArtist                         = $013B
PropertyTagHostComputer                   = $013C
PropertyTagPredictor                      = $013D
PropertyTagWhitePoint                     = $013E
PropertyTagPrimaryChromaticities          = $013F
PropertyTagColorMap                       = $0140
PropertyTagHalftoneHints                  = $0141
PropertyTagTileWidth                      = $0142
PropertyTagTileLength                     = $0143
PropertyTagTileOffset                     = $0144
PropertyTagTileByteCounts                 = $0145
PropertyTagInkSet                         = $014C
PropertyTagInkNames                       = $014D
PropertyTagNumberOfInks                   = $014E
PropertyTagDotRange                       = $0150
PropertyTagTargetPrinter                  = $0151
PropertyTagExtraSamples                   = $0152
PropertyTagSampleFormat                   = $0153
PropertyTagSMinSampleValue                = $0154
PropertyTagSMaxSampleValue                = $0155
PropertyTagTransferRange                  = $0156
PropertyTagJPEGProc                       = $0200
PropertyTagJPEGInterFormat                = $0201
PropertyTagJPEGInterLength                = $0202
PropertyTagJPEGRestartInterval            = $0203
PropertyTagJPEGLosslessPredictors         = $0205
PropertyTagJPEGPointTransforms            = $0206
PropertyTagJPEGQTables                    = $0207
PropertyTagJPEGDCTables                   = $0208
PropertyTagJPEGACTables                   = $0209
PropertyTagYCbCrCoefficients              = $0211
PropertyTagYCbCrSubsampling               = $0212
PropertyTagYCbCrPositioning               = $0213
PropertyTagREFBlackWhite                  = $0214
PropertyTagGamma                          = $0301
PropertyTagICCProfileDescriptor           = $0302
PropertyTagSRGBRenderingIntent            = $0303
PropertyTagImageTitle                     = $0320
PropertyTagResolutionXUnit                = $5001
PropertyTagResolutionYUnit                = $5002
PropertyTagResolutionXLengthUnit          = $5003
PropertyTagResolutionYLengthUnit          = $5004
PropertyTagPrintFlags                     = $5005
PropertyTagPrintFlagsVersion              = $5006
PropertyTagPrintFlagsCrop                 = $5007
PropertyTagPrintFlagsBleedWidth           = $5008
PropertyTagPrintFlagsBleedWidthScale      = $5009
PropertyTagHalftoneLPI                    = $500A
PropertyTagHalftoneLPIUnit                = $500B
PropertyTagHalftoneDegree                 = $500C
PropertyTagHalftoneShape                  = $500D
PropertyTagHalftoneMisc                   = $500E
PropertyTagHalftoneScreen                 = $500F
PropertyTagJPEGQuality                    = $5010
PropertyTagGridSize                       = $5011
PropertyTagThumbnailFormat                = $5012
PropertyTagThumbnailWidth                 = $5013
PropertyTagThumbnailHeight                = $5014
PropertyTagThumbnailColorDepth            = $5015
PropertyTagThumbnailPlanes                = $5016
PropertyTagThumbnailRawBytes              = $5017
PropertyTagThumbnailSize                  = $5018
PropertyTagThumbnailCompressedSize        = $5019
PropertyTagColorTransferFunction          = $501A
PropertyTagThumbnailData                  = $501B
PropertyTagThumbnailImageWidth            = $5020
PropertyTagThumbnailImageHeight           = $5021
PropertyTagThumbnailBitsPerSample         = $5022
PropertyTagThumbnailCompression           = $5023
PropertyTagThumbnailPhotometricInterp     = $5024
PropertyTagThumbnailImageDescription      = $5025
PropertyTagThumbnailEquipMake             = $5026
PropertyTagThumbnailEquipModel            = $5027
PropertyTagThumbnailStripOffsets          = $5028
PropertyTagThumbnailOrientation           = $5029
PropertyTagThumbnailSamplesPerPixel       = $502A
PropertyTagThumbnailRowsPerStrip          = $502B
PropertyTagThumbnailStripBytesCount       = $502C
PropertyTagThumbnailResolutionX           = $502D
PropertyTagThumbnailResolutionY           = $502E
PropertyTagThumbnailPlanarConfig          = $502F
PropertyTagThumbnailResolutionUnit        = $5030
PropertyTagThumbnailTransferFunction      = $5031
PropertyTagThumbnailSoftwareUsed          = $5032
PropertyTagThumbnailDateTime              = $5033
PropertyTagThumbnailArtist                = $5034
PropertyTagThumbnailWhitePoint            = $5035
PropertyTagThumbnailPrimaryChromaticities = $5036
PropertyTagThumbnailYCbCrCoefficients     = $5037
PropertyTagThumbnailYCbCrSubsampling      = $5038
PropertyTagThumbnailYCbCrPositioning      = $5039
PropertyTagThumbnailRefBlackWhite         = $503A
PropertyTagThumbnailCopyRight             = $503B
PropertyTagLuminanceTable                 = $5090
PropertyTagChrominanceTable               = $5091
PropertyTagFrameDelay                     = $5100
PropertyTagLoopCount                      = $5101
PropertyTagGlobalPalette                  = $5102
PropertyTagIndexBackground                = $5103
PropertyTagIndexTransparent               = $5104
PropertyTagPixelUnit                      = $5110
PropertyTagPixelPerUnitX                  = $5111
PropertyTagPixelPerUnitY                  = $5112
PropertyTagPaletteHistogram               = $5113
PropertyTagCopyright                      = $8298
PropertyTagExifExposureTime               = $829A
PropertyTagExifFNumber                    = $829D
PropertyTagExifIFD                        = $8769
PropertyTagICCProfile                     = $8773
PropertyTagExifExposureProg               = $8822
PropertyTagExifSpectralSense              = $8824
PropertyTagGpsIFD                         = $8825
PropertyTagExifISOSpeed                   = $8827
PropertyTagExifOECF                       = $8828
PropertyTagExifVer                        = $9000
PropertyTagExifDTOrig                     = $9003
PropertyTagExifDTDigitized                = $9004
PropertyTagExifCompConfig                 = $9101
PropertyTagExifCompBPP                    = $9102
PropertyTagExifShutterSpeed               = $9201
PropertyTagExifAperture                   = $9202
PropertyTagExifBrightness                 = $9203
PropertyTagExifExposureBias               = $9204
PropertyTagExifMaxAperture                = $9205
PropertyTagExifSubjectDist                = $9206
PropertyTagExifMeteringMode               = $9207
PropertyTagExifLightSource                = $9208
PropertyTagExifFlash                      = $9209
PropertyTagExifFocalLength                = $920A
PropertyTagExifMakerNote                  = $927C
PropertyTagExifUserComment                = $9286
PropertyTagExifDTSubsec                   = $9290
PropertyTagExifDTOrigSS                   = $9291
PropertyTagExifDTDigSS                    = $9292
PropertyTagExifFPXVer                     = $A000
PropertyTagExifColorSpace                 = $A001
PropertyTagExifPixXDim                    = $A002
PropertyTagExifPixYDim                    = $A003
PropertyTagExifRelatedWav                 = $A004
PropertyTagExifInterop                    = $A005
PropertyTagExifFlashEnergy                = $A20B
PropertyTagExifSpatialFR                  = $A20C
PropertyTagExifFocalXRes                  = $A20E
PropertyTagExifFocalYRes                  = $A20F
PropertyTagExifFocalResUnit               = $A210
PropertyTagExifSubjectLoc                 = $A214
PropertyTagExifExposureIndex              = $A215
PropertyTagExifSensingMethod              = $A217
PropertyTagExifFileSource                 = $A300
PropertyTagExifSceneType                  = $A301
PropertyTagExifCfaPattern                 = $A302

26May/10

在VPS中安装配置OpenVPN

Posted by Nick Xu

如果VPS的带宽和内存充足,通过它使用VPN代理上网是非常方便的。本文以Ubuntu系统为例,介绍OpenVPN的安装与配置。 OpenVPN身份验证使用的是证书文件,而非账号密码形式。

安装配置OpenVPN之前,请确保VPS已支持tun/tap,且iptables已支持NAT。ramhost的VPS默认都是支持的。

如果还没有安装iptables请先安装iptables:
apt-get install iptables

安装OpenVPN:

apt-get install openvpn

拷贝文件夹,以方便后续配置:

cp -R /usr/share/doc/openvpn/examples/easy-rsa /etc/openvpn

生成服务端和客户端的密钥及证书文件:
cd /etc/openvpn/easy-rsa/2.0
source ./vars
./clean-all
./build-ca
./build-key-server server
./build-key clientsteven
./build-dh

其中遇到需要输入信息的步骤全部按回车过去,直到最后一个步骤提示是否生成证书,按Y即可。

配置iptables规则,以转发来自VPN的请求:
chmod 755 /etc/rc.local
vim /etc/rc.local

将rc.local文件修改为以下内容:
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# add iptables rule for openvpn
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j SNAT --to 202.248.185.66

/etc/init.d/openvpn start

exit 0

其中,202.248.185.66是VPS的IP.

注意:上面那行尾SNAT --to 202.248.185.66,是两个“-”号,WP把两个变成一个了,不知道为什么

创建OpenVPN的配置文件:
vim /etc/openvpn/openvpn.conf

openvpn.conf文件内容如下:
dev tun
proto tcp
port 1194

ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem

user nobody
group nogroup
server 10.8.0.0 255.255.255.0

persist-key
persist-tun

#status openvpn-status.log
#verb 3
client-to-client

push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"

comp-lzo

启动OpenVPN:
/etc/init.d/openvpn start
/etc/rc.local

至此,服务端的配置结束,接下来是Windows客户端的配置。

下载以下几个文件到客户端机器:
/etc/openvpn/easy-rsa/2.0/keys/ca.crt
/etc/openvpn/easy-rsa/2.0/keys/clientsteven.crt
/etc/openvpn/easy-rsa/2.0/keys/clientsteven.key

下载安装OpenVPN,下载链接:
http://openvpn.net/release/openvpn-2.1.0-install.exe

将下载的ca.crt、clientsteven.crt、clientsteven.key三个文件拷贝到OpenVPN安装目录的config 文件夹下,并新建clientsteven.ovpn文件,内容如下:
client
dev tun
proto tcp

# The hostname/IP and port of the server.
# CHANGE THIS TO YOUR VPS IP ADDRESS
remote 202.248.185.66 1194

resolv-retry infinite
nobind

persist-key
persist-tun

ca ca.crt
cert clientsteven.crt
key clientsteven.key

comp-lzo
verb 3

其中,202.248.185.66是VPS的IP.

若之后还需要添加其他的VPN账号,则需要以下命令:
cd /etc/openvpn/easy-rsa/2.0
./build-key clientsusan

而后下载相应的文件到客户端,并按照之前介绍的步骤配置客户端。

Tagged as: , , No Comments
25May/10

看看我的胆式耳放处女作品!!

Posted by Nick Xu

一鼓作气花了一天两个通宵,终于完成了第一个胆式耳放,
现在放出制作花絮

手机拍的相片,效果一般般

耳放零件


还是零件

顺便看一下我的微软鼠标:)


元件列表,部分已经焊在板上了

两个超级无知大电容

主角“胆”出来了


还是胆

开始接线。。。

电及的电源线好像比这个耳放的线还要多。。。


一堆线,乱七八造

准备装箱了。。。

还在装。。。

继续装。。。

手机拍的东西还是不清楚。

开机,在加热,好像要爆掉的样子。


最终成品

是用12V供电
单量比增大了4~5倍,正在想办法调小
我的耳机是达音科DH-C60,接上耳放后,高频明显清晰,低频变得非常有弹性
总体来说音质明显提升,不过还没煲多久,不知道煲几天后会不会还有提高
期待ING...

做这个感觉最难的就是外壳钻洞
找了家五金店借电钻用,居然要收1元1个洞,真黑
后来被我砍到了0.5元1个洞,呵呵
电子管的洞就花了我10元,店主要我买他的钻头,否则不给我钻
总制作包钻洞外壳电源等花了我180RMB左右,感觉有点被砍了好多刀

Tagged as: , No Comments
25May/10

Crystal Report 2008下载地址及序列号

Posted by Nick Xu

Crystal Report 2008下载地址及序列号:
下载地址:http://www.businessobjects.com/campaigns/forms/downloads/crystal/2008/default.asp
序列号:
密钥: CFKOA-YOTTM2M-OOUFAFF-N43M
注册号: 6707437608

25May/10

NHibernate使用非主键查询实体/对象的方法

Posted by Nick Xu

Criterion emailEq = Restrictions.Eq("email","abc@email.com");
Criteria crit = session.createCriteria(typeOf(User));
crit.add(emailEq);
User user = (User)Crit.uniqueResult();

是不是很简单?

上面是JAVA版本的写法

NHibernate.ICriteria crit = DALBase.SessionFactory.OpenedSession.CreateCriteria(typeof(InvoiceDomain.tbl_Member));
crit.Add(Expression.Eq("UserName", txtUserName.Text))
.Add(Expression.Eq("UserPass", txtPassword.Text));
InvoiceDomain.tbl_Member entMember = crit.UniqueResult() as InvoiceDomain.tbl_Member;

这是.NET的写法.不知道这里会不会有注入的可能呢?

Filed under: NHIBERNATE Comments Off
25May/10

将Subversion(svn) 安装成为windows service服务

Posted by Nick Xu

以前的svnserve要想成为windows服务,必须依赖于svnservice或其他工具。从Subversion1.4开 始,Subversion本身就集成Windows服务的工具。

1,安装svnservice在Windows NT中(包括Windows XP, Windows 2000, Windows 2003 Server)本身包含了一个安装服务的工具,叫做"Service Control",也就是sc.exe。
例如我的Subversion安装在"D:Subversion",版本库在"D:svnroot",而我希望对应的Subversion服务名为 svnservice,安装这个svn服务的命令就可以这样写:
sc create svnservice
binpath= "D:Subversionbinsvnserve.exe --service -r D:svnroot"
displayname= "SVNService"
depend= Tcpip

请注意,因为便于察看,上面的命令分为多行,但在实际执行时应该在一行里。另外,在以前启动svnserve时会使用"-d"选项,也就是守护进程模式, 在这里不能使用,会导致服务无法启动。同样,"-i"和"-t"选项也不能使用。
在命令行窗口执行完这个命令之后,服务还没有启动,你可以继续运行"net start svnservice"启动这个服务,然后使用"net stop svnservice"停止服务。
另 外还有两点需要小心处理。首先,如果路径中包括空格,一定要用“”处理“"”号,例如上面的例子中如果svnserve.exe在“c: program filessubversion”中,则命令应该写为“binpath= ""c:program filessubversionbinsvnserve.exe"”(“”中的内容),整个命令如下,红色部分是改变部分:
sc create svnservice
binpath= ""D:program filesSubversionbinsvnserve.exe" --service -r D:svnroot"
displayname= "SVNService"
depend= Tcpip

其次,sc对选项的格式还有要求,例如“depend= Tcpip”不能写为“depend = Tcpip”或“depend=Tcpip”,也就是“=”前不能有空各,而后面必须有空格。

2,删除服务如果服务安装的有问题,你可能需要删除服务。要删除前面添加的服务,只需要运行"sc delete svnservice","svnservice"就是我们创建服务时使用的名字。

3,配置服务是自动启动默认情况下安装的服务不会随Windows的启动而启动,为了使svn服务能够随Windows启动而启动,需要修改一下"sc create"命令(首先要删除),增加"start= auto"选项:
sc create svnservice
binpath= "D:Subversionbinsvnserve.exe --service -r D:svnroot"
displayname= "SVNService"
depend= Tcpip
start= auto

当然你也可以使用图形化的工具修改服务的属性,你可以在“开始->运行...”中执行"services.msc",然后在界面中修改。

site
site