Nolan's Blog

a PHP JS UI APP developer

other

家庭服务器svn向服务器提交更新的方案

本机 Win10
家庭服务器 Win10
远程服务器 CentOS

最近在家里搞了一台闲置主机作为HomeServer,原装正版Win10就懒得折腾了,毕竟只是用来存放文件以及SVN及DB备份用而已,顺道跑跑一些计划任务。

首先因为家里路由设置是每天重启一次,所以IP会变动,影响阿里云白名单,这个可以用过阿里云API来处理(后面也会用到),具体见阿里云各APISDK

然后就想着通过本地的SVN可以向第三天机器提交代码,这么做目的有2个

1.可是实现代码版本本地化,降低服务器放svn服务的风险,以及客户风险。

2.可以作为中继,利用hook再次作为子机,向其他svn主机提交更新,控制本地组频繁提交导致版本过多问题。

设置方案:

  1. 设置一个域名解析到家庭IP(会变)
  2. 利用IP查询接口查询当前外网IP,如变更则提交阿里云云解析API,更新解析地址。
  3. 利用Win自带的计划任务定时执行IP检测任务
  4. HomeServ安装VisualSVN,提供本地SVN服务
  5. 提交版本库等等(不累述
  6. 在远程服务端SVN CO本地版本库,记得这里要使用域名(当然,如果这里做一个计划任务获取最新IP也是可以的,方法很多)
  7. 设置HOOK
    • 下载 putty 完整包
    • 生成公钥密钥(不累述
    • 利用 puttygen 工具讲 openssh 的私钥转成 putty 的密钥
      • 选择 Import key 引入文件
      • 按 Save private key 保存ppk格式密钥
    • 公钥文件上传到远程服务器 ~/.ssh 下,权限文件夹700 / 文件600
    • 利用命令plink -v -batch host获取密指码 aa:bb:cc:xxxx
    • hook 编辑:plink.exe -hostkey "aa:bb:cc:dd.....ee:ff" -i "..\serv.ppk" root@IP地址 "export LANG=zh_CN.UTF-8; svn update /html/repo; exit;"
  8. 测试完成

第7步遇到的坑比较多,记录一下,因为不想给远程环境追加可执行SHELL的能力,所以采用了SSH链接,刚开始使用了自带的OPENSSL,单独执行完全没有问题,但是用HOOK执行,总是没有结果,会卡住。

所以怀疑是用户问题(事实也确实是),但因为Adminstrator无法登录(家庭版没有组策略,但是如果再去折腾组策略,似乎就是不断地挖坑了)所以看不到问题点,输出也没有内容。于是换了Plink,Plink给了正确的反馈,发现原来是提示是否保存服务端证书的提示卡住了,用命令行输入Y。。。?!#¥#@¥

输入Y是不可能的了。。。也没有-y的参数,就很尴尬了。

翻了一下plink参数,发现了 -hostkey 参数,所以,我只要有了那段密指码就能解决问题了,谷歌一下就找到了这个命令 plink -v -batch host,利用它就能获取到完整密指码了,就是上面的 aa:bb:cc:dd…

到此就可以顺利的让hook利用ssh连接到远程,做任何事情了。可扩展的功能就很多了 23333

继续阅读》

, , ,

Make A Back Button (iphone ios6 style) With CSS3

Bildschirmfoto-2011-12-05-um-11.29.44

Always we need to make insert this button in our site. (be less in today)
so how can build it only with css3 ? Come with me

1. build html


<a class="back" href="#"><b>Back</b></a>

2. design a simple button style


.back {
	color: #FFF;
	text-decoration: none;
	position: relative;
	display: block;
	float:left;
	margin-top:-8px;
	margin-left:5px;
}
.back b{
	display: inline-block;
	font: bold 13px/26px Tahoma;
	height: 27px;
	padding: 0 10px 0 10px;
	background: -webkit-linear-gradient(top, #FFAF44, #F28000);
	background: -moz-linear-gradient(top, #FFAF44, #F28000);
	border: 1px solid #CB741D;
	border-radius: 5px;
	text-shadow: 0 -1px 0px rgba(0, 0, 0, .4);
	box-shadow:inset rgba(255,255,255,.2) -1px 1px 1px;
}

QQ截图20140520104830

3.bulid a arrow with :before


.back:before{
	content: '';
	display: inline-block;
	width: 20px; /* 20 * √2 = 28 */
	height: 20px;
	-webkit-transform-origin: 0 0; /* set ratation point */
	-moz-transform-origin: 0 0;
	-webkit-transform: scaleX(0.8) rotate(45deg);  /* rotation 45 deg */
	-moz-transform: scaleX(0.8) rotate(45deg);
	background: -moz-linear-gradient(-45deg, #FFAF44, #F28000);
	background: -webkit-linear-gradient(-45deg, #FFAF44, #F28000);
	border: 1px solid #CB741D;
	border-radius: 3px 5px;
	position: absolute;
	left: 0px;
	top: -1px;
}

QQ截图20140520105620

4. adjustment


.back b {
	border-radius: 3px 5px 5px 3px;
	border-left: 0;
	position: relative;
	z-index: 2;
}
.back:before{
	z-index: 1;
	left: 2px;
}

20140520110345

da da da ~~~~..

继续阅读》

,

Backup 备份一下自己的Vim设置/插件

插件

ctags:
先生成tags文件,在命令行下进入到你的项目文件,执行命令:ctags -R,在当前目录下就会生成一个tags文件,生成tags数据库索引,在gvim中执行:


set tags=/home/cry/test/tags

需要进行函数名、变量名、结构名、结构成员补全时输入 Ctrl+X Ctrl+O, (
需要头文件名补全时输入 Ctrl+X Ctrl+I,
需要文件路径补全时输入 Ctrl+X Ctrl+F,
需要跳转到函数的定义处 Ctrl+] 或 Ctrl+左键单击

NERD_tree:一个文件管理工具

project:一个项目管理工具

winmanager:界面管理

Emmet.vim:zenCoding工具,前段必备

git-vim:git工具

xptemplate:代码片段补全 使用“Ctrl+l,”代码补全

下载:vim_2014_1.zip

继续阅读》

,

Powered by WordPress.org.