В предыдущем моем материале я описывал процесс установки sip-proxy и базовых линукс утилит, в choot окружениие. Заметка вызвала достаточный интерес в хабра-сообществе. По этому я представляю вторую часть материала, в которой опишу процесс компиляции softether VPN-сервера под mips и mipsel архитектуру, для многострадального роутера zte f-660 и iconbit 1003d. Только в этот раз, весь код выложу в виде архива (mipsel и mips), а по тексту расставлю некоторые участки кода, для наглядности. Данный VPN сервер является относительно новым, но своими возможностями успел удивить многих. В частности о нем написано очень много вот тут и тут.
Для компиляции из исходников нам потребуется изготовленный в предыдущем материале cross-toolchain. Если мы попытаемся vpn-сервер скомпилировать «в лоб»:
./configure
make
Install
То мы получим ошибку
По чему так произойдет? Все очень просто: дело в том, что так как проект новый, он не рассчитан на кросскомпиляцию, сценарий установки предполагает, что компиляция производится на той же машине, что и для установки. Для того, что бы скомпилировать проект, нам необходимо внести изменения в make-файл.
После небольшого изучения сгенерированного make-файла. Я понял что проблема заключается в некой утилите hamcorebuilder которая компилируется на ходу, и используется для архивации ресурсов, которые в свою очередь используются уже в самом бинарнике VPN сервера. Естественно так как мы используем кросскомпилятор, она не сможет выполниться на сборочной машине. Для того что бы обойти это ограничение, нам нужно всего лишь скомпилировать ее для x86 архитектуры используя системный компилятор /use/bin/gcc.
Я приведу ключевую разницу между сгенерерированным файлом, и исправленным:
# hamcorebuilder Utility
tmp/hamcorebuilder: src/hamcorebuilder/hamcorebuilder.c $(HEADERS_MAYAQUA) $(HEADERS_CEDAR) $(OBJECTS_MAYAQUA_HOST) $(OBJECTS_CEDAR_HOST)
@mkdir -p tmp/
/usr/bin/gcc $(OPTIONS_COMPILE_HOST) $(OBJECTS_MAYAQUA_HOST) $(OBJECTS_CEDAR_HOST) src/hamcorebuilder/hamcorebuilder.c $(OPTIONS_LINK) -o tmp/hamcorebuilder
Как мы видим ничего сложного все достаточно просто (добавили новые цели с окончанием _host и правила для них)
Еще в одном месте, мы исправили часть отвечающая за инсталляцию
$(INSTALL_BINDIR)vpnserver: bin/vpnserver/hamcore.se2 bin/vpnserver/vpnserver
@mkdir -p $(INSTALL_VPNSERVER_DIR)
cp bin/vpnserver/hamcore.se2 $(INSTALL_VPNSERVER_DIR)hamcore.se2
cp bin/vpnserver/vpnserver $(INSTALL_VPNSERVER_DIR)vpnserver
echo "#!/bin/bash" > $(INSTALL_BINDIR)vpnserver.sh
echo "/bin/vpnserver/vpnserver" '"$$@"' >> $(INSTALL_BINDIR)vpnserver.sh
echo 'exit $$?' >> $(INSTALL_BINDIR)vpnserver.sh
chmod 755 $(INSTALL_BINDIR)vpnserver.sh
.....
С этого момента у нас есть директория, в которой подготовлена корневая файловая система с VPN-сервером пригодная для запуска в chroot-окружении.
Делаем все как предыдущей заметке и проверяем работоспособность
- vpncmd.sh
- выбрать 3 вариант
- check
- vpnserver.sh start
Сервер запущен.
Тут не все гладко, для того, чтобы все это нормально работало, нужно очистить память для этого необходимо “поубивать” лишние процессы, вроде встроенного веб-сервера. Проблема в том что они после «убийства» восстанавливаются. Так что, к сожалению, мне не удалось убедится в полноценной работоспособности сервера. Так как роутер постоянно зависал от нехватки памяти. Для того, чтобы продемонстрировать, что методология все же работает, я выполнил всю компиляцию для немного другого девайса iconbit 1003d. И вот на нем, все совершенно четко заработало. (Кстати почитать как необходимо модифицировалось прошивку, чтобы не мучится с флешками, я рекомендую вот тут)
Скорость “обрезалась”, до 6 мегабит в секунду, что не так страшно по сравнению с потенциальными возможностями, которые дает нам VPN-сервер
Подведем итог: мы изучили как можно исправить готовый make-файл, сделав его пригодным для кроскомпиляции. Также удалось скомпилировать software VPN-server сразу под две разные архитектуры, не применив никаких громоздких патчей, фактически мы поменяли только префикс с mips на mipsel. Vpn-сервер Softether показал свою гибкость с точки зрения выбора целевой платформы. Вообще проект меня впечатлил своей гибкостью. Единственно, непонятно по чему, создатели vpn-сервера сделали GUI под windows. Очень хотелось бы видеть полноценный веб-интерфейс в будущих релизах.
Архив уже скомпилированными программами
Автор: Mopper