{"id":31628052,"url":"https://github.com/jirutka/user-aports","last_synced_at":"2025-10-06T20:17:24.101Z","repository":{"id":42699533,"uuid":"53281906","full_name":"jirutka/user-aports","owner":"jirutka","description":"My Alpine Linux aports that are not in official repository yet or don’t adhere to Alpine polices (bundles)","archived":false,"fork":false,"pushed_at":"2025-09-07T22:18:29.000Z","size":2463,"stargazers_count":29,"open_issues_count":1,"forks_count":5,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-09-07T23:31:02.753Z","etag":null,"topics":["alpine-linux","aports","linux","packages"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jirutka.png","metadata":{"files":{"readme":"README.adoc","changelog":null,"contributing":null,"funding":null,"license":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2016-03-06T23:30:46.000Z","updated_at":"2025-09-07T22:18:33.000Z","dependencies_parsed_at":"2024-02-18T14:37:54.838Z","dependency_job_id":"ce8f9047-404c-4603-bdac-ebdb81054366","html_url":"https://github.com/jirutka/user-aports","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jirutka/user-aports","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jirutka%2Fuser-aports","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jirutka%2Fuser-aports/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jirutka%2Fuser-aports/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jirutka%2Fuser-aports/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jirutka","download_url":"https://codeload.github.com/jirutka/user-aports/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jirutka%2Fuser-aports/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278672041,"owners_count":26025826,"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","status":"online","status_checked_at":"2025-10-06T02:00:05.630Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["alpine-linux","aports","linux","packages"],"created_at":"2025-10-06T20:17:22.347Z","updated_at":"2025-10-06T20:17:24.094Z","avatar_url":"https://github.com/jirutka.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"= My aports\n:source-language: sh\n:repo-name: user-aports\n:repo-branch: v3.21\n:gh-name: jirutka/{repo-name}\n:gh-branch: master\n:key-file: jakub@jirutka.cz-655775c4.rsa.pub\n:repos-uri: https://repo.jirutka.cz/alpine\n\nifdef::env-github[]\nimage:https://github.com/{gh-name}/workflows/CI/badge.svg?branch={gh-branch}[Build Status, link=https://github.com/{gh-name}/actions?query=workflow%3ACI+branch%3A{gh-branch}]\nendif::env-github[]\n\nThis repository contains aports that are not merged in the official https://alpinelinux.org[Alpine Linux] repository yet or don’t adhere to Alpine polices (e.g. bundles).\nPackages are automatically built on https://github.com/{gh-name}/actions[GitHub Actions] for x86_64 architecture and synchronized with a remote server using SSHFS (SSH Filesystem).\n\nThe *master branch* targets Alpine Linux *{repo-branch}*.\nAports for older Alpine https://alpinelinux.org/releases/[release branches] are in the same named branches in this repository, e.g. v3.15.\nAlpine Edge (aka unstable, development branch) is not supported.\n\n\n== Repositories\n\nAll the repositories are also available over link:rsync://repo.jirutka.cz/alpine/[].\n\n\n=== Backports\n\n* {repos-uri}/{repo-branch}/backports\n\nAports from the official Alpine repositories backported from edge to {repo-branch}.\n\n\n=== User\n\n* {repos-uri}/{repo-branch}/user\n\nMy aports that are not available in the official Alpine repository.\n\nSome aports in this repository are “bundles” – an aport with (some) bundled dependencies.\nIt’s something that Alpine devs really don’t like, but it’s very convenient footnote:[Creating and maintaining gazillion distro-specific packages for Python modules, Rubygems, …, installing them globally and resolving version conflicts is nothing but totally insane…] for packaging applications with _a lot_ dependencies that are already managed by some language-specific package manager (e.g. pip, bundler, …).\nAll bundles are installed in `/usr/lib/bundles/\u003cpkgname\u003e`.\n\n\n== How to use\n\n. Add security key of this repository to your `/etc/apk/keys`:\n+\n[source, subs=\"attributes\"]\n----\ncd /etc/apk/keys\nwget https://raw.githubusercontent.com/{gh-name}/{gh-branch}/.keys/{key-file}\n----\n\n. Add repositories that you want to use (see above) to `/etc/apk/repositories`.\n\n\n== Git Hooks\n\nYou can find some useful git hooks in the `.githooks` directory.\nTo use them, run the following command after cloning this repository:\n\n[source, sh]\ngit config --local core.hooksPath .githooks\n\n\n== How to setup your own repository\n:remote-user: ci\n:remote-host: alpine.example.org\n:remote-dir: /var/www/alpine\n\nThis guide will help you to set up your own aports repository and infrastructure for building packages using CI.\nIt targets GitHub and GitHub Actions, but it might be modified for any other git hosting and CI.\nHowever, if you want to build packages on your own CI server, then this approach might be unnecessarily complicated.\n\n.*You will need:*\n* Account on GitHub.\n* Some server with SSH access for serving static files via HTTP(S) (e.g. using nginx), with enough disk space for binary packages.\n\n.*We will use the following variables:*\n* Domain name of your server: `{remote-host}` _(replace with your own domain)_\n* Name of the user on your server for deploying abuilds: `{remote-user}` _(you may choose different user)_\n* Path of directory on your server for deploying abuilds: `{remote-dir}` _(you may choose different directory)_\n\n\n=== Set up server\n\n. Create user `{remote-user}`:\n+\n[source, subs=\"attributes\"]\n----\nuseradd --no-create-home --shell=/bin/sh --gid www-data {remote-user}\n\n# or if you don' have useradd\nadduser -h {remote-dir} -s /bin/sh -G www-data -D -H {remote-user}\nsed -i- 's/^{remote-user}:!:/{remote-user}:*:/' /etc/shadow\n----\n\n. Prepare directories:\n+\n[source, subs=\"attributes\"]\n----\ninstall -d -m 0755 -o root -g root {remote-dir}\ncd {remote-dir}\n\ninstall -d -m 0755 -o {remote-user} -g root packages\ninstall -d -m 0700 -o {remote-user} -g root .secret ~/.ssh\n----\n\n. Jail user `{remote-user}` to `{remote-dir}` and restrict him to use sftp only; add the following lines to `/etc/ssh/sshd_config`:\n+\n[source, conf, subs=\"attributes\"]\n----\nMatch User {remote-user}\n    ChrootDirectory {remote-dir}\n    ForceCommand internal-sftp\n    X11Forwarding no\n    AllowTcpForwarding no\n----\n\n. Set up web server to serve `{remote-dir}/packages` on http://{remote-host}/packages. Ensure that `{remote-dir}/.secret/` is *not* accessible from web! Example configuration for nginx:\n+\n[source, nginx, subs=\"attributes\"]\n----\nserver {\n    listen [::]:80;\n    server_name {remote-host};\n    root {remote-dir};\n\n    location /.security {\n        deny all;\n    }\n\n    location / {\n        autoindex on;\n    }\n}\n----\n\n=== Set up repository\n\n. Create repository for your aports on GitHub. Let’s assume that it’s named `{repo-name}`.\n\n. Clone branch `template` of this repository, change remote to your own repository and create branch `master`:\n+\n[source, subs=\"attributes\"]\n----\ngit clone --branch template https://github.com/{gh-name}.git {repo-name}\ncd {repo-name}\ngit remote remove origin\ngit remote add origin git@github.com:YOUR-USERNAME/{repo-name}.git\ngit checkout -b master\n----\n\n. Generate SSH deploy key:\n+\n[source]\n----\nmkdir -p .keys\nssh-keygen -C '' -t ed25519 -N '' -f .keys/deploy-key\n----\n\n. Go to *Settings \u003e Secret* in your repository on GitHub and add new secrets:\n** `SSH_KNOWN_HOSTS` – paste output of `ssh-keyscan {remote-host}`\n** `SSH_PRIVATE_KEY` – paste content of `.keys/deploy-key`\n** `SSH_REMOTE` – `{remote-user}@{remote-host}:/`\n\n. Copy `.keys/deploy-key.pub` to file `~/.ssh/authorized_keys` in home directory of user `{remote-user}` on your server. This file *must* be owned by `{remote-user}` and has mode 0600!\n\n. Generate a security key for signing packages:\n+\n[source]\n----\nKEY_NAME=\"$(git config --get user.email)-$(printf \"%x\" $(date +%s)).rsa\"\nopenssl genrsa -out \".keys/$KEY_NAME\" 2048\nopenssl rsa -in \".keys/$KEY_NAME\" -pubout -out \".keys/$KEY_NAME.pub\"\n----\n\n. Copy `$KEY_NAME` to file `{remote-dir}/.secret/$KEY_NAME` on the server, set owner `{remote-user}` and mode `0400`.\n\n. Delete generated private keys:\n+\n[source]\n----\nrm .keys/deploy-key \".keys/$KEY_NAME\"\n----\n\n. Adjust `BRANCH`, `BUILD_REPOS` and repositories (step “Configure repositories”) in link:.github/workflows/ci.yml[].\n\n. Change variables `:repo-name:`, `:repo-branch:`, `:gh-name:`, `:repos-uri:`, and `:key-file:` on the top of file link:README.adoc[].\n\n. Commit changes and push to GitHub.\n\nNow create directories for your repositories (e.g. user, backports, …) and add your aports.\n\n\n== License\n\nThis readme, abuilds and support scripts are licensed under http://opensource.org/licenses/MIT[MIT License].\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjirutka%2Fuser-aports","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjirutka%2Fuser-aports","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjirutka%2Fuser-aports/lists"}