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