Useful CLI tools (bash) for Arch Linux administration
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

105 lines
2.5 KiB

#!/bin/env sh
# dummypkg - Create a dummy Arch Linux package
#
# Copyright (C) 2023 Pekka Helenius <pekka.helenius@fjordtek.com>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
. /usr/share/makepkg/util/message.sh
colorize
if [[ -z $1 ]]
then
error "Provide a package name"
exit 1
fi
PKG=$1
PKGBUILD_FILE="PKGBUILD.tmp"
PACMAN_FILE="pacman.tmp"
msg "Preparing dummy package: $PKG"
description="dummy package"
version="0.1"
release="1"
provides=($PKG)
purge() {
msg "Cleaning up..."
pkgfile_prefix="$PKG-$version-$release-any.pkg.tar"
pkgfile=$(find . -maxdepth 1 -type f -iname "${pkgfile_prefix}*" | head -1)
[[ -f ${pkgfile} ]] && rm -f ${pkgfile}
[[ -f ${PKGBUILD_FILE} ]] && rm -f ${PKGBUILD_FILE}
[[ -f ${PACMAN_FILE} ]] && rm -f ${PACMAN_FILE}
[[ -d src ]] && rm -rf src
[[ -d pkg ]] && rm -rf pkg
exit $1
}
remote_info() {
pacman_info=$(pacman -Si $PKG > $PACMAN_FILE)
if [[ $? -eq 0 ]]
then
# Description
description=$(echo $(grep -oP "^Description.*: \K.*(?=.*)" $PACMAN_FILE) "("$description")")
# Provides
provides_pkgs=($(grep -oP "^Provides.*: \K[^A-Z]*(?=[^A-Z]*)" $PACMAN_FILE))
provides=(${provides[@]} ${provides_pkgs[@]})
# Version
version_full=$(grep -oP "^Version.*: \K.*(?=.*)" $PACMAN_FILE)
version=$(echo $version_full | awk '{sub(/-.*/,"",$0); print $0}')
release=$(echo $version_full | awk '{sub(/.*-/,"",$0); print $0}')
fi
}
trap "purge 1" SIGINT SIGKILL SIGABRT SIGTERM
msg "Setting version number and provided packages information..."
remote_info
msg2 "Description: ${description}"
msg2 "Provides: ${provides[*]}"
msg2 "Version: $version"
msg2 "Release: $release"
cat <<EOF > ${PKGBUILD_FILE}
pkgname="${PKG}"
pkgver=$version
pkgrel=$release
pkgdesc="${description}"
arch=(any)
provides=(${provides[@]})
groups=(dummy)
EOF
if [[ ! -f ${PKGBUILD_FILE} ]]
then
error "No PKGBUILD found"
exit 1
fi
makepkg -Cfi -p ${PKGBUILD_FILE}
purge 0