使用SSH包写了一个SCP文件到远程服务器的东东

func sendFile(client *ssh.Client, src string, dest string) error {
    session, err := client.NewSession()
    if err != nil {
        return err
    }
    defer session.Close()
    go func() error {
        w, errs := session.StdinPipe()
        if errs != nil {
            return errs
        }
        defer w.Close()
        fileSrc, srcErr := os.Open(src)
        if srcErr != nil {
            return srcErr
        }
        srcStat, fileErr := fileSrc.Stat()
        if fileErr != nil {
            return fileErr
        }
        fmt.Fprintln(w, "C0644", srcStat.Size(), filepath.Base(dest))
        io.Copy(w, fileSrc)
        fmt.Fprint(w, "x00") // 传输以x00结束
        return nil
    }()
    if err := session.Run("/usr/bin/scp -qrt " + filepath.Dir(dest)); err != nil {
        return err
    }
    return nil
}

在服务器上执行一个PY脚本

func execCmd(client *ssh.Client, cmd string) (error, string) {
    sessions, err := client.NewSession()
    if err != nil {
        return err, ""
    }
    defer sessions.Close()
    str, errc := sessions.CombinedOutput(cmd)
    return errc, string(str)
}

结果

SCP文件是正常的,在执行PY脚本的时候代码也全部执行了,不过输出的结果不一致
和在服务器上直接执行python xxx.py par1 par2 不一样
xxx.py

os.system(‘tar zxvf xxx.tar.gz’)//这个会显示解压文件的路径
ptint(“start”)
os.system(cp xxx.class)
print(“stelp 2”)
os.system(‘tar zcvf xxx.tar.gz ./’)//这个会显示路径

GO得到的结果

显示tar zxvf 的结果
显示tar zcvf 的结果
print(start)
print(step 2)

没闹明白为啥这样的 是不是和PY调用系统命令有关系.

编译libgit2

$ mkdir build && cd build
$ cmake ..
$ cmake --build .

给的是这个,不过编译了会找不到,根据后面的提示

$ cmake .. -DCMAKE_INSTALL_PREFIX=/install/prefix
$ cmake --build . --target install
安装到/usr/local目录下

编译git2go

git submodule update --init # get libgit2 就开始下载了
make install

在用PHP输出图片的时候果断想到了用304来进行缓存,记录下折腾的过程


$catchTime = 3600*24;//无脑缓存
$modifiedTime = $_SERVER['HTTP_IF_MODIFIED_SINCE'];
if( strtotime($modifiedTime) + $catchTime > time() ){
header("HTTP/1.1 304");
header('Cache-Control: max-age=' . $catchTime);//不加这行会出现一会200 一会304的情况
exit;
}
header("content-type:image/png");
header("Last-Modified:".gmdate("D, d M Y H:i:s", time()+864000)." GMT");
header("Expires: " .gmdate('D, d M Y H:i:s', time()+864000).'GMT');
header('Cache-Control: max-age=' . $catchTime);
//必须要有这行才行,测试环境 CHROME 不然后面的请求浏览器不会发送HTTP_IF_MODIFIED_SINCE

不过还需要优化,目前是无脑缓存的,还需要接合文件的最后修改时间来缓存,不然更新是个问题

最近各种折腾GO的证书 JSK,KEY,CRT,CAROOT 的折腾

这个软件不错:http://keystore-explorer.sourceforge.net/index.php

jks

可以导出:CAROOT,KEY,CRT,P12文件。

 pfx转换cer,crt,key

       openssl pkcs12 -in test.wosign.pfx -nodes -out test.pem
openssl rsa -in test.pem -out test.key
openssl x509 -in test.pem -out test.crt(cer)

这个命令也可以转换出来

参考:https://support.wosign.com/index.php?/Knowledgebase/Article/View/36/0/

在同一台服务器上装了redmine和gitlab 配置redmine + nginx的时候各种折腾

启动方法1:ruby script/rails server webrick -e production -d  默认的测试程序配置好了没的方法 人多了就不行了

启动方法2:ruby script/rails server mongrel -e production -d -p3000 稍微强点 不过人民大众还是说慢

逐研究NGINX方法

1:准备用mongrel + nginx的方法 没折腾成功放弃

参考:http://wiki.nginx.org/ChsRubyonRailsMongrel

出现的错误:em_plugin.rb:109:in `load’: uninitialized constant Gem::SourceIndex (NameError)

继续阅读

string 转JSON

mapJson := map[string]string{“ip”: localIp, “log”: str}
mapJsonStr, err := json.Marshal(mapJson)

json to map/struct

content := `{“ip”:”192.168.200.53″,”log”:”fsadfasdfaf”}`
var nl map[string]interface{}
errs := json.Unmarshal([]byte(content), &nl)
if errs != nil {
fmt.Println(errs)
}
fmt.Println(nl[“ip”])

数组 和 字符串转换

int to str :strconv.Itoa(count)
str to int :strconv.Atoi(count)

时间转换

str :=”04/Sep/2014:16:18:08″
t, err := time.Parse(“02/Jan/2006:15:04:05”, str)
if err != nil {
fmt.Println(err)
}
fmt.Println(t)
fmt.Println(t.Format(“2006-01-02 15:04:05”))//得到年-月-日 时:分:秒 格式

这文章不错https://gobyexample.com/json

起因:编译好的GOLANG 可执行文件在内网服务器上跑,突然一天日志显示连接对方EPP服务器的时候提示handshake_failure

分析:想了下这应该是EPP服务器的证书有变化(不过沟通后对方说没有变化,只能自己折腾了)

直接使用OPENSSL 尝试连接 发现是正常的,能够看到EPP的greeting 说明对方的也是正常的,猜想应该是对方修改了什么但是GO不支持

用NODEJS 写了一个测试文件 发现是连接正常 所以应该是GOLANG 不支持的原因

继续阅读

默认安装sqlite3
npm install sqlite3
此时node已经可以访问sqlite3了
这个时候如果启动node-webkite app 就会报找不到sqlite3

参看 https://github.com/rogerwang/node-webkit/wiki/Build-native-modules-with-nw-gyp
第一种方法没成功 最后用了0.8.6的版本(最新版本0.10.0.rc1)

$ npm install node-pre-gyp
$ node-pre-gyp build –runtime=node-webkit –target=0.8.6

如果编译成功根据说明就可以使用了 注意编译脚本记得把node_modules 整个目录打包到.nw文件里面

写了一个shell脚本来打包并执行
cd /var/www/nodeapp/node-webkit-test/app
zip -r ../app.nw *
nw ../app.nw

安装的是postfix软件,不过配置文件里面还是写config.action_mailer.delivery_method = :sendmail

config/gitlab.yml 修改: email_from: root@gitlab.ename.com

在邮件服务账号设置白名单 root@gitlab.ename.com 就可以正常收到邮件了

SMTP折腾了很久都没收到邮件