Последнее обновление:
November 7, 2019

Есть мысль... Жми, напиши!
Что имеем: Постов : 166 Авторов: 1 Категорий: 27

Bareos 18.2, компиляция из исходников

Понадоиблось тут Bareos под ARM платформу скомпилировать, которая стоит на домашнем NAS.

Впринципе, всё просто, за исключением нескольких мелочей.

Для использования bareos-webui необходимо скомпилить вместе с Jansson, а для этого его нужно получить, собрать, установить и показать конфигуратору bareos где он лежит:

sudo apt-get install pkg-config
sudo apt-get install autoconf
sudo apt-get install libtool
sudo apt-get install build-essential
git clone https://github.com/akheron/jansson
cd jansson
autoreconf -i
./configure
make
make install
cd ../

Если используется Debian 8, то поставим нужный cmake и g++ 6:

echo "deb http://ftp.us.debian.org/debian unstable main contrib non-free" >> /etc/apt/sources.list.d/unstable.list
sudo apt-get install g++-6
sudo apt-get install cmake

sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/g++-6 30
sudo update-alternatives --set c++ /usr/bin/g++
update-alternatives --install /usr/bin/cc cc /usr/bin/gcc-6 20
update-alternatives --set cc /usr/bin/gcc-6

c++ --version //-- Вывод должен быть 6.4.0 (не ниже и точно не 7 или 8 - не скомпилится)
cmake --version //-- Вывод должен быть 3.11.2 (не ниже)

Ну а дальше всё просто — качаем исходники Bareos, компилим, собираем всё это в deb пакет, что бы потом не парится с новыми версиями:

git clone https://github.com/bareos/bareos/ -b bareos-18.2
cd bareos/core
dpkg-checkbuilddeps //-- установите все зависимости из вывода

cp -a platforms/packaging/bareos.changes debian/changelog
VERSION=$(sed -n -r 's/#define VERSION "(.*)"/\1/p'  src/include/version.h)
dch -v $VERSION "Switch version number"
fakeroot debian/rules binary

Если будет ошибка «dpkg-shlibdeps: error: no dependency information found for …«,
то в файле «core/debian/rules» ищем строку «dh_shlibdeps» и дополняем опцией «—dpkg-shlibdeps-params=—ignore-missing-info»

Не забудьте установить новый пароль для root в mysql!

Устанавливаем теперь созданные пакеты:

cd ../

//-- Всё, что нужно для директора (bareos-dir):
apt-get install dbconfig-common
dpkg -i bareos-database-common_18.2.3_armel.deb
dpkg -i bareos-database-mysql_18.2.3_armel.deb
dpkg -i bareos-database-tools_18.2.3_armel.deb
dpkg -i bareos-director_18.2.3_armel.deb
dpkg -i bareos-bconsole_18.2.3_armel.deb

//-- Хранилище (bareos-sd):
dpkg -i bareos-storage_18.2.3_armel.deb
//-- Клиент (bareos-fd)
dpkg -i bareos-filedaemon_18.2.3_armel.deb
dpkg -i bareos-client_18.2.3_armel.deb

Запускаем:

sudo service bareos-sd start
sudo service bareos-fd start
sudo service bareos-dir start

Если будет ошибка «/sbin/bareos-dir: symbol lookup error: /sbin/bareos-dir: undefined symbol: _Z16DbSetBackendDirsP5alist»
то тогда нужно чутка изменить ссылки, что бы bareoscats.so.18 указывала на backends/bareoscatsmysql.so  — пять часов на выяснение причин потратил.

Теперь поставим «Bareos WEBUI».
Ставим необходимые для сборки пакеты и аналогично собираем в deb пакет:

wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ jessie main" > /etc/apt/sources.list.d/php.list
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates
sudo apt-get install autotools-dev apache2-dev apache2-prefork-dev
sudo apt-get install php7.1-cli php7.1-curl php7.1-fpm php7.1-gd php7.1-intl php7.1-json php7.1-mbstring php7.1-mcrypt php7.1-pdo-mysql php7.1-xml php7.1-zip
sudo apt-get install libapache2-mod-php7
service apache2 restart
cd webui
dpkg-checkbuilddeps
cp -a packaging/obs/bareos-webui.changes debian/changelog
fakeroot debian/rules binary

Устанавливаем созданный пакет:

cd ../
dpkg -i bareos-webui_15.2.1_all.deb

Ну и можно зайти, в браузере набираем:

http://127.0.0.1/bareos-webui

По настройке будет отдельный пост.

Вот и всё =)

Views :

171

Android MySql (QMysql) драйвер для Qt5.6 на Windows и Linux компиляция

В общем понадобилось портировать одну прогу под Андроид arm7, но она плотненько работает с базой данных, а так как я человек впринципе ленивый, то обёртку для REST API сервера было лень писать, решился на компилирование MySQL плагина, но если бы я знал тогда, что это займёт у меня 20 часов…
красноглазик

 

В общем вот вам готовый рецепт из 12 шагов для компиляции на Ubuntu и на Windows
То, что помечено windows16 -выполнять только на винде.
Установим инструменты:
1. Качаем и устанавливаем CMake https://cmake.org/download/ у меня 3.5.2
2. Разумеется Android NDK у вас уже должен быть установлен, но вдруг: https://developer.android.com/tools/sdk/ndk/index.html
windows163. Качаем и ставим MSYS https://sourceforge.net/projects/mingw/files/latest/download?source=files (отмечаем всё, что можно)
4. При установке Qt нужно было поставить и исходники (папка qt/5.6/src/qtbase), если нет её, то качаем и ставим
windows165. Открываем консольку MSYS (c:\mingw\msys\1.0\msys.bat), в дальнейшем все действия будут вестись в ней и для удобства выкачивания установим wget:

/c/mingw/bin/mingw-get install msys-wget-bin

1. Создадим отдельную директорию, где будем развлекаться и перейдём в неё:

mkdir /d/Projects/AndroidMySQL
 cd /d/Projects/AndroidMySQL

2. Выкачиваем саму MariaDB, а именно коннектор

wget https://downloads.mariadb.org/interstitial/connector-c-3.0.0/mariadb-connector-c-3.0.0-alpha-src.tar.gz
 tar -xzvf mariadb-connector-c-3.0.0-alpha-src.tar.gz

3. Выкачиваем и распаковываем исходники iconv http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
 tar -xvzf libiconv-1.14.tar.gz

4. Выкачиваем и распаковываем OpenSSL

wget -c http://www.openssl.org/source/openssl-1.0.1h.tar.gz --no-check-certificate
 tar -xvzf openssl-1.0.1h.tar.gz

5. Задаём общие глобальные переменные
windows16

 export PATH="$PATH:/c/mingw/bin:/c/Program Files (x86)/CMake/bin"
 export ANDROID_NDK_ROOT=/d/Android/android-ndk-r10e
 export SR="$ANDROID_NDK_ROOT"/platforms/android-19/arch-arm/usr # Укажите платформу, под которую собираете ваши проекты (Лучше, 19)
 export BR="$ANDROID_NDK_ROOT"/toolchains/arm-linux-androideabi-4.9/prebuilt/windows-x86_64/bin/arm-linux-androideabi-
 export CPP="$BR"cpp
 export AR="$BR"ar
 export STRIP="$BR"strip
 export RANLIB="$BR"ranlib
 export LINKER="$BR"ld
 export OBJDUMP="$BR"objdump
 export CC="$BR"gcc
 export CFLAGS="--sysroot=$SR"
 export CPPFLAGS="$CFLAGS"
 export C_INCLUDE_PATH=$SR/include
 export ANDROID_DEV=$SR/usr
 export MAKEDEPPROG="$CC -M"

6. Собираем сначала iconv

cd libiconv-1.14
 ./configure --host=arm --prefix=$SR/usr --with-sysroot=$SR
 make
 make install

7. Собираем OpenSSL

cd ../openssl-1.0.1h
 CC="$CC -march=armv7-a -mfloat-abi=softfp"
 ./Configure android-armv7 --prefix=$SR/usr no-asm
 make
 make install
 make install_sw
Если заматериться error: undefined reference to ‘__ctype_get_mb_cur_max’,
то в файл libcharset/lib/localcharset.c после дефайнов добавляем

size_t __ctype_get_mb_cur_max(void){
 return 1;
 }

8. Нус, начинаем подготовку к сборке MariaDB

В файл include/my_global.h необходимо добавить определение типа ushort

#ifndef ushort
 #define ushort uint16
 #endif

9. Подготавливаем сборку

cd ../mariadb-connector-c-3.0.0-alpha-src
mkdir build
 cd build
cmake -G "Unix Makefiles"
 -DCMAKE_BUILD_TYPE=Release \
 -DCMAKE_AR="$BR"ar.exe \
 -DCMAKE_C_COMPILER="$BR"gcc.exe \
 -DCMAKE_C_FLAGS=--sysroot=$SR \
 -DCMAKE_LINKER="$BR"ld.exe \
 -DCMAKE_RANLIB="$BR"ranlib.exe \
 -DCMAKE_STRIP="$BR"strip.exe \
 -DCMAKE_SYSTEM_NAME=Linux \
 -DICONV_INCLUDE_DIR="$SR/usr/include" \
 -DICONV_LIBRARIES="$SR/usr/lib/libiconv.a" \
 -DOPENSSL_ROOT_DIR="$SR/usr/lib/" \
 ../

10. Зажмуриваемся и собираем

make
windows16 ага, фиг то там, failed to create symbolic link ‘libmysqlclient.a’: No error
внезапно… тут, похоже, баг самого CMake, поэтому в файле
\AndroidMySQL\mariadb-connector-c-3.0.0-alpha-src\build\libmariadb\CMakeFiles\SYM_libmysqlclient.a.dir\build.make
находим строки (их по две) c -E create_symlink libmariadbclient.a libmysqlclient.a, удаляем её полностью
а так же -E create_symlink libmariadb.so libmysqlclient_r.so аналогично
и вручную копируем и продолжаем сборку

cp libmariadb/libmariadbclient.a libmariadb/libmysqlclient.a
 cp libmariadb/libmariadbclient.a libmariadb/libmysqlclient_r.a
 cp libmariadb/libmariadb.so libmariadb/libmysqlclient.so
 cp libmariadb/libmariadb.so libmariadb/libmysqlclient_r.so
 make
и ещё раз фиг error: unknown type name ‘pthread_mutex_t’
в файле ../unittest/libmariadb/thread.c
находим pthread_t threads[THREAD_NUM]; заменяем на void * threads[THREAD_NUM];
и там же заменяем pthread_mutex_t LOCK_test; на void * LOCK_test;
и опять
make

На этот раз должно всё ок пройти, ну и устанавливаем и копируем к нашему ndk

make install
mkdir "$SR/usr/lib/mariadb"
 mkdir "$SR/usr/include/mariadb/"
 cp libmariadb/*.{a,so} "$SR/usr/lib/mariadb/"
 cp ../include/* "$SR/usr/include/mariadb/"

11. Собираем плагин QMySQL, открываем обычную консольку пути только на свои замените

cd /d/Qt/5.6/Src/qtbase/src/plugins/sqldrivers/mysql/
 /d/Qt/5.6/android_armv7/bin/qmake.exe \
 "INCLUDEPATH+=$SR/usr/include/mariadb" \
 "LIBS+=-L$SR/usr/lib/mariadb -lmariadbclient -lssl -lcrypto -liconv" \
 -o Makefile mysql.pro
make
 make install

12. Разрабатываем тестовый проект
Так как зависит от libmariadb.so, то его необходимо таскать с проектом, для этого в *.pro файле проекта добавить

contains(ANDROID_TARGET_ARCH,armeabi-v7a) {
 ANDROID_EXTRA_LIBS = \
 d:/Projects/AndroidMySQL/mariadb-connector-c-3.0.0-alpha-src/build/libmariadb/libmariadb.so
 }

Пересобираем проект, запускаем, и хуй то там =)
QMYSQL driver not loaded
яоминь
Посмотрим зависимости libqsqlmysql.so, которая в каталоге /home/pavelk/Qt/5.6/android_armv7/plugins/sqldrivers

ldd libqsqlmysql.so

и опять облом, нужна ldd для arm, ладно и с этим разберёмся, например так, тынц.

ldd-avr libqsqlmysql.so

Дело в том, что в зависимостях у libmysql.so есть libmariadb.so.3, а не libmariadb.so
почуяли разницу? =))

В общем, что бы побыстроляну пофиксить
в файле libmariadb/CMakeLists.txt
находим

SOVERSION ${CPACK_PACKAGE_VERSION_MAJOR})

и заменяем на

SOVERSION "so")

ну а дальше удалить полностью build и заново, начиная с 9 шага
troll

!пересобираем! проект, не забыть исправить в pro файле на libmariadb.so.so запускаем и радуемся =)

Итого: сэкономлено куча времени и нервов. Хоть спасибо скажите =))

Views :

1308

Компиляция OpenCV 4.1.0 в Windows для Qt 5.10

How-to по компиляции.

Проверено с OpenCV 4.1.0 и Qt 5.10 (только пути на свои замените).

Для начала, нам понадобиться:

  • OpenCV
  • CMake (Должен быть 32х битным, да же если система 64!)

Для удобства, основной путь у меня такой: E:\Projects\OpenCV  и в дальнейшем я отталкиваюсь именно от этой папки (В неё же и ставите OpenCV после скачивания).

Открываем консольку.

Должно скомпилироваться без проблем.

cd E:\Projects\OpenCV\opencv\build
set PATH=D:\Qt\5.10\mingw53_32\bin\;%PATH%
set PATH=D:\Qt\Tools\mingw530_32\bin\;%PATH%
cmake ../sources -G "MinGW Makefiles"  -DWITH_QT=ON -DWITH_QT_OPENGL=ON -DBUILD_EXAMLES=ON -DQT_QTCORE_LIBRARY_DEBUG="Qt5Cored.dll" -DQT_QTCORE_LIBRARY_RELEASE="Qt5Core.dll" -DQT_QMAKE_EXECUTABLE="qmake.exe" -DCMAKE_BUILD_TYPE=Release
mingw32-make -j4
mingw32-make install
Если нужны ещё и nonfree модули (например для SURF), то:
«git clone https://github.com/opencv/opencv_contrib ../opencv_contrib»
и к cmake добавить параметр: «-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules» и «-DOPENCV_ENABLE_NONFREE:BOOL=ON»
Если какой-то из модулей начнёт ебать мозг, то его можно отключить дополнительным параметром к cmake: «-DBUILD_opencv_modulename=OFF»
Мне пришлось отключить:
-DWITH_OPENCL_D3D11_NV=OFF
Так как мне он не нужен вовсе и были какие-то проблемы (заголовочников не было, скорее всего).
j4 — количество ядер в проце, чтобы быстрее компилилось.
После изменения параметров cmake необходимо из директории удалить файл CMakeCache.txt
MinGW необходимо использовать тот, который или идёт с Qt или тем, которым эти исходники уже компилировали!
Соответственно нужно заменить все пути на свои. И в выводе CMake убедитесь, что используется от Qt.
UPDT: OpenCV 3.0
Если во время сборки mingw32-make ругнётся на отсутствие -lRunTmChk  то cmake нужно перезапустить с флагом «-DWITH_IPP=OFF»
Если будет ругаться » error: base class ‘s
truct IUnknown’ has accessible non-virtual destructor [-Werror=non-virtual-dtor]»
то идём в папку с opencv d:\projects\opencv\sources\cmake\ открываем OpenCVCompilerOptions.cmake
ищем строку add_extra_compiler_option(-Werror=non-virtual-dtor) и ставим перед ней «#»
перезапускаем cmake.
Если будет ругаться «windres.exe: unknown option —W» то выполните заново cmake с дополнительным параметром «-DENABLE_PRECOMPILED_HEADERS=OFF»
Если будут проблемы на шаге videoio, например «sprintf_instead_use_StringCbPrintfA_or_StringCchPrintfA» и похожие, то в файле «\sources\modules\videoio\src\cap_dshow.hpp» добавьте в самом начале «#define NO_DSHOW_STRSAFE«

На этом установка закончена =)

Теперь попробуем тестовый проектик сделать.

Создаём новый консольный проект.

В  .pro файл дописываем:

INCLUDEPATH += E:/Projects/OpenCV/opencv/build/install/include/
LIBS +=-L"E:/Projects/OpenCV/opencv/build/install/x86/mingw/lib/"
LIBS +=  \
-lopencv_core410 \
-lopencv_highgui410 \
-lopencv_imgproc410 \
-lopencv_photo410 \
-lopencv_imgcodecs410

В main.cpp пишем:

#include <iostream>;
#include <opencv2/opencv.hpp>;
#include <opencv2/highgui.hpp>
using namespace std;
using namespace cv;
int main() {
   namedWindow("My Image");
   Mat image = imread("K:/Projects/OpenCV HelloWorld/img.jpg");

   imshow("My Image", image);
   waitKey(5000);

    return 0;
}
Чуть не забыл, в системную переменную PATH добавьте путь: «E:/Projects/OpenCV/opencv/build/install/x86/mingw/bin»,
E:/Projects/OpenCV/opencv/build/install/x86/mingw/bin;%path%»
иначе проект не соберётся и ребутнуть комп, или в Qt в настройках проекта — переменных окружения добавить.
Если переходите с предыдущей версии OpenCV, то в 4.0 много изменений (ну, к примеру, наименование констант CV_BGR2GRAY теперь COLOR_BGR2GRAY), в общем документация тут: https://docs.opencv.org/

Надеюсь, всё прошло удачно =) На этом, пока что, всё.

Views :

16998