Init-Files/unminimize.py
2022-09-15 00:03:08 +00:00

79 lines
2.4 KiB
Python

#!/bin/env python3
import os
import subprocess
os.environ["DEBIAN_FRONTEND"] = "noninteractive"
def sudo(*args, **kwargs):
proc = subprocess.run(
["sudo"] + list(args), capture_output=True, encoding="utf-8", **kwargs
)
if proc.returncode != 0:
print(f"Process {' '.join(proc.args)} failed with code {proc.returncode}")
print("STDOUT:")
print(' ' + '\n '.join(proc.stdout.splitlines()))
print("STDERR:")
print(' ' + '\n '.join(proc.stderr.splitlines()))
raise Exception("Process failed")
return proc.stdout.strip()
def search_packages(*patterns):
packages = set()
for line in sudo("dpkg", "-S", *patterns).splitlines():
packages.update(line.split(": ")[0].split(", "))
return packages
if any(
os.path.exists(path)
for path in [
"/etc/dpkg/dpkg.cfg.d/excludes",
"/etc/dpkg/dpkg.cfg.d/excludes.dpkg-tmp",
]
):
if os.path.exists("/etc/dpkg/dpkg.cfg.d/excludes"):
os.rename(
"/etc/dpkg/dpkg.cfg.d/excludes",
"/etc/dpkg/dpkg.cfg.d/excludes.dpkg-tmp",
)
print("Updating...")
sudo("apt-get", "update")
packages = set()
print("Searching for packages that install to /usr/share/man...")
packages.update(search_packages("/usr/share/man"))
print("Searching for with missing files...")
files = set()
for line in sudo("dpkg", "--verify", "--verify-format", "rpm").splitlines():
line = line.strip()
if line == "":
continue
status, name = line.split(maxsplit=1)
if status == 'missing' and ('/usr/share/doc' in name or '/usr/share/locale' in name):
files.add(name)
if len(files) > 0:
print("Searching for packages with missing files...")
packages.update(search_packages(*list(files)))
else:
print("No packages have missing files")
# This one never works.
packages.remove("containerd.io")
# This one is required.
packages.add("git-man")
if len(packages) > 0:
packages = list(sorted(packages))
print(f"Fixing {len(packages)} packages...")
sudo("apt-get", "install", "--reinstall", "-y", *packages)
if sudo("dpkg-divert", "--truename", "/usr/bin/man") == "/usr/bin/man.REAL":
print("Removing divert for `man`...")
sudo("rm", "-f", "/usr/bin/man")
sudo("dpkg-divert", "--quiet", "--remove", "--rename", "/usr/bin/man")