分类:飘渺浮云

Debian装mail客户端发邮件

debian squeeze默认安装的时候,没有装mail工具包,是无法发送邮件的。但是邮件通知又是我们经常使用的一个功能,比如一些cron运行的结果及用户注册通知等等。这次直接使用exim作为mail client用于发送邮件服务,这比装sendmail配置起来容易一些,也节省服务器资源。安装及配置步骤记录如下:

1、apt安装exim

apt-get install exim4-daemon-light

2、配置exim

dpkg-reconfigure exim4-config

进入交互界面后,按照自己的需求进行配置就可以了,注意下面的选择要选第一个“internetsite”:

debian-6-exim-01

在输入IP的时候,可以输入127.0.0.1

debian-6-exim-02

3、然后测试一下:

echo "Its a test." | mail -s Testing name@example.com

Linux下读写Mac的hfsplus硬盘

首先需要安装hfsprogs,我用的是debian直接

apt-get install hfsprogs

然后直接mount就可以了:

root@bananapi ~ # mount -t hfsplus -o force,rw /dev/sdb /mnt/backup320g
mount: warning: /mnt/backup320g seems to be mounted read-only.

怎么还是read-only…看一下dmsg:

root@bananapi ~ # dmesg|tail
[ 4842.317034] hfs: Filesystem was not cleanly unmounted, running fsck.hfsplus is recommended.  mounting read-only.

哦,原来硬盘有点儿问题,需要check一下,好吧:

root@bananapi ~ # fsck.hfsplus -f /dev/sdb
** /dev/sdb
root@bananapi ~ # fsck.hfsplus -f /dev/sdb1
** /dev/sdb1
root@bananapi ~ # fsck.hfsplus -f /dev/sdb2
** /dev/sdb2
** Checking HFS Plus volume.
** Checking Extents Overflow file.
** Checking Catalog file.

终于check完了,一共花了⋯⋯半天儿⋯⋯我们再remount一下吧~ 已经没问题了

解决刷DD-WRT kongac build后无法使用ipkg update

DD-WRT 的 官方WIKI 说在刷机之后,可以通过 ipkg 更新 opkg ,这样就可以使用 opkg 命令来安装 OpenWRT 的软件包,网上的很多教程也是这样写的。因为路由器是 R6300v2 ,采用 ARM 的 CPU 架构,不同于其他的路由器(R7000也是一样的架构),所以只能刷 Kongac Build 版本。在刷机之后,发现无法安装 opkg ,在运行“ipkg update”会出错:

root@R6300:/# ipkg update
-sh: ipkg: not found

经过一番查询,好像没人遇到过这个问题,很是奇怪。最终,在作者的Changelog中找到一句话:

Build 24500 06. July 2014
...
(2)ipkg is not used anymore in my builds, to install packages, make sure you have at least one partition mounted under /opt after that logon to the router and run command "bootstrap".

没错,在2014年6月发布的24500版本之后,已经不再使用“ipkg update”这样的命令来安装opkg了!只要路由器上至少有一个硬盘分区mount到/opt下,然后通过终端登陆到路由器,执行boostrap就好了,系统会自动帮你准备好opkg!

root@R6300:/opt# bootstrap
Bootstrap is checking prerequisites...

USB automounte is enabled.
Echo optpart /dev/sda1 on /opt type ext2 (rw,relatime,errors=continue)
Found a valid partition: /opt.

Proceed with download and install of opkg? (y/n) [default=n]:

果然如此,在出现上述界面之后,输入“y”,系统会自动进行配置,然后就可以使用opkg来管理路由器了!哈哈!

生命不息,折腾不止:入手Netgear R6300 v2

入手Netgear R6300v2已经好几个月了,尽管第二天就刷了DD-WRT的ROM,可惜一直没时间折腾。最近终于有点儿零散的时间,就开始吧。

R6300v2的配置非常不错:

CPU:BCM4708 A9 ARM 双核 @ 800Mhz 
RAM:256M
USB:1个USB3.0 + 1个USB2.0
LAN:4个GB口
无线:AC 1750M

这配置家用绰绰有余。在平日从CP看到负载不超过5%,如果不充分利用,实在太可惜啦!~\(≧▽≦)/~

pingr

计划使用此路由器做下面这几件事:

  1. 简单的NAS:samba服务,数据的存储与备份
  2. 安装transmission,实现脱机下载BT
  3. 山寨版的时间胶囊(Apple Time Capsule),自动备份mac数据
  4. 自动翻墙,科学上网

Debian 6使用官方升级修复新漏洞

最近Linux真是多灾多难,爆出了心跳流血和Bash的严重漏洞,各个发行版都受到严重的影响,但是各显其能,都很快发布了补丁。从响应结果来看,有商业公司背景支持的,都可以通过公司的官方站点下载到升级包。社区发行版也还好,Debian 7 Wheezy 直接upgrade就行了,可坑爹的是我手里好几台Debian 6的服务器在官方源下就没有动静。难道我们就这样被社区抛弃了吗?当然不是!准确来说,是默认的源中没有。Debian社区在今年发布了一则新闻,说Debian 6 会获得一个长期支持(LTS),如果效果好,以后的7和8都将会采用这一方式。具体应该怎么做呢?其实很简单。
(更多…)

取消Apache自动运行在Debian上

遇到一件怪异的事情:在一台新的Debian 6服务器中,Apache被默认安装,并且开机自动运行。因要用nginx作默认的Web Server,Apache就比较碍事儿了,想把它卸载,或者不要启动运行。用apt来删除吧,通过

apt-get remove apache2

却命令提示“Package apache2 is not installed”。失败了,试试这个

apt-get purge apache2

还是不行。难道是当初安装的时候,不是用的apt?算了,不管了,现在让它不自动运行也可。

Debian把计算机的启动和关闭划分为7个阶段,标志位为0~6。其中0,1,6是关闭,2,3,4,5是启动,同时对应到/etc/rc*.d/下的脚本,所以apache的自动启动脚本也很有可能是在这里。如果不需要启动,直接删除

update-rc.d apache2 remove

恢复也可以通过update-rc.d脚本

update-rc.d apache2 start 2 3 4 5

自定义Zend Framework模块的异常处理

Zend Framework(ZF)可以根据业务需求配置成多模块的方式,这时我们可能需要在不同模块中采用不同的方式来处理各种错误和异常。在处理错误的时候,可以使用_forward直接跳转和显示,但是如何处理异常呢?官方手册中对此没有明确的说明。经过一番测试之后,发现可以通过以插件的方式进行处理。

比如有一个名为API的module,需要在此模块下对异常进行单独处理。我们只要在application/bootstrap.php中添加一个初始化方法,将错误处理以插件的方式注册就可以了,内容见下:

<?php
class Api_Bootstrap extends Zend_Application_Module_Bootstrap
{
	/**
	 * 注册错误处理插件,使此Module的错误处理定向到apiModule/errorController/errorAction
	 * 
	 */
	protected function _initPluginErrorHandler()
	{
		$front = Zend_Controller_Front::getInstance();
		$front->registerPlugin(new Zend_Controller_Plugin_ErrorHandler(array(
		    'module'     => 'api',
		    'controller' => 'error',
		    'action'     => 'error'
		)));
	}
	
}

此时,如果api模块下有任何异常抛出,都将使用modules/api/controllers/errorController/errorAction进行处理了~

判断PHP运行系统是32位还是64位

有些时候根据业务的需求会在32位和64位系统上采用不同的处理方式,在PHP中也有有很多方法可以实现,下面是我以前用到过的一种方式:

/**
 * 判断运行环境是否为64位系统
 *
 * @return bool
 */
function isOn64bitsSystem(){
    // 左移32位之后会超过32位系统的限制,如果64位系统则不会
    return (1<<32)==1 ? false : true;
}

更简单的方法,判断PHP_INT_SIZE:

echo PHP_INT_SIZE===8 ? 'on 64 bit System' : 'on 32 bit System';

记录Zend Framework运行时间

前几天看到有人问在Zend Framework中如何获取运行时间,如果只是用于debug,非常简单,我们只要在public/index.php中的第一行加入:

define('ZF_START_TIME', microtime(true));

最后一行加入:

echo number_format(microtime(true)-ZF_START_TIME, 8, '.', '');

这样,运行时间就会直接打印到页面的最下方。

当然,这会破坏框架的整体结构,但也是最直接,最简单的方式,debug么,嘿嘿。

解决mac更新慢的问题

最近几次在MAC OSX更新的时候极慢,很多时候只有10k/s的样子。以前的更新包只有几十M,也就忍了,但今天足足有250M,按照这个速度,恐怕需要20个小时。我记得刚买回macbook的时候,更新速度还是很快的,不知为何现在如此之慢。今天早晨和一个朋友聊起此事,他说在host文件中配置一下指向速度会有提升。这句话提醒了我。我为了解决国内DNS污染的问题,使用了美国DNS地址,所以在解析的时候,把我指向了美国的服务器。dig一下果然如此:

swcdn.apple.com.	1602	IN	CNAME	swcdn.apple.com.akadns.net.
swcdn.apple.com.akadns.net. 124	IN	CNAME	swcdn.apple.com.edgesuite.net.
swcdn.apple.com.edgesuite.net. 1386 IN	CNAME	swcdn.apple.com.edgesuite.net.globalredir.akadns.net.
swcdn.apple.com.edgesuite.net.globalredir.akadns.net. 380 IN CNAME a950.gi3.akamai.net.
a950.gi3.akamai.net.	8	IN	A	96.17.180.146
a950.gi3.akamai.net.	8	IN	A	96.17.180.147
a950.gi3.akamai.net.	8	IN	A	96.17.180.136

我的ISP是网通,使用国内的DNS,dig出来的内容:

;; ANSWER SECTION:
swcdn.apple.com.	1732	IN	CNAME	swcdn.apple.com.akadns.net.
swcdn.apple.com.akadns.net. 43	IN	CNAME	swcdn.apple.ccgslb.com.cn.
swcdn.apple.ccgslb.com.cn. 1355	IN	CNAME	download011.cncssr.chinacache.net.
download011.cncssr.chinacache.net. 93 IN A	175.22.6.16
download011.cncssr.chinacache.net. 93 IN A	182.118.9.194

哈哈,这样就简单了,直接在host文件中将域名swcdn.apple.com指向175.22.6.16和182.118.9.194就可以了。现在的速度太爽了,250M,小case。