在通信设备领域,思科的路由器设备可以用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

最新文章

  1. C#字符串排序效率
  2. mongoTemplate简单用法(增删改查)
  3. Bluetooth Low Energy 嗅探
  4. UWP滑动后退
  5. 多态、GC、Java数据类型
  6. 使用MVVM框架时,如何处理在页面动态渲染完之后需要发生的事件呢?
  7. Spring中的Autowired注解和Resource注解的区别
  8. Android UI开发第四十一篇——墨迹天气3.0引导界面及动画实现
  9. flatbuffers 使用问题记录
  10. 利用over开窗函数取第一条记录
  11. 自制单片机之九……写给对制做并口ISP下载线有疑惑的朋友
  12. Windows Azure 社区新闻综述(#78 版)
  13. Java常用代码段 - 未完待续
  14. 解决Myeclipse在port占用,导致tomcat无法启动。(Linux)
  15. 【瞎搞搞之】 window_x64微信小程序环境搭建
  16. maven中的profile文件的解析
  17. STL - 容器共性机制研究
  18. SpringCloud Feign的分析
  19. ios中iframe页面出现白屏问题
  20. react 嵌套组件的通信

热门文章

  1. 如何实现通过Leaflet加载dwg格式的CAD图
  2. Linux 下配置 hosts 并设置免密登录
  3. 成功解决:snippet设置的开机自启没有效果
  4. Vue中引入echarts。
  5. 实现etcd服务注册与发现
  6. 1.Django-Rest-Framework入门规范
  7. SQL--Case When.. Then.. end的使用
  8. 禁止eslint对指定代码检测
  9. 2022极端高温!机器学习如何预测森林火灾?⛵ 万物AI
  10. 详解从浏览器地址栏输入URL到页面显示的步骤