<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ZhongZiChang&#039;s Dao</title>
	<atom:link href="http://www.zhongzichang.com/feed" rel="self" type="application/rss+xml" />
	<link>http://www.zhongzichang.com</link>
	<description></description>
	<lastBuildDate>Fri, 27 Aug 2010 05:32:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>生活不能没有绿色</title>
		<link>http://www.zhongzichang.com/archives/265</link>
		<comments>http://www.zhongzichang.com/archives/265#comments</comments>
		<pubDate>Wed, 25 Aug 2010 05:19:40 +0000</pubDate>
		<dc:creator>zhongzichang</dc:creator>
				<category><![CDATA[生活]]></category>

		<guid isPermaLink="false">http://www.zhongzichang.com/?p=265</guid>
		<description><![CDATA[办公室里每个人负责一盘植物，右边是我的。]]></description>
			<content:encoded><![CDATA[<p>办公室里每个人负责一盘植物，右边是我的。</p>
<p><a href="http://www.zhongzichang.com/wp-content/uploads/2010/08/4923120020_740c20a9ec_z.jpg"><img src="http://www.zhongzichang.com/wp-content/uploads/2010/08/4923120020_740c20a9ec_z-300x225.jpg" alt="" title="4923120020_740c20a9ec_z" width="300" height="225" class="alignnone size-medium wp-image-301" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zhongzichang.com/archives/265/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Postfix on Ubuntu server 10.04</title>
		<link>http://www.zhongzichang.com/archives/269</link>
		<comments>http://www.zhongzichang.com/archives/269#comments</comments>
		<pubDate>Tue, 24 Aug 2010 02:36:22 +0000</pubDate>
		<dc:creator>zhongzichang</dc:creator>
				<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://www.zhongzichang.com/?p=269</guid>
		<description><![CDATA[Postfix 是ubuntu服务器的默认MTA。快速，容易管理，安全。与 sendmail兼容。这里解释如何安装和配置postfix。解释如何使用安全连接建立起一个SMTP服务器（为了安全发送邮件）。 注意：这个指南没有说到如何建立 Postfix Virtual Domains，关于 Virtual Domains 和其他高级配置，参考 https://help.ubuntu.com/10.04/serverguide/C/postfix.html#postfix-references 安装 安装使用下面的命令行： sudo apt-get install postfix 基本配置 配置　postfix， 运行下面的命令： sudo dpkg-reconfigure postfix 用户界面出现，在每一屏上，选择下面的值： Internet Site mail.example.com steve mail.example.com, localhost.localdomain, localhost No 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24 0 + all 使用你接收邮件的域名来替换 &#8230; <a href="http://www.zhongzichang.com/archives/269">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Postfix 是ubuntu服务器的默认MTA。快速，容易管理，安全。与 sendmail兼容。这里解释如何安装和配置postfix。解释如何使用安全连接建立起一个SMTP服务器（为了安全发送邮件）。</p>
<p>注意：这个指南没有说到如何建立 Postfix Virtual Domains，关于 Virtual Domains 和其他高级配置，参考 https://help.ubuntu.com/10.04/serverguide/C/postfix.html#postfix-references</p>
<p><strong>安装</strong></p>
<p>安装使用下面的命令行：</p>
<p>sudo apt-get install postfix</p>
<p><strong>基本配置</strong></p>
<p>配置　postfix， 运行下面的命令：</p>
<p>sudo dpkg-reconfigure postfix</p>
<p>用户界面出现，在每一屏上，选择下面的值：</p>
<p>Internet Site<br />
mail.example.com<br />
steve<br />
mail.example.com, localhost.localdomain, localhost<br />
No<br />
127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24<br />
0<br />
+<br />
all</p>
<p>使用你接收邮件的域名来替换 mail.example.com， 实际的网络和类范围替换192.168.0.0/24 ，适当的用户名替换 steve。</p>
<p>现在，你可以确定使用哪一种mailbxo格式。缺省情况下，Postfix使用mbox作为默认的mailbox格式。无须直接编辑配置文件，你可以使用postconf命令来配置postfix参数。配置参数将保存在文件 /etc/postfix/main.cf 文件中。以后，你想重新配置 postfix， 你可以运行这个命令或者手动修改配置文件。</p>
<p>为 Maildir 配置 mailbox格式：</p>
<p>sudo postconf -e &#8216;home_mailbox = Maildir/&#8217;<br />
这将把新邮件保存到 /home/username/Maildir ， 因此你需要配置你的 Mail Deliery Agent（MDA）使用同一个路径。</p>
<p><strong>SMTP 认证</strong></p>
<p>SMTP-AUTH 允许客户通过一个认证机制（SASL）来标识自己。Transport Layer Security（TLS）对认证过程进行加密。一旦认证通过，SMTP服务器将允许客户来传递邮件。</p>
<p>1. 配置Postfix， SMTP-AUTH 使用 SASL（Devocot SASL）</p>
<p>sudo postconf -e &#8216;smtpd_sasl_type = dovecot&#8217;<br />
sudo postconf -e &#8216;smtpd_sasl_path = private/auth-client&#8217;<br />
sudo postconf -e &#8216;smtpd_sasl_local_domain =&#8217;<br />
sudo postconf -e &#8216;smtpd_sasl_security_options = noanonymous&#8217;<br />
sudo postconf -e &#8216;broken_sasl_auth_clients = yes&#8217;<br />
sudo postconf -e &#8216;smtpd_sasl_auth_enable = yes&#8217;<br />
sudo postconf -e &#8216;smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination&#8217;<br />
sudo postconf -e &#8216;inet_interfaces = all&#8217;</p>
<p>注意： smtpd_sasl_path 配置是一个相对 Postfix queue 目录的路径。</p>
<p>2. 下一步，为TLS获得一个数字证书。参考 https://help.ubuntu.com/10.04/serverguide/C/certificates-and-security.html 获得更详细的信息。这个例子同样使用一个Certificate Authority（CA）。生成CA证书的方法，参考 https://help.ubuntu.com/10.04/serverguide/C/certificates-and-security.html#certificate-authority 。</p>
<p>注意：你可以从一个certificate authority 那里获得数字证书。不像 web 客户端， SMTP 客户很少抱怨 “self-signed certificates” 因此，你可以自己创建证书。参考 https://help.ubuntu.com/10.04/serverguide/C/certificates-and-security.html#creating-a-self-signed-certificate 获得更详细的信息。</p>
<p>3. 一旦你拥有证书，配置Postfix给进出的邮件提供TLS加密：</p>
<p>sudo postconf -e &#8216;smtpd_tls_auth_only = no&#8217;<br />
sudo postconf -e &#8216;smtp_use_tls = yes&#8217;<br />
sudo postconf -e &#8216;smtpd_use_tls = yes&#8217;<br />
sudo postconf -e &#8216;smtp_tls_note_starttls_offer = yes&#8217;<br />
sudo postconf -e &#8216;smtpd_tls_key_file = /etc/ssl/private/server.key&#8217;<br />
sudo postconf -e &#8216;smtpd_tls_cert_file = /etc/ssl/certs/server.crt&#8217;<br />
sudo postconf -e &#8216;smtpd_tls_loglevel = 1&#8242;<br />
sudo postconf -e &#8216;smtpd_tls_received_header = yes&#8217;<br />
sudo postconf -e &#8216;smtpd_tls_session_cache_timeout = 3600s&#8217;<br />
sudo postconf -e &#8216;tls_random_source = dev:/dev/urandom&#8217;<br />
sudo postconf -e &#8216;myhostname = mail.example.com&#8217;</p>
<p>4. 如果你使用自己的 Certificate Authority 来做签证，输入：</p>
<p>sudo postconf -e &#8216;smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem&#8217;</p>
<p>更多关于证书的信息，参考 https://help.ubuntu.com/10.04/serverguide/C/certificates-and-security.html 。</p>
<p>注意： 运行执行所有的命令后，Postfix已经为 SMTP-AUTH 配置好了，已经为 TLS 加密创建了一个self-signed certificate 。</p>
<p>现在，文件 /etc/postfix/main.cf 看起来内容如下：</p>
<p>main.cf &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p># See /usr/share/postfix/main.cf.dist for a commented, more complete<br />
# version</p>
<p>smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)<br />
biff = no</p>
<p># appending .domain is the MUA&#8217;s job.<br />
append_dot_mydomain = no</p>
<p># Uncomment the next line to generate &#8220;delayed mail&#8221; warnings<br />
#delay_warning_time = 4h</p>
<p>myhostname = server1.example.com<br />
alias_maps = hash:/etc/aliases<br />
alias_database = hash:/etc/aliases<br />
myorigin = /etc/mailname<br />
mydestination = server1.example.com, localhost.example.com, localhost<br />
relayhost =<br />
mynetworks = 127.0.0.0/8<br />
mailbox_command = procmail -a &#8220;$EXTENSION&#8221;<br />
mailbox_size_limit = 0<br />
recipient_delimiter = +<br />
inet_interfaces = all<br />
smtpd_sasl_local_domain =<br />
smtpd_sasl_auth_enable = yes<br />
smtpd_sasl_security_options = noanonymous<br />
broken_sasl_auth_clients = yes<br />
smtpd_recipient_restrictions =<br />
permit_sasl_authenticated,permit_mynetworks,reject _unauth_destination<br />
smtpd_tls_auth_only = no<br />
smtp_use_tls = yes<br />
smtpd_use_tls = yes<br />
smtp_tls_note_starttls_offer = yes<br />
smtpd_tls_key_file = /etc/ssl/private/smtpd.key<br />
smtpd_tls_cert_file = /etc/ssl/certs/smtpd.crt<br />
smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem<br />
smtpd_tls_loglevel = 1<br />
smtpd_tls_received_header = yes<br />
smtpd_tls_session_cache_timeout = 3600s<br />
tls_random_source = dev:/dev/urandom</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>postfix 的初始配置已经完成。运行下面的命令来重启 postfix 守护：</p>
<p>sudo /etc/init.d/postfix restart</p>
<p>Postfix支持SMTP-AUTH，基于SASL。然而，在使用SMTP-AUTH之前，仍然需要设置SASL认证。</p>
<p><strong>配置SASL</strong></p>
<p>Postfix 支持两种SASL实现，分别是 Cyrus SASL 和 Dovecot SASL 。要让 Dovecot SASL 能够工作，需要安装 dovecot-common 包。从一个终端提示符下输入：</p>
<p>sudo apt-get install dovecot-common</p>
<p>下一步编辑 /etc/dovecot/dovecot.conf 。在 auth default 段，取消 socket listen 的注释，并且修改如下：</p>
<p>socket listen {<br />
    #master {<br />
      # Master socket provides access to userdb information. It&#8217;s typically<br />
      # used to give Dovecot&#8217;s local delivery agent access to userdb so it<br />
      # can find mailbox locations.<br />
      #path = /var/run/dovecot/auth-master<br />
      #mode = 0600<br />
      # Default user/group is the one who started dovecot-auth (root)<br />
      #user =<br />
      #group =<br />
    #}<br />
    client {<br />
      # The client socket is generally safe to export to everyone. Typical use<br />
      # is to export it to your SMTP server so it can do SMTP AUTH lookups<br />
      # using it.<br />
      path = /var/spool/postfix/private/auth-client<br />
      mode = 0660<br />
      user = postfix<br />
      group = postfix<br />
    }<br />
  }</p>
<p>为了让 Outlook 客户端使用 SMTPAUTH，在  auth default 段增加 &#8220;login&#8221; ：</p>
<p>mechanisms = plain login</p>
<p>一旦你的 Dovecot 配置完成，重启：</p>
<p>sudo /etc/init.d/dovecot restart</p>
<p>Postfix-Dovecot</p>
<p>使用 dovecot-postfix 包，是配置Postfix支持SMTP-AUTH的另一种方法。这个包将安装 Dovecot ，并且配置 Postfi 来用它，支持 SASL 认证和作为一个 MDA。这个同时配置 Dovecot 支持 IMAP，IMAPS，POP3和POP3S。</p>
<p>注意：你可能或者不可能在你的邮件服务器上运行 IMAP, IMPAS, POP3 或者 POP3S。例如，如果你配置你的服务器成为一个mail gateway，spam/virus filter等等。在这些例子中，很容易使用上面的命令来配置 Postfix 支持 SMTPAUTH。</p>
<p>要安装这个包，从一个终端提示符下输入：</p>
<p>sudo apt-get install dovecot-postfix</p>
<p>现在，你有个可工作的邮件服务器了，但还有一些选项，你希望更深入的自定义。例如，这个包使用来自 ssl-cert 包的 certificate 和 key ，在一个产品环境，你会使用为主机使用一个certificate和key。参考 https://help.ubuntu.com/10.04/serverguide/C/certificates-and-security.html 获得更详细的信息。</p>
<p>一旦你有一个主机自定义的 certificate 和 key，修改 /etc/postfix/main.cf 下面的选项：</p>
<p>smtpd_tls_cert_file = /etc/ssl/certs/ssl-mail.pem<br />
smtpd_tls_key_file = /etc/ssl/private/ssl-mail.key</p>
<p>然后重启 Postfix ：</p>
<p>sudo /etc/init.d/postfix restart</p>
<p>测试</p>
<p>SMTP-AUTH 配置完成，现在是时候测试了。</p>
<p>要查看 SMTP-AUTH 和 TLS 是否工作，运行下面的命令：</p>
<p>telnet mail.example.com 25</p>
<p>和 postfix mail server建立连接后，输入：</p>
<p>ehlo mail.example.com</p>
<p>如果你看到回显的信息中包含下面的内容，那么工作正常。输入quit退出。</p>
<p>250-STARTTLS<br />
250-AUTH LOGIN PLAIN<br />
250-AUTH=LOGIN PLAIN<br />
250 8BITMIME</p>
<p>发现故障并修理</p>
<p>这一段讲述发现问题后，进行检测的一般方法。</p>
<p>+ Escaping chroot</p>
<p>出于安全的考虑，Ubuntu 的 postfix 缺省安装到一个 chroot 环境。当出现问题时，这会增加解决问题的难度。</p>
<p>要关闭 chroot 操作，找到 /etc/postfix/master.cf 配置文件的这一行：</p>
<p>smpt	inet	n	-	-	-	-	smtpd</p>
<p>修改如下：</p>
<p>smtp	inet	n	-	n	-	-	smtpd</p>
<p>然后，你使用新的配置来重启 postfix：</p>
<p>sudo /etc/init.d/postfix restart</p>
<p>+ Log File</p>
<p>三个文件：</p>
<p>/var/log/mail.log<br />
/var/log/mail.err<br />
/var/log/mail.warn</p>
<p>可使用tail -f 命令实时查看：</p>
<p>tail -f /var/log/mail.err</p>
<p>++ 修改TLS活动日志水平，设置 smtpd_tls_loglevel 选项的值，从 1 到 4。</p>
<p>sudo postconf -e &#8216;smtpd_tls_loglevel = 4&#8242;</p>
<p>++ 如果你无法发送或者接收某个域名的的邮件，你可以增加域名到 debug_peer_list  参数：</p>
<p>sudo postconf -e &#8216;debug_peer_list = problem.domain&#8217;</p>
<p>++ 你可以增加Postfix 守护进程的 verbosity，编辑  /etc/postfix/master.cf ，在条目后增加 -v。</p>
<p>smtp      unix  &#8211;       &#8211;       &#8211;       &#8211;       &#8211;       smtp -v</p>
<p>修改配置后，需要 Postfix来重载。执行 sudo /etc/init.d/postfix reload</p>
<p>++ 当SASL发生问题时，需要增加日志的信息数量，在 /etc/dovecot/dovecot.conf 文件中设置下面的选项：</p>
<p>auth_debug=yes<br />
auth_debug_passwords=yes</p>
<p>注意：修改 dovecot  的配置后，需要重载 : sudo /etc/init.d/dovecot reload</p>
<p>注意：上面的改动会彻底增加发送到日志文件的信息数量。记住在调试完毕后，将配置修改回来，并且进行重载。</p>
<p>+ References</p>
<p>管理一个 Postfix 服务器是非常复杂的任务。有时需要到Ubuntu社区获得更多有经验的帮助。</p>
<p>freenode.net 的 #ubuntu-server IRC</p>
<p>The Book of Postfix</p>
<p>http://www.postfix.org/documentation.html</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zhongzichang.com/archives/269/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Continuum 的分布式建造</title>
		<link>http://www.zhongzichang.com/archives/266</link>
		<comments>http://www.zhongzichang.com/archives/266#comments</comments>
		<pubDate>Tue, 24 Aug 2010 02:27:11 +0000</pubDate>
		<dc:creator>zhongzichang</dc:creator>
				<category><![CDATA[Continuum]]></category>

		<guid isPermaLink="false">http://www.zhongzichang.com/?p=266</guid>
		<description><![CDATA[介绍 对于基本的Continuum功能来讲，分布式建造是一个扩展，它让我们有能力处理多个独立的建造，超越单个服务器的处理能力。同时，让我们能够在多个不同的平台上执行建造，对所有的项目建造保持一个统一的视图。 架构 Continuum遵循一个使用XML-RPC的CS模式。然而，由于它使用 bi-directional XML-RPC 实现，我们使用Master和Build Agent来区分组件。 Master就是一个Continuum实例，它可以分配builds到已经注册的Build Agent。 Build Agent是一个Jetty-bundled webapp，监听来自Master的建造请求。 Master和Build Agents是一个一对多的关系。Master可有多个Build Agents，一个Build Agent只能有一个 Master。 行为 分布式建造发生在Continuum的项目组层次。当整个项目组在Master中建造，独立的项目被分发到单个Build Agent。 一个项目组是多个项目的混合，分布式的工作由下面几个步骤完成： 1. 在 Master，项目组的建造被触发。 2. 项目组的每一个独立项目都被标识，作为一个单独项目或者一个多模块项目。 3. 对于每一个独立项目，Master迭代已注册的Build Agent列表，查询其有效性。查询是一个 XML-RPC ping() ，跟在一个 getBuildSizeOfAgent() 调用之后。 4. 如果一个Build Agent 有效， Master &#8230; <a href="http://www.zhongzichang.com/archives/266">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>介绍</strong></p>
<p>对于基本的Continuum功能来讲，分布式建造是一个扩展，它让我们有能力处理多个独立的建造，超越单个服务器的处理能力。同时，让我们能够在多个不同的平台上执行建造，对所有的项目建造保持一个统一的视图。</p>
<p><strong>架构</strong></p>
<p>Continuum遵循一个使用XML-RPC的CS模式。然而，由于它使用 bi-directional XML-RPC 实现，我们使用Master和Build Agent来区分组件。</p>
<p>Master就是一个Continuum实例，它可以分配builds到已经注册的Build Agent。</p>
<p>Build Agent是一个Jetty-bundled webapp，监听来自Master的建造请求。</p>
<p>Master和Build Agents是一个一对多的关系。Master可有多个Build Agents，一个Build Agent只能有一个 Master。</p>
<p><strong>行为</strong></p>
<p>分布式建造发生在Continuum的项目组层次。当整个项目组在Master中建造，独立的项目被分发到单个Build Agent。</p>
<p>一个项目组是多个项目的混合，分布式的工作由下面几个步骤完成：</p>
<p>1. 在 Master，项目组的建造被触发。</p>
<p>2. 项目组的每一个独立项目都被标识，作为一个单独项目或者一个多模块项目。</p>
<p>3. 对于每一个独立项目，Master迭代已注册的Build Agent列表，查询其有效性。查询是一个 XML-RPC ping() ，跟在一个 getBuildSizeOfAgent() 调用之后。</p>
<p>4. 如果一个Build Agent 有效， Master 收集建造需要的信息（SCM URL ,项目ID，等等）后，在调用buildProducts()，将这些信息和它的队列中最小数值的任务传递到 Build Agent。</p>
<p>5. Build Agent 处理这个建造请求：这个建造被排队和执行。在执行之前，Build Agent搜先执行一个 SCM checkout 或者一个 SCM update，跟随着一个SCM 修改记录来获取最新更新的日期，然后开始正式的建造。</p>
<p>6. 到这一点，当建造运行，Master可以调用cancelBuild() ，返回一个临时的建造结果，调用 getBuildResult() 更新建造的输出（在Master）。</p>
<p>7. 建造后，Build Agent调用回调方法 returenBuildResult()，返回完整的建造结果给Master，Master集合后提供统一的项目视图。</p>
<p><strong>设置</strong></p>
<ul>
<li>安装和配置一个或者多个Build Agent</li>
<li>在常规配置中，打开分布式建造的功能</li>
<li>将你的Build Agent添加到Continuum Master</li>
<li>将你的Build Agent添加到一个Build Agent 组</li>
<li>将你的Build Agent 组添加到一个建造环境</li>
<li>配置项目使用建造环境</li>
<li>确保项目组的本地仓库已配置好。在这个例子，它应该指向Build Agent  安装和运行的仓库的路径</li>
</ul>
<p>警告：你需要拥有一个远程仓库来保存Build Agent创建的成品，以致其他的agents能使用新的成品。</p>
<p>局限</p>
<ul>
<li>仅仅系统管理员可以打开和关闭分布式建造</li>
<li>如果指定的话，证件（例如svn证件）跟随一起传递，但如果服务器缓存被使用，需要在Build Agents单独完成</li>
<li>没有跟踪SCM的修改</li>
<li>Build Agent需要一个配置的web接口</li>
<li>项目组的所有项目被分配到同一个Build Agent</li>
</ul>
<p><strong>将来增强的功能</strong></p>
<ul>
<li>远程建造器</li>
<li>* 建造器在运程机器上安装，Continuum 管理者将发送动作来运行建造器。如果我们仅执行一个建造，一个动作将让所有的建造器（或者某些建造器，或者单个建造器）运行某些操作。动作将通过JMS发送，如果它们不想接收所有的动作，建造器可以应用一些过滤器。我们可以做一些并行的建造的同时，建造的顺序也需要遵从依赖树。要让依赖正确工作，每一个建造器需要使用一个中心本地仓库。可能我们能使用一个内部的Archiva。</li>
<li>* Continuum建造器做好了接收所有命令的配置，用户可以运行多平台的建造，每一个建造都定义了执行。</li>
<li>* Continuum建造器做好了接收某些项目类型的配置，用户可以根据项目组使用一个不同的建造器。在这里，项目的建造将被快速完成，因为命令被均衡到几个服务器。</li>
<li>*
<div id="_mcePaste">Continuum建造器可以为它能做的事情做好配置，用户可以在几台机器上安装建造器来均衡责任。在这里，可以运行一些并行的建造。</div>
<div id="_mcePaste">∘ 当建造器工作完成，将发送一条信息给管理者，通知处理结束。</div>
<p>Continuum建造器可以为它能做的事情做好配置，用户可以在几台机器上安装建造器来均衡责任。在这里，可以运行一些并行的建造。∘ 当建造器工作完成，将发送一条信息给管理者，通知处理结束。</li>
<li>* 当建造器工作完成，将发送一条信息给管理者，通知处理结束。</li>
<li>* 通讯用的JMS，我们可以增加监听器来创建报告和统计，记录一些信息。</li>
<li><span style="line-height: 13px;">基于规则的分发</span></li>
<li><span style="line-height: 13px;">* 下一个有效</span></li>
<li><span style="line-height: 13px;">* 负载均衡</span></li>
<li><span style="line-height: 13px;">* 目标环境匹配</span></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.zhongzichang.com/archives/266/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Continuum 安装升级指南</title>
		<link>http://www.zhongzichang.com/archives/262</link>
		<comments>http://www.zhongzichang.com/archives/262#comments</comments>
		<pubDate>Fri, 20 Aug 2010 02:48:23 +0000</pubDate>
		<dc:creator>zhongzichang</dc:creator>
				<category><![CDATA[Continuum]]></category>

		<guid isPermaLink="false">http://www.zhongzichang.com/?p=262</guid>
		<description><![CDATA[系统需求 JDK &#62; 1.5 内存 没有最小需求 磁盘 最少30MB，Checking out 和 building sources 时需要更多 操作系统 没有最小需求。在 Windows XP, Debian, Fedora Core, Solaris 和 Mac OSX都做过测试 不同的安装环境（standalone， webapp， service） Standalone 独立运行的安装 基本原理和原则 1.下载standalone版本 2. 解压文件 3. 设置JAVA_HOME环境变量 定义JNDI资源 邮件服务器配置 在你启动Continuum之前，你必须配置你的SMTP配置来支持邮件通知。配置在 $CONTINUUM_HOME/conf/jetty.xml中进行： &#60;New &#8230; <a href="http://www.zhongzichang.com/archives/262">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="_mcePaste">系统需求</div>
<div id="_mcePaste">JDK &gt; 1.5</div>
<div id="_mcePaste">内存	没有最小需求</div>
<div id="_mcePaste">磁盘	最少30MB，Checking out 和 building sources 时需要更多</div>
<div id="_mcePaste">操作系统	没有最小需求。在 Windows XP, Debian, Fedora Core, Solaris 和 Mac OSX都做过测试</div>
<div id="_mcePaste">不同的安装环境（standalone， webapp， service）</div>
<div id="_mcePaste">Standalone 独立运行的安装</div>
<div id="_mcePaste">基本原理和原则</div>
<div id="_mcePaste">1.下载standalone版本</div>
<div id="_mcePaste">2. 解压文件</div>
<div id="_mcePaste">3. 设置JAVA_HOME环境变量</div>
<div id="_mcePaste">定义JNDI资源</div>
<div id="_mcePaste">邮件服务器配置</div>
<div id="_mcePaste">在你启动Continuum之前，你必须配置你的SMTP配置来支持邮件通知。配置在 $CONTINUUM_HOME/conf/jetty.xml中进行：</div>
<div id="_mcePaste">&lt;New id=&#8221;validation_mail&#8221;&gt;</div>
<div id="_mcePaste">&lt;Arg&gt;mail/Session&lt;/Arg&gt;</div>
<div id="_mcePaste">&lt;Arg&gt;</div>
<div id="_mcePaste">&lt;New&gt;</div>
<div id="_mcePaste">&lt;Set name=&#8221;user&#8221;&gt;&lt;/Set&gt;</div>
<div id="_mcePaste">&lt;Set name=&#8221;password&#8221;&gt;&lt;/Set&gt;</div>
<div id="_mcePaste">&lt;Set name=&#8221;properties&#8221;&gt;</div>
<div id="_mcePaste">&lt;New&gt;</div>
<div id="_mcePaste">&lt;Put name=&#8221;mail.smtp.host&#8221;&gt;localhost&lt;/Put&gt;</div>
<div id="_mcePaste">&lt;/New&gt;</div>
<div id="_mcePaste">&lt;/Set&gt;</div>
<div id="_mcePaste">&lt;/New&gt;</div>
<div id="_mcePaste">&lt;/Arg&gt;</div>
<div id="_mcePaste">&lt;/New&gt;</div>
<div id="_mcePaste">数据库配置</div>
<div id="_mcePaste">缺省情况下，Continuum使用一个嵌入的Derby数据库。如果你想使用其他的数据库，你可以修改 $CONTINUUM_HOME/conf/jetty.xml 的 JNDI 配置：</div>
<div id="_mcePaste">&lt;!&#8211; continuum database &#8211;&gt;</div>
<div id="_mcePaste">&lt;New id=&#8221;continuum&#8221;&gt;</div>
<div id="_mcePaste">&lt;Arg&gt;jdbc/continuum&lt;/Arg&gt;</div>
<div id="_mcePaste">&lt;Arg&gt;</div>
<div id="_mcePaste">&lt;New&gt;</div>
<div id="_mcePaste">&lt;Set name=&#8221;DatabaseName&#8221;&gt;&lt;SystemProperty name=&#8221;appserver.base&#8221; default=&#8221;..&#8221;/&gt;/data/databases/continuum&lt;/Set&gt;</div>
<div id="_mcePaste">&lt;Set name=&#8221;user&#8221;&gt;sa&lt;/Set&gt;</div>
<div id="_mcePaste">&lt;Set name=&#8221;createDatabase&#8221;&gt;create&lt;/Set&gt;</div>
<div id="_mcePaste">&lt;/New&gt;</div>
<div id="_mcePaste">&lt;/Arg&gt;</div>
<div id="_mcePaste">&lt;/New&gt;</div>
<div id="_mcePaste">&lt;New id=&#8221;continuumShutdown&#8221;&gt;</div>
<div id="_mcePaste">&lt;Arg&gt;jdbc/continuumShutdown&lt;/Arg&gt;</div>
<div id="_mcePaste">&lt;Arg&gt;</div>
<div id="_mcePaste">&lt;New&gt;</div>
<div id="_mcePaste">&lt;Set name=&#8221;DatabaseName&#8221;&gt;&lt;SystemProperty name=&#8221;appserver.base&#8221; default=&#8221;..&#8221;/&gt;/data/databases/continuum&lt;/Set&gt;</div>
<div id="_mcePaste">&lt;Set name=&#8221;user&#8221;&gt;sa&lt;/Set&gt;</div>
<div id="_mcePaste">&lt;Set name=&#8221;shutdownDatabase&#8221;&gt;shutdown&lt;/Set&gt;</div>
<div id="_mcePaste">&lt;/New&gt;</div>
<div id="_mcePaste">&lt;/Arg&gt;</div>
<div id="_mcePaste">&lt;/New&gt;</div>
<div id="_mcePaste">&lt;!&#8211; Users / Security Database &#8211;&gt;</div>
<div id="_mcePaste">&lt;New id=&#8221;users&#8221;&gt;</div>
<div id="_mcePaste">&lt;Arg&gt;jdbc/users&lt;/Arg&gt;</div>
<div id="_mcePaste">&lt;Arg&gt;</div>
<div id="_mcePaste">&lt;New&gt;</div>
<div id="_mcePaste">&lt;Set name=&#8221;DatabaseName&#8221;&gt;&lt;SystemProperty name=&#8221;appserver.base&#8221; default=&#8221;..&#8221;/&gt;/data/databases/users&lt;/Set&gt;</div>
<div id="_mcePaste">&lt;Set name=&#8221;user&#8221;&gt;sa&lt;/Set&gt;</div>
<div id="_mcePaste">&lt;Set name=&#8221;createDatabase&#8221;&gt;create&lt;/Set&gt;</div>
<div id="_mcePaste">&lt;/New&gt;</div>
<div id="_mcePaste">&lt;/Arg&gt;</div>
<div id="_mcePaste">&lt;/New&gt;</div>
<div id="_mcePaste">&lt;New id=&#8221;usersShutdown&#8221;&gt;</div>
<div id="_mcePaste">&lt;Arg&gt;jdbc/usersShutdown&lt;/Arg&gt;</div>
<div id="_mcePaste">&lt;Arg&gt;</div>
<div id="_mcePaste">&lt;New&gt;</div>
<div id="_mcePaste">&lt;Set name=&#8221;DatabaseName&#8221;&gt;&lt;SystemProperty name=&#8221;appserver.base&#8221; default=&#8221;..&#8221;/&gt;/data/databases/users&lt;/Set&gt;</div>
<div id="_mcePaste">&lt;Set name=&#8221;user&#8221;&gt;sa&lt;/Set&gt;</div>
<div id="_mcePaste">&lt;Set name=&#8221;shutdownDatabase&#8221;&gt;shutdown&lt;/Set&gt;</div>
<div id="_mcePaste">&lt;/New&gt;</div>
<div id="_mcePaste">&lt;/Arg&gt;</div>
<div id="_mcePaste">&lt;/New&gt;</div>
<div id="_mcePaste">安装Windows服务</div>
<div id="_mcePaste">1. 执行 continuum.bat install</div>
<div id="_mcePaste">2. 编辑 Apache continuum 服务</div>
<div id="_mcePaste">要查看你计算机上的服务，开始-》运行，输入 services.msc</div>
<div id="_mcePaste">3. 选择启动类型Startup Type</div>
<div id="_mcePaste">4. 打开 Log On 标签页，选择一个真实用户。真实用户需要，是因为你需要一个home目录来存放Maven仓库和其他的内容</div>
<div id="_mcePaste">5. 检查你的修改</div>
<div id="_mcePaste">安装Linux服务</div>
<div id="_mcePaste">• /etc/init.d 里面的基本脚本</div>
<div id="_mcePaste">在 /etc/init.d/ 创建一个 continuum 文件，内容如下，用你已有的帐号名取代 continuum_user:</div>
<div id="_mcePaste">#!/bin/sh</div>
<div id="_mcePaste">CONTINUUM_HOME=/opt/continuum-1.3</div>
<div id="_mcePaste">su &#8211; continuum_user -c &#8220;$CONTINUUM_HOME/bin/continuum console $@ &amp;&#8221;</div>
<div id="_mcePaste">• 在基于Debian的系统</div>
<div id="_mcePaste">ln -s /usr/local/continuum-[VERSION]/bin/continuum /etc/init.d/continuum</div>
<div id="_mcePaste">在不同的运行级别上添加软连接，执行</div>
<div id="_mcePaste">update-rc.d -n continuum defaults 80</div>
<div id="_mcePaste">• 在基于RedHat的系统上</div>
<div id="_mcePaste">需要使用 chkconfig 命令来添加新的服务。需要增加一些注释到 /etc/rc.d/init.d/continuum 脚本，并且执行执行一些命令。编写一个chkconfig_install.sh 的脚本来完成上面的工作。内容如下，其中 _continuum_user_ 需要用你已有的帐号名来取代。</div>
<div id="_mcePaste">#! /bin/sh</div>
<div id="_mcePaste">#</div>
<div id="_mcePaste"># chkconfig_install.sh &#8211; install Continuum on a chkconfig-based system</div>
<div id="_mcePaste">#</div>
<div id="_mcePaste"># Author: Felipe Leme &lt;felipeal at apache.org&gt;</div>
<div id="_mcePaste">#</div>
<div id="_mcePaste"># figure out what&#8217;s Continuum&#8217;s directory</div>
<div id="_mcePaste">CONTINUUM_HOME=`dirname $0`</div>
<div id="_mcePaste">cd ${CONTINUUM_HOME}</div>
<div id="_mcePaste">CONTINUUM_HOME=`pwd`</div>
<div id="_mcePaste">INITD_SCRIPT=/etc/rc.d/init.d/continuum</div>
<div id="_mcePaste">if [ -f ${INITD_SCRIPT} ]</div>
<div id="_mcePaste">then</div>
<div id="_mcePaste">echo &#8220;File ${INITD_SCRIPT} already exists. Please remove it and try again.&#8221;</div>
<div id="_mcePaste">exit 1</div>
<div id="_mcePaste">fi</div>
<div id="_mcePaste">echo &#8220;Creating file ${INITD_SCRIPT}&#8221;</div>
<div id="_mcePaste">cat &gt;&gt; ${INITD_SCRIPT} &lt;&lt;EOF</div>
<div id="_mcePaste">#! /bin/sh</div>
<div id="_mcePaste"># chkconfig: 345 90 10</div>
<div id="_mcePaste"># description: Apache Continuum server</div>
<div id="_mcePaste"># uncoment to set JAVA_HOME as the value present when Continuum installed</div>
<div id="_mcePaste">#export JAVA_HOME=${JAVA_HOME}</div>
<div id="_mcePaste">if [ -z "\${JAVA_HOME}" ]</div>
<div id="_mcePaste">then</div>
<div id="_mcePaste">echo &#8220;Cannot manage Continuum without variable JAVA_HOME set&#8221;</div>
<div id="_mcePaste">echo &#8221;  (try to set it on file ${INITD_SCRIPT})&#8221;</div>
<div id="_mcePaste">exit 1</div>
<div id="_mcePaste">fi</div>
<div id="_mcePaste"># run Continuum as root</div>
<div id="_mcePaste">cd ${CONTINUUM_HOME}</div>
<div id="_mcePaste">./bin/continuum \$*</div>
<div id="_mcePaste"># run Continuum as user _continuum_user_</div>
<div id="_mcePaste">#su &#8211; _continuum_user_ -c &#8220;cd ${CONTINUUM_HOME}; ./bin/continuum \$*&#8221;</div>
<div id="_mcePaste">EOF</div>
<div id="_mcePaste">chmod +x ${INITD_SCRIPT}</div>
<div id="_mcePaste">echo &#8220;Adding Continuum to chkconfig&#8221;</div>
<div id="_mcePaste">chkconfig &#8211;add continuum</div>
<div id="_mcePaste">echo &#8220;Enabling Continuum on chkconfig&#8221;</div>
<div id="_mcePaste">chkconfig continuum on</div>
<div id="_mcePaste">echo &#8220;Continuum set to start on run levels 3, 4 and 5.&#8221;</div>
<div id="_mcePaste">echo &#8220;To start Continuum now, run &#8216;service continuum start&#8217;&#8221;</div>
]]></content:encoded>
			<wfw:commentRss>http://www.zhongzichang.com/archives/262/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache Archiva 的安全角色</title>
		<link>http://www.zhongzichang.com/archives/259</link>
		<comments>http://www.zhongzichang.com/archives/259#comments</comments>
		<pubDate>Fri, 20 Aug 2010 02:46:20 +0000</pubDate>
		<dc:creator>zhongzichang</dc:creator>
				<category><![CDATA[Archiva]]></category>

		<guid isPermaLink="false">http://www.zhongzichang.com/?p=259</guid>
		<description><![CDATA[Archiva使用Redback安全框架来管理仓库的安全。当服务器第一次启动，将提示你创建管理员用户。这个用户有系统的所有权限。这个用户可以赋予权限给其他的用户。 缺省情况下，一个guest用户被创建，对缺省的仓库（internal和snapshots）赋予读访问的权限。能用guest用户访问的仓库，不需要输入用户名和密码（或者不需要登录web界面）。 当新的仓库创建，缺省没有赋予任何权限，仅仅管理员能访问。 注意 Redback 有推测角色的概念， 因此一些角色的分配将指向其他的角色（在web界面有显示）。 仓库角色 Archiva对于仓库的访问，有下面几种角色： repository observer ： 有权读取指定仓库 repository manager ： 有权读写指定仓库 global repository observer ：有权读取所有仓库 global repository manager ：有限读写所有仓库 一般角色 系统管理员：能使用系统的所有功能 用户管理员：对系统的其他用户，有创建、编辑和指定角色的权限。 guest 和 registered user 角色并不影响参考的访问。]]></description>
			<content:encoded><![CDATA[<p>Archiva使用Redback安全框架来管理仓库的安全。当服务器第一次启动，将提示你创建管理员用户。这个用户有系统的所有权限。这个用户可以赋予权限给其他的用户。</p>
<p>缺省情况下，一个guest用户被创建，对缺省的仓库（internal和snapshots）赋予读访问的权限。能用guest用户访问的仓库，不需要输入用户名和密码（或者不需要登录web界面）。</p>
<p>当新的仓库创建，缺省没有赋予任何权限，仅仅管理员能访问。</p>
<p>注意 Redback 有推测角色的概念， 因此一些角色的分配将指向其他的角色（在web界面有显示）。</p>
<p><strong>仓库角色</strong></p>
<p>Archiva对于仓库的访问，有下面几种角色：</p>
<ul>
<li>repository observer ： 有权读取指定仓库</li>
<li>repository manager ： 有权读写指定仓库</li>
<li>global repository observer ：有权读取所有仓库</li>
<li>global repository manager ：有限读写所有仓库</li>
</ul>
<p><strong>一般角色</strong></p>
<ul>
<li>系统管理员：能使用系统的所有功能</li>
<li>用户管理员：对系统的其他用户，有创建、编辑和指定角色的权限。</li>
<li>guest 和 registered user 角色并不影响参考的访问。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.zhongzichang.com/archives/259/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
