<?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>days of linnchord &#187; linux</title>
	<atom:link href="http://linnchord.net/archives/category/develop/linux/feed" rel="self" type="application/rss+xml" />
	<link>http://linnchord.net</link>
	<description>南台静坐 : : :</description>
	<lastBuildDate>Thu, 03 Nov 2011 02:22:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>PIL MemoryError with uWSGI</title>
		<link>http://linnchord.net/archives/843.html</link>
		<comments>http://linnchord.net/archives/843.html#comments</comments>
		<pubDate>Thu, 03 Nov 2011 02:20:33 +0000</pubDate>
		<dc:creator>linnchord</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[PIL]]></category>
		<category><![CDATA[uwsgi]]></category>

		<guid isPermaLink="false">http://linnchord.net/?p=843</guid>
		<description><![CDATA[用PIL库处理图片，作缩略图的时候需要先裁减为正方形，再比例缩小，当裁减时不定报错。 img = img.transform((r,r), Image.EXTENT, area) #ERROR File "/usr/local/lib/python2.7/dist-packages/PIL/ImageFile.py", line 231, in load_prepare self.im = Image.core.new(self.mode, self.size) MemoryError google PIL+MemoryError，主要提到2个可能错误。一个是PIL库本身ctype代码问题，一个是传递裁减范围为负值导致内存问题。仔细检查了一下，都没有异常。后来考虑到上面的代码为创建新图像时内存错误，直接调整了uwsgi参数。 -M -p 2 --no-orphans --logdate --chmod-socket=666 --uid admin --gid admin --limit-as 384 --harakiri 60 --max-requests 2000 [--limit-as]参数从256调整到384，系统恢复正常。 反思查找原因，发现图片文件虽然不大仅3M+，但是该图片像素巨大为4096*5210，将该图片转换为BMP，有60M+。估计库在处理图片裁减时会将jpg文件重新读取为完整位图，再考虑到操作位图消耗和程序本身需要的内存空间，原设定256M限制肯定不足了，需要设定更大。 目前程序运行在一个虚拟机上，内存2G……看来需要尽快切换主机了……]]></description>
			<content:encoded><![CDATA[<p>用PIL库处理图片，作缩略图的时候需要先裁减为正方形，再比例缩小，当裁减时不定报错。</p>
<pre class="brush:python">
img = img.transform((r,r), Image.EXTENT, area)

#ERROR
File "/usr/local/lib/python2.7/dist-packages/PIL/ImageFile.py", line 231, in load_prepare
    self.im = Image.core.new(self.mode, self.size)
MemoryError
</pre>
<p><a target="_blank" href="http://www.google.com.hk/search?q=PIL%2BMemoryError">google PIL+MemoryError</a>，主要提到2个可能错误。一个是PIL库本身ctype代码问题，一个是传递裁减范围为负值导致内存问题。仔细检查了一下，都没有异常。后来考虑到上面的代码为创建新图像时内存错误，直接调整了uwsgi参数。</p>
<pre class="brush:shell">-M -p 2 --no-orphans --logdate --chmod-socket=666 --uid admin --gid admin --limit-as 384 --harakiri 60 --max-requests 2000</pre>
<p>[--limit-as]参数从256调整到384，系统恢复正常。</p>
<p>反思查找原因，发现图片文件虽然不大仅3M+，但是该图片像素巨大为4096*5210，将该图片转换为BMP，有60M+。估计库在处理图片裁减时会将jpg文件重新读取为完整位图，再考虑到操作位图消耗和程序本身需要的内存空间，原设定256M限制肯定不足了，需要设定更大。</p>
<p>目前程序运行在一个虚拟机上，内存2G……看来需要尽快切换主机了……</p>
]]></content:encoded>
			<wfw:commentRss>http://linnchord.net/archives/843.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PIL 1.1.7 install on ubuntu</title>
		<link>http://linnchord.net/archives/815.html</link>
		<comments>http://linnchord.net/archives/815.html#comments</comments>
		<pubDate>Mon, 29 Aug 2011 14:51:49 +0000</pubDate>
		<dc:creator>linnchord</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[PIL]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://linnchord.me/?p=815</guid>
		<description><![CDATA[PIL虽然可以通过pip安装，但是不好用，各种调用需要的依赖都没有，需要手动安装。 过程如下 #清除系统上现有库 python版本自行替换 sudo rm -rf /usr/lib/python2.7/site-packages/PIL sudo rm /usr/lib/python2.7/site-packages/PIL.pth #安装依赖包 sudo apt-get install libjpeg8 libjpeg8-dev libfreetype6 libfreetype6-dev liblcms1-dev #下载 wget http://effbot.org/downloads/Imaging-1.1.7.tar.gz tar -zxvf Imaging-1.1.7.tar.gz cd Imaging-1.1.7/ python setup.py build_ext -i sudo python setup.py install #安装后如果发现安装的包没有正确支持可进行如下操作 sudo ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib/ sudo ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/ sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/]]></description>
			<content:encoded><![CDATA[<p>PIL虽然可以通过pip安装，但是不好用，各种调用需要的依赖都没有，需要手动安装。</p>
<p>过程如下</p>
<pre class="brush:shell">
#清除系统上现有库 python版本自行替换
sudo rm -rf /usr/lib/python2.7/site-packages/PIL
sudo rm /usr/lib/python2.7/site-packages/PIL.pth

#安装依赖包
sudo apt-get install libjpeg8 libjpeg8-dev libfreetype6 libfreetype6-dev liblcms1-dev

#下载
wget http://effbot.org/downloads/Imaging-1.1.7.tar.gz
tar -zxvf Imaging-1.1.7.tar.gz
cd Imaging-1.1.7/
python setup.py build_ext -i
sudo python setup.py install

#安装后如果发现安装的包没有正确支持可进行如下操作
sudo ln -s /usr/lib/x86_64-linux-gnu/libfreetype.so /usr/lib/
sudo ln -s /usr/lib/x86_64-linux-gnu/libz.so /usr/lib/
sudo ln -s /usr/lib/x86_64-linux-gnu/libjpeg.so /usr/lib/
</pre>
]]></content:encoded>
			<wfw:commentRss>http://linnchord.net/archives/815.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>postfix with smtp auth on Ubuntu 11.04</title>
		<link>http://linnchord.net/archives/790.html</link>
		<comments>http://linnchord.net/archives/790.html#comments</comments>
		<pubDate>Thu, 18 Aug 2011 16:10:51 +0000</pubDate>
		<dc:creator>linnchord</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[存照]]></category>
		<category><![CDATA[工具]]></category>
		<category><![CDATA[postfix]]></category>
		<category><![CDATA[sasl]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://linnchord.me/?p=790</guid>
		<description><![CDATA[公司网站注册需要向用户发送邮件，原有的QQ企业邮箱自然不能用来搞这个了，迫不得已自己来配置邮件服务器。网上有很多文章，到处查找搞了一晚上，现在来记录一下……估计过两天换主机还用得着……悲剧…… sudo -i #切到root方便点吧 apt-get install postfix libsasl2-2 sasl2-bin libsasl2-modules db4.6-util procmail dpkg-reconfigure postfix 需要配置一大批，注意凡是需要填写host什么的都只填写主域domain.com，不必填邮件服务器2级前缀。 sudo apt-get install bsd-mail #很多网上文章写的mailx，不好用了 设置Maildir vim /etc/postfix/main.cf 添加 home_mailbox = Maildir/ 给系统需要收发邮件的用户创建Maildir目录 cd /home/{{user}} #{{user}}替换为用户名 maildirmake Maildir chown -R {{user}} Maildir 安装pop和imap sudo apt-get install courier-pop sudo apt-get install courier-imap 添加SMTP认证 vim /etc/postfix/main.cf 添加 smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, [...]]]></description>
			<content:encoded><![CDATA[<p>公司网站注册需要向用户发送邮件，原有的QQ企业邮箱自然不能用来搞这个了，迫不得已自己来配置邮件服务器。网上有很多文章，到处查找搞了一晚上，现在来记录一下……估计过两天换主机还用得着……悲剧……</p>
<pre class="brush:bash">
sudo -i #切到root方便点吧
apt-get install postfix libsasl2-2 sasl2-bin libsasl2-modules db4.6-util procmail
dpkg-reconfigure postfix
</pre>
<p>需要配置一大批，注意凡是需要填写host什么的都只填写主域domain.com，不必填邮件服务器2级前缀。</p>
<pre class="brush:bash">
sudo apt-get install bsd-mail #很多网上文章写的mailx，不好用了
</pre>
<p>设置Maildir</p>
<pre class="brush:bash">
vim /etc/postfix/main.cf
</pre>
<p>添加</p>
<pre class="brush:bash">
home_mailbox = Maildir/
</pre>
<p>给系统需要收发邮件的用户创建Maildir目录</p>
<pre class="brush:bash">
cd /home/{{user}}  #{{user}}替换为用户名
maildirmake Maildir
chown -R {{user}} Maildir
</pre>
<p>安装pop和imap</p>
<pre class="brush:bash">
sudo apt-get install courier-pop
sudo apt-get install courier-imap
</pre>
<p>添加SMTP认证</p>
<pre class="brush:bash">
vim /etc/postfix/main.cf
</pre>
<p>添加</p>
<pre class="brush:bash">
smtpd_recipient_restrictions = permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination,
    reject_invalid_hostname,
    reject_non_fqdn_sender,
    reject_non_fqdn_recipient,
    reject_non_fqdn_hostname,

smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain = $myhostname
broken_sasl_auth_clients = yes
</pre>
<p>修改</p>
<pre class="brush:bash">
vim /etc/default/saslauthd
</pre>
<p>添加</p>
<pre class="brush:bash">
START=yes
PWDIR="/var/spool/postfix/var/run/saslauthd"
PARAMS="-m ${PWDIR} -r"
PIDFILE="${PWDIR}/saslauthd.pid"
MECHANISMS="pam"
OPTIONS="-c -m ${PWDIR}"
</pre>
<p>然后运行</p>
<pre class="brush:bash">
mkdir -p /var/spool/postfix/var/run/saslauthd
echo 'pwcheck_method: saslauthd' >> /etc/postfix/sasl/smtpd.conf
echo 'mech_list: plain login' >> /etc/postfix/sasl/smtpd.conf
</pre>
<p>最后重启</p>
<pre class="brush:bash">
/etc/init.d/postfix restart
/etc/init.d/saslauthd restart
</pre>
<p>最后测试出现如下错误</p>
<pre class="brush:bash">
authentication failed: generic failure
</pre>
<p>在日志(/var/log/mail.log)中可以看见错误信息</p>
<pre class="brush:bash">
SASL authentication failure: cannot connect to saslauthd server: Permission denied
SASL authentication failure: Password verification failed
SASL PLAIN authentication failed: generic failure
</pre>
<p>经历了一个漫长刺激痛苦的google旅程，最后解决方案如下</p>
<p>最后发现是saslauthd运行时目录权限问题</p>
<pre class="brush:bash">
dpkg-statoverride --add root sasl 710 /var/spool/postfix/var/run/saslauthd
adduser postfix sasl
</pre>
<p>重启</p>
<pre class="brush:bash">
/etc/init.d/postfix restart
/etc/init.d/saslauthd restart
</pre>
<p>OK 搞定</p>
<p>参考文章：</p>
<ul>
<li><a href="http://wiki.ubuntu.org.cn/PostfixBasicSetupHowto" target="_blank">http://wiki.ubuntu.org.cn/PostfixBasicSetupHowto</a></li>
<li><a href="http://rashost.com/blog/postfix-smtp-auth" target="_blank">http://rashost.com/blog/postfix-smtp-auth</a></li>
</ul>
<p><br/></p>
<p>后记：2011-08-25</p>
<ul>
<li>如果新增加用户，imap不能即时生效，必须重启。</li>
<li>另外要注意用户/home下的用户目录权限，必须是username.username，我曾在添加用户时用了其他的group，结果失败，会报错-uid -gid不对。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://linnchord.net/archives/790.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ubuntu下安装最新nginx+uWSGI</title>
		<link>http://linnchord.net/archives/785.html</link>
		<comments>http://linnchord.net/archives/785.html#comments</comments>
		<pubDate>Tue, 09 Aug 2011 15:14:37 +0000</pubDate>
		<dc:creator>linnchord</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[nginx]]></category>

		<guid isPermaLink="false">http://linnchord.me/?p=785</guid>
		<description><![CDATA[先通过apt-get remove删除系统下原有nginx，再添加源安装 sudo apt-get install python-software-properties sudo add-apt-repository ppa:nginx/stable sudo add-apt-repository ppa:uwsgi/release sudo apt-get update sudo apt-get install uwsgi nginx 过程中遇到问题，最后install无法完成，报错 dpkg: warning: files list file for package `nginx-common' missing, assuming package has no files currently installed. dpkg: warning: files list file for package `nginx-full' missing, assuming package has no files currently installed. 在网上查了很久，没有完全的解决方案，最后通过如下方式解决 sudo [...]]]></description>
			<content:encoded><![CDATA[<p>先通过apt-get remove删除系统下原有nginx，再添加源安装</p>
<pre class="brush:bash">
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:nginx/stable
sudo add-apt-repository ppa:uwsgi/release
sudo apt-get update
sudo apt-get install uwsgi nginx
</pre>
<p>过程中遇到问题，最后install无法完成，报错</p>
<pre class="brush:bash">
dpkg: warning: files list file for package `nginx-common' missing, assuming package has no files currently installed.
dpkg: warning: files list file for package `nginx-full' missing, assuming package has no files currently installed.
</pre>
<p>在网上查了很久，没有完全的解决方案，最后通过如下方式解决</p>
<pre class="brush:bash">
sudo find / | grep nginx
</pre>
<p>查找系统所有的nginx残留文件并手动删除，然后运行</p>
<pre class="brush:bash">
sudo apt-get clean
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nginx  --reinstall
</pre>
<p>ok，nginx成功更新。</p>
<p>更新：2011-09-17</p>
<p>没两天，uwsgi的默认安装部署发生了变化，改了个名字，需要如下安装</p>
<pre class="brush:bash">
sudo apt-get install uwsgi-python
</pre>
<p>安装后各路径</p>
<pre class="brush:bash">
sudo /etc/init.d/uwsgi-python restart
/var/log/uwsgi-python/uwsgi.log
/etc/uwsgi-python/apps-available/uwsgi.xml #默认配置文件
/etc/default/uwsgi-python #默认命令行启动参数设置
</pre>
<p>我的参数配置如下</p>
<pre class="brush:xml">
<uwsgi>
	<master></master>
	<vhost></vhost>
	<memory-report></memory-report>
	<no-site></no-site>
</uwsgi>
</pre>
<p>/etc/default/uwsgi-python</p>
<pre class="brush:bash">
DAEMON_OPTS=" \
  --master \
  --no-orphans \
  --processes 2 \
  --logdate \
  --chmod-socket=666 \
  --uid www-data \
  --gid www-data \
  --limit-as 256 \
  --harakiri 60 \
  --max-requests 1000 \
"
</pre>
<p>具体参数含义可参考 <a href="http://projects.unbit.it/uwsgi/wiki/Doc" target="_blank">http://projects.unbit.it/uwsgi/wiki/Doc</a></p>
]]></content:encoded>
			<wfw:commentRss>http://linnchord.net/archives/785.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>clean &amp; auto save default grub boot of ubuntu</title>
		<link>http://linnchord.net/archives/776.html</link>
		<comments>http://linnchord.net/archives/776.html#comments</comments>
		<pubDate>Mon, 21 Mar 2011 01:44:04 +0000</pubDate>
		<dc:creator>linnchord</dc:creator>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[工具]]></category>
		<category><![CDATA[grub]]></category>

		<guid isPermaLink="false">http://linnchord.net/?p=776</guid>
		<description><![CDATA[ubuntu用了一段时间，更新了好几个版本，引导菜单拉的老长，需要清理一下。 删除多余的引
