Skip to content

Commit 8641e3c

Browse files
committed
Add some logging
Signed-off-by: Hector Martin <[email protected]>
1 parent 4adecaa commit 8641e3c

7 files changed

Lines changed: 43 additions & 23 deletions

File tree

src/diskutil.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# SPDX-License-Identifier: MIT
2-
import plistlib, subprocess, sys
2+
import plistlib, subprocess, sys, logging
33
from dataclasses import dataclass
44

55
@dataclass
@@ -21,21 +21,23 @@ def __init__(self):
2121
self.verbose = "-v" in sys.argv
2222

2323
def action(self, *args, verbose=False):
24-
if verbose and self.verbose:
25-
print(" + diskutil " + " ".join(args))
24+
logging.info(f"run: diskutil {args!r}")
2625
subprocess.run(["diskutil"] + list(args), check=True, capture_output=(not self.verbose))
2726

2827
def get(self, *args):
28+
logging.info(f"get: diskutil {args!r}")
2929
result = subprocess.run(["diskutil"] + list(args),
3030
stdout=subprocess.PIPE, check=True)
3131
return plistlib.loads(result.stdout)
3232

3333
def get_list(self):
34+
logging.info(f"DiskUtil.get_list()")
3435
self.list = self.get("list", "-plist")
3536
self.disk_list = self.list["WholeDisks"]
3637
self.disk_parts = {dsk["DeviceIdentifier"]: dsk for dsk in self.list["AllDisksAndPartitions"]}
3738

3839
def get_apfs_list(self, dev=None):
40+
logging.info(f"DiskUtil.get_apfs_list()")
3941
if dev:
4042
apfs = self.get("apfs", "list", dev, "-plist")
4143
else:
@@ -47,18 +49,21 @@ def get_apfs_list(self, dev=None):
4749
self.ctnr_by_store[ctnr["DesignatedPhysicalStore"]] = ctnr
4850

4951
def get_disk_info(self):
52+
logging.info(f"DiskUtil.get_disk_info()")
5053
self.disks = {}
5154
for i in self.disk_list:
5255
self.disks[i] = self.get("info", "-plist", i)
5356

5457
def get_info(self):
58+
logging.info(f"DiskUtil.get_info()")
5559
self.get_list()
5660
self.ctnr_by_ref = {}
5761
self.ctnr_by_store = {}
5862
self.get_apfs_list()
5963
self.get_disk_info()
6064

6165
def find_system_disk(self):
66+
logging.info(f"DiskUtil.find_system_disk()")
6267
for name, dsk in self.disks.items():
6368
try:
6469
if dsk["VirtualOrPhysical"] == "Virtual":
@@ -67,12 +72,14 @@ def find_system_disk(self):
6772
continue
6873
parts = self.disk_parts[name]["Partitions"]
6974
if parts[0]["Content"] == "Apple_APFS_ISC":
75+
logging.info(f"System disk: {name}")
7076
return name
7177
except (KeyError, IndexError):
7278
continue
7379
raise Exception("Could not find system disk")
7480

7581
def get_partition_info(self, dev, refresh_apfs=False):
82+
logging.info(f"DiskUtil.get_partition_info({dev=!r}, {refresh_apfs=!r})")
7683
partinfo = self.get("info", "-plist", dev)
7784
off = partinfo["PartitionMapPartitionOffset"]
7885
part = Partition(name=partinfo["DeviceIdentifier"], free=False,
@@ -96,6 +103,7 @@ def get_partition_info(self, dev, refresh_apfs=False):
96103
return part
97104

98105
def get_partitions(self, dskname):
106+
logging.info(f"DiskUtil.get_partitions({dskname!r})")
99107
dsk = self.disk_parts[dskname]
100108
parts = []
101109
total_size = dsk["Size"]
@@ -120,6 +128,7 @@ def get_partitions(self, dskname):
120128
return parts2
121129

122130
def refresh_part(self, part):
131+
logging.info(f"DiskUtil.refresh_part({part.name=!r})")
123132
self.get_apfs_list(part.container["ContainerReference"])
124133
part.container = self.ctnr_by_store[part.name]
125134

src/firmware/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# SPDX-License-Identifier: MIT
2-
import tarfile, io, os
2+
import tarfile, io, os, logging
33
from hashlib import sha256
44

55
class FWFile(object):
@@ -42,6 +42,7 @@ def add_file(self, name, data):
4242
self.hashes[data.sha] = name
4343
self.manifest.append(f"FILE {name} SHA256 {data.sha}")
4444

45+
logging.info(f"+ {self.manifest[-1]}")
4546
self.tarfile.addfile(ti, fd)
4647

4748
def add_files(self, it):

src/firmware/wifi.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# SPDX-License-Identifier: MIT
2-
import sys, os, os.path, pprint, statistics
2+
import sys, os, os.path, pprint, statistics, logging
33

44
from . import FWFile
55

src/main.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,4 +446,6 @@ def main(self):
446446
sys.exit(0)
447447

448448
if __name__ == "__main__":
449+
logging.basicConfig(level=logging.INFO)
450+
logging.info("Startup")
449451
InstallerMain().main()

src/stub.py

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# SPDX-License-Identifier: MIT
2-
import os, plistlib, shutil, sys, stat, subprocess, urlcache, zipfile
2+
import os, os.path, plistlib, shutil, sys, stat, subprocess, urlcache, zipfile, logging
33
import osenum
44
from util import split_ver
55

@@ -18,13 +18,15 @@ def __init__(self, sysinfo, dutil, osinfo, ipsw_info):
1818
print()
1919

2020
def prepare_volume(self, part):
21+
logging.info(f"StubInstaller.prepare_volume({part.name=!r})")
2122
self.part = part
2223

2324
by_role = {}
2425

2526
ctref = self.part.container["ContainerReference"]
2627

2728
print("Preparing target volumes...")
29+
logging.info("Preparing target volumes")
2830

2931
for volume in self.part.container["Volumes"]:
3032
by_role.setdefault(tuple(volume["Roles"]), []).append(volume)
@@ -62,13 +64,13 @@ def prepare_volume(self, part):
6264
self.dutil.addVolume(ctref, "Recovery", role="R")
6365

6466
self.dutil.refresh_part(self.part)
65-
if self.verbose:
66-
print()
6767

6868
def check_volume(self, part=None):
6969
if part:
7070
self.part = part
7171

72+
logging.info(f"StubInstaller.check_volume({self.part.name=!r})")
73+
7274
print("Checking volumes...")
7375
os = self.osinfo.collect_part(self.part)
7476

@@ -133,14 +135,19 @@ def extract_tree(self, src, dest):
133135
self.ucache.flush_progress()
134136

135137
def chflags(self, flags, path):
138+
logging.info(f"chflags {flags} {path}")
136139
subprocess.run(["chflags", flags, path], check=True)
137140

138141
def install_files(self, cur_os):
142+
logging.info("StubInstaller.install_files()")
143+
logging.info(f"VGID: {self.osi.vgid}")
144+
logging.info(f"OS info: {self.osi}")
145+
139146
print("Beginning stub OS install...")
140147
ipsw = self.ipsw
141148

142-
if self.verbose:
143-
print("Parsing metadata...")
149+
logging.info("Parsing metadata...")
150+
144151
sysver = plistlib.load(ipsw.open("SystemVersion.plist"))
145152
manifest = plistlib.load(ipsw.open("BuildManifest.plist"))
146153
bootcaches = plistlib.load(ipsw.open("usr/standalone/bootcaches.plist"))
@@ -157,13 +164,12 @@ def install_files(self, cur_os):
157164
else:
158165
raise Exception("Failed to locate a usable build identity for this device")
159166

160-
if self.verbose:
161-
print(f'Using OS build {identity["Info"]["BuildNumber"]} for {self.sysinfo.device_class}')
162-
print()
167+
logging.info(f'Using OS build {identity["Info"]["BuildNumber"]} for {self.sysinfo.device_class}')
163168

164169
manifest["BuildIdentities"] = [identity]
165170

166171
print("Setting up System volume...")
172+
logging.info("Setting up System volume")
167173

168174
self.extract("usr/standalone/bootcaches.plist", self.osi.system)
169175
shutil.copy("logo.icns", os.path.join(self.osi.system, ".VolumeIcon.icns"))
@@ -178,6 +184,7 @@ def install_files(self, cur_os):
178184

179185
# Make the icon work
180186
try:
187+
logging.info(f"xattr -wx com.apple.FinderInfo .... {self.osi.system}")
181188
subprocess.run(["xattr", "-wx", "com.apple.FinderInfo",
182189
"0000000000000000040000000000000000000000000000000000000000000000",
183190
self.osi.system], check=True)
@@ -198,12 +205,12 @@ def install_files(self, cur_os):
198205
if self.verbose:
199206
print()
200207
print("Setting up Data volume...")
208+
logging.info("Setting up Data volume")
201209

202210
os.makedirs(os.path.join(self.osi.data, "private/var/db/dslocal"), exist_ok=True)
203211

204-
if self.verbose:
205-
print()
206212
print("Setting up Preboot volume...")
213+
logging.info("Setting up Preboot volume")
207214

208215
pb_vgid = os.path.join(self.osi.preboot, self.osi.vgid)
209216
os.makedirs(pb_vgid, exist_ok=True)
@@ -255,21 +262,20 @@ def install_files(self, cur_os):
255262
os.unlink(sys_restore_bundle)
256263
os.symlink(restore_bundle, sys_restore_bundle)
257264

258-
if self.verbose:
259-
print()
260265
print("Setting up Recovery volume...")
266+
logging.info("Setting up Recovery volume")
261267

262268
rec_vgid = os.path.join(self.osi.recovery, self.osi.vgid)
263269
os.makedirs(rec_vgid, exist_ok=True)
264270

265271
basesystem_path = os.path.join(rec_vgid, "usr/standalone/firmware")
266272
os.makedirs(basesystem_path, exist_ok=True)
267273

274+
logging.info("Extracting arm64eBaseSystem.dmg")
268275
self.extract_file(identity["Manifest"]["BaseSystem"]["Info"]["Path"],
269276
os.path.join(basesystem_path, "arm64eBaseSystem.dmg"))
270277
self.ucache.flush_progress()
271278

272-
if self.verbose:
273-
print()
274279
print("Stub OS installation complete.")
280+
logging.info("Stub OS installed")
275281
print()

src/urlcache.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# SPDX-License-Identifier: MIT
2-
import os, sys, os.path, time
2+
import os, sys, os.path, time, logging
33
from dataclasses import dataclass
44

55
from urllib import request
@@ -45,7 +45,8 @@ def get_partial(self, off, size):
4545
return fd.read()
4646

4747
def get_block(self, blk):
48-
#print("get_block", blk)
48+
logging.debug(f"get_block {blk}")
49+
4950
if blk in self.cache:
5051
return self.cache[blk]
5152

@@ -61,11 +62,12 @@ def get_block(self, blk):
6162
retries = 5
6263
for retry in range(retries + 1):
6364
try:
65+
logging.debug(f"get_partial {off} {size}")
6466
data = self.get_partial(off, size)
6567
except Exception as e:
6668
if retry == retries:
6769
print(f"Exceeded maximum retries downloading data.")
68-
sys.exit(1)
70+
raise
6971
print(f"Error downloading data ({e}), retrying... ({retry + 1}/{retries})")
7072
time.sleep(1)
7173
else:

src/util.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# SPDX-License-Identifier: MIT
2-
import re
2+
import re, logging
33

44
def ssize(v):
55
suffixes = ["B", "KB", "MB", "GB", "TB"]

0 commit comments

Comments
 (0)