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