Monday, November 5, 2012

Git + CentOS + Step by Step

Git + CentOS + Step by Step

Install the git

yum install git

Define Global variables
[root@GOLDMASTER ~]# git config --global "myName"
[root@GOLDMASTER ~]# git config --global ""

Make a directory where you want your repository
[root@GOLDMASTER ~]# mkdir /opt/repository
[root@GOLDMASTER ~]# cd /opt/repository/
[root@GOLDMASTER repository]# git config --global color.ui auto

Make your repositry
[root@GOLDMASTER repository]# mkdir project
[root@GOLDMASTER repository]# cd project/

Initialize the repository
[root@GOLDMASTER project]# git init
Initialized empty Git repository in /opt/repository/project/.git/

It will create a .git directory

[root@GOLDMASTER project]# ls -la
total 12
drwxr-xr-x 3 root root 4096 Nov  5 19:47 .
drwxr-xr-x 4 root root 4096 Nov  5 19:47 ..
drwxr-xr-x 7 root root 4096 Nov  5 19:47 .git
[root@GOLDMASTER project]#

Add docs and files in the repository    
[root@GOLDMASTER project]# mkdir docs
[root@GOLDMASTER project]# cd docs/
[root@GOLDMASTER docs]# vim testdoc.txt
[root@GOLDMASTER docs]# cd ..
[root@GOLDMASTER project]# ls
[root@GOLDMASTER project]# git add .
[root@GOLDMASTER project]# git commit -m " my first commit"
[master (root-commit) 600533f]  my first commit
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 docs/testdoc.txt

Each time you make a change you want to track, you need to commit it.
In Git committing a change and sharing that change are two different processes...which is not a case in CVS.

Clone the Project Repository

[root@GOLDMASTER repository]# ls
[root@GOLDMASTER repository]# git clone project/ /var/local/project
Initialized empty Git repository in /var/local/project/.git/
[root@GOLDMASTER repository]#

If you create the file ~/.gitconfig  & put write the below lines then you can create the aliases as shown below.

  name = YOUR NAME
  email =

  st = status
  di = diff
  co = checkout
  ci = commit -am
  br = branch
  brr = branch -r
  bra = branch -a
  sta = stash
  pl = pull
  ps = push
  lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative
  wc = whatchanged --pretty=oneline

  ui = true
  diff = auto
  status = auto
  branch = auto

  default = tracking

[color "branch"]
  current = green bold
  local = yellow
  remote = green

[color "diff"]
  meta = cyan bold
  frag = magenta bold
  old = red bold
  new = green bold

[color "status"]
  added = magenta
  changed = green
  untracked = cyan

  pager = less -FRSX
  excludesfile = /home/YOU/.gitignore
  editor = vim
  autocrlf = input
  quotepath = false

  tool = vimdiff

  whitespace = warn

  reflogexpire = 300
  reflogexpireunreachable = 90

  pretty = %C(yellow)%h%Creset %s %C(red)(%cr)%Creset

  user = YOU
  token = YOURS

# vi:filetype=gitconfig:tabstop=2:expandtab


Thursday, November 1, 2012

Memcache + CentOS

Install Memcached from Source
Download the latest source from website.
  • # cd /usr/src
  • # wget
  • # tar zxvf memcached-1.4.13.tar.gz
  • # cd memcached-1.4.13
  • # ./configure –with-libevent
  • # make all && make install
Install the libmemcached
libMemcached is an open source C/C++ client library and tools for the memcached server ( It has been designed to be light on memory usage, thread safe, and provide full access to server side methods. You can download the latest version from
  • # wget
  • # tar zxvf libmemcached-1.0.4.tar.gz
  • # cd libmemcached-1.0.4
  • # ./configure
  • # make && make install
It is advisable to run/start the memcached process as non-root user. We need to create  a daemon starter scripts for memcached.
  • # touch /etc/memcached.conf
in /etc/memcached.conf place the following code.
#Memory size  (adjust this according to your settings)
-m 64
# default port
-p 11211
# user to run daemon nobody/apache/www-data
-u nobody
# only listen locally
Create the startup files.
Using SSH Terminal, execute the following command
  • # touch /etc/init.d/memcached
  • # chmod +x /etc/init.d/memcached
in /etc/init.d/memcached place the follwing code.
# memcached This shell script takes care of starting and stopping
# standalone memcached.
# chkconfig: – 80 12
# description: memcached is a high-performance, distributed memory
# object caching system, generic in nature, but
# intended for use in speeding up dynamic web
# applications by alleviating database load.
# processname: memcached
# config: /etc/memcached.conf
# Source function library.
. /etc/rc.d/init.d/functions
[ -x $DAEMON ] || exit 0
[ -x $DAEMONBOOTSTRAP ] || exit 0
start() {
echo -n $”Starting $DESC: “
[ $RETVAL -eq 0 ] && touch $PIDFILE
return $RETVAL
stop() {
echo -n $”Shutting down $DESC: “
killproc $NAME
[ $RETVAL -eq 0 ] && rm -f $PIDFILE
return $RETVAL
# See how we were called.
case “$1″ in
status $prog
echo $”Usage: $0 {start|stop|restart|status}”
exit 1
exit $RETVAL
 Using SSH Terminal, execute the following command
  • # touch /usr/local/bin/start-memcached
  • # chmod +x  /usr/local/bin/start-memcached
in /usr/local/bin/start-memcached place the following code.
#!/usr/bin/perl -w
# start-memcached
# 2003/2004 – Jay Bonci
# This script handles the parsing of the /etc/memcached.conf file
# and was originally created for the Debian distribution.
# Anyone may use this little script under the same terms as
# memcached itself.
use strict;
if ($> != 0 and $< != 0) {
print STDERR “Only root wants to run start-memcached.\n”;
my $etcfile = shift || “/etc/memcached.conf”;
my $params = [];
my $etchandle;
# This script assumes that memcached is located at /usr/bin/memcached, and
# that the pidfile is writable at /var/run/
my $memcached = “/usr/local/bin/memcached”;
my $pidfile = “/var/run/”;
# If we don’t get a valid logfile parameter in the /etc/memcached.conf file,
# we’ll just throw away all of our in-daemon output. We need to re-tie it so
# that non-bash shells will not hang on logout. Thanks to Michael Renner for
# the tip
my $fd_reopened = “/dev/null”;
sub handle_logfile {
my ($logfile) = @_;
$fd_reopened = $logfile;
sub reopen_logfile {
my ($logfile) = @_;
open *STDERR, “>>$logfile”;
open *STDOUT, “>>$logfile”;
open *STDIN, “>>/dev/null”;
$fd_reopened = $logfile;
# This is set up in place here to support other non -[a-z] directives
my $conf_directives = {
“logfile” => \&handle_logfile
if (open $etchandle, $etcfile) {
foreach my $line (<$etchandle>) {
$line =~ s/\#.*//go;
$line = join ‘ ‘, split ‘ ‘, $line;
next unless $line;
next if $line =~ /^\-[dh]/o;
if ($line =~ /^[^\-]/o) {
my ($directive, $arg) = $line =~ /^(.*?)\s+(.*)/;
push @$params, $line;
unshift @$params, “-u root” unless (grep $_ eq ‘-u’, @$params);
$params = join ” “, @$params;
if (-e $pidfile) {
open PIDHANDLE, “$pidfile”;
my $localpid = ;
chomp $localpid;
if (-d “/proc/$localpid”) {
print STDERR “memcached is already running.\n”;
} else {
`rm -f $localpid`;
my $pid = fork();
if ($pid == 0) {
exec “$memcached $params”;
} elsif (open PIDHANDLE,”>$pidfile”) {
print PIDHANDLE $pid;
} else {
print STDERR “Can’t write pidfile to $pidfile.\n”;

Test the startup script. This command will start memcached server.
  • # /etc/init.d/memcached restart
Add memcached as autostart daemon. This command will make sure that memcached will start automatically on when your server restart.
  • # /sbin/chkconfig memcached on

Install the Memcache PECL Extension for PHP
Even though memcached is happily running on the server, it’s not accessible from PHP without the PECL extension. Fortunately this is a very easy process, just use the pecl command.
  • # pecl install memcache
Make sure that is in your php.ini (it should be added in there automatically if not, add it).
Restart Apache

/tmp noexec

 remount /tmp to make it executable by issuing the following command:
# mount -o remount,exec /tmp
Once you’re done,  set /tmp back to noexec:
# mount -o remount,noexec /tmp

Thursday, October 25, 2012

Few good links

The following are comprehensive configuration examples.

1) You can obtain 3DES key free from:

2) Free Software Download Page:

3) Good link to obtain TFTP, SYSLOG, FTP etc:   (Only tftp server)

4) Complete list for IANA Ports Information:

5) Bandwidth Utilization:

Apache benchmarking tool (ab) + CentOS

yum install apr-util
yum install yum-utils

ab -n 50 -c 10
It will test 50 requests + maximum of 10 requests running concurrently

The -c parameter specifies the number of connections; the -k stands for HTTP Keep-Alive; and the -t parameter sets the time in seconds for which each connection is alive
ab -n 50 -kc 10 -t 60

Run this command on the webserver to analyze the traffic as well 
tcpdump -nn 'tcp[tcpflags] == tcp-rst' and port 80 and src host x.x.x.x 

Tuesday, October 23, 2012

Easy Twiki backup

cd /var/www
/etc/init.d/httpd stop
sleep 5
tar -zcf twiki.tgz twiki
mv twiki.tgz /home/public/sync/
/etc/init.d/httpd start
cd /home/public/sync
ls -la | mail -s "backup $HOSTNAME -'date'"

Monday, October 22, 2012

Search & Delete the logs + cron

Delete from a path
sudo find /Path-to-directory/ -name *.log  -exec rm -rf -v {} \;

Delete from the current directory
sudo find . -type f -name "*.bak" -exec rm -rf -v {} \;

By default cron jobs sends a email to the user account executing the cronjob. If this is not needed put the following command At the end of the cron job line .
>/dev/null 2>&1

To collect the cron execution execution log in a file :
30 18 * * * rm /home/someuser/tmp/* > /home/someuser/cronlogs/clean_tmp_dir.log

Saturday, October 6, 2012

Delete emails from mailbox/es – Exchange 2007

First Grant all the permission to the mailboxes you are to have empty.
Get-Mailbox "target-username" | Add-MailboxPermission -AccessRights FullAccess -User "my-username"

Put the below command in the a file and save it as a .ps1 file - It will delete all the emails from a mailbox catchall without prompting

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin

Get-Mailbox -Identity catchall | Export-Mailbox -DeleteContent  -Confirm:$false


Put the below command in a file and save it it as a  .bat file and schedule it in windows scheduler
Powershell.exe -command "& {d:\scripts\catchallMailDelete.ps1}"


Delete everything: (from all Mailboxes)
Get-Mailbox | Export-Mailbox -DeleteContent

Export everything: (and then delete the mails from the mailbox)
Get-Mailbox | Export-Mailbox -PSTfolderPath "c:\temp" -DeleteContent

Delete Emails with a given sender name:
Get-Mailbox | Export-Mailbox -SenderKeywords -DeleteContent

Friday, October 5, 2012

Deploying with Capistrano

  1. sudo gem install capistrano-ext
  2. cd yours_rails_directory
  3. capify .
  4. mkdir config/deploy
Now we will create two deployments staging and production and a new staging environment.

  1. touch config/deploy/staging.rb
  2. touch config/deploy/production.rb
  3. touch config/environments/staging.rb
  1. config/deploy.rb
  2. config/deploy/production.rb
  3. config/deploy/staging.rb
  4. config/environments/staging.rb:  
  5. config/databases.yml
Now run the capistrano commands to set up the deployment. 
  1. cap staging deploy:setup
    (this creates the correct directory tree)
  2. cap staging deploy:check
    (this checks to make sure setup ran)
  3. cap staging deploy:update
    (this updates the server with the app code)
  4. ssh your_user_name@your_deployment_server
    (fill in the correct user and server here)
  5. cd your_deployment_directory/current
    (again fill in the correct deploy to dir)
  6. RAILS_ENV=staging sudo rake gems:install
    (this installs gems that need native compiling)
  7. RAILS_ENV=staging rake db:schema:load
    (loads the database)
  8. RAILS_ENV=staging rake db:seed
    (loads any seed data)
  9. script/console staging
    (load the console for testing)
  10. app.get('/')
    (test to see if this returns ‘200’)
  11. exit
    (exit the console)
  12. exit
    (exit ssh)
  13. cap staging deploy:restart

Saturday, September 29, 2012

SMTP Relay in Exchange 2007 OR Exchange 2010 (for testing )& Restricting Outbound Email

You may want to do some email testing in the staging environment for real customers minus sending them actually.
By Default exchange is not open realy.
If you already have exchange in your environment and it is  used in the production. then you need to create another dummy domain for the testing. e.g stage.local.
You can use a VM for installing both AD & Exchange on a single machine.
Open up the
exchange MMC
                Server Configuration
                                Hub Transport
 create a "new Receive connector"




Now Open the powershell
Get-ReceiveConnector "StageTest" | Add-ADPermission -User "NT AUTHORITY\ANONYMOUS LOGON" -ExtendedRights "ms-Exch-SMTP-Accept-Any-Recipient"

The above will allow the relay to the Anonymous group for that connector.

Now as we may not want that email will go outside the machine (to real customers). We need to create a "transport rule".
Create a user mailbox  e.g  "catchall" .  This will be catch all the emails that you will be sending to the real customer.

open exchange MMC
Organization Configuration==>Hub Transport ==> Transport Rules

Click on the new transport rule on the right side>
Give it a name e.g Mail Redirect


This should do the trick. To be extra sure you can remove the DNS and Gateway entry of the machine. (in that way this machine will  work inside the LAN only)

A Receive connector that is configured to accept messages from all remote IP addresses through SMTP port 25   This connector typically accepts connections from all IP address ranges. The usage type for this connector is Internal. This connector is created automatically during setup. This connector only accepts mail from other Exchange servers that are part of the same Exchange organization. By default, this connector does not accept anonymous submissions.