版本控制
版本库
典型的客户/服务器系统
- 版本库是版本控制中心的核心
- 任意数量客户端
- 客户端通过写数据库分享代码
版本控制系统
集中式版本控制系统
- 开发者之间共用一个仓库(repository)
- 所有操作需要联网
分布式版本操作系统
- 每个开发者都是一个仓库的完整克隆,每个人都是服务器
- 支持断网操作
版本控制软件
- 集中式版本控制软件
CVS
SVN(Subversion) - 分布式版本控制软件
Git
BitKeeper(收费)
Git基本概念
- Git仓库:保存所有数据的地方
- 工作区:从仓库中提取出来的文件,放在磁盘上供你使用或更改
- 暂存区:就是一个文件,索引文件,保存了下次将提交的文件列表信息
Git作用
当我们把一个文件上传到git里,让git帮我们去管理,只要你把文件放到git里了,以后你对这个文件不管怎么修改,它都会把你的文件所有修改的历史记录全部备份下来,可以随意的还原历史版本,简单来说git的作用就是帮你管理文件,对于git来说,这个文件有很多的版本,每修改一次就产生一个版本.
Git工作流程
1.从服务器上clone数据到本地,即工作区
2.工作区内存放最新版文件,但是工作区内修改的文件是不能直接提交到GIt仓库
3.暂存区是指你修改所有文件的一个暂时存放的地方,只有修改过的文件才能放到暂存区,再由暂存区提交到仓库
4.GIt仓库,即本地仓库. 存放着所有文件的历史版本
5.在联网的情况下把本地仓库所有修改的文件回传到服务器上 .断网的情况下,本地仓库就是你的服务器.
Git基本操作
问题
要求先快速搭建好一台Git服务器,并测试该版本控制软件,要求如下:
- 安装Git软件
- 创建版本库
- 客户端克隆版本仓库到本地
- 本地工作目录修改数据
- 提交本地修改到服务器
方案
实验拓扑如图-1所示,Git工作流如图-2所示。
步骤
- 步骤一:部署Git服务器(192.168.2.100作为远程git服务器)
1)YUM安装Git软件。
[root@web1 ~]# yum -y install git
2)初始化一个空仓库。
[root@web1 ~]# mkdir /var/git
[root@web1 ~]# git init /var/git/project --bare
初始化空的 Git 版本库于 /var/git/project/
[root@web1 ~]# ls /var/git/project
config description HEAD hooks info objects refs
- 步骤二:客户端测试(192.168.2.200作为客户端主机)
使用git常用指令列表如表-1所示。
最常用的 git 命令有:
add 添加文件内容至索引
bisect 通过二分查找定位引入 bug 的变更
branch 列出、创建或删除分支
checkout 检出一个分支或路径到工作区
clone 克隆一个版本库到一个新目录
commit 记录变更到版本库
diff 显示提交之间、提交和工作区之间等的差异
fetch 从另外一个版本库下载对象和引用
grep 输出和模式匹配的行
init 创建一个空的 Git 版本库或重新初始化一个已存在的版本库
log 显示提交日志
merge 合并两个或更多开发历史
mv 移动或重命名一个文件、目录或符号链接
pull 获取并合并另外的版本库或一个本地分支
push 更新远程引用和相关的对象
rebase 本地提交转移至更新后的上游分支中
reset 重置当前HEAD到指定状态
rm 从工作区和索引中删除文件
show 显示各种类型的对象
status 显示工作区状态
tag 创建、列出、删除或校验一个GPG签名的 tag 对象
- clone克隆服务器仓库到本地。
[root@web2 ~]# yum -y install git #首先查看是否有git软件
[root@web2 ~]# git clone root@192.168.2.100:/var/git/project
正克隆到 'project'...
Warning: Permanently added '192.168.2.100' (ECDSA) to the list of known hosts.
root@192.168.2.100's password:
warning: 您似乎克隆了一个空版本库。
[root@web2 ~]# ls #当前多了一个空的project目录,project即为工作区
Desktop lnmp_soft lnmp_soft.tar.gz nginx-1.12.2 nginx-1.12.2.tar.gz project
[root@web2 ~]# cd project/
[root@web2 project]# ls
[root@web2 project]# ls -a #隐藏的仓库,存放所有历史版本
. .. .git
!!!做git有关的任何操作一定要先cd进git的工作区
2) 本地工作区对数据进行增删改查(必须要先进入仓库再操作数据)。
[root@web2 project]# echo "init data" > init.txt
[root@web2 project]# mkdir demo
[root@web2 project]# cp /etc/hosts demo
[root@web2 project]# ls
demo init.txt
3) 查看仓库中数据的状态。
[root@web2 project]# git status
# 位于分支 master
#
# 初始提交
#
# 未跟踪的文件:
# (使用 "git add <file>..." 以包含要提交的内容)
#
# demo/
# init.txt
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
4) 将工作区的修改提交到暂存区。
[root@web2 project]# git add . #.代表当前,所有的文件都提交到暂存区
5 ) 修改git配置。
[root@web2 project]# git commit -m "注释" #提交,报错
[master(根提交) 3ef2e08] 注释
Committer: root <root@web2.example.com>
您的姓名和邮件地址基于登录名和主机名进行了自动设置。请检查它们正确
与否。您可以通过下面的命令对其进行明确地设置以免再出现本提示信息:
git config --global user.name "Your Name"
git config --global user.email you@example.com
设置完毕后,您可以用下面的命令来修正本次提交所使用的用户身份:
git commit --amend --reset-author
2 files changed, 3 insertions(+)
create mode 100644 demo/hosts
create mode 100644 init.txt
[root@web2 project]# git config --global user.name "Your Name" #config永久生效
[root@web2 project]# git config --global user.email you@example.com
[root@web2 project]# cat ~/.gitconfig
[user]
name = Your Name
email = you@example.com
[root@web2 project]# git status #再次查看服务状态
位于分支 master
无文件要提交,干净的工作区
6) 将本地仓库中的数据推送到远程服务器(web2将数据推送到web1)。
[root@web2 project]# git config --global push.default simple
[root@web2 project]# git push
root@192.168.2.100's password: 输入服务器root密码
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (5/5), 358 bytes | 0 bytes/s, done.
Total 5 (delta 0), reused 0 (delta 0)
To root@192.168.2.100:/var/git/project
* [new branch] master -> master
[root@web2 project]# git status
位于分支 master
无文件要提交,干净的工作区
可以在web1上面查看
[root@web1 ~]# cd /var/git/project/
[root@web1 project]# du -sh /var/git/project/ #没有推送到服务器时的大小
56K /var/git/project/
[root@web1 project]# du -sh /var/git/project/ #已经推送到服务器时的大小变化
80K /var/git/project/
7 ) 将服务器上的数据更新到本地(web1的数据更新到web2)。
备注:可能其他人也在修改数据并提交服务器,就会导致自己的本地数据为旧数据,使用pull就可以将服务器上新的数据更新到本地。
[root@web2 project]# git pull
root@192.168.2.100's password:
Already up-to-date.
8 ) 查看版本日志。
[root@web2 project]# git log #git会以UUID作为版本号,"注释"为commit -m后面定义的名字
commit 3ef2e08e4cabc885025f397bbcf11910b67476f3
Author: root <root@web2.example.com>
Date: Fri Jan 17 10:49:07 2020 +0800
注释
[root@web2 project]# git log --pretty=oneline
3ef2e08e4cabc885025f397bbcf11910b67476f3 注释
[root@web2 project]# git log --oneline
3ef2e08 注释
[root@web2 project]# git reflog
3ef2e08 HEAD@{0}: commit (initial): 注释
备注:客户端也可以使用图形程序访问服务器。
Windows需要安装git和tortoiseGit。如图-3、图-4所示。
HEAD指针概述
- HEAD指针是一个可以在任何分支和版本移动的指针
- 通过移动指针我们可以将数据还原至任何版本
HEAD指针操作
问题
学习操作HEAD指针,具体要求如下:
- 查看Git版本信息
- 移动指针
- 通过移动HEAD指针恢复数据
方案
HEAD指针是一个可以在任何分支和版本移动的指针,通过移动指针我们可以将数据还原至任何版本。每做一次提交操作都会导致git更新一个版本,HEAD指针也跟着自动移动。
步骤
步骤一:HEAD指针基本操作
1)准备工作(多对数据仓库进行修改、提交操作,以产生多个版本)。
[root@web2 project]# echo "first" > new.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "new.txt:first"
[master 2c87f61] add first
1 file changed, 1 insertion(+)
create mode 100644 first
[root@web2 project]# echo "first" >> new.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "new.txt:first line"
[master a0480de] new.txt:first line
1 file changed, 2 insertions(+), 1 deletion(-)
[root@web2 project]# echo "second" >> new.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "new.txt:second line"
[master 5d777e6] new.txt:second line
1 file changed, 1 insertion(+)
[root@web2 project]# echo "thrid" >> new.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "new.txt:thrid"
[master 9e6746d] new.txt:thrid
1 file changed, 1 insertion(+)
[root@web2 project]# git push
root@192.168.2.100 password:
[root@web2 project]# echo 123 > num.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "num.txt:123"
[master e7db9a7] num.txt:123
1 file changed, 1 insertion(+)
create mode 100644 num.txt
[root@web2 project]# echo 456 > num.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "num.txt:456"
[master ead3f5d] num.txt:456
1 file changed, 1 insertion(+), 1 deletion(-)
[root@web2 project]# echo 789 > num.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "num.txt:789"
[master 553a0eb] num.txt:789
1 file changed, 1 insertion(+), 1 deletion(-)
[root@web2 project]# git push
root@192.168.2.100's password:
Counting objects: 10, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (9/9), 673 bytes | 0 bytes/s, done.
Total 9 (delta 3), reused 0 (delta 0)
To root@192.168.2.100:/var/git/project
9e6746d..553a0eb master -> master
2 ) 查看Git版本信息。
[root@web2 project]# git log --oneline
553a0eb num.txt:789
ead3f5d num.txt:456
e7db9a7 num.txt:123
9e6746d new.txt:thrid
5d777e6 new.txt:second line
a0480de new.txt:first line
2c87f61 add new.txt
3ef2e08 注释
3)移动HEAD指针,将数据还原到任意版本。
提示:当前HEAD指针为HEAD@{0}。
[root@web2 project]# git reflog #查看当前的log
553a0eb HEAD@{0}: commit: num.txt:789
ead3f5d HEAD@{1}: commit: num.txt:456
e7db9a7 HEAD@{2}: commit: num.txt:123
9e6746d HEAD@{3}: commit: new.txt:thrid
5d777e6 HEAD@{4}: commit: new.txt:second line
a0480de HEAD@{5}: commit: new.txt:first line
2c87f61 HEAD@{6}: commit: add new.txt
3ef2e08 HEAD@{7}: commit (initial): 注释
[root@web2 project]# git reset --hard 5d77 #移动
HEAD 现在位于 5d777e6 new.txt:second line
[root@web2 project]# ls
demo init.txt new.txt
[root@web2 project]# cat new.txt
first
first
second
[root@web2 project]# git reflog #查看指针移动历史
5d777e6 HEAD@{0}: reset: moving to 5d77
553a0eb HEAD@{1}: commit: num.txt:789
ead3f5d HEAD@{2}: commit: num.txt:456
e7db9a7 HEAD@{3}: commit: num.txt:123
9e6746d HEAD@{4}: commit: new.txt:thrid
5d777e6 HEAD@{5}: commit: new.txt:second line
a0480de HEAD@{6}: commit: new.txt:first line
2c87f61 HEAD@{7}: commit: add new.txt
3ef2e08 HEAD@{8}: commit (initial): 注释
[root@web2 project]# git reset --hard e7db
HEAD 现在位于 e7db9a7 num.txt:123
[root@web2 project]# ls
demo init.txt new.txt num.txt
[root@web2 project]# cat new.txt
first
first
second
thrid
[root@web2 project]# cat num.txt
123
-----------------------------------------------------------------------------------------
会出现报错问题,因为当前的版本低于服务器中的版本
[root@web2 project]# cp new.txt /tmp
[root@web2 project]# git push
root@192.168.2.100s password:
To root@192.168.2.100:/var/git/project
! [rejected] master -> master (non-fast-forward)
error: 无法推送一些引用到 'root@192.168.2.100:/var/git/project'
提示:更新被拒绝,因为您当前分支的最新提交落后于其对应的远程分支。
提示:再次推送前,先与远程变更合并(如 'git pull')。详见
提示:'git push --help' 中的 'Note about fast-forwards' 小节。
-----------------------------------------------------------------------------------------
[root@web2 project]# git reset --hard 553a #回到最后一次修改的版本
HEAD 现在位于 553a0eb num.txt:789
[root@web2 project]# git reflog
553a0eb HEAD@{0}: reset: moving to 553a
e7db9a7 HEAD@{1}: reset: moving to e7db
5d777e6 HEAD@{2}: reset: moving to 5d77
553a0eb HEAD@{3}: commit: num.txt:789
ead3f5d HEAD@{4}: commit: num.txt:456
e7db9a7 HEAD@{5}: commit: num.txt:123
9e6746d HEAD@{6}: commit: new.txt:thrid
5d777e6 HEAD@{7}: commit: new.txt:second line
a0480de HEAD@{8}: commit: new.txt:first line
2c87f61 HEAD@{9}: commit: add new.txt
3ef2e08 HEAD@{10}: commit (initial): 注释
[root@web2 project]# git log --oneline
553a0eb num.txt:789
ead3f5d num.txt:456
e7db9a7 num.txt:123
9e6746d new.txt:thrid
5d777e6 new.txt:second line
a0480de new.txt:first line
2c87f61 add new.txt
3ef2e08 注释
同步更新:git pull
下载: git clone URL
提交到暂存区:git add .
提交到本地仓库: git commit -m “xxx”
提交 :git push
创建仓库:在服务端创建文件,git init
分支的基本概念
分支可以让开发分多条主线同时进行,每条主线互不影响
- 按功能模块分支,按版本分支
- 分支也可以合并
Git分支操作
问题
操作Git分支,具体要求如下:
- 查看分支
- 创建分支
- 切换分支
- 合并分支
- 解决分支的冲突
方案
Git支持按功能模块、时间、版本等标准创建分支,分支可以让开发分多条主线同时进行,每条主线互不影响,分支效果如图所示
常见的分支规范如下:
- MASTER分支(MASTER是主分支,是代码的核心)。
- DEVELOP分支(DEVELOP最新开发成果的分支)。
- RELEASE分支(为发布新产品设置的分支)。
- HOTFIX分支(为了修复软件BUG缺陷的分支)。
- FEATURE分支(为开发新功能设置的分支)。
- 步骤一:查看并创建分支
1)查看当前分支。
[root@web2 project]# git status
# 位于分支 master
无文件要提交,干净的工作区
nothing to commit, working directory clean
[root@web2 project]# git branch -v
* master 553a0eb num.txt:789
2)创建分支。
[root@web2 project]# git branch hotfix
[root@web2 project]# git branch feature
[root@web2 project]# git branch -v
feature 553a0eb num.txt:789
hotfix 553a0eb num.txt:789
* master 553a0eb num.txt:789
- 步骤二:切换与合并分支
1)切换分支。
[root@web2 project]# git checkout hotfix
切换到分支 'hotfix'
[root@web2 project]# ls #此时查看并没有任何变化
demo init.txt new.txt num.txt
[root@web2 project]# git branch -v
feature 553a0eb num.txt:789
* hotfix 553a0eb num.txt:789
master 553a0eb num.txt:789
2)在新的分支上可以继续进行数据操作(增、删、改、查)。
[root@web2 project]# echo "fix a new txt" >> new.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "fix a new txt"
[hotfix 4cab02f] fix a new txt
1 file changed, 1 insertion(+)
[root@web2 project]# cat new.txt
first
first
second
thrid
fix a new txt
[root@web2 project]# git checkout master
切换到分支 'master'
[root@web2 project]# cat new.txt
first
first
second
thrid
3)将hotfix修改的数据合并到master分支。
注意,合并前必须要先切换到master分支,然后再执行merge命令。
[root@web2 project]# git branch -v #首先查看当前处于哪个分支
feature 553a0eb num.txt:789
hotfix 4cab02f fix a new txt
* master 553a0eb num.txt:789
[root@web2 project]# git merge hotfix #合并分支,有时会产生版本分支冲突
更新 553a0eb..4cab02f
Fast-forward
new.txt | 1 +
1 file changed, 1 insertion(+)
[root@web2 project]# cat new.txt #再次查看文件
first
first
second
thrid
fix a new txt
[root@web2 project]# git branch -v
feature 553a0eb num.txt:789
hotfix 4cab02f fix a new txt
* master 4cab02f [领先 1] fix a new txt
- 步骤二:解决版本分支的冲突问题
1)在不同分支中修改相同文件的相同行数据,模拟数据冲突。
[root@web2 project]# git checkout hotfix
切换到分支 'hotfix'
[root@web2 project]# echo "AAAA" > a.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "a.txt by hot"
[hotfix cfbfd1f] a.txt by hot
1 file changed, 1 insertion(+)
create mode 100644 a.txt
[root@web2 project]# git checkout master
切换到分支 'master'
[root@web2 project]# echo "BBBB" > a.txt
[root@web2 project]# git add .
[root@web2 project]# git commit -m "a.txt by mas"
[master 108106c] a.txt by mas
1 file changed, 1 insertion(+)
create mode 100644 a.txt
[root@web2 project]# git merge hotfix
自动合并 a.txt
冲突(添加/添加):合并冲突于 a.txt
自动合并失败,修正冲突然后提交修正的结果。
2)查看有冲突的文件内容,修改文件为最终版本的数据,解决冲突。
[root@web2 project]# cat a.txt #该文件中包含有冲突的内容
<<<<<<< HEAD
BBBB
=======
AAAA
>>>>>>> hotfix
[root@web2 project]# vim a.txt #修改该文件,为最终需要的数据,解决冲突
AAAA
[root@web2 project]# git add .
[root@web2 project]# git commit -m "fin a.txt" #改为最终版本
[master 87e3f8e] fin a.txt
总结:分支指针与HEAD指针的关系。
创建分支的本质是在当前提交上创建一个可以移动的指针
如何判断当前分支呢?答案是根据HEAD这个特殊指针
分支操作流程如图1,图2,图3,图4,图5所示。
HEAD指针指向master分支
切换分支,HEAD指针指向testing分支
在testing分支中修改并提交代码
将分支切换回master分支
在master分支中修改数据,更新版本
Git服务器
- SSH协议
- Git协议
- HTTP协议
问题
Git不同的服务器形式,具体要求如下:
- 创建SSH协议服务器
- 创建Git协议服务器
- 创建HTTP协议服务器
方案
Git支持很多服务器协议形式,不同协议的Git服务器,客户端就可以使用不同的形式访问服务器。创建的服务器协议有SSH协议、Git协议、HTTP协议。
- 步骤一:SSH协议服务器(支持读写操作)
1)创建基于密码验证的SSH协议服务器(web1主机操作)。
[root@web1 ~]# git init --bare /var/git/base_ssh
Initialized empty Git repository in /var/git/base_ssh/
2)客户端访问的方式(web2主机操作)。
[root@web2 ~]# git clone root@192.168.2.100:/var/git/base_ssh
[root@web2 ~]# rm -rf base_ssh
3)客户端生成SSH密钥,实现免密码登陆git服务器(web2主机操作)。
[root@web2 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''
[root@web2 ~]# ssh-copy-id 192.168.2.100
[root@web2 ~]# git clone root@192.168.2.100:/var/git/base_ssh
[root@web2 ~]# git push
- 步骤二:Git协议服务器(只读操作的服务器)
1)安装git-daemon软件包(web1主机操作)。
[root@web1 ~]# yum -y install git-daemon
2)创建版本库(web1主机操作)。
[root@web1 ~]# git init --bare /var/git/haha
初始化空的 Git 版本库于 /var/git/haha/
3)修改配置文件,启动git服务(web1主机操作)。
[root@web1 ~]# vim /usr/lib/systemd/system/git@.service
修改前内容如下:
ExecStart=-/usr/libexec/git-core/git-daemon --base-path=/var/lib/git
--export-all --user-path=public_git --syslog --inetd –verbose
修改后内容如下:
ExecStart=-/usr/libexec/git-core/git-daemon --base-path=/var/git
--export-all --user-path=public_git --syslog --inetd –verbose
[root@web1 ~]# systemctl start git.socket #起服务
4)客户端访问方式(web2主机操作)
[root@web2 project]# cd
[root@web2 ~]# git clone git://192.168.2.100/haha
[root@web2 ~]# ls
Desktop haha lnmp_soft lnmp_soft.tar.gz nginx-1.12.2 nginx-1.12.2.tar.gz project
步骤三:HTTP协议服务器(只读操作的服务器)
1)安装gitweb、httpd软件包(web1主机操作)。
[root@web1 ~]# yum -y install httpd gitweb
2)修改配置文件,设置仓库根目录(web1主机操作)。
[root@web1 ~]# vim +11 /etc/gitweb.conf #+11可以直接跳转到第11行
10 #our $projectroot = "/var/lib/git";
11 $projectroot = "/var/git"; #以第十行为模板书写git仓库的路径
12 # Set the list of git base URLs used for URL to where fetch project from, i.e.
3)启动httpd服务器
[root@web1 ~]# systemctl restart httpd
4)客户端访问方式(web2主机操作)
注意:调用虚拟机中的firefox浏览器,需要在远程时使用ssh -X 服务器IP,并且确保真实主机的firefox已经关闭。
[root@web2 ~]# firefox http://192.168.2.100/git/
RPM包打包
基本概念
PM(Redhat Package Manager)是用于Redhat、CentOS、Fedora等Linux 分发版(distribution)的常见的软件包管理器。因为它允许分发已编译的软件,所以用户只用一个命令就可以安装软件。
应用场景
- 官方未提供RPM包
- 官方RPM无法定义
- 大量源码包,希望提供统一的软件管理机制
打包流程
- 准备源码软件
- 安装rpm-build
- 编写编译配置文件
- 编译RPM包
制作nginx的RPM包
问题
使用nginx-1.12.2版本的源码软件,生成对应的RPM包软件,具体要求如下:
- 软件名称为nginx
- 软件版本为1.12.2
- RPM软件包可以查询描述信息
- RPM软件包可以安装及卸载
方案
安装rpm-build软件包,编写SPEC配置文件,创建新的RPM软件包。
配置文件中的描述信息如表-2:
步骤
- 步骤一:安装rpm-build软件
1)安装rpm-build软件包
[root@web1 ~]# yum -y install rpm-build
2)生成rpmbuild目录结构
[root@web1 ~]# rpmbuild -ba xiaotiantian
错误:stat /root/xiaotiantian 失败:没有那个文件或目录
[root@web1 ~]# ls /root/rpmbuild/ //自动生成的目录结构
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
#SOURCES目录下存放源码
#RPMS目录,生成的RPM包存放在这里
#SPECS目录下写将源码变成RPM包的配置文件
3)准备工作,将源码软件复制到SOURCES目录
[root@web1 ~]# cp /root/lnmp_soft/nginx-1.12.2.tar.gz /root/rpmbuild/SOURCES/
4)创建并修改SPEC配置文件
[root@web1 ~]# cd /root/rpmbuild/SPECS/
[root@web1 SPECS]# vim nginx.spec #扩展名必须要以spec结尾
Name:nginx #源码包软件名称
Version:1.12.2 #源码包软件的版本号
Release: 1%{?dist} #制作的RPM包版本号
Summary:this is a web server. #RPM软件的概述
#Group: #软件包组
License:GPL #软件的协议
URL:www.tiantian.com #网址
Source0:nginx-1.12.2.tar.gz #源码包软件的全称
#BuildRequires: #制作RPM时的依赖关系
#Requires: #安装RPM时的依赖关系
%description
this is xiao tian tian ohouhouhouhohu #软件的详细描述
%post #非必要操作:安装后脚本(创建账户)
useradd nginx
echo nginx > /tmp/a.txt
%prep
%setup -q #自动解压源码包,并cd进入目录
%build
./configure --with-http_ssl_module --user=nginx #./configure源码安装
make %{?_smp_mflags}
%install
make install DESTDIR=%{buildroot}
%files
%doc #对哪些文件与目录打包
/usr/local/nginx/*
%changelog
- 步骤二:使用配置文件创建RPM包
[root@web1 SPECS]# ls
nginx.spec
[root@web1 SPECS]# rpmbuild -ba nginx.spec
[root@web1 SPECS]# ls /root/rpmbuild/RPMS/
x86_64
[root@web1 SPECS]# ls /root/rpmbuild/RPMS/x86_64/
nginx-1.12.2-1.el7.centos.x86_64.rpm nginx-debuginfo-1.12.2-1.el7.centos.x86_64.rpm
- 步骤三:安装软件
[root@web1 ~]# yum install /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-1.el7.centos.x86_64.rpm
nginx.x86_64 0:1.12.2-1.el7.centos
完毕!
[root@web1 ~]# rpm -qa | grep nginx
nginx-1.12.2-1.el7.centos.x86_64
[root@web1 ~]# ls /usr/local/nginx/
conf html logs sbin
[root@web1 ~]# yum info nginx.x86_64
已加载插件:fastestmirror
Loading mirror speeds from cached hostfile
已安装的软件包
名称 :nginx
架构 :x86_64
版本 :1.12.2
发布 :1.el7.centos
大小 :797 k
源 :installed
简介 : this is a web server.
网址 :www.tiantian.com
协议 : GPL
描述 : this is xiao tian tian ohouhouhouhohu