{"id":13631186,"url":"https://github.com/google/restor","last_synced_at":"2025-04-17T18:32:15.195Z","repository":{"id":40396136,"uuid":"105058953","full_name":"google/restor","owner":"google","description":"Restor is a user-friendly application to (mass) image macOS computers from a single source","archived":true,"fork":false,"pushed_at":"2020-01-31T19:12:03.000Z","size":450,"stargazers_count":227,"open_issues_count":8,"forks_count":37,"subscribers_count":32,"default_branch":"master","last_synced_at":"2024-08-01T22:47:59.887Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Objective-C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/google.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-09-27T19:12:52.000Z","updated_at":"2024-02-24T03:03:56.000Z","dependencies_parsed_at":"2022-08-19T03:50:33.467Z","dependency_job_id":null,"html_url":"https://github.com/google/restor","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Frestor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Frestor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Frestor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/google%2Frestor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/google","download_url":"https://codeload.github.com/google/restor/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223762878,"owners_count":17198384,"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":[],"created_at":"2024-08-01T22:02:14.437Z","updated_at":"2024-11-08T22:31:12.711Z","avatar_url":"https://github.com/google.png","language":"Objective-C","readme":"# Restor\n\nRestor is a user-friendly application to (mass) image macOS computers from a\nsingle source. It is an application intended to be run interactively on a\nmachine.\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"#restor--\"\u003e\n\u003cimg src=\"./images/restor.png\" alt=\"Restor\" /\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\nYou can attach the machine-to-be-imaged via Thunderbolt or USB to the machine\nrunning Restor.\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"#restor_disk_choice--\"\u003e\n\u003cimg src=\"./images/restor_disk_choice.png\" alt=\"Restor Disk Choice\" /\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\nRestor will cache an image once it has been downloaded for future use, and will\nvalidate the image via SHA256. Only if the signature has changed, will the image\nbe downloaded again.\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"#restor_progress--\"\u003e\n\u003cimg src=\"./images/restor_progress.png\" alt=\"Restor Download Progress\" /\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"#restor_validate--\"\u003e\n\u003cimg src=\"./images/restor_validate.png\" alt=\"Restor Image Validation\" /\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\n# Example Configuration\n\nRestor has a few configurable options, 1 of which is required. These can be\nspecified using a local plist (stored at `/Library/Preferences/com.google.corp.restor.plist`)\nor using a Configuration Profile for the com.google.corp.restor domain.\n\n### ConfigURL\n\n__Required__\n\nSet the `ConfigURL` preference to point at a plist containing the images to be\nused.\n\n`sudo defaults write /Library/Preferences/com.google.corp.restor.plist ConfigURL \"http://server/images.plist\"`\n\nThe following format for the plist is required:\n\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\u003eImages\u003c/key\u003e\n\t\u003carray\u003e\n\t\t\u003cdict\u003e\n\t\t\t\u003ckey\u003eName\u003c/key\u003e\n\t\t\t\u003cstring\u003eSierra (10.12) All Models\u003c/string\u003e\n\t\t\t\u003ckey\u003eURL\u003c/key\u003e\n\t\t\t\u003cstring\u003ehttp://server/10.12.6.dmg\u003c/string\u003e\n\t\t\t\u003ckey\u003eSHA-256\u003c/key\u003e\n\t\t\t\u003cstring\u003effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\u003c/string\u003e\n\t\t\u003c/dict\u003e\n\t\u003c/array\u003e\n\u003c/dict\u003e\n\u003c/plist\u003e\n```\n\n### CustomImage\n\n__Optional__\n\nSet the `CustomImage` preference to toggle the use of a local custom image.\n\n`sudo defaults write /Library/Preferences/com.google.corp.restor.plist CustomImage -bool true`\n\n### ConfigCheckInterval\n\n__Optional__\n\nSet how often Restor should download and validate the image configuration in the background.\nSpecified in seconds, defaults to 900 (15 minutes).\n\n`sudo defaults write /Library/Preferences/com.google.corp.restor.plist ConfigCheckInterval -int 600`\n\n### DiskFilterPredicate\n\n__Optional__\n\nAllows you to customize which disks will appear in the Restor UI (or that will\nbe imaged automatically in auto-image mode). The default predicates, which\ncannot be overridden, will filter out internal disks and system volumes such\nas Recovery, VM, Preboot, etc. This key allows you to specify, using\n[NSPredicate](https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/Predicates/AdditionalChapters/Introduction.html#//apple_ref/doc/uid/TP40001789)\nother disks which should not be shown to the user. You can use any of the properties\non the [Disk](https://github.com/google/restor/blob/master/Common/Disk.h#L26)\nobject to create your predicate.\n\nYou can also pass the `--debug-disk-filters` flag to Restor.app to see what effects the predicate is having.\n\nExamples:\n\n* Filter out disks larger than 5TB:\n\n```shell\nsudo defaults write /Library/Preferences/com.google.corp.restor.plist DiskFilterPredicate -string \\\n    \"(diskSize \u003c 5497558138880)\"\n```\n\n* Filter out disks made by Seagate:\n\n```shell\nsudo defaults write /Library/Preferences/com.google.corp.restor.plist DiskFilterPredicate -string \\\n    \"(deviceVendor != 'Seagate')\"\n```\n\n* Filter out disks by their id:\n\n```shell\nsudo defaults write /Library/Preferences/com.google.corp.restor.plist DiskFilterPredicate -string \\\n    \"(bsdName != 'disk3s2')\"\n```\n\n### ASRAttempts\n\n__Optional__\n\nSet how many times Restor should attempt to run ASR until it runs successfully.\nThis may help with issues where the Volume is not unmountable by ASR due to some\nexternal process (ie spotlight) holding onto it.  Defaults to 1.\n\n`sudo defaults write /Library/Preferences/com.google.corp.restor.plist ASRAttempts -int 5`\n\n## 10.13 and APFS Note\n\nIn order to restore an APFS 10.13 DMG to a machine, the host machine running\nRestor must also be upgraded to High Sierra 10.13. Otherwise, you will receive\nan error when attempting to image the machine.\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"#restor_apfs_error--\"\u003e\n\u003cimg src=\"./images/restor_apfs_error.png\" alt=\"Restor APFS Error\" /\u003e\n\u003c/a\u003e\n\u003c/p\u003e\n\n## Building from source\n\nBuilding Restor from source is _not_ required for general usage. Please see the\n[Releases](https://github.com/google/restor/releases) page to download a\npre-compiled version of Restor.\n\n#### Requirements\n\n* Xcode 9+ installed\n* [bazel](https://bazel.build) installed\n* A valid \"Mac Developer\" Signing Certificate from Apple\n* Xcode 9+ command line tools installed\n\n#### Build steps\n\n1. `git clone https://github.com/google/restor.git`\n1. `cd restor`\n1. Find your certificate's common name (CN).\n    ```bash\n    security find-certificate -p -c \"Mac Developer\" | openssl x509 -inform pem -subject | perl -ne '/CN=([\\w :\\(\\)]+)\\// \u0026\u0026 print $1'\n    ```\n1. Edit the `.bazelrc` file, filling in your CN.\n1. Build with the following command, making sure to insert a valid Team Identifier from the previous step.\n    ```bash\n    bazel build //Restor\n    ```\n\nIf the build was successful the last line will contain the path to your\ncompiled Restor.app.\n\n## Contributing\n\nPatches to this library are very much welcome. Please see the\n[CONTRIBUTING](https://github.com/google/restor/blob/master/CONTRIBUTING.md)\nfile.\n","funding_links":[],"categories":["Objective-C"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogle%2Frestor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgoogle%2Frestor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgoogle%2Frestor/lists"}