This site is deprecated; docs have moved to docs.inspircd.org!

Difference between revisions of "Historical:Development/ModuleManager"

From the makers of InspIRCd.
Jump to: navigation, search
(Initial idea dump)
 
m (Protected "dev/ModuleManager": The world is an evil place. [edit=sysop:move=sysop])
(No difference)

Revision as of 00:06, 13 July 2008

Development Development Material - Information posted here is for developer reference only. This material is subject to possible change and will be technical in nature.


Module Manager

Introduction

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.

Benefits

  • 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

Module Website

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.

Example Workflow

[[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
...