<?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>Fwolf's Blog</title>
	<atom:link href="http://www.fwolf.com/blog/feed" rel="self" type="application/rss+xml" />
	<link>http://www.fwolf.com/blog</link>
	<description>随心·随意·随缘·努力～</description>
	<lastBuildDate>Tue, 30 Jun 2009 17:27:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Curl奇怪的403错误</title>
		<link>http://www.fwolf.com/blog/post/444</link>
		<comments>http://www.fwolf.com/blog/post/444#comments</comments>
		<pubDate>Tue, 30 Jun 2009 17:27:33 +0000</pubDate>
		<dc:creator>Fwolf</dc:creator>
				<category><![CDATA[Develop]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[403]]></category>
		<category><![CDATA[curl]]></category>
		<category><![CDATA[error]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[proxy]]></category>
		<category><![CDATA[tunnel]]></category>

		<guid isPermaLink="false">http://www.fwolf.com/blog/?p=444</guid>
		<description><![CDATA[自己用的小PHP应用，使用curl抓网页下来处理，为了穿墙方便，使用Privoxy作为代理，便于选择哪些网站使用proxy、哪些不用。但今天却遇到了奇怪的问题，访问google baidu这些网站居然都返回403错误，而访问其他的一些网站没事，如果设置为不使用proxy则都能正常访问。

难道google baidu就不让用proxy连接么？显然不可能，所以打开curl的信息输出（curl_setopt($this-&#62;mSh, CURLOPT_VERBOSE, 1);）看看，得到以下结果：

*   Trying 127.0.0.1... * connected
* Connected to 127.0.0.1 (127.0.0.1) port 8118 (#0)
* Establish HTTP proxy tunnel to www.baidu.com:80
&#62; CONNECT www.baidu.com:80 HTTP/1.0
Host: www.baidu.com:80
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Proxy-Connection: Keep-Alive

&#60; HTTP/1.0 403 Connection not allowable
&#60; X-Hint: If you read this message interactively, then you know why this happens [...]]]></description>
			<content:encoded><![CDATA[<p>自己用的小PHP应用，使用curl抓网页下来处理，为了穿墙方便，使用Privoxy作为代理，便于选择哪些网站使用proxy、哪些不用。但今天却遇到了奇怪的问题，访问google baidu这些网站居然都返回403错误，而访问其他的一些网站没事，如果设置为不使用proxy则都能正常访问。</p>

<p>难道google baidu就不让用proxy连接么？显然不可能，所以打开curl的信息输出（<code>curl_setopt($this-&gt;mSh, CURLOPT_VERBOSE, 1);</code>）看看，得到以下结果：</p>

<pre><code>*   Trying 127.0.0.1... * connected
* Connected to 127.0.0.1 (127.0.0.1) port 8118 (#0)
* Establish HTTP proxy tunnel to www.baidu.com:80
&gt; CONNECT www.baidu.com:80 HTTP/1.0
Host: www.baidu.com:80
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Proxy-Connection: Keep-Alive

&lt; HTTP/1.0 403 Connection not allowable
&lt; X-Hint: If you read this message interactively, then you know why this happens ,-)
&lt; 
* The requested URL returned error: 403
* Received HTTP code 403 from proxy after CONNECT
* Closing connection #0
... Failed.
</code></pre>

<p>可以看到proxy服务器工作正常，的确是baidu返回了403错误，但原因肯定还在我这边。终于，从网上（<a href="http://curl.haxx.se/mail/archive-2006-04/0054.html">1of2</a>, <a href="http://curl.haxx.se/mail/archive-2006-04/0055.html">2of2</a>）得到了点启发──我使用的是proxytunnel而非proxy。</p>

<p>在代码中，有这么一句：</p>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">	<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">mSh</span><span style="color: #339933;">,</span> CURLOPT_HTTPPROXYTUNNEL<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">mSh</span><span style="color: #339933;">,</span> CURLOPT_PROXY<span style="color: #339933;">,</span> <span style="color: #000088;">$phost</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>


<p>php文档中没有详细说明，不过<code>man curl</code>中有详细解释，两者都是代理，proxytunnel（<code>-p参数</code>）允许其他协议通过http代理传输，而proxy（<code>-x参数</code>）则只能走http协议。所以我猜测，google baidu的服务器和curl的proxytunnel不和，所以返回403。</p>

<p>禁用掉上面2行代码的第一句后，curl访问恢复正常。</p>

<p>比较奇怪的是，几种操作系统下还不一样，一台MAC OSX就要显式的禁用proxytunnel才可以，curl版本：</p>

<pre><code>$ curl --version
curl 7.16.3 (powerpc-apple-darwin9.0) libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Protocols: tftp ftp telnet dict ldap http file https ftps 
Features: GSS-Negotiate IPv6 Largefile NTLM SSL libz 
</code></pre>

<p>而另外一台ubuntu则完全不受影响，怎么都能用，curl版本：</p>

<pre><code>$ curl --version
curl 7.18.2 (i486-pc-linux-gnu) libcurl/7.18.2 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/1.10
Protocols: tftp ftp telnet dict ldap ldaps http file https ftps 
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz 
</code></pre>

<p>MT主机上的centos也没事，curl版本：</p>

<pre><code>$ curl --version
curl 7.15.5 (i686-redhat-linux-gnu) libcurl/7.15.5 OpenSSL/0.9.8b zlib/1.2.3 libidn/0.6.5
Protocols: tftp ftp telnet dict ldap http file https ftps 
Features: GSS-Negotiate IDN IPv6 Largefile NTLM SSL libz 
</code></pre>

<p>看来不完全是curl版本问题，MAC OSX的确与众不同啊。</p>

<p>还有一个原因也会导致curl返回403错误，如果设置了：</p>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">	<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_NOBODY<span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>


<p>则需要紧跟着设置：</p>


<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">	<span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_CUSTOMREQUEST<span style="color: #339933;">,</span> <span style="color: #0000ff;">'GET'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>


<p>不然会因为http服务器不允许 HEAD 命令而返回403错误。参考：<a href="http://forums.devshed.com/php-development-5/trouble-with-a-curl-request-in-php-445222.html">Trouble with a cURL request in PHP</a>。MAC OSX上curl之所以特殊，也不排除是这种原因吧。</p>

	Tags: <a href="http://www.fwolf.com/blog/post/tag/403" title="403" rel="tag">403</a>, <a href="http://www.fwolf.com/blog/post/tag/curl" title="curl" rel="tag">curl</a>, <a href="http://www.fwolf.com/blog/post/tag/error" title="error" rel="tag">error</a>, <a href="http://www.fwolf.com/blog/post/tag/http" title="http" rel="tag">http</a>, <a href="http://www.fwolf.com/blog/post/tag/php" title="PHP" rel="tag">PHP</a>, <a href="http://www.fwolf.com/blog/post/tag/proxy" title="proxy" rel="tag">proxy</a>, <a href="http://www.fwolf.com/blog/post/tag/tunnel" title="tunnel" rel="tag">tunnel</a><br />

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.fwolf.com/blog/post/411" title="由一个错误学到的一些php安全配置问题 (2008-07-13)">由一个错误学到的一些php安全配置问题</a> (2)</li>
	<li><a href="http://www.fwolf.com/blog/post/391" title="adodb5连接sybase的一个错误 (2008-03-25)">adodb5连接sybase的一个错误</a> (0)</li>
	<li><a href="http://www.fwolf.com/blog/post/300" title="针对$_SERVER['PHP_SELF']的跨站脚本攻击（XSS） (2007-03-18)">针对$_SERVER['PHP_SELF']的跨站脚本攻击（XSS）</a> (3)</li>
	<li><a href="http://www.fwolf.com/blog/post/443" title="配置安全的共享web服务器（抛砖引玉） (2009-06-09)">配置安全的共享web服务器（抛砖引玉）</a> (3)</li>
	<li><a href="http://www.fwolf.com/blog/post/400" title="选择Eclipse PHP Development Tools(PDT)作为PHP开发工具 (2008-05-03)">选择Eclipse PHP Development Tools(PDT)作为PHP开发工具</a> (6)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.fwolf.com/blog/post/444/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>配置安全的共享web服务器（抛砖引玉）</title>
		<link>http://www.fwolf.com/blog/post/443</link>
		<comments>http://www.fwolf.com/blog/post/443#comments</comments>
		<pubDate>Tue, 09 Jun 2009 10:26:35 +0000</pubDate>
		<dc:creator>Fwolf</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[safe]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[sftp]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://www.fwolf.com/blog/?p=443</guid>
		<description><![CDATA[本文所讲的共享web服务器，并非共享文件的服务器，而是多人一起使用的web服务器，各有各自的网站、管理自己的文件，互不干涉，且对系统无影响。鉴于功力较浅，只敢对较信得过的朋友开放这种账号，本文涉及的范围也有限，所以安全漏洞可能还有，请诸位切勿直接用于生产环境。

服务器环境：Ubuntu 8.10, OpenSSH_5.1p1 Debian-3ubuntu1, Apache 2.2.9, PHP 5.2.6-2ubuntu4

登录 &#8211; SFTP

传统的 FTP 肯定是不如这个安全，telnet 更不用说了。使用 SFTP 还有一个起始想法是想配置证书自动登录，后来发现 SFTP 客户端（FileZilla）没这功能，就没再作下去，命令行下 scp 的自动登录倒是 和 ssh 的一样很好配置。

网上很多文章介绍把 sftp 用户限制在 $HOME 目录下的方法，使用的是 sshd 的 ChrootGroups 选项，这个选项在我的版本里没有找到，找到另外一篇参考文章使用的是 ChrootDirectory，也很好用。

创建一个用户组，作为所有 sftp 用户的用户组：

$ sudo groupadd sftp


创建用户，设置密码，并归入 sftp 组：

$ sudo useradd -m friend
$ sudo passwd friend
$ sudo usermod -g sftp friend


为了进一步增强安全性，还可以将用户的登录 shell 设置为 /bin/false，是个好习惯，但在本例中并非必须，下面的 sshd 设置也会让用户无法登录 [...]]]></description>
			<content:encoded><![CDATA[<p>本文所讲的共享web服务器，并非共享文件的服务器，而是多人一起使用的web服务器，各有各自的网站、管理自己的文件，互不干涉，且对系统无影响。鉴于功力较浅，只敢对较信得过的朋友开放这种账号，本文涉及的范围也有限，所以安全漏洞可能还有，请诸位切勿直接用于生产环境。</p>

<p>服务器环境：Ubuntu 8.10, OpenSSH_5.1p1 Debian-3ubuntu1, Apache 2.2.9, PHP 5.2.6-2ubuntu4</p>

<h3>登录 &#8211; SFTP</h3>

<p>传统的 FTP 肯定是不如这个安全，telnet 更不用说了。使用 SFTP 还有一个起始想法是想配置证书自动登录，后来发现 SFTP 客户端（FileZilla）没这功能，就没再作下去，命令行下 scp 的自动登录倒是 和<a href="279"> ssh 的</a>一样很好配置。</p>

<p>网上很多文章介绍把 sftp 用户限制在 <code>$HOME</code> 目录下的方法，使用的是 sshd 的 ChrootGroups 选项，这个选项在我的版本里没有找到，找到<a href="http://shapeshed.com/journal/chroot_sftp_users_on_ubuntu_intrepid/">另外一篇参考文章</a>使用的是 ChrootDirectory，也很好用。</p>

<p>创建一个用户组，作为所有 sftp 用户的用户组：</p>

<pre><code>$ sudo groupadd sftp
</code></pre>

<p>创建用户，设置密码，并归入 sftp 组：</p>

<pre><code>$ sudo useradd -m friend
$ sudo passwd friend
$ sudo usermod -g sftp friend
</code></pre>

<p>为了进一步增强安全性，还可以将用户的登录 shell 设置为 <code>/bin/false</code>，是个好习惯，但在本例中并非必须，下面的 sshd 设置也会让用户无法登录 shell （我观察的结果）。</p>

<pre><code>$ sudo usermod -s /bin/false friend
</code></pre>

<p>下来就要配置 sshd 了，编辑配置文件 <code>/etc/ssh/sshd_config</code>：</p>

<pre><code># 修改下面这句
#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp
</code></pre>

<p>然后在此配置文件末尾添加：</p>

<pre><code>Match group sftp
    X11Forwarding no
    ChrootDirectory %h
    AllowTcpForwarding no
    ForceCommand internal-sftp
</code></pre>

<p>配置含义大概为：凡是 sftp 组的用户，关闭 X 转发，chroot 到 <code>$HOME</code> 目录，关闭 TCP 转发（无法使用隧道了？），强制使用 internal-sftp（这个不明白）。</p>

<p>现在，重启 ssh 服务，用户就只能通过 sftp 访问 <code>/home/friend</code> 下的文件了。</p>

<p>PS: 我发现 sshd 如果配置错误，在 restart 服务的时候会先检查，而不是直接 stop 服务然后在 start 的时候出现错误，搞得服务启不来。大概是考虑到很多人都是远程 ssh 上来进行维护，服务 down 了以后就麻烦了，很贴心的设置。</p>

<h3>Apache &amp; PHP</h3>

<p>Apache 配置简单，创建 <code>/home/friend/www</code> 目录，约定网站文件都放在这个目录下，然后弄个 Alias 指向就可以了。</p>

<p>但有一个极大的安全隐患需要堵上，用户可以通过编写 PHP 程序，读取系统中任何 www-data 用户有权限访问的文件，包括系统的 shadow 文件，包括 其它用户的网站文件等等。解决这个问题，一种是开启 PHP 的 safe_mode ，安全模式下 PHP 将只能访问 owner 为自己（也就是 www-data）的文件；另外一种是使用 <a href="http://cn2.php.net/manual/en/ini.sect.safe-mode.php">open_basedir</a>，这将限制 PHP 只能打开某一目录树下的文件，并且不可能通过符号链接避开此限制。显然 safe_mode 的副作用太多，后一种方法更适合我的这种情况，配置写到 Apache 的 conf 里就行了：</p>

<pre><code>&lt;Directory /home/friend&gt;
    php_admin_value open_basedir "/home/friend/"
&lt;/Directory&gt;
</code></pre>

<p>注意open_basedir 后面的参数只代表文件路径的前缀，所以要带上末尾的斜杠，明确指出是目录。</p>

<p>不使用 safe_mode 的另外一个原因是在未来的 PHP6 里就要删掉它了。</p>

<h3>缺点</h3>

<p>最大的缺点就是 sftp 用户无法自己更改密码，除非自己写个守护程序啥的。这个程序在写的时候要非常小心，因为操作的是系统用户文件，如果遗留有安全漏洞可能会使别人获得其它用户权限。一个折中的方法是写个程序，定期更改密码并通过邮件告知用户，虽不方便但安全性要好一些。</p>

	Tags: <a href="http://www.fwolf.com/blog/post/tag/apache" title="Apache" rel="tag">Apache</a>, <a href="http://www.fwolf.com/blog/post/tag/php" title="PHP" rel="tag">PHP</a>, <a href="http://www.fwolf.com/blog/post/tag/safe" title="safe" rel="tag">safe</a>, <a href="http://www.fwolf.com/blog/post/tag/security" title="security" rel="tag">security</a>, <a href="http://www.fwolf.com/blog/post/tag/sftp" title="sftp" rel="tag">sftp</a>, <a href="http://www.fwolf.com/blog/post/tag/ssh" title="ssh" rel="tag">ssh</a><br />

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.fwolf.com/blog/post/411" title="由一个错误学到的一些php安全配置问题 (2008-07-13)">由一个错误学到的一些php安全配置问题</a> (2)</li>
	<li><a href="http://www.fwolf.com/blog/post/300" title="针对$_SERVER['PHP_SELF']的跨站脚本攻击（XSS） (2007-03-18)">针对$_SERVER['PHP_SELF']的跨站脚本攻击（XSS）</a> (3)</li>
	<li><a href="http://www.fwolf.com/blog/post/347" title="升级MT dv 3.0主机到php5 (2007-08-09)">升级MT dv 3.0主机到php5</a> (9)</li>
	<li><a href="http://www.fwolf.com/blog/post/127" title="利用SVN更新网站 (2006-01-19)">利用SVN更新网站</a> (7)</li>
	<li><a href="http://www.fwolf.com/blog/post/395" title="防止垃圾评论的另类方法 (2008-04-10)">防止垃圾评论的另类方法</a> (5)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.fwolf.com/blog/post/443/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Ubuntu升级到9.04 Jaunty的变化和遇到的问题</title>
		<link>http://www.fwolf.com/blog/post/442</link>
		<comments>http://www.fwolf.com/blog/post/442#comments</comments>
		<pubDate>Fri, 15 May 2009 15:20:55 +0000</pubDate>
		<dc:creator>Fwolf</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[fluxbox]]></category>
		<category><![CDATA[font]]></category>
		<category><![CDATA[jaunty]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<category><![CDATA[upgrade]]></category>
		<category><![CDATA[xorg]]></category>

		<guid isPermaLink="false">http://www.fwolf.com/blog/post/442</guid>
		<description><![CDATA[
长按键盘自动连续击键的间隔缩短了。
显卡驱动没有问题，终于能够摆脱8.10里像涂了墨水一样的中文字乱码了。
Firefox的速度好像也快了不少，或许也是显卡驱动的原因？
Fluxbox apps文件中Position设置LOWERLEFT/BOTTOMLEFT原来时从屏幕最下方算间距，现在时从工具栏上方开始算，所以原来的值要减去工具栏的高度（25）。
消失很久的启动时的Splash屏又回来了，不过是Xubuntu的小老鼠（我用的WM是Fluxbox），想取消的话，删掉usplash及其相关的包即可。


如果在没有正式发布的时候就升级了，每天的更新比正式发布后要多得多，每天都要下载一大堆包升级，得考虑好，当然你也可以忍着不频繁升级。

Fluxbox任务栏上当前聚焦的窗口和其他窗口的风格是一样的，区分不开了，更换任何styles都无效。

Firefox窗口的标题栏里中文字显示为方块

先这个是Gnome的问题，所有窗口标题栏中包含中文时都是方块，而Fluxbox工具栏上是能够正确显示中文的。尝试更换不同的fluxbox styles发现menu.title.font设置为dejavu字体时窗口标题栏就能正常显示中文了，其他的窗口内容、网页中文全部显示正常。

终于让我找到原因了，又是一个哭笑不得的问题，在我自定义风格里，使用了dejavusans这个字体，而这个字体现在好像在系统中找不到了，因此它就像出错后就不再往下执行了一样，导致后面overlay里定义的新字体也不生效，窗口栏上的中文就成方块了。换其他style之所以能正常显示窗口标题栏上的中文，是因为他们没用dejavusans这个字体。最后的解决方案，把这个自定义style里的dejavusans替换成dejavu -_-!

字体大小dpi优化

字体DPI设置会根据显示器进行优化，而不再局限于默认的96DPI，还可以在System → Preferences → Appearance → Fonts → Details里自行定义。原来是在.Xresources里设置的Xft.dpi:96，不知道还有用没。目前发现的问题是窗口标题栏中的文字比以前大了一些。

我的Fluxbox还遇到了一个问题，屏幕尺寸、位置计算出现了错误，原先我是/etc/gdm/Init/Default中用xrandr -s 1024x768强制重设分辨率，现在把这行禁用后发现桌面的“尺寸”比1024大，鼠标移动到屏幕边缘后会自动移动，但显示不全。


	$ xdpyinfo &#124;grep resolution
	  resolution:    78x78 dots per inch


78是显示器真正的dpi数，但按这个设置又显得字太小了。最后，把xorg.conf里大于1024的分辨率都删掉，这样就可以去掉上面xrandr那句了，显示也正常了，dpi仍然用的是96。

上某些网站中文字模糊（像粗体字那样的模糊）

打开/etc/fonts/conf.d/44-wqy-zenhei.conf，找到下面这行：


	&#60;edit name=&#34;antialias&#34; mode=&#34;assign&#34;&#62;&#60;bool&#62;true&#60;/bool&#62;&#60;/edit&#62;


把true改成false后重启X即可。

Ctrl+Alt+Backspace关闭X的组合键被禁用了

编辑/etc/X11/xorg.conf，在最后加上：


	Section &#34;ServerFlags&#34;
		Option &#34;DontZap&#34; &#34;no&#34;
	EndSection


	Tags: fluxbox, font, jaunty, Ubuntu, upgrade, xorg

	Related posts
	
	[Ubuntu]明明白白安装中文字体 (19)
	Ubuntu从Gutsy升级到Hardy，php5-sybase又掉链子 (2)
	接多显示器的一点提示 (0)
	升级到Ubuntu Intrepid后感觉到的一些变化 (0)
	升级到8.10 intrepid过程中libc6依赖性死循环问题的解决 (6)


]]></description>
			<content:encoded><![CDATA[<ul>
<li>长按键盘自动连续击键的间隔缩短了。</li>
<li>显卡驱动没有问题，终于能够摆脱8.10里像涂了墨水一样的中文字乱码了。</li>
<li>Firefox的速度好像也快了不少，或许也是显卡驱动的原因？</li>
<li>Fluxbox apps文件中Position设置LOWERLEFT/BOTTOMLEFT原来时从屏幕最下方算间距，现在时从工具栏上方开始算，所以原来的值要减去工具栏的高度（25）。</li>
<li>消失很久的启动时的Splash屏又回来了，不过是Xubuntu的小老鼠（我用的WM是Fluxbox），想取消的话，删掉<code>usplash</code>及其相关的包即可。</li>
</ul>

<p>如果在没有正式发布的时候就升级了，每天的更新比正式发布后要多得多，每天都要下载一大堆包升级，得考虑好，当然你也可以忍着不频繁升级。</p>

<h4>Fluxbox任务栏上当前聚焦的窗口和其他窗口的风格是一样的，区分不开了，更换任何styles都无效。</h4>

<h4>Firefox窗口的标题栏里中文字显示为方块</h4>

<p>先这个是Gnome的问题，所有窗口标题栏中包含中文时都是方块，而Fluxbox工具栏上是能够正确显示中文的。尝试更换不同的fluxbox styles发现<code>menu.title.font</code>设置为dejavu字体时窗口标题栏就能正常显示中文了，其他的窗口内容、网页中文全部显示正常。</p>

<p>终于让我找到原因了，又是一个哭笑不得的问题，在我自定义风格里，使用了dejavusans这个字体，而这个字体现在好像在系统中找不到了，因此它就像出错后就不再往下执行了一样，导致后面overlay里定义的新字体也不生效，窗口栏上的中文就成方块了。换其他style之所以能正常显示窗口标题栏上的中文，是因为他们没用dejavusans这个字体。最后的解决方案，把这个自定义style里的dejavusans替换成dejavu -_-!</p>

<h4>字体大小dpi优化</h4>

<p>字体DPI设置会根据显示器进行优化，而不再局限于默认的96DPI，还可以在System → Preferences → Appearance → Fonts → Details里自行定义。原来是在<code>.Xresources</code>里设置的<code>Xft.dpi:96</code>，不知道还有用没。目前发现的问题是窗口标题栏中的文字比以前大了一些。</p>

<p>我的Fluxbox还遇到了一个问题，屏幕尺寸、位置计算出现了错误，原先我是<code>/etc/gdm/Init/Default</code>中用<code>xrandr -s 1024x768</code>强制重设分辨率，现在把这行禁用后发现桌面的“尺寸”比1024大，鼠标移动到屏幕边缘后会自动移动，但显示不全。</p>


<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">	$ xdpyinfo <span style="color: #000000; font-weight: bold;">|</span><span style="color: #c20cb9; font-weight: bold;">grep</span> resolution
	  resolution:    78x78 dots per inch</pre></div></div>


<p>78是显示器真正的dpi数，但按这个设置又显得字太小了。最后，把<code>xorg.conf</code>里大于1024的分辨率都删掉，这样就可以去掉上面<code>xrandr</code>那句了，显示也正常了，dpi仍然用的是96。</p>

<h4>上某些网站中文字模糊（像粗体字那样的模糊）</h4>

<p>打开<code>/etc/fonts/conf.d/44-wqy-zenhei.conf</code>，找到下面这行：</p>


<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;">	<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;edit</span> <span style="color: #000066;">name</span>=<span style="color: #ff0000;">&quot;antialias&quot;</span> <span style="color: #000066;">mode</span>=<span style="color: #ff0000;">&quot;assign&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;bool<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>true<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/bool<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;/edit<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>


<p>把true改成false后重启X即可。</p>

<h4>Ctrl+Alt+Backspace关闭X的组合键被禁用了</h4>

<p>编辑<code>/etc/X11/xorg.conf</code>，在最后加上：</p>


<div class="wp_syntax"><div class="code"><pre class="ini" style="font-family:monospace;">	Section <span style="color: #933;">&quot;ServerFlags&quot;</span>
		Option <span style="color: #933;">&quot;DontZap&quot;</span> <span style="color: #933;">&quot;no&quot;</span>
	EndSection</pre></div></div>


	Tags: <a href="http://www.fwolf.com/blog/post/tag/fluxbox" title="fluxbox" rel="tag">fluxbox</a>, <a href="http://www.fwolf.com/blog/post/tag/font" title="font" rel="tag">font</a>, <a href="http://www.fwolf.com/blog/post/tag/jaunty" title="jaunty" rel="tag">jaunty</a>, <a href="http://www.fwolf.com/blog/post/tag/ubuntu" title="Ubuntu" rel="tag">Ubuntu</a>, <a href="http://www.fwolf.com/blog/post/tag/upgrade" title="upgrade" rel="tag">upgrade</a>, <a href="http://www.fwolf.com/blog/post/tag/xorg" title="xorg" rel="tag">xorg</a><br />

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.fwolf.com/blog/post/170" title="[Ubuntu]明明白白安装中文字体 (2006-05-17)">[Ubuntu]明明白白安装中文字体</a> (19)</li>
	<li><a href="http://www.fwolf.com/blog/post/403" title="Ubuntu从Gutsy升级到Hardy，php5-sybase又掉链子 (2008-06-12)">Ubuntu从Gutsy升级到Hardy，php5-sybase又掉链子</a> (2)</li>
	<li><a href="http://www.fwolf.com/blog/post/414" title="接多显示器的一点提示 (2008-07-17)">接多显示器的一点提示</a> (0)</li>
	<li><a href="http://www.fwolf.com/blog/post/428" title="升级到Ubuntu Intrepid后感觉到的一些变化 (2009-01-06)">升级到Ubuntu Intrepid后感觉到的一些变化</a> (0)</li>
	<li><a href="http://www.fwolf.com/blog/post/426" title="升级到8.10 intrepid过程中libc6依赖性死循环问题的解决 (2009-01-04)">升级到8.10 intrepid过程中libc6依赖性死循环问题的解决</a> (6)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.fwolf.com/blog/post/442/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>[Git]真正回滚已上传的更新</title>
		<link>http://www.fwolf.com/blog/post/441</link>
		<comments>http://www.fwolf.com/blog/post/441#comments</comments>
		<pubDate>Thu, 14 May 2009 10:32:50 +0000</pubDate>
		<dc:creator>Fwolf</dc:creator>
				<category><![CDATA[Svn/Git]]></category>
		<category><![CDATA[commit]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[reset]]></category>
		<category><![CDATA[revert]]></category>
		<category><![CDATA[rollback]]></category>
		<category><![CDATA[undo]]></category>

		<guid isPermaLink="false">http://www.fwolf.com/blog/post/441</guid>
		<description><![CDATA[首先，抛弃本地的修改应当用：

$ git reset --hard HEAD


使用 git 自身功能来回滚代码，取消上一次的修改应该用：

$ git revert sha1_of_commit


但要注意，虽然代码是实现了回滚，同时也会自动产生一条“回滚代码”的 log 。

有些时候，由于工作人员粗心，错误提交的内容完全无意义且占用空间颇大，就想真正 undo 掉错误的 commit，连历史记录都不想留。以下是我尝试的做法：

准备一份干净的客户端仓库

在客户端，下载服务器上的每个分支，并更新到最新状态。git branch -a查服务器上有哪些分支，挨个 checkout 过去再 pull。

然后回到有错误 commit 的分支，reset 掉错误的 commit：

$ git reset --hard 671475b1ce


这样在客户端就形成了一个已剔除掉错误 commit 的完整状态了。

从客户端仓库生成服务端仓库

这就是 git 分布式源代码管理的优势，客户端也是完整仓库，只是表现形式与服务端的不同罢了，两者之间可以转换。在本地仓库( repo.client )的上级目录中执行：

$ git clone --bare repo.client repo.git


然后把现在服务端仓库中的 hooks, info 目录和 config, description 两个文件拷贝到新生成的服务端仓库当中。

然后备份旧的服务端仓库，删掉用新生成服务端仓库替代，并调整相关文件权限。

基本上就可以了，小结

在客户端 pull：

$ git pull
From ssh://domain.tld/repo
 + 368b15f...671475b master    [...]]]></description>
			<content:encoded><![CDATA[<p>首先，抛弃本地的修改应当用：</p>

<pre><code>$ git reset --hard HEAD
</code></pre>

<p>使用 git 自身功能来回滚代码，取消上一次的修改应该用：</p>

<pre><code>$ git revert sha1_of_commit
</code></pre>

<p>但要注意，虽然代码是实现了回滚，同时也会自动产生一条“回滚代码”的 log 。</p>

<p>有些时候，由于工作人员粗心，错误提交的内容完全无意义且占用空间颇大，就想真正 undo 掉错误的 commit，连历史记录都不想留。以下是我尝试的做法：</p>

<h3>准备一份干净的客户端仓库</h3>

<p>在客户端，下载服务器上的每个分支，并更新到最新状态。<code>git branch -a</code>查服务器上有哪些分支，挨个 checkout 过去再 pull。</p>

<p>然后回到有错误 commit 的分支，reset 掉错误的 commit：</p>

<pre><code>$ git reset --hard 671475b1ce
</code></pre>

<p>这样在客户端就形成了一个已剔除掉错误 commit 的完整状态了。</p>

<h3>从客户端仓库生成服务端仓库</h3>

<p>这就是 git 分布式源代码管理的优势，客户端也是完整仓库，只是表现形式与服务端的不同罢了，两者之间可以转换。在本地仓库( repo.client )的上级目录中执行：</p>

<pre><code>$ git clone --bare repo.client repo.git
</code></pre>

<p>然后把现在服务端仓库中的 hooks, info 目录和 config, description 两个文件拷贝到新生成的服务端仓库当中。</p>

<p>然后备份旧的服务端仓库，删掉用新生成服务端仓库替代，并调整相关文件权限。</p>

<h3>基本上就可以了，小结</h3>

<p>在客户端 pull：</p>

<pre><code>$ git pull
From ssh://domain.tld/repo
 + 368b15f...671475b master     -&gt; origin/master  (forced update)
Already up-to-date.
</code></pre>

<p>客户端仓库的 HEAD 自动被重置到了错误 commit 之前的。</p>

<p>我这种做法，只适用于用户比较小，可以停掉服务慢慢弄的情况，并且会丢失所有错误 commit 之后的改动，所以要慎用。最好的方法还是搞好用户培训，避免产生离谱的错误提交，一些小的错误还是直接用revert好了。</p>

	Tags: <a href="http://www.fwolf.com/blog/post/tag/commit" title="commit" rel="tag">commit</a>, <a href="http://www.fwolf.com/blog/post/tag/git" title="git" rel="tag">git</a>, <a href="http://www.fwolf.com/blog/post/tag/reset" title="reset" rel="tag">reset</a>, <a href="http://www.fwolf.com/blog/post/tag/revert" title="revert" rel="tag">revert</a>, <a href="http://www.fwolf.com/blog/post/tag/rollback" title="rollback" rel="tag">rollback</a>, <a href="http://www.fwolf.com/blog/post/tag/undo" title="undo" rel="tag">undo</a><br />

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.fwolf.com/blog/post/127" title="利用SVN更新网站 (2006-01-19)">利用SVN更新网站</a> (7)</li>
	<li><a href="http://www.fwolf.com/blog/post/431" title="[Git]提交后自动发email (2009-03-27)">[Git]提交后自动发email</a> (2)</li>
	<li><a href="http://www.fwolf.com/blog/post/429" title="Git起步 (2009-03-26)">Git起步</a> (4)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.fwolf.com/blog/post/441/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mysql升级到5.1后库升级失败的问题</title>
		<link>http://www.fwolf.com/blog/post/440</link>
		<comments>http://www.fwolf.com/blog/post/440#comments</comments>
		<pubDate>Tue, 12 May 2009 17:32:39 +0000</pubDate>
		<dc:creator>Fwolf</dc:creator>
				<category><![CDATA[Database]]></category>
		<category><![CDATA[Problem]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[rename]]></category>
		<category><![CDATA[upgrade]]></category>
		<category><![CDATA[view]]></category>

		<guid isPermaLink="false">http://www.fwolf.com/blog/post/440</guid>
		<description><![CDATA[一台 mysql 5.0 服务器，升级到 5.1 后，发现原来有个 database 名字变成了 #mysql50#t-2008-zbb ，刚开始没在意想直接 RENAME DATABASE ，结果这个语法由于过渡危险已经取消了，改用ALTER DATABASE db_name UPGRADE DATA DIRECTORY NAME，结果执行错误：

mysql&#62; ALTER DATABASE `#mysql50#db_name` UPGRADE DATA DIRECTORY NAME;
ERROR 1450 (HY000): Changing schema from '#mysql50#db_name' to 'db_name' is not allowed.


原来这里面还有个 BUG ，刚刚修正过来，发行版中肯定还没有呢。幸好，从中得到了提示，因为 View 的存在导致库无法升级的，删掉所有视图后 UPGRADE 成功：

mysql&#62; ALTER DATABASE `#mysql50#db_name` UPGRADE DATA DIRECTORY NAME;
Query OK, 0 rows affected (0.08 [...]]]></description>
			<content:encoded><![CDATA[<p>一台 mysql 5.0 服务器，升级到 5.1 后，发现原来有个 database 名字变成了 <code>#mysql50#t-2008-zbb</code> ，刚开始没在意想直接 <code>RENAME DATABASE</code> ，结果<a href="http://dev.mysql.com/doc/refman/5.1/en/rename-database.html">这个语法由于过渡危险已经取消了</a>，改用<a href="http://dev.mysql.com/doc/refman/5.1/en/alter-database.html">ALTER DATABASE db_name UPGRADE DATA DIRECTORY NAME</a>，结果执行错误：</p>

<pre><code>mysql&gt; ALTER DATABASE `#mysql50#db_name` UPGRADE DATA DIRECTORY NAME;
ERROR 1450 (HY000): Changing schema from '#mysql50#db_name' to 'db_name' is not allowed.
</code></pre>

<p>原来这里面还有个 <a href="http://bugs.mysql.com/bug.php?id=43385">BUG</a> ，刚刚修正过来，发行版中肯定还没有呢。幸好，从中得到了提示，因为 View 的存在导致库无法升级的，删掉所有视图后 UPGRADE 成功：</p>

<pre><code>mysql&gt; ALTER DATABASE `#mysql50#db_name` UPGRADE DATA DIRECTORY NAME;
Query OK, 0 rows affected (0.08 sec)
</code></pre>

<p>这台服务器还作了双向同步，我还得手工重置同步状态，又是麻烦一连串儿的事情，幸亏这次操作的是测试服务器，下次升级正式服务器之前，记得先把所有 View 删掉，升级完成后再重新创建。</p>

<p>另外 <code>RENAME DATABASE</code> 实在是危险，我执行过程中出错终止了，结果一部分表在新库里、一部分表在旧库中，不小心把未转完的目标库删掉了（不然后面的正常 ALTER DATABASE 无法继续），结果就丢失了这些表的数据。</p>

	Tags: <a href="http://www.fwolf.com/blog/post/tag/mysql" title="mysql" rel="tag">mysql</a>, <a href="http://www.fwolf.com/blog/post/tag/problem" title="Problem" rel="tag">Problem</a>, <a href="http://www.fwolf.com/blog/post/tag/rename" title="rename" rel="tag">rename</a>, <a href="http://www.fwolf.com/blog/post/tag/upgrade" title="upgrade" rel="tag">upgrade</a>, <a href="http://www.fwolf.com/blog/post/tag/view" title="view" rel="tag">view</a><br />

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.fwolf.com/blog/post/426" title="升级到8.10 intrepid过程中libc6依赖性死循环问题的解决 (2009-01-04)">升级到8.10 intrepid过程中libc6依赖性死循环问题的解决</a> (6)</li>
	<li><a href="http://www.fwolf.com/blog/post/417" title="机房搬家过程中的几件趣事 (2009-03-22)">机房搬家过程中的几件趣事</a> (0)</li>
	<li><a href="http://www.fwolf.com/blog/post/404" title="忙碌的5月 (2008-06-13)">忙碌的5月</a> (8)</li>
	<li><a href="http://www.fwolf.com/blog/post/369" title="在无线网络中使用RADIUS服务器+mysql进行用户认证 (2007-11-15)">在无线网络中使用RADIUS服务器+mysql进行用户认证</a> (0)</li>
	<li><a href="http://www.fwolf.com/blog/post/428" title="升级到Ubuntu Intrepid后感觉到的一些变化 (2009-01-06)">升级到Ubuntu Intrepid后感觉到的一些变化</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.fwolf.com/blog/post/440/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
