From afdfb660c7cc6003b67ee89ecb8c8bda4a61d731 Mon Sep 17 00:00:00 2001 From: Giel van Schijndel Date: Sun, 19 Feb 2012 19:51:04 +0100 Subject: [PATCH] Add support for OpenWRT packages Signed-off-by: Giel van Schijndel --- conf/type/__package/manifest | 1 + conf/type/__package_opkg/explorer/pkg_status | 39 ++++++++++++++ conf/type/__package_opkg/gencode-remote | 57 ++++++++++++++++++++ conf/type/__package_opkg/man.text | 49 +++++++++++++++++ conf/type/__package_opkg/parameter/optional | 1 + conf/type/__package_opkg/parameter/required | 1 + 6 files changed, 148 insertions(+) create mode 100755 conf/type/__package_opkg/explorer/pkg_status create mode 100755 conf/type/__package_opkg/gencode-remote create mode 100644 conf/type/__package_opkg/man.text create mode 100644 conf/type/__package_opkg/parameter/optional create mode 100644 conf/type/__package_opkg/parameter/required diff --git a/conf/type/__package/manifest b/conf/type/__package/manifest index 181da077..26c2cd39 100755 --- a/conf/type/__package/manifest +++ b/conf/type/__package/manifest @@ -34,6 +34,7 @@ else debian|ubuntu) type="apt" ;; gentoo) type="emerge" ;; amazon|centos|fedora|redhat) type="yum" ;; + openwrt) type="opkg" ;; *) echo "Don't know how to manage packages on: $os" >&2 exit 1 diff --git a/conf/type/__package_opkg/explorer/pkg_status b/conf/type/__package_opkg/explorer/pkg_status new file mode 100755 index 00000000..5da4f742 --- /dev/null +++ b/conf/type/__package_opkg/explorer/pkg_status @@ -0,0 +1,39 @@ +#!/bin/sh +# +# 2011 Nico Schottelius (nico-cdist at schottelius.org) +# 2012 Giel van Schijndel (giel plus cdist at mortis dot eu) +# +# This file is part of cdist. +# +# cdist 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 3 of the License, or +# (at your option) any later version. +# +# cdist 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 cdist. If not, see . +# +# +# Retrieve the status of a package - parsed opkg output +# + +if [ -f "$__object/parameter/name" ]; then + name="$(cat "$__object/parameter/name")" +else + name="$__object_id" +fi + +# Except dpkg failing, if package is not known / installed +if opkg status "$name" 2>/dev/null | grep -q "^Status: install user installed$"; then + echo "present" + exit 0 +elif [ "$(opkg info "$name" 2> /dev/null | wc -l)" -eq 0 ]; then + echo "absent notpresent" + exit 0 +fi +echo "absent" diff --git a/conf/type/__package_opkg/gencode-remote b/conf/type/__package_opkg/gencode-remote new file mode 100755 index 00000000..bd9a599b --- /dev/null +++ b/conf/type/__package_opkg/gencode-remote @@ -0,0 +1,57 @@ +#!/bin/sh +# +# 2011 Nico Schottelius (nico-cdist at schottelius.org) +# 2012 Giel van Schijndel (giel plus cdist at mortis dot eu) +# +# This file is part of cdist. +# +# cdist 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 3 of the License, or +# (at your option) any later version. +# +# cdist 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 cdist. If not, see . +# +# +# Manage packages on OpenWRT and co. +# + +if [ -f "$__object/parameter/name" ]; then + name="$(cat "$__object/parameter/name")" +else + name="$__object_id" +fi + +state_should="$(cat "$__object/parameter/state")" +state_is="$(cat "$__object/explorer/pkg_status")" +case "$state_is" in + absent*) + present="$(echo "$state_is" | cut -d ' ' -f 2)" + state_is="absent" + ;; +esac + +if [ "$state_is" != "$state_should" ]; then + case "$state_should" in + present) + if [ "$present" = "notpresent" ]; then + echo opkg --verbosity=0 update + fi + echo opkg --verbosity=0 install \"$name\" + ;; + absent) + echo opkg --verbosity=0 remove \"$name\" + ;; + *) + echo "Unknown state: $state" >&2 + exit 1 + ;; + esac +fi + diff --git a/conf/type/__package_opkg/man.text b/conf/type/__package_opkg/man.text new file mode 100644 index 00000000..19d26af6 --- /dev/null +++ b/conf/type/__package_opkg/man.text @@ -0,0 +1,49 @@ +cdist-type__package_opkg(7) +========================== +Giel van Schijndel + + +NAME +---- +cdist-type__package_opkg - Manage packages with opkg + + +DESCRIPTION +----------- +opkg is usually used on OpenWRT to manage packages. + + +REQUIRED PARAMETERS +------------------- +state:: + The state the package should be in, either "present" or "absent" + + +OPTIONAL PARAMETERS +------------------- +name:: + If supplied, use the name and not the object id as the package name. + + +EXAMPLES +-------- + +-------------------------------------------------------------------------------- +# Ensure lsof is installed +__package_opkg lsof --state present + +# Remove obsolete package +__package_opkg dnsmasq --state absent +-------------------------------------------------------------------------------- + + +SEE ALSO +-------- +- cdist-type(7) +- cdist-type__package(7) + + +COPYING +------- +Copyright \(C) 2012 Giel van Schijndel. Free use of this software is +granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/conf/type/__package_opkg/parameter/optional b/conf/type/__package_opkg/parameter/optional new file mode 100644 index 00000000..f121bdbf --- /dev/null +++ b/conf/type/__package_opkg/parameter/optional @@ -0,0 +1 @@ +name diff --git a/conf/type/__package_opkg/parameter/required b/conf/type/__package_opkg/parameter/required new file mode 100644 index 00000000..ff72b5c7 --- /dev/null +++ b/conf/type/__package_opkg/parameter/required @@ -0,0 +1 @@ +state