Update Policy - lwfitzgerald/spksrc GitHub Wiki

Update Policy and Process

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

Compatibility issue

Following packages requires to be built and published 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

  • x265 2.6 cmake command fails unexpectedly

  • libvpx 1.7.0 no longer support ppc architecture

  • 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
  • Run binaries with version and verbose options

Publish process

Support DSM versions are DSM 5.2, 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.

Heavy packages with C++ compatibliity issue may not be published systematically for DSM 5.2 - for instance ffmpeg, chromaprint... we may wait for user specific DSM 5.2 request to publish these variants.

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

Build

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

make arch-qoriq-5.2 arch-x64-5.2 arch-evansport-5.2 arch-88f6281-5.0 arch-alpine-5.2 \
     arch-armada370-5.2 arch-armada375-5.2 arch-armada38x-5.2 arch-armadaxp-5.2 \
     arch-comcerto2k-5.2 arch-monaco-5.2 arch-ppc853x-5.2 arch-rtd1296-6.1 arch-hi3535-6.1

Testing

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

  • Test up

  • Install manually x64 package on XPEnology DSM 5.2

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

Publish

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

make publish-arch-qoriq-5.2 publish-arch-x64-5.2 publish-arch-evansport-5.2 publish-arch-88f6281-5.0 publish-arch-alpine-5.2 \
     publish-arch-armada370-5.2 publish-arch-armada375-5.2 publish-arch-armadaxp-5.2 publish-arch-armada38x-5.2 \
     publish-arch-comcerto2k-5.2 publish-arch-monaco-5.2 publish-arch-ppc853x-5.2 publish-arch-rtd1296-6.1 publish-arch-hi3535-6.1

After publish, go into repository:

Optional: DSM 5.2 binaries incompatible with DSM 6.1

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

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

Apply test process either on DSM 6.1 (XPEnology for instance) or DSM 6.2.

Publish without parallelization:

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

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:

for a in evansport 88f6281 alpine armada370 armada375 armadaxp armada38x comcerto2k monaco rtd1296 hi3535; do make publish ARCH=$a TCVERSION=6.1; done

Logic is implemented thanks to: