Для компиляции из исходников нам потребуется изготовленный в предыдущем материале 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. Очень хотелось бы видеть полноценный веб-интерфейс в будущих релизах.
Архив уже скомпилированными программами
ссылка на оригинал статьи http://habrahabr.ru/post/212679/
Добавить комментарий