generated eucarc contains bashisms

Bug #376425 reported by Michael
20
This bug affects 2 people
Affects Status Importance Assigned to Milestone
Eucalyptus
Confirmed
Wishlist
chris grzegorczyk
2.0
Confirmed
Wishlist
Unassigned

Bug Description

The first line in the generated eucarc (when downloading x509 certificate) is:
EUCA_KEY_DIR=$(dirname $(readlink -f ${BASH_SOURCE}))
Which doesn’t work in zsh at all.
I suggest replacing it by something like this:
EUCA_KEY_DIR="$(cd "${0%/*}" && pwd -P)"

Tags: bashism
Revision history for this message
chris grzegorczyk (chris-grze) wrote :

Unfortunately, the suggested solution does not work: '. ~/.euca2/eucarc' or 'source ~/.euca2/eucarc' both fail.
We will investigate possible work arounds for a future release.

Changed in eucalyptus:
assignee: nobody → chris grzegorczyk (chris-grze)
importance: Undecided → Wishlist
status: New → Confirmed
Revision history for this message
nix_user (vlapa-newman) wrote :

I suggest following solution
EUCA_KEY_DIR=$(dirname $(readlink -f ${BASH_SOURCE:-$0}))
also I have added patch, but don't test it in real installation

Revision history for this message
graziano obertelli (graziano.obertelli) wrote :

The proposed solution does not work when sourcing the file from another directly. For example, from /tmp I did source a eucarc and I got

$ echo $EUCA_KEY_DIR
/tmp

Revision history for this message
graziano obertelli (graziano.obertelli) wrote :

Forgot to paste the whole commands

$ . ~/test.sh
$ echo $EUCA_KEY_DIR
/tmp
$ pwd
/tmp

Revision history for this message
nix_user (vlapa-newman) wrote :

 I think it is correct behavior because in eucarc we don't export EUCA_KEY_DIR, only EC2_PRIVATE_KEY, EC2_CERT and other variables. Please, show me full code from test.sh.

I have attached my version of test.
untar it
cd eucarc_bash_zsh_test
./test_bash
./test_zsh

also output from my console (I left only usefull variables)
`--> cd eucarc_bash_zsh_test
.-(/tmp/eucarc_bash_zsh_test)---------------------------------------------(val@wn)-
`--> ./test_zsh
/tmp/eucarc_bash_zsh_test
EC2_PRIVATE_KEY=/tmp/eucarc_bash_zsh_test/euca2-admin-c8a78b6b-pk.pem
EC2_CERT=/tmp/eucarc_bash_zsh_test/euca2-admin-c8a78b6b-cert.pem
EC2_JVM_ARGS=-Djavax.net.ssl.trustStore=/tmp/eucarc_bash_zsh_test/jssecacerts
.-(/tmp/eucarc_bash_zsh_test)---------------------------------------------(val@wn)-
`--> ./test_bash
/tmp/eucarc_bash_zsh_test
EC2_JVM_ARGS=-Djavax.net.ssl.trustStore=/tmp/eucarc_bash_zsh_test/jssecacerts
EC2_PRIVATE_KEY=/tmp/eucarc_bash_zsh_test/euca2-admin-c8a78b6b-pk.pem
EC2_CERT=/tmp/eucarc_bash_zsh_test/euca2-admin-c8a78b6b-cert.pem

Revision history for this message
graziano obertelli (graziano.obertelli) wrote :

Can you try your test when sourcing from a different directory? That is, you are sourcing from the same directory where eucarc is: this is what I have on my machine using dash from /tmp while the eucarc is in ~graziano/Downloads/eucarc_bash_zsh_test:

$ . /home/graziano/Downloads//eucarc_bash_zsh_test/eucarc
$ echo $EUCA_KEY_DIR
/tmp
$ env | grep EC2
EC2_ACCESS_KEY=WKy3rMzOWPouVOxK1p3Ar1C2uRBwa2FBXnCw
EC2_HOME=/home/graziano/Prog/Webservice/ec2
EC2_AMITOOL_HOME=/home/graziano/Prog/Webservice/ec2-ami-tools-1.3-21885
EC2_CERT=/tmp/euca2-admin-c8a78b6b-cert.pem
EC2_SECRET_KEY=miLHVZxRuKXCuKDpRVOtgVEEgX3mbFXIBlw
EC2_URL=http://192.168.201.2:8773/services/Eucalyptus
EC2_PRIVATE_KEY=/tmp/euca2-admin-c8a78b6b-pk.pem
EC2_JVM_ARGS=-Djavax.net.ssl.trustStore=/tmp/jssecacerts
EC2_USER_ID=16042119100555928232320565258

so I can still see the problem.

Revision history for this message
Vikentsi (m-nop) wrote :

I have tested such as you suggest. But dash doesn't have BASH_SOURCE variable. So it doesn't work even with former EUCA_KEY_DIR=$(dirname $(readlink -f ${BASH_SOURCE})) My patch only improve situation with zsh. I don't know solution for dash.

In my tests I have following results

 % cd /tmp
val@comp /tmp % ~/test/eucarc_bash_zsh_test/test_dash
  /home/val/test/eucarc_bash_zsh_test
  /home/val/test/eucarc_bash_zsh_test/euca2-admin-c8a78b6b-cert.pem

val@comp /tmp % ~/test/eucarc_bash_zsh_test/test_bash
  /home/val/test/eucarc_bash_zsh_test/.euca
  /home/val/test/eucarc_bash_zsh_test/.euca/euca2-admin-c8a78b6b-cert.pem

val@comp /tmp % ~/test/eucarc_bash_zsh_test/test_zsh
  /home/val/test/eucarc_bash_zsh_test/.euca
  /home/val/test/eucarc_bash_zsh_test/.euca/euca2-admin-c8a78b6b-cert.pem

Revision history for this message
Garrett Holmstrom (gholms) wrote :

As I suggested in the other bug, try using $_ instead. The following seems to be quite portable:

EUCA_KEY_DIR=$(dirname $(readlink -f "$_"))

Revision history for this message
Vikentsi (m-nop) wrote :

I have tested with suggested "$_" it not working for bash, dash, but for zsh it is works fine.

% /home/val/test/eucarc_bash_zsh_test/test_bash
/home/val/test/eucarc_bash_zsh_test/test_bash
/home/val/test/eucarc_bash_zsh_test
/home/val/test/eucarc_bash_zsh_test/euca2-admin-c8a78b6b-cert.pem

val@comp /tmp % /home/val/test/eucarc_bash_zsh_test/test_zsh
/home/val/test/eucarc_bash_zsh_test/.euca/eucarc
/home/val/test/eucarc_bash_zsh_test/.euca
/home/val/test/eucarc_bash_zsh_test/.euca/euca2-admin-c8a78b6b-cert.pem

val@comp /tmp % /home/val/test/eucarc_bash_zsh_test/test_dash
/home/val/test/eucarc_bash_zsh_test/test_dash
/home/val/test/eucarc_bash_zsh_test
/home/val/test/eucarc_bash_zsh_test/euca2-admin-c8a78b6b-cert.pem

From my point of view in dash scripts user can add variable in script EUCA_KEY_DIR explicitly.

Revision history for this message
Garrett Holmstrom (gholms) wrote :

Lovely. $_ changes based on the environment. At least ${BASH_SOURCE:-$0} will make it work for bash and zsh. It doesn't fix it for dash or ksh, but it is still an improvement over what we have now.

It looks like that's what the Nova people are doing, too: https://bugs.launchpad.net/nova/+bug/787351

Revision history for this message
David Kavanagh (david-kavanagh) wrote : Re: [Bug 376425] Re: generated eucarc contains bashisms

I would like a solution that works for bash on darwin (OS X).

if [ $(uname) == "Darwin" ]; then
 EUCA_KEY_DIR=$(dirname $(stat -f ${BASH_SOURCE}))
else
 EUCA_KEY_DIR=$(dirname $(readlink -f ${BASH_SOURCE}))
fi

On Sun, Dec 18, 2011 at 6:49 PM, Garrett Holmstrom <
<email address hidden>> wrote:

> Lovely. $_ changes based on the environment. At least
> ${BASH_SOURCE:-$0} will make it work for bash and zsh. It doesn't fix
> it for dash or ksh, but it is still an improvement over what we have
> now.
>
> It looks like that's what the Nova people are doing, too:
> https://bugs.launchpad.net/nova/+bug/787351
>
> --
> You received this bug notification because you are a member of
> Eucalyptus Maintainers, which is subscribed to Eucalyptus.
> https://bugs.launchpad.net/bugs/376425
>
> Title:
> generated eucarc contains bashisms
>
> Status in Eucalyptus:
> Confirmed
> Status in Eucalyptus 2.0 series:
> Confirmed
>
> Bug description:
> The first line in the generated eucarc (when downloading x509
> certificate) is:
> EUCA_KEY_DIR=$(dirname $(readlink -f ${BASH_SOURCE}))
> Which doesn’t work in zsh at all.
> I suggest replacing it by something like this:
> EUCA_KEY_DIR="$(cd "${0%/*}" && pwd -P)"
>
> To manage notifications about this bug go to:
> https://bugs.launchpad.net/eucalyptus/+bug/376425/+subscriptions
>

--

*_________________________*

*David Kavanagh - *Software Engineer

*Eucalyptus Systems*

www.eucalyptus.com

*_________________________*

Revision history for this message
nix_user (vlapa-newman) wrote :

I have added additional check for Darwin. Please, review attached patch

Revision history for this message
Andy Grimm (agrimm) wrote :

This issue is now being tracked upstream at http://eucalyptus.atlassian.net/browse/EUCA-2645

Please watch that issue for further updates.

To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Duplicates of this bug

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.