在git中使用GPG给tag签名的方法

在git中使用GPG给tag签名的方法

平台:windows
git:官版
git gui:smartgit
GPG:gungpg

gungpg默认key存储位置在c:\Users\<用户名>\AppData\Roaming\gnupg\
而git默认访问位置在c:\Users\<用户名>\.gnupg\
所以需要使用mklink创建链接从实际位置指向git访问位置

mklink /D c:\Users\<用户名>\.gnupg c:\Users\<用户名>\AppData\Roaming\gnupg

git默认使用的签名是与用户名和邮箱对应的签名
可以在库(repository)的.git目录下的配置文件(config)中添加如下内容指定KEY-ID

[user]
    signingkey = <gpg-key-id>

这个方法对多个KEY同样有效

或者可以设置全局KEY-ID

git config --global user.signingkey <gpg-key-id>

打tag的命令:

git tag -s <tagname> -m "<tagmessage>" <commitSHA1-id>

另外 也可以使用-u参数指定特定提交使用的KEY-ID

git tag -u <KEY-ID> -s <tagname> -m "<tagmessage>" <commit-id>

完成后用如下指令可以查看结果

git show <tagname>

验证tag签名的方法

git tag -v <tagname>

同样可以签署commit

git commit -a -S -m "<tagmessage>"

在 Git 1.8.3 及以后的版本中,“git merge” 与“git pull” 可以使用 –verify-signatures 选项来检查并拒绝没有携带可信 GPG 签名的提交。
如果使用这个选项来合并一个包含未签名或有效的提交的分支时,合并不会生效。

git merge --verify-signatures non-verify

也可在merge签名

git merge --verify-signatures -S signed-branch

 

参考:
git help tag
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001376951758572072ce1dc172b4178b910d31bc7521ee4000
https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E7%AD%BE%E7%BD%B2%E5%B7%A5%E4%BD%9C
https://airk000.github.io/git/2013/09/30/git-tag-with-gpg-key

另外是一个签名的“幽默故事”

http://www.oschina.net/translate/git-horror-story

SSR快速搭建手册

SSR快速搭建手册

系统:centos、archlinux
平台:搬瓦工、conoha
User:root

搬瓦工 centos C-P 流程(copy-past+回车即可)

yum install epel-release
yum install python-setuptools && easy_install pip
yum install m2crypto git libsodium nano 
pip install cymysql

git clone -b manyuser https://github.com/shadowsocksr/shadowsocksr

nano /etc/shadowsocks.json


{
    "server":"0.0.0.0",
    "server_ipv6": "[::]",
    "local_address":"127.0.0.1",
    "local_port":1080,
    "port_password":{
         "1234":"password1",
         "5678":"password2"
    },
    "timeout":300,
    "method":"aes-256-cfb",
    "fast_open": false
}



nano /etc/init.d/shadowsocks




#!/bin/sh
#chkconfig: 2345 85 15
#description: some desc here
#processname: the_process_name 
case "$1" in
        start)
                nohup python /root/shadowsocks/shadowsocks/server.py -c /etc/shadowsocks.json;;
        stop)
                ;;
        restart)
                ;;
        *)  
                echo "Usage: #0 {start|stop|restart}";;
esac




chmod +x /etc/init.d/shadowsocks



chkconfig --add shadowsocks

chkconfig shadowsocks on

conoha archlinux C-P 流程

pacman -S python-setuptools python-pip python2-m2crypto git libsodium


pip install cymysql


git clone -b manyuser https://github.com/shadowsocksr/shadowsocksr


nano /etc/shadowsocks.json


{
 "server":"0.0.0.0",
 "server_ipv6": "[::]",
 "local_address":"127.0.0.1",
 "local_port":1080,
 "port_password":{
 "1234":"password1",
 "5678":"password2"
 },
 "timeout":300,
 "method":"aes-256-cfb",
 "fast_open": false
}


mv shadowsocksr/ /usr/bin/shadowsocks/



nano /etc/systemd/system/shadowsocksR.service



[Unit]
Description=ShadowsocksR Server Service
Requires=network.target
After=network.target

[Service]
Type=simple
User=nobody
Restart=always
ExecStart=/usr/bin/python2 /usr/bin/shadowsocks/shadowsocks/server.py -c /etc/shadowsocks.json

[Install]
WantedBy=multi-user.target



systemctl start shadowsocksR.service

systemctl status shadowsocksR.service

systemctl enable shadowsocksR.service


 archlinux修改服务配置文件后需要重载并重启服务才能有效

systemctl daemon-reload

P:
archlinux默认的python是python3,SSR的开发是针对python2的,所以在作者收到bug反馈并修复之前会有各种奇怪bug,所以需要指定archlinux使用python2

journalctl -xe 可以查看系统服务日志

centos手动创建服务

centos手动创建服务

参见:
http://www.cnblogs.com/sheldonxu/archive/2012/04/13/2445399.html
http://www.centoscn.com/CentOS/config/2014/0804/3424.html

1. 在/etc/init.d下创建Service启动脚本

脚本头部的固定写法:

#!/bin/sh
#chkconfig: 2345 85 15
#description: some desc here
#processname: the_process_name

其中2345是runlevel,即2-5,85是系统启动顺序,15是系统关闭顺序
当然,它要有运行权限: chmod +x /etc/init.d/some_service

脚本内容的一般写法

case "$1" in
    start)
        echo "Starting myservice...";;
    stop)
        echo "Shutting down myservice...";;
    restart)
        echo "Shutting down myservice..."
        echo "Starting myservice...";;
    *) 
        echo "Usage: #0 {start|stop|restart}";;
esac

2. 注册到系统

chkconfig --add some_service

3. 设置随系统启动

激活:

chkconfig some_service on

取消:

chkconfig some_service off

 

linux使指定程序在任意用户执行时均拥有root权限

linux使指定程序在任意用户执行时均拥有root权限

在编程使用raspberry的GPIO口时

要想操作GPIO、I2C必须要拥有root权限

但是在多应用程序通信联合运行时就出现一个大问题

非root应用程序不能启动一个访问gpio口的应用程序

想到的解决方法一个就是以root启动调用者

但是这样就失去了安全性

第二个就是使得被调用程序始终以root权限执行

操作方法如下

1、将可执行文件的所有者设置为root
2、设置所有人可读可执行此文件(这两步直接在root下gcc编译即可实现)3、使用“chmod u+s xxx”将xxx文件设置为s权限

这样这个程序在使用ls -all查看时便是如此权限“-rwsr-xr-x”

然后就可以让任意用户使用普通的调用方法却能让程序运行在root权限下

 

参考:http://jazka.blog.51cto.com/809003/240549