一、Klish框架简介:
命令行界面(CLI)应用程序被广泛使用。无论是网络设备管理、系统配置还是软件调试,命令行界面提供了一种高效和灵活的交互方式。同时为了简化命令行界面的开发过程,Klish框架应运而生。Klish 是一个基于 C 语言开发的交互式命令行接口(CLI)工具,它提供了一种简单而灵活的方式来创建和管理命令行界面。Klish 允许开发者定义命令、选项和参数,以及相应的操作和输出。使用 Klish我们可以自由构建自定义的命令行界面,以满足特定的需求。
二、Klish框架的特点:
Klish框架是一个开源软件工具,旨在帮助开发者简化命令行界面应用程序的开发过程。它提供了一套强大的工具和库,使得开发者能够轻松构建和定制CLI应用程序。Klish框架具有以下特点:
1、命令解析和补全:Klish框架提供了强大的命令解析功能,能够解析用户输入的命令并提取关键信息。同时,它还支持命令补全,帮助用户快速输入命令,提高操作效率。
2、上下文切换:Klish框架支持上下文切换,允许用户在不同的命令环境中进行操作。这使得用户能够根据当前需要切换到不同的模式或功能,提供更加灵活的命令行交互体验。
3、自定义命令和参数:Klish框架允许开发者根据应用程序的需求定义自定义命令和参数。这使得开发者能够根据具体场景和业务逻辑,创建符合自己需求的命令行界面。
4、扩展性和灵活性:Klish框架提供了丰富的扩展性和灵活性,使得开发者能够根据自己的需求进行定制。它支持插件机制,可以通过添加插件来扩展框架的功能和特性,满足不同项目的需求。
三、Klish框架的使用:
1、安装Klish框架:首先,需要从Klish源码库中下载并安装
2、运行autogen.sh生成configure文件
klish# ls
autogen.sh
klish# ./autogen.sh
Makefile.am: installing 'aux_scripts/depcomp'
autoreconf: Leaving directory `.'
klish# ls
autogen.sh configure
3、运行configure生成Makefile文件
klish# ./configure
config.status: executing libtool commands
config.status: executing depfiles commands
klish# ls
autogen.sh configure Makefile
4、make编译
klish# make
make[1]: Leaving directory '/workspace/klish'
5、make install
klish# make install
Libraries have been installed in:
/usr/local/lib
/bin/mkdir -p '/usr/local/bin'
/bin/bash ./libtool --mode=install /usr/bin/install -c bin/clish bin/konfd bin/konf bin/sigexec '/usr/local/bin'
6、运行Klish框架
klish-2.2# CLISH_PATH=xml-examples/klish/etc/clish-enable bin/clish
#
! Comments
configure Enter configuration mode
copy Copy from one file to another
disable Turn off privileged commands
exit Exit from the CLI
ping Send messages to network hosts
reboot Halt and perform a cold restart
show Show running system information
traceroute Print the route packets trace to network host
# configure terminal
(config)#
! Comments
do To run exec commands in config mode
exit Exit from configure mode
hostname Set system's network name
interface Select an interface to configure
ip Global IP configuration subcommands
no Negate a command or set its defaults
(config)# ip route 172.0.11.2/24 172.0.11.1
/tmp/klish.fifo.9205.MfgOB7: 6: /tmp/klish.fifo.9205.MfgOB7: ip: not found
以上我们就将Klish框架安装并运行在设备上,如上最后一行所显示,如果某条命令还未开发会出现not found的提示,由于Klish是执行命令行的一个视图,所以命令的内容需要用户自主开发,命令的配置文件为xml格式,这个可以参照自研交换机编译工程中mgmt-framework和mgmt-common两个组件进行Klish命令行前端界面/形式的开发以及后端调用逻辑的编写。详见:TeleNOS命令行框架开发流程实例。
三、Klish框架的编译:
以上介绍了Klish框架的安装和操作流程,在自研交换机的开发中,通常使用思科风格(CISCO-like CLI)的命令框架,因此Klish框架是个不错的选择,因此需要将Klish框架导入到自研的编译工程中,即上述流程嵌入到管理框架中进行整体的项目编译。
1、将Klish源码打包:同Klish源码的下载流程,我们需要将Klish的源码打成tgz包并移到管理框架的CLI/klish目录下,这里本自研交换机所用的是版本是Klish-2.1.4,也可以从下载库中直接下载对应版本的安装包。
2、编写源码补丁
为了改变源码的结构,如果用户需要对Klish框架进行自定义修改,则需要在源码的基础上打补丁,用户可在CLI/klish/patches下进行补丁操作,该文件夹的结构与源码结构一致,需要对哪个文件进行修改只需将对应的diff文件(diff几种形式均可读取,可以直接在git中生成)导入下面即可,需注意的是该补丁每个源文件只对应一个diff,如果以后需要再次修改则需要将之前的修改也一并合入生成diff文件。
3、编写Makefile文件
SHELL = /bin/bash
.ONESHELL:
.SHELLFLAGS += -e
KLISH_VERSION = 2.1.4
PYTHONVER=3.7
KLISH_SRC = $(SONIC_CLI_ROOT)/klish-$(KLISH_VERSION)
ifeq ($(CROSS_BUILD_ENVIRON),y)
CROSS_CONFIGURE_OPTS = --host=$(CROSS_HOST_TYPE)
LIB_PATH = $(CROSS_PKGS_LIB_PATH)
else
LIB_PATH = /usr/lib/x86_64-linux-gnu
endif
SRC_REPLACEMENTS:=$(shell find patches -type f)
all : $(SRC_REPLACEMENTS)
tar xzvf klish-$(KLISH_VERSION).tgz -C $(SONIC_CLI_ROOT)
./patches/scripts/patchmake.sh -p VER=${KLISH_VERSION} TSP=${SONIC_CLI_ROOT} DSP=${CURDIR}/patches TWP=${SONIC_CLI_ROOT}
cd ${KLISH_SRC} && sh autogen.sh && ./configure --with-libxml2=/usr $(CROSS_CONFIGURE_OPTS) --enable-debug=no LIBS='-l:libcurl-gnutls.so.4 -L$(LIB_PATH) -lpython3.7m -Wl,-rpath=$(LIB_PATH) -lcjson' CFLAGS='${CFLAGS} -g -I/usr/include/python3.7m' CPPFLAGS='${CPPFLAGS} -I/usr/include/cjson' && make
mkdir -p $(SONIC_CLI_ROOT)/target/.libs
cp $(CURDIR)/clish_start $(SONIC_CLI_ROOT)/target/.
cp -r ${KLISH_SRC}/bin/.libs/clish ${SONIC_CLI_ROOT}/target/.
cp -r ${KLISH_SRC}/.libs/*.so* ${SONIC_CLI_ROOT}/target/.libs
cp -r ${KLISH_SRC}/.libs/*.a ${SONIC_CLI_ROOT}/target/.libs
@echo "complete klish build"
.PHONY: clean
clean:
rm -rf ${KLISH_SRC}
如以上代码所示,在Klish下我们定义了源路径,以及解包、打补丁、安装Klish操作,这样我们在编译管理框架时Klish命令行就会自动安装上,其余操作只需在管理框架中自定义即可。
四、总结
总体而言,Klish是一个强大而灵活的工具,可用于构建各种命令行界面,并提供了丰富的功能和配置选项。无论是用于开发自定义的命令行工具还是扩展现有的 CLI,Klish都是一个值得很好的选择。