Package Update Policy - SynoCommunity/spksrc GitHub Wiki

Update Policy and Process

DSM 5.2 packages are no longer built for all applications. Most recent upstream versions require compilers', build tool options/versions or kernel versions not available/compatible with DSM 5.2 toolchains.

First class packages

Following packages are considered as update priority according to:

  • user needs, because of provided features
  • build chain coverage
  • native language support like Python, Mono, Go...

Here is this work-in-progress package list:

  • ffmpeg
  • Transmission
  • Radarr
  • Syncthing

Compatibility issue

Following packages binaries are not compatible for both DSM 5.2 and DSM 6.1 because of C++ and incompatible libstdc++ versions.

  • mono
  • ffmpeg
  • chromaprint
  • mediainfo
  • Sonarr/Radarr because of embedded mediainfo dependency
  • deluge because of Boost

Constraints

Here are known troubles detected when updating package and their dependencies:

  • openssl 1.1 breaks API compatibility preventing rtmpdump to compile, requirement for ffmpeg

  • fontconfig 2.12.91 requires itstool even with --disable-docs switch (no issue with fontconfig 2.13.1)

  • x265 2.6 cmake command fails unexpectedly

  • libvpx 1.7.0 no longer supports ppc architectures

  • chromaprint 1.4.x no longer builds for 88f6281 because of toolchain GCC version

  • imagemagick only compiles with DSM 6.x toolchains because of clock_gettime method availability

Tests Checks

  • If issue reported about previous version, check fix with appropriate test case

Package features

  • Check description translations
  • Check wizard pages and process (install and upgrade)
  • Check wizard translation

Service

  • Check service is startable from Package Center, confirm with ps
  • Check service is stoppable from Package Center, confirm with ps
  • Check "View log"
  • Check log file in /var/packages/{package}/target/var/
  • Use DSM shortcut to connect to interface
  • Check application port is declared in Firewall Services

Command line tools

  • Check expected binaries are in PATH thanks to links in /usr/local/bin
  • Run binaries with version and verbose options

Publish process

Supported DSM versions are DSM 6.1 and 6.2

DSM 6.0 is skipped because concerned systems should be updated to 6.1 or 6.2 if available.

Packages are no longer published systematically for DSM 5.2... we may wait for user specific DSM 5.2 request to publish these variants in repository. Notice one user requested a build for his architecture ppc853x-4.2

For some low memory applications, often command lines, interesting for SRM users, it is possible to upload packages in repository with targets publish-arch-armv7-1.2. As SRM has no "custom repository" support in Package Center, users have to manually download and install package from https://synocommunity.com/packages architecture links.

Build

Generate package with following Make targets, with -jX or more if you have enough cores.

make -j`nproc` arch-x64-6.1 arch-armv7-6.1 arch-aarch64-6.1 arch-armv7-1.2 \
     arch-qoriq-6.1 arch-evansport-6.1 arch-88f6281-6.1 arch-hi3535-6.1

The regular all-supported now also support parallel build and can be used such as:

make -j`nproc` all-supported

Notice x64, armv7 and aarch64 are generic architectures generating a single package for all concerned CPU models/architectures of numerous Synology devices.

According to application's relevance, arch-armv7-1.2 may be excluded.

Testing

  • For upgrade, install current online package version on XPEnology DSM 5.2

  • Test up

  • Install manually x64 package on XPEnology DSM 6.1 or 6.2

  • Uninstall package ** Check proper removal /var/packages/{package}/ ** Check service account has been removed from /etc/passwd

Publish

In order to publish packages online you need a local.mk configuration file. The PUBLISH_API_KEY is available through your profile at https://synocommunity.com/profile. The file needs to be located at the top directory of spksrc and must contain the following (automatically generated by calling make setup-synocommunity from the root directory):

PUBLISH_URL = https://api.synocommunity.com
PUBLISH_API_KEY = <MYKEY>
DISTRIBUTOR = SynoCommunity
DISTRIBUTOR_URL = https://synocommunity.com/
REPORT_URL = https://github.com/SynoCommunity/spksrc/issues
DEFAULT_TC = 6.1 7.0

After local tests, submit packages to online repository and be patient. Do not try to parallelize, spkrepo will not appreciate.

make publish-arch-x64-6.1  publish-arch-armv7-6.1 publish-arch-aarch64-6.1 publish-arch-armv7-1.2 \
     publish-arch-qoriq-6.1 publish-arch-evansport-6.1 publish-arch-88f6281-6.1 publish-arch-hi3535-6.1

Can also use publish-all-supported which will lead to a similar output. Note that adding -jX will not operate in parallel build as publishing must be done serially:

make publish-all-supported

According to application's relevance, publish-arch-armv7-1.2 may be excluded.

After publish, go into repository:

Optional/Obsolete: DSM 5.2 binaries incompatible with DSM 6.1

For package with libstdc++ dependency, it is required to build additional packages specific for DSM 5.2:

make arch-qoriq-5.2 arch-x64-5.2 arch-evansport-5.2 arch-88f6281-5.2

Apply test process either on DSM 5.2 XPEnology except if you still run DSM 5.2 on some devices.

Publish without parallelization:

make publish-arch-qoriq-5.2 publish-arch-x64-5.2 publish-arch-evansport-5.2 publish-arch-88f6281-5.2 publish-arch-alpine-5.2 \
     publish-arch-armada370-5.2 publish-arch-armada375-5.2 publish-arch-armada38x-5.2 publish-arch-armadaxp-5.2 \
     publish-arch-comcerto2k-5.2 publish-arch-monaco-5.2

After publish, activate your build to install package from Package Center, and if OK activate package Version.

Specific process

We try to build and publish package-to-package dependencies as dynamic libraries linkage (reuse, reduce efforts and bandwidth), as a example with chromaprint depending on ffmpeg libraries dynamically when just built before in same working-copy where ffmpeg have already been built.

cd spk/chromaprint;
for a in x64 evansport 88f6281 armv7 aarch64 hi3535; do make publish ARCH=$a TCVERSION=6.1; done

Concerned packages: tvheadend, chromaprint, comskip

For SRM packages, use make publish ARCH=armv7 TCVERSION=1.2 in application spk folder.

Logic is implemented thanks to:

⚠️ **GitHub.com Fallback** ⚠️