On Monday, March 11, 2019 at 12:33:29 PM UTC-7, thepud...@gmail.com wrote:
>
> Hi Wael,
>
> Sorry, I am not quite following what you have and have not tried yet, and 
> which issues you have hit with which techniques.
>

No worries, I'll try to address your questions to clarify the issues I'm 
having.
 

>
> Is one of the issues that the 'vcs' cache directory changes, even if the 
> actual code you need for your build has not changed?
>

I also noticed the download directory changing even if the actual code 
changes, but I might be incorrect on this assumption as I could not 
validate it today.
 

>
> If so, I wonder if you might be able use a filesystem-based module cache 
> via 'GOPROXY=file:///file/path', which could avoid using the 'vcs' 
> directory at build time?
>
> It sounds like you have looked into multiple options at this point, so 
> this might be well known to you at this point, but:
>
>  * The module download cache location is controlled by GOPATH. In 
> particular, 'go mod download', 'go build', etc. populate the module cache 
> in GOPATH/pkg/mod.
>  * In addition, when you want to use a particular module cache, you can 
> tell the 'go' command to use a local module cache by setting 
> 'GOPROXY=file:///file/path' environment variable.
>  * You can put those two things together:
>
>      # Populate a module download cache in /tmp/gopath-for-cache
>      $ GOPATH=/tmp/gopath-for-cache  go mod download
>
>      # Build using the contents of the module download cache in 
> /tmp/gopath-for-cache
>      $ GOPROXY=file:///tmp/gopath-for-cache/pkg/mod/cache/download  go 
> build
>
> Note that /tmp/gopath-for-cache/pkg/mod/cache/download would not contain 
> the 'vcs' directory.
>

Using GOPROXY worked, at least I'm not seeing any network attempt. I just 
must validate that the contents of the download do not change unless the 
actual code of the module has changed.
 

>
> I understand those are not the exact steps you would follow, but perhaps 
> something along those lines could be adapted within your constraints?
>
> Also, note that even though you are setting the GOPROXY environment 
> variable in the steps above, there is no actual proxy process involved, and 
> everything is just being read directly from the local filesystem. An even 
> more detailed example is here in this "Go Modules by Example" walk-through: 
> https://github.com/go-modules-by-example/index/tree/master/012_modvendor
>
> Sorry if anything here is off-base, or if this is not helpful.
>
> Regards, 
> thepudds
>
> On Monday, March 11, 2019 at 1:01:04 PM UTC-4, Manlio Perillo wrote:
>>
>> On Monday, March 11, 2019 at 4:22:04 PM UTC+1, Wael Nasreddine wrote:
>>
>> > [...]
>>  
>>
>>> On Sunday, March 10, 2019 at 6:59:07 PM UTC-7, Manlio Perillo wrote:
>>>>>>
>>>>>> On Monday, March 11, 2019 at 12:30:02 AM UTC+1, Wael Nasreddine wrote:
>>>>>>>
>>>>>>> TL;DR Given a Go module, assuming that I have already done `go mod 
>>>>>>> download`: Is it possible to prevent network access if I delete the 
>>>>>>> entire 
>>>>>>> `$GOPATH/pkg/mod/cache`?
>>>>>>>
>>>>>>>
>>>>>> Another solution is to delete only $GOPATH/pkg/mod/cache/vcs.  This 
>>>>>> is the directory that takes more disk space since it contains the full 
>>>>>> history of the vcs.
>>>>>>
>>>>>  
>>>>> That was my first attempt, however it did not work as expect because 
>>>>> the contents of $GOPATH/pkg/mod/cache/download does change anytime a new 
>>>>> version is created upstream. My hash failed to match multiple times a day!
>>>>>
>>>>
>>>> It may be caused by the missing pkg/mod/cache/vcs, but it seems unusual.
>>>> I was assuming GOPATH was on a temporary directory.
>>>> And indeed you wrote that GOPATH is set to $NIX_BUILD_TOP/go, but later 
>>>> you wrote that it is set to a temporary directory.
>>>>
>>>>
>>> I am removing the entire cache folder, as the content changes when the 
>>> git repository of any of the dependencies change. So if I would hash the 
>>> cache folder to A and one of the dependencies get a pull request merged 
>>> upstream, even though it does not technically change the version that Go is 
>>> building with you will still get B when you hash it. This break the concept 
>>> of packaging :(
>>>
>>>
>> Do you perhaps have the same requirements as in the thread
>> https://groups.google.com/forum/#!topic/golang-dev/DD88cds-LuI
>> as reported by Nicolas Mailhot?
>>
>> That is, you need to patch the upstream source but keep the same version, 
>> because you can't (or don't want to) update all the versions of the 
>> required modules.
>>
>> In this case vendoring is, IMHO, currently the only solution, because the 
>> go tool ignores the go.sum files in this case.
>> You can try to open a bug report about the incorrect behavior of `go mod 
>> vendor` when using cgo.
>>
>> Or you can patch cmd/go.  However instead of writing a patch specific to 
>> Nix, I suggest to write a more generic patch.
>>
>> You can add a new module download mode, e.g. `-mod trust` to instruct 
>> cmd/go to not check go.sum.
>> The future notary can be disabled with GONOVERIFY, so its not a problem.
>> Maybe you can use GONOVERIFY to decide if the checksum should be ignored.
>>
>> Finally, you can try to coordinate with other package managers, since 
>> this seems to be a shared problem.
>>
>> Here is a patch.  It seems to work but one the Go test fails, and it 
>> should probably be updated:
>> https://gist.github.com/perillo/813b52dcff8824da3a2859828961d08b
>>
>> An alternative is to check for trust mode in the initGoSum function:
>> https://gist.github.com/perillo/1b3d3216c59f689e52ee7357d2a99136
>>
>> Finally the last alternative is to check for trust mode in the checkGoMod 
>> function, but this will also disable the notary.  Maybe it is the correct 
>> thing to do:
>> https://gist.github.com/perillo/59f3be87dd2b64d7d734c74d1f344cd5
>>
>> > [...]
>>
>>
>> Manlio Perillo 
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to