<?xml version="1.0" encoding="UTF-8"?><!-- generator="WordPress/2.8" -->
<rss version="0.92">
<channel>
	<title>Fwolf's Blog</title>
	<link>http://www.fwolf.com/blog</link>
	<description>随心·随意·随缘·努力～</description>
	<lastBuildDate>Tue, 30 Jun 2009 17:27:33 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	
	<item>
		<title>Curl奇怪的403错误</title>
		<description>自己用的小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 ...</description>
		<link>http://www.fwolf.com/blog/post/444</link>
			</item>
	<item>
		<title>配置安全的共享web服务器（抛砖引玉）</title>
		<description>本文所讲的共享web服务器，并非共享文件的服务器，而是多人一起使用的web服务器，各有各自的网站、管理自己的文件，互不干涉，且对系统无影响。鉴于功力较浅，只敢对较信得过的朋友开放这种账号，本文涉及的范围也有限，所以安全漏洞可能还有，请诸位切勿直接用于生产环境。

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

登录 - 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


为了进一步增强安全性，还可以将用户的登录 ...</description>
		<link>http://www.fwolf.com/blog/post/443</link>
			</item>
	<item>
		<title>Ubuntu升级到9.04 Jaunty的变化和遇到的问题</title>
		<description>
长按键盘自动连续击键的间隔缩短了。
显卡驱动没有问题，终于能够摆脱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，找到下面这行：


    true


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

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

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


    Section "ServerFlags"
        ...</description>
		<link>http://www.fwolf.com/blog/post/442</link>
			</item>
	<item>
		<title>[Git]真正回滚已上传的更新</title>
		<description>首先，抛弃本地的修改应当用：

$ 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
 + ...</description>
		<link>http://www.fwolf.com/blog/post/441</link>
			</item>
	<item>
		<title>Mysql升级到5.1后库升级失败的问题</title>
		<description>一台 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 ...</description>
		<link>http://www.fwolf.com/blog/post/440</link>
			</item>
</channel>
</rss>
