{"id":13602411,"url":"https://github.com/DtxdF/AppJail","last_synced_at":"2025-04-11T08:32:32.011Z","repository":{"id":61054969,"uuid":"546763529","full_name":"DtxdF/AppJail","owner":"DtxdF","description":"Simple and easy-to-use tool for creating portable jails.","archived":false,"fork":false,"pushed_at":"2024-04-13T08:33:25.000Z","size":3586,"stargazers_count":109,"open_issues_count":0,"forks_count":5,"subscribers_count":5,"default_branch":"main","last_synced_at":"2024-04-14T04:07:09.955Z","etag":null,"topics":["appjail","automation","containers","deployment","freebsd","jail","makejail","manage-freebsd-jails","zfs"],"latest_commit_sha":null,"homepage":"https://appjail.readthedocs.io","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":".github/FUNDING.yml","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},"funding":{"liberapay":"AppJail","custom":["https://paypal.me/DtxdF"],"patreon":"AppJail"}},"created_at":"2022-10-06T15:51:48.000Z","updated_at":"2024-04-16T12:37:20.857Z","dependencies_parsed_at":"2023-02-18T20:15:29.238Z","dependency_job_id":"e56e4e15-0c75-49ea-870d-98f11e693852","html_url":"https://github.com/DtxdF/AppJail","commit_stats":null,"previous_names":[],"tags_count":24,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DtxdF%2FAppJail","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DtxdF%2FAppJail/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DtxdF%2FAppJail/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DtxdF%2FAppJail/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DtxdF","download_url":"https://codeload.github.com/DtxdF/AppJail/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248361633,"owners_count":21090950,"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":["appjail","automation","containers","deployment","freebsd","jail","makejail","manage-freebsd-jails","zfs"],"created_at":"2024-08-01T18:01:22.533Z","updated_at":"2025-04-11T08:32:26.983Z","avatar_url":"https://github.com/DtxdF.png","language":"Shell","funding_links":["https://liberapay.com/AppJail","https://paypal.me/DtxdF","https://patreon.com/AppJail"],"categories":["automation"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n    \u003cimg src=\"assets/img/Slogan.png\" width=\"60%\" height=\"auto\" /\u003e\n\u003c/p\u003e\n\n----\n\n# AppJail\n\nAppJail is an open-source BSD-3 licensed framework entirely written in `sh(1)` and C to create isolated, portable and easy to deploy environments using FreeBSD jails that behaves like an application.\n\nIts goals are to simplify life for sysadmins and developers by providing a unified interface that automates the jail workflow by combining the base FreeBSD tools.\n\n*AppJail offers simple ways to do complex things.*\n\n## Features\n\n* Easy to use.\n* Parallel startup (Healthcheckers, Jails \u0026 NAT).\n* UFS and ZFS support.\n* RACCT/RCTL support.\n* NAT support.\n* Port expose - network port forwarding into jail.\n* IPv4 and IPv6 support.\n* DHCP and SLAAC support.\n* Virtual networks - A jail can be on several virtual networks at the same time.\n* Bridge support.\n* VNET support\n* Deploy your applications much easier using Makejail!\n* Netgraph support.\n* LinuxJails support.\n* Supports thin and thick jails.\n* TinyJails - Experimental feature to create a very stripped down jail that is very useful to distribute.\n* Startup order control - Using priorities and the boot flag makes management much easier.\n* Jail dependency support.\n* Initscripts - Make your jails interactive!\n* Backup your jails using tarballs or raw images (ZFS only) with a single command.\n* Modular structure - each command is a unique file that has its own responsibility in AppJail. This makes AppJail maintenance much easier.\n* Table interface - many commands have a table-like interface, which is very familiar to many sysadmin tools.\n* No databases - each configuration is separated in each entity (networks, jails, etc.) which makes maintenance much easier.\n* Healthcheckers - Monitor your jails and make sure they are healthy!\n* Images - Your jail in a single file!\n* DEVFS support - Dynamic device management!\n* ...\n\n## Documentation\n\n[AppJail Documentation](https://appjail.readthedocs.io/en/latest)\n\n## Comparing AppJail\n\n[How does AppJail compare to other FreeBSD jail frameworks?](https://appjail.readthedocs.io/en/latest/compare/)\n\n## Support\n\n[Need help using AppJail?](https://github.com/DtxdF/AppJail/wiki#support)\n\n## Design decisions\n\n**Characters Allowed**:\n\n* Jail Name, Network Name, Custom Stage and Volume Name: Although jail names can use any character (except `.`), AppJail does not use any possible character. Valid regex is `^[a-zA-Z0-9_][a-zA-Z0-9_-]*$`.\n* Interface Name: For interface names, the regex is `^[a-zA-Z0-9_][a-zA-Z0-9_.]*$`.\n* JNG: For `jng`, the regex is `^[a-zA-Z_]+[a-zA-Z0-9_]*$` and for its links the regex is `^[0-9a-zA-Z_]+$`.\n\n**AppJail tries to not modify the host**:\n\nSuch as making changes to `rc.conf(5)`, `sysctl.conf(5)`, the firewall configuration file, etc. It is preferable that the user is aware of such changes, this simplifies a lot.\n\n**AppJail tries not to be interactive**\n\n**AppJail tries not to play with jails created not by itself**\n\n**AppJail tries not to automate everything**:\n\nInstead of using one command to do a lot of work, it is preferable to combine small commands. A perfect example is `appjail makejail` which leaves the responsibility to the main commands.\n\n**AppJail is not focused on building software**:\n\nThere are very interesting projects like `poudriere` or `synth` that can also create a custom repository. Use that custom repository in a jail created by AppJail to install your ports.\n\n## TODO\n\n- [ ] Add support for `ipfw` and `ipfilter`.\n- [x] Although Makejails can be retrieved anywhere by the methods described in `INCLUDE`, a centralized repository to easily retrieve generic Makejails is useful. This can be done on Github or Gitlab. (See https://github.com/AppJail-makejails).\n- [x] Create Makejails for applications. It is a difficult job to do alone, but with many people it is feasible. (Done using the centralized repository, of course this is in progress anyway).\n- [ ] rc scripts to start resource limitation rules, nat for jails and to expose ports. `appjail quick` and `appjail-config` do this job, but it can be useful to spend less time starting/stopping jails.\n- [X] Implement a supervisor. (Done using a similar way to supervise jails and their services named `Healthcheckers`).\n- [x] Add option to `appjail config` to check if the parameters of a template are valid for `jail(8)`. (Done with the new tool, `appjail-config`)\n- [ ] Implement all `jail(8)` parameters in `appjail quick`.\n- [ ] The `jng` script is useful, but AppJail must create the Netgraph nodes in the same way as bridges and epairs.\n- [X] Man pages:\n  * [X] **appjail(1)**\n  * [X] **appjail-ajspec(5)**\n  * [X] **appjail-apply(1)**\n  * [X] **appjail-checkOld(1)**\n  * [X] **appjail-cmd(1)**\n  * [X] **appjail-cpuset(1)**\n  * [X] **appjail.conf(5)**\n  * [X] **appjail-config(1)**\n  * [X] **appjail-deleteOld(1)**\n  * [X] **appjail-devfs(1)**\n  * [X] **appjail-disable(1)**\n  * [X] **appjail-dns(8)**\n  * [X] **appjail-ephemeral(7)**\n  * [X] **appjail-enable(1)**\n  * [X] **appjail-enabled(1)**\n  * [X] **appjail-etcupdate(1)**\n  * [X] **appjail-expose(1)**\n  * [X] **appjail-fetch(1)**\n  * [X] **appjail-fstab(1)**\n  * [X] **appjail-healthcheck(1)**\n  * [X] **appjail-help(1)**\n  * [X] **appjail-image(1)**\n  * [X] **appjail-initscript(5)**\n  * [X] **appjail-jail(1)**\n  * [X] **appjail-limits(1)**\n  * [X] **appjail-label(1)**\n  * [X] **appjail-login(1)**\n  * [X] **appjail-logs(1)**\n  * [X] **appjail-makejail(1)**\n  * [X] **appjail-makejail(5)**\n  * [X] **appjail-nat(1)**:\n  * [X] **appjail-network(1)**\n  * [X] **appjail-pkg(1)**\n  * [X] **appjail-quick(1)**\n  * [X] **appjail-restart(1)**\n  * [X] **appjail-rstop(1)**\n  * [X] **appjail-run(1)**\n  * [X] **appjail-service(1)**\n  * [X] **appjail-start(1)**\n  * [X] **appjail-startup(1)**\n  * [X] **appjail-status(1)**\n  * [X] **appjail-stop(1)**\n  * [X] **appjail-sysrc(1)**\n  * [X] **appjail-template(5)**\n  * [X] **appjail-tutorial(7)**\n  * [X] **appjail-update(1)**\n  * [X] **appjail-upgrade(1)**\n  * [X] **appjail-usage(1)**\n  * [X] **appjail-user(8)**\n  * [X] **appjail-volume(1)**\n  * [X] **appjail-version(1)**\n  * [X] **appjail-zfs(1)**\n \n## Contributing\n\nIf you have found a bug, have an idea or need help, use the [issue tracker](https://github.com/DtxdF/AppJail/issues/new). Of course, PRs are welcome.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDtxdF%2FAppJail","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FDtxdF%2FAppJail","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FDtxdF%2FAppJail/lists"}