存档

‘4.操作系统’ 分类的存档

使用IOS SDK 4 编译 IOS 3.X的程序

2010年9月10日 代码罐头 没有评论

当IOS SDK升级到 4.x之后.
你在测试编译时能够选择的SDK 只有4.x
很多人担心这样3.x环境下的IOS执行这种程序会有问题
所以有人把SDK 3.x复制到xcode目录下来做兼容
其实在真正发布的时候
只在在project属性->Build->Deployment->iPhone Deployment Target里面选择对应的IOS版本即可

分类: iPhone 标签:

解决Cydia更新慢以及无法update问题

2010年8月25日 代码罐头 没有评论

更新慢的问题
Section里面点右上角Edit,然后把所有Ringtongs以及Themes全部关掉

无法update问题
打开iphone的/etc/apt/souces.list.d/saurik.list
编辑:deb http://apt.saurik.com/ tangelo-3.7 main
改为:
deb http://apt.saurik.com/cydia/ tangelo-3.7 main
然后保存。

分类: iPhone 标签:

LVM介绍

2010年5月25日 Serwei Xu 5 条评论

一、简介

LVM是Linux操作系统对磁盘分区进行管理的一种机制。其是建立在磁盘和分区之上的一个逻辑层,以提高磁盘分区管理的灵活性。在LVM中每个磁盘分区就是一个物理卷(physical volume,PV),若干个物理卷可以组成为一个卷组(volume group,VG),形成一个存储池。系统管理员可以在卷组上创建逻辑卷(logical volumes,LV),并在逻辑卷组上创建文件系统。PV、VG和LV的关系如图所示。

二、物理卷管理

1、添加物理卷

使用pvcreate命令可以创建物理卷,可以在整个磁盘上创建物理卷,也可以在一个磁盘分区上创建物理卷。例如如果要在第二块SCSI磁盘上创建物理卷,可以使用命令:pvcreate /dev/sdb

2、查看物理卷

[root@demoserver dev]# pvdisplay

  — Physical volume —

  PV Name           /dev/hda13                        //pv名称

  VG Name           vg_data                      //pv所属的vg名称

  PV Size             1.87 GB / not usable 1.96 MB    //pv的大小为1.87GB

  Allocatable          yes

  PE Size (KByte)     4096                          //物理块大小为4MB

  Total PE           478                         //总的物理块数

  Free PE            478                         //空闲的物理块数

  Allocated PE        0

  PV UUID            jaVtOk-rpMb-QgbM-zx1N-DmCB-yGqm-hCVmiE

  — Physical volume —                           //另一个pv的信息

  PV Name            /dev/hda14

  VG Name            vg_data

  PV Size             1.86 GB / not usable 2.12 MB

  Allocatable          yes

  PE Size (KByte)      4096

  Total PE            476

  Free PE             476

  Allocated PE         0

  PV UUID            VzjEpx-or1h-v3gN-zOCm-FnjC-eDOz-tp5YZg

共有两个物理卷:/dev/hda13和/dev/hda14,其中hda13的大小为1.87GB,物理块大小为4096KB,总的物理块数为478,空闲的物理块数为478,已分配的物理块数为0。而hda14的大小为1.86GB,物理块大小为4096KB,总的物理块数为476,空闲的物理块数为476,已分配的物理块数为0。

3.删除物理卷

如果物理卷不再需要,可以使用pvremove命令将其删除,如下所示。

# pvremove /dev/hda16

  Labels on physical volume “/dev/hda16″ successfully wiped

物理卷被删除后,其所在的磁盘分区并不会被删除。需要被删除的物理卷必须是已经不属于任何卷组,否则将会失败,如下所示。

[root@demoserver dev]# pvremove /dev/hda13

  Can’t pvremove physical volume “/dev/hda13″ of volume group “vg_data” without-ff

三、卷组管理

1.添加卷组

物理卷创建完成后就可以开始创建卷组。卷组是由一个或多个物理卷所组成的存储池。例如要创建一个名为vg_data的卷组,可以使用下面的命令。

# vgcreate vg_data /dev/hda13 /dev/hda14

  Volume group “vg_data” successfully created

2.扩展卷组的容量

当卷组中的空间不足的时候,可以使用vgextend命令往卷组中添加新的物理卷,方便地扩展卷组的容量,如下所示。

# vgextend vg_data /dev/hda15

  Volume group “vg_data” successfully extended

3.查看卷组

使用vgdisplay命令可以查看卷组的信息。例如要查看上例中创建的卷组vg_data,执行的命令如下所示。

# vgdisplay vg_data

  — Volume group —

  VG Name               vg_data                   //vg名称

  System ID

  Format                  lvm2

  Metadata Areas         3                         //元信息区域

  Metadata Sequence No  2

  VG Access               read/write                //访问许可,可读写

  VG Status               resizable                  //VG状态

  MAX LV                  0                        //最大的LV数

  Cur LV                   0                        //当前的LV数

  Open LV                 0                        //打开的LV数

  Max PV                  0                        //最大的PV数

  Cur PV                   3                        //当前的PV数

  Act PV                   3

  VG Size                 5.59 GB                 //VG的大小为5.59GB

  PE Size                 4.00 MB                 //物理块的大小为4MB

  Total PE                1430                  //VG的物理块数为1430

  Alloc PE / Size            0 / 0            //已经使用的物理块数和大小

  Free  PE / Size         1430 / 5.59 GB          //空闲的物理块数和大小

  VG UUID                 djgPFx-LOGa-8ZOx-diNr-hxCs-qNip-vg0Hqu

卷组vg_dat格式为lvm2,访问许可为可读写,卷组大小为5.59GB,物理块大小为4MB,总的物理块数为1430,已分配的物理块数为0,空闲的物理块数为1430,大小为5.59GB。

4.从卷组中删除物理卷

通过vgreduce命令可以把VG中未被使用的PV从VG中删除,例如要从卷组vg_data中删除物理卷hda15,如下所示。

# vgreduce vg_data /dev/hda15

  Removed “/dev/hda15″ from volume group “vg_data”

如果要从卷组中删除所有未被使用的物理卷,可以使用如下命令。

# vgreduce –a

5.删除卷组

当卷组不再需要的时候,可以使用vgremove命令删除。如果卷组中已经创建了LV,则系统会提示用户确认是否要进行删除,命令及运行结果如下所示。

# vgremove vg_data

Do you really want to remove volume group “vg_data” containing 2 logical volumes

? [y/n]: y

Do you really want to remove active logical volume “lv_data1″? [y/n]: y

                                             //确定删除逻辑卷lv_data1

  Logical volume “lv_data1″ successfully removed

Do you really want to remove active logical volume “lv_data2″? [y/n]: y

                                             //确定删除逻辑卷lv_data2

  Logical volume “lv_data2″ successfully removed

  Volume group “vg_data” successfully removed

卷组被删除后,卷组中的所有物理卷将不属于任何卷组,可以对这些物理卷进行删除,命令如下所示。

# pvdisplay /dev/hda14

  “/dev/hda14″ is a new physical volume of “1.86 GB”

  — NEW Physical volume —

  PV Name            /dev/hda14

  VG Name               //VG Name一列为空,表示该PV不属于任何的VG

  PV Size             1.86 GB         //PV大小

  Allocatable          NO              //是否可分配

  PE Size (KByte)       0               //PE大小

  Total PE             0               //总PE数

  Free PE              0               //空闲的PE

  Allocated PE         0               //分配的PE

  PV UUID             VzjEpx-or1h-v3gN-zOCm-FnjC-eDOz-tp5Yzg

可以看到,物理卷hda14的VG Name一列为空,表示该物理卷不属于任何的卷组,用户可以删除该物理卷,或分配给其他卷组使用。

四、逻辑卷管理

逻辑卷类似于非LVM系统中的磁盘分区,在逻辑卷上可以建立文件系统,文件系统建立完成后就可以挂载到操作系统中进行使用。逻辑卷被划分为被称为LE(Logical Extents)的基本单位。在同一个卷组中,LE的大小和PE是相同的,并且一一对应。

1.添加逻辑卷

当卷组创建后,可以使用lvcreate命令在卷组上创建逻辑卷。例如要在卷组vg_data上创建一个1000MB的逻辑卷lv_data1,其命令如下所示。

# lvcreate -L 1000m -n lv_data1 vg_data

  Logical volume “lv_data1″ created

除了KB、MB和GB这些常规单位以外,lvcreate命令还可以使用PE数作为单位。由vgdisplay可以看到卷组vg_data的PE大小为4MB,如果要创建一个大小为1000MB的逻辑卷,则需要250个PE,命令如下所示。

# lvcreate -l 250 -n lv_data2 vg_data

  Logical volume “lv_data2″ created

我们现在ppvod做LVM使用的命令是:

#lvcreate –i 4 –I 8192 –L 1600G –n lv_data2 vg_data

-i:采用条带模式的映射方式创建逻辑卷,该参数的值用于指定所创建的逻辑卷将映射在几个PV上。

-I:指定使用条带模式时所采用块的大小,单位为KB,其值必须是:2N(N≥2)。

-L:指定创建逻辑卷的大小,单位的可以用K、M、G、T表示KB、MB、GB及TB。

-n:用来指定所创建的逻辑卷名称,该名称可以根据需要随便定义。

在使用“-i”参数指定PV的个数时,一定要确认所指定的这些PV是没有完全被分配给任何逻辑卷的,否则将创建失败,其次若这些PV的大小不等,那么所创建的逻辑卷只能取最小值。

这样创建的LVM起到了软Raid的作用,可以使IO压力分散到各个硬盘之上,提高IO性能。

卷组和逻辑卷创建后,会在/dev目录下创建一个以VG名称命名的目录,在目录下会创建以LV名称命名的设备文件,如下所示。

#ll /dev/vg_data

total 0

lrwxrwxrwx 1 root root 28 Aug 24 22:22 lv_data1 -> /dev/mapper/vg_ data-lv_data1

lrwxrwxrwx 1 root root 28 Aug 24 22:21 lv_data2 -> /dev/mapper/vg_ data-lv_data2

2.更改逻辑卷的大小

使用lvresize命令可以更改已有逻辑卷的大小。一般情况下不建议减少逻辑卷的空间,因为这样可能会导致逻辑卷上的文件系统中的数据丢失,所以除非用户已经确定被减少空间中的数据不再需要或者已经把重要数据备份出来,否则不要减少逻辑卷的空间以免造成不可挽回的损失。如果要把逻辑卷lv_data1的大小增加为1500MB,可以使用下面的命令。

# lvresize -L 1500m /dev/vg_data/lv_data1

  Extending logical volume lv_data1 to 1.46 GB

  Logical volume lv_data1 successfully resized

3.查看逻辑卷的信息

使用lvdisplay命令可以查看指定逻辑卷的信息,例如要查看逻辑卷lv_data1的信息,命令和运行结果如下所示。

# lvdisplay /dev/vg_data/lv_data1

  — Logical volume —

  LV Name                 /dev/vg_data/lv_data1  //逻辑卷名称

  VG Name             vg_data                   //逻辑卷所属的卷组

  LV UUID                 3CrIH1-rZr6-UkNZ-1Z5n-gHw2-SM5T-by5fKg

  LV Write Access        read/write

  LV Status               available

  # open                  0

  LV Size                 1.46 GB                  //逻辑卷的大小

  Current LE              375                      //逻辑卷的逻辑块数

  Segments                1

  Allocation               inherit

  Read ahead sectors      auto

  – currently set to         256

  Block device             253:0

可以看到,逻辑卷/dev/vg_data/lv_data1所属的卷组为vg_data,访问许可为可读写,卷组状态为可用,逻辑卷大小为1.46GB,总的逻辑块数为375。

4.删除逻辑卷

使用lvremove命令可以删除指定的逻辑卷,删除前系统会提示用户确认。例如要删除逻辑卷lv_data2,其命令和运行结果如下所示。

# lvremove /dev/vg_data/lv_data2

Do you really want to remove active logical volume “lv_data2″? [y/n]: y

  Logical volume “lv_data2″ successfully removed

删除后,逻辑卷上的所有数据均会被清除。

分类: 4.操作系统, Linux 标签:

VIM常用指令

2010年2月5日 代码罐头 8 条评论

用了好几年VIM
也从来没怎么认真的用过
VIM是一个很多指令的编辑器,多到你可以只用键盘就完成所有操作
所以…如果你不是经常用.估计你强记也会忘记的
而且VIM里面有很多重复作用的指令方式
例如你到文件末尾,可以用G,也可以用:$
下面我整理的并非是所有的VIM指令,那可以写一本书
最常用的被我记录下来,而最容易记忆的也被我保留下来了
以下格式为
指令 – 作用
所以输入的时候别把<空格>-也带进去

0 – 到行首
$ – 到行尾
^ – 到行首字母
( – 到上面一句或者上面一个代码段
) – 到下面一句或者下面一个代码段
`. – 到最后一次修改的位置,注意这个`不是单引号,是1左边的那个按键
/<文字> – 搜索指定文字,找到之后使用n来跳到下一个相同单词位置
:<数值> – 转跳到指定行数
:$ – 转跳到文件末尾,这个和G的作用相同,但是我觉得更加好记,因为和转跳行数一样,而且$一般被用来标识末尾

i – 插入模式,I也可以,还有a,A,但是个人感觉提高效率不明显
o – 在当前行下面建立新行,对应的有O,在当前行上面,但是O很少用,除非你已经到顶行而且要在上面插入一行.

v – 进入区块选择
y – 复制已经选择的区块
yy – 复制当前行
d – 剪切已经选择的区块
dd – 剪切当前行
p – 粘贴已经选择的区块

. – 重复上次指令
<数值><指令> – 重复执行指定的指令,例如10dd,剪切10行

% – 匹配花括号,方括号,括号等,用于例如跳转到对应的{}位置
gd – 到达光标所在处函数或者变量的定义处
> – 缩进代码,在v下可用
>> – 缩进当前行代码
< – 反缩进代码,在v下可用
<< – 反缩进当前行

分类: Linux 标签:

Copy On Write特性验证

2010年1月12日 代码罐头 2 条评论

在Windows和Linux下
为了提高复制进程的效率
会使用Copy On Write特性来产生新的进程
之前父进程的变量将不会完全复制
这样导致变量会有三种情况
1.在fork之前创建的变量未被进程本身写过
则变量的值是共享的.父子进程之间都是读取一个地址的内容
2.在fork之前创建的变量被某个进程写过
则变量在这个变量被写的时候会被复制一份到这个进程的堆栈段中
3.在fork之后创建的变量
则变量在各自的堆栈段内产生.各自独立

下面是简单的例子
1.在fork之前创建变量i,fork之后创建变量j,在之后的过程中主进程只读,子进程修改

下载: code.txt
  1. #include <stdio.h>
  2. #include <fcntl.h>  //包含O_RDONLY等宏定义    
  3. int main(void){
  4.     char test;
  5.     int fd;
  6.     if((fd = open("test.txt",O_RDONLY))== -1)
  7.     {
  8.          perror("Can't open file test.dat\n");
  9.          return 1;
  10.     }
  11.     printf("Open file succeed.\n");
  12.     pid_t pid;
  13.     int i=0;
  14.     pid=fork();
  15.     int j=0;
  16.     if(pid==-1){
  17.       perror("Can't creat child process.\n");
  18.       return 1;
  19.     }
  20.     if( pid==0 ){
  21.         do{
  22.             printf("Child Process ID: %ld i:%d j:%d\n ",(long)getpid(),i,j);
  23.             i++;
  24.             j++;
  25.             sleep(1);
  26.         }while(1);
  27.     }
  28.     else{
  29.         do{
  30.             printf("Parent Process ID: %ld i:%d j:%d\n ",(long)getpid(),i,j);
  31.             sleep(1);
  32.         }while(1);
  33.     }
  34.     return 0;
  35. }

执行之后

Child Process ID: 30201 i:0 j:0
Parent Process ID: 30200 i:0 j:0
 Parent Process ID: 30200 i:0 j:0
 Child Process ID: 30201 i:1 j:1
 Parent Process ID: 30200 i:0 j:0
 Child Process ID: 30201 i:2 j:2
 Parent Process ID: 30200 i:0 j:0
 Child Process ID: 30201 i:3 j:3
 Parent Process ID: 30200 i:0 j:0
 Child Process ID: 30201 i:4 j:4

结果两种创建阶段的变量都被被独立修改.之间是分开的

2.这个例子简单修改于网上的另一个说明进程间共享fd的
主进程在fork之前打开文件
然后fork子进程一起来读
这个时候由于进程本身没有修改变量
则堆栈使用的是指向相同fd的内容
fd位置的修改工作由内核来做
所以这两个进程读出位置是相互递增的
test.txt的内容是12345

下载: code.txt
  1. #include <stdio.h>
  2. #include <fcntl.h>  //包含O_RDONLY等宏定义    
  3. int main(void){
  4.     char test;
  5.     int fd;
  6.     if((fd = open("test.txt",O_RDONLY))== -1)
  7.     {
  8.          perror("Can't open file test.dat\n");
  9.          return 1;
  10.     }
  11.     printf("Open file succeed.\n");
  12.     pid_t pid;
  13.     pid=fork();
  14.     if(pid==-1)
  15.     {
  16.       perror("Can't creat child process.\n");
  17.       return 1;
  18.     }
  19.     if( pid==0 ){
  20.         printf("Creat child process succeed.\n");
  21.         do{
  22.             int reads;
  23.             reads=read(fd,&test,1);
  24.             printf("child Process ID: %ld read:%c,reads:%d\n ",(long)getpid(),test,reads);
  25.             if(reads==0){
  26.                 break;
  27.             }
  28.             sleep(1);
  29.         }while(1);
  30.         close(fd);
  31.         return 0;
  32.     }
  33.     else{
  34.         do{
  35.             int reads;
  36.             reads=read(fd,&test,1);
  37.             printf("parent Process ID: %ld read:%c,reads:%d\n ",(long)getpid(),test,reads);
  38.             if(reads==0){
  39.                 break;
  40.             }
  41.             sleep(1);
  42.         }while(1);
  43.         close(fd);
  44.         return 0;
  45.     }
  46. }

执行之后的结果

Open file succeed.
Creat child process succeed.
child Process ID: 30229 read:1,reads:1
parent Process ID: 30228 read:2,reads:1
parent Process ID: 30228 read:3,reads:1
child Process ID: 30229 read:4,reads:1
parent Process ID: 30228 read:5,reads:1
child Process ID: 30229 read:,reads:1
parent Process ID: 30228 read:5,reads:0
child Process ID: 30229 read:,reads:0

两个进程间对fd进行了共享
由于不是进程直接修改fd读取的位置
所以此值由两个进程共享.

分类: C/C++, Linux 标签:

利用taskset有效控制cpu资源

2009年10月12日 Michael Field 3 条评论

常常感觉系统资源不够用,一台机子上跑了不下3个比较重要的服务,但是每天我们还要在上面进行个备份压缩等处理,网络长时间传输,这在就很影响本就不够用的系统资源;

这个时候我们就可以把一些不太重要的比如copy/备份/同步等工作限定在一颗cpu上,或者是多核的cpu的一颗核心上进行处理,虽然这不一定是最有效的方法,但可以最大程度上利用了有效资源,降低那些不太重要的进程占用cpu资源;

查看系统下cpu信息:

#cat /proc/cpuinfo

taskset就可以帮我们完成这项工作,而且操作非常简单;

该工具系统默认安装,rpm包名util-linux

#taskset --help
taskset (util-linux 2.13-pre7)
usage: taskset [options] [mask | cpu-list] [pid | cmd [args...]]
set or get the affinity of a process

-p, –pid operate on existing given pid
-c, –cpu-list display and specify cpus in list format
-h, –help display this help
-v, –version output version information

举例:
1、开启一个只用0标记的cpu核心的新进程(job.sh是你的工作脚本)

#taskset -c 0 sh job.sh

2、查找现有的进程号,调整该进程cpu核心使用情况(23328举例用的进程号)

#taskset -pc 0 23328
pid 23328's current affinity list: 0-3  #0-3表示使用所有4核进行处理
pid 23328'
s new affinity list: 0 #调整后改为仅适用0标记单核处理

3、可在top中进行负载check

最后你可以在你的工作脚本中加入该指令来合理利用现有的cpu资源;

分类: Linux, 系统监控 标签:

网络管理工具mtr

2009年10月9日 Michael Field 1 条评论

一个集合ping和traceroute功能并能直观显示结果的网络管理工具mtr;
官网地址

http://www.BitWizard.nl/mtr

下载地址
ftp://ftp.bitwizard.nl/mtr/

CentOS和Redhat可使用yum安装,一般系统默认已安装该工具;

使用方法:

usage: mtr [-hvrctlsni46] [--help] [--version] [--report]
[--report-cycles=COUNT] [--curses]
[--raw] [--split] [--no-dns] [--address interface]
[--psize=bytes/-p=bytes]
[--interval=SECONDS] HOSTNAME [PACKETSIZE]

–report 追踪结果以报告模式输出
–report-cycles=COUNT 定义追踪的次数,默认为16
–raw 使结果以原始格式输出
–split 将每次追踪的结果分别列出来,不象–report一样,统计整个结果
–no-dns 只显示ip地址,不解析ip地址对应的主机名
–psize=bytes/-p=bytes 定义数据包的大小,单位是字节

文本图形如下:
Matt’s traceroute [v0.54]
Keys: D – Display mode R – Restart statistics Q – Quit
Packets Pings
Hostname                                                             %Loss   Rcv   Snt Last Best Avg Worst
1. 122.224.212.125                                                  0%     13     13      0     0      0        0
2. 122.224.195.77                                                   0%     12     12       0     0      0        0
3. 220.191.135.113                                                 0%     12     12      5       5      5       5
4. 202.97.39.217                                                     0%     12     12     27    21    24     28
5. ???
6. 121.10.116.133                                                    42%    7     12   144   142   143    144
7. 219.129.22.166                                                   64%    4     12   137   136   137    139
8. 125.90.66.126                                                     67%    4     12   145   137   140    145

第1列是traceroute路径,后面是ping包结果,很容易理解!
如果各位已经知道,看看就好,也希望有好的工具请留言交流~
不知道的朋友,看了以后希望能帮到你们~

分类: Linux 标签:

快递搭建企业级邮件系统iRedMail+Mysql+Postfix+php

2009年9月2日 Michael Field 4 条评论

一 软件环境
最近负责一个公司网站和邮件系统的搭建,以前自己一直没有仔细的研究过邮件系统的从零开始搭建工作,趁现在工作之余也同时将文档整理一次;
主要针对快捷高效搭建,简单实用为主,基本够一个人数50-100的小型公司使用。

操作系统:CentOS release 5.3 (Final) x86_64
数据库:mysql Ver 14.12 Distrib 5.0.45
php:php 5.2 up
邮件系统:postfix 2.5.6 + iredmail 0.4.0
webmail:RoundCube 1.0.2

iRedMail 0.4.0 下载地址:戳这里

二 安装过程
因许多软件涉及到yum安装,这里我给出国内一个非常快的Centos镜像,请戳这里下载
1. 数据库和邮件系统安装
mysql 安装和postfix 安装 全部采取yum安装

———————————————-
$ yum install -y mysql mysql-server mysql-devel
$ yum install -y postfix

2.php安装

———————————————-
$ yum install -y php php-ldap php-gd php-imap php-mysql php-pear php-mbstring

3.iredmail 安装
下载解压 iRedMail-0.4.0.tar.bz2
安装指令:

———————————————-
$ cd /path/to/iRedMail-x.y.z/
$ cd pkgs/
$ sh get_all.sh
$ cd ../
$ sh iRedMail.sh

安装过程详细介绍请参看:戳这里
注:
a:安装之前请先行设定mysql的root帐号和密码;空密码不被接受;
b:其中数据库只需选择mysql即可;
c:webprogrem选择RoundCube即可,其他默认;
d:请记住设定的mail admin的帐号和密码。

三 配置过程
因为iRedMail的高度整合,使得配置过程异常的简单。甚至可以不需要对postfix进行多余设定;
注意修改以下基本配置:iRedmail安装过程中已经增加的这部分设定,请在配置文件的最末尾处修改

1. myorigin
myorigin参数指明发件人所在的域名。如果你的用户的邮件地址为user@domain.com,则该参数指定@后面的域名。缺省地,postfix使用本地主机名作为myorigin,但是建议你最好使用你的域名,因为这样更具有可读性。比如:安装postfix的主机为 mail.domain.com则我们可以这样指定myorigin:

myorigin = domain.com
当然我们也可以引用其他参数,如:
myorigin = $mydomain

2. mydestination
mydestination参数指定postfix接收邮件时收件人的域名,换句话说,也就
是你的postfix系统要接收什么样的邮件。比如:你的用户的邮件地址为user@domain.com, 也就是你的域为domain.com, 则你就需要接收所有收件人为user_name@domain.com的邮件。与myorigin一样,缺省地,postfix使用本地主机名作为 mydestination。如:

mydestination = $mydomain
mydestination = domain.com

3. notify_classes
在postfix系统中,必须指定一个postfix系统管理员的别名指向一个用户,
只有这样,在用户遇到问题时才有报告的对象,postfix也才能将系统的问题报告给管理员。notify_classes参数就是用来指定向postfix管理员报告错误时的信息级别。共有以下几种级别:

bounce:将不可以投递的邮件的拷贝发送给postfix管理员。出于个人隐私的缘故,该邮件的拷贝不包含信头。

2bounce:将两次不可投递的邮件拷贝发送给postfix管理员。

delay:将邮件的投递延迟信息发送给管理员,仅仅包含信头。

policy:将由于UCE规则限制而被拒绝的用户请求发送给postfix管理员,包含整个SMTP会话的内容。

protocol:将协议的错误信息或用户企图执行不支持的命令的记录发送给postfix管理员。同样包含整个SMTP会话的内容。

resource:将由于资源错误而不可投递的错误信息发送给postfix管理员,比如:队列文件写错误等等。

software:将由于软件错误而导致不可投递的错误信息发送给postfix管理员。

缺省值为:

notify_classes = resource, software

4.myhostname
myhostname 参数指定运行postfix邮件系统的主机的主机名。缺省地,该值被设定为本地机器名。你也可以指定该值,需要注意的是,要指定完整的主机名。如:

myhostname = mail.domain.com

5.mydomain
mydomain参数指定你的域名,缺省地,postfix将myhostname的第一部分删除而作为mydomain的值。你也可以自己指定该值,如:

mydomain = domain.com

6.mynetworks
mynetworks 参数指定你所在的网络的网络地址,postfix系统根据其值来区别用户是远程的还是本地的,如果是本地网络用户则允许其访问。你可以用标准的A、B、C类网络地址,也可以用CIDR(无类域间路由)地址来表示,如:

192.168.1.0/24
192.168.1.0/26

7.inet_interfaces
inet_interfaces 参数指定postfix系统监听的网络接口。缺省地,postfix监听
所有的网络接口。如果你的postfix运行在一个虚拟的ip地址上,则必须指定其监听的地址。如:

inet_interfaces = all
inet_interface = 192.168.1.1

关于postfix的配置详细介绍可参看戳这里
需要注意的是dovecat配置在main.cf中的和master.cf的端口一致;否则会导致邮件发送失败;

———————————————-
#main.cf
content_filter = smtp-amavis:[127.0.0.1]:10024
#master.cf
127.0.0.1:10024 inet n – – – – smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

以上设定完成后,确认启动postfix、policyd、dovecot、httpd、mysqld;

四、测试过程
1. 访问:http://your_server/mail/
webmail
以上设定正确,请登录测试发送邮件是否正常;

2. 增加邮件用户和邮箱容量大小配额设定
a.首先登录mysql;
b.依次执行以下指令:

———————————————-
mysql> use vmail;
Database changed
mysql> INSERT INTO mailbox (username, password, name, maildir, quota, domain, active)
-> VALUES (‘testuser@hiadmin.com’, ‘$1$W.UWoG.0$Bnq8mcbsi1UhFVpiJ2jvY0′, ‘testuser’, ‘hiamdin.com/testuser/’, ’2048′, ‘hiadmin.com’, ’1′);
Query OK, 1 row affected (0.00 sec)
注:
#在mailbox生成用户帐号、密码、以及邮箱容量quota 2048为2GB
#其中password字段值,可以使用 openssl passwd -1 testuser生成;

mysql> INSERT INTO alias (address, goto, domain, active)
-> VALUES (‘testuser@hiadmin.com’, ‘testuser@hiadmin.com’, ‘hiadmin.com’, ’1′);
Query OK, 1 row affected (0.00 sec)
注:
#alias 中生成别名;

c.也可以用iRedmail的tools 脚本;

———————————————-
$cd /path/to/iRedMail-0.4.0/tools #该目录下有个create_mail_user_MySQL.sh的脚本,可以为你生成增加用户的sql语句;
#执行脚本前实现生成userlist.txt
$echo testuser >userlist.txt #每行一个用户名即可
$sh create_mail_user_MySQL.sh userlist.txt #生成output.sql
#登录到mysql,在vmail库中执行
mysql> source /path/to/output.sql

d.设定自己域名的mx记录,再登录RoundCube测试能否收发邮件!

Yum 下载缓慢?

2009年8月23日 ready 5 条评论

yum下载缓慢?

那么

yum -y install yum-fastestmirror

然后再试。是不是快了好多啊。

CentOS 5.3已经添加了163的镜像,这个东东可以不需要使用了。2010-04-15添加

分类: Linux 标签:

linux常用系统性能监控工具

2009年8月17日 ready 1 条评论
分类: Linux 标签: