From edcd96f80f2bbd99d6d4ff0e3a9902e6095aa5f5 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Wed, 6 May 2009 17:20:44 -0400 Subject: [PATCH] Modify maintainer scripts from rpm files to use /bin/bash rather than /bin/sh. Many such scripts are only tested on systems where /bin/sh is bash, and contain bashisms, which can cause trouble when converting the rpm to be used on eg, the Debian family of distributions, where /bin/sh can legitimatly be dash. Closes: #495971 --- Alien/Package/Rpm.pm | 14 ++++++++++---- debian/changelog | 5 +++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/Alien/Package/Rpm.pm b/Alien/Package/Rpm.pm index 02e00d9..467f6d0 100644 --- a/Alien/Package/Rpm.pm +++ b/Alien/Package/Rpm.pm @@ -463,11 +463,16 @@ debian/slackware scripts can be anything -- perl programs or binary files -- and rpm is limited to only shell scripts, we need to encode the files and add a scrap of shell script to make it unextract and run on the fly. -When setting a value, we do some mangling too. Rpm maitainer scripts -are typically shell scripts, but often lack the leading #!/bin/sh -This can confuse dpkg, so add the #!/bin/sh if it looks like there +When setting a value, we do some mangling too. Rpm maintainer scripts +are typically shell scripts, but often lack the leading shebang line. +This can confuse dpkg, so add the shebang if it looks like there is no shebang magic already in place. +Additionally, it's not uncommon for rpm maintainer scripts to contain +bashisms, which can be triggered when they are ran on systems where /bin/sh +is not bash. To work around this, the shebang line of the scripts is +changed to use bash. + Also, if the rpm is relocatable, the script could refer to RPM_INSTALL_PREFIX, which is set by rpm at run time. Deal with this by adding code to the script to set RPM_INSTALL_PREFIX. @@ -489,9 +494,10 @@ sub _script_helper { my $value=shift; if (length $value and $value !~ m/^#!\s*\//) { - $value="#!/bin/sh\n$prefixcode$value"; + $value="#!/bin/bash\n$prefixcode$value"; } else { + $value=~s@^#!\s*/bin/sh(\s)@#/bin/bash$1@; $value=~s/\n/\n$prefixcode/s; } $this->{$script} = $value; diff --git a/debian/changelog b/debian/changelog index 539b284..de68b06 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,11 @@ alien (8.75) UNRELEASED; urgency=low * Simplified rules file. + * Modify maintainer scripts from rpm files to use /bin/bash rather + than /bin/sh. Many such scripts are only tested on systems where /bin/sh + is bash, and contain bashisms, which can cause trouble when converting + the rpm to be used on eg, the Debian family of distributions, where + /bin/sh can legitimatly be dash. Closes: #495971 -- Joey Hess Fri, 27 Feb 2009 20:18:52 -0500