From 33ff4f7506fcaab09fd7ad898507f37b7777ba8f Mon Sep 17 00:00:00 2001 From: Micah Anderson Date: Tue, 24 Jun 2008 18:57:39 +0000 Subject: [PATCH] add the ability to save the debconf package selection states in the sys handler, which aides in restoring installed packages with the right choices made --- ChangeLog | 2 ++ examples/example.sys | 18 +++++++++++++----- handlers/sys.helper.in | 3 ++- handlers/sys.in | 43 +++++++++++++++++++++++++++++++----------- 4 files changed, 49 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index 80db11c..b56cab9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -45,6 +45,8 @@ version 0.9.6 -- unreleased (Closes: Trac#39) . support selection of VServers to run on, in the same way as in the dup handler, with the new vsnames configuration option ; (Closes: Trac#45) + . add support for capturing the package debconf selection states using + debconf-get-selections version 0.9.5 -- December 2, 2007 backupninja changes diff --git a/examples/example.sys b/examples/example.sys index 2a6bf0f..af28fd6 100644 --- a/examples/example.sys +++ b/examples/example.sys @@ -2,20 +2,27 @@ # this config file will save various reports of vital system information. # by default, all the reports are enabled and are saved in /var/backups. # -# requires dpkg, sfdisk, and hwinfo +# requires dpkg, debconf-utils, sfdisk, and hwinfo # -# (1) a list of all the packages installed and removed. +# (1) a capture of the debconf package selection states. This file +# can be used to restore the answers to debconf questions for +# packages that you will be installing through (2) below. To +# do this, run: "debconf-set-selections < debconfsel.txt" +# +# (2) a list of all the packages installed and removed. # this file can be used to restore the state of installed packages -# by running "dpkg --set-selections < dpkg-selections.txt +# by running "dpkg --set-selections < dpkg-selections.txt and +# then run "apt-get -u dselect-upgrade". If you have the +# debconf-set-selections file from (1), you should restore those first. # -# (2) the partition table of all disks. +# (3) the partition table of all disks. # this partition table can be used to format another disk of # the same size. this can be handy if using software raid and # you have a disk go bad. just replace the disk and partition it # by running "sfdisk /dev/sdb < partitions.sdb.txt" # (MAKE SURE YOU PARTITION THE CORRECT DISK!!!) # -# (3) hardware information. +# (4) hardware information. # detailed information on most important aspects of the hardware. # @@ -25,6 +32,7 @@ # parentdir = /var/backups # packages = yes # packagesfile = /var/backups/dpkg-selections.txt +# selectionsfile = /var/backups/debconfsel.txt # partitions = yes # NOTE: the __star__ below will be replaced by the disks found on the diff --git a/handlers/sys.helper.in b/handlers/sys.helper.in index e39e526..d3d99a5 100644 --- a/handlers/sys.helper.in +++ b/handlers/sys.helper.in @@ -3,7 +3,7 @@ HELPERS="$HELPERS sys:general_hardware_and_system_info" sys_wizard() { - require_packages hwinfo + require_packages hwinfo debconf-utils checkBox "new sys action" "check options" \ "packages" "list of all installed packages." on \ "partitions" "the partition table of all disks." on \ @@ -30,6 +30,7 @@ $partitions $sfdisk $hardware # packagesfile = /var/backups/dpkg-selections.txt +# selectionsfile = /var/backups/debconfsel.txt # partitionsfile = /var/backups/partitions.__star__.txt # hardwarefile = /var/backups/hardware.txt diff --git a/handlers/sys.in b/handlers/sys.in index 455234d..2c48883 100755 --- a/handlers/sys.in +++ b/handlers/sys.in @@ -3,18 +3,25 @@ # this handler will save various reports of vital system information. # by default, all the reports are enabled and are saved in /var/backups. # -# (1) a list of all the packages installed and removed. +# (1) a capture of the debconf package selection states. This file +# can be used to restore the answers to debconf questions for +# packages that you will be installing through (2) below. To +# do this, run: "debconf-set-selections < debconfsel.txt" +# +# (2) a list of all the packages installed and removed. # this file can be used to restore the state of installed packages -# by running "dpkg --set-selections < dpkg-selections.txt +# by running "dpkg --set-selections < dpkg-selections.txt and +# then run "apt-get -u dselect-upgrade". If you have the +# debconf-set-selections file from (1), you should restore those first. # -# (2) the partition table of all disks. +# (3) the partition table of all disks. # this partition table can be used to format another disk of # the same size. this can be handy if using software raid and # you have a disk go bad. just replace the disk and partition it # by running "sfdisk /dev/sdb < partitions.sdb.txt" # (MAKE SURE YOU PARTITION THE CORRECT DISK!!!) # -# (3) hardware information. +# (4) hardware information. # write to a text file the important things which hwinfo can gleen. # @@ -46,6 +53,8 @@ then getconf packagesfile $parentdir/dpkg-selections.txt getconf packagemgr `which dpkg` getconf packagemgroptions ' --get-selections *' + getconf selectionsfile $parentir/debconfsel.txt + getconf debconfgetselections `debconf-get-selections` elif [ $os = "redhat" ] then getconf packagesfile $parentdir/rpmpackages.txt @@ -109,13 +118,20 @@ if [ "$packages" == "yes" ]; then # is $packagemgr available inside $vserver ? if [ ! -x "$VROOTDIR/$vserver`$VSERVER $vserver exec which $packagemgr`" ]; then warning "can't find $packagemgr in vserver $vserver, skipping installed packages report." - continue + else + # don't expand * since it can be used in $packagemgroptions + set -o noglob + debug "$VSERVER $vserver exec $packagemgr $packagemgroptions > $VROOTDIR/$vserver$packagesfile" + $VSERVER $vserver exec $packagemgr $packagemgroptions > $VROOTDIR/$vserver$packagesfile || fatal "can not save $packagemgr info to $packagesfile" + set +o noglob + fi + # is $debconfgetselections available inside $vserver ? + if [ ! -x "$VROOTDIR/$vserver`$VSERVER $vserver exec which $debconfgetselections`" ]; then + warning "can't find $debconfgetselections in vserver $vserver, skipping package selection states." + else + debug "$VSERVER $vserver exec $debconfgetselections > $VROOTDIR/$vserver$selectionsfile" + $VSERVER $vserver exec $debconfgetselections > $VROOTDIR/$vserver$selectionsfile || fatal "can not save $debconfgetselections info to $selectionsfile" fi - # don't expand * since it can be used in $packagemgroptions - set -o noglob - debug "$VSERVER $vserver exec $packagemgr $packagemgroptions > $VROOTDIR/$vserver$packagesfile" - $VSERVER $vserver exec $packagemgr $packagemgroptions > $VROOTDIR/$vserver$packagesfile || fatal "can not save $packagemgr info to $packagesfile" - set +o noglob done fi @@ -129,7 +145,12 @@ if [ "$packages" == "yes" ]; then $packagemgr $packagemgroptions > $packagesfile || fatal "can not save $packagemgr info to $packagesfile" set +o noglob fi - + if [ -z "$debconfgetselections" ]; then + warning "can't find ${debconfgetselections}, skilling package selection states." + else + debug "$debconfgetselections > $selectionsfile" + $debconfgetselections > $selectionsfile || fatal "can not save $debconfgetselections info to $selectionsfile" + fi fi ## System report ############################## -- 2.30.2