Skip to content

make.bash sometimes builds .a files with inverted timestamps, causing "go install foo" to fail later #5855

@agoode

Description

@agoode
What steps will reproduce the problem?
If possible, include a link to a program on play.golang.org.
1. Build go from source on different machines or possibly at different times.

What is the expected output?
All files are built in the same order with consistent (well-ordered) timestamps.


What do you see instead?
Sometimes files get built in different orders. For example, I have seen this:

golang-1.1.1-4.fc20.x86_64 works:
/usr/lib64/golang/pkg/linux_amd64 $ ls -l --full-time sync.a sync/atomic.a
-rw-r--r--. 1 root root 55766 2013-07-05 00:07:34.000000000 -0400 sync.a
-rw-r--r--. 1 root root  8364 2013-07-05 00:07:33.000000000 -0400 sync/atomic.a

golang-1.1.1-4.fc20.i686 fails:
/usr/lib/golang/pkg/linux_386 $ ls -l --full-time sync.a sync/atomic.a 
-rw-r--r--. 1 root root 55694 2013-07-05 00:07:38.000000000 -0400 sync.a
-rw-r--r--. 1 root root  8970 2013-07-05 00:07:39.000000000 -0400 sync/atomic.a


Here are the build logs:
http://kojipkgs.fedoraproject.org//packages/golang/1.1.1/4.fc20/data/logs/x86_64/build.log
http://kojipkgs.fedoraproject.org//packages/golang/1.1.1/4.fc20/data/logs/i686/build.log


What this means is that in the situation where sync/atomic.a is newer than sync.a, after
these files are copied to /usr/lib for final install, subsequent go install commands
will fail with:
go install sync: open /usr/lib/golang/pkg/linux_386/sync.a: permission denied

This seems to be non-deterministic.

For now, I will reset all the .a timestamps, but this seems like a hack. I think
make.bash should deterministically build these files so that the go build can
immediately be copied to read-only storage.


Which operating system are you using?
Linux (Fedora)


Which version are you using?  (run 'go version')
1.1.1

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions