Submitted by admin on 2011, July 17, 10:43 PM
rysnc是一个数据镜像及备份工具,具有可使本地和远程两台主机的文件,目录之间,快速同步镜像,远程数据备份等功能。在同步过程中,rsync是根据自己独特的算法,只同步有变化的文件,甚至在一个文件里只同步有变化的部分,所以可以实现快速的同步数据的功能。
第一种:依赖ssh服务同步目录
rsync -aSvH /home/N22/test1/* /home/N22/test2/
参数解释:
a 等同于 -rlptgoD 归档模式,就是保持文件所有属性、权限不变
S 有效的处理零散文件
v verbose模式
H 保持hard links
上面这个表示 将本机的/home/N22/test1/目录下所有的文件,同步到/home/N22/test2/目录下。这种方式我只能同步新增和更新,不能同步删除,不知道原因,修改为
rsync -aSvH –delete /home/N22/test1/* /home/N22/test2/
时,虽然添加了delete仍然不能同步删除的文件。
和其它服务器同步时,需要账户和密码:rsync -aSvH /home/* root@192.168.1.1:/home/
第二种:服务器和客户端
经过测试,这种服务器和客户端的配置能完美解决删除文件和目录的同步功能。
服务器端配置:
1、rysnc一般是通过xinetd进行启动的。
修改/etc/xinetd.d/rsync,只修改一个地方
# default: off
# description: The rsync server is a good addition to am ftp server, as it \
# allows crc checksumming etc.
service rsync
{
disable = yes 修改为disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = –daemon
log_on_failure += USERID
}
2、接下来编辑配置文件
[root@mailsvr ~] # vi /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
[web]
path = /opt/web
ignore errors
read only = true
list = false
hosts allow = 192.168.0.5 # 允许的IP地址
hosts deny = 0.0.0.0/32 # 禁止的IP 地址
auth users = backup # 认证用户名,此例是 backup
secrets file = /etc/backup.pass #认证用户的密码文件
3、编辑服务器的密码文件 /etc/backup.pass
vi /etc/backup.pass
backup:123456
4、然后设置权限chmod 400 /etc/backup.pass
客户端配置
1. 编辑rsync连接时的密码文件 /etc/rsync_client.pass
vi /etc/rsync_client.pass
123456 # 只需要配置连接时使用的密码即可,必须与A服务器上定义的密码相同.
2. chmod 600 /etc/rsync_client.pass
3. 使用 rsync 命令连接服务器,实现文件同步
rsync -vzrtopg –progress –delete –password-file=/etc/rsync_client.passbackup@192.168.1.2::web /opt/test
4. 使用 –execlude= 排除不需要同步的文件后缀名
rsync -vzrtopg –progress –delete –password-file=/etc/rsync_client.pass –exclude=”*.tmp”backup@192.168.1.2::web /home/test
5. 使用 –execlude-from= 排除不需要同步的目录
rsync -vzrtopg –progress –delete –password-file=/etc/rsync_client.pass –exclude-from=/opt/pcdir backup@192.168.1.2::web /home/test
6、定时同步
#vi rsyncd.sh
rsync -aSvH –delete –password-file=/home/N22/rsync_client.pass backup@192.168.1.252::web /home/N22/test2/
#crontab -e
01 04 * * * /etc/rsyncd.sh
每天凌晨4点01分执行
http://hi.baidu.com/colorsight/blog/item/f0ce3816d874ec104b90a75f.html
linux | 评论:0
| Trackbacks:0
| 阅读:869
Submitted by admin on 2011, July 17, 7:30 PM
假设我这里有大量图像、CSS、javascript等静态文件,分别放在后端服务器 192.168.1.5 和 192.168.1.6上,那么我如何利用nginx的反向代理功能将不同的 http_user_agent 请求发送到指定的服务器上呢?如 "Mozilla" 转发到 192.168.1.5 ,MSIE 转发到 192.168.1.6 。
Nginx web 服务器支持if条件表达式,由此来跳转或者使用不同的配置变量。在本文中需要使用 $http_user_agent 变量,它标记了用户浏览器的类别,版本以及操作系统的一些信息,语法如下:
if ( condition ){
do_something
}
if ( $http_user_agent = "wget" ){
do_something
}
if ( $http_user_agent ~ MSIE ){
return 403;
}
if指令会就检查后面表达式的值是否为真(true),如果为真,则执行后面大括号中的内容。以下是一些条件表达式的比较方法:
1、变量的完整比较可以使用=或!=操作符
2、 部分匹配可以使用正则表达式来表示,~或~*
3、~表示区分大小写
4、~*表示不区分大小写(firefox与FireFox是一样的)
5、!~与!~* 是取反操作,也就是不匹配的意思
6、检查文件是否存在使用 -f 或 !-f 操作符
7、检查目录是否存在使用-d或!-d操作符
8、检查文件,目录或符号连接是否存在使用-e或!-e操作符
9、检查文件是否可执行使用-x或!-x操作符
10、正则表达式的部分匹配可以使用括号,匹配的部分在后面可以用$1~$9变量代替,这些和apache一致。
例子:
编辑 /usr/local/nginx/conf/nginx.conf 文件
#vi /usr/local/nginx/conf/nginx.conf
设置upstream服务器:
upstream myproxybackend {
server 192.168.1.1;
server 192.168.1.2;
server 192.168.1.3;
server 192.168.1.4;
}
upstream msiebackend {
server 192.168.1.6;
}
upstream mozillabackend {
server 192.168.1.5;
}
更新虚拟主机配置文件
server {
access_log logs/access.log;
error_log logs/error.log;
index index.html;
listen 202.54.1.5:80 default;
root /usr/local/nginx/html;
server_name example.com www.example.com 0.example.com;
## PROXY - Web
location / {
proxy_pass http://myproxybackend;
if ($http_user_agent ~ MSIE ) {
proxy_pass http://msiebackend;
}
if ($http_user_agent ~ Mozilla ) {
proxy_pass http://mozillabackend;
}
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
# many more...
# many more...
}
最后重启/重新载入nginx
#/usr/local/nginx/sbin/nginx -s reload
转
nginx | 评论:0
| Trackbacks:0
| 阅读:952
Submitted by admin on 2011, July 17, 7:29 PM
对于后端是同一端口多域名转发的nginx proxy。在nginx中的默认proxy是只能对后面real server做端口转发的,而不能做域名转发。
这个是因为默认
1 |
proxy_set_header Host $proxy_host; |
这样就等于前端输入域名后到nginx这里直接转换成IP进行转发了。
于是我们需要修改proxy_set_header的参数
1 |
proxy_set_header Host $http_host; |
例如下面一个举例。下面这个例子中backend1权重为5,其他默认为1,最大失效次数3次,如果30秒内没有响应就认为是失效了。
02 |
server backend1.test.com weight=5; |
03 |
server backend2.test.com:8080 max_fails=3 fail_timeout=30s; |
04 |
server unix:/tmp/test3; |
08 |
server_name lb.test.com; |
12 |
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
13 |
proxy_set_header X-Real-IP $remote_addr; |
14 |
proxy_set_header Host $http_host; |
nginx | 评论:0
| Trackbacks:0
| 阅读:1987
Submitted by admin on 2011, July 17, 6:52 PM
user www www;
worker_processes 10;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
#最大文件描述符
worker_rlimit_nofile 51200;
events
{
use epoll;
worker_connections 51200;
}
http
{
include conf/mime.types;
default_type application/octet-stream;
keepalive_timeout 120;
tcp_nodelay on;
upstream www.s135.com {
server 192.168.1.2:80;
server 192.168.1.3:80;
server 192.168.1.4:80;
server 192.168.1.5:80;
}
upstream blog.s135.com {
server 192.168.1.7:8080;
server 192.168.1.7:8081;
server 192.168.1.7:8082;
}
server
{
listen 80;
server_name www.s135.com;
location / {
proxy_pass http://www.s135.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
log_format www_s135_com '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /data1/logs/www.log www_s135_com;
}
server
{
listen 80;
server_name blog.s135.com;
location / {
proxy_pass http://blog.s135.com;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
log_format blog_s135_com '$remote_addr - $remote_user [$time_local] $request '
'"$status" $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /data1/logs/blog.log blog_s135_com;
}
}
转
nginx | 评论:0
| Trackbacks:0
| 阅读:1004
Submitted by admin on 2011, July 16, 2:42 PM
一些CentOS等Linux系统启动后可能会出现读进度条等待进入系统的过程,对于学习Linux启动过程非常不利,我们可以将它恢复到显示详细启动过程模式。
使用root用户修改 /boot/grub/grub.conf 文件。
[root@Slyar ~]# vim /boot/grub/grub.conf
找到下面的部分,将"rhgb"去掉,保存即可。其中"rhgb"表示"redhat graphics boot",就是图形进度条模式。而"quiet"表示在启动过程中只显示重要启动信息,类似硬件自检之类的消息不会显示,可以有选择地选用。
kernel /vmlinuz-2.6.32-71.el6.i686 ro root=UUID=697cb0d9-19f6-414a-90a1-5ceb2f40b03d rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=zh_CN.UTF-8 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet
linux | 评论:0
| Trackbacks:0
| 阅读:1071
Submitted by admin on 2011, July 16, 1:14 PM
Install DAG GPG key
wget http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt # download DAG GPG key
rpm --import RPM-GPG-KEY.dag.txt # import the key
rm RPM-GPG-KEY.dag.txt # clean up after ourselves
Install yum-priorities
yum install yum-priorities
Download and install package (i386 - 32bit)
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
rpm -Uhv rpmforge-release-0.3.6-1.el5.rf.i386.rpm # install the rpmforge
yum reporm rpmforge-release-0.3.6-1.el5.rf.i386.rpm # clean up after ourselves
Download and install package (x86_64 - 64bit)
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
rpm -Uhv rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm # install the rpmforge yum reporm rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm # clean up after ourselves
Set priorities
vim /etc/yum.repos.d/CentOS-Base.repo
[base] or [updates] or [addons] or [extras]
priority=1
[centosplus]
priority=2
vim /etc/yum.repos.d/rpmforge.repo
[rpmforge]
priority=10
------------
1. 下载RPMForge rpm包
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
2. 导入GPG Key:
rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
3. 验证安装包:
rpm -K rpmforge-release-0.5.2-2.el5.rf.i386.rpm
显示rpmforge-release-0.5.2-2.el5.rf.i386.rpm: (sha1) dsa sha1 md5 gpg OK,验证成功
4. 验证成功后,开始安装:
rpm -i rpmforge-release-0.5.2-2.el5.rf.i386.rpm
http://repoforge.org/faq/
linux | 评论:0
| Trackbacks:0
| 阅读:1253
Submitted by admin on 2011, July 15, 3:19 PM
http://bbs.lidroid.com/forum.php?mod=viewthread&tid=55
android | 评论:0
| Trackbacks:0
| 阅读:1022
Submitted by admin on 2011, July 15, 11:31 AM
一、准备
可用 root 账户的 Linux 操作系统,建议 Ubuntu 10.1
ROM 升级包(通常为 *.tar 文件)
i9000 刷机程序
刷机方法请自行研究,本文仅对修改做一个简单说明。
二、开始
Ubuntu 默认提供了图形化的应用程序来加压 tar 文件。
我们需要将其解压,得到 factoryfs.rfs 文件。
将其件塞到 Linux 任意一个地方,这里假设保存在 ~/factoryfs.rfs。
在任意地方新建一个空白目录,这里假定名为 ~/rfs。
运行终端,键入下列命令挂载 factoryfs.rfs 为一个磁盘。
此时终端的默认目录应该就是 ~ 了。
|
1
|
mount -o loop factoryfs.rfs rfs
|
如果你之前没有用超级用户权限登录系统,那么此时系统会提示你没有权限,没关系,你可以这样执行:
|
1
|
sudo mount -o loop factoryfs.rfs rfs
|
然后系统会提示你输入超级用户密码,有效期为 15 分钟。
也就是说,在 15 分钟内如果你不使用超级用户权限进行操作,那么超时后你需要重新输入。
而且,不同操作系统的“借用权限命令”是不同的,“sudo”是 Ubuntu 中的做法,其他系统请自行搜索。
此时我们可以用图形化“资源管理器”也就是“文件夹”视图来打开 rfs 文件夹,你会发现这里面就是我们 factoryfs.fs 里面的内容了。
你将可以随心所欲地,或者按照 HTC 设备 rom 修改的方法来修改这里面的文件、应用程序等。
修改完成后在终端执行下面的语句卸载该“磁盘”:
同样的,你可能会被要求提供超级用户权限。
值得注意的是,如果你先前没有使用超级用户登录,那么通过图形化界面删除、重命名或者添加文件是非常麻烦的,
因为该“磁盘”是由超级用户权限加载的,所以普通用户不能修改。
除非你修改权限,或者通过终端并使用“sudo”命令来操作,
不过切记,当你改变权限后在卸载该“磁盘”前必须将权限改回去,否则刷机时可能发生不可预料的问题。
还有一个问题,由于你将一个文件加载为磁盘,那么对于该磁盘来说,容量就等于文件大小,正常情况下是不可改变的,
当然你可以通过磁盘管理工具扩充磁盘空间,不过要小心,这样的改动可能删除 RFS 文件系统的特性,导致刷机失败。
此操作未经 LittleDai 测试。
如果一切正常,那么此时你可以将先前的 tar 文件打开,然后将先前解压处理的 factoryfs.rfs 拖入 tar 文件中的文件列表,
然后请稍等一会儿,等打包过程结束。
此时你将可以使用这个更新过的 tar 文件作为新的刷机包了。
转
android | 评论:0
| Trackbacks:0
| 阅读:1029