1
0
forked from x/ContextOS
2019-05-10 13:03:07 +08:00

8.1 KiB
Raw Blame History

context

context is not only context

下载安装

简易版

在Mac或Linux上可以直接用脚本下载

$ mkdir context && cd context
$ curl https://shylinux.com/code/upgrade/boot_sh | bash -s install

完整版

如果对源码有兴趣,使用更丰富的功能,可以直接下载源码,

$ git clone https://github.com/shylinux/context.git

下载完源码后如果安装了golang就可以对源码直接进行编译 如果没有可以去官网下载安装golanghttps://golang.org/dl/)。 第一次make时会自动下载各种依赖库所以会慢一些。

$ cd context && make

启动服务

bin目录下是各种可执行文件如启动脚本boot.sh与node.sh。

node.sh用来启动单机版contextboot.sh用来启动网络版context。

如下直接运行脚本即可启动context。

启动context后就可以解析执行各种命令即可是本地的shell命令也可以是内部模块命令。

$ bin/node.sh
0[03:58:43]ssh>

文件管理

调用本地命令,查看当前目录下的文件列表,

0[10:53:25]ssh> ls
total 0
drwxr-xr-x  5 shaoying  staff  160 May 10 03:57 bin
drwxr-xr-x  5 shaoying  staff  160 May 10 03:30 etc
drwxr-xr-x  2 shaoying  staff   64 May 10 03:30 usr
drwxr-xr-x  8 shaoying  staff  256 May 10 03:36 var

调用内部命令查看文件列表如下dir与ls命令用途相似但提供了更丰富的功能如统计文件行数

5[10:56:24]ssh> dir etc
time                 size  line  filename
2019-04-14 21:29:21  316   10    common.shy
2019-04-29 21:12:28  130   7     exit.shy
2019-04-29 21:12:12  191   12    init.shy

"%"是一个内部命令可以对前一步命令结果进行各种处理。如下按字段line排序

5[10:56:24]ssh> dir etc % order line
time                 size  line  filename
2019-04-29 21:12:12  191   12    init.shy
2019-04-14 21:29:21  316   10    common.shy
2019-04-29 21:12:28  130   7     exit.shy

如下按字段""聚合,即可得到汇总结果,所有文件的总字节数、总行数、总文件数

16[11:04:30]ssh> dir etc % group ""
time                 size  line  filename    count
2019-04-14 21:29:21  637   29    common.shy  3

时间管理

查看当前时间戳

18[11:11:01]ssh> time
1557457862000

将时间戳转换成日期

19[11:11:14]ssh> time 1557457862000
2019-05-10 11:11:02

将日期转换成时间戳

20[11:11:25]ssh> time "2019-05-10 11:11:02"
1557457862000

网卡管理

2[10:53:25]ssh> ifconfig
index  name  ip             mask  hard
5      en0   192.168.0.106  24    c4:b3:01:cf:0b:51

组建集群

context不仅只是一个shell还可以用来组建集群。

启动服务节点

启动服务节点使用脚本boot.sh 与node.sh不同的是boot.sh启动的context 会启动web模块监听9094端口会启动ssh模块监听9090端口。

$ cd context
$ bin/boot.sh
0[11:23:03]ssh>

启动工作节点

启动工作节点使用脚本node.sh 它启动的context会主动连接本地9090端口向服务节点注册自己。

如下新打开一个终端调用boot.sh创建并启动服务节点demo。

$ cd context
$ bin/node.sh create app/demo
0[11:23:03]ssh>

如下再打开一个终端调用boot.sh创建并启动服务节点led。

$ cd context
$ bin/node.sh create app/led
0[11:23:03]ssh>

调用远程命令

如下回到服务节点终端执行remote命令可以查看到所有远程节点。

22[11:35:12]ssh> remote
key   create_time          module          name   type
com   2019-05-09 20:57:21  ctx.nfs.file4   com    master
led   2019-05-09 20:59:28  ctx.nfs.file5   led    worker
demo  2019-05-09 20:59:28  ctx.nfs.file5   demo   worker

远程命令只需要在命令前加上节点名与冒号即可。

如下远程调用led节点的命令。

24[11:41:15]ssh> led:pwd
/Users/shaoying/context/app/led/var

如下远程调用demo节点的命令。

24[11:41:15]ssh> demo:pwd
/Users/shaoying/context/app/demo/var

如下,远程调用所有子节点的命令。

29[11:44:09]ssh> *:pwd
/Users/shaoying/context/app/led/var

/Users/shaoying/context/app/demo/var

启动分机服务

boot.sh不仅可以用来启动本地服务还可以将不同的主机组建在一起。

在另外一台计算机上重新下载安装一下context然后启动服务节点。

其中环境变量ctx_dev用来指定上级服务节点。

$ cd context
$ ctx_dev=http://192.168.0.106:9094 boot.sh
0[11:53:11]ssh>

回到原主机的服务节点终端, 使用remote命令可以查看到新加的从机节点。

30[11:55:38]ssh> remote
key   create_time          module          name   type
com   2019-05-09 20:57:21  ctx.nfs.file4   com    master
mac   2019-05-10 10:53:00  ctx.nfs.file13  mac    server
led   2019-05-09 20:59:28  ctx.nfs.file5   led    worker
demo  2019-05-09 20:59:28  ctx.nfs.file5   demo   worker

当然也可以在本地启动多个服务节点根据ctx_dev指定不同的上级节点可以级联也可以并联。

$ cd context
$ ctx_dev=http://localhost:9094 boot.sh create app/sub

注意不指定ctx_dev时默认连接 https://shylinux.com 如果不信任此主机记得设置ctx_dev

网页服务

下载完整版的context启动的服务节点就会带有前端网页服务。

工具链

code模块提供了工具链管理。

访问服务节点:http://localhost:9094/code

因为工具链,可以直接调用各种命令,为了安全,所以需要用户认证才能授权。

可以在服务节点的终端,直接添加用户认证信息。

如下添加一个角色为root的用户名为who用户密码为ppp。

25[11:54:44]ssh> ~aaa role root user who ppp

也可以在启动文件中,加入这条配置,记得重启一下服务节点

$ cat etc/local.shy
~aaa
    role root user who who

然后,在登录网页上输入用户名与密码,即可登入网页工作台。

页面工作台,只是对命令进行了一层封装,但提供了更流畅的交互。

以fieldset的形式将各种命令以弱耦合的形式组织在一起。

每一个fielset就是一个命令默认的工具链有

  • buffertmux粘贴板管理
  • upload文件上传
  • dir文件列表管理
  • pod节点列表管理
  • ctx模块列表管理
  • cmd命令行

使用pod选择任意远程节点 然后使用ctx选择任意模块 然后在cmd执行的命令都会发送给指定的节点与模块。

知识库

wiki模块提供了知识库管理。

访问:http://localhost:9094/wiki

wiki模块会将usr/wiki目录下的md文件进行解析生成网页文件并自动生成目录与索引。

可以创建自己的知识库,如下创建目录与文件。

$ mkdir -p usr/wiki/some
$ echo "hello world" > usr/wiki/some/hi.md

然后在服务终端上,切换到新建的知识库,

0[10:53:25]ssh> ~wiki config wiki_level wiki/some

也可以加到启动文件中,

$ cat etc/local.shy
~wiki
    config wiki_level wiki/some

信息流

chat模块提供了信息管理。

所有目录

一级目录

  • src
  • etc
  • bin
  • var
  • usr

源码目录

  • src/toolkit
  • src/context
  • src/example
  • src/plugin

配置文件

  • etc/init.shy
  • etc/common.shy
  • etc/exit.shy

执行文件

  • bin/boot.sh
  • bin/node.sh
  • bin/bench

日志文件

  • var/log/boot.log
  • var/log/error.log
  • var/log/right.log
  • var/log/bench.log
  • var/log/debug.log
  • var/run/bench.pid
  • var/run/user/cert.pem
  • var/run/user/key.pem
  • var/run/node/cert.pem
  • var/run/node/key.pem
  • var/tmp/runtime.json
  • var/tmp/auth.json

应用目录

  • usr/template
  • usr/librarys
  • usr/upgrade
  • usr/client

应用开发

  • Windows
  • Mac
  • pi
  • mp
  • iOS
  • Android

接口开发

模块开发

应用模块

插件模块

核心模块

系统架构

数据流 命令流 权限流 应用流
应用层 ctx cli aaa web
控制层 lex yac log gdb
数据层 tcp nfs ssh mdb

应用框架

解析引擎

通信框架

存储引擎