X-Git-Url: https://git.grml.org/?a=blobdiff_plain;f=bin%2Frestore-config;fp=bin%2Frestore-config;h=88fd978d6f149bc36c048501a85dba0a36a628e7;hb=044d67ae243554c35bf3832f51bbac4570b04e77;hp=0000000000000000000000000000000000000000;hpb=dd31080f647066e88d42cd2a7981631e0cf632ba;p=grml-autoconfig.git diff --git a/bin/restore-config b/bin/restore-config new file mode 100755 index 0000000..88fd978 --- /dev/null +++ b/bin/restore-config @@ -0,0 +1,175 @@ +#!/bin/zsh +# Filename: restore-config +# Purpose: generate grml configuration archive and store it anywhere +# Authors: grml-team (grml.org), (c) Michael Prokop +# Bug-Reports: see http://grml.org/bugs/ +# License: This file is licensed under the GPL v2. +# Latest change: Son Mai 13 11:12:38 CEST 2007 [mika] +################################################################################ + +# some zsh-stuff {{{ + autoload colors ; colors + [ -r /etc/grml/sh-lib ] && . /etc/grml/sh-lib +# }}} + +# set variables {{{ + LANG=C + LC_ALL=C + PROGRAMNAME=${0##*/} + TMPDIR=/tmp + +# functions {{{ +debug(){ + if [[ $DEBUG -gt 0 ]] ; then + echo "debug: $*" + fi +# setopt xtrace +# set -x +} + +bailout(){ + rm -f "$TMP_FILELIST" +} + +trap bailout 1 2 3 15 +# }}} + +# usage information {{{ +usage() +{ + print 1>&2 " +$bg[black]$fg[green]${boldcolor}${PROGRAMNAME} - restore configuration of grml system${reset_color} + +$bg[black]$fg[blue]${boldcolor}Usage:${reset_color} + $PROGRAMNAME [-target_options] + +$bg[black]$fg[blue]${boldcolor}Target options:${reset_color} + -home extract hidden files from \$HOME (\$HOME/.*) + -grmlhome store hidden files from \$HOME (\$HOME/.*) of user grml [use as user root] + -etc extract modified files from /etc + -configdir extract \$HOME/config + + Default: restore/extract complete archive. + + Notice: it is also possible to use environment variables: + \$RESTORE_HOME, \$RESTORE_ETC, \$RESTORE_CONFIGDIR and \$RESTORE_ALL + +$bg[black]$fg[blue]${boldcolor}Usage examples:${reset_color} + $PROGRAMNAME -home foo_bar_config.tbz => restore configuration from file foo_bar_config.tbz + $PROGRAMNAME config.tbz => restore configuration from file config.tbz + +More information on restore-config can be found in the manual page: man restore-config + +See also: save-config(1), bootoptions: myconfig=/dev/ice, extract=PATH, + netconfig=server.tld/path/to/config.tbz + +Report bugs, send wishes and feedback to the grml team: +http://grml.org/bugs/ - contact (at) grml.org +" +} +# }}} + + +# extract configuration file {{{ +restore_all(){ + echo "Trying to extract $FILENAME" + ( cd / && unp $FILENAME ) +} + +restore_home(){ + echo "Trying to extract $FILENAME in $HOME" + ( cd $HOME && unp $FILENAME -- -x $HOME ) +} + +restore_grmlhome(){ + echo "Trying to extract $FILENAME in /home/grml" + ( cd /home/grml/ && unp $FILENAME -- -x /home/grml ) +} + +restore_etc(){ + echo "Trying to extract $FILENAME in /etc" + ( cd /etc && unp $FILENAME -- -x /etc ) +} + +restore_config(){ + echo "Trying to extract $FILENAME in $HOME/config" + ( cd $HOME && unp $FILENAME -- -x $HOME/config ) +} +# }}} + + +# commandline parsing {{{ +parse_options() +{ + zparseopts -K -- help=o_help file:=o_file home=o_home etc=o_etc \ + configdir=o_configdir all=o_all + + if [[ "$#" == 0 || "$o_help" != "" || "$1" == '-h' || "$1" == '--help' ]]; then + usage ; exit + fi + + if [[ "$1" == "" ]]; then + echo "Error: No filename provided." ; exit 1 + else + eval FILENAME=\${$#} + FILENAME=`readlink -f $FILENAME` + fi + + if [[ "$o_home" != "" ]]; then + echo "debug: home is set" + RESTORE_HOME="yes" + fi + + if [[ "$o_grmlhome" != "" ]]; then + echo "debug: grmlhome is set" + RESTORE_GRMLHOME="yes" + fi + + if [[ "$o_etc" != "" ]]; then + echo "debug: etc is set" + RESTORE_ETC="yes" + fi + + if [[ "$o_configdir" != "" ]]; then + echo "debug: configdir is set" + RESTORE_CONFIGDIR="yes" + fi + +} +parse_options $* +# }}} + +runit(){ + if [[ $RESTORE_HOME == "yes" ]]; then + debug "running restore_home" + restore_home + RESTORE_SET=1 + fi + if [[ $RESTORE_GRMLHOME == "yes" ]]; then + debug "running restore_grmlhome" + restore_grmlhome + RESTORE_SET=1 + fi + if [[ $RESTORE_ETC == "yes" ]] ; then + debug "running restore_etc" + restore_etc + RESTORE_SET=1 + fi + if [[ $RESTORE_CONFIGDIR == "yes" ]] ; then + debug "running restore_configdir" + restore_config + RESTORE_SET=1 + fi + debug "FILENAME = $FILENAME" + if [ -z $RESTORE_SET ] ; then + debug "running restore all" + restore_all + fi +} + +# now run it + runit + bailout + +## END OF FILE ################################################################# +# vim:foldmethod=marker