避免掉线而使任务中断的技巧

Posted by 曹宇伟 on 十一月 21st, 2007

使用环境:UNIX平台 (Linux)

使用screen:
  在执行可能会花费时间较长的任务时,可能我们要中断网络连接而去干别的事儿,或者网络环境不太好的地方,网络会意外中断,使用screen命令,可以使网络、终端意外断开时,可重新连接至screen程序。

其中,Ctrl+a ,0/1/2 切换screen窗口
Ctrl+a,d 分离screen窗口
screent -list  查看当前用户的screen窗口有哪些
BBC-FILER-02 01:19:48 ~ # screen -list
There is a screen on:
        17486.pts-0.BBC-FILER-02        (Detached)
1 Socket in /tmp/screens/S-root.

重新连接至已经存在的窗口:screen -r
若有多个窗口,需要指点pid,screen -r 17486

有时screen意外断线时状态为:attached
这时无法重新连接到screen窗口,可以使用screen -D 命令分离之,然后再使用-r参数连接。

升级OpenBSD的ports

Posted by 曹宇伟 on 十一月 18th, 2007

建立一个cvsup-supfile文件,内容如下:

#Defaults that apply to all the collections
*default release=cvs
*default delete use-rel-suffix
*default umask=002
*default host=cvsup.jp.openbsd.org
*default base=/cvsup
*default prefix=/cvsup

#If your network link is T1 or faster, comment out the following line.
*default compress

OpenBSD-all
#OpenBSD-src
#OpenBSD-www
#OpenBSD-ports
#OpenBSD-x11
#OpenBSD-xf4
保存,
# mg cvsup-supfile
# cd /
# mkdir cvsup
# cd
# cvusp –g –L 2 cvsup-supfile

主要cvsup站点:
cvsup.uk.openbsd.org]
cvsup.de.openbsd.org
cvsup2.de.openbsd.org
cvsup.hu.openbsd.org
cvsup.fr.openbsd.org
cvsup.ca.openbsd.org
cvsup.usa.openbsd.org
cvsup.kr.openbsd.org
cvsup.no.openbsd.org
cvsup.pt.openbsd.org
anoncvs.de.openbsd.org
rt.fm
skeleton.phys.spbu.ru
cvsup.jp.OpenBSD.org
mirror.osn.de
openbsd.informatik.uni-erlangen.de

OpenBSD-src   – The src repository
OpenBSD-ports – The ports repository
OpenBSD-www   – The www repository
OpenBSD-x11   – The XFree86-3 repository
OpenBSD-xf4   – The XFree86-4 repository
OpenBSD-all   – All OpenBSD repositories

用rsync对网站进行镜像备份

Posted by 曹宇伟 on 十月 1st, 2005

by inburst<inburst@263.net>
http://xfocus.org

  对系统管理员来说,平时的工作重心应该集中在维护系统正常运转,能够正常提供服务上,这里往往牵涉到一个数据备份的问题,在我所了解的情况中,有80% 的系统管理员不是太关心自己服务器的安全性,但往往对备分镜像的技术相当感兴趣,但由于商业产品的软硬件价格都相当高昂,因此往往会选择自由软件。这里准备介绍的rsync就是这样的软件,它可以满足绝大多数要求不是特别高的备份需求。

一、特性简介

rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。它的特性如下:

1、可以镜像保存整个目录树和文件系统。
2、可以很容易做到保持原来文件的权限、时间、软硬链接等等。
3、无须特殊权限即可安装。
4、优化的流程,文件传输效率高。
5、可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
6、支持匿名传输。

二、使用方法

rsync的使用方法很简单,我就举自己使用的例子来说明吧。

1、系统环境

rsync支持大多数的类unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。我的系统环境为:

server: FreeBSD 4.3  ip: 192.168.168.52
client: Solaris 8    ip: 192.168.168.137
rsync 版本 2.4.6(可以从http://rsync.samba.org/rsync/获得最新版本)

2、配置server端的/etc/rsyncd.conf文件

bash-2.03# cat /etc/rsyncd.conf

uid = nobody
gid = nobody
use chroot = no         # 不使用chroot
max connections = 4         # 最大连接数为4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log    # 日志记录文件

[inburst]            # 这里是认证的模块名,在client端需要指定
path = /home/inburst/python/    # 需要做镜像的目录
comment = BACKUP CLIENT IS SOLARIS 8 E250
ignore errors            # 可以忽略一些无关的IO错误
read only = yes            # 只读
list = no            # 不允许列文件
auth users = inburst        # 认证的用户名,如果没有这行,则表明是匿名
secrets file = /etc/inburst.pas    # 认证文件名

[web]
path = /usr/local/apache/htdocs/
comment = inburst.org web server

3、在server端生成一个密码文件/etc/inburst.pas

bash-2.03# cat /etc/inburst.pas
inburst:hack

出于安全目的,文件的属性必需是只有属主可读。

4、在server端将rsync以守护进程形式启动

bash-2.03# rsync –daemon

如果要在启动时把服务起来,有几种不同的方法,比如:

  a、加入inetd.conf

    编辑/etc/services,加入rsync   873/tcp,指定rsync的服务端口是873
    编加/etc/inetd.conf,加入rsync  stream  tcp   nowait  root  /bin/rsync rsync –daemon

  b、加入rc.local

    在各种操作系统中,rc文件存放位置不尽相同,可以修改使系统启动时rsync –daemon加载进去。

5、从client端进行测试

  下面这个命令行中-vzrtopg里的v是verbose,z是压缩,r是recursive,topg都是保持文件原有属性如属主、时间的参数。– progress是指显示出详细的进度情况,–delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。后面的inburst@ip中,inburst是指定密码文件中的用户名,之后的::inburst这一inburst是模块名,也就是在/etc/rsyncd.conf中自定义的名称。最后的/tmp是备份到本地的目录名。

  在这里面,还可以用-e ssh的参数建立起加密的连接。可以用–password-file=/password/path/file来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读。

bash-2.03# rsync -vzrtopg –progress –delete inburst@192.168.168.52::inburst /tmp/
Password:
receiving file list … done
./
1
785 (100%)
1.py
4086 (100%)
2.py
10680 (100%)
a
0 (100%)
ip
3956 (100%)
./
wrote 190 bytes  read 5499 bytes  758.53 bytes/sec
total size is 19507  speedup is 3.43

6、创建更新脚本

如果有比较复杂的工作,利用一些常见的脚本语言可以有帮助。比如:

bash-2.03# cat /usr/local/bin/rsync.sh

#!/bin/sh
DATE=`date +%w`

rsync -vzrtopg –progress –delete inburst@192.168.168.52::inburst /home/quack/backup/$DATE –password-file=/etc/rsync.pass >

/var/log/rsync.$DATE

7、修改/etc/crontab做好定时

比如:

bash-2.03# echo “15      4       *       *       6       root    rsync.sh”>>/etc/crontab

三、FAQ

Q:如何通过ssh进行rsync,而且无须输入密码?
A:可以通过以下几个步骤

1. 通过ssh-keygen在server A上建立SSH keys,不要指定密码,你会在~/.ssh下看到identity和identity.pub文件
2. 在server B上的home目录建立子目录.ssh
3. 将A的identity.pub拷贝到server B上
4. 将identity.pub加到~[user b]/.ssh/authorized_keys
5. 于是server A上的A用户,可通过下面命令以用户B ssh到server B上了
                e.g. ssh -l userB serverB
这样就使server A上的用户A就可以ssh以用户B的身份无需密码登陆到server B上了。

Q:如何通过在不危害安全的情况下通过防火墙使用rsync?
A:解答如下:

这通常有两种情况,一种是服务器在防火墙内,一种是服务器在防火墙外。
无论哪种情况,通常还是使用ssh,这时最好新建一个备份用户,并且配置sshd仅允许这个用户通过RSA认证方式进入。
如果服务器在防火墙内,则最好限定客户端的IP地址,拒绝其它所有连接。
如果客户机在防火墙内,则可以简单允许防火墙打开TCP端口22的ssh外发连接就ok了。

Q:我能将更改过或者删除的文件也备份上来吗?
A:当然可以:

你可以使用如:rsync -other -options -backupdir = ./backup-2000-2-13  …这样的命令来实现。
这样如果源文件:/path/to/some/file.c改变了,那么旧的文件就会被移到./backup-2000-2-13/path/to/some/file.c,这里这个目录需要自己

手工建立起来

Q:我需要在防火墙上开放哪些端口以适应rsync?
A:视情况而定

rsync可以直接通过873端口的tcp连接传文件,也可以通过22端口的ssh来进行文件传递,但你也可以通过下列命令改变它的端口:

rsync –port 8730 otherhost::
或者
rsync -e ‘ssh -p 2002′ otherhost:

Q:我如何通过rsync只复制目录结构,忽略掉文件呢?
A:rsync -av –include ‘*/’ –exclude ‘*’ source-dir dest-dir

Q:为什么我总会出现”Read-only file system”的错误呢?
A:看看是否忘了设”read only = no”了

Q:为什么我会出现‘@ERROR: invalid gid’的错误呢?
A:rsync使用时默认是用uid=nobody;gid=nobody来运行的,如果你的系统不存在nobody组的话,就会出现这样的错误,可以试试gid =

nogroup或者其它

Q:绑定端口873失败是怎么回事?
A:如果你不是以root权限运行这一守护进程的话,因为1024端口以下是特权端口,会出现这样的错误。你可以用–port参数来改变。

Q:为什么我认证失败?
A:从你的命令行看来:

你用的是:
> bash$ rsync -a 144.16.251.213::test test
> Password:
> @ERROR: auth failed on module test
>
> I dont understand this. Can somebody explain as to how to acomplish this.
> All suggestions are welcome.

应该是没有以你的用户名登陆导致的问题,试试rsync -a max@144.16.251.213::test test

四、一些可借鉴的脚本

这里这些脚本都是rsync网站上的例子:

1、每隔七天将数据往中心服务器做增量备份

#!/bin/sh

# This script does personal backups to a rsync backup server. You will end up
# with a 7 day rotating incremental backup. The incrementals will go
# into subdirectories named after the day of the week, and the current
# full backup goes into a directory called “current”
# tridge@linuxcare.com

# directory to backup
BDIR=/home/$USER

# excludes file – this contains a wildcard pattern per line of files to exclude
EXCLUDES=$HOME/cron/excludes

# the name of the backup machine
BSERVER=owl

# your password on the backup server
export RSYNC_PASSWORD=XXXXXX
########################################################################

BACKUPDIR=`date +%A`
OPTS=”–force –ignore-errors –delete-excluded –exclude-from=$EXCLUDES
      –delete –backup –backup-dir=/$BACKUPDIR -a”

export PATH=$PATH:/bin:/usr/bin:/usr/local/bin

# the following line clears the last weeks incremental directory
[ -d $HOME/emptydir ] || mkdir $HOME/emptydir
rsync –delete -a $HOME/emptydir/ $BSERVER::$USER/$BACKUPDIR/
rmdir $HOME/emptydir

# now the actual transfer
rsync $OPTS $BDIR $BSERVER::$USER/current

2、备份至一个空闲的硬盘

#!/bin/sh

export PATH=/usr/local/bin:/usr/bin:/bin

LIST=”rootfs usr data data2″

for d in $LIST; do
    mount /backup/$d
    rsync -ax –exclude fstab –delete /$d/ /backup/$d/
    umount /backup/$d
done

DAY=`date “+%A”`
   
rsync -a –delete /usr/local/apache /data2/backups/$DAY
rsync -a –delete /data/solid /data2/backups/$DAY

3、对vger.rutgers.edu的cvs树进行镜像

#!/bin/bash

cd /var/www/cvs/vger/
PATH=/usr/local/bin:/usr/freeware/bin:/usr/bin:/bin

RUN=`lps x | grep rsync | grep -v grep | wc -l`
if [ "$RUN" -gt 0 ]; then
    echo already running
    exit 1
fi

rsync -az vger.rutgers.edu::cvs/CVSROOT/ChangeLog $HOME/ChangeLog

sum1=`sum $HOME/ChangeLog`
sum2=`sum /var/www/cvs/vger/CVSROOT/ChangeLog`

if [ "$sum1" = "$sum2" ]; then
    echo nothing to do
    exit 0
fi

rsync -az –delete –force vger.rutgers.edu::cvs/ /var/www/cvs/vger/
exit 0

4、利用find的一种巧妙方式

rsync -avR remote:’`find /home -name “*.[ch]“`’ /tmp/

可以用这种方法列出需要备份的文件列表——这种方法似乎比较少人用到。

五、参考资料:

1、http://rsync.samba.org/
2、rsync examples
3、rsync FAQ

什么是GMT,什么是UTC

Posted by 曹宇伟 on 七月 22nd, 2005

什么是GMT,什么是UTC

0.时标
时标意指一种将时间分配到事件的制度。现时有两类时间标准广泛被采用。一种是基于天文学,另一种则以原子振动的频率作为依据。
1.视太阳时
视太阳时是一种源于太阳所见位置的时间标准。日晷可直接显示视太阳时。
2.UT0

由于地球轨道并非圆形,其运行速度又随着地球与太阳的距离改变而出现变化,因此视太阳时欠缺均匀性。视太阳日的长度同时亦受到地球自转轴相对轨道面的倾斜度所影响。为着要纠正上述的不均匀性,天文学家计算地球非圆形轨迹与极轴倾斜对视太阳时的效应。平太阳时就是指经修订后的视太阳时。在格林尼治子午线上的平太阳时称为世界时(UT0),又叫格林尼治平时(GMT)。
3.UT1

UT1 与 UT2 是两种较 UT0 均匀的时标。随着较为精确的时钟面世,天文学家发现在不同地点量度的世界时出现差别。这种差别是由于地轴摆动而引起的。各地天文台详细测量了地轴摆动的影响后,制定了一种称为 UT1 的新时标将这种影响删除。
4.UT2

在时钟的精确度进一步改进后,又发现 UT1 具有周期性变化。这种变化是由地球自转率的季节性变动引起的。上述影响经修正后,得到一种更加均匀的时标称为 UT2。
5.国际原子时(TAI):
1967年的第13届国际度量衡会议上通过了一项决议,采纳以下定义代替秒的天文定义:一秒为铯-133原子基态两个超精细能级间跃迁辐射9,192,631,770周所持续的时间。国际原子时是根据以上秒的定义的一种国际参照时标,属国际单位制(SI)。
国际原子时标是一种连续性时标,由1958年1月1日0时0分0秒起,以日、时、分、秒计算。原子时标的准确度为每日数纳秒,而世界时的准确度则只为数毫秒。
6.协调世界时(UTC):

一种称为协调世界时的折衷时标于1972年面世。为了确保协调世界时与世界时(UT1)相差不会超过0.9秒,有需要时便会在协调世界时内加上正或负闰秒。因此协调世界时与国际原子时(TAI)之间会出现若干整数秒的差别。位于巴黎的国际地球自转事务中央局(IERS)负责决定何时加入闰秒。

OpenBSD Tips收集整理

Posted by 曹宇伟 on 七月 19th, 2005

OpenBSD Tips收集整理

Q:网关配制
A:直接将IP写入/etc/mygate

Q:机器名
A:直接写入/etc/myname

Q:网卡配制
A:直接将参数写入/etc/hostname.ifname
比如,网卡名为fxp0则将配制内容:inet 192.168.0.1写入/etc/hostname.fxp0

Q:关闭sendmail
A:将/etc/rc.conf中的sendmail_flags=”xxxx”改为sendmail_falgs=NO

关闭rc.conf中的其它服务方法类似。

Q:重新设置时区:
A:# cd /etc
# ln -s /usr/share/timezone/US/Eastern localtim

Q:如何在OpenBSD下一块网卡绑定多个IP地址!
A:编辑/etc/hostname.dc0 (注意,不同的网卡是不同的名称,我这边是dc0)
#cat /etc/hostname.dc0
inet 192.168.0.2 255.255.255.0 media 100baseTX
inet alias 192.168.0.3 255.255.255.255
inet alias 192.168.0.4 255.255.255.255
现在你知道如何做了吗?
或者通过ifconfig来进行
ifconfig dc0 inet alias 192.168.0.3 netmask 255.255.255.255

Q:查看IP地址的情况!
A:$ ifconfig -A
dc0: flags=8863
media: Ethernet manual
inet 192.168.0.2 netmask 0xffffff00 broadcast 192.168.0.255
inet 192.168.0.3 netmask 0xffffffff broadcast 192.168.0.3
这个地方一定要使用参数-A
你可以man ifconfig可以看到
If -A is used, it causes full interface alias information for each inter-face to be displayed.

这个参数是用来显示全部接口的alias信息的!

Q:如何使你的OpenBSD支持tab键补齐!

A:到ftp://ftp.openbsd.org/下载一个tcsh-6.12.00-static的package

然后使用pkg_add tcsh-6.12.00-static.tgz
修改/etc/shells
加入
/usr/local/bin/tcsh

执行命令vipw或者chsh修改root的shell为/usr/local/bin/tcsh

注销,重新登陆,你就可以发现你现在的shell可以使用tab键补齐了!

补充:你同样可以使用bash,设置方法同上!

Q:完全关闭sendmail不仅需要
A:将/etc/rc.conf中的sendmail_flags=”xxxx”改为sendmail_falgs=NO
由于系统定时任务还会启动它,所以还需作如下修改
修改/etc/daily
找到下面代码
sh /etc/security 2>&1 > $OUT
if [ -s $OUT ]; then
mail -s “$host daily insecurity output” root < $OUT
fi

修改如下

sh /etc/security 2>&1 > $OUT.TMP

if [ -s $OUT.TMP ]; then

echo “$host daily insecurity output” > $OUT

cat $OUT.TMP >> $OUT

rm $OUT.TMP

/usr/libexec/mail.local root > $OUT

fi

修改crontab

#crontab -u root -e

30 1 * * * /bin/sh /etc/daily 2>&1 | tee /var/log/daily.out | mail – s “`/bin/hostname` daily output” root

30 3 * * 6 /bin/sh /etc/weekly 2>&1 | tee /var/log/weekly.out | mail -s “`/bin/hostname` weekly output” root

30 5 1 * * /bin/sh /etc/monthly 2>&1 | tee /var/log/monthly.out | mail -s “`/bin/hostname` monthly output” root

修改为

30 1 * * * /bin/sh /etc/daily 2>&1 | tee /var/log/daily.out | /usr/libexec/mail.local root

30 3 * * 6 /bin/sh /etc/weekly 2>&1 | tee /var/log/weekly.out | /usr/libexec/mail.local root

30 5 1 * * /bin/sh /etc/monthly 2>&1 | tee /var/log/monthly.out | /usr/libexec/mail.local root

并注释掉启动Sendmail行

#*/30 * * * * /usr/sbin/sendmail -L sm-msp-queue -Ac -q

Q:如何让OpenBSD同步网络时间

A:使用命令:

rdate -n time.cn99.com

-n Use SNTP (RFC 1361) instead of the RFC 868 time protocol.

By default, rdate uses the RFC 868 TCP protocol

而在FreeBSD则是用ntpdate来进行时间的同步!

Q:在OpenBSD下通过ftp这个命令来代替fetch的用法!

A”命令的使用格式如下!

ftp -m -V http://apache.linuxforum.net/dist/httpd/apache_1.3.29.tar.gz

这个命令从linuxforum.net的服务器上取得apache_1.3.29.tar.gz这个文件!

如果是从ftp服务器上取得文件,参数相同!

命令参数解释:

-m Causes ftp to always display the progress meter in cases where it

would not do so by default.

-V Disable verbose mode, overriding the default of enabled when in-

put is from a terminal.

Q:如何让OpenBSD关闭并自动关闭电源

A:shutdown -ph now

Q:如何在OpenBSD下面mount .iso文件

A:# mkdir /mnt/iso

# vnconfig svnd0 /home/iso/OpenBSD_3_6.iso

# mount -t cd9660 /dev/svnd0c /mnt/iso

或者:

# mount_cd9660 /dev/svnd0c /mnt/iso

# cd /mnt/iso

Q:如何在OpenBSD下面快速安装package

A:前提:

网络环境,可以连接到Internet,或者你内部有OpenBSD的package的mirror也可以!

设置:

在/root/.cshrc中加入

setenv SITE ftp://ftp5.usa.openbsd.org/pub/OpenBSD/snapshots/packages/i386

上面上我自己使用的设置,你可以根据具体的环境,具体的服务器进行设置。

注销重新登陆使setenv生效。

查找你需要的package

grep packagename /root/mbox

安装package:

pkg_add $SITE/packagename

我的一个例子

OpenBSD[/root]-root->grep cvsup-16.1g mbox

cvsplot-1.6.5.tgz cvsup-16.1g-no_x11.tgz

cvsup-16.1g.tgz cvsupd-16.1g-no_x11.tgz

OpenBSD[/root]-root->pkg_add $SITE/cvsup-16.1g-no_x11.tgz

cvsup-16.1g-no_x11: complete

Q:无安装光盘快速重新安装OpenBSD系统!

A:启动的时候使用boot /bsd.rd

然后安装选择本地硬盘或者通过ftp或者http或者nfs来进行安装,非常方便快捷!

希望FreeBSD也可以做到这样!

安装OpenBSD

Posted by 曹宇伟 on 七月 18th, 2005

回忆了一下OpenBSD的安装方法,这次不想再到处再找光驱了,用软驱和网络安装吧。参考了一下OpenBSD的安装指南


Copyright © 2007 花开的地方. All rights reserved.