Re: set : illegal option -o pipefail error while trying to upgrade pkg.

From: Warner Losh <imp_at_bsdimp.com>
Date: Sun, 28 Jan 2024 17:55:14 UTC
On Sun, Jan 28, 2024 at 10:53 AM Warner Losh <imp@bsdimp.com> wrote:

> OK. On your 10.x arm system, you need to build /bin/sh using sources from
> FreeBSD 13.
> Binaries from 12 or 13 won't work on your 10.x system: libc doesn't have
> the right symbols.
> But source build against a 10.x system should work. That was my
> suggestion. Too bad
> pipefail didn't arrive until 14. So you'll need to build that on your 14
> system.
>
... need to build stable/14 on your 10.x system this should say. Rather an
important
detail I didn't catch on first proofreading.


>
> But it turns out that's a bit of a hassle. Well, not a huge hassle, I had
> to do the following.
> First, set up a FreeBSD 10.4 armv6 chroot and install qemu-user-static. See
> https://gist.github.com/bsdimp/0f2f294c7441ebf68a8ffebab935bd2c for
> details.
> Or you could just run the RPI-B image on a real RPI-B. It would be more of
> a hassle and only marginally faster.
>
> Next, I created a worktree and a side branch (using the same paths in the
> gist
> above, note my origin is freebsd but the default is origin):
> % cd git/freebsd-src
> % mkdir ~/arm10/imp
> % git worktree add -b arm10-14 ~/arm10/imp/stable-14 freebsd/stable/14
> I then had to apply these patches:
> https://people.freebsd.org/~imp/14-sh-on-10.diff
> which coped with history / libedit overhaul and O_VERIFY being added to
> the system. OK, truth be told I iterated a bunch to get the patch... I had
> no
> reason to think these changes were needed before I started...
>
> Next, I got into the emulated arm tree:
> % sudo chroot ~/arm10 /bin/sh
> # cd /imp/stable-14/
> # patch -p1 < 14-sh-on-10.diff
> # make SSP_CFLAGS= WITHOUT_TESTS=t WITHOUT_MAN=t DEBUG_FILES_CFLAGS=
> WARNS=0
> ... lots of output, ignore the warnings
> # set -o pipefail
> set: Illegal option -o pipefail
> # /usr/obj/imp/stable-14/arm.armv6/bin/sh/sh
> # set -o pipefail
> # ^D
> #
>
> So success! But all that's a hassle, so I also uploaded the sh to
> https://people.freebsd.org/~imp/sh14-on-10.armv6
> so you can just try it. I don't know if this will fix the problem that put
> us down
> this rabbit hole in the first place or not. But maybe some of the above is
> helpful
> or useful for other reasons.
>
> Hope this helps.
>
> Warner
>
> On Sun, Jan 28, 2024 at 7:33 AM Mario Marietto <marietto2008@gmail.com>
> wrote:
>
>> Using sh of FreeBSD 12.04 :
>>
>> /bin/sh : Undefined symbol "stat@FBSD_1.5"
>>
>> nothing to do.
>>
>> On Sun, Jan 28, 2024 at 3:17 PM Mario Marietto <marietto2008@gmail.com>
>> wrote:
>>
>>> I've used FreeBSD 13.2 and I've got the same error message :
>>>
>>> /lib/libc.so.7: version FBSD_1.6 required by /bin/sh not found
>>>
>>> Let's see with FreeBSD 12.04...
>>>
>>> On Sun, Jan 28, 2024 at 2:04 PM Mario Marietto <marietto2008@gmail.com>
>>> wrote:
>>>
>>>> Hello Warner,
>>>>
>>>> Thanks for your help. But unfortunately your solution didn't work.
>>>> After having followed your instructions carefully :
>>>>
>>>> Save a copy of /bin/sh. Check out stable/13 (or 12 if the following
>>>>> fails). Cd to src/bin/sh. Type make all. You may need -m
>>>>> /path/to/src/share/mk if it makes complaints. Create a test area, I'll call
>>>>> it /destdir. Also mkdir /destdir/bin too. Then make install
>>>>> DESTDIR=/destdir. You may need to do this as root. Ignore the failures for
>>>>> the man pages and maybe tests. You should have a /destdir/bin/sh. See if it
>>>>> runs. If so, copy it to /bin and try the upgrade again.
>>>>
>>>>
>>>> It asked me to copy some new libraries from FreeBSD 14.0 to the
>>>> /usr/lib32 and /lib directories of the FreeBSD 10.4 system. I copied all
>>>> the libraries requested and at the end,it gave the following error :
>>>>
>>>> /lib/libc.so.7: version FBSD_1.6 required by /bin/sh not found
>>>>
>>>> so,I have changed the flag that does not allow me to rename it with the
>>>> command :
>>>>
>>>> # chflags noschg libc.so.7
>>>>
>>>> and I've copied the libc.so.7 file that's on the directory /lib of the
>>>> FreeBSD 14 to the same directory of the FreeBSD 10.4 system and I've
>>>> rebooted. Unfortunately it hasn't been accepted. The error is the following
>>>> one :
>>>>
>>>> /lib/libc.so.7 : unsupported relocation type 37 in non-PLT relocations
>>>>
>>>> What has been my mistake ? Maybe using FreeBSD 14 is wrong ?
>>>>
>>>> On Sun, Jan 28, 2024 at 9:47 AM Mario Marietto <marietto2008@gmail.com>
>>>> wrote:
>>>>
>>>>> # set -o pipefail
>>>>> set : variable name must begin with a letter.
>>>>>
>>>>> On Sun, Jan 28, 2024 at 5:43 AM Warner Losh <imp@bsdimp.com> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>> On Sat, Jan 27, 2024, 5:54 PM Warner Losh <imp@bsdimp.com> wrote:
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Sat, Jan 27, 2024, 5:12 PM Mario Marietto <marietto2008@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>>> Hello.
>>>>>>>>
>>>>>>>> I'm trying to upgrade as much as I can FreeBSD 10.4 because it is
>>>>>>>> the only one version that can compile some of the old arm 32 bit code I
>>>>>>>> need to use for one of my projects. As you already know,packages don't work
>>>>>>>> at all,but ports almost work. I was trying to install xfce4 from ports,but
>>>>>>>> the compilation stopped when it didn't accept this file :
>>>>>>>>
>>>>>>>>
>>>>>>>> http://distcache.FreeBSD.org/ports-distfiles/trousers-0.3.14.tar.gz
>>>>>>>>
>>>>>>>>
>>>>>>>> at this point,I decided to upgrade the system with :
>>>>>>>>
>>>>>>>>
>>>>>>>> # freebsd-update fetch
>>>>>>>> # freebsd-update install
>>>>>>>>
>>>>>>>>
>>>>>>>> and the ports tree with :
>>>>>>>>
>>>>>>>>
>>>>>>>> # portsnap fetch extract
>>>>>>>> # portsnap fetch update
>>>>>>>>
>>>>>>>>
>>>>>>>> At this point it asked me to update pkg,so I did :
>>>>>>>>
>>>>>>>>
>>>>>>>> # cd /usr/ports/ports-mgmt/pkg
>>>>>>>> # make
>>>>>>>>
>>>>>>>>
>>>>>>>> but unfortunately I got this error that I'm not able to fix :
>>>>>>>>
>>>>>>>>
>>>>>>>> set : illegal option -o pipefail
>>>>>>>>
>>>>>>>>
>>>>>>>> and I can't do anything anymore. I'm stuck here. Can someone help
>>>>>>>> me to fix it ? thanks.
>>>>>>>>
>>>>>>>
>>>>>>> Save a copy of /bin/sh. Check out stable/13 (or 12 if the following
>>>>>>> fails). Cd to src/bin/sh. Type make all. You may need -m
>>>>>>> /path/to/src/share/mk if make complains. Create a test area, I'll call it
>>>>>>> /destdir. Also mkdir /destdir/bin too. Then make install  DESTDIR=/destdir.
>>>>>>> You may need to do this as root. Ignore the failures for the man pages and
>>>>>>> maybe tests. You should have a /destdir/bin/sh. See if it runs. If so copy
>>>>>>> it to /bin and try the upgrade again.
>>>>>>>
>>>>>>> I think 12 has pipefail. I dont think 11 does. 13 definitely has it.
>>>>>>> The error message is from the shell.
>>>>>>>
>>>>>>
>>>>>>
>>>>>> The command "set -o pipefail" is how you'll know if it will work....
>>>>>> or stands a good chance of working.
>>>>>>
>>>>>>
>>>>>> Warner
>>>>>>>
>>>>>>>
>>>>>
>>>>> --
>>>>> Mario.
>>>>>
>>>>
>>>>
>>>> --
>>>> Mario.
>>>>
>>>
>>>
>>> --
>>> Mario.
>>>
>>
>>
>> --
>> Mario.
>>
>