Mercurial > code > home > repos > infra
view apt.py @ 288:3af02e24eaf9
minor
author | drewp@bigasterisk.com |
---|---|
date | Sun, 21 Apr 2024 17:01:13 -0700 |
parents | 73ec5064da44 |
children | 65e28d2e0cd8 |
line wrap: on
line source
import io from pathlib import Path import shlex from typing import cast from pyinfra import host from pyinfra.facts.files import FindFiles from pyinfra.facts.server import Arch, LinuxDistribution from pyinfra.operations import apt, files, server TZ = 'America/Los_Angeles' is_pi = host.get_fact(LinuxDistribution)['name'] in ['Debian', 'Raspbian GNU/Linux'] def pkg_keys(): files.directory(path='/etc/apt/keyrings/') # for raspi for url, name in [ ('https://repo.steampowered.com/steam/archive/stable/steam.gpg', 'steam.gpg'), ]: files.download(src=url, dest=f'/usr/share/keyrings/{name}') # vscode keeps making this, but I fetch my own files.file(path='/etc/apt/trusted.gpg.d/microsoft.gpg', present=False) # and it makes this, which is redundant with my sources.list template line files.file(path='/etc/apt/sources.list.d/vscode.list', present=False) apt.packages(packages=['curl']) server.shell(commands=[ f"curl -fsSL {shlex.quote(url)} | gpg --dearmor > /etc/apt/keyrings/{name}" for (url, name) in [ ('https://packages.microsoft.com/keys/microsoft.asc', 'ms.gpg'), ('https://deb.nodesource.com/gpgkey/nodesource.gpg.key', 'nodesource-older.gpg'), # rm after everything's on 23.10 ('https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key', 'nodesource.gpg'), ('https://dl.google.com/linux/linux_signing_key.pub', 'chrome.gpg'), ('https://ftp-master.debian.org/keys/archive-key-11.asc', 'bullseye.gpg'), ('https://ftp-master.debian.org/keys/archive-key-11-security.asc', 'bullseye-security.gpg'), ('https://packages.cloud.google.com/apt/doc/apt-key.gpg', 'coral.gpg'), ('https://hub.unity3d.com/linux/keys/public', 'unityhub.gpg'), ('https://nvidia.github.io/libnvidia-container/gpgkey', 'nvidia.gpg'), ] ]) if is_pi or host.name == 'bang': # this contaminates the apt-update files.file(path="/etc/apt/trusted.gpg.d/podman.asc", present=False) # also these #-rw-r--r-- 1 root root 2794 Mar 26 2021 /etc/apt/trusted.gpg.d/ubuntu-keyring-2012-cdimage.gpg #-rw-r--r-- 1 root root 1733 Mar 26 2021 /etc/apt/trusted.gpg.d/ubuntu-keyring-2018-archive.gpg # raspi needs wget http://archive.raspbian.org/raspbian.public.key -O - | sudo apt-key add - dir = Path('/etc/apt/sources.list.d') def clear_known_sources_files(known=[ dir / 'vscode.list', dir / 'google-chrome.list', dir / 'steam-beta.list', dir / 'google-chrome-unstable.list', dir / 'steam-stable.list', dir / 'raspi.list', ]): found = map(Path, cast(str, host.get_fact(FindFiles, dir, quote_path=True))) if set(found) - set(known): raise SystemExit(f"new files in {host.name} /etc/apt/sources.list.d/ - please remove") for f in known: files.file(path=f, present=False) def apt_sources(): if host.get_fact(Arch) == 'x86_64': server.shell(commands=['dpkg --add-architecture i386']) files.template(src='templates/sources.list.j2', dest='/etc/apt/sources.list') clear_known_sources_files() apt.packages(update=True, cache_time=86400, packages=['tzdata'], force=True, _env={ 'TZ': TZ, 'LANG': 'en_US.UTF-8', 'DEBIAN_FRONTEND': 'noninteractive' }) # squib 1st setup seemed to need more updates for node(nodesource) # and steam-launcher def flatpak_sources(): apt.packages(update=True, cache_time=86400, packages=['flatpak']) server.shell(commands='flatpak remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo') def correct_dns(): files.put(src=io.StringIO("nameserver 10.2.0.3\n"), dest='/etc/resolv.conf') if is_pi: correct_dns() pkg_keys() apt_sources() flatpak_sources()