Archive for 三月, 2010

【转】Howto: Linux Add User To Group


30 3月
From: http://www.cyberciti.biz/faq/howto-linux-add-user-to-group/ Q. How can I add a user to a group under Linux operating system? A. You can use useradd or usermod commands to add a user to a group. useradd command creates a new user or update default new user information. usermod command modifies a user account i.e. it is useful to add user to existing group. There are two types of group. First is primary user group and other is secondary group. All user account related information is stored in /etc/passwd, /etc/shadow and /etc/group files to store user information.

useradd example - Add a new user to secondary group

Use useradd command to add new users to existing group (or create a new group and then add user). If group does not exist, create it. Syntax: useradd -G {group-name} username Create a new user called vivek and add it to group called developers. First login as a root user (make sure group developers exists), enter: # grep developers /etc/group Output:
developers:x:1124:
If you do not see any output then you need to add group developers using groupadd command: # groupadd developers Next, add a user called vivek to group developers: # useradd -G developers vivek Setup password for user vivek: # passwd vivek Ensure that user added properly to group developers: # id vivekOutput:
uid=1122(vivek) gid=1125(vivek) groups=1125(vivek),1124(developers)
Please note that capital G (-G) option add user to a list of supplementary groups. Each group is separated from the next by a comma, with no intervening whitespace. For example, add user jerry to groups admins, ftp, www, and developers, enter: # useradd -G admins,ftp,www,developers jerry

useradd example - Add a new user to primary group

To add a user tony to group developers use following command: # useradd -g developers tony # id tony uid=1123(tony) gid=1124(developers) groups=1124(developers) Please note that small -g option add user to initial login group (primary group). The group name must exist. A group number must refer to an already existing group.

usermod example - Add a existing user to existing group

Add existing user tony to ftp supplementary/secondary group with usermod command using -a option ~ i.e. add the user to the supplemental group(s). Use only with -G option : # usermod -a -G ftp tonyChange existing user tony primary group to www: # usermod -g www tony

Linux网络配置,SVN安装配置


30 3月

——菜鸟 Linux 服务器搭建 随笔 连载之四

在公司。上午事情安排完后,继续搞偶纠结的服务器。 公司是另外的网络环境了,虽然把本本带了过来,不过原来的vmware bridge似乎不灵光了。 于是回头纠结上次没完全搞定的网络配置问题。 今天似乎运气不错,搜到了一篇文章(防止他消失,转到自己这里了), 按照里面写的把/etc/sysconfig/network-scripts/ifcfg-eth0改成了static, nameserver也改成了公司的那个dns地址, 之后/etc/init.d/network restart了一下,一次成功~ Ok,继续试图在win下面update昨天svnadmin create的那个新库, 未果, 发现忘记开svnserve。。。汗。。。 svnserve -d -r /var/svnroot起来之后, update, 报错。。。 “Network connection closed unexpectedly” Google。。。 查到有人说必须装BerkeleyDb才可以解决,可是记忆中以前装的时候都没要这个东东嘛,于是想到昨天编译的时候是不是没有指定一定不用BDB,继续查了下资料,发现似乎需要configure的时候要加--without-berkeley-db,吐血。。。 好吧,重头再来, ./configure --with-apr=/usr/local/zend/apache2/bin --with-apr-util=/usr/local/zend/apache2/bin --with-apxs=/usr/local/zend/apache2/bin/apxs --without-berkeley-db make make install 顺利成功~(其中configure的最后会提示你选择了不要BDB的模式,会以FSFS的模式去走,无视就可以了) 把原来的svnroot删了后(原来怀疑是目录权限问题,都设777了,所以删了重来,否则的话重新编译似乎对这些都没影响的,不动都ok的),重新mkdir,svnadmin create,本地checkout,成功,一切顺利over。 到这一步,因为还没设置svn帐号权限等,所以还没有commit的权限,前面查资料的时候正好看到下面两篇文章,转了过来: 在linux下安装配置svn独立服务器 svnserve配置文件详析 扫了一下,准备接下来开始配置喽~ ………… 好吧,我很世博。发现似乎是sqlite的问题,结果想卸了重装,yum一卸把所有相关的都卸了。。。包括yum。。。包括rpm。。。无敌了。。。 现在httpd什么的都挂了,嗯,废了。。。 不高兴一个一个弄回来了,嗯,明天用无敌绝招,重装系统~~~ 顺便下个fedora,明天装这个玩玩看。 喵~回家,下班,休息。。。

【转】svnserve配置文件详析


30 3月
From: http://sd.csdn.net/page/d97cc471-e657-4620-997f-efdcc10fd2b7 svnserve是SVN自带的一个轻型服务器,客户端通过使用以svn://或svn+ssh://为前缀的URL来访问svnserve服务器,实现远程访问SVN版本库。 svnserve可以通过配置文件来设置用户和口令,以及按路径控制版本库访问权限。本文详细分析了svnserve配置文件格式,并说明如何使用配置文件控制版本库访问权限。 本文介绍SVN的版本为1.4.4。 1) svnserve配置文件概述 svnserve配置文件通常由以下3个文本文件组成: svn服务配置文件,该文件版本库目录的conf目录下,文件名为svnserve.conf。 用户名口令文件,该文件名在文件svnserve.conf中指定,缺省为同目录下的passwd。 权限配置文件,该文件名也在文件svnserve.conf中指定,缺省为同目录下的authz。 2) svn服务配置文件 svn服务配置文件为版本库目录中的文件conf/svnserve.conf。该文件仅由一个[general]配置段组成。 [general]配置段中配置行格式如下: <配置项> = <值> 配置项分为以下5项: anon-access 控制非鉴权用户访问版本库的权限。取值范围为"write"、"read"和"none"。 即"write"为可读可写,"read"为只读,"none"表示无访问权限。 缺省值:read auth-access 控制鉴权用户访问版本库的权限。取值范围为"write"、"read"和"none"。 即"write"为可读可写,"read"为只读,"none"表示无访问权限。 缺省值:write password-db 指定用户名口令文件名。除非指定绝对路径,否则文件位置为相对conf 目录的相对路径。 缺省值:passwd authz-db 指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。 除非指定绝对路径,否则文件位置为相对conf目录的相对路径。 缺省值:authz realm 指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的 认证域相同,建议使用相同的用户名口令数据文件。 缺省值:一个UUID(Universal Unique IDentifier,全局唯一标示)。 【说明】版本库认证域 在使用svn客户端访问svnserve服务器时,若需要用户登录,则提示信息如下: [root@test root]# svn list svn://192.168.3.45/test Authentication realm: 0d545a49-4038-0410-99b4-c66dc73f754e Password for 'root': 在上述第2行"Authentication realm: "之后显示的字符串为认证域名称。如果在配置文件中为设定认证域,就会提示一个UUID,如上述所示。 如果在配置文件中指定了如下配置项: realm = test 将在svn客户端提示如下: [root@test root]# svn list svn://192.168.3.45/test Authentication realm: test Password for 'root': 例1:svn服务配置文件conf/svnserve.conf的内容如下: [general] anon-access = none auth-access = write password-db = ../../conf/passwd authz-db = ../../conf/authz realm = test 上述配置文件设定非鉴权用户无权限访问该版本库;鉴权用户可对版本库进行读写;用户名口令文件为相对版本库conf目录的文件"../../conf /passwd";权限配置文件为相对版本库conf目录的文件"../../conf/authz";版本库的认证域为"test"。 3) 用户名口令文件 用户名口令文件由svnserve.conf的配置项password-db指定,缺省为conf目录中的passwd。该文件仅由一个[users]配置段组成。 [users]配置段的配置行格式如下: <用户名> = <口令> 注意:配置行中的口令为未经过任何处理的明文。 例2:用户名口令文件conf/passwd的内容如下: [users] admin = admin thinker = 123456 该文件中配置了两个用户,用户名分别为"admin"和"thinker"。其中"admin"用户的口令为"admin";"thinker"用户的口令为"123456"。 4) 权限配置文件 权限配置文件由svnserve.conf的配置项authz-db指定,缺省为conf目录中的authz。该配置文件由一个[groups]配置段和若干个版本库路径权限段组成。 [groups]配置段中配置行格式如下: <用户组> = <用户列表> 用户列表由若干个用户组或用户名构成,用户组或用户名之间用逗号","分隔,引用用户组时要使用前缀"@"(如:引用用户组"all"要使用字符串"@all")。 版本库路径权限段的段名格式如下: [<版本库名>:<路径>] 如版本库abc路径/tmp的版本库路径权限段的段名为"[abc:/tmp]"。 可省略段名中的版本库名。若省略版本库名,则该版本库路径权限段对所有版本库中相同路径的访问控制都有效。如:段名为"[/tmp]"的版本库路径权限段设置了所有引用该权限配置文件的版本库中目录"/tmp"的访问权限。 版本库路径权限段中配置行格式有如下三种: <用户名> = <权限> <用户组> = <权限> * = <权限> 其中,"*"表示任何用户;权限的取值范围为''、'r'和'rw',''表示对该版本库路径无任何权限,'r'表示具有只读权限,'rw'表示有读写权限。 注意:每行配置只能配置单个用户或用户组。 例3:权限配置文件conf/authz的内容如下: [groups] g_admin = admin,thinker [admintools:/] @g_admin = rw * = [test:/home/thinker] thinker = rw * = r 在上述配置文件中,定义了一个用户组"g_admin",该用户组包含用户"admin"和"thinker"。然后定义了2个版本库路径权限段。其中,版本库"admintools"只有用户组"g_admin"可读写,其他用户无任何权限;版本库"test"中路径"/home/thinker"只有用户"thinker"有读写权限,其他用户只有可读权限。 5) 总结 在本文中,详细介绍了svnserve程序的3个配置文件。SVN管理员可以通过这3个配置文件设置svnserve服务的用户名口令,以及对版本库路径的访问权限。这些配置文件保存后就立即生效,不需要重启svnserve服务。 需要强调的是本文介绍的配置文件只对svnserve服务有效,即客户端通过前缀为svn://或svn+ssh://的URL访问版本库有效,而对通过前缀http://、https://或file:///的URL无效。

svnserve是SVN自带的一个轻型服务器,客户端通过使用以svn://或svn+ssh://为前缀的URL来访问svnserve服务器,实现远程访问SVN版本库。 svnserve可以通过配置文件来设置用户和口令,以及按路径控制版本库访问权限。本文详细分析了svnserve配置文件格式,并说明如何使用配置文件控制版本库访问权限。 本文介绍SVN的版本为1.4.4。 1) svnserve配置文件概述 svnserve配置文件通常由以下3个文本文件组成: svn服务配置文件,该文件版本库目录的conf目录下,文件名为svnserve.conf。 用户名口令文件,该文件名在文件svnserve.conf中指定,缺省为同目录下的passwd。 权限配置文件,该文件名也在文件svnserve.conf中指定,缺省为同目录下的authz。 2) svn服务配置文件 svn服务配置文件为版本库目录中的文件conf/svnserve.conf。该文件仅由一个[general]配置段组成。 [general]配置段中配置行格式如下: <配置项> = <值> 配置项分为以下5项: anon-access 控制非鉴权用户访问版本库的权限。取值范围为"write"、"read"和"none"。 即"write"为可读可写,"read"为只读,"none"表示无访问权限。 缺省值:read auth-access 控制鉴权用户访问版本库的权限。取值范围为"write"、"read"和"none"。 即"write"为可读可写,"read"为只读,"none"表示无访问权限。 缺省值:write password-db 指定用户名口令文件名。除非指定绝对路径,否则文件位置为相对conf 目录的相对路径。 缺省值:passwd authz-db 指定权限配置文件名,通过该文件可以实现以路径为基础的访问控制。 除非指定绝对路径,否则文件位置为相对conf目录的相对路径。 缺省值:authz realm 指定版本库的认证域,即在登录时提示的认证域名称。若两个版本库的 认证域相同,建议使用相同的用户名口令数据文件。 缺省值:一个UUID(Universal Unique IDentifier,全局唯一标示)。 【说明】版本库认证域 在使用svn客户端访问svnserve服务器时,若需要用户登录,则提示信息如下: [root@test root]# svn list svn://192.168.3.45/test Authentication realm: 0d545a49-4038-0410-99b4-c66dc73f754e Password for 'root': 在上述第2行"Authentication realm: "之后显示的字符串为认证域名称。如果在配置文件中为设定认证域,就会提示一个UUID,如上述所示。 如果在配置文件中指定了如下配置项: realm = test 将在svn客户端提示如下: [root@test root]# svn list svn://192.168.3.45/test Authentication realm: test Password for 'root': 例1:svn服务配置文件conf/svnserve.conf的内容如下: [general] anon-access = none auth-access = write password-db = ../../conf/passwd authz-db = ../../conf/authz realm = test 上述配置文件设定非鉴权用户无权限访问该版本库;鉴权用户可对版本库进行读写;用户名口令文件为相对版本库conf目录的文件"../../conf /passwd";权限配置文件为相对版本库conf目录的文件"../../conf/authz";版本库的认证域为"test"。 3) 用户名口令文件 用户名口令文件由svnserve.conf的配置项password-db指定,缺省为conf目录中的passwd。该文件仅由一个[users]配置段组成。 [users]配置段的配置行格式如下: <用户名> = <口令> 注意:配置行中的口令为未经过任何处理的明文。 例2:用户名口令文件conf/passwd的内容如下: [users] admin = admin thinker = 123456 该文件中配置了两个用户,用户名分别为"admin"和"thinker"。其中"admin"用户的口令为"admin";"thinker"用户的口令为"123456"。 4) 权限配置文件 权限配置文件由svnserve.conf的配置项authz-db指定,缺省为conf目录中的authz。该配置文件由一个[groups]配置段和若干个版本库路径权限段组成。 [groups]配置段中配置行格式如下: <用户组> = <用户列表> 用户列表由若干个用户组或用户名构成,用户组或用户名之间用逗号","分隔,引用用户组时要使用前缀"@"(如:引用用户组"all"要使用字符串"@all")。 版本库路径权限段的段名格式如下: [<版本库名>:<路径>] 如版本库abc路径/tmp的版本库路径权限段的段名为"[abc:/tmp]"。 可省略段名中的版本库名。若省略版本库名,则该版本库路径权限段对所有版本库中相同路径的访问控制都有效。如:段名为"[/tmp]"的版本库路径权限段设置了所有引用该权限配置文件的版本库中目录"/tmp"的访问权限。 版本库路径权限段中配置行格式有如下三种: <用户名> = <权限> <用户组> = <权限> * = <权限> 其中,"*"表示任何用户;权限的取值范围为''、'r'和'rw',''表示对该版本库路径无任何权限,'r'表示具有只读权限,'rw'表示有读写权限。 注意:每行配置只能配置单个用户或用户组。 例3:权限配置文件conf/authz的内容如下: [groups] g_admin = admin,thinker [admintools:/] @g_admin = rw * = [test:/home/thinker] thinker = rw * = r 在上述配置文件中,定义了一个用户组"g_admin",该用户组包含用户"admin"和"thinker"。然后定义了2个版本库路径权限段。其中, 版本库"admintools"只有用户组"g_admin"可读写,其他用户无任何权限;版本库"test"中路径"/home/thinker"只有 用户"thinker"有读写权限,其他用户只有可读权限。 5) 总结 在本文中,详细介绍了svnserve程序的3个配置文件。SVN管理员可以通过这3个配置文件设置svnserve服务的用户名口令,以及对版本库路径的访问权限。这些配置文件保存后就立即生效,不需要重启svnserve服务。 需要强调的是本文介绍的配置文件只对svnserve服务有效,即客户端通过前缀为svn://或svn+ssh://的URL访问版本库有效,而对通过前缀http://、https://或file:///的URL无效。

【转】在linux下安装配置svn独立服务器


30 3月
From: http://www.blogjava.net/zhouf/articles/251476.html subversion(以下简称svn)是近年来崛起的版本管理工具,是cvs的接班人。 svn服务器有2种运行方式:独立服务器和借助apache。2种方式各有利弊。 svn存储版本数据也有2种方式:BDB和FSFS。因为BDB方式在服务器中断时,有可能锁住数据,所以还是FSFS方式更安全一点。 1. svn服务器安装操作系统: Redhat Linux AS4安装包获取:下载http://subversion.tigris.org/downloads/subversion-1.4.0.tar.gz和 http://subversion.tigris.org/downloads/subversion-deps-1.4.0.tar.gz。编译: 以root用户登录。 将subversion-1.4.0.tar.gz和subversion-deps-1.4.0.tar.gz传到服务器。 tar xfvz subversion-1.4.0.tar.gz tar xfvz subversion-deps-1.4.0.tar.gz cd subversion-1.4.0 ./configure --prefix=/opt/svn --without-berkeley-db --with-zlib (注:以svnserve方式运行,不加apache编译参数。以fsfs格式存储版本库,不编译berkeley-db) make clean make make install vi /etc/profile,在/etc/profile最后加入: PATH=$PATH:/opt/svn/bin export PATH 测试: svnserve --version 如果显示如下,安装成功: svnserve, version 1.4.0 (r21228) compiled Oct 12 2006, 10:18:56Copyright (C) 2000-2006 CollabNet. Subversion is open source software, see http://subversion.tigris.org/ This product includes software developed by CollabNet (http://www.Collab.Net/).The following repository back-end (FS) modules are available:* fs_fs : Module for working with a plain file (FSFS) repository. 2. svn配置 建立版本库目录,可建多个: mkdir -p /opt/svndata/repos1 mkdir -p /opt/svndata/repos2 建立版本库: svnadmin create /opt/svndata/repos1 svnadmin create /opt/svndata/repos2 修改版本库配置文件: 版本库1: vi /opt/svndata/repos1/conf/svnserve.conf 内容修改为: [general] anon-access = none auth-access = write password-db = /opt/svn/conf/pwd.conf authz-db = /opt/svn/conf/authz.conf realm = repos1 版本库2: vi /opt/svndata/repos2/conf/svnserve.conf内容修改为: [general] anon-access = none auth-access = write password-db = /opt/svn/conf/pwd.conf authz-db = /opt/svn/conf/authz.conf realm = repos2 即除realm = repos2外,其他与版本库1配置文件完全相同。如果有更多的版本库, 依此类推。配置允许访问的用户: vi /opt/svn/conf/pwd.conf 为了简化配置,2个版本库共用1个用户配置文件。如有必要,也可以分开。注意:对用户配置文件的修改立即生效,不必重启svn。文件格式如下: [users] <用户1> = <密码1> <用户2> = <密码2> 其中,[users]是必须的。下面列出要访问svn的用户,每个用户一行。示例: [users] alan = password king = hello 配置用户访问权限: vi /opt/svn/conf/authz.conf 为了简化配置,3个版本库共用1个权限配置文 件/opt/svn/conf/pwd.conf。如有必要,也可以分开。文件中定义用户组和版本库目录权限。注意: * 权限配置文件中出现的用户名必须已在用户配置文件中定义。 * 对权限配置文件的修改立即生效,不必重启svn。用户组格式: [groups] <用户组名> = <用户1>,<用户2> 其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。版本库目录格式: [<版本库>:/项目/目录] @<用户组名> = <权限> <用户名> = <权限>  其中,方框号内部分可以有多种写法: /,表示根目录及以下。根目录是svnserve启动时指定的,我们指定为/opt/svndata。这样,/就是表示对全部版本库设置权限。 repos1:/,表示对版本库1设置权限 repos2:/occi, ,表示对版本库2中的occi项目设置权限 repos2:/occi/aaa, ,表示对版本库2中的occi项目的aaa目录设置权限  权限主体可以是用户组、用户或*,用户组在前面加@,*表示全部用户。权限可以是w、r、wr和空,空表示没有任何权限。示例: [groups] admin = alan[/] @admin = rw[repos1:/occi/aaa] king = rw[repos2:/pass] king = 删除无用文件: rm /opt/svndata/repos1/conf/authz rm /opt/svndata/repos1/conf/passwd rm /opt/svndata/repos2/conf/authz rm /opt/svndata/repos2/conf/passwd 3. 启动svn 建立启动svn的用户: useradd svn passwd svn 根据提示为用户svn设置密码允许用户svn访问版本库: chown –R svn:svn /opt/svndata chown –R svn:svn /opt/data启动svn: su - svn -c "svnserve -d --listen-port 9999 -r /opt/svndata"(原文错误  —— jjw) su -c "svnserve -d -listen port 9999 -r /opt/svndata" svn 其中: su – svn表示以用户svn的身份启动svn -d表示以daemon方式(后台运行)运行 --listen-port 9999表示使用9999端口,可以换成你需要的端口。但注意,使用1024以下的端口需要root 权限 -r /opt/svndata指定根目录是/opt/svndata检查: ps –ef|grep svnserve如果显示如下,即为启动成功: svn    6941   1 0 15:07 ?    00:00:00 svnserve -d --listen-port 9999 -r /opt/svndata参考资料: http://www.gbunix.com/htmldata/2006_07/15/27/article_1337_1.html http://www.iusesvn.com/bbs/thread-157-1-1.html http://16hot.blog.isyi.com/post/1/552 检测服务是否开启:netstat -ntlp如果看到3690的端口正常开放了,证明SVN启动了。] 下面是机器上的端口显示: Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address         Foreign Address              State PID/Program name tcp         0       0 0.0.0.0:32769         0.0.0.0:*                    LISTEN 2611/rpc.statd tcp         0       0 0.0.0.0:111           0.0.0.0:*                    LISTEN 2591/portmap tcp         0       0 0.0.0.0:113           0.0.0.0:*                    LISTEN 2827/xinetd tcp         0       0 127.0.0.1:631         0.0.0.0:*                    LISTEN 4860/cupsd tcp         0       0 127.0.0.1:25          0.0.0.0:*                    LISTEN 2846/sendmail: acce tcp         0       0 :::3690               :::*                        LISTEN 5513/svnserve tcp         0       0 :::22                 :::*                        LISTEN 2812/sshd 下面这个就是了: tcp         0       0 :::3690               :::*                        LISTEN 5513/svnserve 好了,svn已经架起来了
在 Linux/Apache 2.2 上配置SVN服务器 准备,下载所需要文件. 检查已安装的 Apache2 是否已经安装了 mod_dav . 编译SVN,遇到的问题和解决方法 使用 默认文件系统(fsfs) 保存数据 使用 Berkeley DB 保存数据 配置Apache和SVN,测试. 其它小结 从Windows平台上数据转移 配置文件,使用其支持对文件中的 $Id$ 标签每次提交的时候自动更新版本信息. 基于路径的权限控制常用SVN命令 相关资源* 准备,下载所需要文件. 本文测试环境:ubuntu 6.06 LTS (kernel 2.6.15-25-k7,gcc-4.0.3) /ubuntu server (2.6.15-26- server,gcc-4.0.4) Subversion 1.3.2Apache 2.2.2最新的版本 Subversion 可以在这里找到 : http://subversion.tigris.org/project_packages.html* 检查已安装的 Apache2 是否已经安装了 mod_dav . 如果已经成功安装了Apache,使用 httpd -M 来查看有没有安装 dav_module,如果没有的话 必须附加 ‘–enable-dav’ ‘–enable-dav-fs’ 两个参数重新编译 Apache,否则即使编译通过了svn,apache也 会启动不起来.如何编译 Apache 请参考我另外一篇文章.* 编译SVN,遇到的问题和解决方法. 使用默认的文件系统保存数据. 最终完整通过安装和测试的编译参数为:./configure --with-apxs=/usr/local/apache2/bin/apxs \ --with-apr=/home/src/server/httpd-2.2.2/srclib/apr \ --with-apr-util=/home/src/server/httpd-2.2.2/srclib/apr-utilmake make install其中 /home/src/server/ 为 httpd-2.2.2 源代码所在文件夹,根据实际情况调整一下.◆ 遇到问题:1) --with-apr 和 --with-apr-util 如果没有加上的话,即使编译成功了也会出现Can't set position pointer in file ‘/home/svn/repos/db/revs/0′: Invalid argument 这样的错误提示.2) 暂时不能使用 Berkeley DB [* 已解决]svn保存文件更新数据库的方法有两个,一种是直接使用 fs (filesystem)来保存,另一种是通过Oracle提供支持的开源数据库 Berkeley DB 进行保存。但是如果加上 –with-berkeley-db=/usr/local/BerkeleyDB.4.4 就会configure时就会报错.configure: error: APR-UTIL was installed independently, it won’t be possible to use the specified Berkeley DB: /usr/local/BerkeleyDB.4.4我想 apr-unit 暂时不支持吧,我们就用默认的fs好了.3) 在make 的时候可能会遇到缺少 srclib/apr/libapr-1.la,srclib/apr-util/libaprutil-1.la 两个文件,找不到而make error.解决办法:/usr/local/apache2/lib/ 中找到,将其复制到源代码文件夹相应的位置中.Update!!使用 BerkeleyDB 保存数据. 1) 安装 BerkeleyDBcd /usr/local/src wget http://downloads.sleepycat.com/db-4.3.29.tar.gztar xzvf db-4.3.29.tar.gz cd /usr/local/src/db-4.3.29/build_unix ../dist/configure --enable-compat185 make make install2) 更新apr和apr-util源代码# 清理编译后的.la文件 cd /usr/local/src/httpd-2.2.3make cleancd /usr/local/src/subversion-1.3.2 rm -rf apr rm -rf apr-util cp -rf /usr/local/src/httpd-2.2.3/srclib/apr ./ cp -rf /usr/local/src/httpd-2.2.3/srclib/apr-util/ ./3) 编译安装./configure --with- apxs=/usr/local/apache2/bin/apxs \ --with-berkeley-db=/usr/local/BerkeleyDB.4.3 \ --with-ssl make make install ◆ 遇到问题: 1) BerkeleyDB 版本不能大于 4.3.否则同样会出现以下错误.configure: error: APR-UTIL was installed independently, it won’t be possible to use the specified Berkeley DB: /usr/local/BerkeleyDB.4.4 主要是apr-util 暂时不支持4.4的版本.2) 必须更新apr,apr-util 源代码. subversion-1.3.2 自带的 apr-util 的版本是0.9.6的,必须升级为 1.2.7 虽然能编译过去。但在 svn checkout 的时候会提示svn: REPORT request failed on ‘/!svn/vcc/default’ svn: REPORT of ‘/!svn/vcc/default’: Could not read status line: connection was closed by server. 这个问题困扰了我很长时间,Google和官方论坛都无结果。后来昨天竟然自己无意中解决了,感动的得哭了:)* 配置Apache和SVN,测试 成功编译svn后会在 httpd.conf 中自动加上LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so 两个模块,没有的话,自行加上或检测是否真的编译成功.假设我们现在要将一个名为 Lair 的项目导入 到 SVN中1). Apache的配置在 conf/httpd.conf 或 conf/extra/httpd-vhosts.conf 中加入 <Location /svn/Lair>DAV svn SVNPath /home/svn/Lair </Location> 可以参考以下apache的配置,实现数据加密传输,用户身份验证.Listen 443AddType application/x-x509-ca-cert .crt AddType application/x-pkcs7-crl .crl.SSLPassPhraseDialog exec:/etc/sendsslpwd SSLSessionCache shmcb:/usr/local/apache2/logs/ssl_scache(512000) SSLSessionCacheTimeout 300 SSLMutex file:/usr/local/apache2/logs/ssl_mutex<VirtualHost _default_:443> DocumentRoot /var/SVNRoot ServerName svn.yousite.com:443 ServerAdmin webmaster@yousite.com <Location />DAV svn SVNPath /var/SVNRoot AuthzSVNAccessFile /etc/svnserve.conf Satisfy Any AuthType Basic AuthName “yousite SVN Repository” AuthUserFile /etc/httpd-passwords.txt Require valid-user</Location> SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile /etc/ssl/server.crt SSLCertificateKeyFile /etc/ssl/server.key</VirtualHost>更详细的配置说明文档 http://svnbook.red-bean.com/nightly/en/svn.ref.mod_dav_svn.conf.html2). 配置,并且测试SVN,创建一个新用户,用了保存仓库. useradd -m svn 创建一个新模块su daemon (apache是以daemon用户运行的,所以要切换身份,否则可能会报目录访问权限错误) svnadmin create --fs-type fsfs /home/svn/Lair 导入原来的项目svn import /var/www/Lair http://localhost/svn/Lair -m ‘Initial import’重新建 立工作目录rm -rf /var/www/Lair (注意备份!!) svn checkout http://localhost/svn/Lair 测试打开 http://localhost/svn/Lair如能看到一个你项目录列表,说明您成功了。 * 其它小结 数据转移:从 Windows 平台 SVN 服务器转移 如果windows svn储存的格式也是dbd的话,直接将SVN的文件夹copy过来即可.然后 执行 svnadmin recover /var/SVNRoot 检查一下数据库是否损坏.最后注意权限,确保 db 目录下的所有 文件可写。chmod 755 db chmod 666 db/* 否则checkout时出现以下错误,多数是因为文件或者目录权限问题引起的,可以尝试用 chown 或者 chmod 命令修改一下权限<m:human-readable errcode=”160029″>Could not open the requested SVN filesystem </m:human-readable><m:human-readable errcode=”13″> Could not open the requested SVN filesystem </m:human-readable>另外一种方法没有测试过,原理大致和mysqldump一样,将svn导出为文本文件,然 后重新导入,好处是可以避免因为存储格式不同而导致的数据转移困难。# dump data to file (assuming a repo @ c:\repo):svnadmin dump c:\repo > c:\repo.txt # Copy the file over to linux: mkdir /repo svnadmin create /repo svnadmin load /repo < /repo.txt 设置访问控制当 httpd.conf 中 设置 AuthzSVNAccessFile 时, 可以设置不同用户对不同目录的访问控制.以下是一个例子.[groups] root = admin.root web = user1,user2 soft = user3,user4[/] @root = rw[/www]@web = rw[/soft] @soft = rw详细的说明文档:http://svnbook.red-bean.com/nightly/en/svn.serverconfig.httpd.html 配置文件,使用其支持对文件中的 $Id$ 标签每次提交的时候自动更新版本信息(自动属性).Windows : C:\Documents and Settings\%USERNAME%\Application Data\Subversion\config Linux : ~\.subversion\config[miscellany]enable-auto-props = yes [auto-props] *.php=svn:keywords=Id *.html=svn:keywords=Id>> 关于自动属性的更高级讨论■ 几条常用svn 命令 svn update svn add “filename” svn commit———————– Change Log:2006-08-14 neon库subversion已经自带,不需要在单独安装,添加-with-ssl即可使用svn对ssl支持. 2006-08-10 补充自动属性的说明. 2006-08-08 加入关于目录访问验证的说明. 2006-08-07 httpd,2.2.3测试依然有效,解决bdb数据库的支持问题,添加从Windows到Linux下的数据转移方案。 2006-07-25 看到到.声仔对 Can’t set position pointer in file 另一种解决方案,我当时也测试了,好像没有成功。不想用apache源代码编译的朋友可以也测试一下

【转】LINUX –修改IP等网络配置


30 3月
From: http://aoding.blog.51cto.com/226250/84068 ifconfig eth0 新ip 然后编辑/etc/sysconfig/network-scripts/ifcfg-eth0,修改ip [aeolus@db1 network-scripts]$ vi ifcfg-eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=static IPADDR=219.136.241.211 NETMASK=255.255.255.128 GATEWAY=219.136.241.254 [aeolus@db1 etc]$ vi resolv.conf nameserver 202.96.128.68 nameserver 219.136.241.206 ----------------------- Linux下修改网卡IP和网关 建议通过终端字符方式下来修改 一修改IP地址 vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 BOOTPROTO=none BROADCAST=192.168.1.255 IPADDR=192.168.1.33 NETMASK=255.255.255.0 NETWORK=192.168.1.0 ONBOOT=yes USERCTL=no PEERDNS=no TYPE=Ethernet ~ vi /etc/sysconfig/network-scripts/ifcfg-eth1 DEVICE=eth1 ONBOOT=yes BOOTPROTO=none IPADDR=192.168.2.34 NETMASK=255.255.255.0 USERCTL=no PEERDNS=no TYPE=Ethernet NETWORK=192.168.2.0 BROADCAST=192.168.2.255 二修改网关 vi /etc/sysconfig/network NETWORKING=yes HOSTNAME=Aaron GATEWAY=192.168.1.1 三重新启动网络配置 /etc/init.d/network restart ----------------------------------------------------------------------------------- 修改配置文件 /etc/sysconfig/network-scripts/ 下有配置文件 比如文件:ifcfg-eth0 代表是以太网实际网卡0的配置文件 比如文件:ifcfg-eth0:1 代表是以太网实际网卡0的配置文件 域名服务器配置文件:/etc/ resolv.conf 修改ip地址 即时生效: # ifconfig eth0 192.168.0.20 netmask 255.255.255.0 启动生效: 修改/etc/sysconfig/network-scripts/ifcfg-eth0 修改default gateway 即时生效: # route add default gw 192.168.0.254 启动生效: 修改/etc/sysconfig/network-scripts/ifcfg-eth0 修改dns 修改/etc/resolv.conf 修改后可即时生效,启动同样有效 修改host name 即时生效: # hostname fc2 启动生效: 修改/etc/sysconfig/network

SVN及相关Required组件安装


30 3月

——菜鸟 Linux 服务器搭建 随笔 连载之三

嗯,今天晚上老婆上课,又有点时间自己搞搞,于是准备把SVN安上。8过貌似碰到了些许阻碍。 下载的是Source Code包,解压后./configure 发现貌似少了不少东西,比如configure要的基本gcc包都木有,报了个configure: error: no acceptable C compiler found in $PATH,看来系统装的时候太简化也不灵啊,于是通过万恶的yum找到了gcc无脑安装完毕,接着继续configure,又发现APR木有(好吧,我承认我不知道什么是APR),于是又想通过yum无脑搞定,8过貌似install完毕后,configure还是报找不到,find了下不知道为啥也没找APR的文件,纠结了,于是看了下svn安装文档,找到里面有一段说: If you want to specify the location of the APR library, you can use the "--with-apr=" option of "./configure". It should be able to find the apr-config script in the standard location under that directory (e.g. ${prefix}/bin). Similarly, you can specify the location of APR-util using the "--with-apr-util=" option to "./configure". It will look for the apu-config script relative to that directory. For example, if you want to use the APR libraries you built with the Apache httpd server, you could run: $ ./configure --with-apr=/usr/local/apache2 \ --with-apr-util=/usr/local/apache2 ... 于是想到,我装的是zend server,貌似apache目录在/usr/local/zend/apache2的样子,于是尝试了下,发现貌似ok了,不过又报了个apxs的错,刚才找apr的时候有看到apxs的字样,于是就: ./configure --with-apr=/usr/local/zend/apache2/bin --with-apr-util=/usr/local/zend/apache2/bin --with-apxs=/usr/local/zend/apache2/bin/apxs 结果好像就这么过去了。 不过这事还没完,接着又发现sqlite版本过低,新的svn要求3.4以上,最好3.6的,不过CentOS里面只有3.3.x,yum也没有新的update,好吧,又得自己动手丰衣足食了。 找到最新的Sqlite下载,然后装了sqlite-amalgamation-3.6.23.tar.gz ,搞定。 接着又发现没有zlib(- -||| 没完没了了),好吧,yum貌似用官方的列表的确比较废,都是老的不的了的版本,zlib也挺纠结的,yum显示装了,不过svn就是找不到,于是到http://www.zlib.net/下了最新的,无脑安装完毕。 终于,SVN的configure过去了。 make 。。。 。。。。 。。。。。 。。。。。。 /usr/bin/ld: cannot find -lexpat collect2: ld returned 1 exit status make: *** [subversion/svn/svn] Error 1 囧。。。 查了半天,貌似是要装2个包,expat和expat-devel。yum install完继续make。。。 成功。。。make install。。。。成功。。。。 终于。。。内牛满面。。。 稍微试了下svnadmin create,貌似还有不少要设置的,开来3690端口,然后svnserve -d -r /var/svnroot 了一下,好像还有问题,嗯,明天再搞了,吃不消了。喵的。睡。。。。

vmware安装&网络配置,vsftpd安装,Zend Server安装


25 3月

——菜鸟 Linux 服务器搭建 随笔 连载之二

这两天公司组织架构大变,突然多出来好多事情- -||| 不过抽空也陆续折腾了下vmware,想用64位的系统玩,结果顺便就折腾了下win7 64bit的,貌似感觉不错,第一次玩vmware还是挺纠结的,3种网络模式搞了一下,貌似NAT就是和本机用一个网的意思,host-only听说是独立划分一段用,bridge好像才是我要的,可以直接和主机同一网段的。昨天折腾到挺晚的,没搞定,今天莫名其妙就好了。。。可能和主机的网络链接要设置成允许共享有关,暂时不确定。另外64位上面vmware 64位系统似乎bios里面要开一个什么VT,嗯,还好我的本本是支持的,否则就没的玩了。 今天搞定网以后先弄了个vsftpd,用yum install装的,没什么悬念,查了下似乎这东西是除了它配置文件目录/etc/vsftpd/里面的两个userlist文件中的用户都可以访问的,于是自己建了个用户,启动了服务后,就用win7上的cuteftp链接上了,结果传东西的时候碰到了问题,出了533错误,貌似我防火墙端口也开了,上传的目录也设了777了,怎么会被拒绝的呢,查了下万能的google(现在是google.com.hk了- -)原来是selinux惹得祸man ftpd_selinux看了下,ok,打开全部后,service vsftpd restart,搞定。嗯嗯。今天就到这里吧,接下来准备装zend server ce了。喵~ 额,忍不住还是把下好的Zend Server装掉了,不过貌似下错了,CentOS下RPM版的就好了,我下了tar.gz的,不过貌似没啥影响,tar -zxf出来以后,直接install.sh就ok了,默认路径装到了/usr/local/zend下面,装完后出来下面的信息: ========================== INSTALLATION SUMMARY =================================================== Zend Server was installed to /usr/local/zend The End User License Agreement [EULA] can be viewed under /usr/local/zend/doc/EULA.txt See the README in /usr/local/zend/doc/README more information To change the GUI password run /usr/local/zend/bin/gui_passwd.sh Apache is up and running on port 10088! To control Zend Server, please use /usr/local/zend/bin/zendctl.sh To enable the Java bridge, please run /usr/local/zend/bin/setup_jb.sh Web interface is accessible from https://localhost:10082/ZendServer =============================== ENJOY Zend Server =============================================== 特此记录。 然后setup,firewall里面打开other ports,10082:tcp,就可以通过web访问了。 后续明天再研究了,休息,睡觉~。~ ——to be continued

Memcached 完全剖析 阅读笔记


17 3月
http://www.kuqin.com/web/20080711/11023.html 待阅 其他相关:http://www.ccvita.com/395.html

Vmware7.0 下载


17 3月

——菜鸟 Linux 服务器搭建 随笔 连载之一

春天到了,要开始活络活络了,嗯嗯,好吧,听说了很久很久vmware的种种,都没怎么去实践一些东西,也该是时候了,向服务器方向进军~ http://downloads.vmware.com/d/info/desktop_downloads/vmware_workstation/7_0 找了半天,下载还是只有官方的能下,没办法被逼在官网上注册了个号,下载ing…… 顺便找了个keygen,貌似网上还挺多的,破解普及的软件果然是个好软件啊~ ——to be continued

【转】提升PHP执行效率的建议


17 3月
0、用单引号代替双引号来包含字符串,这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量,单引号则不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中说echo是语言结构,不是真正的函数,故把函数加上了双引号)。 1、如果能将类的方法定义成static,就尽量定义成static,它的速度会提升将近4倍。 2、$row[’id’] 的速度是$row[id]的7倍。 3、echo 比 print 快,并且使用echo的多重参数(译注:指用逗号而不是句点)代替字符串连接,比如echo $str1,$str2。 4、在执行for循环之前确定最大循环数,不要每循环一次都计算最大值,最好运用foreach代替。 5、注销那些不用的变量尤其是大数组,以便释放内存。 6、尽量避免使用__get,__set,__autoload。 7、require_once()代价昂贵。 8、include文件时尽量使用绝对路径,因为它避免了PHP去include_path里查找文件的速度,解析操作系统路径所需的时间会更少。 9、如果你想知道脚本开始执行(译注:即服务器端收到客户端请求)的时刻,使用$_SERVER[‘REQUEST_TIME’]要好于time()。 10、函数代替正则表达式完成相同功能。 11、str_replace函数比preg_replace函数快,但strtr函数的效率是str_replace函数的四倍。 12、如果一个字符串替换函数,可接受数组或字符作为参数,并且参数长度不太长,那么可以考虑额外写一段替换代码,使得每次传递参数是一个字符,而不是只写一行代码接受数组作为查询和替换的参数。 13、使用选择分支语句(译注:即switch case)好于使用多个if,else if语句。 14、用@屏蔽错误消息的做法非常低效,极其低效。 15、打开apache的mod_deflate模块,可以提高网页的浏览速度。 16、数据库连接当使用完毕时应关掉,不要用长连接。 17、错误消息代价昂贵。 18、在方法中递增局部变量,速度是最快的。几乎与在函数中调用局部变量的速度相当。 19、递增一个全局变量要比递增一个局部变量慢2倍。 20、递增一个对象属性(如:$this->prop++)要比递增一个局部变量慢3倍。 21、递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。 22、仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP大概会检查看是否存在全局变量。 23、方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了10个方法,但性能上没有变化。 24、派生类中的方法运行起来要快于在基类中定义的同样的方法。 25、调用带有一个参数的空函数,其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。 26、Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面,少用脚本。 27、除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能,以免除编译开销。 28、尽量做缓存,可使用memcached。memcached是一款高性能的内存对象缓存系统,可用来加速动态Web应用程序,减轻数据库负载。对运算码 (OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。 29、当操作字符串并需要检验其长度是否满足某种要求时,你想当然地会使用strlen()函数。此函数执行起来相当快,因为它不做任何计算,只返回在zval 结构(C的内置数据结构,用于存储PHP变量)中存储的已知字符串长度。但是,由于strlen()是函数,多多少少会有些慢,因为函数调用会经过诸多步骤,如字母小写化(译注:指函数名小写化,PHP不区分函数名大小写)、哈希查找,会跟随被调用的函数一起执行。在某些情况下,你可以使用isset() 技巧加速执行你的代码。 (举例如下) if (strlen($foo) < 5) { echo “Foo is too short”$$ } (与下面的技巧做比较) if (!isset($foo{5})) { echo “Foo is too short”$$ } 调用isset()恰巧比strlen()快,因为与后者不同的是,isset()作为一种语言结构,意味着它的执行不需要函数查找和字母小写化。也就是说,实际上在检验字符串长度的顶层代码中你没有花太多开销。 34、当执行变量$i的递增或递减时,$i++会比++$i慢一些。这种差异是PHP特有的,并不适用于其他语言,所以请不要修改你的C或Java代码并指望它们能立即变快,没用的。++$i更快是因为它只需要3条指令(opcodes),$i++则需要4条指令。后置递增实际上会产生一个临时变量,这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种,正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意,因为并不是所有的指令优化器都会做同样的优化处理,并且存在大量没有装配指令优化器的互联网服务提供商(ISPs)和服务器。 35、并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。 36、并非要用类实现所有的数据结构,数组也很有用。 37、不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码? 38、当你需要时,你总能把代码分解成方法。 39、尽量采用大量的PHP内置函数。 40、如果在代码中存在大量耗时的函数,你可以考虑用C扩展的方式实现它们。 41、评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。 42、mod_zip可作为Apache模块,用来即时压缩你的数据,并可让数据传输量降低80%。 43、在可以用file_get_contents替代file、fopen、feof、fgets等系列方法的情况下,尽量用file_get_contents,因为他的效率高得多!但是要注意file_get_contents在打开一个URL文件时候的PHP版本问题; 44、尽量的少进行文件操作,虽然PHP的文件操作效率也不低的; 45、优化Select SQL语句,在可能的情况下尽量少的进行Insert、Update操作(在update上,我被恶批过); 46、尽可能的使用PHP内部函数(但是我却为了找个PHP里面不存在的函数,浪费了本可以写出一个自定义函数的时间,经验问题啊!); 47、循环内部不要声明变量,尤其是大变量:对象(这好像不只是PHP里面要注意的问题吧?); 48、多维数组尽量不要循环嵌套赋值; 49、在可以用PHP内部字符串操作函数的情况下,不要用正则表达式; 50、foreach效率更高,尽量用foreach代替while和for循环; 51、用单引号替代双引号引用字符串; 52、“用i+=1代替i=i+1。符合c/c++的习惯,效率还高”; 53、对global变量,应该用完就unset()掉;

貓熊寶寶幼齒園

姜經緯的博客