Category Archives: UNIX

Posts regarding UNIX and Linux systems

Apache MySQL authentication

Lets explain how to configure Apache MySQL authentication. We will suppose apache web server is already up and running on the server.
First we need to install auth_mysql module.

$ sudo aptitude search libapache2-mod-auth-mysql
p   libapache2-mod-auth-mysql       - Apache 2 module for MySQL authentication  
$ sudo aptitude install libapache2-mod-auth-mysql

Continue reading

Controlling CPU frequency

We can control the CPU frequency with the cpufrequtils package. Installation is quite easy.

$ sudo aptitude install  cpufrequtils

To check to see if it’s installed.

[06:41:32] xavi@debian: ~ $ lsmod | grep -i cpu
acpi_cpufreq            6796  1 
cpufreq_powersave       1856  0 
cpufreq_stats           3776  0 
cpufreq_ondemand        6476  1 
freq_table              4224  3 acpi_cpufreq,cpufreq_stats,cpufreq_ondemand
cpufreq_userspace       3172  0 
cpufreq_conservative     5960  0 
processor              32576  4 acpi_cpufreq,thermal
[06:45:26] xavi@debian: ~ $ 

Continue reading

Apache visits with Perl

Here is another Perl script. This one given an Apache log file will tell you the number of hits per IP. Here is the code.

#!/usr/bin/perl -w

use strict;
use diagnostics;

if( $#ARGV != 0 ){
        print "Usage: ./parser.pl <logfile>\n"; 
        exit 1; }

# Opening logfile
open FILE, "$ARGV[0]" or die $!;

# Defining variables
my @lines = <FILE>;
my @ip;
my $items = scalar(@lines);
my ($i, $value); 
my %hits;

# Removing IP addresses from logfile and counting the hits per IP.
for ($i = 0; $i < $items; $i++)
        { @ip = split (/ /, $lines[$i]);
        if (exists $hits{$ip[0]}) {
                $hits{$ip[0]} = $hits{$ip[0]}+1; 
                chomp($hits{$ip[0]}); } 
        else {  $hits{$ip[0]} = 1; } 
        }

# Ordering and printing the hits per IP.
foreach $value (sort {"$hits{$b}" <=> "$hits{$a}" } keys %hits)
        { print "$value made $hits{$value} hits.\n"; }

Here is an usage example.

xavi@debianserver:~/Perl$ ./parser.pl /tmp/apachelog 
12.130.86.9 made 106 hits.
208.111.39.192 made 89 hits.
67.195.114.231 made 42 hits.
98.14.22.97 made 27 hits.
208.54.45.78 made 17 hits.
213.5.71.12 made 16 hits.
199.106.237.37 made 15 hits.
66.249.67.212 made 15 hits.
208.54.45.62 made 12 hits.
87.250.252.242 made 9 hits.
174.121.74.234 made 6 hits.
188.187.102.74 made 6 hits.
208.54.45.72 made 5 hits.
64.40.121.184 made 4 hits.
206.196.125.114 made 3 hits.
207.46.13.94 made 2 hits.
220.181.146.169 made 2 hits.
142.166.170.101 made 2 hits.
220.181.94.225 made 2 hits.
142.166.170.100 made 2 hits.
65.52.108.60 made 2 hits.
207.46.199.182 made 2 hits.
207.46.13.101 made 2 hits.
208.54.45.56 made 2 hits.
209.2.233.223 made 1 hits.
67.210.218.102 made 1 hits.
66.249.67.66 made 1 hits.
220.181.7.54 made 1 hits.
207.46.199.199 made 1 hits.

As usual, suggestions are always welcome.

Some basic MySQL

I don’t feel like doing a long post today so I’ll do some basic MySQL. First lets change the MySQL prompt. Here is a default MySQL prompt.

mysql> use test;
Database changed
mysql> select now();
+---------------------+
| now()               |
+---------------------+
| 2010-08-17 06:41:00 | 
+---------------------+
1 row in set (0.00 sec)

mysql> 

Pretty boring, right? Lets spice this a little bit. Type prompt mysql \u@\d> from the MySQL prompt and lets see what happens.

mysql> prompt mysql \u@\d>
PROMPT set to 'mysql \u@\d>'
mysql root@test> select now() \G
*************************** 1. row ***************************
now(): 2010-08-17 06:44:56
1 row in set (0.00 sec)

mysql root@test>

What we just did is modify the MySQL prompt to show us the user and the database being used. This is much more informative than the previous MySQL prompt.

Now what if we wanted to know the uptime of the database. Pretty simple type status; and that will give us the time the database has been up.

 mysql root@test>status;
--------------
mysql  Ver 14.12 Distrib 5.0.75, for debian-linux-gnu (i486) using readline 5.2

Connection id:          39
Current database:       test
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.0.75-0ubuntu10.5-log (Ubuntu)
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    latin1
Conn.  characterset:    latin1
UNIX socket:            /var/run/mysqld/mysqld.sock
Uptime:                 10 min 54 sec

Threads: 1  Questions: 125  Slow queries: 0  Opens: 34  Flush tables: 1  Open tables: 28  Queries per second avg: 0.191
--------------

mysql root@test>

If we wanted to know the running processes just type: show full processlist \G.

mysql root@test>show full processlist \G
*************************** 1. row ***************************
     Id: 39
   User: root
   Host: localhost
     db: test
Command: Query
   Time: 0
  State: NULL
   Info: show full processlist
1 row in set (0.00 sec)

mysql root@test>

This is all. I know this is very simple stuff, but didn’t felt like doing a long and complex post. As usual suggestions are always welcome.
References:

  1. https://www.ultraquantix.com/blog/2008/12/making-the-mysql-prompt-more-useful/”
  2. http://dev.mysql.com/doc/refman/5.0/en/mysql-commands.html

Tomcat MySQL realm

Let’s get started with another Tomcat chapter in this blog. Tomcat comes by default with the UserDatabaseRealm which is really crappy because it reads user info from tomcat-users.xml file and a Tomcat restart is needed for the changes to take effect. This is not appropriate for a production environment so we are going to authenticate against a MySQL database instead of the tomcat-users.xml file.
Continue reading