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
会忽略用户名的校验。