赖 frp 随时随地访问自己之树莓派

数码准备

标准库各个包里的相互关系,可以一直通过命令获取,然后简单转换为一个正经的
JSON 对象:

go list -json  std

演示输出:

{
    "Dir": "/usr/local/go/src/archive/tar",
    "ImportPath": "archive/tar",
    "Name": "tar",
    "Doc": "Package tar implements access to tar archives.",
    "Target": "/usr/local/go/pkg/darwin_amd64/archive/tar.a",
    "Goroot": true,
    "Standard": true,
    "StaleReason": "standard package in Go release distribution",
    "Root": "/usr/local/go",
    "GoFiles": [
        "common.go",
        "format.go",
        "reader.go",
        "stat_atimespec.go",
        "stat_unix.go",
        "strconv.go",
        "writer.go"
    ],
    "IgnoredGoFiles": [
        "stat_atim.go"
    ],
    "Imports": [
        "bytes",
        "errors",
        "fmt",
        "io",
        "io/ioutil",
        "math",
        "os",
        "path",
        "sort",
        "strconv",
        "strings",
        "syscall",
        "time"
    ],
    "Deps": [
        "bytes",
        "errors",
        "fmt",
        "internal/cpu",
        "internal/poll",
        "internal/race",
        "io",
        "io/ioutil",
        "math",
        "os",
        "path",
        "path/filepath",
        "reflect",
        "runtime",
        "runtime/internal/atomic",
        "runtime/internal/sys",
        "sort",
        "strconv",
        "strings",
        "sync",
        "sync/atomic",
        "syscall",
        "time",
        "unicode",
        "unicode/utf8",
        "unsafe"
    ],
    "TestGoFiles": [
        "reader_test.go",
        "strconv_test.go",
        "tar_test.go",
        "writer_test.go"
    ],
    "TestImports": [
        "bytes",
        "crypto/md5",
        "fmt",
        "internal/testenv",
        "io",
        "io/ioutil",
        "math",
        "os",
        "path",
        "path/filepath",
        "reflect",
        "sort",
        "strings",
        "testing",
        "testing/iotest",
        "time"
    ],
    "XTestGoFiles": [
        "example_test.go"
    ],
    "XTestImports": [
        "archive/tar",
        "bytes",
        "fmt",
        "io",
        "log",
        "os"
    ]
}

梳理了之数据源,参见:
https://raw.githubusercontent.com/ios122/graph-go/master/data.js

前言

扣押了知乎上之一个「树莓派」是啊与老百姓怎么打?
的高票回答,双十一时间,果断买了一个灌木派 3.
星期一(11.13) 到的货.我时光想实现一个简易的效能 —
想由随机位置访问我之灌木派. 就比如一个潘多拉魔盒,第一步肯定是以到钥匙!

数码整理

就算管原有数据,处理成 echarts 需要的数量,这里大概说生最为基本的笔触:

  • echarts 显示相关的代码,很非常程度达参照了
    graph-npm

  • 节点坐标和颜料,采用擅自坐标和颜色,以删节点和保证里面的联系.我以为这样处理,能更纯粹地考察标准库包与保里面的联系.

  • 消一个 edges 来记录包与保里面的负关系.在每次遍历 Imports
    时,动态写入.

  • 急需一个 nodes 来记录包自身的一部分信息,但是该 size
    参数,需要计算过有因关系后再度填写入.

  • 采用 nodedSize
    来记录每个包吃依的次数,为了提升效率,它是一个字典Map.

    /* 将原本数据,转换为图标友好之数据.

    ImportPath 作为唯一 id 和 标签;
    Imports 用于计算依赖关系;
    节点的大小,取决于被依赖的次数;
    */
    

    function transData(datas){

    /* 存储依赖路径信息. */
    let edges = []
    
    /* 存储基础节点信息. */
    let nodes = []
    
    /* 节点尺寸.初始是1, 每被引入一次再加1. */
    let nodedSize = {}
    
    /* 尺寸单位1. */
    let unitSize = 1.5
    
    datas.map((data)=>{
        let itemId = data.ImportPath
    
        nodes.push({
            "label": itemId,
            "attributes": {},
            "id": itemId,
            "size": 1
        })
    
        if(data.Imports){
            data.Imports.map((importItem)=>{
                edges.push({
                    "sourceID": importItem,
                    "attributes": {},
                    "targetID": itemId,
                    "size": unitSize
                })
    
                if(nodedSize[importItem]){
                    nodedSize[importItem] = nodedSize[importItem] + unitSize
                }else{
                    nodedSize[importItem] = unitSize
                }
            })
        }
    })
    
    /* 尺寸数据合并到节点上. */
    nodes.map((item)=>{
        let itemId = item.id
        if(nodedSize[itemId]){
            item.size = nodedSize[itemId]
        }
    })
    
    return {
        nodes,edges
    }
    

    }

参考

  • 初使用树莓派并启用root管理员(登录root管理员)
  • 下 frp
    进行内网穿外露
  • frp
    官方中文文档
  • vi/vim基本以办法
  • Systemd 官网中文版
  • 充分用树莓派SD卡
  • 化解树莓派无法还开自动启动 frpc
    的问题
  • 用大半只显示器和 Mac
    配合以

简介

图片 1

国庆羁押了 << Go 语言圣经
>>,总想做点什么,来深化下印象.以可视化的措施展示 golang
标准库之间的仗,可能是一个较好之切入点.做事先,简单搜了下相关的情节,网上也要讨论,但是从未意识一直会将过来用之.标准库之间,是得在因关系的,不同库被据之程度必然是无等同的.但究竟发差不多特别差别呢?

以下内容,数据源自真实环境的 golang 1.9
版本的标准库.所以,本文不仅是一模一样首而视化相关的座谈文章,更是提供了一个方可一直追究
golang 标准库间依赖关系的快梳理工具.

预备公网 ip 和公网服务器

公网ip和公网服务器,类似于一个桥梁.我们透过其以可看我们放在内网的灌木派.服务器,我是买进的低配置的称服务器.当然,用好一度有的ip和服务器也可以.

可视化原理

最主要干一下情:

  • 可视化显示,使用的凡 echarts

  • 运用初数据的 ImportPath 而休是
    Name,来当每个数据节点的唯一id.这样是为 golang
    本身的包命名规范控制的.

  • 动原来数据的 Imports
    字段,来规定专业库包与保里面的相互依赖关系.golang是不允许循环依赖之,所以部分巡回依赖相关的题材,不待考虑.

  • 节点的深浅,和包被外保险引入的次数成正相关.这样做,被因越多的管,图及最终显示时,就见面更加大.常用包和非常因此包,一目了然.

使用 Systemd 实现全自动启动 frp

Systemd,可以保证在养莓派意外又开时,能自行启动 frp
相关服务.这样,我们即便毫无整天提心吊胆,担心各种奇怪了.

功效与源码

  • github 源码: https://github.com/ios122/graph-go
  • echarts 在线预览:
    http://gallery.echartsjs.com/editor.html?c=xSyJNqh8nW

当灌木丛派客户端使用 Systemd 管理 frpc

# 需要先 cd frp 解压目录.

# 复制文件
cp frpc /usr/local/bin/frpc
mkdir /etc/frp
cp frpc.ini /etc/frp/frpc.ini

# 编写 frp service 文件,以 centos7 为例,适用于 debian
vim /usr/lib/systemd/system/frpc.service
# 内容如下
[Unit]
Description=frpc
After=network.target

[Service]
TimeoutStartSec=30
ExecStart=/usr/local/bin/frpc -c /etc/frp/frpc.ini
ExecStop=/bin/kill $MAINPID

[Install]
WantedBy=multi-user.target

# 启动 frp 并设置开机启动
systemctl enable frpc
systemctl start frpc
systemctl status frpc

# 部分服务器上,可以需要加 .service 后缀来操作,即:
systemctl enable frpc.service
systemctl start frpc.service
systemctl status frpc.service

注意:

  • frps 或 frpc 启动无效时,可以品尝先停服务,如:

systemctl stop frpc

连带链接

  • echarts
  • graph-npm

化解树莓派容量使用未了问题

本人是 64G 的内存卡,但是关押容器总共只有
7.2G.第一反应是逢了惨绝人寰企业,但是网上搜了产,简单设置双重启即可.详见:
http://cedar-renjun.github.io/2015/10/11/resize-raspberry-sd-volume/

此处引用记录下关键步骤,以供查阅:

操作步骤
1.更培训莓派,进入命令行页面
2.登陆树莓派,用户名 pi,密码 raspberry

  1. sudo su
    切换至特级用户
  2. df -h
    著有时分区的状态和使用率
  3. 输入 fdisk /dev/mmcblk0 加载SD卡
  4. p 打印当前分区
    而应有会相三单分叉区(mmcblk0, mmcblk0p1,
    mmcblk0p2),现在拿分区2的音信写下来(/dev/mmcblk0p2)
    自我第一记录了开始扇区(122880)和了扇区(8447999)的数值
    7.按 d 开始去分区
  5. 系提示输入删除分区号,输入 2
  6. n 新建分区,然后逐一输入 p, 2
  7. 搭下输入原来记录的2扇区开始号(122880),记得替换成你协调的数字
  8. w 保持配置
  9. 输入 reboot 重启树莓派
  10. 输入 sudo resize2fs /dev/mmcblk0p2 更新系统
  11. 输入 df -h 看看,是无是已经全采用了剩下空间

注意:在第 10 步之后,系统提醒为输入了扇区时,直接保持默认回车即可.

安装 Systemd

大多数 Linux 系统被,都放置了 Systemd.如果没有,可以手动安装.

安装systemd请运行:

apt-get update
apt-get install systemd
apt-get install systemd-sysv

于装置了 systemd 之后,为了要系统为 systemd 的不二法门利用,最好以 grub
配置文件中之 kernel 命令行指定下面的参数:

vi /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash init=/lib/systemd/systemd"

以以新安装的systemd来指点迷津体系,请复启航系统:

# reboot

配制 frp 服务器端 — frps

frp 的劳务器端,一般名字是 frps,配置文件是 frps.ini.
这半只文本要放开你的公网服务器上.一般,你还答应错过发布页,去找寻
frp 的呼应的操作系统的风行下载版本.此处以
frp_0.13.0_linux_amd64.tar.gz 为例.

# 下载.下载地址可以在github发布页右键点击某个下载项 --> 复制链接地址.
wget https://github.com/fatedier/frp/releases/download/v0.13.0/frp_0.13.0_linux_amd64.tar.gz

# 解压.
tar -zxvf frp_0.13.0_linux_amd64.tar.gz

# cd 到 frp 目录.
cd frp_0.13.0_linux_amd64

# 编辑.debian上,打开vim的命令是 vi,不是 vim.
vi frps.ini

在 frps.ini 中输入:

[common]
bind_port = 7000
vhost_http_port =80
dashboard_port = dashboard_port_number
dashboard_user = dashboard_user_name
dashboard_pwd = dashboard_pwd_value
privilege_token = privilege_token_value

然后,开启 frps 即可:

./frps -c ./frps.ini

安排好服务器端后,你当就可当浏览着打开 frp 的控制台页面了:

图片 2

注意:

  • dashboard_port_number 改呢一个一定的捧口号,如8000,如此就可由此
    http://yourip:8000 来访问 frps
    的网页控制台页面.
  • dashboard_user_name 和
    dashboard_pwd_value,要转移也一个自定义的用户称和密码,用于在拜访 frps
    控制台页面时输入.
  • privilege_token_value 改也一个自定义的值.只要客户端与服务端
    privilege_token 匹配时,客户端才会连续至 frp 服务端.

组装

组建,其实据的凡把培植莓派放上瑞白外壳里.基本思路就是,去卖家店铺里看组装说明.其中,小电扇的装置有点异样,需要接4/6脚.就是绝外层的下手起第2跟第3单.接不对,小电扇,就非见面转.我特意截了只图,以备忘:

图片 3

修改 root 密码

造莓派默认没有 root 密码,直接设置即可.

# 设置 root 密码
sudo passwd root

# 解锁 root 账户
sudo passwd --unlock root

# 切换到 root 账户
su root

可选: 准备一个域名

一品域名还是二级域名,只要能够做 ip 类型的 DNS
解析都可以.这无异于步,就是简单的把域名解析到前面无异步之公网 ip
上.这样后访问会便些,不用记ip了. 当然,直接用 ip 访问也是可的.

配制 frp 客户端 — 树莓派

frp 的客户端,一般名字是 frpc,配置文件是 frpc.ini.
这简单单公文要放到你的内网服务器–树莓派上.一般,你都许诺错过发布页,去找寻
frp 的应和之操作系统的新星下载版本.此处以
frp_0.13.0_linux_arm.tar.gz 为例.

# 下载.下载地址可以在github发布页右键点击某个下载项 --> 复制链接地址.
wget https://github.com/fatedier/frp/releases/download/v0.13.0/frp_0.13.0_linux_arm.tar.gz

# 解压.
tar -zxvf frp_0.13.0_linux_arm.tar.gz

# cd 到 frp 目录.
cd frp_0.13.0_linux_arm.tar.gz

# 编辑. debian上,打开vim的命令是 vi,不是 vim.
vi frpc.ini

在 frpc.ini 中输入:

[common]
server_addr = your_server_ip
server_port = 7000
privilege_token = privilege_token_value
login_fail_exit = false

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22

remote_port = remote_port_number

然后,开启 frpc 即可:

./frpc -c ./frpc.ini

部署好服务器端后,你该于肆意可以连续到互联网的处理器及,使用 ssh
访问自己的灌木派了:

# 端口和ip要记得替换为自己的.
ssh -oPort=remote_port_number pi@your_server_ip

注意:

  • your_server_ip 要替换为公网服务器上绑定的公网 ip.
  • frps 服务器端与客户端不必是一模一样操作系统, 但frp 版本最好相应
  • 培养莓派3 debian 系统,需要之是 arm 版本的程序安装包.
  • privilege_token 要和劳动器端的 frps.ini 中针对诺
  • login_fail_exit 很重点,否则后面无法实现系统又启时自动启动 frpc
    功能.
  • remote_port_number,用来指定通过远程服务器的哪位端口来 ssh
    访问树莓派.

调试

我眼前说过了,我购买的凡套装,自带一个略显示器的那么种.主要是外网ip经常变换,我无是蛮易确定树莓派的ip.还有即使是率先次启动时,我需要手动输入下密码.

虽听了诸多,但是诚看好小盒子,加上那么便宜的显示器,竟然当真一样自搭档,把系统桌面给显示出了,还是有一点点激动的.
NB 啊~

图片 4

PS: 这个略带显示器,也得以用作 mac 的外接显示器.第一动 mac
显示器,记住操作技能是:
全力以赴的将鼠标移到屏幕外,然后光标就会自行出现于另一样块屏幕上.

修改默认 ssh 密码

铸就莓派的 ssh 登录密码, 默认用户名是: pi , 默认密码是: **
raspberry** 要第一时间修改下.

passwd

每当服务器端使用 Systemd 管理 frps

# 需要先 cd 到 frp 解压目录.

# 复制文件
cp frps /usr/local/bin/frps
mkdir /etc/frp
cp frps.ini /etc/frp/frps.ini

# 编写 frp service 文件,以 centos7 为例,适用于 debian
vim /usr/lib/systemd/system/frps.service
# 内容如下
[Unit]
Description=frps
After=network.target

[Service]
TimeoutStartSec=30
ExecStart=/usr/local/bin/frps -c /etc/frp/frps.ini
ExecStop=/bin/kill $MAINPID

[Install]
WantedBy=multi-user.target

# 启动 frp 并设置开机启动
systemctl enable frps
systemctl start frps
systemctl status frps

# 部分服务器上,可能需要加 .service 后缀来操作,即:
systemctl enable frps.service
systemctl start frps.service
systemctl status frps.service

设置 ssh 自动登录

树莓派默认没有目录 .ssh
,需要先创造下.需要ssh登录到培训莓派之后,在叫蒙推行:

mkdir ~/.ssh/

以任意一台想要顾树莓派的计算机中,直接实施(而非是登录到培养莓派后执行):

# 设置自动登录.
cat ~/.ssh/id_rsa.pub | ssh pi@树莓派内网ip  "cat >>  ~/.ssh/authorized_keys"

造就莓派内网ip
要更换为培莓派的内网ip.当然,也欲你用来做客树莓派的处理器以及塑造莓派处于相同局域网.

配置 frp