WD MyCloud安装GIT的时候,总是提示依赖的OpenSSL Server版本号不匹配,尤其是升级到最新的修复了“Heartbleed” 的版本更是如此,不管如何操作,都是一样的,折腾了半天,结果把系统折腾挂掉了,网页进不去了,只能通过SSH界面重新还原系统,结果竟然可以安装成功了,看来,应该是前面安装openssh-server等的时候,导致的依赖问题,因此,如果出现问题,可以先全部还原系统,然后优先安装GIT 就能解决问题了。
- 安装
GIT(主要是git和git-daemon)
|
1 2 3 |
$ sudo apt-get update $ sudo apt-get install git-core |
不要安装openssh-server,因此不要使用 “sudo apt-get install git-all” 来安装全部的功能 git-all包含了PHP等等的很多东西,更新的东西太多,他会导致版本依赖问题,主要是OpenSSL升级了,而依赖他的其他软件都还没有更新,而由于漏洞问题,系统又不允许早期版本安装。
- 安装启动工具
|
1 |
$ sudo apt-get install git-daemon-run |
用来在系统启动的时候启动Git 的服务器
- 建立
GIT服务器存储目录
1.首先查看分区信息
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
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的工作目录,具体根据自己需要来更改
|
1 |
$ mkdir /nfs/Public/Git |
- 关闭
git-daemon(否则可能下面的配置文件修改会被覆盖)
|
1 |
$ sudo sv down git-daemon |
配置启动文件
|
1 2 3 4 5 6 7 8 9 |
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/ |
修改为
|
1 2 3 4 5 6 |
#!/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-path是Git的工程目录
设置好了只后,那么每次开机就会自己启动了。
- 启动
git-daemon
|
1 |
$ sudo sv up git-daemon |
至于剩下的,GIT工程,可以直接拷贝到"/nfs/Public/Git"目录下面就可以了。
有其他的错误的话,详细信息可以在/var/log/git-daemon/current中看到,分析一下日志即可。
- 初始化远程git工程
|
1 2 3 |
$ cd /nfs/Public/Git $ git --bare init git_project |
服务器仓库使用git --bare init不要使用git init
- 设置
SSH访问
使用上面的设置之后,会发现当使用Git Push命令的时候,经常会长时间卡住,然后无法Push上去,经过Google一番之后,发现是Git的BUG,如果想要规避这个BUG的话,老老实实的用SSH来同步就可以了。
1.增加Git用户,并指定工作目录为 “/nfs/Public/Git”
|
1 |
$ useradd git -d /nfs/Public/Git |
2.设置用户的密码
|
1 |
$ passwd git |
3.更改目录的所有者,并且赋予所有者全部权限
|
1 |
$ chown -R git /nfs/Public/Git |
4.增加到SSH用户列表
|
1 |
$ nano /etc/ssh/sshd_config |
找到AllowUsers所在行,在已经有的用户后面增加(如果找不到,则在尾部增加) git即
|
1 |
AllowUsers root |
修改为
|
1 |
AllowUsers root git |
用户之间用空格隔开,如果没有这行,可以自行添加即可。
5.重启SSHD服务
|
1 |
$ service ssh restart |
6.修改访问Git的方式,把
|
1 |
git://www.mobibrw.com/git_project |
修改为
|
1 |
ssh://git@www.mobibrw.com:/nfs/Public/Git/git_project |
7.SSH免密码登录
(1)生成公钥/私钥对
|
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文件里
|
1 2 3 |
$ 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。
导入后,
由于Puttygen的BUG,导致如果直接点击"Save private key",会导致生产的Public key是不正确的,因此,需要先点击"Save public key",保存为文件后,无视这个文件即可。然后接下来点击"Save private key"按钮,保存为.ppk文件,这个PPK文件才是我们需要的。
(5)修改SSHD的配置文件/etc/ssh/sshd_config
找到
|
1 |
#AuthorizedKeysFile %h/.ssh/authorized_keys |
这句,然后去掉注释。然后重启SSH服务
|
1 |
$ sudo /etc/init.d/ssh restart |
(6)修改登录认证文件,把认证信息导入到需要认证的用户目录下的.ssh/authorized_keys文件中。
以上面添加的用户git为例子,通过命令:
|
1 |
$ cat /etc/passwd | grep git |
可以看到输出如下信息:
|
1 |
git:x:999:1000:git,,,:/shares:/bin/sh |
从而找到用户git的工作目录在/share目录下面.
因此执行如下命令:
|
1 2 3 4 5 |
$ cp -r /root/.ssh /shares/.ssh $ cd /shares/.ssh $ cat id_rsa.pub >> authorized_keys |
接下来,需要修改authorized_keys的所有者为用户git,否则git无法通过这个文件进行认证。
|
1 2 3 |
$ cd /shares/.ssh $ chown git authorized_keys |
修改权限,否则无法用来登陆
|
1 |
$ chmod 600 .ssh/authorized_keys |
然后修改authorized_keys中的最后用户名的部分为git(由于我们在root中生成的密钥,因此,默认的用户名是root,因此需要修改这个用户名).
|
1 |
$ sudo vim authorized_keys |
最后的root@WDMyCloud修改为git@WDMyCloud.这样在认证的时候,才能成功进行用户名密钥的核对。
否则需要设置/etc/ssh/sshd_config里面的StrictModes yes修改为StrictModes no,这样SSH会忽略用户名的校验。

