<?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>星河天山 &#187; Linux</title>
	<atom:link href="http://www.frankdu.com/blog/archives/category/linux/feed" rel="self" type="application/rss+xml" />
	<link>http://www.frankdu.com/blog</link>
	<description>stay foolish, stay hungry</description>
	<lastBuildDate>Thu, 17 Jun 2010 21:54:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>如何在Hostmonster上成功部署Django</title>
		<link>http://www.frankdu.com/blog/archives/329#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e5%25a6%2582%25e4%25bd%2595%25e5%259c%25a8hostmonster%25e4%25b8%258a%25e6%2588%2590%25e5%258a%259f%25e9%2583%25a8%25e7%25bd%25b2django</link>
		<comments>http://www.frankdu.com/blog/archives/329#comments</comments>
		<pubDate>Thu, 11 Sep 2008 06:23:57 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.frankdu.com/blog/?p=333</guid>
		<description><![CDATA[在Hostmonster上部署django的常见方法，可以参考文章http://www.frankdu.com/blog/archives/334
但是在实际部署中，发现很难按照那样的步骤成功部署。经过摸索，我的部署方法如下：
1. 安装Python 2.5
虽然django可以在python 2.3及以上版本运行，但是最推荐版本是2.5，在hostmonster的主机上提供的是2.3，所以你可以想安装python 2.5到个人目录中。基本安装步骤是，到www.python.org下载合适的安装版本。如果想从源代码安装，需要登陆SSH然后执行以下步骤：
a. 使用wget下载源代码
b. tar zxvf python-VERSION.tar.gz
c. cd python-VERSION
d. ./configure &#8211;prefix=$HOME
e. make
f. make install
如果安装缺乏软件，请按照提示安装。
2. 安装Django
最新的正式版本是django 1.0，以此为例安装步骤如下：
a. wget http://www.djangoproject.com/download/1.0/tarball/
b. tar zxvf Django-1.0.tar.gz
c. cd Django-1.0
d. export PATH=$HOME/bin:$PATH
e. python setup.py install
3. 设置路径
编辑“.bash_profile”文件，设置PATH和PYTHONPATH，以便程序能正确运行：
export PATH=$HOME/bin:$HOME/lib/python2.5/site-packages/django/bin:$PATH
export PYTHONPATH=$PYTHONPATH:$HOME/django/django_projects
然后重新加载.bash_profile，使新配置生效：
source ~/.bash_profile
4. 创建mysql数据库和账户等信息
在cPanel中创建用于django项目的mysql数据、数据库用户，并记录下来用于项目设置。
5. 创建项目目录
cd ~
mkdir django_projects
mkdir django_templates
cd django_projects
django-admin.py startproject mysite
chmod 600 mysite/settings.py
最后一句用于设置settings.py的文件权限，阻止其他用户看到我们的数据库、用户、密码等重要信息。修改settings.py的内容，设置数据库、时区、模板目录等信息。
6. 配置FastCGI
这一步非常重要！首先在cPanel的“Apache Handlers”中添加以下信息：
处理器名称：fcgid-script
文件扩展名：.fcgi
然后，在你想添加django支持的网站目录中，安装fcgi.py、django.cfgi，并加入URL改写规则。
wget http://svn.saddi.com/py-lib/trunk/fcgi.py
chmod 755 fcgi.py
下载文件并设置权限，如果文件无法下载，也可以使用链接http://www.frankdu.com/download/fcgi.py
在同一个目录，创建文件django.fcgi，文件内容如下：
#!~/bin/python
import sys, os
sys.path.insert(0,&#8221;/home/your-user-name/django/django_projects&#8221;)
from fcgi import WSGIServer
os.environ['DJANGO_SETTINGS_MODULE'] = [...]]]></description>
		<wfw:commentRss>http://www.frankdu.com/blog/archives/329/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>转载：Hostmonster上部署Django</title>
		<link>http://www.frankdu.com/blog/archives/328#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e8%25bd%25ac%25e8%25bd%25bd%25ef%25bc%259ahostmonster%25e4%25b8%258a%25e9%2583%25a8%25e7%25bd%25b2django</link>
		<comments>http://www.frankdu.com/blog/archives/328#comments</comments>
		<pubDate>Thu, 11 Sep 2008 05:45:00 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.frankdu.com/blog/?p=334</guid>
		<description><![CDATA[我个人的部署方案请访问：http://www.frankdu.com/blog/archives/333
1. 事前准备
安装SVN(Hostmonster默认是不支持SVN的, 需要自己安装) ,开通SSH(Hostmonster里要想启用SSH, 竟然还需要身份证, 我ft…) , 并SSH上你的主机
因为之前已经在Hostmonster的主机上装好了SVN, 并且开通了SSH, 所以省了很多事情:)
2. 获取Django代码
在”~/”下建立”django_src”目录
mkdir django_src
进入目录
cd django_src
使用SVN获取代码
svn co http://code.djangoproject.com/svn/django/trunk/ ./
3. 设置路径
编辑”.bash_profile”文件, 设置PYTHONPATH 和 PATH路径, 方便使用Django
export PATH=$PATH:$HOME/django_src/django/bin
export PYTHONPATH=$PYTHONPATH:$HOME/django_src:$HOME/django_projects
重新加载”.bash_profile”文件, 来启用配置的路径
source ~/.bash_profile
4. 建立项目目录
在”~/”下建立”django_projects”目录
mkdir django_projects
进入目录
cd django_projects
建立Django项目”myproject”
django-admin.py startproject myproject
修改”myproject.settings”文件的权限, 限制只有你的用户可以读取, 这样可以避免同一个服务器上其他用户访问你的DB
chmod 600 myproject/settings.py
5. 配置FastCGI
这一步我花的时间最长! 关键是原文中的fcgi.py不能下载了, 我找了其他的fcgi.py又不对. 郁闷之下翻看了官方的文档, 官方文档说要用flup, 我又折腾了半天flup, 未果… 最后又Google了一堆fcgi.py, 终于被我找到一个对头的:)
现在BlueHost的控制面板里建立一个子域名(SubDomain), 建立成功后他会在你的”~/public_html”目录下建立对应的子域名的目录. 我建立了一个叫”lab”的子域名. 然后进入到这个目录中, 下载fcgi.py
wget http://svn.saddi.com/py-lib/trunk/fcgi.py
下载完毕后, 修改执行权限
chmod 755 fcgi.py
继续在这个目录下建立Django.fcgi, 文件内容如下
#!/usr/bin/env python
import sys, os
sys.path.insert(0,”/home/username/django_src”)
sys.path.insert(0,”/home/username/django_projects”)
from [...]]]></description>
		<wfw:commentRss>http://www.frankdu.com/blog/archives/328/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>GNU make 的主要预定义变量</title>
		<link>http://www.frankdu.com/blog/archives/249#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=gnu-make-%25e7%259a%2584%25e4%25b8%25bb%25e8%25a6%2581%25e9%25a2%2584%25e5%25ae%259a%25e4%25b9%2589%25e5%258f%2598%25e9%2587%258f</link>
		<comments>http://www.frankdu.com/blog/archives/249#comments</comments>
		<pubDate>Sun, 06 Jan 2008 07:44:40 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.frankdu.com/blog/archives/264</guid>
		<description><![CDATA[GNU make 有许多预定义的变量，这些变量具有特殊的含义，可在规则中使用。下表给出了一些主要的
预定义变量，除这些变量外，GNU make 还将所有的环境变量作为自己的预定义变量。
预定义变量????????????????????? 含义
$*????????????? 不包含扩展名的目标文件名称。
$+????????????? 所有的依赖文件，以空格分开，并以出现的先后为序，可能包含重复的依赖文件。
$&#60;????????????? 第一个依赖文件的名称。
$?????????????? 所有的依赖文件，以空格分开，这些依赖文件的修改日期比目标的创建日期晚。
$@????????????? 目标的完整名称。
$^????????????? 所有的依赖文件，以空格分开，不包含重复的依赖文件。
$%????????????? 如果目标是归档成员，则该变量表示目标的归档成员名称。例如，如果目标名称
??????????????? 为 mytarget.so(image.o)，则 $@ 为 mytarget.so，而 $% 为 image.o。
AR????????????? 归档维护程序的名称，默认值为 ar。
ARFLAGS???????? 归档维护程序的选项。
AS????????????? 汇编程序的名称，默认值为 as。
ASFLAGS???????? 汇编程序的选项。
CC????????????? C 编译器的名称，默认值为 cc。
CCFLAGS???????? C 编译器的选项。
CPP???????????? C 预编译器的名称，默认值为 $(CC) -E。
CPPFLAGS??????? C 预编译的选项。
CXX???????????? C++ 编译器的名称，默认值为 g++。
CXXFLAGS??????? C++ 编译器的选项。
FC????????????? FORTRAN 编译器的名称，默认值为 f77。
FFLAGS????????? FORTRAN 编译器的选项。
出处：http://www.aka.org.cn/Lectures/001/Lecture-1/make.html
]]></description>
		<wfw:commentRss>http://www.frankdu.com/blog/archives/249/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>遍历linux的环境变量</title>
		<link>http://www.frankdu.com/blog/archives/248#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e9%2581%258d%25e5%258e%2586linux%25e7%259a%2584%25e7%258e%25af%25e5%25a2%2583%25e5%258f%2598%25e9%2587%258f</link>
		<comments>http://www.frankdu.com/blog/archives/248#comments</comments>
		<pubDate>Sun, 06 Jan 2008 07:22:10 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.frankdu.com/blog/archives/263</guid>
		<description><![CDATA[遍历并打印linux的环境变量的代码片段：



&#160;


#include &#60;stdlib.h&#62;


&#160;


//The ENVIRON variable contains the environment


extern char** environ;


&#160;


int main&#40;&#41;&#123;


&#160; &#160; &#160; &#160; char** var;


&#160; &#160; &#160; &#160; for&#40;var = environ; *var != NULL; ++var&#41;&#123;


&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; printf&#40;&#34;%s\n&#34;, *var&#41;;


&#160; &#160; &#160; &#160; &#125;


&#160; &#160; &#160; &#160; return 0;


&#125;


&#160;



如果需要读取、设置或清楚环境变量，请分别man这几个：getenv、setenv、unsetenv。
]]></description>
		<wfw:commentRss>http://www.frankdu.com/blog/archives/248/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>使用getopt_long</title>
		<link>http://www.frankdu.com/blog/archives/247#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e4%25bd%25bf%25e7%2594%25a8getopt_long</link>
		<comments>http://www.frankdu.com/blog/archives/247#comments</comments>
		<pubDate>Sun, 06 Jan 2008 06:49:33 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[软件编程]]></category>

		<guid isPermaLink="false">http://www.frankdu.com/blog/archives/262</guid>
		<description><![CDATA[1. 包含getopt.h
2. 定义短选项，比如，ho:v
3. 定义长选项结构，注意最后一项全部设为0
4. 未定义的选项，解析时会返回&#8217;?&#8217;
5. 含有参数的选项，参数存于全局变量optarg中
6. 非参数选项的起始索引，存于全局变量optind中
示例程序如下：



&#160;


#include &#60;stdlib.h&#62;&#60;/stdlib.h&#62;


#include &#60;stdio.h&#62;&#60;/stdio.h&#62;


#include &#60;getopt.h&#62;&#60;/getopt.h&#62;


&#160;


const char* program_name;


&#160;


void print_usage&#40;FILE* stream, int exit_code&#41;&#123;


&#160; &#160; &#160; &#160; fprintf&#40;stream, &#34;Usage: %s options [ inputfile ...]n&#34;, program_name&#41;;


&#160; &#160; &#160; &#160; fprintf&#40;stream, &#34; &#160; &#160;-h &#160; &#8211;help &#160; &#160; &#160; &#160;Display this uage information.n&#34;


&#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#34; [...]]]></description>
		<wfw:commentRss>http://www.frankdu.com/blog/archives/247/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>笔记：linux启动到命令行模式</title>
		<link>http://www.frankdu.com/blog/archives/222#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=%25e7%25ac%2594%25e8%25ae%25b0%25ef%25bc%259alinux%25e5%2590%25af%25e5%258a%25a8%25e5%2588%25b0%25e5%2591%25bd%25e4%25bb%25a4%25e8%25a1%258c%25e6%25a8%25a1%25e5%25bc%258f</link>
		<comments>http://www.frankdu.com/blog/archives/222#comments</comments>
		<pubDate>Wed, 28 Nov 2007 16:12:48 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[软件编程]]></category>

		<guid isPermaLink="false">http://www.frankdu.com/blog/archives/230</guid>
		<description><![CDATA[在虚拟机上安装了一个linux使用，缺省安装，启动起来就进入x-window。很多情况下，只是通过SSH连过去操作，并不需要图形界面。记一下，修改方法：
使用vi修改文件/etc/inittab
将里面默认runlevel从5修改到3即可。
不要设置为0或6。每个runlevel，在/etc/inittab都有详细注释。
]]></description>
		<wfw:commentRss>http://www.frankdu.com/blog/archives/222/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Readhat Linux：又忘记密码了？</title>
		<link>http://www.frankdu.com/blog/archives/210#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=readhat-linux%25ef%25bc%259a%25e5%258f%2588%25e5%25bf%2598%25e8%25ae%25b0%25e5%25af%2586%25e7%25a0%2581%25e4%25ba%2586%25ef%25bc%259f</link>
		<comments>http://www.frankdu.com/blog/archives/210#comments</comments>
		<pubDate>Sat, 10 Nov 2007 05:35:17 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[软件编程]]></category>

		<guid isPermaLink="false">http://www.frankdu.com/blog/archives/218</guid>
		<description><![CDATA[虚拟机上装了一个Linux，很久不用，又忘记密码了，记一下恢复步骤吧：
我们可以使用单用户Linux 模式来登录，然后设置一个新的root口令。要进入单用户模式，重新引导计算机。如果我们使用的是默认的引导装载程序GRUB ，可以执行下列步骤来进入单用户模式：
1. 在引导装载程序菜单上，键入 e 来进入编辑模式。
2. 我们会面对一个引导项目列表。查找其中类似以下输出的那一行：
?kernel /vmlinuz-2.4.18-0.4 ro root=/dev/hda2
3. 按箭头键直到这一行被突出显示，然后按 e
4. 按一下空格键来添加一个空格，然后添加 single 来通知GRUB 引导单用户Linux 模式。按 Enter ?键来使编辑结果生效。
5. 我们会被带回编辑模式屏幕，从这里，按? b ，GRUB 就会引导单用户 Linux 模式。载入结束后，会看到一个类似以下的 shell 提示：
?sh-3.0#
现在，可以设置root密码了，键入：
?sh-2.05# passwd root
屏幕会提示重新键入口令来校验。结束后，口令就会被改变，我们就可以在提示下键入 reboot 来重新引导；然后，象平常一样登录为根用户。Voila! Done!
]]></description>
		<wfw:commentRss>http://www.frankdu.com/blog/archives/210/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux下如何批量下载FTP文件？</title>
		<link>http://www.frankdu.com/blog/archives/133#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=linux%25e4%25b8%258b%25e5%25a6%2582%25e4%25bd%2595%25e6%2589%25b9%25e9%2587%258f%25e4%25b8%258b%25e8%25bd%25bdftp%25e6%2596%2587%25e4%25bb%25b6%25ef%25bc%259f</link>
		<comments>http://www.frankdu.com/blog/archives/133#comments</comments>
		<pubDate>Sun, 26 Aug 2007 11:52:23 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.frankdu.com/blog/archives/137</guid>
		<description><![CDATA[换了新的虚拟主机，有很多文件需要迁移，其中一个问题是通过FTP把原服务器的文件夹拷贝过去。由于速度的原因，最好直接服务器对服务器拷贝。用FlashFXP的服务器对传发现不行，只好到处找批量下载的shell脚本或者程序。
无果之下，准备动手写一个，用Python中的ftplib模块。这时忽然发现Python安装目录的子目录[Tools/Scripts]里面，有一个ftpmirror.py！Hallelujah！正是我要找的！
它的使用文档是：
Mirror a remote ftp subtree into a local directory tree.
usage: ftpmirror [-v] [-q] [-i] [-m] [-n] [-r] [-s pat]
[-l username [-p passwd [-a account]]]
hostname[:port] [remotedir [localdir]]
-v: verbose
-q: quiet
-i: interactive mode
-m: macintosh server (NCSA telnet 2.4) (implies -n -s &#8216;*.o&#8217;)
-n: don&#8217;t log in
-r: remove local files/directories no longer pertinent
-l username [-p passwd [-a account]]: login info [...]]]></description>
		<wfw:commentRss>http://www.frankdu.com/blog/archives/133/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>linux下使用alias命令</title>
		<link>http://www.frankdu.com/blog/archives/127#utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=linux%25e4%25b8%258b%25e4%25bd%25bf%25e7%2594%25a8alias%25e5%2591%25bd%25e4%25bb%25a4</link>
		<comments>http://www.frankdu.com/blog/archives/127#comments</comments>
		<pubDate>Sat, 25 Aug 2007 17:13:08 +0000</pubDate>
		<dc:creator>frank</dc:creator>
				<category><![CDATA[Linux]]></category>

		<guid isPermaLink="false">http://www.frankdu.com/blog/archives/130</guid>
		<description><![CDATA[在使用ls列出文件的时候，我比较习惯于那种有文件的显示。今天把主机空间迁移到了dreamhost，发现有SSH可以使用，但是习惯在redhat上敲的ll命令却不能使用，这下得自己动手，解决一下了。
这个简单，执行命令：
alias ll=&#8217;ls -l &#8211;color=auto&#8217;
然后就可以了。但是问题是，下次SSH登录上去，发现这个alias就没有了。怎么办呢？修改了文件.alias，无效；修改了文件.bashrc，无效；最后在zhenyang的帮助下，把那面那行命令加入到了文件.bash_profile中，bingo!终于成功了！
]]></description>
		<wfw:commentRss>http://www.frankdu.com/blog/archives/127/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 0.351 seconds -->
