44 lines
1.3 KiB
Bash
Executable File
44 lines
1.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
# Sync local AUR repository: puts any package files you pass in into
|
|
# ./localrepo, rebuilds the repo database from every *.pkg.tar.zst there,
|
|
# and appends each package's name to packages.x86_64 so it gets installed
|
|
# into the ISO.
|
|
#
|
|
# Usage: ./localrepo/update.sh pkg1.pkg.tar.zst [pkg2.pkg.tar.zst ...]
|
|
# ./localrepo/update.sh # just re-add whatever is there
|
|
|
|
repo_name="local-aur"
|
|
profile_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
repo_dir="${profile_dir}/localrepo"
|
|
|
|
for f in "$@"; do
|
|
[[ -f "${f}" ]] || { echo "error: not a file: ${f}" >&2; exit 1; }
|
|
mv -n -- "${f}" "${repo_dir}/"
|
|
done
|
|
|
|
mapfile -t pkgs < <(find "${repo_dir}" -maxdepth 1 -name '*.pkg.tar.zst' -print | sort)
|
|
|
|
if [[ ${#pkgs[@]} -eq 0 ]]; then
|
|
echo "No .pkg.tar.zst files in ${repo_dir}" >&2
|
|
exit 0
|
|
fi
|
|
|
|
repo-add -R "${repo_dir}/${repo_name}.db.tar.gz" "${pkgs[@]}"
|
|
|
|
new_names=()
|
|
for p in "${pkgs[@]}"; do
|
|
name=$(tar -xOf "${p}" .PKGINFO | sed -n 's/^pkgname = //p' | head -1)
|
|
new_names+=("${name}")
|
|
done
|
|
|
|
pkgfile="${profile_dir}/packages.x86_64"
|
|
touch "${pkgfile}"
|
|
for name in "${new_names[@]}"; do
|
|
grep -qxF "${name}" "${pkgfile}" || echo "${name}" >> "${pkgfile}"
|
|
done
|
|
sort -u -o "${pkgfile}" "${pkgfile}"
|
|
|
|
echo "Local repo ready. packages.x86_64 now includes:"
|
|
printf ' %s\n' "${new_names[@]}" |