Files

59 lines
1.6 KiB
Python
Raw Permalink Normal View History

"""
Utilities for working with the apt package manager
"""
import os
import subprocess
from tljh import utils
def trust_gpg_key(key):
"""
Trust given GPG public key.
key is a GPG public key (bytes) that can be passed to apt-key add via stdin.
"""
# If gpg2 doesn't exist, install it.
if not os.path.exists("/usr/bin/gpg2"):
install_packages(["gnupg2"])
utils.run_subprocess(["apt-key", "add", "-"], input=key)
def add_source(name, source_url, section):
"""
Add a debian package source.
distro is determined from /etc/os-release
"""
# lsb_release is not installed in most docker images by default
distro = (
subprocess.check_output(
["/bin/bash", "-c", "source /etc/os-release && echo ${VERSION_CODENAME}"],
stderr=subprocess.STDOUT,
)
.decode()
.strip()
)
line = f"deb {source_url} {distro} {section}\n"
with open(os.path.join("/etc/apt/sources.list.d/", name + ".list"), "a+") as f:
# Write out deb line only if it already doesn't exist
f.seek(0)
if line not in f.read():
f.write(line)
f.truncate()
utils.run_subprocess(["apt-get", "update", "--yes"])
def install_packages(packages):
"""
Install debian packages
"""
# Check if an apt-get update is required
if len(os.listdir("/var/lib/apt/lists")) == 0:
utils.run_subprocess(["apt-get", "update", "--yes"])
env = os.environ.copy()
# Stop apt from asking questions!
env["DEBIAN_FRONTEND"] = "noninteractive"
utils.run_subprocess(["apt-get", "install", "--yes"] + packages, env=env)