分类 【乱七八糟】 下的文章

Sublime Text 3在MacOS下的一些设置

1.安装golang和gosublime后,每次启动sublime text3总是提示:MarGo: Missing required environment variables: GOPATH
解决方案:
打开Sublime Text3,选择Preferences -> Package Settings -> GoSublimge -> Settings – User
添加

{
    "env": {
            "GOPATH": "这里写实际golang的安装路径"
            }
}

比如我的就是(1.4.1版本):

{
    "env": {
            "GOPATH": "/Volumes/ORIGINAL/Developer/golang",
            "GOROOT":"/usr/local/Cellar/go/1.4.1/libexec"
            }
}

2.Sublime Text 2/3在Mac下总是用新窗口打开文件,而不是Windows上类似的标签页形式
解决方案:
Sublime Text 2具体设置:Preferences -> Settings – Default -> 搜索open_files_in_new_window,将其true 改为 false 后,重启一下sublime text 2 就OK。
Sublime Text 3具体设置:点击Command + Shift + P,找到”Preferences: Settings – User”,然后加入:

"open_files_in_new_window": false

获取 CubieTruck CPU 溫度

硬件型号:CubieTruck / CubieBoard3

硬件配置:
1、AllWinnerTech SOC A20,ARM® Cortex™-A7 Dual-Core,ARM® Mali400 MP2 Complies with OpenGL ES 2.0/1.1
2、2GB DDR3@480MHz
3、HDMI&VGA 1080P display output on-board
4、10M/100M/1G Ethernet
5、Wifi+BT wireless connection with antenna on-board
6、SATA 2.0 interface support 2.5’ HDD,(for 3.5’ HDD, only need another 12V power input)
7、Storage solution:8G NAND+MicroSD
8、2 x USB HOST,1 x OTG,1 x SPDIF,1 x IR,4 x LEDs,1 Headphone,3 x Keys
9、Power:DC5V @ 2.5A with HDD,support Li-battery & RTC
10、54 extended pins including I2S, I2C, SPI, CVBS, LRADC x2,UART, PS2, PWMx2, TS/CSI, IRDA, LINEIN&FMIN&MICIN, TVINx4 with 2.0 pitch connectors
11、PCB size:11cm 8cm1.4mm,very suite for installing a 2.5’ HDD

系统版本:

CubieTruck:~# uname -a
Linux CubieTruck 3.4.79-sun7i #8 SMP PREEMPT Mon Apr 28 13:26:48 CST 2014 armv7l GNU/Linux
CubieTruck:~# cat /etc/issue
Debian GNU/Linux 7 \n \l

获取温度的脚本有二,基本上都是修改了网上找来的文档,但是都运行不起来,现已改正:
脚本一: 参考文章

#! /bin/sh

echo 'f1c25000:27003f' > /sys/devices/virtual/misc/sunxi-dbgreg/rw/write;
echo 'f1c25010:40000' > /sys/devices/virtual/misc/sunxi-dbgreg/rw/write;
echo 'f1c25018:10fff' > /sys/devices/virtual/misc/sunxi-dbgreg/rw/write;
echo 'f1c25004:10' > /sys/devices/virtual/misc/sunxi-dbgreg/rw/write;
echo 'f1c25020' > /sys/devices/virtual/misc/sunxi-dbgreg/rw/read;

output=$(tail -n 1 /var/log/messages | awk '{print $7}')
degree=$(((output-1447)/10))
point=$(((output-1447)%10))
printf "Your CubieTruck’s CPU current temperature is '\033[31m%d.%d\033[0m' degree Celsius.\n" $degree $point

脚本二:参考文章

#! /bin/sh

echo 'f1c25000:27003f' > /sys/devices/virtual/misc/sunxi-dbgreg/rw/write;
echo 'f1c25010:40000' > /sys/devices/virtual/misc/sunxi-dbgreg/rw/write;
echo 'f1c25018:10fff' > /sys/devices/virtual/misc/sunxi-dbgreg/rw/write;
echo 'f1c25004:10' > /sys/devices/virtual/misc/sunxi-dbgreg/rw/write;
echo 'f1c25020' > /sys/devices/virtual/misc/sunxi-dbgreg/rw/read;

output=$(dmesg | tail -n 1 | awk '{print $2}')
degree=$(((output-1447)/10))
point=$(((output-1447)%10))
printf "Your CubieTruck’s CPU current temperature is '\033[31m%d.%d\033[0m' degree Celsius.\n" $degree $point

存在争议的部分是output需要减去1447 还是 2000,具体多少需要斟酌,但是两者最终计算出来的温度偏差也就几度,不是很大。

最后,在执行上面两个脚本中的任意一种之前,需要加载内核模块:

modprobe sunxi-dbgreg

或者可以编辑/etc/modules (只在cubie上测试通过,不晓得其他发行版会不会有差异),在尾部添加:sunxi-dbgreg,这样就可以在每次启动的时候自动加载了

Nginx的虚拟主机配置

前几天提到,我需要把家里的树莓派、cubieboard等小功耗设备映射到公网,同时解决80被封的问题,那么随之而来的就是域名解析。
不想折腾原有的几个域名(其实是害怕被封),于是就买了一个搬瓦工64M的VPS+申请了几个免费的.tk域名

于是问题就来了,情况是这样的,我申请了aaa.tk和bbb.tk等域名,然后只是想把家里的树莓派解析为pi.aaa.tk,cubieboard解析为cb3.bbb.tk,理论上来说,我写一个新的配置文件,扔到/etc/nginx/sites-available里,然后ln -s 到/etc/nginx/sites-enabled 里即可。

实际操作过程中,发现虽然使用pi.aaa.tk、cb3.bbb.tk两个二级域名访问的目标电脑是OK的,但是www.aaa.tk和www.bbb.tk等等二级域名也都指向了cb3,这样肯定是不对的

第一次尝试:
在默认host的配置文件中将www.aaa.tk、www.bbb.tk加入server_name后面,重启nginx后生效。
问题:我用的是泛域名解析,直接把.aaa.tk和.bbb.tk解析到了vps上,也就是说,随便用aaa.aaa.tk也能解析到vps,而默认host的配置文件中又没有该域名对应server_name,所以访问又被解析到cb3上。


第二次尝试:
pi.aaa.tk和cb3.bbb.tk的host文件还是照样写。
但是在期望是默认host的配置文件中如下填写:

server {
        listen   80 default_server; 
        listen   [::]:80 default_server ipv6only=on; 

        【此处省略若干行】

        server_name   _;

        location / {
          【以下省略若干行】

即,在listen的ip和端口后方增加default_server,同时在server_name部分以 _ 来描述。
保存退出,重启nginx,问题解决。

SSH Tunnel解决无公网IP 80被封等问题

有了一个CB3,一个树莓派B,外加一堆功耗很小的电脑,扔那扔着可惜,爬虫的话,一个就够了
于是想折腾怎么把这些“废品”给利用起来。
其实,用3322.org或者花生壳之类的DDNS都可以,因为我现在用的还是电信的宽带,除了80端口被封,还是可以拿到动态的公网IP的,但是呢,心里总是感觉不爽,凭啥非要再输入个端口号呢。而且放web服务这种事,最好还是别那么张扬。大环境下,指不定哪天就被查水表了。
从网上找到以下几种解决方案:

一、新花生壳/Nat123
看上去很美好,但是新花生壳的免费版帐号每天11点抢,正好是我比较忙的时间段,而且这种营销方式我很是不喜,最最主要的是这俩货都不支持Linux、Mac的客户端,只有Windows,除了玩游戏的一台台式机(而且功耗还很高),一个公司的笔记本以外,我就没有windows了,而且很明显,这两个都不能保证24小时开机,所以 Pass
其实,花生壳现在有一个叫花生棒的东西,内置了一个免费的新花生壳内网版,但是以为一个卖200+的玩意,居然只能映射2个端口,每个月还就1G的流量,我只能说:我勒个去,在我的概念里,那个小硬件其实就是一个嵌入式Linux,采用下面说的方案三来实现的。

二、树莓派VPN拨入VPS,通过VPS上的Nginx将“内网”中的树莓派做端口转发
这个方案的可行性倒是不错,但是看看可怜的树莓派,512Mb内存,还得跑服务,还得跑VPN客户端,而且最主要的,电信大概1-2天会重置一次网络,网络会间断一段时间,那么VPN的监控与重播又是一个麻烦事。

三、使用SSH Tunnel来建立本机/局域网与VPS的隧道,从而完成端口映射
具体的实施步骤如下:
1、先在VPS上打开openssh服务器的GatewayPorts支持

vi /etc/ssh/sshd_config

注意是sshd_config哦,在尾部添加:

GatewayPorts yes

保存,退出后,重启openssh服务器

2、在树莓派上:

ssh -fNR 0.0.0.0:80:localhost:8080 root@xxx.xxx.xxx -p 2112

上述的含义为:以root用户ssh连接到xxx.xxx.xxx,其中xxx.xxx.xxx的ssh端口为2112,然后建立一个隧道把localhost的8080端口绑定到xxx.xxx.xxx的80端口,xxx.xxx.xxx的监听IP为0.0.0.0,即所有地址。

下面是V友给的原文解释:

ssh的-R A.A.A.A:XXXX:B.B.B.B:YYYY 意思是: 在远程机器打开监听A.A.A.A:XXXX端口,该端口管道到本机,以本机的身份链接B.B.B.B:YYYY,而建立的管道。
还有个-L是类似的: -L A.A.A.A:XXXX:B.B.B.B:YYYY 意思是:在本机打开监听A.A.A.A:XXXX端口,该端口管道到远程机,以远程机的身份链接B.B.B.B:YYYY,而建立的管道。

这样访问http://xxx.xxx.xxx就可以访问到树莓派8080端口上的应用啦

3.监控脚本(非aotussh)
在树莓派上安装screen和expect
将下面的脚本保存为autossh.sh,打开screen,然后执行:authssh.sh

#!/bin/sh

if [ "$1x" != "connectx" ]; then

    if [ -z $1 ]; then
        echo "Usage: $0 [username@]host[:port]" 2>&1
        exit 0
    fi

    echo -n "Password: "

    stty -echo; read pass; stty echo; echo ""

    expect -- << EOF
        spawn $0 connect $1

        while 1 {
            expect {
                "password:" {
                    send "$pass\r"
                }
                "yes/no" {
                    send "yes\r"
                }
                "Permission denied" {
                    puts "Password error."
                    break
                }
            }
        }
EOF
else
    shift
    port=`echo $1 | perl -nle 'print /\:(\d+)$/ ? $1 : "22"'`
    while [ 1 ]
        do ssh -p $port -CN -D 0.0.0.0:80 $1 target "while nc -zv localhost 80; do sleep 20; done"
        sleep 20
    done
fi

4.监控断线(使用autossh)
请参考 http://yuanxiao.sinaapp.com/pages/122/132/377/article_index.html
使用命令:autossh -M 7890 -NR 0.0.0.0:8080:localhost:8080 root@xxx.xxx.xxx -p 2112
可以看到,多了一个M参数,该参数是指使用本地的7890端口来监听SSH连接是否正常
以daemon方式执行,相当于root去执行autossh, ssh,这时刚才普通用户目录下的.ssh/authorized_keys文件会不起效。有两种办法解决,一种是用autossh的参数指定.ssh路径;另外一种是以普通用户身份执行daemon,下面是第二种方式。

/bin/su -c '/usr/bin/autossh -M 7890 -NR 0.0.0.0:8080:localhost:8080 root@xxx.xxx.xxx -p 2112 -f' - tan9le

注意:如果需要远程服务器直接监听0.0.0.0地址的话,需要将 远程 服务器的ssh服务配置文件(如/etc/sshd_config)中修改GatewayPorts no为GatewayPorts yes来打开它,否则远程服务器将只能够监听127.0.0.1
将上面命令放入下面各启动方式中,根据自己系统自己配置:

SysV:/etc/inid.d/autossh
Upstart: /etc/init/autossh.conf
systemd: /usr/lib/systemd/system/autossh.service

Mac下Sublime Text 2/3总是以新窗口打开文件的解决办法

Windows/Linux下的sublime总是默认的以标签页的形式打开关联的文件,但是在Mac下使用Sublime打开文件,总是使用新窗口。
不用多久,就有了一堆Sublime的窗口,找东西很麻烦。
解决办法如下:
sublime text 2.x:

具体设置:Preferences -> Settings – Default -> 搜索open_files_in_new_window,将其true 改为 false 后
重启一下sublime text 2

sublime text 3.x:

具体设置:Preferences -> Settings – User -> 添加 "open_files_in_new_window": false,

重启一下sublime text 3