[pacman-dev] [PATCH] Fix a possible bash-4.0 problem in makepkg
Allan McRae
allan at archlinux.org
Tue Apr 28 00:26:02 EDT 2009
Aaron Griffin wrote:
> On Sun, Apr 26, 2009 at 9:39 AM, Marc - A. Dahlhaus <mad at wol.de> wrote:
>
>> Dan McGee schrieb:
>>
>>> On Sun, Apr 26, 2009 at 9:04 AM, Marc - A. Dahlhaus <mad at wol.de> wrote:
>>>
>>>
>>>> Allan McRae schrieb:
>>>>
>>>>
>>>>> Marc - A. Dahlhaus wrote:
>>>>>
>>>>>
>>>>>> Hello,
>>>>>>
>>>>>> i've spotted a problem in makepkg's cleanup part if the host is running
>>>>>> bash-4.0.
>>>>>> As makepkg runs bash with option -e, on bash-4.0 it fails if strip
>>>>>> reports an unsupported binary.
>>>>>> The following trivial patch fixes the problem.
>>>>>>
>>>>>> Signed-off-by: "Marc - A. Dahlhaus" <mad at wol.de>
>>>>>>
>>>>>> --- pacman-3.2.2.orig/scripts/makepkg.sh.in
>>>>>> +++ pacman-3.2.2/scripts/makepkg.sh.in
>>>>>> @@ -766,11 +766,11 @@ tidy_install() {
>>>>>> find ${STRIP_DIRS[@]} -type f 2>/dev/null | while read binary ;
>>>>>> do
>>>>>> case "$(file -biz "$binary")" in
>>>>>> *application/x-sharedlib*) # Libraries (.so)
>>>>>> - /usr/bin/strip --strip-debug "$binary";;
>>>>>> + /usr/bin/strip --strip-debug "$binary" || true;;
>>>>>> *application/x-archive*) # Libraries (.a)
>>>>>> - /usr/bin/strip --strip-debug "$binary";;
>>>>>> + /usr/bin/strip --strip-debug "$binary" || true;;
>>>>>> *application/x-executable*) # Binaries
>>>>>> - /usr/bin/strip "$binary";;
>>>>>> + /usr/bin/strip "$binary" || true;;
>>>>>> esac
>>>>>> done
>>>>>> fi
>>>>>>
>>>>>>
>>>>> I don't think this is a good approach to the problem. Having "|| true"
>>>>> means if there is a real problem, then it gets ignored.
>>>>>
>>>>>
>>>> What real problem could arise?
>>>> An unsupported binary? Would print errors but creates the package mostly
>>>> stripped.
>>>> A missing strip command? Would print errors but creates the package
>>>> unstripped.
>>>> A damaged storage... but i think in that case makepkg would have failed
>>>> in
>>>> the actual build step and not in cleanup.
>>>>
>>>>
>>>>> I suppose the real question is: How do you actually get an unsupported
>>>>> binary? My guess is this occurs when building a package from a binary
>>>>> source, in which case "options=('!strip')" would be the solution.
>>>>>
>>>>>
>>>> The package that triggered this, was xen.
>>>> xen installs some gzipped content inside /usr/lib which strip doesn't
>>>> support.
>>>>
>>>> $ file -biz usr/lib/xen/boot/ioemu-stubdom.gz
>>>> application/x-executable; charset=binary
>>>> compressed-encoding=application/x-gzip; charset=binary; charset=binary
>>>>
>>>> The file itself is a bootable image file for grub.
>>>>
>>>> The library strip lines are not needed.
>>>> What about a case which catches *"*compressed-encoding*" and continues
>>>> with
>>>> the next file?*
>>>>
>>>>
>>> I'm with Allan here- we should fix the real problem rather than adding
>>> a "|| true" and calling it a day.
>>>
>>>
>> This was an ugly hack, i know, hence the last few lines of my message.
>>
>>> I wouldn't be against an exclusion of "compressed-encoding=" when
>>> running strip- Allan, what do you think? The easiest way of
>>> implementing this would be to make it the first case and make it a
>>> no-op.
>>>
>> Thats what i had in mind.
>>
>> I'll do a complete rebuild of all packages and grep for unsupported binarys
>> in the logs.
>> There might be some other types where this could bite us. I'll report back
>> after that.
>>
>
> Is it actually strip-able? Could we actually unpack it (based on the
> compressed-encoding), strip it, and repack?
I had that thought initially and then thought that would be a major
pain. I'm quite happy with detecting compressed files and skipping
them. But if someone goes ahead and implements that, at this stage I see
no reason not to include it. It just won't be me...
Allan
More information about the pacman-dev
mailing list