One very important thing you must always do is BACK UP YOUR SYSTEM! Computers crash, even those running a *nix operating system, and Murphy was an optimist when it comes to computers. Therefore, you MUST perform backups, preferably to a different machine or to removable media.
As an example to the UNIX® / Linux community, I have provided a sample script, written for a FreeBSD system with Samba (as a domain controller) and an FTP server and web server installed, to back up all of the most important files on the system. These happen to be the Samba configuration database files (for Samba 3 when using 'TDB' files), the files in '/etc', the files in '/usr/local/etc', and the web server files. It's a foregone conclusion that the other files can be more or less easily restored by 'make world' or its equivalent, or by re-installing a port or package. In some cases an application may have additional important configuration or data files. One example, PostgreSQL, stores its configuration and data files in '/usr/local/pgsql' on a FreeBSD system. Your backup should include these files as well.
This script contains a section that prompts you for 'Y' or 'N', then defaults to 'Y' if you don't press a key within 30 seconds, or if you simply press ENTER. An invalid response re-cycles by calling the script again. And if you don't run it as root, don't worry, the script will detect this and attempt an 'su' to root for you. The basic process is as follows:
#!/bin/sh
# backup SAMBA databases and system files
DoCreateDir()
{
# create directory if it does not exist
local szDir ;
szDir="$@"
if ( !( test -d "$szDir" ) )
then
echo creating "$szDir"
mkdir "$szDir" ;
fi
}
# this script must run as root. su to root if not already root
if ( test `id -un` != "root" )
then
eval "su -l root -c $0" "$@" ;
exit ;
fi
curdir="`pwd`";
echo This file will back up the SAMBA databases and copy various system
echo -n files to the BACKUP machine. Continue [Y/n] ?
read -t 30 YN
# if no response within 30 seconds it defaults to 'Y'
YN=${YN:-"Y"};
YN=${YN%%[^YyNn]*};
if ( test -z "$YN" )
then
echo -e "Please enter either \"Y\" or \"N\" " ;
eval "$0" "$@" ;
exit ;
fi
# at this point 'YN' contains Y, y, N, or n
if ( test "$YN" = "N" -o "$YN" = "n" )
then
exit ;
fi
# step 1, shut down samba
echo Shutting down SAMBA to perform TDB backups
echo ""
if ( !( smbcontrol nmbd shutdown && smbcontrol smbd shutdown ) )
then
echo ERROR: Unable to shut down SAMBA - restarting ;
/usr/local/etc/rc.d/samba.sh start ;
exit ;
fi
# back up the SAMBA databases
echo backing up /var/db/samba
cd /var/db/samba
tdbbackup *.tdb
echo backing up /usr/local/private
cd /usr/local/private
tdbbackup *.tdb
# re-start SAMBA
echo re-starting SAMBA
/usr/local/etc/rc.d/samba.sh start ;
echo ""
echo "SAMBA re-start complete (error check not performed - you should verify it's running)"
echo ""
# make sure the backup path is mounted
# NOTE: change this to match where you want your backups to go. In this
# case, it's an NFS share defined in /etc/fstab that mounts to /backups
echo Mounting NFS backup path, ignore errors at this point
mount /backups
# create backup directories if they don't exist
DoCreateDir "/backups/samba" ;
DoCreateDir "/backups/samba/private" ;
DoCreateDir "/backups/etc" ;
DoCreateDir "/backups/etc.local" ;
DoCreateDir "/backups/root.bin" ;
DoCreateDir "/backups/www" ;
DoCreateDir "/backups/www/data" ;
DoCreateDir "/backups/www/cgi-bin" ;
DoCreateDir "/backups/www/include" ;
DoCreateDir "/backups/www/icons" ;
DoCreateDir "/backups/www/ftp-root" ;
DoCreateDir "/backups/www/ftp-root/etc" ;
DoCreateDir "/backups/www/ftp-root/pub" ;
# copy the TDB files
echo Backup of TDB files for SAMBA
cp /var/db/samba/*.tdb.bak /backups/samba
cp /usr/local/private/*.tdb.bak /backups/samba/private
# copy the /root/bin files (where all of my custom scripts go)
echo "Backup of /root/bin files"
cp /root/bin/* /backups/root.bin
# copy the /etc files in their entirety
echo "Backup of /etc files"
cp -rf /etc/* /backups/etc
# copy the /usr/local/etc files in their entirety
echo "Backup of /usr/local/etc files"
cp -rf /usr/local/etc/* /backups/etc.local
# copy of the 'primary' web site files (adjust these according to your system)
echo "Backup of primary web site files"
cp -f /usr/local/www/* /backups/www
cp -f /usr/local/www/data/* /backups/www/data
cp -f /usr/local/www/include/* /backups/www/include
cp -f /usr/local/www/cgi-bin/* /backups/www/cgi-bin
cp -f /usr/local/www/icons/* /backups/www/icons
cp -f /usr/local/www/ftp-root/* /backups/www/ftp-root
cp -f /usr/local/www/ftp-root/etc/* /backups/www/ftp-root/etc
cp -f /usr/local/www/ftp-root/pub/* /backups/www/ftp-root/pub
# finally, create a TAR archive of all of the backup files and the entire www
# directory tree and copy it to the 'backup' directory directly, using the GMT
# system date as the file name. The output path '/work' represents a directory
# that is big enough to handle anything.
szFileName="backup-"`date -u "+%C%y%m%d%H%M%S"`".tar" ;
echo Writing backup to $szFileName
echo ""
echo backing up /root/bin, /etc, and /usr/local/etc
tar -c -f "/work/$szFileName" /root/bin
tar -r -f "/work/$szFileName" /etc
tar -r -f "/work/$szFileName" /usr/local/etc
echo backing up samba files
tar -r -f "/work/$szFileName" /var/db/samba/*.tdb.bak
tar -r -f "/work/$szFileName" /usr/local/private/*.tdb.bak
# for your system, alter this next section accordingly
# the sample is for FreeBSD, which stores its installed
# package info in /var/db/pkg - for linux systems you might
# consider backing up other directories, such as /var/backups
# or /var/lib/dpkg , depending upon where your system stores
# this kind of information.
echo backing up installed package database (FreeBSD systems)
tar -r -f "/work/$szFileName" /var/db/pkg
echo "backing up the web server (all of it this time)"
tar -r -f "/work/$szFileName" /usr/local/www
echo Compressing $szFileName
gzip "/work/$szFileName"
echo copying to backup directory
cp -f "/work/$szFileName"".gz" /backups
# cleanup, change directory back, and exit
# remove the temporary file (I am done now)
rm -f "/work/$szFileName"
rm -f "/work/$szFileName"".gz"
echo "Backup is now complete!!"
echo ""
cd "$curdir" ;
# the end
©2005-2013 by Stewart~Frazier Tools, Inc. - all rights reserved
Last Update: 6/23/2013
Back to 'Windows to Unix®' page
Back to S.F.T. Inc. main page