tech-install archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

reworking sysinst



Extending sysinst, the NetBSD system installer, or changing the
installation process, e.g. to install custom software, is quite a
complex task since in sysinst everything down to the displayed messages
is hardcoded in C.  It is a monolithic installer, without the
possibility to change the installation process or add extensions in a
modular way.

I have started to rework sysinst (based on software we use at my company
since several years) with the following goals:

- Provide an installer that is compatible with what we have now, i.e. no
changes in the installation process and no surprises.

- Make it easy to change or extend the installation process, e.g. to
install pkgsrc packages during the install process, and maybe even
configure the installed software.

- Modularize sysinst.  Not only changing the installation process should
be easy, but it should also be easy to add a module, e.g. to customize
the system after the standard installation has run.

To achieve these goals, I broke up sysinst in two parts:

- A "backend" part written in C, that contains the current installation
functionality, the messages and menu system.  This is more or less the
current sysinst binary with the addition of a Lua interpreter.  The core
functionality of sysinst is exposed to Lua by means of a C/Lua binding.

- A "frontend" part, written in Lua, that drives the installation
process.  The Lua script uses functionality provided by the "backend" to
do it's job.

The communication between the "frontend" and "backend" is
bi-directional:  The Lua scripts calls functions written in C, but the
backend functions in C can also call Lua functions, e.g. to let a Lua
script take over part of a certain installation step.

For the time being, most of the Lua specific code is in #ifdef
LUA/#endif brackets and there is no Lua script being put on the install
media.

The following parts of the source tree need changes

msgc(1): A function msg_printf() is added to print a raw message,
without the need to define it in the message files.  (Lua uses it's own
(unfinished) mechanism to do i18n.)

sysinst: Addition of a Lua interpreter, initialize it, provide bindings
to sysinst functions, call-back into Lua code

ramdisk kernels: The crunched binary needs to be linked against the Lua
library, the default Lua installer script needs to be put on the ramdisk.

I have an initial diff against -current as a starting point, it survived
a full release build on i386 but it will break other architectures due
to the Lua library not being linked to the ramdisk binary.

The diff is at http://www.netbsd.org/~mbalmer/diffs/, it's versioned and
I will update it from time to time.

Contributions to this project are very welcome!

- Marc Balmer

PS:  sysinst is also the topic of some proposed projects, maybe these
can easier be handled when sysinst has Lua support:

http://wiki.netbsd.org/projects/project/sysinst_pkgs/
http://wiki.netbsd.org/projects/project/sysinst-enhancements/
http://wiki.netbsd.org/projects/project/sysinst-xinterface/



Home | Main Index | Thread Index | Old Index