分类目录归档:开源项目

PHP & Git 最简单的自动部署

最近比较喜欢用bitbucket,因为要用私有库又不舍得交钱给Github只能这样了,虽然自己也用gitolite搭了git server,但是毕竟仅仅是一个git server。

回到正题,之前的玩法都是开着putty,本地编辑好提交好push上去bitbucket/github,然后putty里面在原地git pull,今天突然想到能不能利用hook简单做个自动部署,稍微看了一下bitbucket的hook文档,bitbucket有个简单的Post Hook(github也有类似的),其实简单的利用这个,都不用出来post过来的关于提交的数据,直接pull就好,于是就有了下面的脚本

然后在仓库的设置那边加个hook,注意看我这里加了简单的http auth,bitbucket是支持的。

这样完事之后发现还不行,因为默认php执行的httpd运行账户是www,一般为了安全都会把web运行账户弄得不能shell登陆(/sbin/nologin或者/bin/false),而且连home目录都没有,为了实现自动部署最好给www一个home,里面要放keys什么的。[11.5补充] 还最好为www用户config一下email和username,不然像bitbucket会说empty ident而无法pull [11.18补充]根据这里,empty ident的问题也可能是因为passwd里面第5个字段为空,最好在第5字段填上东西,是啥不重要

因为httpd什么的都在跑,直接usermod -d肯定说用户已登录改不了,这时候可以用vipw直接修改/etc/passwd,找到没有home(或者home是/dev/null什么的)的可怜的www,给一个home目录给他,shell不用改,保存退出会提示你可以vipw -s来改/etc/shadow保持一致性,这里只改了个home就不必了,后面执行命令可以直接sudo -u www 加命令来以www身份运行。

先sudo -u www mkdir ~/.ssh吧,然后sudo -u www ssh-keygen随便生成个key,不要设置密码,不然git pull困难还得请ssh-agent。生成之后吧id_rsa.pub cat出来加到仓库的部署key,部署key只有只读权限还是挺安全的。

好了之后你可以sudo -u www git pull测试能不能正常pull,能不能pull到,最好这样试一次,因为这里还有个交互是第一次访问要把对方加到known_host里面的,要回答yes,好了之后应该能pull到,web上面的php应该也能调用到git pull并返回信息。这里php后面可以再加别的东西例如针对自动部署的环境做的一些适应性修改、导数据库等工作,注意不要弄出conflict导致下次git pull困难就行。

我喜欢这样随随便便的写,长篇大论的博文我自己都不大愿意看,特别是没干货的东西

 

天天动听安卓版皮肤解包工具云端版

这次发布的是天天动听安卓版皮肤解包工具的云端版,部署于新浪云计算。

继续开源,代码丑陋还望指正。传送门index.php

上传皮肤文件,云端完成解包和zip重打包,弹出下载。

这次的coding让我学习了两个很好用的php函数,pack和unpack,用于操作二进制字符串到变量之间的互转。

同时做这个东西也让我见识到一个PclZip的类库,在php没有zip支持下直接实现zip包操作(代码很长,5k行)。

=======================题外==========================

之前发过这个东西 天天动听安卓版皮肤打包工具分析+自制解包工具放出,当时这个工具是用易语言写的,易语言做的程序误杀报毒的问题,不是一天两天了。易语言作为国人开发的一款中文编程语言,我是挺支持的,挺喜欢的,也算是用了几年,写写小工具之类的小开发效率很高。

由于报毒和其他各种原因,易语言杯具的说,一直告诉自己不能依赖工具,特别是易语言。一开始我发现天天皮肤打包工具(官方放出的)很小(6KB),是C#弄的吧。于是我也想用C#反过来写一个解包工具,不过……我还没学过C#,上学期末选课的时候C#和Java二选一,我毫不犹豫选了Java。而C#的代码,我只是能看懂一些,会查手册,就这水平。(ps:有一天建阳篮球场旧书义卖三折,我逛了计算机类的,发现厚的就只有一本C#3.0自学宝典,原价68,有光盘还很新,我就花了20块买下来了,不过一直没翻过,我现在和可预见的将来我都觉得没必要翻)

vs2010早早装在了我的电脑,很大很大,安装的光盘镜像就2.5G,一直没用它来做过什么项目,倒是用它来看过很多别人的小项目。后来习惯了notepad++之后,这种文本类的代码文件我一般都用notepad++打开和编辑(有时也会淡定的直接用记事本)。那天在易语言实现了解包函数过后,想尝试用C#来做,一开始感觉还很不错的,自动完成和代码提示感觉很好。自动完成就连句中的空格字符都帮你调好了,而代码提示直接很方便的看到一个对象支持哪些操作。我那天就经常是在对象名之后按下.然后慢慢翻看代码提示的列表,找出适合用的函数。不过可能是因为不熟悉吧,后来我放弃了,疼痛点是类型转换问题,甚是纠结。

今天在用php写这个代码的时候,感觉php弱类型爽多了,而且php里面二进制资源可以很安全的放在一个字符串里面进行操作,这点是我之前不知道的(php嘛,我也没怎么学过,看过一点书,维护过一些代码)。很灵活很灵活,配合pack和unpack两个函数可以从二进制字符串中获取和转换内容,也可以生成二进制资源进行进一步处理(如联系文件、其他持久化存储)

 

天天动听安卓版皮肤打包工具分析+自制解包工具放出

程序是官方发布的,看到大小只有6kb左右,.net写的

习惯性用reflector打开,分析了一下代码,打包的逻辑不算很复杂,主要是一个pack函数

我用了大约1个小时给这段代码加上了注释,并且弄懂了打包原理和皮肤包格式。

点击这里查看-> ttpod pack.cs

很理所当然的很快的弄出了解包工具

源代码:tSU  (易语言,代码丑陋勿见怪,技术很差莫见怪)

可执行程序:ttpodSkinUnpacker(部分杀软可能报毒,自行斟酌要不要用)