{"id":21188754,"url":"https://github.com/128keaton/builder","last_synced_at":"2026-05-08T15:04:51.798Z","repository":{"id":145011660,"uuid":"274562869","full_name":"128keaton/Builder","owner":"128keaton","description":"A Bash-based Netboot creation utility ","archived":false,"fork":false,"pushed_at":"2020-06-24T03:34:21.000Z","size":98,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-14T20:34:25.828Z","etag":null,"topics":["bash","macos","netboot"],"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/128keaton.png","metadata":{"files":{"readme":"README.md","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}},"created_at":"2020-06-24T03:10:23.000Z","updated_at":"2021-04-26T09:45:55.000Z","dependencies_parsed_at":"2023-07-14T16:03:23.505Z","dependency_job_id":null,"html_url":"https://github.com/128keaton/Builder","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/128keaton/Builder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/128keaton%2FBuilder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/128keaton%2FBuilder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/128keaton%2FBuilder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/128keaton%2FBuilder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/128keaton","download_url":"https://codeload.github.com/128keaton/Builder/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/128keaton%2FBuilder/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265360779,"owners_count":23752780,"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":["bash","macos","netboot"],"created_at":"2024-11-20T18:47:51.084Z","updated_at":"2026-05-08T15:04:46.778Z","avatar_url":"https://github.com/128keaton.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n\t\u003cimg width=\"350px\" src=\"https://github.com/128keaton/Builder/blob/master/builder-logo.png?raw=true\"\u003e\n\u003c/p\u003e\n\nAn all-in-one NetBoot creation tool that supports package, application, and launch item support. Works inconjunction with AutoDMG.\n\n\n## Features\n* Downloads and installs Xcode Command Line tools (python3 is required for outset)\n* Downloads and installs `outset`, `set-desktop-catalina.sh`, `dockutil`, `pycreateuserpkg`\n* Clones, builds, and installs macOS Utilities from source\n* Automagically packages our custom payload\n* Sets the network time-server and timezone.\n* Compresses the NetBoot set when complete.\n* Reuse of a previously created image, useful for quick updates.\n\n\n## Usage\n### Prerequisites\n\nPlease download and install these dependencies before continuing.\n\n* [Homebrew](https://brew.sh)\n* [AutoDMG](https://github.com/MagerValp/AutoDMG/releases)\n* wget (use `brew install wget`)\n\n### 1. Building a base macOS image\n\nMake sure you have downloaded a copy of 'Install macOS Catalina' and it is in your Applications folder before continuing.\n\nFirst, run the `wrap-catalina.sh` located in `Other/Scripts/`\n```bash\n$ cd Other/Scripts/ \u0026\u0026 wrap-catalina.sh\n```\n\nWhen done, there should be a mounted volume named 'Catalina' with the installer app inside the root folder. \n\nOpen AutoDMG and drag the application from the Finder window to AutoDMG\nClick 'Build'\n\n### 2. Building a NetBoot set\n\n**Please rename the `builder.example.conf` to `builder.conf` and configure appropriately**\n\n\nOnce you have your clean image from AutoDMG, make sure you have it ready.\n\nRun the `builder.sh` script like so:\n```bash\n$ ./builder.sh\n```\n\nThe script will prompt you automatically for a super user password, no need to run as root.\n\n## Flags\n1.  `--skip-packages` or `-skippkg`\n\nSet this to `true` if you want to skip installing packages on the NetBoot volume. \nThis can greatly speed up building if you are troubleshooting.\n```bash\n$ ./builder.sh --skip-packages=true \n```\n\n\n2. `--base-disk-image` or `-dmg`\n\nSet this to the path of your base system disk image so you aren't prompted to input the disk image.\n```bash\n$ ./builder.sh --base-disk-image=/Volumes/Scratch/osx-10.15.5-19F2200.apfs.dmg \n```\n\n## Adding Things\n### Packages:\nSimply put your `.pkg` file in `Packages/`. The package should be installed automatically when bundling.\n\n### Downloaded Packages:\nAppend your package URL to the `packages.plist` file in `Configuration/` and it will automatically be downloaded and installed.\n\n### Applications:\nPut your `.app` in `Applications/`, and it will automatically be installed.\n\n### Applications to build:\nThis requires a bit of setup. Basically, your app needs to be hosted on a Git repository somewhere accessible via HTTP/SSH. \nThen, the builder script looks for a `build.sh` script in the project root. Look at the [example](https://github.com/128keaton/macOS-Utilities/blob/05893bc91787667e5ab285f9f1d3067b6fce572a/build.sh)\n here for an idea of whats expected. Essentially, the script needs to build and archive the application and copy the `.app` into a folder `Output/` in the app project root.\n If you've done all of that, then just add your repo URL to the `packages.plist` file in `Configuration`.\n \n### Downloaded Scripts:\n*Note: The script must be publicly accessible via HTTP/S*\n\nAdd the script URL to the `scripts.plist` file in `Configuration` and it will be automatically downloaded and installed\n\n### Login Items:\nTo add a `LaunchAgent` property list to the system, create a new `.plist` in the `LoginItems` folder in the root of the project.\n\nHere is an example, `com.autonbi.LaunchBarTimer.plist`\n```xml\n\u003c?xml version=\"1.0\" encoding=\"UTF-8\"?\u003e\n\u003c!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/PropertyList-1.0.dtd\"\u003e\n\u003cplist version=\"1.0\"\u003e\n\u003cdict\u003e\n\t\u003ckey\u003eLabel\u003c/key\u003e\n\t\u003cstring\u003ecom.autonbi.LaunchBarTimer\u003c/string\u003e\n\t\u003ckey\u003eProgramArguments\u003c/key\u003e\n\t\u003carray\u003e\n\t\t\u003cstring\u003eopen\u003c/string\u003e\n\t\t\u003cstring\u003e-a\u003c/string\u003e\n\t\t\u003cstring\u003e/Applications/BarTimer.app\u003c/string\u003e\n\t\u003c/array\u003e\n\t\u003ckey\u003eRunAtLoad\u003c/key\u003e\n\t\u003ctrue/\u003e\n\u003c/dict\u003e\n\u003c/plist\u003e\n```\n\nThe `Label` setting needs to match the name of the `.plist`, omitting the extension.\nIf you wanted to say a message with the built-in TTS system, you could set the `ProgramArguments` array to:\n```xml\n\u003carray\u003e\n\t\u003cstring\u003esay\u003c/string\u003e\n\t\u003cstring\u003e\"Hello World\"\u003c/string\u003e\n\u003c/array\u003e\n```\n\n## Creating installation media\nFirst, download an `Install macOS XXX.app`.\nNext, run the command below, replacing the variables with the appropriate file paths:\n```bash\nsudo hdiutil create -srcfolder /path/to/your/Install\\ macOS\\ Blah.app ~/Desktop/Output.dmg\n```\n\nFinally, move the resulting disk image to your NFS share.\n\n## Troubleshooting\n*You done sauced it, didn't ya?*\n\n### Build errors on built Application\nMake sure your repository is the *same name* as the final `.app` name. Sorry!\n\n## Notes\n* You can use tab completion on the prompt for a base system.\n\n## Known Issues\n\n**10.15.x**\n* Applescript features do not function\n \n## Credits\n* [MacMule](https://macmule.com/) - Creator of AutoCasperNBI, from much was borrowed\n* [Greg Neagle](https://github.com/gregneagle/pycreateuserpkg) - Creator of pycreateuserpkg, for without we'd have no users\n* [Stéphane Sudre](http://s.sudre.free.fr/index.html) - Creator of Packages, also creator of a _great_ website\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F128keaton%2Fbuilder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F128keaton%2Fbuilder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F128keaton%2Fbuilder/lists"}