CLI框架:klish安装与使用

在通信设备领域,思科的路由器设备可以用CLI进行操作。这里介绍的开源项目klish是思科CLI风格(CISCO-like CLI)的框架。命令配置文件为xml格式。

源码:pkun/klish: The klish is a framework for implementing a CISCO-like CLI on a UNIX systems. It is configurable by XML files. - libcode

环境

Ubuntu 20.04.2 LTS

编译

版本:klish 2.2

//1. 运行autogen.sh生成configure文件
klish# ls
autogen.sh  
klish# ./autogen.sh
Makefile.am: installing 'aux_scripts/depcomp'
autoreconf: Leaving directory `.'

生成configure文件
klish# ls
autogen.sh  
configure  

//2. 运行configure生成Makefile文件
klish# ./configure
config.status: executing libtool commands
config.status: executing depfiles commands

生成makefile文件
klish# ls
autogen.sh 
configure 
Makefile

//3. make编译
klish# make
make[1]: Leaving directory '/workspace/klish'

//4. 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'

遇到过的问题

问题1
缺少宏定义:AC_PROG_LIBTOOL

# ./autogen.sh 
+ mkdir -p m4
+ autoreconf -fvi
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal --force -I m4
configure.ac:417: warning: macro 'AM_LANGINFO_CODESET' not found in library
autoreconf: configure.ac: tracing
autoreconf: configure.ac: creating directory aux_scripts
autoreconf: configure.ac: not using Libtool
autoreconf: running: /usr/bin/autoconf --force
configure.ac:20: error: possibly undefined macro: AC_LIBTOOL_WIN32_DLL
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
configure.ac:21: error: possibly undefined macro: AC_PROG_LIBTOOL
configure.ac:431: error: possibly undefined macro: AM_LANGINFO_CODESET
autoreconf: /usr/bin/autoconf failed with exit status: 1

解决:

网上搜了下这个宏,发现是缺少了依赖库。安装了依赖库后可以继续往下走。

sudo apt-get install libtool

问题2

找不到头文件expat.h

# make
clish/shell/shell_expat.c:40:10: fatal error: expat.h: No such file or directory
 #include <expat.h>
          ^~~~~~~~~
compilation terminated.
Makefile:1798: recipe for target 'clish/shell/libclish_la-shell_expat.lo' failed

解决:

网上查询发现少了依赖库。安装后继续

# apt-get install libexpat1-dev

问题3

缺少XML_ParserCreate

libtool: link: gcc -Wall -g -O2 -o bin/.libs/clish bin/clish.o  ./.libs/libclish.so ./.libs/libkonf.so ./.libs/libtinyrl.so ./.libs/liblub.so -ldl
./.libs/libclish.so: undefined reference to `XML_ParserCreate'
./.libs/libclish.so: undefined reference to `XML_SetCharacterDataHandler'
./.libs/libclish.so: undefined reference to `XML_ParserFree'
./.libs/libclish.so: undefined reference to `XML_SetUserData'
./.libs/libclish.so: undefined reference to `XML_Parse'
./.libs/libclish.so: undefined reference to `XML_SetElementHandler'
collect2: error: ld returned 1 exit status
Makefile:1327: recipe for target 'bin/clish' failed
make[1]: *** [bin/clish] Error 1
make[1]: Leaving directory '/home/klish'
Makefile:717: recipe for target 'all' failed
make: *** [all] Error 2

解决:

网上查询发现缺少库libxml2

# apt-cache search libxml
libxml2 - GNOME XML library
libxml2-dev - Development files for the GNOME XML library

# apt-get update
# apt-get install libxml2-dev

运行

klish-2.2# CLISH_PATH=xml-examples/klish/etc/clish bin/clish

> show
Syntax error: Unknown command

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
posted @ 2022-08-08 20:51  liqinglucky  阅读(1753)  评论(0编辑  收藏  举报