{"id":13427269,"url":"https://github.com/SynoCommunity/spksrc","last_synced_at":"2025-03-15T22:32:33.594Z","repository":{"id":1739654,"uuid":"2565137","full_name":"SynoCommunity/spksrc","owner":"SynoCommunity","description":"Cross compilation framework to create native packages for the Synology's NAS","archived":false,"fork":false,"pushed_at":"2025-03-12T16:38:23.000Z","size":72903,"stargazers_count":3077,"open_issues_count":303,"forks_count":1245,"subscribers_count":164,"default_branch":"master","last_synced_at":"2025-03-14T10:11:49.240Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://synocommunity.com","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SynoCommunity.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"synocommunity","open_collective":"synocommunity"}},"created_at":"2011-10-12T20:25:50.000Z","updated_at":"2025-03-13T10:46:11.000Z","dependencies_parsed_at":"2023-09-29T01:04:47.571Z","dependency_job_id":"2c2680b9-fcaf-435d-9c1e-0e8bfb0d2b3a","html_url":"https://github.com/SynoCommunity/spksrc","commit_stats":{"total_commits":4512,"total_committers":226,"mean_commits":"19.964601769911503","dds":0.7471187943262412,"last_synced_commit":"558409141605d97e8067b825585760eef4b584a2"},"previous_names":[],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SynoCommunity%2Fspksrc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SynoCommunity%2Fspksrc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SynoCommunity%2Fspksrc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SynoCommunity%2Fspksrc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SynoCommunity","download_url":"https://codeload.github.com/SynoCommunity/spksrc/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243624016,"owners_count":20321028,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-07-31T00:01:58.215Z","updated_at":"2025-03-15T22:32:33.574Z","avatar_url":"https://github.com/SynoCommunity.png","language":"C","readme":"# Discord\nSynoCommunity is now on Discord!\n\n[![Discord](https://img.shields.io/discord/732558169863225384?color=7289DA\u0026label=Discord\u0026logo=Discord\u0026logoColor=white\u0026style=for-the-badge)](https://discord.gg/nnN9fgE7EF)\n\n# spksrc\nspksrc is a cross compilation framework intended to compile and package software for Synology NAS devices. Packages are made available via the [SynoCommunity repository].\n\n\n# DSM 7\nDSM 7 was released on June 29 2021 as Version 7.0.41890.\n\n* The main issue we had with our reposity is fixed in [spkrepo](https://github.com/SynoCommunity/spkrepo/pull/112) and online since February 2024\n  - before the repository deliverd DSM 6 packages for Systems with DSM 7, when no DSM 7 package was available\n  - this gave errors like \"invalid file format\" (or \"package requires root privileges\")\n  - you still get this error when manually installing a DSM 6 package on DSM 7\n* You find the status of the former packages in the issue [#4524] **Meta: DSM7 package status**\n* New packages support DSM 7 from initial package version (and some require at least DSM 7).\n* **ATTENTION**: As reported, package configuration settings may be lost following the upgrade to DSM 7 and the execution of a Package repair. Make sure to backup your settings and configuration for your SynoCommunity packages before installation of DSM 7 to facilitate restoration if needed.\n\n\n## Contributing\nBefore opening a new issue, check the [FAQ] and search open issues.\nIf 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.\n\n\n## Setup Development Environment\n### Docker\n*The Docker development environment supports Linux and macOS systems, but not Windows due to limitations of the underlying file system.*\n\n1. [Fork and clone] spksrc: `git clone https://github.com/YOUR-USERNAME/spksrc`\n2. Install Docker on your host OS (see [Docker installation], or use a `wget`-based alternative for linux [Install Docker with wget]).\n3. Download the spksrc Docker container: `docker pull ghcr.io/synocommunity/spksrc`\n4. Run the container with the repository mounted into the `/spksrc` directory with the appropriate command for your host Operating System:\n\n```bash\ncd spksrc # Go to the cloned repository's root folder.\n\n# If running on Linux:\ndocker run -it --platform=linux/amd64 -v $(pwd):/spksrc -w /spksrc ghcr.io/synocommunity/spksrc /bin/bash\n\n# If running on macOS:\ndocker run -it --platform=linux/amd64 -v $(pwd):/spksrc -w /spksrc -e TAR_CMD=\"fakeroot tar\" ghcr.io/synocommunity/spksrc /bin/bash\n```\n5. From there, follow the instructions in the [Developers HOW TO].\n\n\n\n### Virtual machine\nA virtual machine based on an 64-bit version of Debian 12 stable OS is recommended. Non-x86 architectures are not supported.\n\nInstall the requirements (in sync with `Dockerfile`):\n```bash\nsudo dpkg --add-architecture i386 \u0026\u0026 sudo apt-get update\nsudo apt update\nsudo apt install autoconf-archive autogen automake autopoint bash \\\n                 bash-completion bc bison build-essential check cmake \\\n                 curl cython3 debootstrap ed expect fakeroot flex \\\n                 g++-multilib gawk gettext gh git gperf httpie imagemagick \\\n                 intltool jq libtool-bin libbz2-dev libc6-i386 libcppunit-dev libffi-dev \\\n                 libgc-dev libgmp3-dev libltdl-dev libmount-dev libncurses-dev \\\n                 libpcre3-dev libssl-dev libtool libunistring-dev lzip \\\n                 man-db manpages-dev mercurial meson mlocate moreutils nasm \\\n                 ninja-build patchelf php pkg-config python3 python3-distutils \\\n                 python3-mako python3-pip python3-virtualenv python3-yaml \\\n                 rename ripgrep ruby-mustache rsync scons subversion \\\n                 swig texinfo time tree unzip xmlto yasm zip zlib1g-dev\n```\nFrom there, follow the instructions in the [Developers HOW TO].\n\n* You may need to install some packages from testing like autoconf. Read about Apt-Pinning to know how to do that.\n* Some older toolchains may require 32-bit development versions of packages, e.g. `zlib1g-dev:i386`\n\n\n\n### LXC\nA container based on 64-bit version of Debian 12 stable OS is recommended. Non-x86 architectures are not supported.  The following assumes your LXD/LXC environment is already initiated (e.g. `lxc init`) and you have minimal LXD/LXC basic knowledge :\n1. Create a new container (will use x86_64/amd64 arch by default): `lxc launch images:debian/12 spksrc`\n2. Enable i386 arch: `lxc exec spksrc -- /usr/bin/dpkg --add-architecture i386`\n3. Update apt channels: `lxc exec spksrc -- /usr/bin/apt update`\n4. Install all required packages:\n```bash\nlxc exec spksrc -- /usr/bin/apt install autoconf-archive autogen automake autopoint bash \\\n                                        bash-completion bc bison build-essential check cmake \\\n                                        curl cython3 debootstrap ed expect fakeroot flex \\\n                                        g++-multilib gawk gettext gh git gperf httpie imagemagick \\\n                                        intltool jq libtool-bin libbz2-dev libc6-i386 libcppunit-dev libffi-dev \\\n                                        libgc-dev libgmp3-dev libltdl-dev libmount-dev libncurses-dev \\\n                                        libpcre3-dev libssl-dev libtool libunistring-dev lzip \\\n                                        man-db manpages-dev mercurial meson mlocate moreutils nasm \\\n                                        ninja-build patchelf php pkg-config python3 python3-distutils \\\n                                        python3-mako python3-pip python3-virtualenv python3-yaml \\\n                                        rename ripgrep ruby-mustache rsync scons subversion \\\n                                        swig texinfo time tree unzip xmlto yasm zip zlib1g-dev\n```\n\n#### LXC: `spksrc` user\n8. By default it is assumed that you will be running as `spksrc` user into the LXC container.  Such user needs to be created into the default container image:\n```bash\nlxc exec spksrc -- /usr/sbin/adduser --uid 1001 spksrc\n```\n9. Setup a default shell environment:\n```bash\nlxc exec spksrc --user 1001 -- cp /etc/skel/.profile /etc/skel/.bashrc ~spksrc/.\n```\n\nFrom there you can connect to your container as `spksrc` and follow the instructions in the [Developers HOW TO].\n```bash\nlxc exec spksrc -- su --login spksrc\nspksrc@spksrc:~$\n```\n\n#### (OPTIONAL) LXC: Shared `spksrc` user\nYou can create a shared user between your Debian/Ubuntu host and the LXC Debian container which simplifies greatly file management between the two.  The following assumes you already created a user `spksrc` with uid 1001 in your Debian/Ubuntu host environment and that you which to share its `/home` userspace.\n1. Create a mapping rule between the hosts and the LXC image:\n```bash\nlxc config set spksrc raw.idmap \"both 1001 1001\"\nlxc restart spksrc\nRemapping container filesystem\n```\n2. Add `/home/spksrc` from the hsot to the LXC container:\n```bash\nlxc config device add spksrc home disk path=/home/spksrc source=/home/spksrc\nDevice home added to spksrc\n```\n3. Connect as `spksrc` user:\n```bash\nlxc exec spksrc -- su --login spksrc\nspksrc@spksrc:~$\n```\n\n#### LXC: Proxy (OPTIONAL)\nThe 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.\n1. Enforce using a proxy:\n```bash\nlxc config set spksrc environment.http_proxy http://192.168.1.1:3128\nlxc config set spksrc environment.https_proxy http://192.168.1.1:3128\n```\n2. Enforce using a proxy with `wget` in the spksrc container user account:\n```bash\nlxc exec spksrc --user $(id -u spksrc) -- bash -c \"cat \u003c\u003c EOF \u003e ~spksrc/.wgetrc\nuse_proxy = on\nhttp_proxy = http://192.168.1.1:3128/\nhttps_proxy = http://192.168.1.1:3128/\nftp_proxy = http://192.168.1.1:3128/\nEOF\"\n```\n\n\n## Usage\nOnce 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.\nSee the [Developers HOW TO] for information on how to use spksrc.\n\n\n## License\nWhen not explicitly set, files are placed under a [3 clause BSD license]\n\n[3 clause BSD license]: http://www.opensource.org/licenses/BSD-3-Clause\n[#4524]: https://github.com/SynoCommunity/spksrc/issues/4524\n[bug tracker]: https://github.com/SynoCommunity/spksrc/issues\n[CONTRIBUTING]: https://github.com/SynoCommunity/spksrc/blob/master/CONTRIBUTING.md\n[Fork and clone]: https://docs.github.com/en/github/getting-started-with-github/fork-a-repo\n[Developers HOW TO]: https://github.com/SynoCommunity/spksrc/wiki/Developers-HOW-TO\n[Docker installation]: https://docs.docker.com/engine/installation\n[FAQ]: https://github.com/SynoCommunity/spksrc/wiki/Frequently-Asked-Questions\n[Install Docker with wget]: https://docs.docker.com/linux/step_one\n[SynoCommunity repository]: http://www.synocommunity.com\n","funding_links":["https://github.com/sponsors/synocommunity","https://opencollective.com/synocommunity"],"categories":["Makefile","others","Linux","HarmonyOS","C"],"sub_categories":["Storage","Windows Manager"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSynoCommunity%2Fspksrc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FSynoCommunity%2Fspksrc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FSynoCommunity%2Fspksrc/lists"}