config

OpenBSD system configuration
git clone git://jacobedwards.org/config
Log | Files | Refs | README

commit c8b1dae3750bdaf87bf6d7d11f8c4e0c1407f1a4
parent 5b26d81b729ad5835d1f026812b182e289adb077
Author: Jacob R. Edwards <n/a>
Date:   Tue, 16 Nov 2021 23:25:37 -0800

Update OpenBSD package functions and add package scripts

- Remove pkg_depend, which was created because pkg_tree previously
  only worked on installed packages
- Use awk for most everything in pkg_list
- Add pkg_tree and pkg_root scripts
- Update pt and pr rc functions to use the new scripts
- Disable progress meter with the pa and pt functions
- Remove various superfluous package functions
- Keep all package function names at two characters by renaming plc to pf

Diffstat:
Dlocal/bin/bin/pkg_depend | 8--------
Mlocal/bin/bin/pkg_list | 4++--
Alocal/bin/bin/pkg_root | 21+++++++++++++++++++++
Alocal/bin/bin/pkg_tree | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
Mlocal/rc/lib/profile | 12+++++-------
5 files changed, 80 insertions(+), 17 deletions(-)

diff --git a/local/bin/bin/pkg_depend b/local/bin/bin/pkg_depend @@ -1,8 +0,0 @@ -#!/bin/sh -# Copyright 2021 Jacob R. Edwards -# License: GPLv3 -# -# pkg_depend -- view OpenBSD package dependancies - -awk -vpkg="$(pkg_info -Iq "$1")" 'index($1, pkg) == 1' /usr/local/share/ports-INDEX | - cut -d'|' -f8 | tr ' ' '\n' | cut -d/ -f2 diff --git a/local/bin/bin/pkg_list b/local/bin/bin/pkg_list @@ -4,6 +4,6 @@ # # List OpenBSD ports for your arch (requires 'portslist' package) -awk -F '|' -v OFS='\t' -v arch="$(uname -p)" 'match($11, arch) || $11 = "any" { +awk -F '|' -v re="${1:-.*}" -v arch="$(uname -p)" 'match($1, re) > 0 && match($11, "^(" arch "|any)$") > 0 { print($1, $4); -}' /usr/local/share/ports-INDEX | egrep "${1:-.}" +}' < /usr/local/share/ports-INDEX diff --git a/local/bin/bin/pkg_root b/local/bin/bin/pkg_root @@ -0,0 +1,21 @@ +#!/bin/sh +# Copyright 2021 Jacob R. Edwards +# License: GPLv3 +# +# pkg_root -- List manually installed OpenBSD packages with the given dependancy + +pkg_info -Iq "$@" | awk 'function walk(pkg, file) +{ + file = "/var/db/pkg/" pkg "/+REQUIRED_BY"; + while ((r = getline < file) > 0) + walk($0); + close(file); + + if (r == -1 && !pkgs[pkg]) + print pkg; + pkgs[pkg] = 1; +} + +{ + walk($0); +}' diff --git a/local/bin/bin/pkg_tree b/local/bin/bin/pkg_tree @@ -0,0 +1,52 @@ +#!/usr/bin/awk -f +# Copyright 2021 Jacob R. Edwards +# List OpenBSD package dependancy tree +# +# Package paths are used instead of indexes since the ports-INDEX +# uses them too. + +function resolve(pattern) +{ + for (pkg in pkgs) + if (match(pkg, "(^|/)" pattern "(/|$)") > 0) + return pkg; +} + +function walk(pkg, prefix, deps) +{ + printf "%s%s\n", prefix, pkg; + + split(pkgs[pkg], deps, " "); + for (dep in deps) + walk(deps[dep], prefix " "); +} + +BEGIN { + FS = "|"; + lib = 10; + #build = 9; + run = 8; + + for (i = 1; i < ARGC; ++i) { + argv[i] = ARGV[i]; + delete ARGV[i]; + } + + ARGV[1] = "/usr/local/share/ports-INDEX"; + ARGC = 2; +} + +{ + pkgs[$2] = $lib " " $run; +} + +END { + for (arg in argv) { + pkg = resolve(argv[arg]); + if (pkg) + walk(pkg, ""); + else + printf("%s: Unable to resolve package path\n", argv[arg]); + } +} + diff --git a/local/rc/lib/profile b/local/rc/lib/profile @@ -45,15 +45,13 @@ fn cdp { cd ''^`{ fgrep -vx `{ pwd } < $dirlog | tail -1 } } # OpenBSD Package Management if (~ `{ uname } OpenBSD) { - fn pa { doas pkg_add $* } - fn pd { doas pkg_delete $* } - fn pdd { doas rc -c 'pd $* && pd -a' $* } - fn pdp { pkg_depend $* } + fn pa { doas pkg_add -x $* } + fn pd { doas pkg_delete -x $* } + fn pf { pkg_locate $* } # package find/files fn pi { pkg_info -q $* } fn pl { pkg_list $* } - fn plc { pkg_locate $* } - fn pr { pkgroot $* } - fn pt { pkgtree $* } + fn pr { pkg_root $* } + fn pt { pkg_tree $* } } # List Functions