lang/go failes to build with poudriere, since 2018-04-05
Steven Hartland
killing at multiplay.co.uk
Thu Apr 26 23:04:42 UTC 2018
Thanks for the information, next question is what it the host machine?
As your currently unable to build go we may have to get a binary dist on
the machine to start debugging, I can provide that if needed.
Once you have a working go installs you can try building and running the
following:
The attached golang patch can be used to add new debug syscall, if you
can build go from ports (try outside of poudriere).
Then you can compile main.go from a directory named test using "go
build" and then from the same directory run the test.sh and lets see
what you get?
Regards
Steve
On 26/04/2018 19:23, Bjarne wrote:
> Hi Steven
>
> Thanks for getting back on this.
>
> The os is 11.1-RELEASE-p9 and the ports tree is HEAD.
> The build machine is a virtual server ,
> 5120 M RAM
> 4 cpu
> on top of xen :
> release : 4.4.104-39-default
> version : #1 SMP Thu Jan 4 08:11:03 UTC 2018 (7db1912)
>
>
> It seems I have a reliable test environment. I have just reconfigured
> to 4 cpus and tested a rebuild and got same error as before.
> Anything i can do to assist in debugging?
>
> Bear in mind I dont know anything of lang/go and am still a beginner
> regading poudriere.
> I have frozen the build machine so it wont download new versions of
> anything.
>
>
>
> On 26-04-2018 01:31, Steven Hartland wrote:
>> That happens very rarely, so rarely its been really hard to make any
>> progress debugging it.
>>
>> If you believe you have reliable reproduction case I'd be very
>> interested in it.
>>
>> One thing I noticed when re-reading your original post is that you
>> say you tested on 11.1 but then your output mentions HEAD, are you
>> running 11.1-RELEASE or 11-STABLE, if so what revision?
>>
>> Also of interest is the hardware and related configuration?
>>
>> Regards
>> Steve
>>
>> On 25/04/2018 22:09, Derek (freebsd lists) wrote:
>>> Ah, you'll note: fork/exec implicated here.
>>>
>>> Looks like this guy strikes again:
>>> https://github.com/golang/go/issues/15658
>>>
>>> It pains me to say but Go on FreeBSD is (and has always been)
>>> broken. Should be fine if you don't exec. Something that might
>>> help, is setting GOMAXPROCS=1.
>>>
>>> Derek
>>>
>>> On 18-04-25 07:45 AM, Steven Hartland wrote:
>>>> Builds fine on 11.1-RELEASE-p6 here:
>>>>
>>>> [00:04:02] Committing packages to repository
>>>> [00:04:02] Removing old packages
>>>> [00:04:02] Built ports: lang/go
>>>> [ports11-1-multiplay] [2018-04-25_11h37m16s] [committing:] Queued:
>>>> 1 Built: 1 Failed: 0 Skipped: 0 Ignored: 0 Tobuild: 0 Time:
>>>> 00:04:01
>>>> [00:04:02] Logs:
>>>> /usr/local/poudriere/data/logs/bulk/ports11-1-multiplay/2018-04-25_11h37m16s
>>>>
>>>> [00:04:02] Cleaning up
>>>>
>>>> svn info
>>>> Path: .
>>>> Working Copy Root Path: /usr/local/poudriere/ports/multiplay
>>>> URL: https://svn.freebsd.org/ports/head
>>>> Relative URL: ^/head
>>>> Repository Root: https://svn.freebsd.org/ports
>>>> Repository UUID: 35697150-7ecd-e111-bb59-0022644237b5
>>>> Revision: 468275
>>>> Node Kind: directory
>>>> Schedule: normal
>>>> Last Changed Author: tobik
>>>> Last Changed Rev: 468275
>>>> Last Changed Date: 2018-04-25 11:08:41 +0000 (Wed, 25 Apr 2018)
>>>>
>>>>
>>>> Regards
>>>> Steve
>>>>
>>>> On 25/04/2018 12:07, Bjarne wrote:
>>>>> I got a job to rebuild all packages every night, but since
>>>>> 2018-04-05 building /usr/ports/lang/go is failing.
>>>>>
>>>>> Apparently 2018-04-05 some major changed was introduced, since
>>>>> 331 pakackes was rebuilt. Not sure what it was, I saw nothing in
>>>>> UPATING.
>>>>>
>>>>> Top of logfile:
>>>>>
>>>>>>> Building lang/go
>>>>> :snip
>>>>>
>>>>>
>>>>>
>>>>
>>>> _______________________________________________
>>>> freebsd-ports at freebsd.org mailing list
>>>> https://lists.freebsd.org/mailman/listinfo/freebsd-ports
>>>> To unsubscribe, send any mail to
>>>> "freebsd-ports-unsubscribe at freebsd.org"
>>>>
>>>
>>
>
> --
> mvh,
> Bjarne
-------------- next part --------------
--- /dev/null 2017-03-24 16:44:00.000000000 +0000
+++ src/syscall/exec_bsd_debug.go 2017-03-15 16:28:55.000000000 +0000
@@ -0,0 +1,41 @@
+// +build darwin dragonfly freebsd netbsd openbsd
+
+package syscall
+
+func ForkOnlyBSDTest() (err error) {
+ var r1 uintptr
+ var pid int
+ var err1 Errno
+ var wstatus WaitStatus
+
+ ForkLock.Lock()
+ runtime_BeforeFork()
+
+ r1, _, err1 = RawSyscall(SYS_FORK, 0, 0, 0)
+ if err1 != 0 {
+ runtime_AfterFork()
+ ForkLock.Unlock()
+ return err1
+ }
+
+ if r1 == 0 {
+ // in child, die die die my darling
+ for {
+ RawSyscall(SYS_EXIT, 253, 0, 0)
+ }
+ }
+
+ runtime_AfterFork()
+ ForkLock.Unlock()
+
+ pid = int(r1)
+
+ // Prime directive, exterminate
+ // Whatever stands left
+ _, err = Wait4(pid, &wstatus, 0, nil)
+ for err == EINTR {
+ _, err = Wait4(pid, &wstatus, 0, nil)
+ }
+
+ return
+}
-------------- next part --------------
#!/bin/sh
rm -f test.log
while true; do
echo "==== NEW RUN $(date) ===="
echo
#time sh -c 'export GOGC=5; export GODEBUG=gctrace=2,schedtrace=100; ./test'
#time sh -c 'export GOGC=5; ./test'
#time sh -c 'export GOGC=5; export GODEBUG=gcstackbarrierall=1; ./test'
#time sh -c 'export GOGC=off; export GOTRACEBACK=crash; ./test'
#time sh -c 'export GOGC=off; export GOTRACEBACK=crash; export GOMAXPROCS=24; ktrace -i -f ktrace-test.out ./test '
#time sh -c 'export GOGC=off; export GODEBUG=efence=1; export GOTRACEBACK=crash; export GOMAXPROCS=24; ktrace -i -f ktrace-test.out ./test '
#time sh -c 'export GOGC=off; export GOTRACEBACK=crash; cpuset -c -l 0 ./test'
time sh -c 'export GOGC=2; export GOTRACEBACK=crash; ./test'
exit=$?
dt=`date +'%s'`
echo "dt: $dt"
err=0
if [ -f test.core ]; then
mv test.core results/test.core.$dt
err=1
fi
if [ -f ktrace-test.out ]; then
mv ktrace-test.out results/ktrace-test.out.$dt
err=1
fi
if [ $exit -ne 0 ]; then
break
elif [ $err = 1 ]; then
break
fi
echo
echo
done >> test.log 2>> test.log
mv test.log results/test.log.$dt
ln -s results/test.log.$dt test.log
cnt=`grep -c starting results/test.log.$dt`
echo "Failure after $cnt attempts log: results/test.log.$dt"
exit 1
-------------- next part --------------
package main
import (
"log"
"runtime"
"syscall"
)
var (
forkRoutines = 24
)
func run() {
for {
if err := syscall.ForkOnlyBSDTest(); err != nil {
log.Fatal(err)
}
}
}
func main() {
log.Printf("Starting %v forking goroutines...\n", forkRoutines)
log.Println("GOMAXPROCS:", runtime.GOMAXPROCS(0))
for i := 0; i < forkRoutines; i++ {
go run()
}
// Block forever
<-make(chan struct{})
}
More information about the freebsd-ports
mailing list