's'
This commit is contained in:
143
android13/patch_bootstrap.py
Normal file
143
android13/patch_bootstrap.py
Normal file
@@ -0,0 +1,143 @@
|
||||
from pathlib import Path
|
||||
path = Path('/home/eric/redroid-android13/bootstrap_redroid.py')
|
||||
text = path.read_text()
|
||||
old = ''' def connect(self):
|
||||
if self.mode == "adb" and ":" in self.serial:
|
||||
run(["adb", "connect", self.serial], check=False)
|
||||
|
||||
def has_root(self):
|
||||
if self.mode == "container":
|
||||
return True
|
||||
if not self._root_checked or not self._root_available:
|
||||
result = adb(
|
||||
self.serial,
|
||||
["shell", "su", "-mm", "-c", "id"],
|
||||
check=False,
|
||||
capture_output=True,
|
||||
)
|
||||
self._root_available = result.returncode == 0 and "uid=0(" in result.stdout
|
||||
self._root_checked = self._root_available
|
||||
return self._root_available
|
||||
|
||||
def wait_for_root(self, timeout):
|
||||
if self.mode == "container":
|
||||
return True
|
||||
deadline = time.time() + timeout
|
||||
while time.time() < deadline:
|
||||
if self.has_root():
|
||||
return True
|
||||
time.sleep(2)
|
||||
return False
|
||||
|
||||
def exec_shell(self, command, check=True, capture_output=False, root=False):
|
||||
if self.mode == "container":
|
||||
return run(
|
||||
[
|
||||
self.container_runtime,
|
||||
"exec",
|
||||
self.container_name,
|
||||
"/system/bin/sh",
|
||||
"-c",
|
||||
command,
|
||||
],
|
||||
check=check,
|
||||
capture_output=capture_output,
|
||||
)
|
||||
if root and self.has_root():
|
||||
return adb(
|
||||
self.serial,
|
||||
["shell", "su", "-mm", "-c", command],
|
||||
check=check,
|
||||
capture_output=capture_output,
|
||||
)
|
||||
return adb(
|
||||
self.serial,
|
||||
["shell", command],
|
||||
check=check,
|
||||
capture_output=capture_output,
|
||||
)
|
||||
'''
|
||||
new = ''' def connect(self):
|
||||
if self.mode == "adb" and ":" in self.serial:
|
||||
run(["adb", "connect", self.serial], check=False)
|
||||
|
||||
def _root_probe_args(self):
|
||||
return [
|
||||
["shell", "su", "root", "id"],
|
||||
["shell", "su", "0", "id"],
|
||||
]
|
||||
|
||||
def _root_shell_args(self, command):
|
||||
return [
|
||||
["shell", "su", "root", "sh", "-c", command],
|
||||
["shell", "su", "0", "sh", "-c", command],
|
||||
]
|
||||
|
||||
def has_root(self):
|
||||
if self.mode == "container":
|
||||
return True
|
||||
if not self._root_checked or not self._root_available:
|
||||
for args in self._root_probe_args():
|
||||
result = adb(
|
||||
self.serial,
|
||||
args,
|
||||
check=False,
|
||||
capture_output=True,
|
||||
)
|
||||
if result.returncode == 0 and "uid=0(" in result.stdout:
|
||||
self._root_available = True
|
||||
self._root_checked = True
|
||||
return True
|
||||
self._root_available = False
|
||||
self._root_checked = False
|
||||
return self._root_available
|
||||
|
||||
def wait_for_root(self, timeout):
|
||||
if self.mode == "container":
|
||||
return True
|
||||
deadline = time.time() + timeout
|
||||
while time.time() < deadline:
|
||||
if self.has_root():
|
||||
return True
|
||||
time.sleep(2)
|
||||
return False
|
||||
|
||||
def exec_shell(self, command, check=True, capture_output=False, root=False):
|
||||
if self.mode == "container":
|
||||
return run(
|
||||
[
|
||||
self.container_runtime,
|
||||
"exec",
|
||||
self.container_name,
|
||||
"/system/bin/sh",
|
||||
"-c",
|
||||
command,
|
||||
],
|
||||
check=check,
|
||||
capture_output=capture_output,
|
||||
)
|
||||
if root and self.has_root():
|
||||
last_result = None
|
||||
for args in self._root_shell_args(command):
|
||||
result = adb(
|
||||
self.serial,
|
||||
args,
|
||||
check=False,
|
||||
capture_output=capture_output,
|
||||
)
|
||||
last_result = result
|
||||
if result.returncode == 0:
|
||||
return result
|
||||
if check and last_result is not None:
|
||||
last_result.check_returncode()
|
||||
return last_result
|
||||
return adb(
|
||||
self.serial,
|
||||
["shell", command],
|
||||
check=check,
|
||||
capture_output=capture_output,
|
||||
)
|
||||
'''
|
||||
if old not in text:
|
||||
raise SystemExit('expected bootstrap_redroid.py block not found')
|
||||
path.write_text(text.replace(old, new))
|
||||
Reference in New Issue
Block a user