Sunday, March 23, 2014

My SVN notes


A. Installation

1. Go to the site and download the file and just install the default.

http://software.opensuse.org/download.html?project=devel:tools:scm:svn&package=subversion

select your version, my version is suse 11.

Installation failed twice and finally able to install on third attempt.

2. Create a repository.

jay@suvi:~> mkdir repository
jay@suvi:~> cd repository/
jay@suvi:~/repository> ls -l
total 0
jay@suvi:~/repository>

3. Now, lets bring the directory repository under svn.

jay@suvi:~/repository> svnadmin create /home/jay/repository
jay@suvi:~/repository> pwd
/home/jay/repository
jay@suvi:~/repository> ls
conf  db  format  hooks  locks  README.txt
jay@suvi:~/repository>
jay@suvi:~/repository> more README.txt
This is a Subversion repository; use the 'svnadmin' tool to examine
it.  Do not add, delete, or modify files here unless you know how
to avoid corrupting the repository.

Visit http://subversion.apache.org/ for more information.
jay@suvi:~/repository>

Note: please note the changes on the directory structure after using svnadmin command.

As read me file suggest, do not make changes to repository unless you know what you doing.

4. Creating Project.
and start a project with a simple file.
jay@suvi:~> pwd
/home/jay
jay@suvi:~> mkdir project1
jay@suvi:~> echo "Hello This is a test Project file">project1/hello.txt
jay@suvi:~> more project1/hello.txt
Hello This is a test Project file

Note: I am also not following recommened layout of subversion project which includes branches, tags and trunk. We will be working on "trunk" of the project as the instruction doc. This is the backbone of the project where main files and directories are placed.

5. Import the project.
To import the project1 using the following command,

jay@suvi:~> pwd
/home/jay
jay@suvi:~> svn import /home/jay/project1/ file:///home/jay/repository/project1/trunk -m "Initial import of Project1"
Adding         project1/hello.txt

Committed revision 1.
jay@suvi:~>


Note: as you see, you specify by source project directory followed by destination and -m to supply the message. Always add message when you import message.

6. Now, delete the temp Project file which originally created. We already imported it to subversion.
jay@suvi:~> pwd
/home/jay
jay@suvi:~> rm -rf project1

7. Check out a repository.
Subversion keeps a copy of each lets say commit which process is lets say called check out. Check out saves the initial project with the initial version or say version 1. After that we can make changes to the project and 'check in' or commit the change. So, the any subsequent commit would be next version say 2 of the project and so on.

8. Now, create a new directory on your home directory.

Saturday, March 8, 2014

Network Bonding


Assuming two network interfaces eth0 and eth1 as shown below.

[root@samserv05 network-scripts]# ifconfig -a
eth0      Link encap:Ethernet  HWaddr D8:D3:85:5F:D1:B6
          inet addr:172.28.7.206  Bcast:172.28.7.255  Mask:255.255.255.128
          inet6 addr: fe80::dad3:85ff:fe5f:d1b6/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:744339 errors:0 dropped:0 overruns:0 frame:0
          TX packets:234404 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:638166148 (608.6 MiB)  TX bytes:37473617 (35.7 MiB)
          Memory:fbd60000-fbd80000
eth1      Link encap:Ethernet  HWaddr D8:D3:85:5F:D1:B7
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
          Memory:fbde0000-fbe00000
1. Edit modprob.conf and append “alias bond0 bonding” as shown below.
Vi  /etc/modprob.conf
alias bond0 bonding
2. Create bond0 file and append below entry in it. Change the IPADDR and NETMASK to the one on your server
cd /etc/sysconfig/network-scripts/
cp ifcfg-eth0 ifcfg-eth1 /var/tmp
vi  etc/sysconfig/network-scripts/ifcfg-bond0
ifcfg-bond0
DEVICE=bond0
IPADDR=172.28.38.134
NETMASK=255.255.254.0
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
BONDING_OPTS="mode=active-backup miimon=100"


3. Edit eth0 and eth1 and append the content below. Replace HWADDR with the hardware address on your servers
Ifcg-eth0
DEVICE=eth0
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
ETHTOOL_OPTS="speed 1000 duplex full"
HWADDR=00:17:A4:78:5C:B9
Ifcfg-eth1
DEVICE=eth1
USERCTL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
ETHTOOL_OPTS="speed 1000 duplex full"
HWADDR=D8:D3:85:5D:F1:C7
4. Run the command below from the console
First down the active eth, e.g. eth0
Ifconfig eth0 down
/etc/init.d/network restart 
[root@samserv05 network-scripts]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.4.0-1 (October 7, 2008)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Speed: 100 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: d8:d3:85:5f:d1:b6
Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: d8:d3:85:5d:f1:c7
If this does not work, reboot the server.

Monday, February 24, 2014

Some example of if statement - Shell scripting example

#!usr/bin/ksh
num1=20
num2=30
if [[ $num2 -gt $num1 ]]; then
    echo "The second value ${num2} is greater than the first value ${num1} ."
    exit 1
else
    echo "The sum of these number is `expr $num1 + $num2`"
    echo "Cool, enjoy !!!"
fi

-----------------------------------------------------------

if [ -d /opt/share ]
then
    /usr/bin/rmdir /opt/share 2>/dev/null
        if [ $? != "0" ]
        then
            /usr/bin/rm -r /opt/share 2>/dev/null
        fi
    /usr/bin/rm -rf /opt/share 2>/dev/null
fi
/usr/bin/mkdir -p /opt/share
/usr/bin/cp ~jay/notes/* /opt/share

-----------------------------------------------------------

if [ `whoami` != "root" ]
then
    exit 1
fi

-----------------------------------------------------------

Automate FS creation task for LVM and VxVM

bash-3.2$ cat >my_LVM
# VG    FS      Size
vg01    FS_WWW  20G
vg01    FS_WWW2 30G
vg02    FS_WWW  20G
vg02    FS_WWW2 30G
---------------------------------------------
bash-3.2$ more mylvm.sh
#!/bin/sh
# Sam
# Automate FS creation task
# Mon Feb 24 12:30:18 EST 2010
#
cat my_LVM | grep -v "^#" | while read myvg myfs mysize
do
#
echo " "
echo For LVM
        echo lvcreate -L ${mysize} -n ${myfs} ${myvg}
        echo mkfs /dev/${myvg}/${myfs}
#
echo " "
echo For Veritas Volume Manager
        echo vxassist -g ${myvg} -b make ${myfs} ${mysize} layout=nostripe
        echo " "
#
echo For vxfs
#
        echo /usr/lib/fs/vxfs/mkfs -F vxfs -o largefiles /dev/vx/rdsk/${myvg}/${myfs}
        echo " "
#
echo For UFS
#
        echo newfs -v /dev/vx/rdsk/${myvg}/${myfs}
        echo fsck -y /dev/vx/rdsk/${myvg}/${myfs}
        echo "-----------------------------------"
#       echo " "
done
#
echo
echo "Task completed !!!"
echo
bash-3.2$

---------------------------------------------
bash-3.2$ sh mylvm.sh
For LVM
lvcreate -L 20G -n FS_WWW vg01
mkfs /dev/vg01/FS_WWW
For Veritas Volume Manager
vxassist -g vg01 -b make FS_WWW 20G layout=nostripe
For vxfs
/usr/lib/fs/vxfs/mkfs -F vxfs -o largefiles /dev/vx/rdsk/vg01/FS_WWW
For UFS
newfs -v /dev/vx/rdsk/vg01/FS_WWW
fsck -y /dev/vx/rdsk/vg01/FS_WWW
-----------------------------------
For LVM
lvcreate -L 30G -n FS_WWW2 vg01
mkfs /dev/vg01/FS_WWW2
For Veritas Volume Manager
vxassist -g vg01 -b make FS_WWW2 30G layout=nostripe
For vxfs
/usr/lib/fs/vxfs/mkfs -F vxfs -o largefiles /dev/vx/rdsk/vg01/FS_WWW2
For UFS
newfs -v /dev/vx/rdsk/vg01/FS_WWW2
fsck -y /dev/vx/rdsk/vg01/FS_WWW2
-----------------------------------
For LVM
lvcreate -L 20G -n FS_WWW vg02
mkfs /dev/vg02/FS_WWW
For Veritas Volume Manager
vxassist -g vg02 -b make FS_WWW 20G layout=nostripe
For vxfs
/usr/lib/fs/vxfs/mkfs -F vxfs -o largefiles /dev/vx/rdsk/vg02/FS_WWW
For UFS
newfs -v /dev/vx/rdsk/vg02/FS_WWW
fsck -y /dev/vx/rdsk/vg02/FS_WWW
-----------------------------------
For LVM
lvcreate -L 30G -n FS_WWW2 vg02
mkfs /dev/vg02/FS_WWW2
For Veritas Volume Manager
vxassist -g vg02 -b make FS_WWW2 30G layout=nostripe
For vxfs
/usr/lib/fs/vxfs/mkfs -F vxfs -o largefiles /dev/vx/rdsk/vg02/FS_WWW2
For UFS
newfs -v /dev/vx/rdsk/vg02/FS_WWW2
fsck -y /dev/vx/rdsk/vg02/FS_WWW2
-----------------------------------
Task completed !!!
bash-3.2$

==============================================================

# cat lvm_create.sh
#!/bin/sh
# SAM Bhusal
# Automate FS creation task. This script tested and verified on Redhat Enterprise 6.x version.
# Config file entry eg.
# # file_name: LVM_WEBLOGIC
# # For Weblogic
# # vg    FS      Size(GB) Mnt point
# --------------------------------
# datavg  WEB     10     /web
# datavg  WEBDATA 15     /webdata
#
# Mon Feb 24 12:13:24 EST 2014
# Update: Thu Aug 14 09:55:12 EDT 2014
# Added the entry for mount point on config file.
# Added entry to the fstab.
#
if [ `/usr/bin/whoami` != "root" ]
then
        echo "You must be root to run this script"
        exit 1
fi
# Creating LVM.
/bin/cat LVM_WEBLOGIC | grep -v "^#" | while read myvg myfs mysize mymt
do
        echo " "
        # Check if mount point already exists.
        #/bin/df -h ${mymt}
        /bin/ls -ld ${mymt}
        if [ $? -eq 0 ]; then
                echo "Mount Point exists."
                echo "Please review the config file."
                exit 1
        fi
        /sbin/lvcreate -L ${mysize}G -n ${myfs} ${myvg}
        /sbin/mkfs.ext4 /dev/${myvg}/${myfs}
        # Create mount point
        /bin/mkdir -p ${mymt}
        # Add Entry to fstab
        echo "###########################################################################" >>/etc/fstab
        echo "/dev/${myvg}/${myfs}      ${mymt} ext4    defaults        1 2" >>/etc/fstab
        # Mount the filesystem.
        /bin/mount -a
        # Verify if the filesystems were created.
        /bin/df -h      ${mymt}
        # Check the condition if the process is successful.
        if [ $? -eq 0 ]; then
                echo "Successfully Created fileystem."
                continue
        else
                echo "Failed, please review the error"
                # exit
        fi
echo " ----------------end----------------"
done
# EOF

# cat LVM_WEBLOGIC
# file_name: LVM_WEBLOGIC
# SAM Bhusal
# For Weblogic
# vg    FS       Size(GB)  mPoint
#---------------------------------------
datavg  PKGS            20      /pkgs
datavg  WWW             10      /www
datavg  WWW_DOCROOT     10      /www/docroot
datavg  WWW_SERVERS     10      /www/servers
datavg  FMAC_TEST       10      /fmac/test
datavg  FMACDATA        10      /fmacdata
 

Saturday, February 15, 2014

Shell Script example

Example of shel script

Eg of C code

[devi@ram ~]$ cat mail.c
#include <stdio.h>

int main() {
      printf ("Hello World\n");
      return (0);
}
[devi@ram ~]$ gcc mail.c
[devi@ram ~]$ ./a.out
Hello World

eg of shell script
[devi@ram ~]$ cat greet.sh
#!/bin/sh
# Author:
# It displays the "Hello World"
#
echo "Hello World !!!"

[devi@ram ~]$ sh greet.sh
Hello World !!!


Configure SUDO

Enhanced User Security

- Sudo user
- Normal user cannot run every command
- It is used for giving or allowing special permission to the normal user
- use " whereis" command to know the command exact path
- When executing, use sudo + full path of the command
- Configuration file is /etc/sudoers
- When editing use visudo which checks the syntax.
------------------------------------------------------


Permission to users
# visudo
  root ALL = (ALL)
  jay  ALL = /usr/sbin/useradd  OR    // only allowing useradd command permission
  jay ALL = ALL                // Giving full permission
  :wq

Now, change to the user jay
# su - jay
$ useradd tom                // Error, Permission Denied
$ sudo /usr/sbin/useradd tom
---------------------------------------------

Permission to group
# groupadd sales
# usermod -G sales jay
# usermod -G sales dev
#visudo
  %sales    ALL=/usr/sbin/useradd
  :wq

Now, change user to dev

# su - dev
$ sudo /usr/sbin/useradd ram
---------------------------------------

Aliases

There are two (or three) types of Alias
- User alias
- Command Alias
{- Host Alias }
------------------------------------------------------

# visudo
  ## Users aliases
  User_Alias  TESTER = jay, dev        // TESTER is just a name to represent users.
  ## You can create different user alias and add different user to give different permission.
  ## Command aliases
  Cmmd_Alias CMDS = /sbin/service,/sbin/fdisk      // CMDS=just an name, anyname of command alias

  root ALL = (ALL)
  TESTER ALL = CMDS
  :wq

Now, switch to user and test the access.

======================================

visodo and add the following info on the file.
# visudo

Host_Alias     DBSERVERS = bardiya, nepal, udaya
User_Alias ADMINS = surya, jay, kamal
Cmnd_Alias ADMINCMDS = /usr/sbin/useradd, /usr/bin/passwd,/sbin/route
ADMINS DBSERVERS=ADMINCMDS

wq!

login as: surya
surya@192.168.10.32's password:
Last login: Fri Mar 15 00:13:01 2013 from 192.168.10.11
Red Hat Enterprise Linux Server release 6.1 (Santiago)
Kernel \r on an \m
If you mess with this system, you will be on big trouble.....

[surya@bardiya ~]$ sudo useradd pratic
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
    #1) Respect the privacy of others.
    #2) Think before you type.
    #3) With great power comes great responsibility.
[sudo] password for surya:

[surya@bardiya ~]$ id pratic
uid=2021(pratic) gid=2021(pratic) groups=2021(pratic)

[surya@bardiya ~]$ sudo passwd pratic
Changing password for user pratic.
New password:
BAD PASSWORD: it is based on a dictionary word
Retype new password:
passwd: all authentication tokens updated successfully.
[surya@bardiya ~]$

Create LVM - a simple method...

Still need to fine tune...

[root@ram ~]# cat >vols
apps    1G
webs    1G

[root@ram ~]# cat vols | while read fs size
> do
> echo Filesystem is $fs
> echo Size is $size
> done
Filesystem is apps
Size is 1G
Filesystem is webs
Size is 1G


[root@ram ~]# cat vols | while read fs size
> do
>  lvcreate -L ${size} -n ${fs} test_vol
> mkfs.ext4 /dev/test_vol/${fs}
> mkdir /myFS
> mount /dev/test_vol/${fs} /myFS
> done
  Logical volume "apps" created
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 33 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
  Logical volume "webs" created
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 37 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
mkdir: cannot create directory `/myFS': File exists
[root@ram ~]# df -h /myFS
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/test_vol-webs
                     1008M   34M  924M   4% /myFS
[root@ram ~]#