Почти случайно наткнулся на интересный "фреймворк" под названием Klish. Расшифровывается это дело так: Kommand Line Interface Shell. Это форк известного в узких кругах проекта clish версии 0.7.3, который в свою очередь расшифровывается как Command Line Shell Framework. Коротко говоря, klish позволяет делать cli (command line interface, она же консоль, он же командный терминал и т.д.) в стиле, в котором оно сделано на известном сетевом оборудовании от Cisco - удобный интерфейс для терминального управления. Конфигурируется фреймворк этот с помощью XML-файлов, т.е все команды для вашего cli терминала вы объявляете в xml файлах. Команды могут обращаться к shell, либо вы можете создавать для команд отдельные функции-обработчики на языке C (потому что движок klish написан на C). Также имеется поддержка скриптов Lua. Короче говоря, прикольная штука, можно делать терминалы для различных embedded систем, можно делать удобные оболочки для серверов - чтобы было удобно в обслуживании и много чего еще.
Официальный сайт проекта: http://libcode.org/projects/klish
А мы займемся любимым занятием - кросс-компиляцией этого проекта. Будем собирать минимальную сборку - только xml-движок и сам klish (без lua и других плюшек). Делаем все в старом стиле - я вам bash-скрипт, вы скачиваете исходники и запускаете эти скрипты и наслаждаетесь сборкой, в данном случае это все очень просто.
Кстати, можете посмотреть различные другие статьи с кросс-компиляцией:
Для кросс-компиляции Klish 2.1.2 нам понадобится следующие исходники (ссылки проверены 22.06.16):
- klish-2.1.2: klish-2.1.2.tar.xz
- libroxml-2.3.0: libroxml-2.3.0.tar.gz
Обязательно нужен "xml-движок", с помощью которого будут парсится xml-файлы с нашими командами. Я выбрал самый простенький и легковесный для примера - libroxml. А вообще klish поддерживает следующие библиотеки: libxml2, libroxml, expat. Выбирайте на свой вкус.
Но если вы еще не поставили кросс-компилятор, то делаем так:
# apt-get install gcc-4.7-arm-linux-gnueabi
# apt-get install gcc-arm-linux-gnueabi
Первым делом компилируем libroxml - легковесная библиотека для работы с форматом XML на языке C.
Создаем файл (назовем его для примера vmake.sh) в корне исходников libroxml со следующим содержанием:
1 2 3 4 5 6 7 8 9 |
#!/bin/bash cross=arm-linux-gnueabi- \ CC="${cross}gcc" AR="${cross}ar" ./configure \ --host=arm-linux-gnueabi \ --prefix=/tmp/libroxml-2.3.0_arm #путь, куда будет складываться результат компиляции make sudo make install |
Даем права на исполнение и запускаем. Если вы просто скопировали скрипт, то в /tmp/libroxml-2.3.0_arm будет 3 каталога: bin, include, lib.
Запоминаем пути до этих директорий и переходим к компиляции самого klish. Также создаем в корне пустой файл, который наполняем нашим bash скриптом:
1 2 3 4 5 6 7 8 9 10 |
#!/bin/bash cross=arm-linux-gnueabi- \ CC="${cross}gcc" AR="${cross}ar" ./configure \ --host=arm-linux-gnueabi \ --prefix=/tmp/klish_arm \ --with-libroxml=/tmp/libroxml-2.3.0_arm #путь до каталога, куда компилировали libroxml make sudo make install |
Запускаем, компилируем. В /tmp/klish_arm такие же 3 каталога с готовым бинарником klish, который успешно наверно запускаем на нашей arm-машинке.
Сам cli запускается с помощью бинарника: bin/clish. Но обязательно надо "заэкспортить" глобальную переменную CLISH_PATH с указанием пути до наших xml-файлов с командами. Например, в каталоге исходников klish есть примеры таких файлов в директории xml-examples:
$ export CLISH_PATH=path_to_klish_src/xml-examples/clish
Ну и вот результат запуска: