class Image:
def __init__(self, config: ImageConfig) -> None:
self.config = config
- st = Path.cwd().stat()
- self.uid = st.st_uid
- self.gid = st.st_gid
def __enter__(self) -> "Image":
self.output_dir = Path(os.getenv("TMPDIR", "/var/tmp")) / uuid.uuid4().hex[:16]
*options,
] # fmt: skip
- self.mkosi("summary", opt, user=self.uid, group=self.uid, env=env)
+ self.mkosi("summary", opt, env=env)
return self.mkosi(
"build",
opt,
args,
stdin=sys.stdin if sys.stdin.isatty() else None,
- user=self.uid,
- group=self.gid,
env=env,
)
],
args,
stdin=sys.stdin if sys.stdin.isatty() else None,
- user=self.uid,
- group=self.gid,
check=False,
)
return result
def genkey(self) -> CompletedProcess:
- return self.mkosi("genkey", ["--force"], user=self.uid, group=self.gid)
+ return self.mkosi("genkey", ["--force"])
@pytest.fixture(scope="session", autouse=True)
# SPDX-License-Identifier: LGPL-2.1-or-later
-import os
import tempfile
from pathlib import Path
with tempfile.TemporaryDirectory() as path, Image(config) as image:
tmp_path = Path(path)
- os.chown(tmp_path, image.uid, image.gid)
signing_key = tmp_path / "signing-key.pgp"
signing_cert = tmp_path / "signing-cert.pgp"
def test_signing_checksums_with_gpg(config: ImageConfig) -> None:
with tempfile.TemporaryDirectory() as path, Image(config) as image:
tmp_path = Path(path)
- os.chown(tmp_path, image.uid, image.gid)
signing_key = "mkosi-test@example.org"
signing_cert = tmp_path / "signing-cert.pgp"
gnupghome = tmp_path / ".gnupg"
-
- env = dict(GNUPGHOME=str(gnupghome))
-
- # Creating GNUPGHOME directory and appending an *empty* common.conf
- # file stops GnuPG from spawning keyboxd which causes issues when switching
- # users. See https://stackoverflow.com/a/72278246 for details
gnupghome.mkdir()
- os.chown(gnupghome, image.uid, image.gid)
- (gnupghome / "common.conf").touch()
+ env = dict(GNUPGHOME=str(gnupghome))
# create a brand new signing key
run(
cmdline=["gpg", "--quick-gen-key", "--batch", "--passphrase", "", signing_key],
env=env,
- user=image.uid,
- group=image.gid,
)
# export public key (certificate)
cmdline=["gpg", "--export", signing_key],
env=env,
stdout=o,
- user=image.uid,
- group=image.gid,
)
image.build(options=["--checksum=true", "--sign=true", f"--key={signing_key}"], env=env)