Create dependency package on RPM distros

Signed-off-by: Christian König <github@yubiuser.dev>
This commit is contained in:
Christian König 2024-09-29 19:26:19 +02:00
parent fd5b3be03f
commit f08c54e166
No known key found for this signature in database
2 changed files with 82 additions and 10 deletions

View file

@ -102,8 +102,8 @@ fi
r=20 r=20
c=70 c=70
# Content of Pi-hole's meta package control file # Content of Pi-hole's meta package control file on APT based systems
PIHOLE_META_PACKAGE_CONTROL_DEBIAN=$( PIHOLE_META_PACKAGE_CONTROL_APT=$(
cat <<EOM cat <<EOM
Package: pihole-meta Package: pihole-meta
Version: 0.1 Version: 0.1
@ -114,6 +114,29 @@ Depends: grep,dnsutils,binutils,git,iproute2,dialog,ca-certificates,cron,curl,ip
EOM EOM
) )
# Content of Pi-hole's meta package control file on RPM based systems
PIHOLE_META_PACKAGE_CONTROL_RPM=$(
cat <<EOM
%define _topdir /tmp/pihole-meta
Name: pihole-meta
Version: 0.1
Release: 1
License: EUPL
BuildArch: noarch
Summary: Pi-hole dependency meta package
Requires: grep,curl,psmisc,sudo, unzip,jq,git,dialog,ca-certificates, bind-utils, iproute, procps-ng, chkconfig, binutils, cronie, findutils, libcap, nmap-ncat, lshw, bash-completion
%description
Pi-hole dependency meta package
%prep
%build
%files
%install
%changelog
* Sun Sep 29 2024 Pi-hole Team - 0.1
- First version being packaged
EOM
)
######## Undocumented Flags. Shhh ######## ######## Undocumented Flags. Shhh ########
# These are undocumented flags; some of which we can use when repairing an installation # These are undocumented flags; some of which we can use when repairing an installation
# The runUnattended flag is one example of this # The runUnattended flag is one example of this
@ -402,9 +425,6 @@ package_manager_detect() {
PKG_INSTALL="${PKG_MANAGER} install -y" PKG_INSTALL="${PKG_MANAGER} install -y"
# CentOS package manager returns 100 when there are packages to update so we need to || true to prevent the script from exiting. # CentOS package manager returns 100 when there are packages to update so we need to || true to prevent the script from exiting.
PKG_COUNT="${PKG_MANAGER} check-update | grep -E '(.i686|.x86|.noarch|.arm|.src|.riscv64)' | wc -l || true" PKG_COUNT="${PKG_MANAGER} check-update | grep -E '(.i686|.x86|.noarch|.arm|.src|.riscv64)' | wc -l || true"
OS_CHECK_DEPS=(bind-utils)
INSTALLER_DEPS=(iproute newt procps-ng chkconfig binutils)
PIHOLE_DEPS=(cronie findutils libcap nmap-ncat lshw bash-completion)
# If neither apt-get or yum/dnf package managers were found # If neither apt-get or yum/dnf package managers were found
else else
@ -421,16 +441,59 @@ build_dependency_package(){
chmod 0755 /tmp/pihole-meta chmod 0755 /tmp/pihole-meta
if is_command apt-get; then if is_command apt-get; then
# move into the directory
# move into the tmp directory
pushd /tmp &>/dev/null || return 1 pushd /tmp &>/dev/null || return 1
# Prepare directory structure and control file
mkdir -p /tmp/pihole-meta/DEBIAN mkdir -p /tmp/pihole-meta/DEBIAN
chmod 0755 /tmp/pihole-meta/DEBIAN chmod 0755 /tmp/pihole-meta/DEBIAN
touch /tmp/pihole-meta/DEBIAN/control touch /tmp/pihole-meta/DEBIAN/control
echo "${PIHOLE_META_PACKAGE_CONTROL_DEBIAN}" > /tmp/pihole-meta/DEBIAN/control
# Write the control file
echo "${PIHOLE_META_PACKAGE_CONTROL_APT}" > /tmp/pihole-meta/DEBIAN/control
# Build the package
dpkg-deb --build --root-owner-group pihole-meta dpkg-deb --build --root-owner-group pihole-meta
# Move back into the directory the user started in # Move back into the directory the user started in
popd &> /dev/null || return 1 popd &> /dev/null || return 1
fi fi
if is_command rpm; then
# move into the tmp directory
pushd /tmp &>/dev/null || return 1
# Prepare directory structure and spec file
mkdir -p /tmp/pihole-meta/SPECS
touch /tmp/pihole-meta/SPECS/pihole-meta.spec
echo "${PIHOLE_META_PACKAGE_CONTROL_RPM}" > /tmp/pihole-meta/SPECS/pihole-meta.spec
# check if we need to install the build dependencies
if ! is_command rpmbuild; then
local REMOVE_RPM_BUILD=true
eval "${PKG_INSTALL}" "rpm-build"
fi
# Build the package
rpmbuild -bb /tmp/pihole-meta/SPECS/pihole-meta.spec
# Move the package to the /tmp directory
mv /tmp/pihole-meta/RPMS/noarch/pihole-meta*.rpm /tmp/pihole-meta.rpm
# Remove the build dependencies when we've installed them
if [ -n "${REMOVE_RPM_BUILD}" ]; then
local PKG_REMOVE
PKG_REMOVE="${PKG_MANAGER} remove -y"
eval "${PKG_REMOVE}" "rpm-build"
fi
# Move back into the directory the user started in
popd &> /dev/null || return 1
fi
# Remove the build directory
rm -rf /tmp/pihole-meta
} }
# A function for checking if a directory is a git repository # A function for checking if a directory is a git repository
@ -1412,18 +1475,28 @@ notify_package_updates_available() {
install_dependent_packages() { install_dependent_packages() {
# Install meta dependency package # Install meta dependency package
# Install Debian/Ubuntu packages
if is_command apt-get; then if is_command apt-get; then
if [ -f /tmp/pihole-meta.deb ]; then if [ -f /tmp/pihole-meta.deb ]; then
eval "${PKG_INSTALL}" "/tmp/pihole-meta.deb" eval "${PKG_INSTALL}" "/tmp/pihole-meta.deb"
rm /tmp/pihole-meta.deb rm /tmp/pihole-meta.deb
else else
printf " %b Error: Unable to find dependency meta package.\\n" "${COL_LIGHT_RED}" printf " %b Error: Unable to find Pi-hole dependency meta package.\\n" "${COL_LIGHT_RED}"
return 1 return 1
fi fi
fi fi
# Install Fedora/CentOS packages # Install Fedora/CentOS packages
if is_command rpm; then
if [ -f /tmp/pihole-meta.rpm ]; then
eval "${PKG_INSTALL}" "/tmp/pihole-meta.rpm"
rm /tmp/pihole-meta.rpm
else
printf " %b Error: Unable to find Pi-hole dependency meta package.\\n" "${COL_LIGHT_RED}"
return 1
fi
fi
printf "\\n" printf "\\n"
return 0 return 0
} }
@ -2248,7 +2321,7 @@ main() {
# Notify user of package availability # Notify user of package availability
notify_package_updates_available notify_package_updates_available
# Build dependecy package # Build dependency package
build_dependency_package build_dependency_package
# Install Pi-hole dependencies # Install Pi-hole dependencies

View file

@ -532,4 +532,3 @@ def test_package_manager_has_pihole_deps(host):
assert "No package" not in output.stdout assert "No package" not in output.stdout
assert output.rc == 0 assert output.rc == 0