Alpine Configuration Framework Design
Alpine Configuration Framework
The Alpine Configuration Framework (ACF) is a mvc-style application for configuring an Alpine device. The primary focus is for a web interface - ACF's main goal is to be a light-weight MVC "webmin".
Why Haserl + Lua
Other competitors in the arena were Webmin, Ruby on Rails, PHP with templates.
A full webmin (Perl), RoR or PHP implementation each require several MB of installed code, and can have very slow startup times, especially when used in "cgi" mode. After evaluating many options, we found that Lua has the following advantages:
- It is small (typically ~200KB of compiled code)
- It compiles and runs much faster than PHP, Perl or Ruby
- It provides a "normal" scripting language with features similar to PHP, perl, java, awk, etc.
Haserl + Lua provides a 'good enough' toolset to build a full-featured web application.
Why ACF is MVC
The MVC design pattern is used to separate presentation information from control logic. By MVC we mean:
- Model - code that reads / writes a config file, starts / stops daemons, or does other work modifying the router.
- View - code that formats data for output
- Controller - code that glues the two together
Note the lack of words like: HTML, XML, OO, AJAX, etc. The purpose of ACF's MVC is simply to separate the configuration logic from the presentation of the output.
The flow of a single transaction is:
start -> execute requested function in controller, optionally reading/writing a file using functions in the model -> execute the view to format the output -> end
Every transaction follows this pattern. For ACF developers, the focus should be on getting a model that does a proper job of abstracting the config file into useable entities and then building a controller that presents useable "actions" based on the model. The presentation layer should be last on the priority list.
For good background information on what ACF attempts to do, please see Terence Parr's paper "Enforcing Strict Model-View Separation in Template Engines" at http://www.cs.usfcs.edu or the local copy of the pdf.
ACF Developer's Guides
- mvc.lua reference - mvc.lua is the core of ACF
- mvc.lua example - build a simple (command-line) application
- acf www-controller reference - ACF www application functions
- acf www-controller example - webify the above examples
- ACF_how_to_write - Step by step howto for writing acfs
- ACF core principles - Things that are standard across the application
- LPOSIX - Documentation for the Lua Posix functions
- ACF Libraries - Document the libraries and common functions
- Writing ACF Views - Guide for writing a view
- Writing ACF Controllers - Guide for writing a controller
- Writing ACF Models - Guide for writing a model
ACF Layout
ACF has support for multiple skins.
Only a few skins are available. Feel free to contribute in programming css-stylesheets for ACF.
Howto contribute
First download ACF using svn or installing available acf's using apk_add.
Easiest is if you download latest Alpine ISO, boot a box on that and then run 'setup-alpine' and 'setup-webconf -a' that way you get a running environment fast and easy!
Some example skins are available
- /usr/share/acf/www/skins/ice/
- /usr/share/acf/www/skins/snow/
Make a new skin-folder
mkdir /usr/share/acf/www/skins/myskin
Create a css file called as the folder.
touch /usr/share/acf/www/skins/myskin/myskin.css
Now you can start editing your myskin.css.
If you have ACF running on a computer, you can browse to this ACF-page and switch to your knew skin (called myskin) and see the results of your changes.
Pack your myskin-folder, containing your css-file (and images, if there is any).
Send this patch to acf@lists.alpinelinux.org (Note: Don't forget to subscribe before sending your patch)
ACF Modules
Networking
Networking related modules.
DHCP server
Status: | Ready for betatest |
Summary: | Configure isc-dhcp. |
- Edit global settings
- Edit subnets
- Generate config-files
Firewall
Status: | Ready for betatest |
Summary: | Configure shorewall. |
- Show program status
- Guided configuration
- Expert configuration
- Show logfile
NTPD
Status: | Ready for betatest |
Summary: | Configure timeserver openntpd. |
- Show program status
- Guided configuration
- Expert configuration
- Show logfile
OpenVPN
Status: | Ready for alphatest |
Summary: | Configure timeserver openntpd. |
- Show available configs
- Show config-details
- Guided configuration ToDo
- Edit config in expert mode
- Show certificate information ToDo
- Show logfile
DNS
Status: | Work in progress |
Summary: | Configure tinydns. |
ToDo: | Caching/Hosting/for both Internet and Inside firewall nets |
- View current DNS-configuration/information
- Edit config-files
Fetchmail
Status: | Work in progress |
Summary: | fetchmail configuration/Relay host/store and forward. |
- Show program status
- Guided configuration
- Expert configuration
Applications
Application related modules
Web Proxy
Status: | Ready for betatest |
Summary: | Configure squid. |
- Show program status
- Guided configuration
Content Filter
Status: | Ready for betatest |
Summary: | Configure dansguardian. |
- Show program status
- Guided configuration
Snort
Status: | Ready for betatest |
Summary: | Configure snort. |
ToDo: | Figure out what acf-snort needs to do more. |
- Show program status
- Show alert-list
- Expert configuration
System
System/Other related modules
Interfaces
Status: | Work in progress |
Summary: | Local interface management |
- Show configured interfaces
- Edit/delete interfaces
- Add new interfaces
LBU
Status: | Ready for betatest |
Summary: | Saves your settings to floppy/usb/other media. |
- Show program status
- Show unsaved changes
- Guided configuration
- Expert configuration
- Commit/Save changes to media
General healt
Status: | Ready for betatest |
Summary: | Show status on your running system. |
- Show system status
- Show storage status
- Show network status
- Show modules status
- Show proc status
System logging
Status: | Ready for betatest |
Summary: | Configure syslog. |
- Show program status
- Guided configuration
- Expert configuration
Logfiles
Status: | Ready for betatest |
Summary: | View/Delete/Download logfiles. |
- Delete logfiles
- View logfiles
- Download logfiles
Skins
Status: | Ready for use |
Summary: | Switch skin. |
- Switch skin
DevTools
DevTools is a (set of) ACF(s) that could come in handy when developing ACF.
SVN status
Status: | Ready for use |
Summary: | Different information/functions related to the SVN-tree |
- svn info (Shows overview of the svn-tree on the svn-server)
- svn update (Fetch all available updates)
- svn diff (Shows difference on your computer and on svn-server)
- svn status (Shows whats changed since last 'svn update')
- svn log (Shows the changelog 1week back in time)
ToDo
Still not started modules.
Routing
This is for remote/multi box routing, bgp...etc
VPN
Needs to be split into an administrative end for letting people connect to you(rogue warriors,personal laptop size connectivity) and VPN connectivity to other sites(remote office or location). These are to configured differently.
Dialup
Start/Stop Dialup connection
Dialup/PPPoE
Configure Dialup/PPP/PPPoE connectivity. Maybe other Internet connections that aren't ethernet-which is Interfaces
Source Manager
Way to change the /etc/apk/apk.conf
Package Manager
Way to say what to upgrade-install-remove...apk_*
Password Manager
Local password changer
Diagnostic
Stats/Resource use/maybe graphs-rrd