28 lines
1.3 KiB
Python
28 lines
1.3 KiB
Python
#!/usr/bin/env python3
|
|
"""Guest-only baseline acquisition: actual authenticated APT, no OS OTA claim."""
|
|
import hashlib
|
|
import json
|
|
from pathlib import Path
|
|
import subprocess
|
|
|
|
assert Path('/sys/class/dmi/id/product_name').read_text().strip() in ('Standard PC (i440FX + PIIX, 1996)', 'Standard PC (Q35 + ICH9, 2009)')
|
|
assert subprocess.check_output(['findmnt', '-n', '-o', 'SOURCE', '/'], text=True).strip() == '/dev/vda'
|
|
|
|
def run(*args):
|
|
print('COMMAND', args, flush=True)
|
|
return subprocess.check_output(args, text=True, stderr=subprocess.STDOUT)
|
|
|
|
print(run('uname', '-a'))
|
|
print(run('dpkg-query', '-W'))
|
|
print(run('apt-get', 'update'))
|
|
print(run('apt-cache', 'policy', 'linux-image-amd64', 'curl', 'openssl'))
|
|
print(run('apt-cache', 'search', '^linux-image-6.*amd64$'))
|
|
canaries = Path('/var/lib/archipelago/ota-synthetic-canaries')
|
|
canaries.mkdir(parents=True, exist_ok=False)
|
|
for name, content in {'wallet.db': 'SYNTHETIC-WALLET-NO-FUNDS-sequence-17\n',
|
|
'identity.key': 'SYNTHETIC-NONSECRET-IDENTITY\n',
|
|
'app-intent.json': '{"stopped":["bitcoin"],"uninstalled":["lnd"],"sequence":17}\n'}.items():
|
|
(canaries/name).write_text(content)
|
|
print('CANARIES', json.dumps({p.name: hashlib.sha256(p.read_bytes()).hexdigest() for p in canaries.iterdir()}))
|
|
print('BASELINE_INVENTORY_ONLY_NO_OTA_PASS')
|