Alpine Configuration Framework Design: Difference between revisions

From Alpine Linux
Line 49: Line 49:
# [[LPOSIX]] Documentation for the Lua Posix functions
# [[LPOSIX]] Documentation for the Lua Posix functions
# [[ACF Libraries ]] Document the libraries and common functions
# [[ACF Libraries ]] Document the libraries and common functions
= ACF Layout =
ACF has support for multiple skins.<BR>
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.<BR>
Some example skins are available
* $PATH/www/ice/
* $PATH/www/snow/
Make a new skin-folder
mkdir $PATH/www/myskin
Create a css file called as the folder.
touch $PATH/www/myskin/myskin.css
Now you can start editing your myskin.css.<BR>
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 chagens.
Pack your myskin-folder, containing your css-file (and images, if there is any).<BR>
Send this patch to acf@lists.alpinelinux.org


= ACF Modules =
= ACF Modules =


== Networking ==
== Networking ==
Networking related modules.
=== DHCP server ===
{|
| '''Status:''' || Ready for betatest
|-
| '''Summary:''' || Configure '''isc-dhcp'''.
|}
* Edit global settings
* Edit subnets
* Generate config-files
=== Firewall ===
=== Firewall ===
based on shorewall. Will need an advanced and simple interface
{|
| '''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
 


=== Routing ===
== System ==
this is for remote/multi box routing, bgp...etc
System/Other related modules


=== Interfaces ===
=== Interfaces ===
Local interface management-local routing taken care of here
{|
| '''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


=== DNS ===
=== Skins ===
Caching/Hosting/for both Internet and Inside firewall nets
{|
| '''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)


=== DHCP ===
Creation and configuration of a config for the isc-dhcp daemon. Allow for several subnets to be configured independantly.


== Proxies ==
== ToDo ==
=== Web Proxies ===
Still not started modules.
Squid
 
=== Web Filtering ===
=== Routing ===
Dansguardian
This is for remote/multi box routing, bgp...etc
=== Mail ===
May Include fetchmail configuration/Relay host/store and forward


== Connectivity ==
=== VPN ===
=== 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.
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.
Line 86: Line 272:
Configure Dialup/PPP/PPPoE connectivity. Maybe other Internet connections that aren't ethernet-which is Interfaces
Configure Dialup/PPP/PPPoE connectivity. Maybe other Internet connections that aren't ethernet-which is Interfaces


== Backup/Packages ==
=== Backup ===
Way to have save things not in /etc and just kickoff a lbu commit
=== Source Manager ===
=== Source Manager ===
Way to change the /etc/apk/apk.conf
Way to change the /etc/apk/apk.conf
=== Package Manager ===
=== Package Manager ===
Way to say what to upgrade-install-remove...apk_*
Way to say what to upgrade-install-remove...apk_*


== General ==
=== Password Manager ===
=== Password Manager ===
Local password changer
Local password changer
=== Logfiles ===
* General
** The logfiles-model decides which folders should be listed.<BR>Based on this list files could be deleted/view/downloaded.
** Files are listed recursively based on the url given in the logfiles-model.
** By manually entering a filename that doesn't match the logfiles-list you get a error message (wrong files could not be deleted/viewed/...)
* Delete
** File is blocked for removal if the file is in use.<BR>'fuser ''filename''' checks if file is in use at the moment.
* View
** Files could be blocked for viewing if this was programmed in the logfiles-model.<BR>Preparations has been done, but no rules has been defined if some file/files are blocked for viewing.
* Download
** Logfiles can be downloaded.


=== Diagnostic ===
=== Diagnostic ===
Stats/Resource use/maybe graphs-rrd
Stats/Resource use/maybe graphs-rrd

Revision as of 19:38, 17 February 2008

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

  1. mvc.lua reference - mvc.lua is the core of ACF
  2. mvc.lua example - build a simple (command-line) application
  3. acf www-controller reference - ACF www application functions
  4. acf www-controller example - webify the above examples
  5. ACF_how_to_write - Step by step howto for writing acfs
  1. ACF core principles (Things that are standard across the application)
  2. LPOSIX Documentation for the Lua Posix functions
  3. ACF Libraries Document the libraries and common functions

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.
Some example skins are available

  • $PATH/www/ice/
  • $PATH/www/snow/

Make a new skin-folder

mkdir $PATH/www/myskin

Create a css file called as the folder.

touch $PATH/www/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 chagens.

Pack your myskin-folder, containing your css-file (and images, if there is any).
Send this patch to acf@lists.alpinelinux.org


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