on Sat, Oct 28, 2000 at 10:49:16PM -0400, Jesse Goerz (jgoerz@linuxfreemail.com) wrote: > I've created a backup script and would like some feedback/help on it. > Any tips or pointers would be greatly appreciated. Feel free to > use/hack it on your own. Comments inline. Not bad, but not how I'd do things. > here it is: > > <-- Begin Script --> > #!/bin/bash > > # Many thanks to Robb Kidd who brought up the question of backup > # strategies on the Debian-user mailing list and Karsten M. Self's > # responses. This script wouldn't have been possible without them. :-) > > > # To do list > # I would like to make all the configuration > # done in the variable section. Let the script > # remain the same; just update/change variables > # as necessary. That way anyone can use it. > > # Need to read up on sed or awk so I can change > # the "/" of the directories and change them > # to "." for the saved tar's filename. > > # Develop a system which allows tar to exclude files > # based on choices made in the variable section. > # This will have to be pretty flexible. This should > # take care of the way the /usr/local section looks > # right now. :-( > > # Would it be possible to create one base script > # and then just loop through it with variables > # controlling what is backed up and what is not? > # Of course. This is Linux. Study harder! > > # Script to rebuild. > > # My simple script for backing up files (it started that way, jeesh) > > # Create variables > # The root directory of the backed up files > # before you commit it to the backup media. > # Note, this could be the media itself if you > # don't use another program to put it there. > # (i.e. Zip/tape drives vs. CD-R's) > ARCHIVE_ROOT="/usr/local/cdsrc/backup" > > # This is where you'll put the tar-zipped files. > # I add this primarily for users who put files > # in their backup other than what is covered in > # this script. (i.e. custom .deb files, etc.) > # This way you can keep these files "seperate" > # from the remainder of your backup volume. I > # believe this really only helps debian users > # who are making the media "apt-getable". > BACKUP_DIR="$ARCHIVE_ROOT/backup" > > # This is where you store your custom kernel. > # Do not change this variable or comment it out > # if you do not have a custom kernel. > # The script tests against it being "not_set". > # If you do not set this, the script will attempt > # to grab the kernel from /usr/src/linux/.config > # If you do have a custom kernel include the full > # absolute path AND filename of the configuration file. > CUSTOM_KER="not_set" > > # Default tar options are -IPpscvf. I recommend you > # leave it in verbose (-v) mode at least the first time > # through so you know it's doing what you want. You can > # find out exactly what the options are doing by typing > # man tar at the prompt. One weird thing I noticed about > # tar; you need to keep the capital letter options first. > # Keep that in mind if you edit this variable. > TAR_OPT_DEF="-IPpscf" I'd strongly encourage you *not* to use the -P (preserve paths) option, and question the -I (bzip2) compression option, particularly when archiving to tape. A corrupted compressed file is going to be very difficult to recover. Not sure that -s matters. I'd recommend using long-name versions of the -P and -I options -- this makes the script self-documenting. > # The tar file suffix. In case you want .tgz or .bzip2, etc. > # Note: do not include a "." in front of the suffix (extentsion) > TAR_FILE_SUF="bzip2" ...what about tar.bzip2? > ############################################################################ > # Once this script is complete, people shouldn't have to configure anything# > # below this point. # > ############################################################################ > > > # Create "Test" variables. These will be used in the > # "Test script configuration" section. > # If you add more variables ensure there is a > # space between them. Testing to see if the > # root and backup directories exist and are directories. > DIR_VAR_LIST="$ARCHIVE_ROOT $BACKUP_DIR" > > # Program variables (setting up for PROG_VAR_LIST) > PROG_TAR=`which tar` > PROG_GZIP=`which gzip` > PROG_BZIP2=`which bzip2` > PROG_TEST_NULL= > > # So the variable list below works we need to set variables > # to some value if they're not here, otherwise the output > # of the for loop doesn't look right. > if [ $PROG_TAR == $PROG_TEST_NULL ]; then > PROG_TAR="tar" > fi > > if [ $PROG_GZIP == $PROG_TEST_NULL ]; then > PROG_GZIP="gzip" > fi > > if [ $PROG_BZIP2 == $PROG_TEST_NULL ]; then > PROG_BZIP2="bzip2" > fi > > # If you add more variables ensure there is a > # space between them and you add an if statement > # covering it like the ones above. Testing to see > # if the programs needed are here. > PROG_VAR_LIST="$PROG_TAR $PROG_GZIP $PROG_BZIP2" > > # For future use, if I get around to it. > # Would allow user to change backed up file's name, etc. > #COPY_DIR="directory being copied" > #COPY_DIR_FN="The aboves filename after back up" > > > # Test script configuration > echo "" > echo "Testing script configuration..." > > for CURRENT_VAR in $DIR_VAR_LIST; > do > if [ -d $CURRENT_VAR ]; then > echo "$CURRENT_VAR exists." > else > echo "$CURRENT_VAR does not exist." > echo "There is a problem with the way your variables are configured." > echo "Check your script configuration." > exit 1 > fi > done > > echo "Variable configuration seems to be OK. All directories exist." > echo "" > > echo "Testing to see if needed programs are available..." > > for CURRENT_VAR in $PROG_VAR_LIST; > do > if [ -e $CURRENT_VAR ]; then > echo "$CURRENT_VAR exists." > else > echo "" > echo "$CURRENT_VAR is not located on this system," > echo "could not be found, or is not in your path." > echo "If you know the program is installed put it" > echo "in your path, otherwise you can ignore this message." > echo "" > fi > done > > > echo "Some programs are not required depending on how you" > echo "configure this script. This message is meant to be" > echo "informative in case you are having problems." > echo "" > echo "Done testing for programs." > > > > # Backup the /home directory I would create a loop to handle specific directory paths. Makes the script shorter, easier to modify, maintains integrity across sections. > # Change to backup directory. I > # keep all my backup files inside > # a backup directory on the root > # of the archive. > cd $BACKUP_DIR > tar $TAR_OPT_DEF home.$TAR_FILE_SUF /home > echo '/home directory backed up!' > > > # Backup the /usr/local directory > > # change to root directory > cd $ARCHIVE_ROOT > > # I keep my backup inside /usr/local > # so I need to exclude the backup > # directory so I don't back it up twice > # This creates a list of files tar will exclude > find . * > excludelist > tar -IPX excludelist -pscvf usr.local.$TAR_FILE_SUF /usr/local > > # I like to keep all backup files together > # Move usr.local.bzip2 and excludelist to backup directory > cd $ARCHIVE_ROOT > mv usr.local.$TAR_FILE_SUF $BACKUP_DIR/ > mv excludelist $BACKUP_DIR/ > echo '/usr/local directory backed up!' > > > # Backup the /etc directory > > # Haven't figured out how to incorporate > # this one in yet. Need to do some studying. > # I guess I could run the whole script as root > # but would that affect permissions? Shouldn't with > # tar's -p option? Maybe give a choice to su? > # Don't want to su if I don't have to. Too much power. > > # Change to backup directory > #cd $BACKUP_DIR > > # Need to be root for permissions sake. > # su > # tar $TAR_OPT_DEF etc.$TAR_FILE_SUF /etc > # echo '/etc directory backed up!' > > > # If it's Debian ;-> Backup dpkg's database of what's installed Useful. But somewhat orthogonal to the task of backing up filesystems. I use /etc/cron.daily to back up specific system information -- package selections (already indicated, BTW, under /var/lib/dpkg/status) might be one option. I keep my partition tables there as well. Use your filesystem backup script for backups. Archive system state elsewhere. > > if [ -e /etc/debian_version ]; then > cd $BACKUP_DIR/ > echo -n "Getting copy of dpkg database..." > dpkg --get-selections > dpkg.selections > echo "Done" > else > echo "This doesn't appear to be a Debian system...8-(" > echo "Skipping dpkg --get-selections" > fi > > > # Backup kernel configuration > > # Change to backup directory > cd $BACKUP_DIR > > # Grab custom kernel if CUSTOM_KER doesn't equal not_set > if [ $CUSTOM_KER != "not_set" ]; then > echo -n "Getting copy of custom kernel config file..." > cp $CUSTOM_KER kernel.custom.config > echo "Done" > # Grab default kernel configuration if CUSTOM_KER equals not_set > elif [ -e /usr/src/linux/.config ]; then > echo -n "Getting copy of kernel config file..." > cp /usr/src/linux/.config kernel.custom.config > echo "Done" > echo 'CUSTOM_KER not set in script. No custom kernel!?' > echo 'You are not taking advantage of Linux like you could!' > else > echo "No kernel .config file found on your system!" > echo "If you have a custom kernel or it's not located" > echo "in /usr/src/linux then set the CUSTOM_KER variable" > echo "in this script to back it up. If you don't know" > echo "what this is about, you don't need to worry." > echo "Kernel .config file NOT backed up!" > fi > > > # Reminder to copy /etc as root. Plus you can just cut > # and paste it from the console this way. > echo '' > echo '' > echo '/etc directory not backed up! You need to be root!' > echo "Please use the command:" > echo " cd $BACKUP_DIR; tar $TAR_OPT_DEF etc.$TAR_FILE_SUF /etc" > > > # Reminder about custom kernels > > echo "" > echo "" > echo "Warning!" > echo "Your kernel config file may need to be backed up" > echo "to media other than your backup volume. This is especially" > echo "true if you backup to hardware you had to configure in the" > echo "kernel during installation of your OS in order to use it." > echo "A zip or tape drive would be an example." > echo "Warning !" > echo "" > echo "" > > <-- End Script --> > > -- > Got freedom? > http://www.debian.org > > > -- > Unsubscribe? mail -s unsubscribe debian-user-request@lists.debian.org < /dev/null > -- Karsten M. Self <kmself@ix.netcom.com> http://www.netcom.com/~kmself Evangelist, Opensales, Inc. http://www.opensales.org What part of "Gestalt" don't you understand? There is no K5 cabal http://gestalt-system.sourceforge.net/ http://www.kuro5hin.org
Attachment:
pgpV21KmRjxMu.pgp
Description: PGP signature