设为首页 收藏本站
查看: 1313|回复: 0

[经验分享] 在老DELL电脑上制作基于SSH的小型本地Git服务器

[复制链接]

尚未签到

发表于 2015-10-7 10:19:59 | 显示全部楼层 |阅读模式
硬件情况:

DELL OPTIPLEX 745

Core 2 64位

1G 内存

160G 硬盘

Ubuntu 12.04.5 LTS 32位(因为内存小于2G),字符界面(不运行X Windows,为了省内存)



步骤:

1、创建一个用户git,创建主目录,适当修改一下权限;



2、参考http://git-scm.com/book/zh/ 4.2节的步骤,在主目录下执行:

     $ git clone --bare https://github.com/Ricky-Gong/*.git  (总共弄下来5个)

尝试了一下,只要有ssh权限,就可以在手提电脑上与主机传输文件,例如:

     $ git clone 【user】@【git.example.com】:【/opt/git/my_project.git】

                        用户名          主机域名或地址          Git仓的路径



3、参考:

http://git-scm.com/book/zh/ 4.3节对SSH密钥的描述;

https://help.github.com/articles/generating-ssh-keys 中生成ssh key的步骤;

https://help.github.com/articles/changing-a-remote-s-url 中从https转到ssh的做法(一开始clone是用https的);

大部分按照上述来做,只是有一处要修改:

在第二个网页的步骤中,在Step 2下第一个命令处:


     ssh-keygen -t rsa -C "your_email@example.com"
它后面要你输入passphrase,这一步网页上强烈建议输入,但是由于我们的特殊环境,因此直接回车,否则之后每次上传都要输入这个passphrase,SSH相比于https的优势荡然无存。
其他的照做。
==============================================================================
原因:
     最根本的原因是我们工作在字符界面下。
     理论上说,这个passphrase会被一个叫ssh-agent的程序保存下来(只要安装了,会默认开机自启动),然后运行过一次之后,以后每一次通过SSH与Github传输数据,它就会自动帮我们输入passphrase。但是,通过查看man page得知,这个程序的运行是基于X Windows的;也就是说,在字符界面下,这个程序是无法工作的(所以上述的“开机自启动”,应该改为“启动X Windows后自动启动”)。这个程序不工作,我们输入的passphrase就无法保存,这就导致了我之前有遇到过的问题:每次上传都要输入这个passphrase。如果此处我们不输入passphrase,就可以自动上传了。
     假如不小心输入了,也没有关系,不需要重新生成一份,只需要在密钥生成之后,执行这个页面https://help.github.com/articles/working-with-ssh-key-passphrases 下的命令,修改passphrase就好了。
==============================================================================
4、根据需要,写一个上传脚本,并设置crontab,固定每一周的某个时间,与Github同步一次,并保存日志。完事~

附上一个检测主机是否能访问Internet的shell脚本:
http://www.iyunv/kf/201309/243768.html
在我的脚本程序中,有使用这里面的代码。


附上源代码,根据两者所在的实际目录,修改upload脚本中的地址参数;并且要新建一个log文件夹,用来存放日志,同样要修改upload中关于它的地址参数。





1 #! /bin/bash
2
3 timeout=5
4 target=www.baidu.com
5 git_dir=/home/git
6 log_dir=/home/git/maintain/log
7 log_name=$(date '+%d_%m_%Y').log
8 mail_text=/home/git/maintain/mail.txt
9
10
11 upload()
12 {
13     cd $git_dir
14     for each_git in $(ls -d *.git)
15     do
16         cd "## /home/git/$each_git"
17         echo "/home/git/$each_git:" >> $log_dir/$log_name
18         # check whether there's a modification
19         # if so, sync with github
20
21         git push origin master >> $log_dir/$log_name 2>&1
22         echo "errno: $?" >> $log_dir/$log_name
23     done
24 }
25
26 sendmail()
27 {
28     # Ricky
29     mail -s "Local Git weekly push on $(date '+%B %d, %Y')" *@qq.com < $mail_text
30     # JK Chen
31     mail -s "Local Git weekly push on $(date '+%B %d, %Y')" *@qq.com < $mail_text
32     # D Qiao
33     mail -s "Local Git weekly push on $(date '+%B %d, %Y')" *@qq.com < $mail_text
34     # XQ Qian
35     mail -s "Local Git weekly push on $(date '+%B %d, %Y')" *@qq.com < $mail_text
36     # RS Liang
37     mail -s "Local Git weekly push on $(date '+%B %d, %Y')" *@qq.com < $mail_text
38     # K Huang
39     #mail -s "Local Git weekly push on $(date '+%B %d, %Y')" *@mail.sysu.edu.cn < $mail_text
40 }
41
42 printHelp()
43 {
44     echo "This script accepts no, or only one argument, which is \"-nomail\"."
45     echo "It will disable the email sending."
46 }
47
48 # trigger
49 mail=1
50
51
52
53 #================================================================================================
54
55
56
57 # Dealing with arguments
58 if [ "$#" -gt 1 ]; then
59     echo "$0: Too much argument"
60     exit 1
61 fi
62
63 if [ "$1" = '-nomail' ]; then
64     mail=0
65 elif [ "$1" = '--help' ]; then
66     printHelp
67     exit 0
68 elif [ -n "$1" ]; then
69     echo "$0: Invalid argument"
70     exit 1
71 fi
72
73 # Body
74 touch $log_dir/$log_name
75 echo "=================================================================" >> $log_dir/$log_name
76 echo "update.sh: start process at $(date '+%T on %B %d, %Y')" >> $log_dir/$log_name
77 echo "user: $(whoami)" >> $log_dir/$log_name
78 echo "pwd: $(pwd)" >> $log_dir/$log_name
79 echo "" >> $log_dir/$log_name
80 echo "" >> $log_dir/$log_name
81
82
83 ret_code=$(curl -I -s --connect-timeout $timeout $target -w %{http_code} | tail -n1)
84 if [ "x$ret_code" = "x200" ]; then
85     upload
86     # mail everyone for notification.
87     if [ $mail -eq 1 ]; then
88         sendmail
89     fi
90     echo "=================================================================" >> $log_dir/$log_name
91     exit 0
92 else
93     echo "Repositories won't uploaded to the github: Internet unavailable" >> $log_dir/$log_name
94     # no internet access, can't send e-mail
95     echo "=================================================================" >> $log_dir/$log_name
96     exit 1
97 fi
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-123674-1-1.html 上篇帖子: git 服务器搭建及一些命令说明 下篇帖子: Git 2.6.0 RC2 发布,分布式版本控制系统
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表