"Walk" apache installs and do a tar on them...


 
Thread Tools Search this Thread
Top Forums UNIX for Advanced & Expert Users "Walk" apache installs and do a tar on them...
# 1  
Old 05-04-2012
"Walk" apache installs and do a tar on them...

Hello unix.com Community:

I need help with writing a "common" script that can get the httpd installs by name and install directory|ies and tar.gz them up by name and point that tar operation to the matching install directory.

I have 2 Distros that I am concerned with for this task: CentOS and Ubuntu.

Here's the facts that I've managed to collect so far:
CentOS stores http installs in either /etc/httpd/conf.d/*.conf and/or in /etc/httpd/conf/*conf files.
Ubuntu stores http installs in /etc/apache2/*.conf and/or /etc/apache2/conf.d/*.conf files. In the real world, they could be anywhere.

I started off with my old favorite "bash" but am having trouble with duplicates in the output.
I thought of perl, something I know nothing about but know there are 1000s of examples/demos/tuts on the net. Maybe later... Smilie

the "meat" of the code that I've hacked together and gets me most of the way there:
CentOS:
Code:
grep -h "Alias /" /etc/httpd/conf.d /etc/httpd/conf/ -R  | egrep -v "home|ScriptAlias|#|doc|error|icons|javascript"

and that spits out
Alias /zabbix /usr/local/share/zabbix

Ubuntu:
Code:
grep -h "Alias /" /etc/apache2/*.conf /etc/apache2/conf.d/*.conf -R  | egrep -v "home|ScriptAlias|#|doc|error|icons|javascript"

and spits out
Alias /cacti2 /var/www/cacti2
Alias /icinga "/usr/local/icinga/share/"

What I NEED is Field2 to be the "$APACHEPROG" variable (stripping the '/' in position #2) of course) and Field3 to be the "$APACHEPROGPATH" (stripping the quotes, if any?) for
Code:
tar -pczf "$APACHEPROG".tar.gz "$APACHEPROGPATH"

I have a generic bash script that can 'read' the OS (either Ubuntu or CentOS) and do stuff accordingly:
Code:
grep -iq "CentOS" /proc/version 
if [ $? = '0' ];then
OS="CentOS"
do CentOS stuff
else
OS="Ubuntu"
do Ubuntu stuff
fi

It still needs work (error handling if NOT CentOS or Ubuntu) and some logging feature, but I'd like to get this step working first.

Any help would surely be appreciated.
I will of course post the solution on Bourne to raise $shell with credit to the contributor.

Thank you all for your time.
# 2  
Old 05-04-2012
To capture part of the output of your grep into a variable you can do following:

Code:
your_script | while read col1 col2 col3; do # this will place "words" of your output into col1 col2 col3 variables
  APACHEPROG=${col2#?}; # this removes 1st char from second word and stores into APACHEPROG
 
now you can do your tar -pczf ...
done

This User Gave Thanks to migurus For This Post:
# 3  
Old 05-05-2012
Thanks migurus:
I re-thought the process and got a solution for CentOS
Code:
### Set/force "uniqueness" of tar archive in a general way
TARDATE=$(date '+%m-%d-%Y.%s')

### Set the Apache conf and conf.d directories and 
### IGNORE all Apache installed defaults ("home|ScriptAlias|#|doc|error|icons|javascript") from .conf files
APACHEPROGBASE=$(grep -h "Alias /" /etc/httpd/conf.d /etc/httpd/conf/ -R  | egrep -v "home|ScriptAlias|#|doc|error|icons|javascript" | awk '{print $2 " "$3}')

### Get the APACHE PROgram NAMEs to be used in the tar operation
APACHEPROGNAME=$(echo "$APACHEPROGBASE" | awk '{print $1}' | sed -e 's/\///g')

### Get the APACHE PROgram PATHs to "$APACHEPROGNAME"
APACHEPROGPATH=$(echo "$APACHEPROGBASE" | awk '{print $2}')

### tar up the results
for i in "$APACHEPROGBASE" ; do echo tar -pczf "$APACHEPROGNAME"."$TARDATE".tar.gz "$APACHEPROGPATH" ; done

tar -pczf zabbix.05-05-2012.1336255870.tar.gz /usr/local/share/zabbix

1\2 way there...

The Ubuntu host however barfs with this:
Code:
for i in "$APACHEPROGBASE" ; do echo tar -pczf "$APACHEPROGNAME"."$TARDATE".tar.gz "$APACHEPROGPATH" ; done

tar -pczf cacti2
icinga.05-05-2012.1336256926.tar.gz /var/www/cacti2
/usr/local/icinga/share/


I "think" it may be the 'echo" messing with my head.

CentOS bash is GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
Ubuntu bash is GNU bash, version 4.1.5(1)-release (i686-pc-linux-gnu)

Thanks for listening to me go on about this. Smilie

Edit: I wish it was simply the echo messing with me, but apparently not...
Code:
echo "$APACHEPROGBASE"
/cacti2 /var/www/cacti2
/icinga /usr/local/icinga/share/
root@icinga:/tmp# echo "$APACHEPROGNAME"
cacti2
icinga
root@icinga:/tmp# echo "$APACHEPROGPATH"
/var/www/cacti2
/usr/local/icinga/share/
...
for i in "$APACHEPROGNAME" ; do tar -pczf "$APACHEPROGNAME".tar.gz "$APACHEPROGPATH" ; done
tar: Removing leading `/' from member names
tar: /var/www/cacti2\n/usr/local/icinga/share: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

and this articfact...cacti2?icinga.tar.gz

Tomorrow is another day!

Thanks.

Last edited by Habitual; 05-05-2012 at 10:04 PM..
# 4  
Old 05-07-2012
migurus:

+1 and props for the heads up!

Solution is much simpler that I anticipated. Funny what 2 days away from the keyboard can do... Smilie

gta.sh (Grab That Apache)
Code:
grep -iq "CentOS" /proc/version 
if [ $? = '0' ];then
OS="CentOS"
cd /mybackups
echo \#\!/bin/bash > gta.sh
chmod 700 gta.sh
TARDATE=$(date '+%m-%d-%Y.%s')
APACHEPROGBASE=$(grep -h "Alias /" /etc/httpd/conf.d /etc/httpd/conf/ -R  | egrep -v "home|ScriptAlias|#|doc|error|icons|javascript" | awk '{print $1 " "$2 " "$3}' | sed -e 's/Alias \///g' | sed -e 's/"//g')
echo "$APACHEPROGBASE" | while read col1 col2 ; do echo "/bin/tar -pzcf" "$col1"_"$TARDATE".tar.gz "$col2" ;done >> gta.sh
/mybackups/gta.sh
else
OS="Ubuntu"
cd /mybackups
echo \#\!/bin/bash > gta.sh
chmod 700 gta.sh
TARDATE=$(date '+%m-%d-%Y.%s')
APACHEPROGBASE=$(grep -h "Alias /" /etc/apache2/*.conf /etc/apache2/conf.d/*.conf -R  | egrep -v "home|ScriptAlias|#|doc|error|icons|javascript" | awk '{print $1 " "$2 " "$3}' | sed -e 's/Alias \///g' | sed -e 's/"//g')
echo "$APACHEPROGBASE" | while read col1 col2 ; do echo "/bin/tar -pzcf" "$col1"_"$TARDATE".tar.gz "$col2" ;done >> gta.sh
/mybackups/gta.sh
fi

Still needs logging and error handling. but it works!
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. AIX

Apache 2.4 directory cannot display "Last modified" "Size" "Description"

Hi 2 all, i have had AIX 7.2 :/# /usr/IBMAHS/bin/apachectl -v Server version: Apache/2.4.12 (Unix) Server built: May 25 2015 04:58:27 :/#:/# /usr/IBMAHS/bin/apachectl -M Loaded Modules: core_module (static) so_module (static) http_module (static) mpm_worker_module (static) ... (3 Replies)
Discussion started by: penchev
3 Replies

2. Shell Programming and Scripting

Bash script - Print an ascii file using specific font "Latin Modern Mono 12" "regular" "9"

Hello. System : opensuse leap 42.3 I have a bash script that build a text file. I would like the last command doing : print_cmd -o page-left=43 -o page-right=22 -o page-top=28 -o page-bottom=43 -o font=LatinModernMono12:regular:9 some_file.txt where : print_cmd ::= some printing... (1 Reply)
Discussion started by: jcdole
1 Replies

3. UNIX for Dummies Questions & Answers

Using "mailx" command to read "to" and "cc" email addreses from input file

How to use "mailx" command to do e-mail reading the input file containing email address, where column 1 has name and column 2 containing “To” e-mail address and column 3 contains “cc” e-mail address to include with same email. Sample input file, email.txt Below is an sample code where... (2 Replies)
Discussion started by: asjaiswal
2 Replies

4. Solaris

The slices "usr", "opt", "tmp" disappeared!!! Help please.

The system don't boot. on the screen appears following: press enter to maintenance (or type CTRL-D to continue)...I checked with format command. ... the slices "0-root","1-swap","2-backup" exist. ...the slises "3-var","6-usr" -unassigned. :( (16 Replies)
Discussion started by: wolfgang
16 Replies

5. Shell Programming and Scripting

how to use "cut" or "awk" or "sed" to remove a string

logs: "/home/abc/public_html/index.php" "/home/abc/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" how to use "cut" or "awk" or "sed" to get the following result: abc abc xyz xyz xyz (8 Replies)
Discussion started by: timmywong
8 Replies

6. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

7. Shell Programming and Scripting

ps -ef | grep "string1" "string2" " "string3"

Hi all, can any one suggest me the script to grep multiple strings from ps -ef pls correct the below script . its not working/ i want to print OK if all the below process are running in my solaris system. else i want to print NOT OK. bash-3.00$ ps -ef | grep blu lscpusr 48 42 ... (11 Replies)
Discussion started by: steve2216
11 Replies

8. Shell Programming and Scripting

cat $como_file | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g'

hi All, cat file_name | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g' Can this be done by using sed or awk alone (4 Replies)
Discussion started by: harshakusam
4 Replies

9. UNIX for Dummies Questions & Answers

Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`"

Hi Friends, Can any of you explain me about the below line of code? mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'` Im not able to understand, what exactly it is doing :confused: Any help would be useful for me. Lokesha (4 Replies)
Discussion started by: Lokesha
4 Replies
Login or Register to Ask a Question