2010年09月24日

首先要安装Cyrus SASL,

sudo apt-get install sasl2-bin libsasl2-2 libsasl2-modules

Debian/Ubuntu的postfix和其他的版本不一样,因为postfix是在chroot的环境中运行的,chroot缺省使用/var/spool/postfix/,因此极易造成SASL配置出错。

  • 1. 要去读一下/usr/share/doc/postfix/README.Debian,看看有什么不同的地方。

主要是sasl配置目录在/etc/postfix/sasl,而不是在通常的/usr/lib/sasl2。

  • 2. 加上一个sasl的用户

sudo adduser postfix sasl

  • 3. 编辑/etc/defaults/saslauthd

PARAMS=”-m /var/spool/postfix/var/run/saslauthd”

记得 mkdir -p /var/spool/postfix/var/run/saslauthd

chown -R root:sasl /var/spool/postfix/var/run/saslauthd

以上差不多了,基本搞定postfix的SASL了。

Tags: ,,.

今天做测试要用到当地的DNS,自己凭空配一个没有时间,想到了DDWRT可以利用。

Google 一下果然找到了。

http://www.dd-wrt.com/wiki/index.php/DNSMasq_-_DNS_for_your_local_network_-_HOWTO

我的DDWRT是V24版本的。在Services/Services下找到DNSMasq,然后

- enable DNSmasq

- enable Local DNS

- Fill up your DNS entries

具体的设置要参考DDWRT的Wiki

Tags: ,,.
2010年09月21日

Ubuntu 10.04中的python的2.6,没有办法只能想办法装python 2.5

一开始是下载的python 2.5.5

$ ./configure

$ make

$ make altinstall

这里用altinstall是为了不影响到ubuntu 10.04中自带的python 2.6. 装完后运行./dev_appserver helloworld, 提示缺PIL模块。去www.pythonware.com/products/pil/下载PIL 1.1.7,编译后自测不通过。嘿嘿

网上转了一圈,找到了这个网址 http://www.codigomanso.com/en/2010/05/google-app-engine-en-ubuntu-10-4-lucid-lynx/ ,原来有高人过了个deadsnakes的版本,专门解决python的旧版本的问题,步骤如下:

1. 在/etc/apt/sources.list中加入deadsnakes的repository。

deb http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu lucid main
deb-src http://ppa.launchpad.net/fkrull/deadsnakes/ubuntu lucid main

2. 再同步一下。

$ sudo apt-get update

3. 安装以下软件

$ sudo apt-get install python2.5

$ sudo apt-get install python-setuptools-deadsnakes

$ sudo apt-get install python2.5-dev

$ sudo apt-get install libjpeg62-dev

第二个是为了使用easy_setuptools安装PIL装的,后两个是为了编译PIL才装的。

4. 编译安装PIL

$ sudo easy_install-2.5 Imaging-1.1.7.tar.gz

编译安装成功。

再次运行./dev_appserver.py helloworld, 错误信息消失。

因为有了easy_install,有什么后继的python module,可以直接去http://pypi.python.org/ 下载tarball编译。

在此谢谢Felix Krull的贡献,他是python 2.5 deadsnakes的发布人,deadsnakes的网址为 https://launchpad.net/~fkrull/+archive/deadsnakes

Tags: ,,,.
2010年08月18日

本来想自己写一个的,不过看到网上有达人已经写了,就无耻的转载了。

我用红字标注自己的备注。

还要补充几个mdadm的命令,万一有什么闪失的话,备用

1. 从raid中移出一个分区

mdadm –manage /dev/md1 –remove /dev/sda1

2. 停用一个md设备

mdadm –stop /dev/md1

原文见:  http://hi.baidu.com/enjoyunix/blog/item/4f152e3d820dfc0abba167ca.html

    FT越来越爱用软Raid,因为实在廉价性能与硬Raid差别不大。而且最重要的功能是监控磁盘的状况。呵呵~~
这篇文章介绍如何在运营中的CentOS 5.3系统上安装上软Raid。 马上开始:

看看我们的磁盘结构

  • /dev/sda1: /boot partition, ext3;
  • /dev/sda2: swap;
  • /dev/sda3: / partition, ext3

分区的结构和我的完全一样。

我想把以上的磁盘转换为 md0、md1、md2

  • /dev/md0 (made up of /dev/sda1 and /dev/sdb1): /boot partition, ext3;
  • /dev/md1 (made up of /dev/sda2 and /dev/sdb2): swap;
  • /dev/md2 (made up of /dev/sda3 and /dev/sdb3): / partition, ext3

# df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3             9.1G  1.1G  7.6G  12% /
/dev/sda1             190M   12M  169M   7% /boot
tmpfs                 252M     0  252M   0% /dev/shm

# fdisk -l

Disk /dev/sda: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          25      200781   83  Linux
/dev/sda2              26          90      522112+  82  Linux swap / Solaris
/dev/sda3              91        1305     9759487+  83  Linux

Disk /dev/sdb: 10.7 GB, 10737418240 bytes
255 heads, 63 sectors/track, 1305 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdb doesn’t contain a valid partition table

安装需要用到的软件

#yum install mkinitrd mdadm

把模组到核心挂载

#modprobe linear
#modprobe multipath
#modprobe raid0
#modprobe raid1
#modprobe raid5
#modprobe raid6
#modprobe raid10

前期的功夫都准备好了!现在正式开始

1. 把磁盘挂上,分区。

#sfdisk -d /dev/sda | sfdisk /dev/sdb

把/dev/sda 的分区附到 /dev/sdb上

第一次看到sfdisk,记一下

# sfdisk -d /dev/sda | sfdisk /dev/sdb
Checking that no-one is using this disk right now …
OK

Disk /dev/sdb: 1305 cylinders, 255 heads, 63 sectors/track

sfdisk: ERROR: sector 0 does not have an msdos signature
/dev/sdb: unrecognized partition table type
Old situation:
No partitions found
New situation:
Units = sectors of 512 bytes, counting from 0

Device Boot    Start       End   #sectors  Id  System
/dev/sdb1   *        63    401624     401562  83  Linux
/dev/sdb2        401625   1445849    1044225  82  Linux swap / Solaris
/dev/sdb3       1445850  20964824   19518975  83  Linux
/dev/sdb4             0         -          0   0  Empty
Successfully wrote the new partition table

Re-reading the partition table …

If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes:  dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)

然后把/dev/sdb 3个分区改变id 为 fd [raid 设备]

#fdisk /dev/sdb

按t 然后 1 然后 fd
按t 然后 2 然后 fd
按t 然后 fd
最后w

为安全起见,把/dev/sdb 上的raid设备初次化

#mdadm –zero-superblock /dev/sdb1
#mdadm –zero-superblock /dev/sdb2
#mdadm –zero-superblock /dev/sdb3

raid设备初始化这步我是省略了。
2 建立software Raid 1

#mdadm –create /dev/md0 –level=1 –raid-disks=2 missing /dev/sdb1
#mdadm –create /dev/md1 –level=1 –raid-disks=2 missing /dev/sdb2
#mdadm –create /dev/md2 –level=1 –raid-disks=2 missing /dev/sdb3

格式化

#mkfs.ext3 /dev/md0
#mkswap /dev/md1
#mkfs.ext3 /dev/md2

写入/etc/mdadm.conf
#mdadm –examine –scan > /etc/mdadm.conf

建立临时目录

#mkdir /mnt/md0
#mkdir /mnt/md2

挂载

#mount /dev/md0 /mnt/md0
#mount /dev/md2 /mnt/md2

修改 /etc/fstab

#vim /etc/fstab

/dev/md2                 /                       ext3    defaults        1 1
/dev/md0             /boot                   ext3    defaults        1 2
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/md1         swap                    swap    defaults        0 0
开机时自动把 / 分区 挂载到 /dev/md2

开机时自动把 /boot 分区 挂载到 /dev/md0
其实这里改/etc/fstab是为了下一步mkinitrd时,以及为了以后升级kernel时,可以把root=/dev/md2写入grub.conf
修改/etc/mtab

#vim /etc/mtab

/dev/md2 / ext3 rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
/dev/md0 /boot ext3 rw 0 0
tmpfs /dev/shm tmpfs rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
为毛要改/etc/mtab?不懂,照做!
开机时自动把 / 分区 挂载到 /dev/md2

开机时自动把 /boot 分区 挂载到 /dev/md0
修改/boot/grub/menu.lst

[...]
#加入#title CentOS (2.6.18-128.el5)
#加入#        root (hd1,0)
#加入#        kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/md2
#加入#        initrd /initrd-2.6.18-128.el5.img

#原来#title CentOS (2.6.18-128.el5)
#原来#        root (hd0,0)
#原来#        kernel /vmlinuz-2.6.18-128.el5 ro root=LABEL=/
#原来#        initrd /initrd-2.6.18-128.el5.img
告诉grub开启服务器时root的位置.

调整ramdisk 现在的分区状况

#mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img_orig

#mkinitrd /boot/initrd-`uname -r`.img `uname -r`
复制数据

#cp -dpRx / /mnt/md2

#cp -dpRx /boot/ /mnt/md0
为毛要cp,不能直接在最后做mirroring吗?
cp的这个参数有什么讲究吗?
3. 告诉GRUB boot sector 位置

#grub

root (hd0,0)
setup (hd0)

root (hd1,0)
setup (hd1)

完成:重启动
#reboot
4.把/dev/sda 加入到software Raid 1 中

#fdisk /dev/sda

按t 然后 1 然后 fd
按t 然后 2 然后 fd
按t 然后 fd
最后w
加入到Software Raid 1

#mdadm --add /dev/md0 /dev/sda1
#mdadm --add /dev/md1 /dev/sda2
#mdadm --add /dev/md2 /dev/sda3
查看重建Software Raid 1的情况

# cat /proc/mdstat

Personalities : [raid1]
md0 : active raid1 sda1[0] sdb1[1]
      200704 blocks [2/2] [UU]
md1 : active raid1 sda2[0] sdb2[1]
      522048 blocks [2/2] [UU]
md2 : active raid1 sda3[2] sdb3[1]
      9759360 blocks [2/1] [_U]
      [====>................]  recovery = 22.8% (2232576/9759360) finish=2.4min speed=50816K/sec
unused devices: <none>
同步完成后把Software Raid 1 状态写入/etc/mdadm.conf

#mdadm --examine --scan > /etc/mdadm.conf
5.更好地修改/boot/grub/menu.list

title CentOS (2.6.18-128.el5)
        root (hd1,0)
        kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/md2
        initrd /initrd-2.6.18-128.el5.img

title CentOS (2.6.18-128.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/md2
        initrd /initrd-2.6.18-128.el5.img

告诉GRUB两块磁盘都可以随时启动.
Tags: ,,,,.

Windows 7 很好,很强大。

主要特点:

1. 稳定,占用资源少

以前用Vista,内存使用率超出80%系统就很慢,更要命的是,开了一个328M的虚拟机后,没怎么用,就看见内存使用率蹭蹭的往上升,不到一天电脑就拖不动了。

现在,内存使用率在90%以下都很流畅,开了虚拟机,内存使用率不见往上升,说明内存管理实现的很好。现在基本上在我的2G内存的电脑上,开2个内存为512M的虚拟机没有问题。

2. Jump List,我的大爱

有了Jump List,把常用的文件放入Jump List,做得随叫随用,不用再辛苦的找来找去了。

3. 库

没有时间试用,但看着介绍感觉不错,配上强大的搜索,也是极牛的,不过现在还没有时间去整个思路来应用库。

4. 常用的热键

比如Win+上下左右 之类的,极大的提高了效率。

5. IE8比以前的IE都好用,现在用IE8和Firefox一半一半吧。

不好的地方:

1. putty在使用COM的时候一直崩溃,应该是安装的PL2301的驱动有问题,不过为什么Windows 7就不能带一个PL2301的驱动,Vista可是有的。

Tags: .

今天用bash和awk写了个修改/etc/fstab的小脚本。有点关于awk的小心得。

废话少说,先把我的awk语句贴上

awk -v dev=$device ‘{ if ($1 !~ /^[ \t]*#/ && $2 == “/”) { print gensub($1,dev,”g”); } else { print $0; }}’ ${FSTAB} > ${FSTAB}.new

1. awk是有if … else …

2. bash中的变量在awk不能被引用,所以要加 -v dev=$device把变量输入进去

3. $1为第一个域,$2为第二个域,以此类推,$0是整个字符串

4. 被处理的文件放在awk语句的后面,如上的${FSTAB}

5. gensub(r,s,h,[t])

gensub返回被替换后的字符串,

r – 正则表达式,如果匹配成功,就是要替换的部分

s – 用来替换的字符串,

h – “g”或“G”表示全局替换,也可以为1-9的数字,表示替换第几次的匹配

t – 用来匹配的字符串,缺省为$0,即输入的整个字符串

6. gsub(r,s,[t])

与gensub类似,但返回的是匹配的次数

7. sub(r,s,[t])

与gsub类似,匹配一次成功就退出

Tags: ,,.

在编译内核的时候,经常可以看到系统报警。

Not enough random bytes available,说明系统中的熵值不足,没有足够的随机数给GPG来产生密钥。

如果在图形界面,多滑动几下鼠标就可以产生足够的熵,如果联机去一个服务器的话,通常都是多运行几个命令,不过还是很麻烦,有时要干上几分钟这种事。现在找到一种方法,用rngd解决了。

可以通过这个命令查看有多少剩余的熵

# cat /proc/sys/kernel/random/entropy_avail

如果不足的话,可以用rngd来产生

先安装rng-utils

# yum install rng-utils

然后,运行rngd

# rngd -r /dev/urandom -o /dev/random -f -t 1

通常2-3秒就可以攒足熵值,比以前的笨办法方便多了。

此方法来源于  http://hi.baidu.com/mnkee/blog/item/402a2a34a2f631375bb5f51e.html

Tags: ,,,,.
2010年08月14日

只有一个1G的U盘,只能安装CentOS的第一张CD,试了3次,最后读了CentOS的FAQ才搞定。

CentOS是可以用第一张CD做最小安装的。

要求如下

1. 必须是图形界面安装,不能用linux text(我就是这里选错了)

2. 安装过程中,选Customize Now,把所有的可选项去除掉

3. 安装,重启

4. 用yum安装未装的软件。

Tags: ,,.
2010年08月13日

用U盘装Linux,不小心Grub写了U盘的MBR。

具体的指令是

dd if=/dev/zero of=/dev/sdX bs=512 count=1

dd if=/dev/zero of=/dev/sdX bs=446 count=1

第一条指令会同时清除分区表,及其危险,如果你对gparted不熟悉,你就等着哭吧。

第二条指令只清除MBR,如果你的U盘是bootable disk,以后就不能Bootable了。

详见于 http://www.cyberciti.biz/faq/linux-how-to-uninstall-grub/

不得不叹一下,老了,以前遇到过的问题,现在都忘了。

Tags: ,,,.
2010年08月03日

在Redhat kernel的SPEC文件中,经常可以看到这种写法

%if 0%{?rhel}

%endif

如果%{rhel}被定义了,则 %{?rhel} 返回 %{rhel},不然%{?rhel}视为未定义。

所以,当%{rhel}被定义过的话, 0%{?rhel}就等于0%{rhel} ,执行这个if block;

反之,0%{?rhel}等于0,不执行这个if block。

还有种情况,%{?rhel: …},这种情况下,当%{rhel}被定义过,展开”…”部分,

这样就可以根据多种的条件来判断,还可以引申出许多的用法,比如

1. 缺省赋值

%{!?_with_ldap: %{!?_without_ldap: %define _without_ldap --without-ldap}}

当_with_ldap为false,without_ldap也为false的时候,定义 _without_ldap 为--without-ldap。

2. 判断赋值错误

%{?_with_ssl: %{?_without_ssl: %{error: both _with_ssl and _without_ssl}}}

如果--without-ssl和--with-ssl都为true,error

3. 条件语句
%if %{?_with_ssl:1}%{!?_with_ssl:0}
 ...
 %endif

4. 传递参数
%configure \
 %{?_with_ssl}           \
 %{?_without_ssl}        \
 %{?_with_ldap}          \
 %{?_without_ldap}

详见 http://fedoraproject.org/wiki/Packaging:DistTag
和 /usr/share/doc/rpm-x.y.z/conditionalbuilds
Tags: ,,.