{"id":16962534,"url":"https://github.com/threeal/repo","last_synced_at":"2026-04-30T02:35:31.509Z","repository":{"id":77374708,"uuid":"260851334","full_name":"threeal/repo","owner":"threeal","description":"Personal Debian package repository that could be served on GitHub Page","archived":false,"fork":false,"pushed_at":"2020-06-30T13:07:51.000Z","size":96160,"stargazers_count":3,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-07T04:38:11.334Z","etag":null,"topics":["debian","debian-packaging","debian-repositories"],"latest_commit_sha":null,"homepage":"https://threeal.github.io/repo/","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/threeal.png","metadata":{"files":{"readme":"Readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2020-05-03T07:33:36.000Z","updated_at":"2024-07-10T10:44:39.000Z","dependencies_parsed_at":null,"dependency_job_id":"b1400672-9614-416b-82c3-188eedbd86a1","html_url":"https://github.com/threeal/repo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/threeal/repo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/threeal%2Frepo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/threeal%2Frepo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/threeal%2Frepo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/threeal%2Frepo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/threeal","download_url":"https://codeload.github.com/threeal/repo/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/threeal%2Frepo/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260897881,"owners_count":23079225,"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":["debian","debian-packaging","debian-repositories"],"created_at":"2024-10-13T23:07:03.260Z","updated_at":"2026-04-30T02:35:26.479Z","avatar_url":"https://github.com/threeal.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Repo\n\nThis project contains a personal Debian package repository that could be served on GitHub Page.\nIt also contains guides on how to build a Debian package, create repository, and use the repository.\n\n## Using This Repository\n\n- Add the public key of this repository to the local system.\n  ```bash\n  $ curl -s https://threeal.github.io/repo/threeal.asc | sudo apt-key add -\n  ```\n- Add this repository to the source list.\n  ```bash\n  $ sudo sh -c 'echo \"deb [arch=amd64] https://threeal.github.io/repo $(lsb_release -sc) main\" \u003e /etc/apt/sources.list.d/threeal.list'\n  ```\n- Update the package list in repositories.\n  ```bash\n  $ sudo apt update\n  ```\n\n## Creating a Debian Package\n\n### Structuring the Package\n\n- Create a directory using name that follow standard Debian notation for package name.\n  usually it is all lowercase with the following format `\u003cPROJECT\u003e_\u003cMAJOR-VER\u003e.\u003cMINOR-VER\u003e-\u003cPKG-REVISION\u003e_\u003cARCHITECTURE\u003e`. _(example: `libsomething_1.0-1_amd64`)_\n- Pretend the directory you just created to be the root of the system file.\n- Put files that will be installed correspond to their install path. _(example: put file that will be installed on `/usr/lib/libsomething.so` to `libsomething_1.0-1_amd64/usr/lib/libsomething.so`)_\n- Create a `DEBIAN` directory inside the project directory.\n  This directory will be used to put metadata and configuration files of the package.\n- The configuration files are optional, but the metadata file is a must.\n  \u003e For more information about the configuration files, please refer [here](https://www.debian.org/doc/manuals/maint-guide/dreq.en.html).\n- Create `DEBIAN/control` for the metadata file.\n  The metadata file atleast must contains information like the following example:\n  ```\n  Package: libsomething\n  Version: 1.0-1\n  Section: base\n  Priority: optional\n  Architecture: i386\n  Depends: somepackage (\u003e= 1.0.0), someotherpackage (\u003e= 1.2.5)\n  Maintainer: Your Name \u003cyour@email.com\u003e\n  Description: short description\n   very long\n   description\n  ```\n  \u003e For more information about the metadata files, please refer [here](https://www.debian.org/doc/debian-policy/ch-controlfields.html)\n- Watch for the file permission _(read, write, and execute permission)_.\n  Make sure executable files in the package already have an execute permission.\n- After the package already structured, continue to build the package as a Debian package.\n\n### Building the Package\n\n- Build the directory as a Debian package:\n  ```bash\n  $ dpkg-deb --build \u003cpackage_directory\u003e\n  ```\n  \u003e If the `dpkg-deb` has not been installed, install it using `$ sudo apt install dpkg`.\n\n## Creating a Debian Package Repository\n\n### Structuring the Repository\n\n- The repository consists of 2 main directory, `dists` that contains package lists and `pool` that contains the package files.\n  - The `dists` directory should be structured using the following format `dists/\u003cOS-RELEASE\u003e/main/binary-\u003cARCHITECTURE\u003e/`. _(example: `dists/bionic/main/binary-amd64`)_\n  - The `pool` directory should be structured using the following format `pool/main/\u003cPACKAGE\u003e/\u003cPACKAGE-DEB\u003e`. _(example: `pool/main/libsomething/libsomething_1.0-1_amd64.deb`)_\n- Create a `Distributions` metadata file under `dists/\u003cOS-RELEASE\u003e`.\n  The metadata file atleast must contains information like the following example:\n  ```\n  Origin: threeal.github.io/repo\n  Label: threeal bionic\n  Suite: bionic\n  Codename: bionic\n  Architectures: amd64 i386\n  Components: main\n  Description: Threeal's Bionic Debian repository\n\n  ```\n  \u003e Note: End the metadata file with an empty line, as it will be appended with the package list to create `Release` file.\n\n### Making the Repository to be Signed\n\n- Create a new gpg key for this repository.\n  ```bash\n  $ gpg --gen-key\n  ```\n  \u003e Note: Make sure to export the key so it could be used later by other user to update the repository.\n  \u003e To export the key, use the following command `$ gpg --export-secret-keys \u003cNAME\u003e \u003e \u003cPATH-TO\u003e/\u003cKEYNAME\u003e.key`\n- Export the public key for the repository and put it to the project root.\n  ```bash\n  $ gpg --armor --export \u003cNAME\u003e \u003e \u003cKEYNAME\u003e.asc\n  ```\n\n### Adding a New Package to the Repository\n\n- Put all new release of Debian packages inside their corresponding package in `pool` directory. _(example: put `libsomething_1.0-1_amd64.deb` inside `pool/main/libsomething`)_\n- Remove older version of the Debian package release, if there is any. _(example: with `libsomething_1.0-1_amd64.deb`, remove `libsomething_0.9-3_amd64.deb`)_\n  \u003e **Note**: for alternative, you can run the `update.sh` script to apply the new package to the repository after put the Debian package file.\n- Update the package list for each architecture under `dists/\u003cOS-RELEASE\u003e/main` directory.\n  ```bash\n  $ apt-ftparchive --arch \u003cARCHITECTURE\u003e packages pool \u003e \u003cPATH-TO\u003e/binary-\u003cARCHITECTURE\u003e/Packages\n  ```\n  \u003e If the `apt-ftparchive` has not been installed, install it using `$ sudo apt install apt-utils`.\n- Also update the gzip version of the package list for every new package list.\n  ```bash\n  $ gzip -kf \u003cPATH-TO\u003e/Packages\n  ```\n- Update the release files for each os release under `dists/\u003cOS-RELEASE\u003e` directory.\n  ```bash\n  $ cd dists/\u003cOS-RELEASE\u003e\n  $ cat Distributions \u003e Release\n  $ apt-ftparchive release . \u003e\u003e Release\n  $ gpg --clearsign -o InRelease Release\n  $ gpg -abs -o Release.gpg Release\n  ```\n\n### Serving the Repository on GitHub Page\n\n- Clone this project to your GitHub repository as `repo`.\n- On the repository settings, under the `GitHub Page`, Set the `Source` to be the branch that will be served on the GitHub Page.\n- The repository later could be accessed under `\u003cUSER\u003e.github.io/repo`.\n\n## Using The Repository\n\n### Adding the Public Key\n\n- Public key is used to sign this repository, so it could be accepted by the Debian packaging system in the client computer.\n- Add the public key of the repository to the local system.\n  ```bash\n  $ curl -s \u003cADDRESS-TO\u003e/repo/\u003cKEYNAME\u003e.asc | sudo apt-key add -\n  ```\n\n### Adding the Repository to the Source List\n\n- Add the repository to the source list.\n  ```bash\n  $ sudo sh -c 'echo \"deb [arch=\u003cARCHITECTURE\u003e] \u003cADDRESS-TO\u003e/repo $(lsb_release -sc) main\" \u003e /etc/apt/sources.list.d/\u003cREPOSITORY-NAME\u003e.list'\n  ```\n- Update the package list in repositories.\n  ```bash\n  $ sudo apt update\n  ```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthreeal%2Frepo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fthreeal%2Frepo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fthreeal%2Frepo/lists"}