SynoCommunity is now on Discord!
DSM 7 was released on June 29 2021 as Version 7.0.41890.
xy
cannot be installed on DSM 7. All packages not yet ported to DSM 7 will refuse the installation with a message about "package requires root privileges" (or "invalid file format", ...).spksrc is a cross compilation framework intended to compile and package software for Synology NAS devices. Packages are made available via the SynoCommunity repository.
Before opening a new issue, check the FAQ and search open issues. If you can't find an answer, or if you want to open a package request, read CONTRIBUTING to make sure you include all the information needed for contributors to handle your request.
The Docker development environment supports Linux and macOS systems, but not Windows due to limitations of the underlying file system.
git clone https://github.com/YOUR-USERNAME/spksrc
wget
-based alternative for linux Install Docker with wget).docker pull ghcr.io/synocommunity/spksrc
/spksrc
directory with the appropriate command for your host Operating System:cd spksrc # Go to the cloned repository's root folder.
# If running on Linux:
docker run -it -v $(pwd):/spksrc ghcr.io/synocommunity/spksrc /bin/bash
# If running on macOS:
docker run -it -v $(pwd):/spksrc -e TAR_CMD="fakeroot tar" ghcr.io/synocommunity/spksrc /bin/bash
A container based on 64-bit version of Debian 10 stable OS is recommended. Non-x86 architectures are not supported. The following assumes your lxd
environment is already initiated (e.g. lxc init
) and you have minimal LXD/LXC knowledge :
lxc launch images:debian/10 spksrc
lxc exec spksrc -- /usr/bin/dpkg --add-architecture i386
lxc exec spksrc -- /usr/bin/apt update
lxc exec spksrc -- /usr/bin/apt install autogen autoconf-archive automake bc bison build-essential check \
cmake curl cython debootstrap ed expect flex g++-multilib gawk gettext git gperf \
imagemagick intltool jq libbz2-dev libc6-i386 libcppunit-dev libffi-dev libgc-dev \
libgmp3-dev libltdl-dev libmount-dev libncurses-dev libpcre3-dev libssl-dev \
libtool libunistring-dev lzip mercurial moreutils ncurses-dev ninja-build php \
pkg-config python3 python3-distutils rename scons subversion swig texinfo unzip \
xmlto zlib1g-dev
python2
wheels:
lxc exec spksrc -- /bin/bash -c "wget https://bootstrap.pypa.io/get-pip.py -O - | python2"
lxc exec spksrc -- /bin/bash -c "pip2 install virtualenv httpie"
python3
wheels:
lxc exec spksrc -- /bin/bash -c "wget https://bootstrap.pypa.io/get-pip.py -O - | python3"
lxc exec spksrc -- /bin/bash -c "pip3 install virtualenv httpie"
meson
(requires autoconf-archive
):
lxc exec spksrc -- /bin/bash -c "pip3 install meson==0.56.0"
lxc exec spksrc -- /usr/bin/apt install bash-completion man-db manpages-dev mlocate ripgrep rsync tree time
lxc exec spksrc -- /usr/bin/updatedb
spksrc
user (OPTIONAL)You can create a shared user between your Ubuntu and the LXC Debian container which simplifies greatly file management between the two. The following assumes you already create a user spksrc
with uid 1001 in your Ubuntu environment and that you which to share its /home
userspace.
spksrc
user: lxc exec spksrc -- /usr/sbin/adduser --uid 1001 spksrc
lxc config set spksrc raw.idmap "both 1001 1001"
lxc restart spksrc
Remapping container filesystem
/home/spksrc
from the hsot to the LXC container:
lxc config device add spksrc home disk path=/home/spksrc source=/home/spksrc
Device home added to spksrc
spksrc
user:
lxc exec spksrc -- su --login spksrc
spksrc@spksrc:~$
lxc exec spksrc -- su --login spksrc
spksrc@spksrc:~$ cp /etc/skel/.profile /etc/skel/.bashrc .
The following assume you have a running proxy on your LAN setup at IP 192.168.1.1 listening on port 3128 that will allow caching files.
lxc config set spksrc environment.http_proxy http://192.168.1.1:3128
lxc config set spksrc environment.https_proxy http://192.168.1.1:3128
wget
in the spksrc container user account:
lxc exec spksrc -- su --login spksrc
spksrc@spksrc:~$ cat << EOF > $HOME/.wgetrc
use_proxy = on
http_proxy = http://192.168.1.1:3128/
https_proxy = http://192.168.1.1:3128/
ftp_proxy = http://192.168.1.1:3128/
EOF
A virtual machine based on an 64-bit version of Debian 10 stable OS is recommended. Non-x86 architectures are not supported.
sudo dpkg --add-architecture i386 && sudo apt-get update
sudo apt update
sudo apt install autoconf-archive autogen automake bc bison build-essential check cmake curl cython debootstrap ed expect fakeroot flex g++-multilib gawk gettext git gperf imagemagick intltool jq libbz2-dev libc6-i386 libcppunit-dev libffi-dev libgc-dev libgmp3-dev libltdl-dev libmount-dev libncurses-dev libpcre3-dev libssl-dev libtool libunistring-dev lzip mercurial moreutils ncurses-dev ninja-build php pkg-config python3 python3-distutils rename scons subversion sudo swig texinfo unzip xmlto zlib1g-dev
wget https://bootstrap.pypa.io/pip/2.7/get-pip.py -O - | sudo python2
sudo pip2 install wheel httpie
wget https://bootstrap.pypa.io/get-pip.py -O - | sudo python3
sudo pip3 install meson==0.56.0
zlib1g-dev:i386
Once you have a development environment set up, you can start building packages, create new ones, or improve upon existing packages while making your changes available to other people. See the Developers HOW TO for information on how to use spksrc.
When not explicitly set, files are placed under a 3 clause BSD license