{"action":"created","comment":{"url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/pulls/comments/168793103","pull_request_review_id":97222199,"id":168793103,"diff_hunk":"@@ -1908,16 +1908,166 @@ def is_valid_stage2_device(self, device, linux=True, non_linux=False):\n \n     write_config = BootLoader.write_config\n \n-class MacEFIGRUB(EFIGRUB):\n+class MacEFIGRUB(XenEFI):\n+    \"\"\"Special EFI handling for macOS HFS+ ESP partition.\n+\n+    Typical GRUB2 installations would execute the script\n+    located at /usr/libexec/mactel-boot-setup which would\n+    modify the HFS+ ESP files and bless the specified efi.\n+\n+    However, we are not using GRUB at this time which would\n+    cause that script to exit earlier.  \n+\n+    In this class, we will execute the relevant commands\n+    to symlink the efi file in the /System directory as well\n+    the cfg file.  Lastly, macOS requires the bootable efi\n+    file to be blessed.\n+    \"\"\"\n+\n     def mactel_config(self):\n-        if os.path.exists(iutil.getSysroot() + \"/usr/libexec/mactel-boot-setup\"):\n-            rc = iutil.execInSysroot(\"/usr/libexec/mactel-boot-setup\", [])\n-            if rc:\n-                log.error(\"failed to configure Mac boot loader\")\n+        \"\"\"Modifies the HFS+ ESP partition to be bootable.\n+\n+        Based on the /usr/libexec/mactel-boot-setup script, \n+        we will create two symlinks pointing to the Qubes\n+        Xen version that is installed and configured for\n+        the system.  We also need to run hfs-bless on\n+        the specific EFI file we allow to be bootable.\n+        \"\"\"\n+\n+        log.info(\"Configuring mactel Mac EFI\")\n+\n+        efi_fil = \"{}/{}\".format(self.config_dir, \"xen.efi\")\n+        efi_cfg = \"{}/{}\".format(self.config_dir, \"xen.cfg\")\n+        sys_dir = \"/boot/efi/System/Library/Coreservices\"\n+\n+        not_ready = False\n+        if not os.path.exists(iutil.getSysroot() + efi_fil):\n+            log.error(\"mactel efi_fil not found: %s\", iutil.getSysroot() + efi_fil)\n+            not_ready = True\n+\n+        if not os.path.exists(iutil.getSysroot() + efi_cfg):\n+            log.error(\"mactel efi_cfg not found: %s\", iutil.getSysroot() + efi_cfg)\n+            not_ready = True\n+\n+        if not_ready:\n+            log.error(\"mactel cannot continue with mactel_config. see log for details.\")\n+            return\n+\n+        root_sys_dir = iutil.getSysroot() + sys_dir\n+        if not os.path.exists(root_sys_dir):\n+            try:\n+                os.makedirs(root_sys_dir)\n+            except:\n+                log.warning(\"mactel tried to create root_sys_dir %s but received error\", root_sys_dir)\n+        \n+        sys_efi = \"{}/{}\".format(sys_dir, \"boot.efi\")\n+        rc = iutil.execInSysroot(\"ln\", [\"-f\", efi_fil, sys_efi])","path":"anaconda/pyanaconda/bootloader.py","position":62,"original_position":62,"commit_id":"93ce6170274e5ce85f5d998e73e48357660ca640","original_commit_id":"93ce6170274e5ce85f5d998e73e48357660ca640","user":{"login":"eduncan911","id":104980,"avatar_url":"https://avatars1.githubusercontent.com/u/104980?v=4","gravatar_id":"","url":"https://api.github.com/users/eduncan911","html_url":"https://github.com/eduncan911","followers_url":"https://api.github.com/users/eduncan911/followers","following_url":"https://api.github.com/users/eduncan911/following{/other_user}","gists_url":"https://api.github.com/users/eduncan911/gists{/gist_id}","starred_url":"https://api.github.com/users/eduncan911/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eduncan911/subscriptions","organizations_url":"https://api.github.com/users/eduncan911/orgs","repos_url":"https://api.github.com/users/eduncan911/repos","events_url":"https://api.github.com/users/eduncan911/events{/privacy}","received_events_url":"https://api.github.com/users/eduncan911/received_events","type":"User","site_admin":false},"body":"> Why hardlink for xen.efi, but symlink for xen.cfg? \r\nI followed what all other Mac EFI bootloaders perform (under grub), and that is hardlink the EFI file and softlink the CFG file.  I actually haven't tested trying softlinks for both.  \r\n\r\nObviously, we do what some type of link so not to \"duplicate\" the files - and to allow for future upgrades of the standard location.\r\n\r\nI will test it under softlinks and see how it works.\r\n\r\n> Note that /boot/efi is a separate partition, and may be mounted on different path during system boot (I have no idea how Apple EFI handle it). So, symlinks using absolute path may appear to be broken in some cases. If using symlinks (which IMO is better idea here), then relative path is safer. In this case it would be `\"../../../EFI/{}/xen.efi\".format(self.efi_dir)`.\r\n>\r\n> Why hardlink or symlink: subsequent updates (Xen, kernel etc) will update xen.efi (and/or xen.cfg) in its original path. If we use hardlink here, it may be broken during the update, and old version of Xen (or kernel) will still be used. This may be security issue. On the other hand, if using symlink, there is only one place where the file reside. If will be moved/renamed/deleted, symlink will be broken. This probably will lead to broken system, but it is better (especially in system like Qubes OS) than false sense of security (Xen package updated, but in reality old version is used).\r\n\r\nI completely agree as I did not want to hardcode paths either.  I tried `os.symlink` with relative paths, but since it runs outside of `chroot` it didn't work either. \r\n\r\nI will attempt to use relative paths with the `execInSysroot` method I am using now.\r\n\r\n> Also note that mactel-boot package ship boot.efi file, which I think is GRUB.\r\n\r\nI'd like to remove this package at some point.  But since it installs the `hfs-bless` binary (which is a separate tar within the package), I am not sure that we can anytime soon without writing a whole new package.\r\n\r\n> Since you bless xen.efi, not boot.efi, maybe it is enough to simply remove boot.efi? To avoid time consuming reinstallation, you can try on installed system - mount that partition and remove boot.efi and boot.cfg. But if it doesn't work, try with relative symlinks as in comment above (again - you may want do it manually first, before trying reinstallation).\r\n\r\nThe boot.* files located at `/boot/efi/System/Library/Coreservices` are required for Apple to pick them up for the \"Boot Camp\" and \"Startup Disk\" macOS applications and the macOS `bless` CLI tool for switching and setting defaults for booting.  This is something I rigorously tested on my systems, since there is no public documentation about it.  They have to be there.\r\n\r\nI will switch to a symlink/softlink and test, yep manually first.\r\n\r\nI will also attempt to remove all hardcoded.  \r\n\r\n\r\nPs, this is a lot easier in bash scripting - like the `mactel.boot` package originally had.  :)","created_at":"2018-02-16T15:48:58Z","updated_at":"2018-02-16T15:48:59Z","html_url":"https://github.com/QubesOS/qubes-installer-qubes-os/pull/20#discussion_r168793103","pull_request_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/pulls/20","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/pulls/comments/168793103"},"html":{"href":"https://github.com/QubesOS/qubes-installer-qubes-os/pull/20#discussion_r168793103"},"pull_request":{"href":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/pulls/20"}},"in_reply_to_id":168780180},"pull_request":{"url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/pulls/20","id":169274918,"html_url":"https://github.com/QubesOS/qubes-installer-qubes-os/pull/20","diff_url":"https://github.com/QubesOS/qubes-installer-qubes-os/pull/20.diff","patch_url":"https://github.com/QubesOS/qubes-installer-qubes-os/pull/20.patch","issue_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/issues/20","number":20,"state":"open","locked":false,"title":"Fix macOS EFI Installation","user":{"login":"eduncan911","id":104980,"avatar_url":"https://avatars1.githubusercontent.com/u/104980?v=4","gravatar_id":"","url":"https://api.github.com/users/eduncan911","html_url":"https://github.com/eduncan911","followers_url":"https://api.github.com/users/eduncan911/followers","following_url":"https://api.github.com/users/eduncan911/following{/other_user}","gists_url":"https://api.github.com/users/eduncan911/gists{/gist_id}","starred_url":"https://api.github.com/users/eduncan911/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eduncan911/subscriptions","organizations_url":"https://api.github.com/users/eduncan911/orgs","repos_url":"https://api.github.com/users/eduncan911/repos","events_url":"https://api.github.com/users/eduncan911/events{/privacy}","received_events_url":"https://api.github.com/users/eduncan911/received_events","type":"User","site_admin":false},"body":"Typical GRUB2 installations would execute the script\r\nlocated at /usr/libexec/mactel-boot-setup which would\r\nmodify the HFS+ ESP files and bless the specified efi.\r\nHowever, we are not using GRUB at this time which would\r\ncause that script to exit earlier.\r\n\r\nThese changes will execute the relevant commands\r\nto symlink the efi file in the /System directory as well\r\nthe cfg file.  Lastly, macOS requires the bootable efi\r\nfile to be blessed.\r\n\r\nWe also attempt to place some user-friendly icons\r\nfor Qubes to show to the user.","created_at":"2018-02-15T02:53:19Z","updated_at":"2018-02-16T15:48:59Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7b1c98bbc77a9845b67be2e1b2b44810d7b7b5d9","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/pulls/20/commits","review_comments_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/pulls/20/comments","review_comment_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/pulls/comments{/number}","comments_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/issues/20/comments","statuses_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/statuses/93ce6170274e5ce85f5d998e73e48357660ca640","head":{"label":"eduncan911:macos-efi-2017","ref":"macos-efi-2017","sha":"93ce6170274e5ce85f5d998e73e48357660ca640","user":{"login":"eduncan911","id":104980,"avatar_url":"https://avatars1.githubusercontent.com/u/104980?v=4","gravatar_id":"","url":"https://api.github.com/users/eduncan911","html_url":"https://github.com/eduncan911","followers_url":"https://api.github.com/users/eduncan911/followers","following_url":"https://api.github.com/users/eduncan911/following{/other_user}","gists_url":"https://api.github.com/users/eduncan911/gists{/gist_id}","starred_url":"https://api.github.com/users/eduncan911/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eduncan911/subscriptions","organizations_url":"https://api.github.com/users/eduncan911/orgs","repos_url":"https://api.github.com/users/eduncan911/repos","events_url":"https://api.github.com/users/eduncan911/events{/privacy}","received_events_url":"https://api.github.com/users/eduncan911/received_events","type":"User","site_admin":false},"repo":{"id":121266469,"name":"qubes-installer-qubes-os","full_name":"eduncan911/qubes-installer-qubes-os","owner":{"login":"eduncan911","id":104980,"avatar_url":"https://avatars1.githubusercontent.com/u/104980?v=4","gravatar_id":"","url":"https://api.github.com/users/eduncan911","html_url":"https://github.com/eduncan911","followers_url":"https://api.github.com/users/eduncan911/followers","following_url":"https://api.github.com/users/eduncan911/following{/other_user}","gists_url":"https://api.github.com/users/eduncan911/gists{/gist_id}","starred_url":"https://api.github.com/users/eduncan911/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eduncan911/subscriptions","organizations_url":"https://api.github.com/users/eduncan911/orgs","repos_url":"https://api.github.com/users/eduncan911/repos","events_url":"https://api.github.com/users/eduncan911/events{/privacy}","received_events_url":"https://api.github.com/users/eduncan911/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/eduncan911/qubes-installer-qubes-os","description":"Qubes component: installer-qubes-os","fork":true,"url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os","forks_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/forks","keys_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/keys{/key_id}","collaborators_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/teams","hooks_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/hooks","issue_events_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/issues/events{/number}","events_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/events","assignees_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/assignees{/user}","branches_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/branches{/branch}","tags_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/tags","blobs_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/git/refs{/sha}","trees_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/git/trees{/sha}","statuses_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/statuses/{sha}","languages_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/languages","stargazers_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/stargazers","contributors_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/contributors","subscribers_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/subscribers","subscription_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/subscription","commits_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/commits{/sha}","git_commits_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/git/commits{/sha}","comments_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/comments{/number}","issue_comment_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/issues/comments{/number}","contents_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/contents/{+path}","compare_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/compare/{base}...{head}","merges_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/merges","archive_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/downloads","issues_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/issues{/number}","pulls_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/pulls{/number}","milestones_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/milestones{/number}","notifications_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/labels{/name}","releases_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/releases{/id}","deployments_url":"https://api.github.com/repos/eduncan911/qubes-installer-qubes-os/deployments","created_at":"2018-02-12T15:48:24Z","updated_at":"2018-02-14T12:44:19Z","pushed_at":"2018-02-16T09:28:33Z","git_url":"git://github.com/eduncan911/qubes-installer-qubes-os.git","ssh_url":"git@github.com:eduncan911/qubes-installer-qubes-os.git","clone_url":"https://github.com/eduncan911/qubes-installer-qubes-os.git","svn_url":"https://github.com/eduncan911/qubes-installer-qubes-os","homepage":null,"size":39778,"stargazers_count":1,"watchers_count":1,"language":"HTML","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":1,"default_branch":"master"}},"base":{"label":"QubesOS:master","ref":"master","sha":"13dcbb4c15d9fbe2db586f2621406d82b48e7c9c","user":{"login":"QubesOS","id":10213205,"avatar_url":"https://avatars3.githubusercontent.com/u/10213205?v=4","gravatar_id":"","url":"https://api.github.com/users/QubesOS","html_url":"https://github.com/QubesOS","followers_url":"https://api.github.com/users/QubesOS/followers","following_url":"https://api.github.com/users/QubesOS/following{/other_user}","gists_url":"https://api.github.com/users/QubesOS/gists{/gist_id}","starred_url":"https://api.github.com/users/QubesOS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/QubesOS/subscriptions","organizations_url":"https://api.github.com/users/QubesOS/orgs","repos_url":"https://api.github.com/users/QubesOS/repos","events_url":"https://api.github.com/users/QubesOS/events{/privacy}","received_events_url":"https://api.github.com/users/QubesOS/received_events","type":"Organization","site_admin":false},"repo":{"id":30624163,"name":"qubes-installer-qubes-os","full_name":"QubesOS/qubes-installer-qubes-os","owner":{"login":"QubesOS","id":10213205,"avatar_url":"https://avatars3.githubusercontent.com/u/10213205?v=4","gravatar_id":"","url":"https://api.github.com/users/QubesOS","html_url":"https://github.com/QubesOS","followers_url":"https://api.github.com/users/QubesOS/followers","following_url":"https://api.github.com/users/QubesOS/following{/other_user}","gists_url":"https://api.github.com/users/QubesOS/gists{/gist_id}","starred_url":"https://api.github.com/users/QubesOS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/QubesOS/subscriptions","organizations_url":"https://api.github.com/users/QubesOS/orgs","repos_url":"https://api.github.com/users/QubesOS/repos","events_url":"https://api.github.com/users/QubesOS/events{/privacy}","received_events_url":"https://api.github.com/users/QubesOS/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/QubesOS/qubes-installer-qubes-os","description":"Qubes component: installer-qubes-os","fork":false,"url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os","forks_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/forks","keys_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/keys{/key_id}","collaborators_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/teams","hooks_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/hooks","issue_events_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/issues/events{/number}","events_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/events","assignees_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/assignees{/user}","branches_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/branches{/branch}","tags_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/tags","blobs_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/git/refs{/sha}","trees_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/git/trees{/sha}","statuses_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/statuses/{sha}","languages_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/languages","stargazers_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/stargazers","contributors_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/contributors","subscribers_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/subscribers","subscription_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/subscription","commits_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/commits{/sha}","git_commits_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/git/commits{/sha}","comments_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/comments{/number}","issue_comment_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/issues/comments{/number}","contents_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/contents/{+path}","compare_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/compare/{base}...{head}","merges_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/merges","archive_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/downloads","issues_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/issues{/number}","pulls_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/pulls{/number}","milestones_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/milestones{/number}","notifications_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/labels{/name}","releases_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/releases{/id}","deployments_url":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/deployments","created_at":"2015-02-11T01:27:39Z","updated_at":"2018-01-23T04:46:33Z","pushed_at":"2018-02-16T09:28:34Z","git_url":"git://github.com/QubesOS/qubes-installer-qubes-os.git","ssh_url":"git@github.com:QubesOS/qubes-installer-qubes-os.git","clone_url":"https://github.com/QubesOS/qubes-installer-qubes-os.git","svn_url":"https://github.com/QubesOS/qubes-installer-qubes-os","homepage":null,"size":39814,"stargazers_count":12,"watchers_count":12,"language":"HTML","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":25,"mirror_url":null,"archived":false,"open_issues_count":1,"license":null,"forks":25,"open_issues":1,"watchers":12,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/pulls/20"},"html":{"href":"https://github.com/QubesOS/qubes-installer-qubes-os/pull/20"},"issue":{"href":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/issues/20"},"comments":{"href":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/issues/20/comments"},"review_comments":{"href":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/pulls/20/comments"},"review_comment":{"href":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/pulls/20/commits"},"statuses":{"href":"https://api.github.com/repos/QubesOS/qubes-installer-qubes-os/statuses/93ce6170274e5ce85f5d998e73e48357660ca640"}},"author_association":"NONE"}}
{"actor":{"display_login":"eduncan911"}}