diff --git a/conf/explorer/lsb_codename b/conf/explorer/lsb_codename index bc742cf7..22b6d51e 100755 --- a/conf/explorer/lsb_codename +++ b/conf/explorer/lsb_codename @@ -20,7 +20,14 @@ # set +e -lsb_release=$(which lsb_release 2>/dev/null) -if [ -x "$lsb_release" ]; then - $lsb_release --short --codename -fi +case "$($__explorer/os)" in + openwrt) + (. /etc/openwrt_release && echo "$DISTRIB_CODENAME") + ;; + *) + lsb_release=$(which lsb_release 2>/dev/null) + if [ -x "$lsb_release" ]; then + $lsb_release --short --codename + fi + ;; +esac diff --git a/conf/explorer/lsb_description b/conf/explorer/lsb_description index f6c30322..48aff30d 100755 --- a/conf/explorer/lsb_description +++ b/conf/explorer/lsb_description @@ -20,7 +20,14 @@ # set +e -lsb_release=$(which lsb_release 2>/dev/null) -if [ -x "$lsb_release" ]; then - $lsb_release --short --description -fi +case "$($__explorer/os)" in + openwrt) + (. /etc/openwrt_release && echo "$DISTRIB_DESCRIPTION") + ;; + *) + lsb_release=$(which lsb_release 2>/dev/null) + if [ -x "$lsb_release" ]; then + $lsb_release --short --description + fi + ;; +esac diff --git a/conf/explorer/lsb_id b/conf/explorer/lsb_id index 6cb2359b..0dd0f9f4 100755 --- a/conf/explorer/lsb_id +++ b/conf/explorer/lsb_id @@ -20,7 +20,14 @@ # set +e -lsb_release=$(which lsb_release 2>/dev/null) -if [ -x "$lsb_release" ]; then - $lsb_release --short --id -fi +case "$($__explorer/os)" in + openwrt) + (. /etc/openwrt_release && echo "$DISTRIB_ID") + ;; + *) + lsb_release=$(which lsb_release 2>/dev/null) + if [ -x "$lsb_release" ]; then + $lsb_release --short --id + fi + ;; +esac diff --git a/conf/explorer/lsb_release b/conf/explorer/lsb_release index a96ac50b..8266171a 100755 --- a/conf/explorer/lsb_release +++ b/conf/explorer/lsb_release @@ -20,7 +20,14 @@ # set +e -lsb_release=$(which lsb_release 2>/dev/null) -if [ -x "$lsb_release" ]; then - $lsb_release --short --release -fi +case "$($__explorer/os)" in + openwrt) + (. /etc/openwrt_release && echo "$DISTRIB_RELEASE") + ;; + *) + lsb_release=$(which lsb_release 2>/dev/null) + if [ -x "$lsb_release" ]; then + $lsb_release --short --release + fi + ;; +esac diff --git a/conf/explorer/os b/conf/explorer/os index 3f3ce266..e67d87ab 100755 --- a/conf/explorer/os +++ b/conf/explorer/os @@ -56,6 +56,11 @@ if [ -f /etc/gentoo-release ]; then exit 0 fi +if [ -f /etc/openwrt_version ]; then + echo openwrt + exit 0 +fi + if [ -f /etc/owl-release ]; then echo owl exit 0 diff --git a/conf/explorer/os_version b/conf/explorer/os_version index 73d3ecd7..8e6d37d3 100755 --- a/conf/explorer/os_version +++ b/conf/explorer/os_version @@ -45,6 +45,9 @@ case "$($__explorer/os)" in *bsd|solaris) uname -r ;; + openwrt) + cat /etc/openwrt_version + ;; owl) cat /etc/owl-release ;; 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