{"id":45868416,"url":"https://github.com/dtxdf/reproduce","last_synced_at":"2026-03-08T20:03:26.165Z","repository":{"id":209354616,"uuid":"723820842","full_name":"DtxdF/reproduce","owner":"DtxdF","description":"AppJail image builder.","archived":false,"fork":false,"pushed_at":"2025-11-14T06:23:39.000Z","size":98,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-11-14T07:16:09.731Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DtxdF.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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-11-26T21:07:06.000Z","updated_at":"2025-11-14T06:23:40.000Z","dependencies_parsed_at":"2023-12-16T05:39:58.970Z","dependency_job_id":"ec5963fc-b4ba-41de-9797-63e0721f80a6","html_url":"https://github.com/DtxdF/reproduce","commit_stats":null,"previous_names":["dtxdf/reproduce"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/DtxdF/reproduce","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DtxdF%2Freproduce","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DtxdF%2Freproduce/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DtxdF%2Freproduce/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DtxdF%2Freproduce/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DtxdF","download_url":"https://codeload.github.com/DtxdF/reproduce/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DtxdF%2Freproduce/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29888799,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-27T08:34:21.514Z","status":"ssl_error","status_checked_at":"2026-02-27T08:32:38.035Z","response_time":57,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":[],"created_at":"2026-02-27T09:02:11.101Z","updated_at":"2026-03-08T20:03:26.158Z","avatar_url":"https://github.com/DtxdF.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AppJail Reproduce\n\nAppJail Reproduce is a small open source BSD-3 licensed tool for automating the creation of images using Makejails, scripts and simple text files, providing a common workflow and simplifying many things.\n\n## Quick Start\n\nReproduce is quite simple to use. Just tell it what project to build and it will do the hard work.\n\n```sh\nappjail-reproduce -b hello\n```\n\nThe above command assumes that you have cloned the projects repository, but if you have not yet done so:\n\n```\nmkdir -p ~/.reproduce\ngit clone https://github.com/DtxdF/reproduce-projects.git ~/.reproduce/projects\n```\n\n## Installation\n\n```sh\ngit clone https://github.com/DtxdF/reproduce.git\ncd reproduce\nmake install\n```\n\n### Note about non-root users\n\nIf you want to run Reproduce with a non-root user, you must [configure AppJail to do so](https://appjail.readthedocs.io/en/latest/trusted-users/).\n\n## Building a Project\n\n### Build all projects\n\n```sh\nappjail-reproduce -b\n```\n\n### Build a project\n\n```sh\nappjail-reproduce -b hello\n```\n\n### Build a project with a specific tag\n\n```sh\nappjail-reproduce -b hello:13.2,14.0\n```\n\n### Build a project with a specific architecture\n\n```sh\nappjail-reproduce -b hello%amd64,i386\n```\n\n### Build a project with a specific tag \u0026 architecture\n\n```sh\nappjail-reproduce -b hello%amd64,i386:13.2,14.0\n```\n\n### Build projects with a specific tag \u0026 architecture\n\n```sh\nappjail-reproduce -b \\\n    hello%amd64,i386:13.2,14.0 \\\n    wordpress-apache%amd64:13.2-php82-apache-6.4.1\n```\n\n### Notes\n\nThe above examples are demonstrative only, it does not mean that they can be built for a specific architecture or use a specific tag. Refer to the [projects repository](https://github.com/DtxdF/reproduce-projects) or the documentation of the image you want to build.\n\n## Configuration\n\nCreate the configuration directory:\n\n```sh\nmkdir -p ~/.config/appjail-reproduce\n```\n\nSet the parameters described in `reproduce-spec(5)` in the `~/.config/appjail-reproduce/config.conf` file or the one pointed to by the `-c` flag.\n\n### Sample Project\n\n```\n# tree ~/.reproduce/projects/hello\n/root/.reproduce/projects/hello\n├── Makejail\n├── reproduce.conf\n└── toremove.lst\n\n1 directory, 3 files\n# cat ~/.reproduce/projects/hello/Makejail\nINCLUDE gh+AppJail-makejails/hello --file build.makejail\n# cat ~/.reproduce/projects/hello/reproduce.conf\ntags: 13.2/13.2-RELEASE 14.0/14.0-RELEASE\narch: amd64\n# cat ~/.reproduce/projects/hello/toremove.lst\n-f var/log/*\n-f var/cache/pkg/*\n-rf usr/local/etc/pkg\n-f var/run/* 2\u003e /dev/null || :\n```\n\n## Notes\n\n* Before creating an image, Reproduce will remove it, so backup the image if you want to keep it.\n* All jails explicitly created by Reproduce will be named using a random UUID (version 4) and `JAIL_PREFIX`. Reproduce will stop and remove the jail when necessary.\n\n## Recommendations\n\n### Set threads for XZ \u0026 ZSTD\n\n**/usr/local/etc/appjail/appjail.conf**:\n\n```\nTAR_XZ_ARGS=\"--xz --options xz:threads=0\"\nTAR_ZSTD_ARGS=\"--zstd --options zstd:threads=0\"\n```\n\n### PkgCache\n\n```sh\nappjail makejail -j pkgcache -f gh+AppJail-makejails/pkgcache \\\n    -o virtualnet=\":\u003crandom\u003e default\" \\\n    -o nat\nservice appjail-health restart\n```\n\n**~/.config/appjail-reproduce/config.conf**:\n\n```\nBEFORE_MAKEJAILS=/root/reproduce/main.makejail\n```\n\n**/root/reproduce/main.makejail**:\n\n```\nINCLUDE pkg.makejail\n```\n\n**/root/reproduce/pkg.makejail**:\n\n```\nCMD mkdir -p /usr/local/etc/pkg/repos\nCOPY Mirror.conf /usr/local/etc/pkg/repos\n```\n\n**/root/reproduce/Mirror.conf**:\n\n```\nFreeBSD: {\n  url: \"http://pkgcache/${ABI}/latest\",\n  mirror_type: \"http\",\n  signature_type: \"fingerprints\",\n  fingerprints: \"/usr/share/keys/pkg\",\n  enabled: yes\n}\n```\n\n**See also**: https://appjail.readthedocs.io/en/latest/configure/\n\n## Contributing\n\nIf you have found a bug, have an idea or need help, use the [issue tracker](https://github.com/DtxdF/reproduce/issues/new). Of course, PRs are welcome.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdtxdf%2Freproduce","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdtxdf%2Freproduce","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdtxdf%2Freproduce/lists"}