版本控制、SVN基础、实战、RPM打包、rsync+SSH同步、inotify实时同步

基础知识:
1)文件共享同步5种方式: NFS、NAS、rsync、scp、ftp
2) rsync :做文件同步的首先;
3) scp实现免密码文件同步:此方式采用scp定时复制,实现server和client的文件同步。
4) ftp实现文件同步:文件同步效果不好;
5) NAS存储:(Network Attached Storage)网络存储基于标准网络协议实现数据传输,为网络中的Windows / Linux / Mac OS 等各种不同操作系统的计算机提供文件共享和数据备份。
6) NFS:NFS(Network File System)即网络文件系统;
7)NAS和NFS都是采用网络协议实现文件的共享,但区别在于NAS是硬件级别的实现,NFS是软件实现。


一、rsync 远程同步 (remote sync)
1.1 什么是rsync
——rsync可以根据数据的变化进行差异备份;支持本地复制,或其他SSH 、rsync主机同步;
1.2 rsync 命令格式:
基本格式:rsync [选项] 源目录 目标目录
常用选项:
-a:归档模式,递归并保留对象属性,等同于-rlptgoD
-v:显示同步过程的详细(verbose)信息
-z:在传输文件时进行压缩(compress)
-H:保留硬链接文件
-A:保留ACL属性信息
–delete:删除目标目录有而源目录没有的文件
-r:递归模式,包含目录及子目录中所有文件
-l:对于符号链接文件仍然复制为符号链接文件
-p:保留文件的权限标记
-t:保留文件的时间标记
-g:保留文件的属组标记(仅超级用户使用)
-o:保留文件的属主标记(仅超级用户使用)
-D:保留设备文件及其他特殊文件
–password-file=FILE:指定密码文件,将密码写入文件,实现非交互式数据同步,这个文件名也需要修改权限为600

本地同步: ——rsync [选项] 本地目录1 本地目录2 #同步整个文件夹
—— rsync [选项] 本地目录1/ 本地目录2 # 只同步目录下的数据

1.3 rsync +SSH同步
——列出SSH服务端资源
rsync user@host:远程目录/
——与远程的SSH目录保持同步
–下行 :rsync 【…】 user@host:远程目录 本地目录
–上行 :rsync 【…】本地目录 user@host:远程目录
——服务端要求:开启sshd服务,并提供授权的用户、密码


实验一、 配置rsync+rsync同步服务
环境:服务端A 172.25.0.11 ,需要配置rsyncd.conf文件;
客户端 B:172.25.0.10;
软件: rsync #centos默认安装了,在服务器端创建/common目录作为共享目录。
三个配置文件,分别是rsyncd.conf(主配置文件),rsyncd.secrets(密码文件),rsyncd.motd(服务器信息文件)。
配置服务端rsync 同步源:
#useradd wdd
#passwd wdd (密码也是wdd)
]# mkdir /common
]# chmod 777 /common/ //设置权限
]# touch /common/t01.txt
]# echo “wawawaw” > /common/t01.txt
]# vim /etc/rsyncd.conf
use chroot = yes
address = 172.25.0.11
port 873
log file = /var/log.rsyncd.log //日志文件
pid file = /var/run/rsyncd.pid
[share] //设置同步目录
comment = rsync common
path = /common
read only = no
dont compress = *.gz //对后面格式不进行压缩
auth user = wdd //授权同步用户名称
secrets file = /etc/rsyncd_users.db //用户密码
]# vim /etc/rsyncd_users.db
wdd:wdd //同步用户和密码
]# chmod 600 /etc/rsyncd_users.db //设置权限
]# killall -9 rsync
]# rsync --daemon //启动rsync服务
]# rsync --daemon --help
客户端验证:
]# rsync -avz wdd@172.25.0.11:/common/ /client
]# ls /client
]# cd /client
]# touch t02.txt
]# echo “aaaaaa” > t02.txt
]# rsync -avz /client/t02.txt wdd@172.25.0.11:/common/ //上传

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
二、inotify 实时同步
2.1 基础知识:
inotify机制可用于监控文件或目录。当监控目录时,与该目录自身以及该目录下面的文件都会被监控,其上有事件发生时都会通知给应用程序。inotify监控机制为非递归,若应用程序有意监控整个目录子树内的事件,则需对该树中的每个目录发起inotify_add_watch()调用。可使用select(),poll(),epoll()以及由信号驱动的I/O来监控inotify文件描述符。
同步的实时性:
——按照固定周期定期同步:时间间隔不好固定,同步不及时或资源浪费;
——实时性叫差
Linux内核的inotify机制:
——提供事件响应式的文件系统通知机制;
——安装inotify-tools控制工具可以调用此机制实现监控
监控事件:
IN_ACCESS :被监控项目或者被监控目录中的条目被访问过
IN_MODIFY :被监控项目或者被监控目录中的条目被修改过
IN_ATTRIB : 被监控项目或者被监控目录中条目的元数据被修改过
IN_CLOSE_WRITE :一个打开的,等待写入的文件或目录被关闭。
IN_CLOSE_NOWRITE :一个以只读方式打开的文件或目录被关闭
IN_CLOSE :一个掩码,可以很便捷地对前面提到的两个关闭事件(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)进行逻辑操作。
IN_OPEN : 文件或目录被打开。
IN_MOVED_FROM :被监控项目或者被监控目录中的条目被移出监控区域。
IN_MOVED_TO : 文件或目录被移入监控区域。
IN_MOVE : 可以很便捷地对前面提到的两个移动事件(IN_MOVED_FROM | IN_MOVED_TO)进行逻辑操作的掩码。
IN_CREATE : 在被监控目录中创建了子目录或文件。
IN_DELETE: 被监控目录中有子目录或文件被删除。
IN_DELETE_SELF : 被监控项目本身被删除。监控终止,并且将收到一个 IN_IGNORED 事件。
IN_MOVE_SELF : 监控项目本身被移动。


inotifywait:用于持续监控,实时输出结果
inotifywatch:用于短期监控,任务完成后再出结果

inotifywait 监控操作 格式: inotifywait [选项] 目标文件夹
常用选项:-e: 事件
-d:后台运行
-m:始终保持事件监听状态
-q:打印很少的信息,仅仅打印监控事件的信息 安静状态
-r :递归查询目录
-timefmt:指定时间输出的格式
-excluder:排除文件或者目录的时候不区分大小写


实验 : rsync + inotify 实现文件实时同步 (在上一个实验基础上进行。)
主机A:172.25.0.11 ,作为同步源 ;主机B:172.25.0.10
软件:inotify-tools-3.13.tar.gz
主机B 上配置:
安装软件 ]# tar -xvf inotify-tools-3.13.tar.gz
#yum -y install gcc gcc-c++ make
#cd inotify-tools-3.13/
#./configure
#make && make check
#make install
#inotifywait --help
#inotifywait -mrq -e create,modify,move,delete,attrib /var/www/html/ & //后台运行inotifywait 工具实时监控
]# vim /etc/sysctl.conf //安装inotify之后,更改内核参数
fs.inotify.max_queue_events=16384 //监控队列大小
fs.inotify.max_user_instances=1024 //最多监控实例数
fs.inotify.max_user_watches=1048576 //每个实例最多监控文件数


实验1要求:为两台web服务器的网页目录/var/www/html/配置同步,基于inotifywait监控技术实现实时触发操作,两台web服务基于SSH免密登录,编写inotify+rsync同步脚本,验证实时同步效果。
A】#yum -y install httpd
#ssh-keygen
#ssh-copy-id root@172.25.0.10
#ssh-copy-id root@172.25.0.1


B] #yum -y install httpd
#ssh-keygen#
ssh-copy-id root@172.25.0.11
#ssh-copy-id root@172.25.0.11
]# vim /root/isync.sh //编写同步脚本
#!/bin/bash
FROM_DIR="/var/www/html/"
RSYNC_CMD=“rsync -az --delete $FROM_DIR root@172.25.0.11:/var/www/html/”
while inotifywait -rqm -e modify,move,create,delete,attrib $FROM_DIR
do
$RSYNC_CMD
done &
]# chmod +x /root/isync.sh //赋予脚本执行权限
]# /root/isync.sh
]# pgrep -l inotify //查看inotify是否在运行
8485 inotifywait
验证:]# cd /var/www/html/
]# touch n01.txt
/var/www/html/ CREATE n01.txt
/var/www/html/ ATTRIB n01.txt
]# echo “wawa” > n01.txt
A】]# cd /var/www/html
]#ls

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
三、版本控制 Subversion
基础知识:
——Subversion是一个自由/开源的版本控制系统,在subversion容许数据恢复到早期版本,支持检查数据修改的历史,容许和别人协作文档并跟踪所做的的修改。特点:记录每一次改变;
版本库:是版本控制核心
版本控制系统的核心任务是 :协作编辑和数据共享
Apache通过mod_dav_svn模块可以访问版本库,客户端可以通过Apache取得版本库资料。
svnserve +ssh 的 方式与服务器建立SSH隧道连接,再通过SSH调用svnserver程序,实现数据的安全加密。
——TortoiseSVN就是版本控制的客户端,通过TortoiseSVN将文件上传,更新到数据仓库,并查看版本,下载指定版本的文件。


版本模型:
——锁定-修改-解锁
问题:锁定后可能导致管理问题;锁定导致不必要的串行开放;
——拷贝-修改-合并
Subversion 控制系统使用拷贝-修改-合并模型:
1)每个客户连接版本库,并建立个人工作副本;
2)用户并行工作,修改自己的副本
3)最终,合并版本;个别冲突问题,需要人为手动解决。
Subversion 的组件:
—— svn :客户端命令行命令 格式:svn 命令【选项】
]# svn --help
命令: add : 添加文件
commit : 提交更新 (ci) //将本地工作副本修改后的内容发布到版本中
checkout : 检出代码 (co)
cat : 查看代码文件内容
del : 删除文件 (del\remove\rm)
diff : 文件对比 (di)
import : 导入代码
info : 查看版本信息
list : 查看文件列表 (ls)
log :查看版本历史
update : 更新
mkdir :创建目录
revert :回滚
选项:
–username 用户名
–password 密码
–revision(-r) 指定要检查的特定版本


commit : //将本地工作副本修改后的内容发布到版本中
copy SRC DST 将工作副本中的一个文件或者目录复制至版本库
delete PATH 从本地工作副本中删除一个项目
delete URL 从版本库中删除一个项目
diff 对比两个版本之间的差别
import 提交一个路径的副本至版本库
info 显示本地或远程版本信息


——svnversion :用于报告工作副本状态(就项目的版本号而言)的工具
—— svnlook :可以直接检查仓库的工具
格式:svnlook 命令 /版本库路径 【选项】
选项:–revision(-r)指定要检查的特定版本
命令:author 显示作者
cat 显示版本库中文件内容
date 显示时间标记
log 显示日志信息
tree 显示版本库资料树

——svnadmin :用于创建、调整或修复svbversion仓库的工具
命令:create 创建一个新的版本库;
hotcopy 版本库热备
lslocks 打印所有的锁描述

——mod_dav_svn :可插拔的Apache HTTP服务器模块,改模块允许用户通过网络访问仓库
——svnserve :可独立运行的服务器程序,是另一种允许用户通过网络访问仓库的方法
用法:svnserve 【选项】
选项:-d :以守护进程方式运行svnserver
–listen-port=port :指定监听的端口,默认监听端口为3690;
-r root :为版本库指定一个虚拟的路径,默认客户端要指定绝对路径访问库。//仅需要发布个别版本库的时指定版本库路径;

——svnsync :可以跨越网路对仓库进行增量镜像备份的程序
——svnrdump : 可以跨越网络对仓库历史进行转储和加载的程序


客户端访问版本库的方式:
file:/// #直接访问本地磁盘上的版本库(客户端与服务器在一台机器上)
http:// #配置Apache的WebDAV协议,通过网页访问版本库
https:// #与http://相似,但是使用了SSL进行数据加密
svn:// #通过svnserve定义的协议访问版本库
svn+ssh:// #与svn://相似,但使用了SSH封装加密数据


3.1 配置Suvversion服务 (关闭防火墙和selinux)
1、安装Subversion (主机A:172.25.0.11)
]# yum -y install subversion
_]# rpm -qc subversion
/etc/sysconfig/svnserve


2、创建版本库
格式:svnadmin create /版本库路径
]# mkdir /var/svn
]# svnadmin create /var/svn/project1


3、认证与授权
使用SVN内置的认证机制可以有效地增强客户端访问版本库的安全性

]# ls /var/svn/project1/
conf db format hooks locks README.txt
]# vim /var/svn/project1/conf/svnserve.conf //修改配置文件 (配置文件内容顶格写,不可以有空格)
anon-access = none //设置拒绝匿名账号访问,可以设置选项是:none,read,write
auth-access = write //经过认证的账户权限为可写权限
password-db = passwd //账户名称与密码的存放文件名,该文件在conf目录下
authz-db = authz //基于路径的访问控制文件名(可以对文件或目录设置权限)

]# vim /var/svn/project1/conf/passwd //设置账户信息
harry = pass //用户及密码
tom = pass
]# vim /var/svn/project1/conf/authz //设置访问控制权限
[groups]
harry_and_tom = harry,tom //定义组,组员
[/] //对版本库根路径设置权限,可以设置为需要控制的路径
harry = rw // harrya可读写
tom = rw

  • = r //其他人只读

4、服务器本机导入初始化数据
使用svn 命令将项目代码导入版本库中:import 执行导入操作 ;-m 设置说明性的字符串
]# cd /usr/lib/systemd/system
]# svn import file:///var/svn/project/ -m “Init Data”
]# svn list file:///var/svn/project1/

5、启动svnserver服务
]# systemctl start svnserve
]# svnserve -d //或者以守护进程的方式启动
~]# netstat -antulp | grep svnserve (端口3690)
tcp 0 0 0.0.0.0:3690 0.0.0.0:*
]# svnserve --help
【这里容易出现“svnserve: E000098: 不能绑定服务器套接字: 地址已在使用 ”的报错
解决方法:查找出目前正在使用的svnserve进程,然后kill掉
ps -aux | grep svnserve
kill -9 pid号 】


6、测试
本机测试172.25.0.11:
]# svn co file:///var/svn/project1 mine
]# svn commit -m “Init Data” mine
]# svn info mine
]# svn import -m “New project” /etc file:///var/svn/project1
]# svn  info  svn://172.25.0.11/var/svn/project1

注意:对版本库中的代码不可以直接使用命令删除或创建;
法找到代码库,启动服务器时没有-r,客户端连接需要指定绝对路径。
防火墙和selinux一定要关闭。


3.2 TortoiseSVN 使用
官方网站 http://tortoisesvn.NET/downloads (下载汉化包进行汉化)
生成的仓库目录:
——conf 该仓库的配置文件信息(仓库的用户访问帐号、权限等)
——db 数据实际存储的位置
——hooks 放置hook脚本文件的目录
——locks 用来放置Subversion文件库锁定数据的目录,用来追踪存取文件库的客户端
——format文件是一个文本文件,里面只放了一个整数,表示当前文件库配置的版本号

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
四、RPM打包
RPM(Redhat Package Manager)是用于Redhat、CentOS、Fedora等Linux 分发版(distribution)的常见的软件包管理器。RPM打包使用的是rpmbuild命令,这个命令来自rpm-build包。还需要其他的编译打包工具,make、gcc,python的setuptools等,根据需要安装即可。
安装rpm-build软件包,编写SPEC配置文件,创建新的RPM软件包。利用rpmbuild打包,需要两类文件:1、源码,源码以tar归档进行压缩的源码包,以及一些.patch文件,存放于目录./SOURCES下;2、.spec文件,定义了打包的动作,以及依赖,是打包的最主要类容。
——SPEC配置文件包含的内容:
Name: 软件包的名称
Summary: 软件包的内容概要
Version: 软件的实际版本号
Release: 发布序列号
Group: 软件分组,建议使用标准分组
License: 软件授权方式,通常就是GPL
Source: 源代码包,可以带多个用Source1、Source2等源,后面也可以用%{source1}、%{source2}引用
URL: 软件的主页
Vendor: 发行商或打包组织的信息,
Disstribution: 发行版标识
Patch: 补丁源码
BuildRoot: 这个是安装或编译时使用的“虚拟目录”,一般定义为:%{tmppath}/{name}-%{version}-%{release}-root。后面可使用$RPM_BUILD_ROOT 方式引用。
Prefix: %{_prefix} 为了解决今后安装rpm包时,并不一定把软件安装到rpm中打包的目录的情况
Requires: 该rpm包所依赖的软件包名称,可以用>=或<=表示大于或小于某一特定版本
Build Arch: 指编译的目标处理器架构
Provides: 指明本软件一些特定的功能,以便其他rpm识别
Packager: 打包者的信息
%description 软件的详细说明
——SPEC文件主体:
%prep 预处理脚本
%build 开始构建包,在/usr/src/asianux/BUILD/%{name}-%{version}目录中进行make的工作
%install 开始把软件安装到虚拟的根目录中.在/usr/src/asianux/BUILD/%{name}-%{version}目录中进行make install的操作。
%configure 这个不是关键字,而是rpm定义的标准宏命令。
%setup -n %{name}-%{version} 把源码包解压并放好通常是从/usr/src/asianux/SOURCES里的包解压到/usr/src/asianux/BUILD/%{name}-%{version}中。
%clean 清理临时文件
%pre rpm 安装前执行的脚本
%post rpm 安装后执行的脚本
%preun rpm 卸载前执行的脚本
%postun rpm 卸载后执行的脚本
%files 定义那些文件或目录会放入rpm中
%defattr (-,root,root) 指定包装文件的属性,分别是(mode,owner,group),-表示默认值,对文本文件是0644,可执行文件是0755
%changelog 变更日志

#rpmbuild
-bp 只作准备 (解压与打补丁)
-bc 准备并编译
-bi 编译并安装
-bl 检验文件是否齐全
-ba 编译后做成*.rpm和src.rpm
-bb 编译后做成*.rpm
-bs 只做成*.src.rpm


4.2 打包流程:
——准备源码软件
——安装rmp-build
#yum -y install gcc pcre-devel zlib-devel //安装编译依赖包
]# yum -y install rpm-build
]# find / -name rpmbuild
/root/rpmbuild
/usr/bin/rpmbuild
]# ls /root/rpmbuild //查看rpmbuild目录结构
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
#rpm --showrc
——编写编译SPEC配置文件
]# vim /root/rpmbuild/SPECS/nginx.spec
——编译RPM包

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值