WD MyCloud安装GIT建立GIT Server

WD MyCloud安装GIT的时候,总是提示依赖的OpenSSL Server版本号不匹配,尤其是升级到最新的修复了“Heartbleed” 的版本更是如此,不管如何操作,都是一样的,折腾了半天,结果把系统折腾挂掉了,网页进不去了,只能通过SSH界面重新还原系统,结果竟然可以安装成功了,看来,应该是前面安装openssh-server等的时候,导致的依赖问题,因此,如果出现问题,可以先全部还原系统,然后优先安装GIT 就能解决问题了。

  • 安装GIT(主要是gitgit-daemon)
$ sudo apt-get update

$ sudo apt-get install git-core

 不要安装openssh-server,因此不要使用 “sudo apt-get install git-all” 来安装全部的功能 git-all包含了PHP等等的很多东西,更新的东西太多,他会导致版本依赖问题,主要是OpenSSL升级了,而依赖他的其他软件都还没有更新,而由于漏洞问题,系统又不允许早期版本安装。

  • 安装启动工具
$ sudo apt-get install git-daemon-run

用来在系统启动的时候启动Git 的服务器

  • 建立GIT服务器存储目录

1.首先查看分区信息

WDMyCloud:~# df
Filesystem 1K-blocks Used Available Use% Mounted on
rootfs 1968336 617720 1250628 34% /
/dev/root 1968336 617720 1250628 34% /
tmpfs 23056 336 22720 2% /run
tmpfs 40960 4 40956 1% /run/lock
tmpfs 10240 0 10240 0% /dev
tmpfs 5120 0 5120 0% /run/shm
tmpfs 102400 156 102244 1% /tmp
/dev/root 1968336 617720 1250628 34% /var/log.hdd
ramlog-tmpfs 20480 824 19656 5% /var/log
/dev/sda4 3841069352 1232532000 2530491288 33% /DataVolume
/dev/sda4 3841069352 1232532000 2530491288 33% /CacheVolume
/dev/sda4 3841069352 1232532000 2530491288 33% /shares
/dev/sda4 3841069352 1232532000 2530491288 33% /nfs/TimeMachineBackup
/dev/sda4 3841069352 1232532000 2530491288 33% /nfs/SmartWare
/dev/sda4 3841069352 1232532000 2530491288 33% /nfs/Public

可以看到具体的分区,我们在 "/nfs/Public" 目录下面建立一个GIT的工作目录,具体根据自己需要来更改

$ mkdir /nfs/Public/Git
  • 关闭git-daemon(否则可能下面的配置文件修改会被覆盖)
$ sudo sv down git-daemon

配置启动文件

WDMyCloud:~# sudo vi /etc/service/git-daemon/run  

#!/bin/sh
exec 2>&1
echo 'git-daemon starting.'
exec chpst -ugitdaemon \
"$(git --exec-path)"/git-daemon --verbose --reuseaddr \
--base-path=/var/cache/

修改为

#!/bin/sh
exec 2>&1
echo 'git-daemon starting.'
exec chpst -ugitdaemon \
 "$(git --exec-path)"/git-daemon --verbose --reuseaddr \
--export-all --base-path=/nfs/Public/Git --enable=receive-pack

其中

--export-all目的是解决 用git clone git://... 时报错,"server log: Repository not exported. " 可以在git文件夹里创建一个叫git-daemon-export-ok的文件或者git-daemon --export-all

--base-pathGit的工程目录

设置好了只后,那么每次开机就会自己启动了。

  • 启动git-daemon
$ sudo sv up git-daemon

至于剩下的,GIT工程,可以直接拷贝到"/nfs/Public/Git"目录下面就可以了。

有其他的错误的话,详细信息可以在/var/log/git-daemon/current中看到,分析一下日志即可。

  • 初始化远程git工程
$ cd /nfs/Public/Git

$ git --bare init git_project

服务器仓库使用git --bare init不要使用git init

  • 设置SSH访问

使用上面的设置之后,会发现当使用Git Push命令的时候,经常会长时间卡住,然后无法Push上去,经过Google一番之后,发现是GitBUG,如果想要规避这个BUG的话,老老实实的用SSH来同步就可以了。

1.增加Git用户,并指定工作目录为 “/nfs/Public/Git

$ useradd git -d /nfs/Public/Git

2.设置用户的密码

$ passwd git

3.更改目录的所有者,并且赋予所有者全部权限

$ chown -R git /nfs/Public/Git

4.增加到SSH用户列表

$ nano /etc/ssh/sshd_config

找到AllowUsers所在行,在已经有的用户后面增加(如果找不到,则在尾部增加git

AllowUsers root

修改为

AllowUsers root git

用户之间用空格隔开,如果没有这行,可以自行添加即可。
5.重启SSHD服务

$ service ssh restart

6.修改访问Git的方式,把

git://www.mobibrw.com/git_project

修改为

ssh://git@www.mobibrw.com:/nfs/Public/Git/git_project

7.SSH免密码登录
(1)生成公钥/私钥对

$ ssh-keygen -t rsa -P ''

注意"-P"后面输入的内容为空的时候代表不需要输入密码。
完成后会在当前用户目录下的.ssh目录下生成id_rsa,id_rsa.pub这两个文件。
(2)拷贝证书到本地机器
.ssh/id_rsa.pub拷贝下来,然后重命名成id_rsa.pub.git也就是Key加上用户名的命名方式,这样在Linux或者执行命令行的时候SSH可以自动进行用户名,密码的对应。
(3)对于Linux复制的id_rsa.pub.git添加到.ssh/authorzied_keys文件里

$ cat id_rsa.pub.git >> .ssh/authorized_keys

$ chmod 600 .ssh/authorized_keys

authorized_keys的权限要是600
(4)对于Windows,则需要把id_rsa这个文件拷贝下来,然后使用TortoiseGit自带的Puttygen转换为被TortoiseGit支持的.ppk文件。

点击"Conversions"菜单中的"Import key"选项,然后导入我们下载到的id_rsa

PuttyKeyGeneratorImportKey

导入后,

SavePPK

由于Puttygen的BUG,导致如果直接点击"Save private key",会导致生产的Public key是不正确的,因此,需要先点击"Save public key",保存为文件后,无视这个文件即可。然后接下来点击"Save private key"按钮,保存为.ppk文件,这个PPK文件才是我们需要的。

(5)修改SSHD的配置文件/etc/ssh/sshd_config
找到

#AuthorizedKeysFile %h/.ssh/authorized_keys

这句,然后去掉注释。然后重启SSH服务

$ sudo /etc/init.d/ssh restart

(6)修改登录认证文件,把认证信息导入到需要认证的用户目录下的.ssh/authorized_keys文件中。

以上面添加的用户git为例子,通过命令:

$ cat /etc/passwd | grep git

可以看到输出如下信息:

git:x:999:1000:git,,,:/shares:/bin/sh

从而找到用户git的工作目录在/share目录下面.

因此执行如下命令:

$ cp -r /root/.ssh /shares/.ssh

$ cd /shares/.ssh

$ cat id_rsa.pub >> authorized_keys

接下来,需要修改authorized_keys的所有者为用户git,否则git无法通过这个文件进行认证。

$ cd /shares/.ssh

$ chown git authorized_keys

修改权限,否则无法用来登陆

$ chmod 600 .ssh/authorized_keys

然后修改authorized_keys中的最后用户名的部分为git(由于我们在root中生成的密钥,因此,默认的用户名是root,因此需要修改这个用户名).

$ sudo vim authorized_keys

最后的root@WDMyCloud修改为git@WDMyCloud.这样在认证的时候,才能成功进行用户名密钥的核对。
否则需要设置/etc/ssh/sshd_config里面的StrictModes yes修改为StrictModes no,这样SSH会忽略用户名的校验。

参考链接


发布者