Warning: long mail.

On 12/23/2014 3:53 PM, Mic Bowman wrote:
Figuring out how to make an easily installable opensim package (and package manager) seems like a better use of the time in the long run.

I still think that the dispatcher should go to core, but let me switch to this other issue: package manager.I really need one, so I took some time to look at what we already have, and see what's missing.We're much closer than I thought.

It looks like the configuration code is already accounting for the existence of .ini files under
addon-modules/*/config/*.ini
(This comes from the last line in OpenSimDefaults.ini)

Great.

---

Unfortunately,dlls are still assumed to be all in bin itself, which is clumsy when we start using 3rd party modules.There's an easy fix for this. Mono addins accounts for the specification of more folders to look for dlls [1]. Specifically, if we add a file .addins in bin with this:

<Addins>
     <Directory include-subdirs="true">addon-modules</Directory>
</Addins>

This will make mono addins look for dlls [also] in the addon-modules folder and subfolders, which is great for separating core from 3rd party code.(It works too, I tested it)

Unfortunately, it doesn't solve the whole thing, and the next point subsumes this one.

---

That doesn't solve the whole thing, because many times the region modules depend on external libraries that also need to be loaded by the .Net runtime. .Net accounts for the specification of additional directories under the directory where the .exe is [2]. If we add this in OpenSim.exe.config, the assemblies in the privatePath will be loaded:

  <runtime>
    <loadFromRemoteSources enabled="true" />
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
       <probing privatePath="addon-modules/MyPackage/bin"/>
    </assemblyBinding>
    <gcConcurrent enabled="true" />
    <gcServer enabled="true" />
  </runtime>

Unfortunately, .Net doesn't seem to understand wild cards in the <probing> element, so the installation procedure will need to edit this <probing> element and add the new directory explicitly to the privatePath, with semi-colon in between, which is not very nice. But that's Windows philosophy, I guess...

In any case, I tested this, and if we set this privatePath properly, both mono addins ans .Net itself will load assemblies from those paths, so both the region modules and their dependent dlls will be loaded.

---

Once the assembly path is in place, it will be straightforward to define OpenSim packages that are are laid out like this:

MyPackage/
  bin/
    dlls
  config/
    one or more .ini
  resources/
    module-specific stuff can go here

And then the package installer will simply place this package under bin/addon-modules as is.

Optionally, packages may include the source code too, so a src directory. That one would need to be treated in a special way, and placed under ../addon-modules/MyPackage

---

Now, a more difficult problem is versioning, and I don't have any great solution for it, other than: if a 3rd-party dll loading crashes your opensim, you need to uninstall it and search for a compatible version.

A slightly better approach would be to look for the AssemblyVersion information of the 3rd party module, and check that it is the same as OpenSim.exe's, and abort the installation when it isn't.

---

Any comments on any of this? I'd like to get started, because I really need this.

(There's also packages for Robust, but let's start with packages for the simulator, which is already half-way there.)

----
[1] https://github.com/mono/mono-addins/wiki/Add-in-Discovery

[2] http://msdn.microsoft.com/en-us/library/823z9h8w.aspx

_______________________________________________
Opensim-dev mailing list
[email protected]
http://opensimulator.org/cgi-bin/mailman/listinfo/opensim-dev

Reply via email to