Hi Ricardo, Ricardo Wurmus <rek...@elephly.net> writes:
> rohit yadav <rohitya...@utexas.edu> writes: > >>> Do you want to build everything from source on your system or do you >>> prefer to use binaries from the Guix project’s build farms? Do you have >>> access to user namespaces / can you use “unshare” for file system >>> shenanigans? >>> >> I need to build guix for non-root location because at several places its >> hard to convince to use such system. However, I need several packages which >> are not usually available or outdated. The guix projects allows me to do >> so. To accomplish that I need truly non-root permission oriented method to >> bootstrap and install whatever I deem necessary for my use case. > > I see. Unfortunately you will end up having to compile everything from > source, C library, GCC,… — all of it. When using a different store > location it is impossible to use pre-built binaries, unfortunately. If one is able to obtain write access to any directory accessible via an absolute path name of no more than 10 bytes, e.g. "/tmp/xxxxx", "/var/tmp/x", "/home/xx/x", or possibly even "/home/xxxx" or "/home/xxx", then it may be possible to avoid compiling everything from source code. In principle, I believe it should be possible to rewrite all occurrences of "/gnu/store" in our store outputs to another string of the same length, or to a shorter string by adding redundant slashes. Note that one must take care to rewrite the targets of symbolic links as well. Our grafting system already crucially depends on being able to reliably find and rewrite store references, and therefore the Guix project is naturally compelled to ensure that our package outputs encode store references as plain byte strings. For example, although we generally prefer to minimize changes to upstream packages, we modified our C compiler to avoid encoding string literals within immediate operands in generated machine code, as upstream GCC will sometimes do on x86_64. In summary, Guix has already laid the groundwork to support this kind of rewriting of binaries, and we could put it to good use here. I suggest adding a mechanism to our offloading code that allows rewriting the store prefix within downloaded binaries to a local store prefix of equal or lesser length. What do you think? Mark