#!/bin/bash # ---------- # llxcfg-regtool # ---------- # # Utilidad para actualizar el "registro de paquetes y scripts" que utiliza llxcfg-apt. # Escrito por Luis Garcia Gisbert para LliureX (2006) # set -e PATH="/usr/sbin:/usr/bin:/sbin:/bin" # --------- # variables # --------- LLX_PKG_PREFIX="/var/lib/llxcfg/llxcfg-apt_pkg" # ---- dpkg_db="${LLX_PKG_PREFIX}.db" # --- test_db(){ [ -e ${dpkg_db} ] || echo "# llxcfg scripts/packages db" |llxcfg-install - ${dpkg_db} } termina(){ echo "$1" 1>&2 exit 1 } usage(){ termina "$0 SCRIPT [add|del|set|list] PACKAGE1 PACKAGE2 ...." } get_script_packages(){ SCR_NAME="${1}" sed -ne "/^.*:.*${SCR_NAME}.*/s%:.*\$%%p" ${dpkg_db} } del_script_packages(){ SCR_NAME="${1}" shift PKG_LIST="${@}" # si no se especifica parametro, se borran todos los paquetes asociados [ -z "${PKG_LIST}" ] && PKG_LIST="`get_script_packages ${SCR_NAME}`" SED_CMD="" for p in ${PKG_LIST}; do SED_CMD="${SED_CMD}/^${p}:${SCR_NAME}/s%:${SCR_NAME}[[:space:]]\?%:%\n" SED_CMD="${SED_CMD}/^${p}:.\+[[:space:]]${SCR_NAME}/s%[[:space:]]\+${SCR_NAME}[[:space:]]\?% %\n" done # control de paquetes huerfanos ..., ademas garantiza que se ejecuta sed (si no perderiamos el fichero) SED_CMD="${SED_CMD}/^.*:[[:space:]]*\$/d" echo -e "${SED_CMD}" |sed -f- ${dpkg_db} } add_script_packages(){ SCR_NAME="${1}" shift PKG_LIST="${@}" SED_CMD="" for p in ${PKG_LIST}; do if grep -q "^${p}:" ${dpkg_db}; then # si existe lo borramos SED_CMD="${SED_CMD}/^${p}:${SCR_NAME}/s%:${SCR_NAME}[[:space:]]\?%:%\n" SED_CMD="${SED_CMD}/^${p}:.\+[[:space:]]${SCR_NAME}/s%[[:space:]]\+${SCR_NAME}[[:space:]]\?% %\n" # y ahora lo añadimos SED_CMD="${SED_CMD}/^${p}:/s%.*\$%& ${SCR_NAME}%\n" else # si no esta el paquete se añade al final ... SED_CMD="${SED_CMD}\$a${p}:${SCR_NAME}\n" fi done # control de paquetes huerfanos ..., ademas garantiza que se ejecuta sed (si no perderiamos el fichero) SED_CMD="${SED_CMD}/^.*:[[:space:]]*\$/d" echo -e "${SED_CMD}" |sed -f- ${dpkg_db} } # ---- # main # ---- # comprobaciones [ "$1" ] || usage SCR_NAME="$1" shift ACTION="$1" [ "$1" ] || usage shift test_db case "$ACTION" in add) [ "$1" ] || usage TMP_FILE="`tempfile`" add_script_packages "${SCR_NAME}" $@ > ${TMP_FILE} [ -e ${TMP_FILE} ] && llxcfg-install ${TMP_FILE} ${dpkg_db} rm -f ${TMP_FILE} ;; set) [ "$1" ] || usage TMP_FILE="`tempfile`" del_script_packages "${SCR_NAME}" > ${TMP_FILE} [ -e ${TMP_FILE} ] && llxcfg-install ${TMP_FILE} ${dpkg_db} add_script_packages "${SCR_NAME}" $@ > ${TMP_FILE} [ -e ${TMP_FILE} ] && llxcfg-install ${TMP_FILE} ${dpkg_db} rm -f ${TMP_FILE} ;; del) TMP_FILE="`tempfile`" del_script_packages "${SCR_NAME}" $@ > ${TMP_FILE} [ -e ${TMP_FILE} ] && llxcfg-install ${TMP_FILE} ${dpkg_db} rm -f ${TMP_FILE} ;; list) get_script_packages "${SCR_NAME}" ;; *) usage ;; esac exit 0