Coder Social home page Coder Social logo

christophehenry / spksrc Goto Github PK

View Code? Open in Web Editor NEW

This project forked from synocommunity/spksrc

0.0 0.0 0.0 52.53 MB

Cross compilation framework to create native packages for the Synology's NAS

Home Page: https://synocommunity.com

License: Other

Shell 19.43% JavaScript 11.17% Ruby 0.15% C++ 9.06% Python 3.74% Perl 0.64% C 0.47% PHP 0.10% Scala 0.01% SuperCollider 0.18% Go 0.50% CSS 0.73% Makefile 51.47% NewLisp 0.07% HTML 2.08% Smarty 0.03% Dockerfile 0.15% Roff 0.01% Vim Script 0.01%

spksrc's Introduction

Discord

SynoCommunity is now on Discord!

Discord

DSM 7

DSM 7 was released on June 29 2021 as Version 7.0.41890.

In SynoCommunity some packages are available for DSM 7 but some are not.

  • You find the status of the packages in the issue #4524 Meta: DSM7 package status
  • Despite you see packages of SynoCommunity in the Package Center of your Diskstation with DSM 7, some of the packages are not compatible with DSM 7.
  • PLEASE do not create issues saying that package 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", ...).
  • Please regard all DSM 7 packages as beta versions (the synocommunity package repository is not capable to declare packages as beta only for DSM 7).
  • 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.
  • Packages of the following kind will need some time to make DSM 7 compatible
    • Packages depending MySQL database must be migrated to MariaDB 10
    • Packages with installation Wizard to configure a shared folder (all download related packages and others)
    • Packages that integrate into DSM webstation
  • As this is a community project where people spend there spare time for contribution, it may take a long time until most of the packages are ported to DSM 7. (There are still packages here that are not ported from DSM 5 to DSM 6 yet).

spksrc

spksrc is a cross compilation framework intended to compile and package software for Synology NAS devices. Packages are made available via the SynoCommunity repository.

Contributing

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.

Setup Development Environment

Docker

The Docker development environment supports Linux and macOS systems, but not Windows due to limitations of the underlying file system.

  1. Fork and clone spksrc: git clone https://github.com/YOUR-USERNAME/spksrc
  2. Install Docker on your host OS (see Docker installation, or use a wget-based alternative for linux Install Docker with wget).
  3. Download the spksrc Docker container: docker pull ghcr.io/synocommunity/spksrc
  4. Run the container with the repository mounted into the /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 -w /spksrc ghcr.io/synocommunity/spksrc /bin/bash

# If running on macOS:
docker run -it -v $(pwd):/spksrc -w /spksrc -e TAR_CMD="fakeroot tar" ghcr.io/synocommunity/spksrc /bin/bash
  1. From there, follow the instructions in the Developers HOW TO.

Virtual machine

A virtual machine based on an 64-bit version of Debian 11 stable OS is recommended. Non-x86 architectures are not supported.

Install the requirements (in sync with Dockerfile):

sudo dpkg --add-architecture i386 && sudo apt-get update
sudo apt update
sudo apt install autoconf-archive autogen automake autopoint bash bc bison \
                 build-essential check cmake curl cython3 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 ninja-build \
                 php pkg-config python2 python3 python3-distutils rename rsync scons subversion 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.62.2

From there, follow the instructions in the Developers HOW TO.

  • You may need to install some packages from testing like autoconf. Read about Apt-Pinning to know how to do that.
  • Some older toolchains may require 32-bit development versions of packages, e.g. zlib1g-dev:i386

LXC

A container based on 64-bit version of Debian 11 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 :

  1. Create a new container (will use x864_64/amd64 arch by default): lxc launch images:debian/11 spksrc
  2. Enable i386 arch: lxc exec spksrc -- /usr/bin/dpkg --add-architecture i386
  3. Update apt channels: lxc exec spksrc -- /usr/bin/apt update
  4. Install all required packages:
lxc exec spksrc -- /usr/bin/apt install autoconf-archive autogen automake autopoint bash bc bison \
                                build-essential check cmake curl cython3 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 ninja-build \
                                php pkg-config python2 python3 python3-distutils rename rsync scons subversion swig \
                                texinfo unzip xmlto zlib1g-dev
  1. Install python2 wheels:
lxc exec spksrc -- /bin/bash -c "wget https://bootstrap.pypa.io/pip/2.7/get-pip.py -O - | python2"
lxc exec spksrc -- /bin/bash -c "pip2 install virtualenv httpie"
  1. Install python3 pip:
lxc exec spksrc -- /bin/bash -c "wget https://bootstrap.pypa.io/get-pip.py -O - | python3"
  1. Install meson:
lxc exec spksrc -- /bin/bash -c "pip3 install meson==0.62.2"

LXC: spksrc user

  1. 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:
lxc exec spksrc -- /usr/sbin/adduser --uid 1001 spksrc
  1. Setup a default shell environment:
lxc exec spksrc --user 1001 -- cp /etc/skel/.profile /etc/skel/.bashrc ~spksrc/.

rustc compiler

  1. Prepare the install destination directories:
lxc exec spksrc -- mkdir -p -m 0755 /opt/cargo /opt/rustup
lxc exec spksrc -- chown spksrc:spksrc /opt/cargo /opt/rustup
  1. Install rustc:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | lxc exec spksrc --user 1001 -- bash -c "CARGO_HOME=/opt/cargo RUSTUP_HOME=/opt/rustup sh -s -- -y"
  1. Install the rustc stable toolchain and set it as default
lxc exec spksrc --user 1001 -- bash -c "CARGO_HOME=/opt/cargo RUSTUP_HOME=/opt/rustup /opt/cargo/bin/rustup toolchain install stable"
lxc exec spksrc --user 1001 -- bash -c "CARGO_HOME=/opt/cargo RUSTUP_HOME=/opt/rustup /opt/cargo/bin/rustup default stable"
  1. Install rustc toolchain for all archs targets:
lxc exec spksrc --user 1001 -- bash -c "CARGO_HOME=/opt/cargo RUSTUP_HOME=/opt/rustup /opt/cargo/bin/rustup target add x86_64-unknown-linux-gnu"
lxc exec spksrc --user 1001 -- bash -c "CARGO_HOME=/opt/cargo RUSTUP_HOME=/opt/rustup /opt/cargo/bin/rustup target add i686-unknown-linux-gnu"
lxc exec spksrc --user 1001 -- bash -c "CARGO_HOME=/opt/cargo RUSTUP_HOME=/opt/rustup /opt/cargo/bin/rustup target add armv5te-unknown-linux-gnueabi"
lxc exec spksrc --user 1001 -- bash -c "CARGO_HOME=/opt/cargo RUSTUP_HOME=/opt/rustup /opt/cargo/bin/rustup target add armv7-unknown-linux-gnueabihf"
lxc exec spksrc --user 1001 -- bash -c "CARGO_HOME=/opt/cargo RUSTUP_HOME=/opt/rustup /opt/cargo/bin/rustup target add armv7-unknown-linux-gnueabi"
lxc exec spksrc --user 1001 -- bash -c "CARGO_HOME=/opt/cargo RUSTUP_HOME=/opt/rustup /opt/cargo/bin/rustup target add aarch64-unknown-linux-gnu"
lxc exec spksrc --user 1001 -- bash -c "CARGO_HOME=/opt/cargo RUSTUP_HOME=/opt/rustup /opt/cargo/bin/rustup target add powerpc-unknown-linux-gnu"

From there you can connect to your container as spksrc and follow the instructions in the Developers HOW TO.

lxc exec spksrc -- su --login spksrc
spksrc@spksrc:~$

(OPTIONAL) Install misc base tools:

lxc exec spksrc -- /usr/bin/apt install bash-completion man-db manpages-dev mlocate ripgrep rsync tree time
lxc exec spksrc -- /usr/bin/updatedb

(OPTIONAL) LXC: Shared spksrc user

You 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.

  1. Create a mapping rule between the hosts and the LXC image:
lxc config set spksrc raw.idmap "both 1001 1001"
lxc restart spksrc
Remapping container filesystem
  1. Add /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
  1. Connect as spksrc user:
lxc exec spksrc -- su --login spksrc
spksrc@spksrc:~$

LXC: Proxy (OPTIONAL)

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.

  1. Enforce using a proxy:
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
  1. Enforce using a proxy with wget in the spksrc container user account:
lxc exec spksrc --user $(id -u spksrc) -- bash -c "cat << EOF > ~spksrc/.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"

Usage

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.

License

When not explicitly set, files are placed under a 3 clause BSD license

spksrc's People

Contributors

dr-bean avatar hgy59 avatar moneytoo avatar th0ma7 avatar ymartin59 avatar cytec avatar publicarray avatar safihre avatar zebulon501 avatar karaokestu avatar diaoul avatar m4tt075 avatar smaarn avatar manulin44 avatar lost-carrier avatar gaetancambier avatar fgma avatar bru7us avatar kmarty avatar patsissons avatar maxrogers avatar piejanssens avatar filin20 avatar seblucas avatar joenyland avatar hmflash avatar blackjid avatar piwi82 avatar chickenandpork avatar hurik avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.