{"id":269611,"date":"2015-12-04T10:07:02","date_gmt":"2015-12-04T07:07:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=269611"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=269611","title":{"rendered":"\u041a\u0440\u043e\u0441\u0441-\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f \u0438 \u0441\u0431\u043e\u0440\u043a\u0430 \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u043e\u0434 Synology DSM"},"content":{"rendered":"<p>       \u041d\u0430 \u043d\u043e\u0432\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043d\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0443 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u043d\u0430 NAS \u043e\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439 Synology \u0438 QNAP. \u041f\u0440\u043e\u0434\u0443\u043a\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 C++ \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c C++11, Boost \u0438 Qt5. \u0417\u0430 \u043d\u0435\u0438\u043c\u0435\u043d\u0438\u0435\u043c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0435\u0431 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430<a href=\"http:\/\/www.webtoolkit.eu\/wt\/ru\/\">Wt<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 CMake. \u041f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u0431\u043e\u0440\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0437\u043e\u043e\u043f\u0430\u0440\u043a\u0430 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430.<br \/>  <a name=\"habracut\"><\/a><\/p>\n<p>  \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e <a href=\"http:\/\/global.download.synology.com\/download\/Document\/DeveloperGuide\/DSM_Developer_Guide.pdf\">DSM Developer Guide<\/a>,<br \/>  \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0432 \u043e\u0431\u0449\u0438\u0445 \u0447\u0435\u0440\u0442\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 toolchain(\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u044f open source \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432, \u043f\u0430\u043a\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435). \u0422.\u043a. \u0431\u044b\u043b \u043a\u0443\u043f\u043b\u0435\u043d \u0431\u044e\u0434\u0436\u0435\u0442\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 <a href=\"http:\/\/www.synology.su\/products\/96\">DS 114<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c Marvell Armada 370 \u0438 \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0438 DSM 5.2, \u0442\u043e \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u043f\u043e\u0434 arm.<\/p>\n<p>  \u0414\u043b\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <b>package toolkit<\/b>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430 <a href=\"http:\/\/sourceforge.net\/projects\/dsgpl\/\">Synology Open Source Project.<\/a> \u042d\u0442\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0434\u043e\u0431\u043d\u0435\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0446\u0435\u043d\u043e\u0432\u044b\u0445 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\u0445 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u043c\u0438, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043d\u0430\u0431\u043e\u0440\u043e\u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432.<br \/>  \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 <a href=\"http:\/\/forum.synology.com\/wiki\/index.php\/What_kind_of_CPU_does_my_NAS_have\">What kind of CPU does my NAS have<\/a>.<\/p>\n<p>  \u0440\u0430\u0441\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c package toolkit<br \/>  <code> $ mkdir -p ~\/synology\/toolkit $ tar xvf pkgscripts.tgz -C ~\/synology\/toolkit <\/code><\/p>\n<p>  \u0432\u044b\u043a\u0430\u0447\u0438\u0432\u0430\u0435\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435 \u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b<br \/>  <code> $ cd ~\/synology\/toolkit\/pkgscripts\/ $ sudo .\/EnvDeploy -v 5.2 -p armada370 <\/code><\/p>\n<h4><b>Boost<\/b><\/h4>\n<p>  Boost \u043d\u0430 \u0443\u0434\u0438\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u0412 \u0444\u0430\u0439 <b>~\/user-config.jam<\/b> \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c<br \/>  <code> using gcc : arm : arm-marvell-linux-gnueabi-g++ ; <\/code><br \/>  \u0438 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c:  <\/p>\n<pre><code class=\"bash\">$ .\/bootstrap.sh --prefix=\/home\/dmitry\/synology\/toolkit\/build_env\/ds.armada370-5.2\/usr\/local\/arm-marvell-linux-gnueabi\/arm-marvell-linux-gnueabi\/libc $ export PATH=~\/synology\/toolkit\/build_env\/ds.armada370-5.2\/usr\/local\/arm-marvell-linux-gnueabi\/bin:$PATH $ .\/b2 toolset=gcc-arm link=static threading=multi install <\/code><\/pre>\n<p>  <\/p>\n<h4><b>Webtoolkit<\/b><\/h4>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 CMake \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e <a href=\"http:\/\/www.vtk.org\/Wiki\/CMake_Cross_Compiling\">toolchain-\u0444\u0430\u0439\u043b<\/a> <b>toolchain-arm-marvell.cmake<\/b>  <\/p>\n<pre><code class=\"cmake\">SET(CMAKE_SYSTEM_NAME Linux) SET(CMAKE_SYSTEM_VERSION 1)  SET(CMAKE_C_COMPILER   \/home\/dmitry\/synology\/toolkit\/build_env\/ds.armada370-5.2\/usr\/local\/arm-marvell-linux-gnueabi\/bin\/arm-marvell-linux-gnueabi-gcc) SET(CMAKE_CXX_COMPILER \/home\/dmitry\/synology\/toolkit\/build_env\/ds.armada370-5.2\/usr\/local\/arm-marvell-linux-gnueabi\/bin\/arm-marvell-linux-gnueabi-g++) SET(CMAKE_LINKER \/home\/dmitry\/synology\/toolkit\/build_env\/ds.armada370-5.2\/usr\/local\/arm-marvell-linux-gnueabi\/bin\/arm-marvell-linux-gnueabi-ld.gold)  SET(CMAKE_FIND_ROOT_PATH \/home\/dmitry\/synology\/toolkit\/build_env\/ds.armada370-5.2\/usr\/local\/arm-marvell-linux-gnueabi\/arm-marvell-linux-gnueabi\/libc)  SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) <\/code><\/pre>\n<p>  \u0414\u0430\u043b\u044c\u0448\u0435:  <\/p>\n<pre><code class=\"bash\">$ tar xvf wt-3.3.4.tar.gz $ cd wt-3.3.4 $ mkdir build $ cd build $ cmake -DCMAKE_TOOLCHAIN_FILE=~\/toolchain-arm-marvell.cmake \\ \t\t-DCMAKE_BUILD_TYPE=Release \\ \t\t-DSHARED_LIBS=OFF \\ \t\t-DCMAKE_INSTALL_PREFIX=\/home\/dmitry\/synology\/toolkit\/build_env\/ds.armada370-5.2\/usr\/local\/arm-marvell-linux-gnueabi\/arm-marvell-linux-gnueabi\/libc \\ \t\t.. $ make  $ make install <\/code><\/pre>\n<p>  \u0421\u043e\u0431\u0438\u0440\u0430\u044e \u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0443 \u043f\u0430\u043a\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c:  <\/p>\n<pre><code class=\"bash\">$ cd examples\/composer $ make <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u044e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b:  <\/p>\n<pre><code class=\"bash\">$ file Home.wt Home.wt: ELF 32-bit LSB  executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU\/Linux 2.6.16, BuildID[sha1]=228a30c3dab0572993e41468aa0862fc93e11487, not stripped <\/code><\/pre>\n<p>  <\/p>\n<h4><b>Qt5<\/b><\/h4>\n<p>  \u0412 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u043e\u0432 Qt \u0438\u0434\u0435\u043c \u0432 <b>qtbase\/mkspecs\/devices<\/b>.<br \/>  \u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043a\u0430\u0442\u0430\u043b\u043e\u0433 armada370, \u0441 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u044b\u043c<br \/>  <b>qmake.conf<\/b>  <\/p>\n<pre><code class=\"bash\">include(..\/common\/linux_device_pre.conf)  QMAKE_INCDIR         += $$[QT_SYSROOT]\/usr\/include   QMAKE_LIBDIR          += $$[QT_SYSROOT]\/lib    QMAKE_CC                = $${CROSS_COMPILE}gcc QMAKE_CXX              = $${CROSS_COMPILE}g++ QMAKE_LINK             = $${CROSS_COMPILE}g++ QMAKE_LINK_SHLIB = $${CROSS_COMPILE}g++  QMAKE_AR                = $${CROSS_COMPILE}ar cqs QMAKE_OBJCOPY    = $${CROSS_COMPILE}objcopy QMAKE_NM               = $${CROSS_COMPILE}nm -P QMAKE_STRIP          = $${CROSS_COMPILE}strip  QMAKE_CFLAGS      += -march=armv7-a -mfpu=vfpv3-d16  QMAKE_CXXFLAGS += $$QMAKE_CFLAGS    DISTRO_OPTS += hard-float  QT_QPA_DEFAULT_PLATFORM = eglfs  include(..\/common\/linux_arm_device_post.conf) load(qt_config) <\/code><\/pre>\n<p>  <b>-mfpu=vfpv3-d16<\/b> \u2014 \u044d\u0442\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f <a href=\"https:\/\/gcc.gnu.org\/onlinedocs\/gcc\/ARM-Options.html\">fpu<\/a>, \u0430 <b>DISTRO_OPTS<\/b> \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 hard-float\/soft-float.<br \/>  <b>qplatformdefs.h<\/b> \u0432\u0437\u044f\u043b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u0434\u0440\u0443\u0433\u0438\u0445 ARM.<br \/>  \u041f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 <b>configure<\/b> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c:  <\/p>\n<ul>\n<li>-device armada370<\/li>\n<li>-device-option CROSS_COMPILE=arm-marvell-linux-gnueabi-<\/li>\n<li>-sysroot &#8230;\/arm-marvell-linux-gnueabi\/arm-marvell-linux-gnueabi\/libc<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0421\u043e\u0431\u0438\u0440\u0430\u043b \u0432 chroot&#39;\u0435<\/b><\/p>\n<div class=\"spoiler_text\"><b>conf.sh:<\/b>  <\/p>\n<pre><code class=\"bash\">#!\/bin\/bash  CFG='' CFG+=' -opensource'           CFG+=' -confirm-license'      CFG+=' -v'                    CFG+=' -static'               CFG+=' -device armada370' CFG+=' -make libs' CFG+=' -device-option CROSS_COMPILE=\/usr\/local\/arm-marvell-linux-gnueabi\/bin\/arm-marvell-linux-gnueabi- '  CFG+=' -sysroot \/usr\/local\/arm-marvell-linux-gnueabi\/arm-marvell-linux-gnueabi\/libc' CFG+=' -release'              CFG+=' -nomake tools'         CFG+=' -nomake examples'      CFG+=' -no-compile-examples'  CFG+=' -no-dbus' CFG+=' -no-gui' CFG+=' -no-widgets' CFG+=' -qt-sql-sqlite'  CFG+=' -D QT_NO_GRAPHICSVIEW' CFG+=' -D QT_NO_GRAPHICSEFFECT' CFG+=' -D QT_NO_STYLESHEET' CFG+=' -D QT_NO_STYLE_CDE' CFG+=' -D QT_NO_STYLE_CLEANLOOKS' CFG+=' -D QT_NO_STYLE_MOTIF' CFG+=' -D QT_NO_STYLE_PLASTIQUE' CFG+=' -no-qml-debug'   CFG+=' -no-alsa' CFG+=' -no-cups' CFG+=' -no-dbus' CFG+=' -no-directfb' CFG+=' -no-evdev' CFG+=' -no-gtkstyle' CFG+=' -no-kms' CFG+=' -no-libudev' CFG+=' -no-linuxfb' CFG+=' -no-mtdev' CFG+=' -no-nis' CFG+=' -no-pulseaudio' CFG+=' -no-sm' CFG+=' -no-xcb' CFG+=' -no-xcb-xlib' CFG+=' -no-xinerama' CFG+=' -no-xinput2' CFG+=' -no-xkb' CFG+=' -no-xrender' CFG+=' -no-icu' CFG+=' -no-use-gold-linker' CFG+=' -no-eglfs' CFG+=' -no-cups' CFG+=' -no-fontconfig' CFG+=' -no-sse2' CFG+=' -no-sse3' CFG+=' -no-sse4.1' CFG+=' -no-avx' CFG+=' -no-opengl'  cd qtbase .\/configure $CFG &quot;$@&quot; <\/code><\/pre>\n<pre><code class=\"bash\">$ sudo chroot ~\/synology\/toolkit\/build_env\/ds.armada370-5.2\/ $ cd \/root\/qt-everywhere-opensource-src-5.5.0\/ $ .\/conf.sh $ cd qtbase $ make $ make install <\/code><\/pre>\n<p>  <\/div>\n<\/div>\n<h4><b>\u041f\u0430\u043a\u0435\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435<\/b><\/h4>\n<p>  \u041f\u0430\u043a\u0435\u0442 \u0438\u043c\u0435\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 spk, \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0444\u0430\u0439\u043b\u043e\u0432\u044b\u0439 \u0430\u0440\u0445\u0438\u0432. \u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u0438\u043c\u0435\u0435\u0442 \u0432\u0438\u0434:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/726\/530\/e51\/726530e51c4e4d46a4ab17515627296c.png\"\/><br \/>  <b>INFO<\/b> \u2014 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u0441 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u043f\u0430\u043a\u0435\u0442\u0430:<br \/>  <b>scripts<\/b> \u2014 \u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u044d\u0442\u0430\u043f\u0430\u0445 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438\/\u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043a\u0435\u0442\u0430, \u0438 \u0441\u043a\u0440\u0438\u043f\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u0434\u0435\u043c\u043e\u043d\u0430;<br \/>  <b>package.tgz<\/b> \u2014 \u0441\u0436\u0430\u0442\u044b\u0439 \u0430\u0440\u0445\u0438\u0432 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0435 \u0444\u0430\u0439\u043b\u044b, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0438 \u0442. \u0434.<\/p>\n<p>  \u0421\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 <a href=\"https:\/\/drive.google.com\/open?id=0B3Ieu_hyzeb1YXZ2eGRTaVFQVlk\">composer.skp<\/a> \u0438\u043c\u0435\u0435\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443:<br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/ccf\/6c9\/590\/ccf6c959077e4738858385920a914fea.png\"\/><br \/>  <b>composer.wt<\/b>, <b>composer.xml<\/b>,<b> composer.css<\/b> \u0438 <b>paperclip.png<\/b> \u0432\u0437\u044f\u0442\u044b \u0438\u0437 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 Wt \u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u043d\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442.<\/p>\n<h5><b>INFO<\/b><\/h5>\n<p>  <\/p>\n<pre><code class=\"cpp\">package=&quot;composer&quot; displayname=&quot;Mail composer&quot; version=&quot;1.0.0&quot;  arch=&quot;armada370&quot; description=&quot;This example implements a GMail-like mail composer and shows among other things how to upload files asynchronously, showing a cross-browser upload progress bar and with support for multiple files.&quot; maintainer=&quot;Wt&quot; dsmuidir=ui <\/code><\/pre>\n<p>  <b>dsmuidir<\/b> \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430\u044f \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u0441\u044b\u043b\u043a\u0438 \u0441 <b>\/volumeX\/@appstore\/[packge name]\/[dsmuidir]<\/b> \u043d\u0430 <b>\/usr\/syno\/synoman\/webman\/3rdparty\/[package name]<\/b>.<b> \/volumeX\/@appstore\/[packge name]<\/b>, \u0433\u0434\u0435 X=1,2..N \u2014 \u043f\u0443\u0442\u044c \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. <b>\/usr\/syno\/synoman\/webman\/3rdparty\/[package name]<\/b> \u043f\u0443\u0442\u044c \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0432 UI DSM.<\/p>\n<h5><b>config<\/b><\/h5>\n<p>  \u0414\u043b\u044f \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0432 UI DSM \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u0430\u0442\u0430\u043b\u043e\u0433 <b>\/usr\/syno\/synoman\/webman\/3rdparty\/[package name]<\/b> \u0438 \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0442\u0443\u0434\u0430 \u0444\u0430\u0439\u043b config \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e\u0433\u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f:  <\/p>\n<pre><code class=\"javascript\">{ \t&quot;.url&quot;: { \t\t&quot;eu.webtoolkit.composer&quot;: { \t\t\t&quot;type&quot;: &quot;url&quot;, \t\t\t&quot;allUsers&quot;: true, \t\t\t&quot;title&quot;: &quot;Mail composer&quot;, \t\t\t&quot;desc&quot;:&quot;This example implements a GMail-like mail composer and shows among other things how to upload files asynchronously, showing a cross-browser upload progress bar and with support for multiple files.&quot;, \t\t\t&quot;icon&quot;:&quot;composer_{0}.png&quot;, \t\t\t&quot;url&quot;: &quot;3rdparty\/composer\/index.cgi&quot; \t\t} \t} } <\/code><\/pre>\n<p>  <b>composer_{0}.png<\/b> \u2014 \u043f\u043b\u0435\u0439\u0441\u0445\u043e\u043b\u0434\u0435\u0440 \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 composer_48.png\/composer_64.png\/composer_72.png\/composer_256.png.<br \/>  <b>url<\/b> \u2014 \u043f\u0443\u0442\u044c \u043a html\/cgi \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u043d\u043e\u0432\u043e\u043c \u043e\u043a\u043d\u0435, \u043f\u0440\u0438 \u043d\u0430\u0436\u0430\u0442\u0438\u0438 \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435. \u0412 <b>\/usr\/syno\/synoman\/webman\/3rdparty\/[package name]<\/b> \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f html, js, css, cgi, \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f. \u0410 \u0432\u043e\u0442 \u043f\u043e\u0434\u0441\u0443\u043d\u0443\u0442\u044c php \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.<\/p>\n<h5><b>index.cgi<\/b><\/h5>\n<p>  <\/p>\n<pre><code class=\"bash\">#!\/bin\/sh  if [ `ifconfig | grep bond0 | awk '{print $1}'` ] then IP_ADDR=`ifconfig bond0 | grep &quot;inet addr&quot; | awk '{print $2}' | awk -F: '{print $2}'` else IP_ADDR=`ifconfig eth0 | grep &quot;inet addr&quot; | awk '{print $2}' | awk -F: '{print $2}'` fi echo Location: http:\/\/$IP_ADDR:8585 echo &quot;&quot; exit  <\/code><\/pre>\n<p>  \u041f\u0440\u043e\u0441\u0442\u043e\u0439 cgi \u0441\u043a\u0440\u0438\u043f\u0442 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u043d\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043d\u0430 Wt.<\/p>\n<h5><b>start-stop-status<\/b><\/h5>\n<p>  <\/p>\n<pre><code class=\"bash\">#!\/bin\/sh  case $1 in \tstart) \t\t${SYNOPKG_PKGDEST}\/composer.wt --docroot=${SYNOPKG_PKGDEST} --approot=${SYNOPKG_PKGDEST} --http-address=0.0.0.0 --http-port=8585 & \t\texit 0 \t;; \tstop)  \t\tpkill composer.wt \t\texit 0 \t;; \trestart) \t\texit 0; \t;; \tstatus) \t\tif [ &quot;$?&quot; = &quot;0&quot; ]; then  \t\t\texit 0 \t\telse \t\t\texit 1 \t\tfi\t\t \t;; \tlog) \t\texit 0 \t;; esac <\/code><\/pre>\n<p>  \u0417\u0430\u043f\u0443\u0441\u043a \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<h4><b>\u0412\u044b\u0432\u043e\u0434\u044b<\/b><\/h4>\n<p>  \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 Synology \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <b>toolchain<\/b> \u0438\u043c\u0435\u0435\u0442 \u0441\u0432\u043e\u0438 \u043f\u043b\u044e\u0441\u044b \u0438 \u043c\u0438\u043d\u0443\u0441\u044b.<br \/>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043f\u043b\u044e\u0441\u044b:  <\/p>\n<ul>\n<li>\u043d\u0435 \u043d\u0430\u0434\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0438 \u043a\u043b\u0430\u0441\u0442\u044c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438;<\/li>\n<li>\u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u043e cpu.<\/li>\n<\/ul>\n<p>  \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043c\u0438\u043d\u0443\u0441\u044b:  <\/p>\n<ul>\n<li>\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u044b\u0439 toolchain.<\/li>\n<\/ul>\n<p>  \u0423 QNAP <a href=\"http:\/\/sourceforge.net\/projects\/qosgpl\/files\/QNAP%20NAS%20Tool%20Chains\/\">toolchain<\/a> \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0434\u0440\u0435\u0432\u043d\u0438\u043c \u0438 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0438\u0434\u0442\u0438 \u0432 \u043e\u0431\u0445\u043e\u0434, \u043d\u043e \u044d\u0442\u043e \u0434\u0440\u0443\u0433\u0430\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f.               <\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/271011\/\"> http:\/\/habrahabr.ru\/post\/271011\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>       \u041d\u0430 \u043d\u043e\u0432\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u043c\u043d\u0435 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0447\u0443 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u043d\u0430 NAS \u043e\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439 Synology \u0438 QNAP. \u041f\u0440\u043e\u0434\u0443\u043a\u0442 \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 C++ \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c C++11, Boost \u0438 Qt5. \u0417\u0430 \u043d\u0435\u0438\u043c\u0435\u043d\u0438\u0435\u043c \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0435\u0431 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430, \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430<a href=\"http:\/\/www.webtoolkit.eu\/wt\/ru\/\">Wt<\/a>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 CMake. \u041f\u043e\u0434 \u043a\u0430\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u0431\u043e\u0440\u043a\u0430 \u044d\u0442\u043e\u0433\u043e \u0437\u043e\u043e\u043f\u0430\u0440\u043a\u0430 \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430.  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-269611","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/269611","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=269611"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/269611\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=269611"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=269611"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=269611"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}