Friday, April 13, 2012

How to know if the machine you are working on are a VM

There are a few ways you can detect if the machine you are working on is a VM. Below are commands to use and the output if your machine is a VM:

  1. Use dmidecode command, dmidecode is a tool for dumping a computer DMI (some say SMBIOS) table contents in a human-readable format. So if your machine is a vm, you should not get any output:
    [somebody@theserver ~]$ sudo dmidecode
    # dmidecode 2.10
    /dev/mem: mmap: Bad address
  2. Try check on /proc/scsi/scsi, if it is a vm, you would not get any attached device:
    [somebody@theserver ~]$ cat /proc/scsi/scsi 
    Attached devices:

  3. Use lspci and see if there is any virtual related devices:
    [somebody@theserver ~]$ /sbin/lspci 
    00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
    00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
    00:01.1 IDE interface: Intel Corporation 82371SB PIIX3 IDE [Natoma/Triton II]
    00:01.2 USB controller: Intel Corporation 82371SB PIIX3 USB [Natoma/Triton II] (rev 01)
    00:01.3 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
    00:02.0 VGA compatible controller: Cirrus Logic GD 5446
    00:03.0 Ethernet controller: Red Hat, Inc Virtio network device
    00:04.0 Ethernet controller: Red Hat, Inc Virtio network device
    00:05.0 SCSI storage controller: Red Hat, Inc Virtio block device
    00:06.0 RAM memory: Red Hat, Inc Virtio memory balloon
    00:07.0 SCSI storage controller: Red Hat, Inc Virtio block device
  4. Check on your network interface:
    [somebody@theserver ~]$ /sbin/ethtool -i eth0
    driver: virtio_net
    version:
    firmware-version:
    bus-info: virtio0
  5. Use dmesg and search for word virt, KVM, vmware, xen:
    [somebody@theserver ~]$ dmesg | grep -i vir
    Booting paravirtualized kernel on KVM
    CPU0: Intel QEMU Virtual CPU version (cpu64-rhel6) stepping 03
    input: Macintosh mouse button emulation as /devices/virtual/input/input1
    virtio-pci 0000:00:03.0: PCI INT A -> Link[LNKC] -> GSI 10 (level, high) -> IRQ 10
    virtio-pci 0000:00:04.0: PCI INT A -> Link[LNKD] -> GSI 11 (level, high) -> IRQ 11
    virtio-pci 0000:00:05.0: PCI INT A -> Link[LNKA] -> GSI 10 (level, high) -> IRQ
    [somebody@theserver2:~]$ dmesg | grep -i -e virt
    [ 0.000000] Booting paravirtualized kernel on Xen
    [ 0.102602] input: Macintosh mouse button emulation as /devices/virtual/input/input0
    [ 3.577404] Initialising Xen virtual ethernet driver

Wednesday, January 11, 2012

Ping a list of servers

To do this, you need to put all the hosts that need to be checked in a file. For example, I put all my hosts in a file called ping_list:

$ cat ping_list
cat.myhost.net
dog.myhost.net
tiger.myhost.net
bird.myhost.net
There are a few ways to ping multiple hostnames, I'll list out what I have tried before:

1. Use nmap
$ nmap -sP -iL ping_list
Failed to resolve given hostname/IP: cat.myhost.net. Note that you can't use '/mask' AND '1-4,7,100-' style IP ranges
Failed to resolve given hostname/IP: dog.myhost.net. Note that you can't use '/mask' AND '1-4,7,100-' style IP ranges
Host 192.168.0.99 is up (0.00036s latency).
Host 192.168.0.100 is up (0.00061s latency).
where -sP is for ping test and -iL is for inputting from files.

2. One liner for loop
$ for i in `cat ping_list`; do ping -c1 $i; done
ping: unknown host cat.myhost.net
ping: unknown host dog.myhost.net
PING tiger.myhost.net (192.168.0.99) 56(84) bytes of data.

--- tiger.myhost.net ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

PING tiger.myhost.net (192.168.0.100) 56(84) bytes of data.

--- bird.myhost.net ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
I believe there are other tools or scripts beside those I listed above, but I always these 2 methods to ping multiple hosts. If you have other tools or script, please leave a comment.

Thanks

Tuesday, December 6, 2011

Store svn password

To store your cert and password, all you have to do is:

1. Go to .subversion in your home folder

$ cd ~/.subversion
2. Run below command. This command will add store-auth-creds = yes and store-passwords = yes to your bottom of config file
$ echo -e "store-auth-creds = yes\nstore-passwords = yes" >> config
3. Run any svn command, and choose p for permanent accept certificate, and yes for storing your password.

Now you won't be asked for svn password anymore.

Friday, November 25, 2011

Add file type swap to linux

To add swap to linux machine:

1. Create a swap file. Size depends on your preference. Let's say we want to create a swap file with 8GB size (1024 x 1024 x 8 = 8388608).

# dd if=/dev/zero of=/swapfile bs=1024 count=8388608
where if is source, of is output file for dd to write to which is /swapfile in this case, bs is read/write byte size at a time and count is number of blocks.

2. Once created, make it a swap file
# mkswap /swapfile
3. Activate your swap file
# swapon /swapfile
4. Check your newly created swap space using free or top
# free -m
or
# top
5. To make it appear even after reboot, put it into fstab
# echo "swapfile swap swap defaults 0 0" >> /etc/fstab
It will look like this:
# cat /etc/fstab 
...
/swapfile1 swap swap defaults 0 0
...

Tuesday, November 1, 2011

ssh forward tunnel

To make this happen, the command is like below:

$ ssh -L 10022:target.local:22 middle.local
where:
-L is for forward tunnel, 10022 is the port at localhost that we want to use, target.local is our target, 22 is the target's port that we want to forward and middle.local is our middleman server.

What the above command do is forwarding port 22 of target.local to port 10022 of localhost by using middle.local as a middleman. Once done, you can access port 22 of target.local just by SSHing into port 10022 in your localhost like below:
$ ssh localhost -p10022
and voila, you will be directed to target.local instead. This technique is useful when you have firewall blocking some ports, and you have server behind the firewall than can access those ports witth openssh installed.