Bug #326

tm_ssh removes ${ONE_LOCATION}/var

Added by Martin Kopta almost 11 years ago. Updated almost 11 years ago.

Status:ClosedStart date:08/24/2010
Priority:NormalDue date:
Assignee:-% Done:

100%

Category:-
Target version:-
Resolution:fixed Pull request:
Affected Versions:

Description

Hello, I just tried to fetch, build and run latest checkout of OpenNebula 2.0 from git. When I try to deploy a VM, something from CLI or OCA removes ${ONE_LOCATION}/var directory, which contains all logs and daemon pids.

This is how I download, compile and install Opennebula:

bash-4.1$ git branch
  master
* one-2.0
-bash-4.1$ git pull
Already up-to-date.
-bash-4.1$ scons mysql=yes -j8
...
-bash-4.1$ echo $?
0
-bash-4.1$ whoami
one
-bash-4.1$ pwd
/home/one/one.git
-bash-4.1$ /sbin/rm -rf ~/local
-bash-4.1$ mkdir ~/local
-bash-4.1$ ./install.sh -d ~/local

I prepared rm wrapper:

-bash-4.1$ cat > ~/local/bin/rm  <<EOF
#!/bin/bash
echo "$@" >> /tmp/rmlog
/bin/rm "$@" 
EOF
-bash-4.1$ chmod +x ~/local/bin/rm
-bash-4.1$ echo $PATH
/home/one/local/bin:/home/one/lo/bin:/bin:/usr/bin:/sbin:/usr/sbin:/usr/local/bin

This is exact content of my ~/local/etc/oned.conf:

VM_POLLING_INTERVAL      = 600
VM_DIR=/home/one/vms
PORT=2633
DB = [ backend = "mysql",
       server  = "localhost",
       user    = "oneadmin",
       passwd  = "censored",
       db_name = "opennebula" ]
VNC_BASE_PORT = 5000
DEBUG_LEVEL=3
NETWORK_SIZE = 254
MAC_PREFIX   = "02:00" 
IMAGE_REPOSITORY_PATH = /home/one/repository
DEFAULT_IMAGE_TYPE    = "OS" 
DEFAULT_DEVICE_PREFIX = "hd" 
IM_MAD = [
      name       = "im_kvm",
      executable = "one_im_ssh",
      arguments  = "im_kvm/im_kvm.conf" ]
VM_MAD = [
    name       = "vmm_kvm",
    executable = "one_vmm_kvm",
    default    = "vmm_kvm/vmm_kvm.conf",
    type       = "kvm" ]
TM_MAD = [
    name       = "tm_ssh",
    executable = "one_tm",
    arguments  = "tm_ssh/tm_ssh.conf" ]
HM_MAD = [
    executable = "one_hm" ]

I cleaned up the DB to be sure:

# echo 'drop database opennebula;' | mysql -u root -p
Enter password:
#

And now, this is the problem:

-bash-4.1$ one start
oned and scheduler started
-bash-4.1$ ls ~/local/var
oned.log  oned.pid  sched.log  sched.pid
-bash-4.1$ onehost create tchitchi im_kvm vmm_kvm tm_ssh
-bash-4.1$ onevnet create ~/templates/net.lan1
-bash-4.1$ onehost show 0 | grep STATE
STATE                 : MONITORED
-bash-4.1$ > /tmp/rmlog
-bash-4.1$ onevm submit ~/templates/vm.ubuntu
-bash-4.1$ onevm show 0 | grep STATE
STATE          : ACTIVE
LCM_STATE      : PROLOG
-bash-4.1$ onevm show 0 | grep STATE
STATE          : FAILED
LCM_STATE      : LCM_INIT
-bash-4.1$ ls ~/local/var
ls: cannot access /home/one/local/var: No such file or directory
-bash-4.1$ cat /tmp/rmlog
-rf /home/one/local//var/
-bash-4.1$

Obviously, something deleted ${ONE_LOCATION}/var directory which should NOT happen. If you need more info for this issue, I gladly help.

Associated revisions

Revision f59095c6
Added by Jaime Melis almost 11 years ago

Modified AWK path (#326)

History

#1 Updated by Martin Kopta almost 11 years ago

I placed some probes into lib/tm_commands/ssh/tm_* and the bad one is tm_context.sh:

-bash-4.1$ cat /tmp/onelog 
tm_context.sh: rm -rf /home/one/local//var/

So I placed some more probes into tm_context.sh and I have got:

-bash-4.1$ cat /tmp/onelog 
tm_context.sh: DST_PATH = /home/one/vms/4/images/disk.1
tm_context.sh: DST_DIR  = /home/one/vms/4/images
tm_context.sh: DST_FILE = disk.1
tm_context.sh: DST      = tchitchi:/home/one/vms/4/images/disk.1
tm_context.sh: MD5SUM   = /usr/bin/md5sum
tm_context.sh: AWK      = /usr/bin/awk
tm_context.sh: DST_HASH = 
tm_context.sh: TMP_DIR  = /home/one/local//var/
tm_context.sh: ISO_DIR  = /home/one/local//var//isofiles
tm_context.sh: rm -rf /home/one/local//var

The problem is caused by unset DST_HASH, which is caused by missing AWK:

-bash-4.1$ /usr/bin/awk
-bash: /usr/bin/awk: No such file or directory
-bash-4.1$ which awk
/bin/awk

Proposed patch:

diff --git a/src/tm_mad/tm_common.sh b/src/tm_mad/tm_common.sh
index 5caba58..df904ad 100644
--- a/src/tm_mad/tm_common.sh
+++ b/src/tm_mad/tm_common.sh
@@ -23,7 +23,7 @@ else
 fi

 # Paths for utilities
-AWK=/usr/bin/awk
+AWK=$(which awk)
 BASH=/bin/bash
 DATE=/bin/date
 DD=/bin/dd

Or the awk could be thrown away since its pretty overkill here.

diff --git a/src/tm_mad/ssh/tm_context.sh b/src/tm_mad/ssh/tm_context.sh
index b420be3..c20b300 100755
--- a/src/tm_mad/ssh/tm_context.sh
+++ b/src/tm_mad/ssh/tm_context.sh
@@ -41,7 +41,7 @@ fi
 DST_PATH=`arg_path $DST`
 DST_DIR=`dirname $DST_PATH`
 DST_FILE=`basename $DST_PATH`
-DST_HASH=`echo -n $DST | $MD5SUM | $AWK '{print $1}'`
+DST_HASH=`echo -n $DST | $MD5SUM | $CUT -d" " -f1
 TMP_DIR="$ONE_LOCATION/var/$DST_HASH" 
 ISO_DIR="$TMP_DIR/isofiles" 

diff --git a/src/tm_mad/tm_common.sh b/src/tm_mad/tm_common.sh
index 5caba58..f443c01 100644
--- a/src/tm_mad/tm_common.sh
+++ b/src/tm_mad/tm_common.sh
@@ -24,6 +24,7 @@ fi

 # Paths for utilities
 AWK=/usr/bin/awk
+CUT=$(which cut)
 BASH=/bin/bash
 DATE=/bin/date
 DD=/bin/dd

Program cut is part of coreutils and it is also much smaller and does not have bazilions dialects.

Thank you,
Martin Kopta

#2 Updated by Jaime Melis almost 11 years ago

  • Priority changed from High to Normal
  • % Done changed from 0 to 100
  • Resolution set to fixed

Thanks for reporting the bug and proposing the solution. What I did was to remove awk's default path, since it varies from distro to distro. In case someone does not have 'awk' in their path the can modify $ONE_LOCATION/lib/mads/tm_common.sh and set it there, adapted to their distribution.

#3 Updated by Jaime Melis almost 11 years ago

  • Status changed from New to Closed

Also available in: Atom PDF