Erlang启动脚本

Erlang启动脚本

Erlang可以直接使用一个beam文件作为启动脚本

参见:https://stackoverflow.com/questions/1865997/erlang-startup-script

使用

erl -boot start_sasl -s XYZ_app start

即可在启动时启动sasl并执行XYZ_app的start函数

在start函数中执行一些无法在erl参数中执行的指令即可

比如ping指令、先行库启动指令,等等

而可以放在erl参数中的有detached、setcookie、name/sname、pa/pz、daemon、boot

 

注意:escript不能作为先行启动脚本使用,因为 escript执行完后会直接退出虚拟机而不会等待程序继续执行

树莓派archlinux移动硬盘搭建网络存储

树莓派archlinux移动硬盘搭建网络存储

树莓派2B
旧希捷500G移动硬盘
archlinux(2015-10-25)
sambantfs-3g

参考资料:
https://wiki.archlinux.org/index.php/Samba_%28%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%29
https://wiki.archlinux.org/index.php/NTFS-3G_(简体中文)
https://wiki.archlinux.org/index.php/NTFS-3G

ntfs-3g库实现了ntfs分区的读写

samba实现windows版的smb局域网共享

关键:
需要写权限的目录必须要设置目录权限1770身份权限root:sambashare

groupadd sambashare
chown root:sambashare <共享目录>
chmod 1770 <共享目录>

如此才能够让sambashare用户组中的用户获得对此目录的读取执行写入权限

添加用户的方法:

先添加一个系统用户
再设置其的samba密码即可

useradd <user>
pdbedit -a -u <user>

每次修改samba配置文件之后不要忘记用命令testparm检查配置文件正确性

设置自动挂载分区只要在/etc/fstab中添加条目即可

例如:

/dev/设备 /mnt/载点 ntfs-3g gid=users,dmask=022,fmask=133 0 0

 

另:
树莓派USB口供电不足,所以挂载移动硬盘需要独立供电或者使用三口USB线从外部取电或者使用自带供电的USBHub
并且,树莓派的网卡口和USB口都是从一个USB口扩展出来的,所以性能不会有多快,测试读写大概稳定在10MB/s

搭建git服务器

搭建git服务器

参照:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770360579bc4b458f044ce7afed3df579123eca000

安装git

创建git用户

adduser git

将用户公钥放入/home/git/.ssh/authorized_keys文件中一行一个

之后用户即可使用密钥方式登录git仓库

这时可以初始化git仓库

先选定一个目录作为Git仓库,假定是/srv/sample.git,在/srv目录下输入命令初始化

git init --bare sample.git

然后设置文件夹用户为git【注意这里设置git用户的shell为git-shell有可能无法使用】

chown -R git:git sample.git

之后如使用smartGit可以用下面的路径添加远程库

ssh://git@服务器地址:服务器端口/srv/sample.git

 


ssh key 生成方法:

在git shell中执行

ssh-keygen -t rsa -C "youremail@example.com"

按说明创建即可

 

手动添加key到本地使用

ssh-add ~/.ssh/私钥文件.ppk

若提示Could not open a connection to your authentication agent.则使用以下命令启动ssh-agent

eval `ssh-agent -s`

若本地多key共存,可以在文件中如下指定key对应的服务器

Host 服务器地址
 port 服务器端口
 HostName 服务器地址
 PreferredAuthentications publickey
 IdentityFile ~/.ssh/私钥文件.ppk

 

恋爱家庭教师露露美★Coordinate!游戏原声文件.NWA读取办法

恋爱家庭教师露露美★Coordinate!游戏原声文件.NWA读取办法

参照:http://www.keyfc.net/bbs/showtopic-8664.aspx

REALLIVE系列引擎中BGM(*.NWA)文件的提取方法

正常状态下NWA文件是带有特殊头信息的PCM格式

一种解法是直接放入音频编辑软件,去除开头杂音后保存

另一种是foobar2000安装插件foo_adpcm直接读取.

http://kode54.foobar2000.org/
http://kode54.foobar2000.org/?v

foo_adpcm
144.1 KB
2013-08-13 03:04:24
Supports CRI ADX, my own BRR format based on Sony SPC-700 and PSX ADPCM, everything from in_cube (DSP, GCM, HPS, IDSP, SPT/SPD, MSS, ADP), EA MUS/ASF and MAP files, a host of formats from foo_okiapcm/libpcm (Circus-XPCM sample files (and also ADPCM files from the Saturn version of Symphony of the Night / Dracula X: Nocturne in the Moonlight) (*.PCM), Konami-Gungage-XA sample files (*.8), KID-WAF sample files (*.WAF), BasiL-WPD sample files (*.WPD), TamaSoft-MPF sample files (*.MPF), StudioMiris-WDT sample files (*.WDT), Hayashigumi-KWF sample files (*.KWF), VisualArts-NWA sample files (*.NWA), jANIS-PX sample files (*.PX), CLOVER-BW sample files (*.BW)), RAC IMA-ADPCM files from Star Trek: The Next Generation – A Final Unity PC game, and XA ADPCM files from various games. Whew.

 

在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