Uploaded image for project: 'Erlang/OTP'
  1. Erlang/OTP
  2. ERL-715

release_handler has a hard undocumented requirement for the current working directory

    Details

    • Type: Bug
    • Status: Open
    • Priority: Major
    • Resolution: Unresolved
    • Affects Version/s: 18.0, 19.0, 20.0, 21.0
    • Fix Version/s: None
    • Component/s: kernel
    • Labels:
      None

      Description

      Here's a scenario, where the bug is found:

      • our release is booted by a script, running in the system root ( / )
      • the release uses relative paths in a few of its configuration files, so that the same base sys.config config file is usable both in dev and in prod
      • our release is supporting live code upgrades
      • our release can be live code upgraded from either relx's nodetool scripts, or by a custom wrapper around release_handler
      • all code upgrades go well
      • however, on a code downgrade, we get a failure: release_handler:check_install returns {no_such_file,"./lib/kernel-6.0"}

        — this only happens with the custom wrapper, and is not reproducible with relx's nodetools

      After investigation, It appears that the problem is that nodetool silently patches things to work better: it forces the release node to have a current working directory matching the release's directory. So if the release is in /usr/lib/myrel, that's what it sets with file:set_cwd()

      Not doing this prevents live code downgrades from being possible.

      The problem with this approach is that:

      • there is no documented requirement (to my knowledge) about the current working directory
      • the current working directory is global and both releases and applications may feel free to change it to work properly
      • the only way for live code downgrades to work safely is to mandate the whole release to never change directories and rely on all paths to be relative to the release as well

      The last point is doable, and likely the only acceptable workaround. However I feel that the code could be more robust if release_handler dynamically found its own root path for installation based on currently available data. For example code:root_dir() or init:get_argument(root) could both provide that information in such a way that release handling would not rely on nobody touching paths by accident.

        Activity

        Hide
        siri Siri Hansen added a comment -

        Just to get a better picture of the situation:

        • how is your initial RELEASES file created?
        • what does it contain directly after it is created, and just before you order the downgrade?
        • what does sys:get_state(release_handler) return, just before you order the downgrade?
        Show
        siri Siri Hansen added a comment - Just to get a better picture of the situation: how is your initial RELEASES file created? what does it contain directly after it is created, and just before you order the downgrade? what does sys:get_state(release_handler) return, just before you order the downgrade?
        Hide
        ferd ferd added a comment - - edited

        [{release,"myrel","0.2.0","10.0.3",
                  [{kernel,"6.0","./lib/kernel-6.0"},
                   {stdlib,"3.5.1","./lib/stdlib-3.5.1"},
                   {sasl,"3.2","./lib/sasl-3.2"},
                   {gproc,"0.8.0","./lib/gproc-0.8.0"},
                   {consult_store,"0.1.0","./lib/consult_store-0.1.0"},
                   {crypto,"4.3","./lib/crypto-4.3"},
                   {quickrand,"1.7.3","./lib/quickrand-1.7.3"},
                   {erlexec,"1.7.1","./lib/erlexec-1.7.1"},
                   {getopt,"0.8.2","./lib/getopt-0.8.2"},
                   {uuid,"1.7.3","./lib/uuid-1.7.3"},
                   {other_app,"0.3.0","./lib/other_app-0.3.0"},
                   {runtime_tools,"1.13","./lib/runtime_tools-1.13"},
                   {recon,"2.3.6","./lib/recon-2.3.6"},
                   {cowlib,"2.3.0","./lib/cowlib-2.3.0"},
                   {asn1,"5.0.6","./lib/asn1-5.0.6"},
                   {public_key,"1.6.1","./lib/public_key-1.6.1"},
                   {ssl,"9.0","./lib/ssl-9.0"},
                   {ranch,"1.5.0","./lib/ranch-1.5.0"},
                   {cowboy,"2.4.0","./lib/cowboy-2.4.0"},
                   {bbmustache,"1.5.0","./lib/bbmustache-1.5.0"},
                   {myapp,"0.2.0","./lib/myapp-0.2.0"},
                   {xnet,"0.2.0","./lib/xnet-0.2.0"},
                   {jsone,"1.4.6","./lib/jsone-1.4.6"},
                   {xweb,"0.2.0","./lib/xweb-0.3.0"},
                   {xapp,"0.2.0","./lib/xapp-0.2.0"}],
                  permanent}].
        

        For the release upgrade's RELEASES file we have:

        [{release,"myrel","0.3.0","10.0.3",
                  [{kernel,"6.0","./lib/kernel-6.0"},
                   {stdlib,"3.5.1","./lib/stdlib-3.5.1"},
                   {sasl,"3.2","./lib/sasl-3.2"},
                   {gproc,"0.8.0","./lib/gproc-0.8.0"},
                   {consult_store,"0.1.0","./lib/consult_store-0.1.0"},
                   {crypto,"4.3","./lib/crypto-4.3"},
                   {quickrand,"1.7.3","./lib/quickrand-1.7.3"},
                   {erlexec,"1.7.1","./lib/erlexec-1.7.1"},
                   {getopt,"0.8.2","./lib/getopt-0.8.2"},
                   {uuid,"1.7.3","./lib/uuid-1.7.3"},
                   {other_app,"0.3.0","./lib/other_app-0.3.0"},
                   {runtime_tools,"1.13","./lib/runtime_tools-1.13"},
                   {recon,"2.3.6","./lib/recon-2.3.6"},
                   {cowlib,"2.3.0","./lib/cowlib-2.3.0"},
                   {asn1,"5.0.6","./lib/asn1-5.0.6"},
                   {public_key,"1.6.1","./lib/public_key-1.6.1"},
                   {ssl,"9.0","./lib/ssl-9.0"},
                   {ranch,"1.5.0","./lib/ranch-1.5.0"},
                   {cowboy,"2.4.0","./lib/cowboy-2.4.0"},
                   {bbmustache,"1.5.0","./lib/bbmustache-1.5.0"},
                   {myapp,"0.2.0","./lib/myapp-0.2.0"},
                   {xnet,"0.2.0","./lib/xnet-0.2.0"},
                   {jsone,"1.4.6","./lib/jsone-1.4.6"},
                   {xweb,"0.3.0","./lib/xweb-0.3.0"},
                   {xapp,"0.2.0","./lib/xapp-0.2.0"}],
                  permanent}].
        

        • I don't currently have the "just before the downgrade" since I've since then patched the working directory to be local and have been running with it, but here is what I can get:

        %% coding: utf-8
        [{release,"myrel","0.3.4","10.0.3",
                  [{kernel,"6.0","/myrel/lib/kernel-6.0"},
                   {stdlib,"3.5.1","/myrel/lib/stdlib-3.5.1"},
                   {sasl,"3.2","/myrel/lib/sasl-3.2"},
                   {gproc,"0.8.0","/myrel/lib/gproc-0.8.0"},
                   {consult_store,"0.1.0","/myrel/lib/consult_store-0.1.0"},
                   {crypto,"4.3","/myrel/lib/crypto-4.3"},
                   {quickrand,"1.7.3","/myrel/lib/quickrand-1.7.3"},
                   {erlexec,"1.7.1","/myrel/lib/erlexec-1.7.1"},
                   {getopt,"0.8.2","/myrel/lib/getopt-0.8.2"},
                   {uuid,"1.7.3","/myrel/lib/uuid-1.7.3"},
                   {otherapp,"0.3.0","/myrel/lib/otherapp-0.3.0"},
                   {runtime_tools,"1.13","/myrel/lib/runtime_tools-1.13"},
                   {recon,"2.3.6","/myrel/lib/recon-2.3.6"},
                   {cowlib,"2.3.0","/myrel/lib/cowlib-2.3.0"},
                   {asn1,"5.0.6","/myrel/lib/asn1-5.0.6"},
                   {public_key,"1.6.1","/myrel/lib/public_key-1.6.1"},
                   {ssl,"9.0","/myrel/lib/ssl-9.0"},
                   {ranch,"1.5.0","/myrel/lib/ranch-1.5.0"},
                   {cowboy,"2.4.0","/myrel/lib/cowboy-2.4.0"},
                   {bbmustache,"1.5.0","/myrel/lib/bbmustache-1.5.0"},
                   {myapp,"0.2.0","/myrel/lib/myapp-0.2.0"},
                   {xnet,"0.2.0","/myrel/lib/xnet-0.2.0"},
                   {jsone,"1.4.6","/myrel/lib/jsone-1.4.6"},
                   {xweb,"0.3.4","/myrel/lib/xweb-0.3.4"},
                   {xapp,"0.2.0","/myrel/lib/xapp-0.2.0"}],
                  unpacked},
         {release,"myrel","0.3.5","10.0.3",
                  [{kernel,"6.0","/myrel/lib/kernel-6.0"},
                   {stdlib,"3.5.1","/myrel/lib/stdlib-3.5.1"},
                   {sasl,"3.2","/myrel/lib/sasl-3.2"},
                   {gproc,"0.8.0","/myrel/lib/gproc-0.8.0"},
                   {consult_store,"0.1.0","/myrel/lib/consult_store-0.1.0"},
                   {crypto,"4.3","/myrel/lib/crypto-4.3"},
                   {quickrand,"1.7.3","/myrel/lib/quickrand-1.7.3"},
                   {asn1,"5.0.6","/myrel/lib/asn1-5.0.6"},
                   {public_key,"1.6.1","/myrel/lib/public_key-1.6.1"},
                   {erlexec,"1.7.1","/myrel/lib/erlexec-1.7.1"},
                   {getopt,"0.8.2","/myrel/lib/getopt-0.8.2"},
                   {uuid,"1.7.3","/myrel/lib/uuid-1.7.3"},
                   {otherapp,"0.3.0","/myrel/lib/otherapp-0.3.0"},
                   {runtime_tools,"1.13","/myrel/lib/runtime_tools-1.13"},
                   {recon,"2.3.6","/myrel/lib/recon-2.3.6"},
                   {cowlib,"2.3.0","/myrel/lib/cowlib-2.3.0"},
                   {ssl,"9.0","/myrel/lib/ssl-9.0"},
                   {ranch,"1.5.0","/myrel/lib/ranch-1.5.0"},
                   {cowboy,"2.4.0","/myrel/lib/cowboy-2.4.0"},
                   {bbmustache,"1.5.0","/myrel/lib/bbmustache-1.5.0"},
                   {myapp,"0.3.5","/myrel/lib/myapp-0.3.5"},
                   {xnet,"0.2.0","/myrel/lib/xnet-0.2.0"},
                   {jsone,"1.4.6","/myrel/lib/jsone-1.4.6"},
                   {xweb,"0.3.5","/myrel/lib/xweb-0.3.5"},
                   {xapp,"0.2.0","/myrel/lib/xapp-0.2.0"}],
                  permanent},
         {release,"myrel","0.3.3","10.0.3",
                  [{kernel,"6.0","/myrel/lib/kernel-6.0"},
                   {stdlib,"3.5.1","/myrel/lib/stdlib-3.5.1"},
                   {sasl,"3.2","/myrel/lib/sasl-3.2"},
                   {gproc,"0.8.0","/myrel/lib/gproc-0.8.0"},
                   {consult_store,"0.1.0","/myrel/lib/consult_store-0.1.0"},
                   {crypto,"4.3","/myrel/lib/crypto-4.3"},
                   {quickrand,"1.7.3","/myrel/lib/quickrand-1.7.3"},
                   {erlexec,"1.7.1","/myrel/lib/erlexec-1.7.1"},
                   {getopt,"0.8.2","/myrel/lib/getopt-0.8.2"},
                   {uuid,"1.7.3","/myrel/lib/uuid-1.7.3"},
                   {otherapp,"0.3.0","/myrel/lib/otherapp-0.3.0"},
                   {runtime_tools,"1.13","/myrel/lib/runtime_tools-1.13"},
                   {recon,"2.3.6","/myrel/lib/recon-2.3.6"},
                   {cowlib,"2.3.0","/myrel/lib/cowlib-2.3.0"},
                   {asn1,"5.0.6","/myrel/lib/asn1-5.0.6"},
                   {public_key,"1.6.1","/myrel/lib/public_key-1.6.1"},
                   {ssl,"9.0","/myrel/lib/ssl-9.0"},
                   {ranch,"1.5.0","/myrel/lib/ranch-1.5.0"},
                   {cowboy,"2.4.0","/myrel/lib/cowboy-2.4.0"},
                   {bbmustache,"1.5.0","/myrel/lib/bbmustache-1.5.0"},
                   {myapp,"0.2.0","/myrel/lib/myapp-0.2.0"},
                   {xnet,"0.2.0","/myrel/lib/xnet-0.2.0"},
                   {jsone,"1.4.6","/myrel/lib/jsone-1.4.6"},
                   {xweb,"0.3.3","/myrel/lib/xweb-0.3.3"},
                   {xapp,"0.2.0","/myrel/lib/xapp-0.2.0"}],
                  old},
         {release,"myrel","0.3.2","10.0.3",
                  [{kernel,"6.0","/myrel/lib/kernel-6.0"},
                   {stdlib,"3.5.1","/myrel/lib/stdlib-3.5.1"},
                   {sasl,"3.2","/myrel/lib/sasl-3.2"},
                   {gproc,"0.8.0","/myrel/lib/gproc-0.8.0"},
                   {consult_store,"0.1.0","/myrel/lib/consult_store-0.1.0"},
                   {crypto,"4.3","/myrel/lib/crypto-4.3"},
                   {quickrand,"1.7.3","/myrel/lib/quickrand-1.7.3"},
                   {erlexec,"1.7.1","/myrel/lib/erlexec-1.7.1"},
                   {getopt,"0.8.2","/myrel/lib/getopt-0.8.2"},
                   {uuid,"1.7.3","/myrel/lib/uuid-1.7.3"},
                   {otherapp,"0.3.0","/myrel/lib/otherapp-0.3.0"},
                   {runtime_tools,"1.13","/myrel/lib/runtime_tools-1.13"},
                   {recon,"2.3.6","/myrel/lib/recon-2.3.6"},
                   {cowlib,"2.3.0","/myrel/lib/cowlib-2.3.0"},
                   {asn1,"5.0.6","/myrel/lib/asn1-5.0.6"},
                   {public_key,"1.6.1","/myrel/lib/public_key-1.6.1"},
                   {ssl,"9.0","/myrel/lib/ssl-9.0"},
                   {ranch,"1.5.0","/myrel/lib/ranch-1.5.0"},
                   {cowboy,"2.4.0","/myrel/lib/cowboy-2.4.0"},
                   {bbmustache,"1.5.0","/myrel/lib/bbmustache-1.5.0"},
                   {myapp,"0.2.0","/myrel/lib/myapp-0.2.0"},
                   {xnet,"0.2.0","/myrel/lib/xnet-0.2.0"},
                   {jsone,"1.4.6","/myrel/lib/jsone-1.4.6"},
                   {xweb,"0.3.2","/myrel/lib/xweb-0.3.2"},
                   {xapp,"0.2.0","/myrel/lib/xapp-0.2.0"}],
                  old},
         {release,"myrel","0.3.1","10.0.3",
                  [{kernel,"6.0","/myrel/lib/kernel-6.0"},
                   {stdlib,"3.5.1","/myrel/lib/stdlib-3.5.1"},
                   {sasl,"3.2","/myrel/lib/sasl-3.2"},
                   {gproc,"0.8.0","/myrel/lib/gproc-0.8.0"},
                   {consult_store,"0.1.0","/myrel/lib/consult_store-0.1.0"},
                   {crypto,"4.3","/myrel/lib/crypto-4.3"},
                   {quickrand,"1.7.3","/myrel/lib/quickrand-1.7.3"},
                   {erlexec,"1.7.1","/myrel/lib/erlexec-1.7.1"},
                   {getopt,"0.8.2","/myrel/lib/getopt-0.8.2"},
                   {uuid,"1.7.3","/myrel/lib/uuid-1.7.3"},
                   {otherapp,"0.3.0","/myrel/lib/otherapp-0.3.0"},
                   {runtime_tools,"1.13","/myrel/lib/runtime_tools-1.13"},
                   {recon,"2.3.6","/myrel/lib/recon-2.3.6"},
                   {cowlib,"2.3.0","/myrel/lib/cowlib-2.3.0"},
                   {asn1,"5.0.6","/myrel/lib/asn1-5.0.6"},
                   {public_key,"1.6.1","/myrel/lib/public_key-1.6.1"},
                   {ssl,"9.0","/myrel/lib/ssl-9.0"},
                   {ranch,"1.5.0","/myrel/lib/ranch-1.5.0"},
                   {cowboy,"2.4.0","/myrel/lib/cowboy-2.4.0"},
                   {bbmustache,"1.5.0","/myrel/lib/bbmustache-1.5.0"},
                   {myapp,"0.2.0","/myrel/lib/myapp-0.2.0"},
                   {xnet,"0.2.0","/myrel/lib/xnet-0.2.0"},
                   {jsone,"1.4.6","/myrel/lib/jsone-1.4.6"},
                   {xweb,"0.3.1","/myrel/lib/xweb-0.3.1"},
                   {xapp,"0.2.0","/myrel/lib/xapp-0.2.0"}],
                  old},
         {release,"myrel","0.2.0","10.0.3",
                  [{kernel,"6.0","./lib/kernel-6.0"},
                   {stdlib,"3.5.1","./lib/stdlib-3.5.1"},
                   {sasl,"3.2","./lib/sasl-3.2"},
                   {gproc,"0.8.0","./lib/gproc-0.8.0"},
                   {consult_store,"0.1.0","./lib/consult_store-0.1.0"},
                   {crypto,"4.3","./lib/crypto-4.3"},
                   {quickrand,"1.7.3","./lib/quickrand-1.7.3"},
                   {erlexec,"1.7.1","./lib/erlexec-1.7.1"},
                   {getopt,"0.8.2","./lib/getopt-0.8.2"},
                   {uuid,"1.7.3","./lib/uuid-1.7.3"},
                   {otherapp,"0.3.0","./lib/otherapp-0.3.0"},
                   {runtime_tools,"1.13","./lib/runtime_tools-1.13"},
                   {recon,"2.3.6","./lib/recon-2.3.6"},
                   {cowlib,"2.3.0","./lib/cowlib-2.3.0"},
                   {asn1,"5.0.6","./lib/asn1-5.0.6"},
                   {public_key,"1.6.1","./lib/public_key-1.6.1"},
                   {ssl,"9.0","./lib/ssl-9.0"},
                   {ranch,"1.5.0","./lib/ranch-1.5.0"},
                   {cowboy,"2.4.0","./lib/cowboy-2.4.0"},
                   {bbmustache,"1.5.0","./lib/bbmustache-1.5.0"},
                   {myapp,"0.2.0","./lib/myapp-0.2.0"},
                   {xnet,"0.2.0","./lib/xnet-0.2.0"},
                   {jsone,"1.4.6","./lib/jsone-1.4.6"},
                   {xweb,"0.2.0","./lib/xweb-0.2.0"},
                   {xapp,"0.2.0","./lib/xapp-0.2.0"}],
                  old}].
        
        

        As you can see, all the paths have been registered as relative there as well, except for the first release.

        Here's the internal state, and there is something fun in there as well regarding paths:

        (myrel@127.0.0.1)2> rr(release_handler).
        [file_descriptor,file_info,release,state]
        (myrel@127.0.0.1)3> rp(sys:get_state(release_handler)).
        #state{unpurged = [],root = "/myapp",
               rel_dir = "/myrel/releases",
               releases = [#release{name = "myrel",vsn = "0.3.4",
                                    erts_vsn = "10.0.3",
                                    libs = [{kernel,"6.0","/myrel/lib/kernel-6.0"},
                                            {stdlib,"3.5.1","/myrel/lib/stdlib-3.5.1"},
                                            {sasl,"3.2","/myrel/lib/sasl-3.2"},
                                            {gproc,"0.8.0","/myrel/lib/gproc-0.8.0"},
                                            {consult_store,"0.1.0","/myrel/lib/consult_store-0.1.0"},
                                            {crypto,"4.3","/myrel/lib/crypto-4.3"},
                                            {quickrand,"1.7.3","/myrel/lib/quickrand-1.7.3"},
                                            {erlexec,"1.7.1","/myrel/lib/erlexec-1.7.1"},
                                            {getopt,"0.8.2","/myrel/lib/getopt-0.8.2"},
                                            {uuid,"1.7.3","/myrel/lib/uuid-1.7.3"},
                                            {otherapp,"0.3.0","/myrel/lib/otherapp-0.3.0"},
                                            {runtime_tools,"1.13","/myrel/lib/runtime_tools-1.13"},
                                            {recon,"2.3.6","/myrel/lib/recon-2.3.6"},
                                            {cowlib,"2.3.0","/myrel/lib/cowlib-2.3.0"},
                                            {asn1,"5.0.6","/myrel/lib/asn1-5.0.6"},
                                            {public_key,"1.6.1","/myrel/lib/public_key-1.6.1"},
                                            {ssl,"9.0","/myrel/lib/ssl-9.0"},
                                            {ranch,"1.5.0","/myrel/lib/ranch-1.5.0"},
                                            {cowboy,"2.4.0","/myrel/lib/cowboy-2.4.0"},
                                            {bbmustache,"1.5.0","/myrel/lib/bbmustache-1.5.0"},
                                            {myapp,"0.2.0","/myrel/lib/myapp-0.2.0"},
                                            {xnet,"0.2.0","/myrel/lib/xnet-0.2.0"},
                                            {jsone,"1.4.6","/myrel/lib/jsone-1.4.6"},
                                            {xweb,"0.3.4","/myrel/lib/xweb-0.3.4"},
                                            {xapp,"0.2.0","/myrel/lib/xapp-0.2.0"}],
                                    status = old},
                           #release{name = "myrel",vsn = "0.3.5",erts_vsn = "10.0.3",
                                    libs = [{kernel,"6.0","/myrel/lib/kernel-6.0"},
                                            {stdlib,"3.5.1","/myrel/lib/stdlib-3.5.1"},
                                            {sasl,"3.2","/myrel/lib/sasl-3.2"},
                                            {gproc,"0.8.0","/myrel/lib/gproc-0.8.0"},
                                            {consult_store,"0.1.0","/myrel/lib/consult_store-0.1.0"},
                                            {crypto,"4.3","/myrel/lib/crypto-4.3"},
                                            {quickrand,"1.7.3","/myrel/lib/quickrand-1.7.3"},
                                            {asn1,"5.0.6","/myrel/lib/asn1-5.0.6"},
                                            {public_key,"1.6.1","/myrel/lib/public_key-1.6.1"},
                                            {erlexec,"1.7.1","/myrel/lib/erlexec-1.7.1"},
                                            {getopt,"0.8.2","/myrel/lib/getopt-0.8.2"},
                                            {uuid,"1.7.3","/myrel/lib/uuid-1.7.3"},
                                            {otherapp,"0.3.0","/myrel/lib/otherapp-0.3.0"},
                                            {runtime_tools,"1.13","/myrel/lib/runtime_tools-1.13"},
                                            {recon,"2.3.6","/myrel/lib/recon-2.3.6"},
                                            {cowlib,"2.3.0","/myrel/lib/cowlib-2.3.0"},
                                            {ssl,"9.0","/myrel/lib/ssl-9.0"},
                                            {ranch,"1.5.0","/myrel/lib/ranch-1.5.0"},
                                            {cowboy,"2.4.0","/myrel/lib/cowboy-2.4.0"},
                                            {bbmustache,"1.5.0","/myrel/lib/bbmustache-1.5.0"},
                                            {myapp,"0.3.5","/myrel/lib/myapp-0.3.5"},
                                            {xnet,"0.2.0","/myrel/lib/xnet-0.2.0"},
                                            {jsone,"1.4.6","/myrel/lib/jsone-1.4.6"},
                                            {xweb,"0.3.5","/myrel/lib/xweb-0.3.5"},
                                            {xapp,"0.2.0","/myrel/lib/xapp-0.2.0"}],
                                    status = permanent},
                           #release{name = "myrel",vsn = "0.3.3",erts_vsn = "10.0.3",
                                    libs = [{kernel,"6.0","/myrel/lib/kernel-6.0"},
                                            {stdlib,"3.5.1","/myrel/lib/stdlib-3.5.1"},
                                            {sasl,"3.2","/myrel/lib/sasl-3.2"},
                                            {gproc,"0.8.0","/myrel/lib/gproc-0.8.0"},
                                            {consult_store,"0.1.0","/myrel/lib/consult_store-0.1.0"},
                                            {crypto,"4.3","/myrel/lib/crypto-4.3"},
                                            {quickrand,"1.7.3","/myrel/lib/quickrand-1.7.3"},
                                            {erlexec,"1.7.1","/myrel/lib/erlexec-1.7.1"},
                                            {getopt,"0.8.2","/myrel/lib/getopt-0.8.2"},
                                            {uuid,"1.7.3","/myrel/lib/uuid-1.7.3"},
                                            {otherapp,"0.3.0","/myrel/lib/otherapp-0.3.0"},
                                            {runtime_tools,"1.13","/myrel/lib/runtime_tools-1.13"},
                                            {recon,"2.3.6","/myrel/lib/recon-2.3.6"},
                                            {cowlib,"2.3.0","/myrel/lib/cowlib-2.3.0"},
                                            {asn1,"5.0.6","/myrel/lib/asn1-5.0.6"},
                                            {public_key,"1.6.1","/myrel/lib/public_key-1.6.1"},
                                            {ssl,"9.0","/myrel/lib/ssl-9.0"},
                                            {ranch,"1.5.0","/myrel/lib/ranch-1.5.0"},
                                            {cowboy,"2.4.0","/myrel/lib/cowboy-2.4.0"},
                                            {bbmustache,"1.5.0","/myrel/lib/bbmustache-1.5.0"},
                                            {myapp,"0.2.0","/myrel/lib/myapp-0.2.0"},
                                            {xnet,"0.2.0","/myrel/lib/xnet-0.2.0"},
                                            {jsone,"1.4.6","/myrel/lib/jsone-1.4.6"},
                                            {xweb,"0.3.3","/myrel/lib/xweb-0.3.3"},
                                            {xapp,"0.2.0","/myrel/lib/xapp-0.2.0"}],
                                    status = old},
                           #release{name = "myrel",vsn = "0.3.2",erts_vsn = "10.0.3",
                                    libs = [{kernel,"6.0","/myrel/lib/kernel-6.0"},
                                            {stdlib,"3.5.1","/myrel/lib/stdlib-3.5.1"},
                                            {sasl,"3.2","/myrel/lib/sasl-3.2"},
                                            {gproc,"0.8.0","/myrel/lib/gproc-0.8.0"},
                                            {consult_store,"0.1.0","/myrel/lib/consult_store-0.1.0"},
                                            {crypto,"4.3","/myrel/lib/crypto-4.3"},
                                            {quickrand,"1.7.3","/myrel/lib/quickrand-1.7.3"},
                                            {erlexec,"1.7.1","/myrel/lib/erlexec-1.7.1"},
                                            {getopt,"0.8.2","/myrel/lib/getopt-0.8.2"},
                                            {uuid,"1.7.3","/myrel/lib/uuid-1.7.3"},
                                            {otherapp,"0.3.0","/myrel/lib/otherapp-0.3.0"},
                                            {runtime_tools,"1.13","/myrel/lib/runtime_tools-1.13"},
                                            {recon,"2.3.6","/myrel/lib/recon-2.3.6"},
                                            {cowlib,"2.3.0","/myrel/lib/cowlib-2.3.0"},
                                            {asn1,"5.0.6","/myrel/lib/asn1-5.0.6"},
                                            {public_key,"1.6.1","/myrel/lib/public_key-1.6.1"},
                                            {ssl,"9.0","/myrel/lib/ssl-9.0"},
                                            {ranch,"1.5.0","/myrel/lib/ranch-1.5.0"},
                                            {cowboy,"2.4.0","/myrel/lib/cowboy-2.4.0"},
                                            {bbmustache,"1.5.0","/myrel/lib/bbmustache-1.5.0"},
                                            {myapp,"0.2.0","/myrel/lib/myapp-0.2.0"},
                                            {xnet,"0.2.0","/myrel/lib/xnet-0.2.0"},
                                            {jsone,"1.4.6","/myrel/lib/jsone-1.4.6"},
                                            {xweb,"0.3.2","/myrel/lib/xweb-0.3.2"},
                                            {xapp,"0.2.0","/myrel/lib/xapp-0.2.0"}],
                                    status = old},
                           #release{name = "myrel",vsn = "0.3.1",erts_vsn = "10.0.3",
                                    libs = [{kernel,"6.0","/myrel/lib/kernel-6.0"},
                                            {stdlib,"3.5.1","/myrel/lib/stdlib-3.5.1"},
                                            {sasl,"3.2","/myrel/lib/sasl-3.2"},
                                            {gproc,"0.8.0","/myrel/lib/gproc-0.8.0"},
                                            {consult_store,"0.1.0","/myrel/lib/consult_store-0.1.0"},
                                            {crypto,"4.3","/myrel/lib/crypto-4.3"},
                                            {quickrand,"1.7.3","/myrel/lib/quickrand-1.7.3"},
                                            {erlexec,"1.7.1","/myrel/lib/erlexec-1.7.1"},
                                            {getopt,"0.8.2","/myrel/lib/getopt-0.8.2"},
                                            {uuid,"1.7.3","/myrel/lib/uuid-1.7.3"},
                                            {otherapp,"0.3.0","/myrel/lib/otherapp-0.3.0"},
                                            {runtime_tools,"1.13","/myrel/lib/runtime_tools-1.13"},
                                            {recon,"2.3.6","/myrel/lib/recon-2.3.6"},
                                            {cowlib,"2.3.0","/myrel/lib/cowlib-2.3.0"},
                                            {asn1,"5.0.6","/myrel/lib/asn1-5.0.6"},
                                            {public_key,"1.6.1","/myrel/lib/public_key-1.6.1"},
                                            {ssl,"9.0","/myrel/lib/ssl-9.0"},
                                            {ranch,"1.5.0","/myrel/lib/ranch-1.5.0"},
                                            {cowboy,"2.4.0","/myrel/lib/cowboy-2.4.0"},
                                            {bbmustache,"1.5.0","/myrel/lib/bbmustache-1.5.0"},
                                            {myapp,"0.2.0","/myrel/lib/myapp-0.2.0"},
                                            {xnet,"0.2.0","/myrel/lib/xnet-0.2.0"},
                                            {jsone,"1.4.6","/myrel/lib/jsone-1.4.6"},
                                            {xweb,"0.3.1","/myrel/lib/xweb-0.3.1"},
                                            {xapp,"0.2.0","/myrel/lib/xapp-0.2.0"}],
                                    status = old},
                           #release{name = "myrel",vsn = "0.2.0",erts_vsn = "10.0.3",
                                    libs = [{kernel,"6.0","./lib/kernel-6.0"},
                                            {stdlib,"3.5.1","./lib/stdlib-3.5.1"},
                                            {sasl,"3.2","./lib/sasl-3.2"},
                                            {gproc,"0.8.0","./lib/gproc-0.8.0"},
                                            {consult_store,"0.1.0","./lib/consult_store-0.1.0"},
                                            {crypto,"4.3","./lib/crypto-4.3"},
                                            {quickrand,"1.7.3","./lib/quickrand-1.7.3"},
                                            {erlexec,"1.7.1","./lib/erlexec-1.7.1"},
                                            {getopt,"0.8.2","./lib/getopt-0.8.2"},
                                            {getopt,"0.8.2","./lib/getopt-0.8.2"},
                                            {uuid,"1.7.3","./lib/uuid-1.7.3"},
                                            {otherapp,"0.3.0","./lib/otherapp-0.3.0"},
                                            {runtime_tools,"1.13","./lib/runtime_tools-1.13"},
                                            {recon,"2.3.6","./lib/recon-2.3.6"},
                                            {cowlib,"2.3.0","./lib/cowlib-2.3.0"},
                                            {asn1,"5.0.6","./lib/asn1-5.0.6"},
                                            {public_key,"1.6.1","./lib/public_key-1.6.1"},
                                            {ssl,"9.0","./lib/ssl-9.0"},
                                            {ranch,"1.5.0","./lib/ranch-1.5.0"},
                                            {cowboy,"2.4.0","./lib/cowboy-2.4.0"},
                                            {bbmustache,"1.5.0","./lib/bbmustache-1.5.0"},
                                            {myapp,"0.2.0","./lib/myapp-0.2.0"},
                                            {xnet,"0.2.0","./lib/xnet-0.2.0"},
                                            {jsone,"1.4.6","./lib/jsone-1.4.6"},
                                            {xweb,"0.2.0","./lib/xweb-0.2.0"},
                                            {xapp,"0.2.0","./lib/xapp-0.2.0"}],
                                    status = old}],
               timer = undefined,
               start_prg = {no_check,"/myrel/bin/start"},
               masters = false,client_dir = false,static_emulator = false,
               pre_sync_nodes = []}
        ok
        

        So interestingly, only the first release of all (0.2.0) has relative paths. All of the other ones have their paths expanded to absolute when unpacked by the system. I guess that would contribute to the problem I had.

        Show
        ferd ferd added a comment - - edited I'm using Relx to create the RELEASES file as part as regular release building. It does so as described in the following code snippet: https://github.com/erlware/relx/blob/c00c4a643ff21acc3535182f1621e1da39488e63/src/rlx_prv_assembler.erl#L820-L827 – it sets itself up to use relative paths since it does not necessarily know ahead of time where in another system the release will be deployed Right after creation, the content of the file is: [{release, "myrel" , "0.2.0" , "10.0.3" , [{kernel, "6.0" , "./lib/kernel-6.0" }, {stdlib, "3.5.1" , "./lib/stdlib-3.5.1" }, {sasl, "3.2" , "./lib/sasl-3.2" }, {gproc, "0.8.0" , "./lib/gproc-0.8.0" }, {consult_store, "0.1.0" , "./lib/consult_store-0.1.0" }, {crypto, "4.3" , "./lib/crypto-4.3" }, {quickrand, "1.7.3" , "./lib/quickrand-1.7.3" }, {erlexec, "1.7.1" , "./lib/erlexec-1.7.1" }, {getopt, "0.8.2" , "./lib/getopt-0.8.2" }, {uuid, "1.7.3" , "./lib/uuid-1.7.3" }, {other_app, "0.3.0" , "./lib/other_app-0.3.0" }, {runtime_tools, "1.13" , "./lib/runtime_tools-1.13" }, {recon, "2.3.6" , "./lib/recon-2.3.6" }, {cowlib, "2.3.0" , "./lib/cowlib-2.3.0" }, {asn1, "5.0.6" , "./lib/asn1-5.0.6" }, {public_key, "1.6.1" , "./lib/public_key-1.6.1" }, {ssl, "9.0" , "./lib/ssl-9.0" }, {ranch, "1.5.0" , "./lib/ranch-1.5.0" }, {cowboy, "2.4.0" , "./lib/cowboy-2.4.0" }, {bbmustache, "1.5.0" , "./lib/bbmustache-1.5.0" }, {myapp, "0.2.0" , "./lib/myapp-0.2.0" }, {xnet, "0.2.0" , "./lib/xnet-0.2.0" }, {jsone, "1.4.6" , "./lib/jsone-1.4.6" }, {xweb, "0.2.0" , "./lib/xweb-0.3.0" }, {xapp, "0.2.0" , "./lib/xapp-0.2.0" }], permanent}]. For the release upgrade's RELEASES file we have: [{release, "myrel" , "0.3.0" , "10.0.3" , [{kernel, "6.0" , "./lib/kernel-6.0" }, {stdlib, "3.5.1" , "./lib/stdlib-3.5.1" }, {sasl, "3.2" , "./lib/sasl-3.2" }, {gproc, "0.8.0" , "./lib/gproc-0.8.0" }, {consult_store, "0.1.0" , "./lib/consult_store-0.1.0" }, {crypto, "4.3" , "./lib/crypto-4.3" }, {quickrand, "1.7.3" , "./lib/quickrand-1.7.3" }, {erlexec, "1.7.1" , "./lib/erlexec-1.7.1" }, {getopt, "0.8.2" , "./lib/getopt-0.8.2" }, {uuid, "1.7.3" , "./lib/uuid-1.7.3" }, {other_app, "0.3.0" , "./lib/other_app-0.3.0" }, {runtime_tools, "1.13" , "./lib/runtime_tools-1.13" }, {recon, "2.3.6" , "./lib/recon-2.3.6" }, {cowlib, "2.3.0" , "./lib/cowlib-2.3.0" }, {asn1, "5.0.6" , "./lib/asn1-5.0.6" }, {public_key, "1.6.1" , "./lib/public_key-1.6.1" }, {ssl, "9.0" , "./lib/ssl-9.0" }, {ranch, "1.5.0" , "./lib/ranch-1.5.0" }, {cowboy, "2.4.0" , "./lib/cowboy-2.4.0" }, {bbmustache, "1.5.0" , "./lib/bbmustache-1.5.0" }, {myapp, "0.2.0" , "./lib/myapp-0.2.0" }, {xnet, "0.2.0" , "./lib/xnet-0.2.0" }, {jsone, "1.4.6" , "./lib/jsone-1.4.6" }, {xweb, "0.3.0" , "./lib/xweb-0.3.0" }, {xapp, "0.2.0" , "./lib/xapp-0.2.0" }], permanent}]. I don't currently have the "just before the downgrade" since I've since then patched the working directory to be local and have been running with it, but here is what I can get: %% coding: utf- 8 [{release, "myrel" , "0.3.4" , "10.0.3" , [{kernel, "6.0" , "/myrel/lib/kernel-6.0" }, {stdlib, "3.5.1" , "/myrel/lib/stdlib-3.5.1" }, {sasl, "3.2" , "/myrel/lib/sasl-3.2" }, {gproc, "0.8.0" , "/myrel/lib/gproc-0.8.0" }, {consult_store, "0.1.0" , "/myrel/lib/consult_store-0.1.0" }, {crypto, "4.3" , "/myrel/lib/crypto-4.3" }, {quickrand, "1.7.3" , "/myrel/lib/quickrand-1.7.3" }, {erlexec, "1.7.1" , "/myrel/lib/erlexec-1.7.1" }, {getopt, "0.8.2" , "/myrel/lib/getopt-0.8.2" }, {uuid, "1.7.3" , "/myrel/lib/uuid-1.7.3" }, {otherapp, "0.3.0" , "/myrel/lib/otherapp-0.3.0" }, {runtime_tools, "1.13" , "/myrel/lib/runtime_tools-1.13" }, {recon, "2.3.6" , "/myrel/lib/recon-2.3.6" }, {cowlib, "2.3.0" , "/myrel/lib/cowlib-2.3.0" }, {asn1, "5.0.6" , "/myrel/lib/asn1-5.0.6" }, {public_key, "1.6.1" , "/myrel/lib/public_key-1.6.1" }, {ssl, "9.0" , "/myrel/lib/ssl-9.0" }, {ranch, "1.5.0" , "/myrel/lib/ranch-1.5.0" }, {cowboy, "2.4.0" , "/myrel/lib/cowboy-2.4.0" }, {bbmustache, "1.5.0" , "/myrel/lib/bbmustache-1.5.0" }, {myapp, "0.2.0" , "/myrel/lib/myapp-0.2.0" }, {xnet, "0.2.0" , "/myrel/lib/xnet-0.2.0" }, {jsone, "1.4.6" , "/myrel/lib/jsone-1.4.6" }, {xweb, "0.3.4" , "/myrel/lib/xweb-0.3.4" }, {xapp, "0.2.0" , "/myrel/lib/xapp-0.2.0" }], unpacked}, {release, "myrel" , "0.3.5" , "10.0.3" , [{kernel, "6.0" , "/myrel/lib/kernel-6.0" }, {stdlib, "3.5.1" , "/myrel/lib/stdlib-3.5.1" }, {sasl, "3.2" , "/myrel/lib/sasl-3.2" }, {gproc, "0.8.0" , "/myrel/lib/gproc-0.8.0" }, {consult_store, "0.1.0" , "/myrel/lib/consult_store-0.1.0" }, {crypto, "4.3" , "/myrel/lib/crypto-4.3" }, {quickrand, "1.7.3" , "/myrel/lib/quickrand-1.7.3" }, {asn1, "5.0.6" , "/myrel/lib/asn1-5.0.6" }, {public_key, "1.6.1" , "/myrel/lib/public_key-1.6.1" }, {erlexec, "1.7.1" , "/myrel/lib/erlexec-1.7.1" }, {getopt, "0.8.2" , "/myrel/lib/getopt-0.8.2" }, {uuid, "1.7.3" , "/myrel/lib/uuid-1.7.3" }, {otherapp, "0.3.0" , "/myrel/lib/otherapp-0.3.0" }, {runtime_tools, "1.13" , "/myrel/lib/runtime_tools-1.13" }, {recon, "2.3.6" , "/myrel/lib/recon-2.3.6" }, {cowlib, "2.3.0" , "/myrel/lib/cowlib-2.3.0" }, {ssl, "9.0" , "/myrel/lib/ssl-9.0" }, {ranch, "1.5.0" , "/myrel/lib/ranch-1.5.0" }, {cowboy, "2.4.0" , "/myrel/lib/cowboy-2.4.0" }, {bbmustache, "1.5.0" , "/myrel/lib/bbmustache-1.5.0" }, {myapp, "0.3.5" , "/myrel/lib/myapp-0.3.5" }, {xnet, "0.2.0" , "/myrel/lib/xnet-0.2.0" }, {jsone, "1.4.6" , "/myrel/lib/jsone-1.4.6" }, {xweb, "0.3.5" , "/myrel/lib/xweb-0.3.5" }, {xapp, "0.2.0" , "/myrel/lib/xapp-0.2.0" }], permanent}, {release, "myrel" , "0.3.3" , "10.0.3" , [{kernel, "6.0" , "/myrel/lib/kernel-6.0" }, {stdlib, "3.5.1" , "/myrel/lib/stdlib-3.5.1" }, {sasl, "3.2" , "/myrel/lib/sasl-3.2" }, {gproc, "0.8.0" , "/myrel/lib/gproc-0.8.0" }, {consult_store, "0.1.0" , "/myrel/lib/consult_store-0.1.0" }, {crypto, "4.3" , "/myrel/lib/crypto-4.3" }, {quickrand, "1.7.3" , "/myrel/lib/quickrand-1.7.3" }, {erlexec, "1.7.1" , "/myrel/lib/erlexec-1.7.1" }, {getopt, "0.8.2" , "/myrel/lib/getopt-0.8.2" }, {uuid, "1.7.3" , "/myrel/lib/uuid-1.7.3" }, {otherapp, "0.3.0" , "/myrel/lib/otherapp-0.3.0" }, {runtime_tools, "1.13" , "/myrel/lib/runtime_tools-1.13" }, {recon, "2.3.6" , "/myrel/lib/recon-2.3.6" }, {cowlib, "2.3.0" , "/myrel/lib/cowlib-2.3.0" }, {asn1, "5.0.6" , "/myrel/lib/asn1-5.0.6" }, {public_key, "1.6.1" , "/myrel/lib/public_key-1.6.1" }, {ssl, "9.0" , "/myrel/lib/ssl-9.0" }, {ranch, "1.5.0" , "/myrel/lib/ranch-1.5.0" }, {cowboy, "2.4.0" , "/myrel/lib/cowboy-2.4.0" }, {bbmustache, "1.5.0" , "/myrel/lib/bbmustache-1.5.0" }, {myapp, "0.2.0" , "/myrel/lib/myapp-0.2.0" }, {xnet, "0.2.0" , "/myrel/lib/xnet-0.2.0" }, {jsone, "1.4.6" , "/myrel/lib/jsone-1.4.6" }, {xweb, "0.3.3" , "/myrel/lib/xweb-0.3.3" }, {xapp, "0.2.0" , "/myrel/lib/xapp-0.2.0" }], old}, {release, "myrel" , "0.3.2" , "10.0.3" , [{kernel, "6.0" , "/myrel/lib/kernel-6.0" }, {stdlib, "3.5.1" , "/myrel/lib/stdlib-3.5.1" }, {sasl, "3.2" , "/myrel/lib/sasl-3.2" }, {gproc, "0.8.0" , "/myrel/lib/gproc-0.8.0" }, {consult_store, "0.1.0" , "/myrel/lib/consult_store-0.1.0" }, {crypto, "4.3" , "/myrel/lib/crypto-4.3" }, {quickrand, "1.7.3" , "/myrel/lib/quickrand-1.7.3" }, {erlexec, "1.7.1" , "/myrel/lib/erlexec-1.7.1" }, {getopt, "0.8.2" , "/myrel/lib/getopt-0.8.2" }, {uuid, "1.7.3" , "/myrel/lib/uuid-1.7.3" }, {otherapp, "0.3.0" , "/myrel/lib/otherapp-0.3.0" }, {runtime_tools, "1.13" , "/myrel/lib/runtime_tools-1.13" }, {recon, "2.3.6" , "/myrel/lib/recon-2.3.6" }, {cowlib, "2.3.0" , "/myrel/lib/cowlib-2.3.0" }, {asn1, "5.0.6" , "/myrel/lib/asn1-5.0.6" }, {public_key, "1.6.1" , "/myrel/lib/public_key-1.6.1" }, {ssl, "9.0" , "/myrel/lib/ssl-9.0" }, {ranch, "1.5.0" , "/myrel/lib/ranch-1.5.0" }, {cowboy, "2.4.0" , "/myrel/lib/cowboy-2.4.0" }, {bbmustache, "1.5.0" , "/myrel/lib/bbmustache-1.5.0" }, {myapp, "0.2.0" , "/myrel/lib/myapp-0.2.0" }, {xnet, "0.2.0" , "/myrel/lib/xnet-0.2.0" }, {jsone, "1.4.6" , "/myrel/lib/jsone-1.4.6" }, {xweb, "0.3.2" , "/myrel/lib/xweb-0.3.2" }, {xapp, "0.2.0" , "/myrel/lib/xapp-0.2.0" }], old}, {release, "myrel" , "0.3.1" , "10.0.3" , [{kernel, "6.0" , "/myrel/lib/kernel-6.0" }, {stdlib, "3.5.1" , "/myrel/lib/stdlib-3.5.1" }, {sasl, "3.2" , "/myrel/lib/sasl-3.2" }, {gproc, "0.8.0" , "/myrel/lib/gproc-0.8.0" }, {consult_store, "0.1.0" , "/myrel/lib/consult_store-0.1.0" }, {crypto, "4.3" , "/myrel/lib/crypto-4.3" }, {quickrand, "1.7.3" , "/myrel/lib/quickrand-1.7.3" }, {erlexec, "1.7.1" , "/myrel/lib/erlexec-1.7.1" }, {getopt, "0.8.2" , "/myrel/lib/getopt-0.8.2" }, {uuid, "1.7.3" , "/myrel/lib/uuid-1.7.3" }, {otherapp, "0.3.0" , "/myrel/lib/otherapp-0.3.0" }, {runtime_tools, "1.13" , "/myrel/lib/runtime_tools-1.13" }, {recon, "2.3.6" , "/myrel/lib/recon-2.3.6" }, {cowlib, "2.3.0" , "/myrel/lib/cowlib-2.3.0" }, {asn1, "5.0.6" , "/myrel/lib/asn1-5.0.6" }, {public_key, "1.6.1" , "/myrel/lib/public_key-1.6.1" }, {ssl, "9.0" , "/myrel/lib/ssl-9.0" }, {ranch, "1.5.0" , "/myrel/lib/ranch-1.5.0" }, {cowboy, "2.4.0" , "/myrel/lib/cowboy-2.4.0" }, {bbmustache, "1.5.0" , "/myrel/lib/bbmustache-1.5.0" }, {myapp, "0.2.0" , "/myrel/lib/myapp-0.2.0" }, {xnet, "0.2.0" , "/myrel/lib/xnet-0.2.0" }, {jsone, "1.4.6" , "/myrel/lib/jsone-1.4.6" }, {xweb, "0.3.1" , "/myrel/lib/xweb-0.3.1" }, {xapp, "0.2.0" , "/myrel/lib/xapp-0.2.0" }], old}, {release, "myrel" , "0.2.0" , "10.0.3" , [{kernel, "6.0" , "./lib/kernel-6.0" }, {stdlib, "3.5.1" , "./lib/stdlib-3.5.1" }, {sasl, "3.2" , "./lib/sasl-3.2" }, {gproc, "0.8.0" , "./lib/gproc-0.8.0" }, {consult_store, "0.1.0" , "./lib/consult_store-0.1.0" }, {crypto, "4.3" , "./lib/crypto-4.3" }, {quickrand, "1.7.3" , "./lib/quickrand-1.7.3" }, {erlexec, "1.7.1" , "./lib/erlexec-1.7.1" }, {getopt, "0.8.2" , "./lib/getopt-0.8.2" }, {uuid, "1.7.3" , "./lib/uuid-1.7.3" }, {otherapp, "0.3.0" , "./lib/otherapp-0.3.0" }, {runtime_tools, "1.13" , "./lib/runtime_tools-1.13" }, {recon, "2.3.6" , "./lib/recon-2.3.6" }, {cowlib, "2.3.0" , "./lib/cowlib-2.3.0" }, {asn1, "5.0.6" , "./lib/asn1-5.0.6" }, {public_key, "1.6.1" , "./lib/public_key-1.6.1" }, {ssl, "9.0" , "./lib/ssl-9.0" }, {ranch, "1.5.0" , "./lib/ranch-1.5.0" }, {cowboy, "2.4.0" , "./lib/cowboy-2.4.0" }, {bbmustache, "1.5.0" , "./lib/bbmustache-1.5.0" }, {myapp, "0.2.0" , "./lib/myapp-0.2.0" }, {xnet, "0.2.0" , "./lib/xnet-0.2.0" }, {jsone, "1.4.6" , "./lib/jsone-1.4.6" }, {xweb, "0.2.0" , "./lib/xweb-0.2.0" }, {xapp, "0.2.0" , "./lib/xapp-0.2.0" }], old}]. As you can see, all the paths have been registered as relative there as well, except for the first release . Here's the internal state, and there is something fun in there as well regarding paths: (myrel @127 .0. 0.1 ) 2 > rr(release_handler). [file_descriptor,file_info,release,state] (myrel @127 .0. 0.1 ) 3 > rp(sys:get_state(release_handler)). #state{unpurged = [],root = "/myapp" , rel_dir = "/myrel/releases" , releases = [#release{name = "myrel" ,vsn = "0.3.4" , erts_vsn = "10.0.3" , libs = [{kernel, "6.0" , "/myrel/lib/kernel-6.0" }, {stdlib, "3.5.1" , "/myrel/lib/stdlib-3.5.1" }, {sasl, "3.2" , "/myrel/lib/sasl-3.2" }, {gproc, "0.8.0" , "/myrel/lib/gproc-0.8.0" }, {consult_store, "0.1.0" , "/myrel/lib/consult_store-0.1.0" }, {crypto, "4.3" , "/myrel/lib/crypto-4.3" }, {quickrand, "1.7.3" , "/myrel/lib/quickrand-1.7.3" }, {erlexec, "1.7.1" , "/myrel/lib/erlexec-1.7.1" }, {getopt, "0.8.2" , "/myrel/lib/getopt-0.8.2" }, {uuid, "1.7.3" , "/myrel/lib/uuid-1.7.3" }, {otherapp, "0.3.0" , "/myrel/lib/otherapp-0.3.0" }, {runtime_tools, "1.13" , "/myrel/lib/runtime_tools-1.13" }, {recon, "2.3.6" , "/myrel/lib/recon-2.3.6" }, {cowlib, "2.3.0" , "/myrel/lib/cowlib-2.3.0" }, {asn1, "5.0.6" , "/myrel/lib/asn1-5.0.6" }, {public_key, "1.6.1" , "/myrel/lib/public_key-1.6.1" }, {ssl, "9.0" , "/myrel/lib/ssl-9.0" }, {ranch, "1.5.0" , "/myrel/lib/ranch-1.5.0" }, {cowboy, "2.4.0" , "/myrel/lib/cowboy-2.4.0" }, {bbmustache, "1.5.0" , "/myrel/lib/bbmustache-1.5.0" }, {myapp, "0.2.0" , "/myrel/lib/myapp-0.2.0" }, {xnet, "0.2.0" , "/myrel/lib/xnet-0.2.0" }, {jsone, "1.4.6" , "/myrel/lib/jsone-1.4.6" }, {xweb, "0.3.4" , "/myrel/lib/xweb-0.3.4" }, {xapp, "0.2.0" , "/myrel/lib/xapp-0.2.0" }], status = old}, #release{name = "myrel" ,vsn = "0.3.5" ,erts_vsn = "10.0.3" , libs = [{kernel, "6.0" , "/myrel/lib/kernel-6.0" }, {stdlib, "3.5.1" , "/myrel/lib/stdlib-3.5.1" }, {sasl, "3.2" , "/myrel/lib/sasl-3.2" }, {gproc, "0.8.0" , "/myrel/lib/gproc-0.8.0" }, {consult_store, "0.1.0" , "/myrel/lib/consult_store-0.1.0" }, {crypto, "4.3" , "/myrel/lib/crypto-4.3" }, {quickrand, "1.7.3" , "/myrel/lib/quickrand-1.7.3" }, {asn1, "5.0.6" , "/myrel/lib/asn1-5.0.6" }, {public_key, "1.6.1" , "/myrel/lib/public_key-1.6.1" }, {erlexec, "1.7.1" , "/myrel/lib/erlexec-1.7.1" }, {getopt, "0.8.2" , "/myrel/lib/getopt-0.8.2" }, {uuid, "1.7.3" , "/myrel/lib/uuid-1.7.3" }, {otherapp, "0.3.0" , "/myrel/lib/otherapp-0.3.0" }, {runtime_tools, "1.13" , "/myrel/lib/runtime_tools-1.13" }, {recon, "2.3.6" , "/myrel/lib/recon-2.3.6" }, {cowlib, "2.3.0" , "/myrel/lib/cowlib-2.3.0" }, {ssl, "9.0" , "/myrel/lib/ssl-9.0" }, {ranch, "1.5.0" , "/myrel/lib/ranch-1.5.0" }, {cowboy, "2.4.0" , "/myrel/lib/cowboy-2.4.0" }, {bbmustache, "1.5.0" , "/myrel/lib/bbmustache-1.5.0" }, {myapp, "0.3.5" , "/myrel/lib/myapp-0.3.5" }, {xnet, "0.2.0" , "/myrel/lib/xnet-0.2.0" }, {jsone, "1.4.6" , "/myrel/lib/jsone-1.4.6" }, {xweb, "0.3.5" , "/myrel/lib/xweb-0.3.5" }, {xapp, "0.2.0" , "/myrel/lib/xapp-0.2.0" }], status = permanent}, #release{name = "myrel" ,vsn = "0.3.3" ,erts_vsn = "10.0.3" , libs = [{kernel, "6.0" , "/myrel/lib/kernel-6.0" }, {stdlib, "3.5.1" , "/myrel/lib/stdlib-3.5.1" }, {sasl, "3.2" , "/myrel/lib/sasl-3.2" }, {gproc, "0.8.0" , "/myrel/lib/gproc-0.8.0" }, {consult_store, "0.1.0" , "/myrel/lib/consult_store-0.1.0" }, {crypto, "4.3" , "/myrel/lib/crypto-4.3" }, {quickrand, "1.7.3" , "/myrel/lib/quickrand-1.7.3" }, {erlexec, "1.7.1" , "/myrel/lib/erlexec-1.7.1" }, {getopt, "0.8.2" , "/myrel/lib/getopt-0.8.2" }, {uuid, "1.7.3" , "/myrel/lib/uuid-1.7.3" }, {otherapp, "0.3.0" , "/myrel/lib/otherapp-0.3.0" }, {runtime_tools, "1.13" , "/myrel/lib/runtime_tools-1.13" }, {recon, "2.3.6" , "/myrel/lib/recon-2.3.6" }, {cowlib, "2.3.0" , "/myrel/lib/cowlib-2.3.0" }, {asn1, "5.0.6" , "/myrel/lib/asn1-5.0.6" }, {public_key, "1.6.1" , "/myrel/lib/public_key-1.6.1" }, {ssl, "9.0" , "/myrel/lib/ssl-9.0" }, {ranch, "1.5.0" , "/myrel/lib/ranch-1.5.0" }, {cowboy, "2.4.0" , "/myrel/lib/cowboy-2.4.0" }, {bbmustache, "1.5.0" , "/myrel/lib/bbmustache-1.5.0" }, {myapp, "0.2.0" , "/myrel/lib/myapp-0.2.0" }, {xnet, "0.2.0" , "/myrel/lib/xnet-0.2.0" }, {jsone, "1.4.6" , "/myrel/lib/jsone-1.4.6" }, {xweb, "0.3.3" , "/myrel/lib/xweb-0.3.3" }, {xapp, "0.2.0" , "/myrel/lib/xapp-0.2.0" }], status = old}, #release{name = "myrel" ,vsn = "0.3.2" ,erts_vsn = "10.0.3" , libs = [{kernel, "6.0" , "/myrel/lib/kernel-6.0" }, {stdlib, "3.5.1" , "/myrel/lib/stdlib-3.5.1" }, {sasl, "3.2" , "/myrel/lib/sasl-3.2" }, {gproc, "0.8.0" , "/myrel/lib/gproc-0.8.0" }, {consult_store, "0.1.0" , "/myrel/lib/consult_store-0.1.0" }, {crypto, "4.3" , "/myrel/lib/crypto-4.3" }, {quickrand, "1.7.3" , "/myrel/lib/quickrand-1.7.3" }, {erlexec, "1.7.1" , "/myrel/lib/erlexec-1.7.1" }, {getopt, "0.8.2" , "/myrel/lib/getopt-0.8.2" }, {uuid, "1.7.3" , "/myrel/lib/uuid-1.7.3" }, {otherapp, "0.3.0" , "/myrel/lib/otherapp-0.3.0" }, {runtime_tools, "1.13" , "/myrel/lib/runtime_tools-1.13" }, {recon, "2.3.6" , "/myrel/lib/recon-2.3.6" }, {cowlib, "2.3.0" , "/myrel/lib/cowlib-2.3.0" }, {asn1, "5.0.6" , "/myrel/lib/asn1-5.0.6" }, {public_key, "1.6.1" , "/myrel/lib/public_key-1.6.1" }, {ssl, "9.0" , "/myrel/lib/ssl-9.0" }, {ranch, "1.5.0" , "/myrel/lib/ranch-1.5.0" }, {cowboy, "2.4.0" , "/myrel/lib/cowboy-2.4.0" }, {bbmustache, "1.5.0" , "/myrel/lib/bbmustache-1.5.0" }, {myapp, "0.2.0" , "/myrel/lib/myapp-0.2.0" }, {xnet, "0.2.0" , "/myrel/lib/xnet-0.2.0" }, {jsone, "1.4.6" , "/myrel/lib/jsone-1.4.6" }, {xweb, "0.3.2" , "/myrel/lib/xweb-0.3.2" }, {xapp, "0.2.0" , "/myrel/lib/xapp-0.2.0" }], status = old}, #release{name = "myrel" ,vsn = "0.3.1" ,erts_vsn = "10.0.3" , libs = [{kernel, "6.0" , "/myrel/lib/kernel-6.0" }, {stdlib, "3.5.1" , "/myrel/lib/stdlib-3.5.1" }, {sasl, "3.2" , "/myrel/lib/sasl-3.2" }, {gproc, "0.8.0" , "/myrel/lib/gproc-0.8.0" }, {consult_store, "0.1.0" , "/myrel/lib/consult_store-0.1.0" }, {crypto, "4.3" , "/myrel/lib/crypto-4.3" }, {quickrand, "1.7.3" , "/myrel/lib/quickrand-1.7.3" }, {erlexec, "1.7.1" , "/myrel/lib/erlexec-1.7.1" }, {getopt, "0.8.2" , "/myrel/lib/getopt-0.8.2" }, {uuid, "1.7.3" , "/myrel/lib/uuid-1.7.3" }, {otherapp, "0.3.0" , "/myrel/lib/otherapp-0.3.0" }, {runtime_tools, "1.13" , "/myrel/lib/runtime_tools-1.13" }, {recon, "2.3.6" , "/myrel/lib/recon-2.3.6" }, {cowlib, "2.3.0" , "/myrel/lib/cowlib-2.3.0" }, {asn1, "5.0.6" , "/myrel/lib/asn1-5.0.6" }, {public_key, "1.6.1" , "/myrel/lib/public_key-1.6.1" }, {ssl, "9.0" , "/myrel/lib/ssl-9.0" }, {ranch, "1.5.0" , "/myrel/lib/ranch-1.5.0" }, {cowboy, "2.4.0" , "/myrel/lib/cowboy-2.4.0" }, {bbmustache, "1.5.0" , "/myrel/lib/bbmustache-1.5.0" }, {myapp, "0.2.0" , "/myrel/lib/myapp-0.2.0" }, {xnet, "0.2.0" , "/myrel/lib/xnet-0.2.0" }, {jsone, "1.4.6" , "/myrel/lib/jsone-1.4.6" }, {xweb, "0.3.1" , "/myrel/lib/xweb-0.3.1" }, {xapp, "0.2.0" , "/myrel/lib/xapp-0.2.0" }], status = old}, #release{name = "myrel" ,vsn = "0.2.0" ,erts_vsn = "10.0.3" , libs = [{kernel, "6.0" , "./lib/kernel-6.0" }, {stdlib, "3.5.1" , "./lib/stdlib-3.5.1" }, {sasl, "3.2" , "./lib/sasl-3.2" }, {gproc, "0.8.0" , "./lib/gproc-0.8.0" }, {consult_store, "0.1.0" , "./lib/consult_store-0.1.0" }, {crypto, "4.3" , "./lib/crypto-4.3" }, {quickrand, "1.7.3" , "./lib/quickrand-1.7.3" }, {erlexec, "1.7.1" , "./lib/erlexec-1.7.1" }, {getopt, "0.8.2" , "./lib/getopt-0.8.2" }, {getopt, "0.8.2" , "./lib/getopt-0.8.2" }, {uuid, "1.7.3" , "./lib/uuid-1.7.3" }, {otherapp, "0.3.0" , "./lib/otherapp-0.3.0" }, {runtime_tools, "1.13" , "./lib/runtime_tools-1.13" }, {recon, "2.3.6" , "./lib/recon-2.3.6" }, {cowlib, "2.3.0" , "./lib/cowlib-2.3.0" }, {asn1, "5.0.6" , "./lib/asn1-5.0.6" }, {public_key, "1.6.1" , "./lib/public_key-1.6.1" }, {ssl, "9.0" , "./lib/ssl-9.0" }, {ranch, "1.5.0" , "./lib/ranch-1.5.0" }, {cowboy, "2.4.0" , "./lib/cowboy-2.4.0" }, {bbmustache, "1.5.0" , "./lib/bbmustache-1.5.0" }, {myapp, "0.2.0" , "./lib/myapp-0.2.0" }, {xnet, "0.2.0" , "./lib/xnet-0.2.0" }, {jsone, "1.4.6" , "./lib/jsone-1.4.6" }, {xweb, "0.2.0" , "./lib/xweb-0.2.0" }, {xapp, "0.2.0" , "./lib/xapp-0.2.0" }], status = old}], timer = undefined, start_prg = {no_check, "/myrel/bin/start" }, masters = false ,client_dir = false ,static_emulator = false , pre_sync_nodes = []} ok So interestingly, only the first release of all (0.2.0) has relative paths. All of the other ones have their paths expanded to absolute when unpacked by the system. I guess that would contribute to the problem I had.

          People

          • Assignee:
            siri Siri Hansen
            Reporter:
            ferd ferd
          • Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

            • Created:
              Updated:

              Development