Update shared Gaia workflows and Sargo development tooling
Fix camera switching and Contacts/SMS activity routing across shared hosts. Integrate Marketplace installation and native standalone recovery tools, Bluetooth runtime packages and trusted certificates. Update English/French READMEs and the shared changelog with tested scope and remaining radio/audio/Bluetooth limitations. Preview17 remains the existing APK; no new native image is released. Validation: shared JavaScript and native Python tests; Android packaging and payload parity from an isolated publication checkout.
This commit is contained in:
parent
d04824ec89
commit
0041cd9660
101 changed files with 3883 additions and 335 deletions
35
tundra/tools/standalone_volume.py
Normal file
35
tundra/tools/standalone_volume.py
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# SPDX-License-Identifier: MPL-2.0
|
||||
"""Validate the fresh userdata filesystem used by standalone Sargo images."""
|
||||
import json
|
||||
from pathlib import Path
|
||||
import re
|
||||
import uuid
|
||||
from tundra import digest
|
||||
|
||||
|
||||
def checked_volume(path, verify_image=True):
|
||||
path = Path(path)
|
||||
value = json.loads(path.read_text())
|
||||
if (value.get('schema') != 1 or value.get('device') != 'sargo'
|
||||
or value.get('storage') != 'raw-userdata-ext4'
|
||||
or value.get('image') != 'userdata.ext4'
|
||||
or value.get('filesystemCheckPassed') is not True):
|
||||
raise ValueError('Expected a checked standalone Sargo volume')
|
||||
identifier = value.get('uuid')
|
||||
if not isinstance(identifier, str) or str(uuid.UUID(identifier)) != identifier:
|
||||
raise ValueError('Invalid volume UUID')
|
||||
for key in ('imageSha256', 'systemImageSha256'):
|
||||
if not re.fullmatch(r'[a-f0-9]{64}', value.get(key, '')):
|
||||
raise ValueError('Invalid '+key)
|
||||
if type(value.get('bytes')) is not int or not 5*1024**3 <= value['bytes'] <= 32*1024**3:
|
||||
raise ValueError('Invalid standalone filesystem size')
|
||||
hardware = value.get('hardwareImages', {})
|
||||
if hardware:
|
||||
lock = json.loads((Path(__file__).resolve().parents[1]/'manifests/sargo-hardware.json').read_text())
|
||||
if hardware != lock['images']:
|
||||
raise ValueError('Unqualified standalone hardware images')
|
||||
if verify_image:
|
||||
image = path.parent/value['image']
|
||||
if image.is_symlink() or image.stat().st_size != value['bytes'] or digest(image) != value['imageSha256']:
|
||||
raise ValueError('Standalone volume changed')
|
||||
return value
|
||||
Loading…
Reference in a new issue