This site is deprecated; docs have moved to docs.inspircd.org!
Difference between revisions of "Historical:Development/ModuleManager"
(Initial idea dump)
m (Protected "dev/ModuleManager": The world is an evil place. [edit=sysop:move=sysop])
Revision as of 00:06, 13 July 2008
Currently, almost all modules of use are maintained by us and included in the distribution; as of writing, there are 135 in 1.2, and another 19 extra. Many of these modules are for specific setups or uses, or are of limited use to most people. Yet, with the exception of the modules in extra, all 135 are being compiled and installed with every copy of insp - wasting time (compiling) and space. Further, it is difficult for 3rd parties to develop and release modules to the public, as there is no proper place to distribute them (the 3rd party svn is nearly unmaintained), and they will end up difficult for users to find and install.
My proposal is that we introduce a 'module manager' to inspircd and the inspircd website, based on the concepts of modern package management systems. Adding a database of modules on the website, both official (but not distributed) and unofficial, would allow users to find them much more easily and encourage 3rd party development. This could also track version compatibility with modules, dependencies, etc. We could move all non-mainstream modules in the distribution here, where users could easily get them if desired but would not be forced to build. In addition to the searchable website of modules, we could add a script to the inspircd distribution capable of downloading and installing modules from the website and tracking their dependencies.
- Smaller distribution and faster compiles by not including uncommon modules
- Encourages 3rd party module development and use
- Official (but not bundled) and unofficial modules can be maintained outside of the release cycle
- Provides a repository of safe (non-malicious) modules for all inspircd users
- Vastly simplifies monitoring 3rd party or non-distributed modules for updates
- Simplifies the management of dependencies among modules
- Less modules that must be maintained officially
The module website would allow developers to upload modules into a public, searchable collection of them that would integrate with the management of modules in inspircd. This website could track version compatibility, dependencies, and configuration options as well as user comments and ratings. Modules uploaded by third parties would probably be subject to approval by a developer before being included. This step alone will vastly increase interest in 3rd party module development.
Module Manager Script
To facilitate the website, especially if some official modules are moved there from the distribution, a fairly simple perl script could be distributed with inspircd. This script should allow users to download modules included on the website, manage their dependencies (both external and inter-module), and handle updates (a command to check for and install the latest version of all installed modules). Automated addition and removal of configuration sections related to modules when they are installed or uninstalled would also be beneficial.
[[email protected]]$ ./module install m_mysql m_mysql depends on: m_sqlutils, m_somethingelse Do you want to install these modules? [y/n] y Installing m_sqlutils 1.2.2 Downloading... Done Verifying... Done Installing... Done Adding Configuration... Done Installing m_somethingelse 1.2.81 Downloading... Done Verifying... Done Installing... Done Installing m_mysql 1.2.0 Downloading... Done Verifying... Done Installing... Done Adding Configuration... Done Installed m_sqlutils (1.2.2), m_somethingelse (1.2.81), m_mysql (1.2.0) Run 'make install' to build. [[email protected]]$ make install
[[email protected]]$ ./module install m_nope Error: m_nope does not support your version of inspircd (1.2.0)! See http://modules.inspircd.org/module/m_nope for more information. [[email protected]]$
[[email protected]]$ ./module update Checking for updates... Updates found! m_mysql 1.2.1 (1.2.0) m_sqlutils 1.3.0 (1.2.2) m_exploit 1.2.1 (1.2.0) - CRITICAL Do you want to install these updates? [y/n] y ...