GIT-分布式版本控制系统

0、前言

1、安装依赖
yum install curl openssh-server postfix cronie
service postfix start
chkconfig postfix on
lokkit -s http -s ssh

2、安装gitlab

rpm -ivh gitlab-ce-8.9.8-ce.0.el6.x86_64.rpm
gitlab-ctl reconfigure
gitlab-ctl status
gitlab-ctl tail  XXX   查看日志

默认账号
Username: root
Password: 5iveL!fe 


openldap安装及常用配置
openLDAP是LDAP(轻量目录访问协议)在linux系统上的实现,和windows下的AD域是一回事,主要是用来构建集中的身份验证系统,提供高效的查找和管理信息服务,可以减少管理成本并保持数据一致性。

服务器环境:centos 6.6 64位
https://www.52os.net/articles/openldap-install-and-settings.html
一、配置OpenLDAP Server

1.安装

服务器端所需的软件:

openldap 包含配置文件、库、文档等
openldap-server slapd服务器
openldap-client 客户端程序
openldap-devel 开发套件,供第三方程序调用
yum自带的源里就有了,直接yum安装:

yum install -y openldap openldap-servers openldap-clients openldap-devel
2.配置slapd

有两个文件要复制:slapd的配置文件和数据库文件,将openldap-servers自带的example复制到相应目录:

cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
chown -R ldap.ldap /etc/openldap
chown -R ldap.ldap /var/lib/ldap
使用slappasswd创建LDAP管理员密码,这个命令不会直接将密码写入配置,运行slappasswd后输入两次密码,会返回一串密文,复制下这个密文。

编辑/etc/openldap/slapd.conf,找到”database bdb“,按照自己的需求更改下面的:

suffix "dc=52os,dc=net"
rootdn "cn=admin,dc=52os,dc=net"  //管理员为admin
rootpw {SSHA}QeLa25YmQt3csWI2eWcrXbtylxpq5FQ0 //复制的管理员的密码,也支持明文
测试并生成配置文件:

rm -rf /etc/openldap/slapd.d/*   //删除原文件
service slapd start              //生成bdb文件
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d  //生成配置文件
chown -R ldap:ldap /etc/openldap/slapd.d
配置完成重启服务:

service slapd restart
chkconfig slapd on       //设置开机自启动
经过上面的配置后,openldap server就配置好了。
查看LDAP数据库结构:

ldapsearch -x -H ldap://127.0.0.1 -b 'dc=52os,dc=net'
会返回类似:

# extended LDIF
# LDAPv3
# base <dc=52os,dc=net> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
# search result
search: 2
result: 32 No such object
# numResponses: 1
3.配置并迁移系统用户

配置好的LDAP数据库是空的,需要将系统上的用户导入到LDAP数据库中。需要用migrationtools将系统用户转换为LDAP能识别的ldif文件。

先新建一个test用户作为测试用户:

useradd test
echo "pwdpwd" |passwd --stdin test
安装migrationtools:

yum install migrationtools
配置migrationtools:

编辑/usr/share/migrationtools/migrate_common.ph ,按需更改下面两行:

$DEFAULT_MAIL_DOMAIN = "52os.net";
$DEFAULT_BASE = "dc=52os,dc=net";
生成ldif文件:

  ./migrate_passwd.pl  >/tmp/passwd.ldif
  ./migrate_passwd.pl /etc/passwd  >/tmp/passwd.ldif
  ./migrate_group.pl /etc/group >/tmp/group.ldif
如果有需要,也可以编辑passwd.ldif和group.ldif去掉不需要的条目。
将生成的ldif导入到LDAP数据库:

ldapadd -x -D "cn=admin,dc=52os,dc=net" -W -f /tmp/base.ldif 
ldapadd -x -D "cn=admin,dc=52os,dc=net" -W -f /tmp/passwd.ldif 
ldapadd -x -D "cn=admin,dc=52os,dc=net" -W -f /tmp/group.ldif 
需要输入LDAP管理员密码,在用上面的ldapsearch命令就能查看到导入的数据。

二、客户端配置

客户端配置有两种方法:

使用authconfig-tui ,也就是setup命令中的 "Authentication configuration"
手动配置
无论哪种方式,都要先安装客户端:

yum -y install openldap openldap-clients nss-pam-ldapd pam_ldap
第一种方法:
在命令行中输入authconfig-tui或者setup命令中选择"Authentication configuration",选中 ”Use LDAP“和“Use LDAP Authentication”,之后点击NEXT,输入服务器地址和“BASE DN”即可。全部图形化添加,非常简单,推荐使用。

第二种方法需要修改文件较多:
编辑/etc/openldap/ldap.conf,加入:

URI ldap://10.11.15.78/   //LDAP服务器地址
BASE dc=52os,dc=net
TLS_CACERTDIR /etc/openldap/cacerts
编辑/etc/nslcd.conf,加入:

uri ldap://10.11.15.78/
base dc=52os,dc=net
ssl no
tls_cacertdir /etc/openldap/cacerts
系统命名服务(NSS)配置使用LDAP,编辑 /etc/nsswitch.conf,修改如下几项为:

passwd:     files ldap
shadow:     files ldap
group:      files ldap
netgroup:   files ldap
automount:  files ldap
编辑/etc/pam.d/system-auth,修改如下几项为:

auth        sufficient    pam_ldap.so use_first_pass
account     required      pam_unix.so broken_shadow
account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
password    sufficient    pam_ldap.so use_authtok
session     required      pam_unix.so
session     optional      pam_ldap.so  #这一行要加在pam_unix.so下面
session     optional      pam_mkhomedir.so skel=/etc/skel/ umask=0022 #自动创建用户的宿主目录
编辑/etc/sysconfig/authconfig:

USELDAPAUTH=yes
USELDAP=yes
修改好之后启动nslcd服务,并设置开机启动

service nslcd start  && chkconfig nslcd on
验证:
test用户只有在ldap server上有,在客户端如果也能查看到,就说明设置成功:

id test 
或者使用:

getent passwd |grep test
这时就能用test账号登录客户端了。

三、其它设置:

1.日志配置

openLDAP默认是不打日志的,要配合rsyslog才能打日志。
在/etc/openldap/slapd.conf 中设置日志级别,加入:

loglevel 1
具体的loglevel解释,可以:

man slapd.conf
在/etc/rsyslog.conf最后加入:

local4.*  /var/log/slapd.log
重启rsyslog和slapd:

service rsyslog restart
service slapd restart
2.sudo管理

在openldap的服务器端拷贝sudo schema到openldap配置目录

cp /usr/share/doc/sudo-1.8.6p3/schema.OpenLDAP /etc/openldap/schema/sudo.schema
加载sudo schema,在/etc/openldap/slapd.conf  添加:

include         /etc/openldap/schema/sudo.schema
重新生产配置文件:

rm -rf /etc/openldap/slapd.d/*
sudo -u ldap slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
service slapd restart
新建一个sudo.ldif文件,内容为:

dn: ou=Sudoers,dc=52os,dc=net
objectClass: top
objectClass: organizationalUnit
ou: Sudoers

dn: cn=defaults,ou=Sudoers,dc=52os,dc=net
objectClass: top
objectClass: sudoRole
cn: defaults
sudoOption: !visiblepw
sudoOption: always_set_home
sudoOption: env_reset
sudoOption: requiretty

dn: cn=test,ou=Sudoers,dc=52os,dc=net
objectClass: top
objectClass: sudoRole
cn: test
sudoCommand: ALL
sudoHost: ALL
sudoOption: !authenticate
sudoRunAsUser: ALL
sudoUser: test 
上面的内容按实际情况更改,注意每行最后不要有空格,ldif里的大小写不敏感。我允许sudo的用户是test,允许使用全部命令,允许所有主机sudo
导入sudo.ldif记录:

ldapadd -x -D "cn=admin,dc=52os,dc=net" -W -f sudo.ldif
设置客户端:
在/etc/sudo-ldap.conf中加入:

uri ldap://10.11.15.78
sudoers_base ou=Sudoers,dc=52os,dc=net
在/etc/nsswitch.conf中加入:

Sudoers: files ldap
在客户端用切换到test用户,测试一下sudo是否可用

3.用户目录自动挂载

使用Openldap的好处就是在服务器端建好一个用户后,各个客户端去服务器端验证,不需要在创建该用户。验证通过后会在客户端/home目录下创建该用户的宿主目录,虽然是同一用户,但目前的配置来说,每个客户端和服务器之间宿主目录是独立的,并没有共享服务器端的宿主目录。举例来说,我在服务器端的宿主目录中上传了一份代码,如果客户端共享服务器的宿主目录,当用户在任意一个客户端登录时,都会看到服务器上宿主目录的代码,管理起来就十分方便了。

配置用户目录共享,需要在服务器端安装nfs,在客户端安装autofs。
安装并启动nfs:

yum install nfs-utils
service rpcbind start
service nfslock start
service nfs start
启动好后用chkconfig加入开机启动。
编辑/etc/exports文件,加入:

/home  *(rw,sync)  
要注意用户需在nfs服务器/home下有宿主目录,否则autofs无法挂载。"*"可以写成具体的ip或ip段,设置好后重启nfs服务,测试并查看:

showmount -e localhost
服务器端的nfs配置完成。
客户端要安装autofs和nfs-utils,但nfs服务不用启动:

yum install nfs-utils autofs
配置autofs,在/etc/auto.master最后加入:

/home   /etc/auto.nfs
新建一个/etc/auto.nfs文件,内容为:

*   -fstype=nfs                      10.11.15.78:/home/&
启动autofs:

service autofs start
用su - test测试是否正常切换,在用mount命令查看挂载:

10.11.15.78:/home/test on /home/test type nfs (rw,vers=4,addr=10.11.15.78,clientaddr=10.11.15.79)
说明挂载成功了,客户端的用户目录和服务器端的用户目录内容就能正常同步了

其它的一些设置,用到在写。
1.安全设置主要有两点:1.启用TLS加密 2.关闭匿名查询
2.主备高可用配置
3.web管理工具:phpldapadmin和LDAP Account Manager

四、一些问题

1.用户不能建立宿主目录
提示 “could not chdir to home directory /home/user: No such file or directory”
解决方法:
在 /etc/pam.d/password-auth 和/etc/pam.d/system-auth 都要加入:

session     optional      pam_mkhomedir.so skel=/etc/skel/ umask=0022
2.导入ldif文件时报错
ldap_bind: Invalid credentials (49)
这种情况是管理员密码错误或者rootdn信息错误

3.配置autofs后,切换su - test 报错

Creating directory '/home/test'.
Unable to create and initialize directory '/home/test'.
su: warning: cannot change directory to /home/test: No such file or directory
这是由于nfs服务器上/home下没有test用户的宿主目录造成的,且权限要正确,否则autofs无法挂载目录,用户也无法在客户端登录。

参考文章:
http://www.zhukun.net/archives/7548
http://54im.com/openldap/centos-6-yum-install-openldap-phpldapadmin-tls-%E5%8F%8C%E4%B8%BB%E9%85%8D%E7%BD%AE.html
http://www.ibm.com/developerworks/cn/linux/l-openldap/

添加新评论


称呼

邮箱

网站
http://example.com

提交评论

搜索...
 搜索
分类
生活
网络安全
linux
Windows
? 2016 阅心笔记. 
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享. 转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议.
This site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License.
Back to top
git笔记

1、版本控制

是否依稀记得你的毕业论文?

毕业论文_初稿.doc
毕业论文_修改1.doc
毕业论文_修改2.doc
毕业论文_修改3.doc
毕业论文_完整版1.doc
毕业论文_完整版2.doc
毕业论文_完整版3.doc
毕业论文_最终版1.doc
毕业论文_最终版2.doc
毕业论文_死也不改版.doc
...

是否还记得老师让你重新自己写的项目?(写毕业论文肥了打印店老板,不管哪个毕业生写论文都是要修改好几遍才给通过)

blog1
blog2
blog3
blog4
...

以上是使用文件或文件夹进行版本管理,以上方式有缺点:

  • 多个文件,保留所有版本时,需要将多个文件保存在本地
  • 协同操作,多人协同操作时,需要将文件发来发去...
  • 容易丢失,被删除意味着永远失去(可以选择网盘)

为了解决上述问题,应运而生了版本管理工具:

  • VSS-- Visual Source Safe
    此工具是Microsoft提供的,是使用的相当普遍的工具之一,他可以与VS.net进行无缝集成,成为了独立开发人员和小型开发团队所适合的工具,基本上Window平台上开发的中小型企业,当规模较大后,其性能通常是无法忍受的,对分支与并行开发支持的比较有限。
  • CVS--Concurrent Versions System
    此工具是一个开源工具,与后面提到的SVN是同一个厂家:Collab.Net提供的。CVS是源于unix的版本控制工具,对于CVS的安装和使用最好对unix的系统有所了解能更容易学习,CVS的服务器管理需要进行各种命令行操作。目前,CVS的客户端有winCVS的图形化界面,服务器端也有CVSNT的版本,易用性正在提高。
  • SVN --CollabNet Subversion
    此工具是在CVS 的基础上,由CollabNet提供开发的,也是开源工具,应用比较广泛。他修正cvs的一些局限性,适用范围同cvs,目前有一些基于SVN的第三方工具,如TortoiseSVN,是其客户端程序,使用的也相当广泛。在权限管理,分支合并等方面做的很出色,他可以与Apache集成在一起进行用户认证。不过在权限管理方面目前还没有个很好用的界面化工具,SVNManger对于已经使用SVN进行配置的项目来说,基本上是无法应用的,但对于从头开始的项目是可以的,功能比较强大,但是搭建svnManger比较麻烦。是一个跨平台的软件,支持大多数常见的操作系统。作为一个开源的版本控制系统,Subversion 管理着随时间改变的数据。 这些数据放置在一个中央资料档案库中。 这个档案库很像一个普通的文件服务器, 不过它会记住每一次文件的变动。 这样你就可以把档案恢复到旧的版本, 或是浏览文件的变动历史。Subversion 是一个通用的系统, 可用来管理任何类型的文件, 其中包括了程序源码。
  • BitKeeper
    是由BitMover公司提供的,BitKeeper自称是“分布式”可扩缩SCM系统。不是采用C/S结构,而是采用P2P结构来实现的,同样支持变更任务,所有变更集的操作都是原子的,与svn,cvs一致。
  • GIT
    Git是一个开源的分布式版本控制系统,用以有效、高速的处理从很小到非常大的项目版本管理.Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人觉得 BitKeeper 的许可证并不适合开放源码社区的工作,因此 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是我们已经发现在很多其他自由软件项目中也使用了 Git。例如 最近就迁移到 Git 上来了,很多 Freedesktop 的项目也迁移到了 Git 上。

版本管理工具都一般包含客户端和服务端:

    • 客户端(用户):本地编写内容,向服务端获取或提交内容
    • 服务端(网盘):保存所有版本的文件

2. 什么是GIT

GIT
  - Git 是一个开源的分布式版本控制软件,用以有效、高速的处理从很小到非常大的项目版本管理。

GitHub等
  - GitHub、GitCafe、BitBucket和GitLab等是基于Git版本控制的远程文件托管平台。

使用场景:
  - 无远程:在本地 .git 文件夹内维护历时文件
  - 有远程:在本地 .git 文件夹内维护历时文件,同时也将历时文件托管在远程仓库

 

PS:
  - 集中式:远程服务器保存所有版本,用户客户端有某个版本
  - 分布式:远程服务器保存所有版本,用户客户端有所有版本

3. 安装Git

参见:http://git-scm.com/

参考指南:GitHub Cheat Sheet (PDF)  |  Visual Git Cheat Sheet (SVG | PNG)

下载:https://git-scm.com/downloads

PS: 注册GitHub、GitCafe、BitBucket和GitLab等账户,以便于将文件托管在远程。

4. Git使用

a. 常用命令:

cd                                                  - 进入程序目录
git init                                            - 创建一个空的Git仓库或重新初始化一个现有的
git config --global user.name "bingabcd"            - 设置用户名
git config --global user.email abcd153abcd@example.com  - 设置电子邮件地址
git status                                          - 查看状态
git add [file]                                      - 将文件从《工作区》提交到《暂存区》
git commit -m "提交信息"                            - 将文件从《暂存区》提交到《版本库 》
git rm --cached <file>                                - 将文件从《暂存区》或《版本库》删除文件
工作区:ls                                          - 查看工作区
暂存区:git ls-files -s                             - 查看暂存区和版本库
版本库:git ls-tree HEAD                            - 查看版本库

b.场景:

在原来代码工作区操作,开发了半个月后,临时发现线上程序有bug需要马上修复,怎么办?
              答案:保留开发到一半的代码,从线上拷贝一份代码到其他路径,在原来基础上修改bug,提交;再次回到正在开发的路径继续写代码...
              Git解决方法:利用分支,Git中的分支相当于拷贝一份代码,应用方法以及场景如下:



               【代码已上线】
                  已上线代码在master分支上(默认创建分支)

               【开发新功能到一半】
                  git branch dev       【创建新分支】
                  git checkout dev     【切换进入dev分支】
                  开发程序,仅在dev分支中修改文件,不影响其他分支....
                  开发到一半时,突然出现一个bug需要紧急修复

                 【将已经开发的功能先提交】
                    git add .
                    git commit -m '临时提交开发到一半的代码'
                  或【将已开发的功能先临时保存】
                    git stash 
                    git stash list      查看都有哪些临时保存列表
                    git stash apply     从临时列表中取出
                    git stash drop      从临时列表中删除



              【临时修复bug】
                  git checkout master  【切换到master分支】
                  修复bug并提交
                    git add .
                    git commit -m '紧急修复bug'
                  创建新分支,修复bug并提交,合并到master分支
                    git branch bug
                    git checkout bug
                    修复bug...
                    git add .
                    git commit -m '紧急修复bug'
                    git checkout master
                    git merge bug

              【继续开发新功能】
                    git checkout dev
                    开发完毕,上线
                    git checkout master
                    git merge dev

                    Auto-merging readme
                    CONFLICT (content): Merge conflict in readme
                    Automatic merge failed; fix conflicts and then commit the result.
                    出现冲突,解决冲突
                    git add .
                    git commit -m '解决冲突'
新功能开发,开发直播功能(预计开发一个月)
            【创建远程仓库project】
                    注册github,并在其中创建一个project,创建成功后会给当前project生成一个URL用于让本地和远程连接,如:http://47.93.4.198/wupeiqi/pondo.git

                【添加远程仓库URL】
                     本地执行命令,添加远程连接:git remote add origin http://47.93.4.198/wupeiqi/pondo.git

                【将本地分支内容推送到远程仓库】
                     git push -u origin master

                     PS: 首次推送需要将本地分支同步到远程分支
                         git push --set-upstream origin master
                         git push --set-upstream origin dev

              回家
                【从远程仓库克隆到本地某个目录】
                    git clone http://47.93.4.198/wupeiqi/pondo.git
                    cd pondo

                【clone后本地只有master分支,同步其他分支】
                    git branch dev origin/dev
                    git checkout dev

                【在家继续开发】
                    ...

                【提交到远程版本库】
                    git add .
                    git commit -m '在家开发'


              第二天到公司
                【从远程仓库获取最新内容】
                    git pull origin dev
                    或
                    git fetch origin dev
                    git merge origin/dev
                【继续开发功能】
                    ...
                【提交到远程版本库】
                    git add .
                    git commit -m '在家开发'

              第二天回家:
                【从远程仓库获取最新内容】
                    git pull origin dev
                    或
                    git fetch origin dev
                    git merge origin/dev
                【继续开发功能】
                    ...
                【提交到远程版本库】
                    git add .
                    git commit -m '在家开发'

              重复进行中....

              PS: 如果本地有未提交的内容,则需要
                    - git stash先暂时存储
                    - git pull origin dev 从远程获取最新代码
                    - git stash pop       将暂时存储代码和最新代码进行合并,解决冲突

                  如果在公司的代码只是commit,忘记push到远程;在家又新开发了功能;再次回到公司时,则需要:
                    - git pull origin dev 
                    - 解决冲突
                    - git add .
                    - git commit -m '解决冲突'
                    - git push origin dev
                    此次会把上次忘记push和本次解决冲突一起提交到远程
项目保存在公司电脑中,缺点:电脑硬盘损坏则代码丢失;在家里电脑无法继续开发。

c.冲突:

  解决方法:

  第一种方式:stash

  第二种方式:分支 branch

d.协同开发:

第一步:进入官网

https://github.com/

第二步:创建组织

 

第三步:添加组织名字、邮箱地址

第四步:添加开发成员

 

 第五步:创建知识库地址

 

 创建一个新的仓库:

第六步:完成

 

 

e.fork:

第一步:点击fork生成

 

第二步:clone本地进行修改

 

第三步:new pull request

 f. .gitignore

https://github.com/github/gitignore/blob/master/Python.gitignore

 注意:协同开发时,在解决完冲突之后,应该跟上一个提交的人进行沟通。

 

 

.git目录会记录和保存每一个版本,并且会帮助压缩,压缩之后代码量会比较少,(用于保存Git相关的所有信息,如每个版本)

 查看git变更日志:

一步到位回滚:

再次查看日志,已回滚.

 项目重新上马:

 恢复原有删掉的文件

 正式恢复文件

恢复日志:

特殊情况:直播功能开发到一半出现了BUG:

查看状态:

把新功能拿走,再恢复到和线上一样的环境

git stash:把在工作区的修改,也就是切换到dev时的修改,全部拿走,然后变成一种和线上一样的环境

GIT修改BUG不能再master上直接修改,而应该在dev上修改

Administrator@bing-PC MINGW64 /f/project/git学习 (dev)
$ git add . #添加

Administrator@bing-PC MINGW64 /f/project/git学习 (dev)
$ git commit -m '再次修改bug'#提交信息
[dev 640b0a6] 再次修改bug
2 files changed, 87 insertions(+), 17 deletions(-)
create mode 100644 .idea/vcs.xml


Administrator@bing-PC MINGW64 /f/project/git学习 (bug)
$ git checkout master 切换到master
Switched to branch 'master'

Administrator@bing-PC MINGW64 /f/project/git学习 (master)
$ git merge bug #master合并bug
Already up-to-date.

Administrator@bing-PC MINGW64 /f/project/git学习 (master)
$ git branch -d bug #删除bug分支
Deleted branch bug (was 95ffe3e).

 

 

posted on 2017-08-08 00:06  bigdata_devops  阅读(207)  评论(0编辑  收藏  举报

导航