<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.alpinelinux.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fab</id>
	<title>Alpine Linux - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.alpinelinux.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Fab"/>
	<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/wiki/Special:Contributions/Fab"/>
	<updated>2026-05-02T17:50:31Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Fab&amp;diff=18564</id>
		<title>User:Fab</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Fab&amp;diff=18564"/>
		<updated>2021-01-12T19:09:09Z</updated>

		<summary type="html">&lt;p&gt;Fab: Update xmpp&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My Name is Fabian Affolter and I&#039;m living in Berne/Switzerland. One of my passions is free software and open source. I&#039;m a long time contributor to various free and open source software projects. A big bunch of my spare time is spent on the [https://fedoraproject.org Fedora Project] and [https://home-assistant.io Home Assistant].  &lt;br /&gt;
&lt;br /&gt;
By the way, my first system was a Amiga 2000 but this is a long long time ago ;-). &lt;br /&gt;
&lt;br /&gt;
My area of interest are computer aided design (CAD), computer algebra system (CAS), provisioning, automatic configuration management, version control systems, software packaging and microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Apart from spending time at the computer, I like to read, to listen to music and to hike in the Swiss mountains.&lt;br /&gt;
&lt;br /&gt;
== more personal stuff ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039; Location&#039;&#039;&#039;:  [http://en.wikipedia.org/wiki/Berne Berne]  [http://de.wikipedia.org/wiki/Bern Bern], [http://en.wikipedia.org/wiki/Switzerland Switzerland] [http://de.wikipedia.org/wiki/Schweiz Schweiz]&lt;br /&gt;
* &#039;&#039;&#039; Time zone&#039;&#039;&#039; :  UTC +01:00 (CET) or UTC +02:00 (CEST)&lt;br /&gt;
* &#039;&#039;&#039; Languages&#039;&#039;&#039; :  German (it&#039;s more Swiss German), English, and French&lt;br /&gt;
* &#039;&#039;&#039; Profession&#039;&#039;&#039; :  Senior Engineer, B.Sc. [http://www.ti.bfh.ch/en/bachelor/mechanical.html ME] and [http://www.ti.bfh.ch/en/bachelor/computer_science.html CS] [http://www.ti.bfh.ch/ Berne University of Applied Sciences] - Engineering and Information Technology&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Postal address&#039;&#039;&#039; :&lt;br /&gt;
::ask for the street&lt;br /&gt;
::CH-3000 Berne&lt;br /&gt;
::Switzerland&lt;br /&gt;
* &#039;&#039;&#039;Blog&#039;&#039;&#039; : [http://blog.fabian-affolter.ch/ My blog] (be aware...some parts are in german)&lt;br /&gt;
* &#039;&#039;&#039;Websites&#039;&#039;&#039;: [http://fabian-affolter.ch/ fabian-affolter.ch]&lt;br /&gt;
* &#039;&#039;&#039;Email&#039;&#039;&#039;:  [mailto:fabian%affolter-engineering%2ench fabian AT affolter-engineering DOT ch]&lt;br /&gt;
* &#039;&#039;&#039;GPG/PGP&#039;&#039;&#039; : [http://pgp.mit.edu:11371/pks/lookup?op=get&amp;amp;search=0x36A4397F 0x36A4397F] &lt;br /&gt;
* &#039;&#039;&#039;Jabber&#039;&#039;&#039; : fab AT jabber DOT dk&lt;br /&gt;
* &#039;&#039;&#039;IRC&#039;&#039;&#039; : faffolter (or fabian_a) on FreeNode&lt;br /&gt;
&lt;br /&gt;
== Misc ==&lt;br /&gt;
* [[Alpine_Security_and_Rescue|Alpine Security Flavor]]&lt;br /&gt;
* [[User:Fab/Personal_aports_repo|Personal aport repo]]&lt;br /&gt;
* [[User:Fab/Stats|Stats]]&lt;br /&gt;
* [[User:Fab/Cleanup|Cleanup]]&lt;br /&gt;
* [[User:Fab/msg.alpinelinux.org|msg.alpinelinux.org]]&lt;br /&gt;
* [[User:Fab/Notifications|Notifications]]&lt;br /&gt;
&lt;br /&gt;
=== Configuration management ===&lt;br /&gt;
&lt;br /&gt;
* [[User:Fab/Ansible|Ansible]]&lt;br /&gt;
* [[User:Fab/Bcfg2|Bcfg2]]&lt;br /&gt;
* [[User:Fab/Salt|Salt]]&lt;br /&gt;
&lt;br /&gt;
=== Other docs ===&lt;br /&gt;
* [[User:Fab/Nodejs|Node.js]]&lt;br /&gt;
* [[User:Fab/Ocr|OCR]]&lt;br /&gt;
* [[User:Fab/Tryton|Tryton]]&lt;br /&gt;
* [[User:Fab/Metasploit|Metasploit]]&lt;br /&gt;
* [[User:Fab/Beeswarm|Beeswarm]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Include:Setup_your_system_and_account_for_building_packages&amp;diff=18323</id>
		<title>Include:Setup your system and account for building packages</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Include:Setup_your_system_and_account_for_building_packages&amp;diff=18323"/>
		<updated>2020-12-21T11:28:42Z</updated>

		<summary type="html">&lt;p&gt;Fab: Later visudo is used&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The {{Pkg|alpine-sdk}} is a metapackage that pulls in the most essential packages used to build new packages. Install those packages now: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add alpine-sdk sudo}}&lt;br /&gt;
&lt;br /&gt;
This would be a good time to create a normal user account for you to work in. (You weren&#039;t going to develop as root now, were you!) To create the user:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|adduser &amp;lt;yourusername&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
To make life easier later, it&#039;s a good idea to add this user to {{Path|/etc/sudoers}}. Append the line&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;yourusername&amp;gt;    ALL=(ALL) ALL&lt;br /&gt;
&lt;br /&gt;
using the command:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|visudo}}&lt;br /&gt;
&lt;br /&gt;
Now logout of the root account, and login as &amp;lt;yourusername&amp;gt;. From here on everything can be done in a normal user account, and operations that require superuser privileges can be done with sudo.&lt;br /&gt;
&lt;br /&gt;
The [[Aports_tree|aports tree]] is in git so before we clone the it, let&#039;s configure git.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|git config --global user.name &amp;quot;Your Full Name&amp;quot;&lt;br /&gt;
git config --global user.email &amp;quot;your@email.address&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
Read carefully [[Development using git]] to grasp basic Git operations and how to configure for sending email patches.&lt;br /&gt;
&lt;br /&gt;
Now we can clone the [[Aports_tree|aports tree]]. &lt;br /&gt;
&lt;br /&gt;
NOTE: You can also clone aports from our github https://github.com/alpinelinux/aports&lt;br /&gt;
&lt;br /&gt;
{{Cmd|git clone git://git.alpinelinux.org/aports}}&lt;br /&gt;
&lt;br /&gt;
Before we start creating or modifying [[APKBUILD_Reference|APKBUILD]] files, we need to setup abuild for our system and user. Edit the file {{Path|abuild.conf}} to your requirements:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sudo $EDITOR /etc/abuild.conf}}&lt;br /&gt;
&lt;br /&gt;
Most of the defaults can be left alone, unless you are developing for a custom platform, in which case the comments in the file should guide you. The one field to edit is PACKAGER, so that you can get credit (or blame) for packages you create.&lt;br /&gt;
&lt;br /&gt;
To use &#039;abuild -r&#039; command to install dependency packages automatically.&lt;br /&gt;
{{Cmd|sudo addgroup &amp;lt;yourusername&amp;gt; abuild}}&lt;br /&gt;
&lt;br /&gt;
We also need to prepare the location where the build process caches files when they are downloaded. By default this is {{Path|/var/cache/distfiles/}}. To create this directory and ensure that it is writeable, enter the following commands:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sudo mkdir -p /var/cache/distfiles&lt;br /&gt;
sudo chmod a+w /var/cache/distfiles}}&lt;br /&gt;
&lt;br /&gt;
As an alternative to the second command, you can add yourself to the abuild group:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sudo chgrp abuild /var/cache/distfiles&lt;br /&gt;
sudo chmod g+w /var/cache/distfiles}}&lt;br /&gt;
&lt;br /&gt;
{{Note|Remember to logout and login again for the group change to have effect.}}&lt;br /&gt;
&lt;br /&gt;
The last step is to configure the security keys with the [[Abuild-keygen|abuild-keygen]] script for [[Abuild|abuild]] with the command:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|abuild-keygen -a -i}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=17723</id>
		<title>Alpine Linux:Trivia</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=17723"/>
		<updated>2020-06-12T14:48:35Z</updated>

		<summary type="html">&lt;p&gt;Fab: /* Packages per release */ Update diagram&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains only irrelevant and unhelpful information and statistics about Alpine Linux. If you are going to prepare a talk about Alpine Linux, perhaps some information mentioned here can be used for the intro. &lt;br /&gt;
&lt;br /&gt;
= The first release =&lt;br /&gt;
* Archives going back to 1.1 are (currently) at http://ancient.alpinelinux.org &lt;br /&gt;
* First public mention of &amp;quot;Alpine Linux&amp;quot; is archived here: http://comments.gmane.org/gmane.linux.leaf.devel/1183 (2005)&lt;br /&gt;
* The first saved [[Release_Notes_for_Alpine_1.7.3|release notes]] were made for 1.7.3.&lt;br /&gt;
&lt;br /&gt;
= The name =&lt;br /&gt;
&amp;quot;Alpine&amp;quot; originally stood for &#039;&#039;&#039;A&#039;&#039;&#039; &#039;&#039;&#039;L&#039;&#039;&#039;inux &#039;&#039;&#039;P&#039;&#039;&#039;owered &#039;&#039;&#039;I&#039;&#039;&#039;ntegrated &#039;&#039;&#039;N&#039;&#039;&#039;etwork &#039;&#039;&#039;E&#039;&#039;&#039;ngine. The idea was that the distribution would be focused on networking, and be a tiny &amp;quot;engine&amp;quot; or framework, which larger systems could be built upon. Today, &amp;quot;Alpine&amp;quot; is nothing more than a name.&lt;br /&gt;
&lt;br /&gt;
= Who is working on Alpine Linux? =&lt;br /&gt;
&lt;br /&gt;
* Check the statistics of cgit, e. g. [http://git.alpinelinux.org/cgit/aports/stats/?period=y&amp;amp;ofs=50 aports]&lt;br /&gt;
&lt;br /&gt;
= Packages =&lt;br /&gt;
&lt;br /&gt;
* https://gitlab.alpinelinux.org/alpine/aports can give you a little insight&lt;br /&gt;
&lt;br /&gt;
== Packages per release ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Release&lt;br /&gt;
! Total&lt;br /&gt;
! normal&lt;br /&gt;
! dev&lt;br /&gt;
! doc&lt;br /&gt;
! libs&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.12&#039;&#039;&#039;&lt;br /&gt;
| 4832&lt;br /&gt;
| 3172&lt;br /&gt;
| 500&lt;br /&gt;
| 1073&lt;br /&gt;
| 87&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.11&#039;&#039;&#039;&lt;br /&gt;
| 5352&lt;br /&gt;
| 3430&lt;br /&gt;
| 620&lt;br /&gt;
| 1211&lt;br /&gt;
| 91&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.10&#039;&#039;&#039;&lt;br /&gt;
| 5669&lt;br /&gt;
| 3724&lt;br /&gt;
| 631&lt;br /&gt;
| 1224&lt;br /&gt;
| 90&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.9&#039;&#039;&#039;&lt;br /&gt;
| 5703&lt;br /&gt;
| 3721&lt;br /&gt;
| 652&lt;br /&gt;
| 1241&lt;br /&gt;
| 89&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.8&#039;&#039;&#039;&lt;br /&gt;
| 5674&lt;br /&gt;
| 3652&lt;br /&gt;
| 663&lt;br /&gt;
| 1272&lt;br /&gt;
| 87&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.7&#039;&#039;&#039;&lt;br /&gt;
| 5699&lt;br /&gt;
| 3629&lt;br /&gt;
| 683&lt;br /&gt;
| 1298&lt;br /&gt;
| 89&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.6&#039;&#039;&#039;&lt;br /&gt;
| 5548&lt;br /&gt;
| 3510&lt;br /&gt;
| 681&lt;br /&gt;
| 1271&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| 5643&lt;br /&gt;
| 3615&lt;br /&gt;
| 678&lt;br /&gt;
| 1264&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| 5231&lt;br /&gt;
| 3253&lt;br /&gt;
| 664&lt;br /&gt;
| 1235&lt;br /&gt;
| 79&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| 5314&lt;br /&gt;
| 3328&lt;br /&gt;
| 676&lt;br /&gt;
| 1239&lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| 5277&lt;br /&gt;
| 3343&lt;br /&gt;
| 684&lt;br /&gt;
| 1189&lt;br /&gt;
| 61&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| 4860&lt;br /&gt;
| 3075&lt;br /&gt;
| 620&lt;br /&gt;
| 1109&lt;br /&gt;
| 56&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| 4410&lt;br /&gt;
| 2752&lt;br /&gt;
| 578&lt;br /&gt;
| 1029&lt;br /&gt;
| 51&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.7&#039;&#039;&#039;&lt;br /&gt;
| 4205&lt;br /&gt;
| 2605&lt;br /&gt;
| 570&lt;br /&gt;
| 982&lt;br /&gt;
| 48&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.6&#039;&#039;&#039;&lt;br /&gt;
| 3918&lt;br /&gt;
| 2405&lt;br /&gt;
| 534&lt;br /&gt;
| 943&lt;br /&gt;
| 36&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.5&#039;&#039;&#039;&lt;br /&gt;
| 3676&lt;br /&gt;
| 2233&lt;br /&gt;
| 498&lt;br /&gt;
| 912&lt;br /&gt;
| 33&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.4&#039;&#039;&#039;&lt;br /&gt;
| 3376&lt;br /&gt;
| 2021&lt;br /&gt;
| 457&lt;br /&gt;
| 874&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| 3146&lt;br /&gt;
| 1866&lt;br /&gt;
| 435&lt;br /&gt;
| 827&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| 2608&lt;br /&gt;
| 1502&lt;br /&gt;
| 444&lt;br /&gt;
| 652&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| 2135&lt;br /&gt;
| 1222&lt;br /&gt;
| 365&lt;br /&gt;
| 547&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| 1983&lt;br /&gt;
| 1139&lt;br /&gt;
| 332&lt;br /&gt;
| 511&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.10&#039;&#039;&#039;&lt;br /&gt;
| 1639&lt;br /&gt;
| 918&lt;br /&gt;
| 282&lt;br /&gt;
| 438&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.9&#039;&#039;&#039;&lt;br /&gt;
| 958&lt;br /&gt;
| 549&lt;br /&gt;
| 139&lt;br /&gt;
| 269&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:202006-aports.png|center|Aports]]&lt;br /&gt;
&lt;br /&gt;
== Commit per year to aports ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2008 : 146&lt;br /&gt;
2009 : 3122&lt;br /&gt;
2010 : 3365&lt;br /&gt;
2011 : 5561&lt;br /&gt;
2012 : 5312&lt;br /&gt;
2013 : 6597&lt;br /&gt;
2014 : 5759&lt;br /&gt;
2015 : 7315&lt;br /&gt;
2016 : 9065&lt;br /&gt;
2017 : 11661&lt;br /&gt;
2018 : 9546&lt;br /&gt;
2019 : 18759&lt;br /&gt;
2020 : 10597 (so far)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;High score list&amp;quot; of committer to aports ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t get this the wrong way...those are just numbers. Every single contributions is making a difference.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 35479  Natanael Copa&lt;br /&gt;
  9036  Leo&lt;br /&gt;
  5382  Francesco Colista&lt;br /&gt;
  3699  Jakub Jirutka&lt;br /&gt;
  3429  Leonardo Arena&lt;br /&gt;
  3033  Carlo Landmeter&lt;br /&gt;
  2857  Timo Teräs&lt;br /&gt;
  2382  Fabian Affolter&lt;br /&gt;
  2145  Sören Tempel&lt;br /&gt;
  1971  William Pitcock&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== First commit to aports == &lt;br /&gt;
The first commit in git was made:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit 645531103b2ee8ef54d53a58eca3b52f7d3fb9ac&lt;br /&gt;
Author: Natanael Copa &amp;lt;ncopa@alpinelinux.org&amp;gt;&lt;br /&gt;
Date:   Sat Oct 18 09:16:29 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    added busybox&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=File:202006-aports.png&amp;diff=17722</id>
		<title>File:202006-aports.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=File:202006-aports.png&amp;diff=17722"/>
		<updated>2020-06-12T14:48:04Z</updated>

		<summary type="html">&lt;p&gt;Fab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=17721</id>
		<title>Alpine Linux:Trivia</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=17721"/>
		<updated>2020-06-12T09:53:56Z</updated>

		<summary type="html">&lt;p&gt;Fab: /* Commit per year to aports */ Update list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains only irrelevant and unhelpful information and statistics about Alpine Linux. If you are going to prepare a talk about Alpine Linux, perhaps some information mentioned here can be used for the intro. &lt;br /&gt;
&lt;br /&gt;
= The first release =&lt;br /&gt;
* Archives going back to 1.1 are (currently) at http://ancient.alpinelinux.org &lt;br /&gt;
* First public mention of &amp;quot;Alpine Linux&amp;quot; is archived here: http://comments.gmane.org/gmane.linux.leaf.devel/1183 (2005)&lt;br /&gt;
* The first saved [[Release_Notes_for_Alpine_1.7.3|release notes]] were made for 1.7.3.&lt;br /&gt;
&lt;br /&gt;
= The name =&lt;br /&gt;
&amp;quot;Alpine&amp;quot; originally stood for &#039;&#039;&#039;A&#039;&#039;&#039; &#039;&#039;&#039;L&#039;&#039;&#039;inux &#039;&#039;&#039;P&#039;&#039;&#039;owered &#039;&#039;&#039;I&#039;&#039;&#039;ntegrated &#039;&#039;&#039;N&#039;&#039;&#039;etwork &#039;&#039;&#039;E&#039;&#039;&#039;ngine. The idea was that the distribution would be focused on networking, and be a tiny &amp;quot;engine&amp;quot; or framework, which larger systems could be built upon. Today, &amp;quot;Alpine&amp;quot; is nothing more than a name.&lt;br /&gt;
&lt;br /&gt;
= Who is working on Alpine Linux? =&lt;br /&gt;
&lt;br /&gt;
* Check the statistics of cgit, e. g. [http://git.alpinelinux.org/cgit/aports/stats/?period=y&amp;amp;ofs=50 aports]&lt;br /&gt;
&lt;br /&gt;
= Packages =&lt;br /&gt;
&lt;br /&gt;
* https://gitlab.alpinelinux.org/alpine/aports can give you a little insight&lt;br /&gt;
&lt;br /&gt;
== Packages per release ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Release&lt;br /&gt;
! Total&lt;br /&gt;
! normal&lt;br /&gt;
! dev&lt;br /&gt;
! doc&lt;br /&gt;
! libs&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.12&#039;&#039;&#039;&lt;br /&gt;
| 4832&lt;br /&gt;
| 3172&lt;br /&gt;
| 500&lt;br /&gt;
| 1073&lt;br /&gt;
| 87&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.11&#039;&#039;&#039;&lt;br /&gt;
| 5352&lt;br /&gt;
| 3430&lt;br /&gt;
| 620&lt;br /&gt;
| 1211&lt;br /&gt;
| 91&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.10&#039;&#039;&#039;&lt;br /&gt;
| 5669&lt;br /&gt;
| 3724&lt;br /&gt;
| 631&lt;br /&gt;
| 1224&lt;br /&gt;
| 90&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.9&#039;&#039;&#039;&lt;br /&gt;
| 5703&lt;br /&gt;
| 3721&lt;br /&gt;
| 652&lt;br /&gt;
| 1241&lt;br /&gt;
| 89&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.8&#039;&#039;&#039;&lt;br /&gt;
| 5674&lt;br /&gt;
| 3652&lt;br /&gt;
| 663&lt;br /&gt;
| 1272&lt;br /&gt;
| 87&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.7&#039;&#039;&#039;&lt;br /&gt;
| 5699&lt;br /&gt;
| 3629&lt;br /&gt;
| 683&lt;br /&gt;
| 1298&lt;br /&gt;
| 89&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.6&#039;&#039;&#039;&lt;br /&gt;
| 5548&lt;br /&gt;
| 3510&lt;br /&gt;
| 681&lt;br /&gt;
| 1271&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| 5643&lt;br /&gt;
| 3615&lt;br /&gt;
| 678&lt;br /&gt;
| 1264&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| 5231&lt;br /&gt;
| 3253&lt;br /&gt;
| 664&lt;br /&gt;
| 1235&lt;br /&gt;
| 79&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| 5314&lt;br /&gt;
| 3328&lt;br /&gt;
| 676&lt;br /&gt;
| 1239&lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| 5277&lt;br /&gt;
| 3343&lt;br /&gt;
| 684&lt;br /&gt;
| 1189&lt;br /&gt;
| 61&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| 4860&lt;br /&gt;
| 3075&lt;br /&gt;
| 620&lt;br /&gt;
| 1109&lt;br /&gt;
| 56&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| 4410&lt;br /&gt;
| 2752&lt;br /&gt;
| 578&lt;br /&gt;
| 1029&lt;br /&gt;
| 51&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.7&#039;&#039;&#039;&lt;br /&gt;
| 4205&lt;br /&gt;
| 2605&lt;br /&gt;
| 570&lt;br /&gt;
| 982&lt;br /&gt;
| 48&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.6&#039;&#039;&#039;&lt;br /&gt;
| 3918&lt;br /&gt;
| 2405&lt;br /&gt;
| 534&lt;br /&gt;
| 943&lt;br /&gt;
| 36&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.5&#039;&#039;&#039;&lt;br /&gt;
| 3676&lt;br /&gt;
| 2233&lt;br /&gt;
| 498&lt;br /&gt;
| 912&lt;br /&gt;
| 33&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.4&#039;&#039;&#039;&lt;br /&gt;
| 3376&lt;br /&gt;
| 2021&lt;br /&gt;
| 457&lt;br /&gt;
| 874&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| 3146&lt;br /&gt;
| 1866&lt;br /&gt;
| 435&lt;br /&gt;
| 827&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| 2608&lt;br /&gt;
| 1502&lt;br /&gt;
| 444&lt;br /&gt;
| 652&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| 2135&lt;br /&gt;
| 1222&lt;br /&gt;
| 365&lt;br /&gt;
| 547&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| 1983&lt;br /&gt;
| 1139&lt;br /&gt;
| 332&lt;br /&gt;
| 511&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.10&#039;&#039;&#039;&lt;br /&gt;
| 1639&lt;br /&gt;
| 918&lt;br /&gt;
| 282&lt;br /&gt;
| 438&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.9&#039;&#039;&#039;&lt;br /&gt;
| 958&lt;br /&gt;
| 549&lt;br /&gt;
| 139&lt;br /&gt;
| 269&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:201806-aports.png|center|Aports]]&lt;br /&gt;
&lt;br /&gt;
== Commit per year to aports ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2008 : 146&lt;br /&gt;
2009 : 3122&lt;br /&gt;
2010 : 3365&lt;br /&gt;
2011 : 5561&lt;br /&gt;
2012 : 5312&lt;br /&gt;
2013 : 6597&lt;br /&gt;
2014 : 5759&lt;br /&gt;
2015 : 7315&lt;br /&gt;
2016 : 9065&lt;br /&gt;
2017 : 11661&lt;br /&gt;
2018 : 9546&lt;br /&gt;
2019 : 18759&lt;br /&gt;
2020 : 10597 (so far)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;High score list&amp;quot; of committer to aports ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t get this the wrong way...those are just numbers. Every single contributions is making a difference.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 35479  Natanael Copa&lt;br /&gt;
  9036  Leo&lt;br /&gt;
  5382  Francesco Colista&lt;br /&gt;
  3699  Jakub Jirutka&lt;br /&gt;
  3429  Leonardo Arena&lt;br /&gt;
  3033  Carlo Landmeter&lt;br /&gt;
  2857  Timo Teräs&lt;br /&gt;
  2382  Fabian Affolter&lt;br /&gt;
  2145  Sören Tempel&lt;br /&gt;
  1971  William Pitcock&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== First commit to aports == &lt;br /&gt;
The first commit in git was made:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit 645531103b2ee8ef54d53a58eca3b52f7d3fb9ac&lt;br /&gt;
Author: Natanael Copa &amp;lt;ncopa@alpinelinux.org&amp;gt;&lt;br /&gt;
Date:   Sat Oct 18 09:16:29 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    added busybox&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=17720</id>
		<title>Alpine Linux:Trivia</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=17720"/>
		<updated>2020-06-12T09:51:46Z</updated>

		<summary type="html">&lt;p&gt;Fab: /* &amp;quot;High score list&amp;quot; of committer to aports */ Update list&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains only irrelevant and unhelpful information and statistics about Alpine Linux. If you are going to prepare a talk about Alpine Linux, perhaps some information mentioned here can be used for the intro. &lt;br /&gt;
&lt;br /&gt;
= The first release =&lt;br /&gt;
* Archives going back to 1.1 are (currently) at http://ancient.alpinelinux.org &lt;br /&gt;
* First public mention of &amp;quot;Alpine Linux&amp;quot; is archived here: http://comments.gmane.org/gmane.linux.leaf.devel/1183 (2005)&lt;br /&gt;
* The first saved [[Release_Notes_for_Alpine_1.7.3|release notes]] were made for 1.7.3.&lt;br /&gt;
&lt;br /&gt;
= The name =&lt;br /&gt;
&amp;quot;Alpine&amp;quot; originally stood for &#039;&#039;&#039;A&#039;&#039;&#039; &#039;&#039;&#039;L&#039;&#039;&#039;inux &#039;&#039;&#039;P&#039;&#039;&#039;owered &#039;&#039;&#039;I&#039;&#039;&#039;ntegrated &#039;&#039;&#039;N&#039;&#039;&#039;etwork &#039;&#039;&#039;E&#039;&#039;&#039;ngine. The idea was that the distribution would be focused on networking, and be a tiny &amp;quot;engine&amp;quot; or framework, which larger systems could be built upon. Today, &amp;quot;Alpine&amp;quot; is nothing more than a name.&lt;br /&gt;
&lt;br /&gt;
= Who is working on Alpine Linux? =&lt;br /&gt;
&lt;br /&gt;
* Check the statistics of cgit, e. g. [http://git.alpinelinux.org/cgit/aports/stats/?period=y&amp;amp;ofs=50 aports]&lt;br /&gt;
&lt;br /&gt;
= Packages =&lt;br /&gt;
&lt;br /&gt;
* https://gitlab.alpinelinux.org/alpine/aports can give you a little insight&lt;br /&gt;
&lt;br /&gt;
== Packages per release ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Release&lt;br /&gt;
! Total&lt;br /&gt;
! normal&lt;br /&gt;
! dev&lt;br /&gt;
! doc&lt;br /&gt;
! libs&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.12&#039;&#039;&#039;&lt;br /&gt;
| 4832&lt;br /&gt;
| 3172&lt;br /&gt;
| 500&lt;br /&gt;
| 1073&lt;br /&gt;
| 87&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.11&#039;&#039;&#039;&lt;br /&gt;
| 5352&lt;br /&gt;
| 3430&lt;br /&gt;
| 620&lt;br /&gt;
| 1211&lt;br /&gt;
| 91&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.10&#039;&#039;&#039;&lt;br /&gt;
| 5669&lt;br /&gt;
| 3724&lt;br /&gt;
| 631&lt;br /&gt;
| 1224&lt;br /&gt;
| 90&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.9&#039;&#039;&#039;&lt;br /&gt;
| 5703&lt;br /&gt;
| 3721&lt;br /&gt;
| 652&lt;br /&gt;
| 1241&lt;br /&gt;
| 89&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.8&#039;&#039;&#039;&lt;br /&gt;
| 5674&lt;br /&gt;
| 3652&lt;br /&gt;
| 663&lt;br /&gt;
| 1272&lt;br /&gt;
| 87&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.7&#039;&#039;&#039;&lt;br /&gt;
| 5699&lt;br /&gt;
| 3629&lt;br /&gt;
| 683&lt;br /&gt;
| 1298&lt;br /&gt;
| 89&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.6&#039;&#039;&#039;&lt;br /&gt;
| 5548&lt;br /&gt;
| 3510&lt;br /&gt;
| 681&lt;br /&gt;
| 1271&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| 5643&lt;br /&gt;
| 3615&lt;br /&gt;
| 678&lt;br /&gt;
| 1264&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| 5231&lt;br /&gt;
| 3253&lt;br /&gt;
| 664&lt;br /&gt;
| 1235&lt;br /&gt;
| 79&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| 5314&lt;br /&gt;
| 3328&lt;br /&gt;
| 676&lt;br /&gt;
| 1239&lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| 5277&lt;br /&gt;
| 3343&lt;br /&gt;
| 684&lt;br /&gt;
| 1189&lt;br /&gt;
| 61&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| 4860&lt;br /&gt;
| 3075&lt;br /&gt;
| 620&lt;br /&gt;
| 1109&lt;br /&gt;
| 56&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| 4410&lt;br /&gt;
| 2752&lt;br /&gt;
| 578&lt;br /&gt;
| 1029&lt;br /&gt;
| 51&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.7&#039;&#039;&#039;&lt;br /&gt;
| 4205&lt;br /&gt;
| 2605&lt;br /&gt;
| 570&lt;br /&gt;
| 982&lt;br /&gt;
| 48&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.6&#039;&#039;&#039;&lt;br /&gt;
| 3918&lt;br /&gt;
| 2405&lt;br /&gt;
| 534&lt;br /&gt;
| 943&lt;br /&gt;
| 36&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.5&#039;&#039;&#039;&lt;br /&gt;
| 3676&lt;br /&gt;
| 2233&lt;br /&gt;
| 498&lt;br /&gt;
| 912&lt;br /&gt;
| 33&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.4&#039;&#039;&#039;&lt;br /&gt;
| 3376&lt;br /&gt;
| 2021&lt;br /&gt;
| 457&lt;br /&gt;
| 874&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| 3146&lt;br /&gt;
| 1866&lt;br /&gt;
| 435&lt;br /&gt;
| 827&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| 2608&lt;br /&gt;
| 1502&lt;br /&gt;
| 444&lt;br /&gt;
| 652&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| 2135&lt;br /&gt;
| 1222&lt;br /&gt;
| 365&lt;br /&gt;
| 547&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| 1983&lt;br /&gt;
| 1139&lt;br /&gt;
| 332&lt;br /&gt;
| 511&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.10&#039;&#039;&#039;&lt;br /&gt;
| 1639&lt;br /&gt;
| 918&lt;br /&gt;
| 282&lt;br /&gt;
| 438&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.9&#039;&#039;&#039;&lt;br /&gt;
| 958&lt;br /&gt;
| 549&lt;br /&gt;
| 139&lt;br /&gt;
| 269&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:201806-aports.png|center|Aports]]&lt;br /&gt;
&lt;br /&gt;
== Commit per year to aports ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2008 : 146&lt;br /&gt;
2009 : 3122&lt;br /&gt;
2010 : 3365&lt;br /&gt;
2011 : 5561&lt;br /&gt;
2012 : 5312&lt;br /&gt;
2013 : 6597&lt;br /&gt;
2014 : 5759&lt;br /&gt;
2015 : 7315&lt;br /&gt;
2016 : 9065&lt;br /&gt;
2017 : 11661&lt;br /&gt;
2018 : 5339 (so far)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;High score list&amp;quot; of committer to aports ==&lt;br /&gt;
&lt;br /&gt;
Don&#039;t get this the wrong way...those are just numbers. Every single contributions is making a difference.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 35479  Natanael Copa&lt;br /&gt;
  9036  Leo&lt;br /&gt;
  5382  Francesco Colista&lt;br /&gt;
  3699  Jakub Jirutka&lt;br /&gt;
  3429  Leonardo Arena&lt;br /&gt;
  3033  Carlo Landmeter&lt;br /&gt;
  2857  Timo Teräs&lt;br /&gt;
  2382  Fabian Affolter&lt;br /&gt;
  2145  Sören Tempel&lt;br /&gt;
  1971  William Pitcock&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== First commit to aports == &lt;br /&gt;
The first commit in git was made:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit 645531103b2ee8ef54d53a58eca3b52f7d3fb9ac&lt;br /&gt;
Author: Natanael Copa &amp;lt;ncopa@alpinelinux.org&amp;gt;&lt;br /&gt;
Date:   Sat Oct 18 09:16:29 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    added busybox&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=17719</id>
		<title>Alpine Linux:Trivia</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=17719"/>
		<updated>2020-06-12T08:22:58Z</updated>

		<summary type="html">&lt;p&gt;Fab: /* Packages per release */ Add data&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains only irrelevant and unhelpful information and statistics about Alpine Linux. If you are going to prepare a talk about Alpine Linux, perhaps some information mentioned here can be used for the intro. &lt;br /&gt;
&lt;br /&gt;
= The first release =&lt;br /&gt;
* Archives going back to 1.1 are (currently) at http://ancient.alpinelinux.org &lt;br /&gt;
* First public mention of &amp;quot;Alpine Linux&amp;quot; is archived here: http://comments.gmane.org/gmane.linux.leaf.devel/1183 (2005)&lt;br /&gt;
* The first saved [[Release_Notes_for_Alpine_1.7.3|release notes]] were made for 1.7.3.&lt;br /&gt;
&lt;br /&gt;
= The name =&lt;br /&gt;
&amp;quot;Alpine&amp;quot; originally stood for &#039;&#039;&#039;A&#039;&#039;&#039; &#039;&#039;&#039;L&#039;&#039;&#039;inux &#039;&#039;&#039;P&#039;&#039;&#039;owered &#039;&#039;&#039;I&#039;&#039;&#039;ntegrated &#039;&#039;&#039;N&#039;&#039;&#039;etwork &#039;&#039;&#039;E&#039;&#039;&#039;ngine. The idea was that the distribution would be focused on networking, and be a tiny &amp;quot;engine&amp;quot; or framework, which larger systems could be built upon. Today, &amp;quot;Alpine&amp;quot; is nothing more than a name.&lt;br /&gt;
&lt;br /&gt;
= Who is working on Alpine Linux? =&lt;br /&gt;
&lt;br /&gt;
* Check the statistics of cgit, e. g. [http://git.alpinelinux.org/cgit/aports/stats/?period=y&amp;amp;ofs=50 aports]&lt;br /&gt;
&lt;br /&gt;
= Packages =&lt;br /&gt;
&lt;br /&gt;
* https://gitlab.alpinelinux.org/alpine/aports can give you a little insight&lt;br /&gt;
&lt;br /&gt;
== Packages per release ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Release&lt;br /&gt;
! Total&lt;br /&gt;
! normal&lt;br /&gt;
! dev&lt;br /&gt;
! doc&lt;br /&gt;
! libs&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.12&#039;&#039;&#039;&lt;br /&gt;
| 4832&lt;br /&gt;
| 3172&lt;br /&gt;
| 500&lt;br /&gt;
| 1073&lt;br /&gt;
| 87&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.11&#039;&#039;&#039;&lt;br /&gt;
| 5352&lt;br /&gt;
| 3430&lt;br /&gt;
| 620&lt;br /&gt;
| 1211&lt;br /&gt;
| 91&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.10&#039;&#039;&#039;&lt;br /&gt;
| 5669&lt;br /&gt;
| 3724&lt;br /&gt;
| 631&lt;br /&gt;
| 1224&lt;br /&gt;
| 90&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.9&#039;&#039;&#039;&lt;br /&gt;
| 5703&lt;br /&gt;
| 3721&lt;br /&gt;
| 652&lt;br /&gt;
| 1241&lt;br /&gt;
| 89&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.8&#039;&#039;&#039;&lt;br /&gt;
| 5674&lt;br /&gt;
| 3652&lt;br /&gt;
| 663&lt;br /&gt;
| 1272&lt;br /&gt;
| 87&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.7&#039;&#039;&#039;&lt;br /&gt;
| 5699&lt;br /&gt;
| 3629&lt;br /&gt;
| 683&lt;br /&gt;
| 1298&lt;br /&gt;
| 89&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.6&#039;&#039;&#039;&lt;br /&gt;
| 5548&lt;br /&gt;
| 3510&lt;br /&gt;
| 681&lt;br /&gt;
| 1271&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| 5643&lt;br /&gt;
| 3615&lt;br /&gt;
| 678&lt;br /&gt;
| 1264&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| 5231&lt;br /&gt;
| 3253&lt;br /&gt;
| 664&lt;br /&gt;
| 1235&lt;br /&gt;
| 79&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| 5314&lt;br /&gt;
| 3328&lt;br /&gt;
| 676&lt;br /&gt;
| 1239&lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| 5277&lt;br /&gt;
| 3343&lt;br /&gt;
| 684&lt;br /&gt;
| 1189&lt;br /&gt;
| 61&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| 4860&lt;br /&gt;
| 3075&lt;br /&gt;
| 620&lt;br /&gt;
| 1109&lt;br /&gt;
| 56&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| 4410&lt;br /&gt;
| 2752&lt;br /&gt;
| 578&lt;br /&gt;
| 1029&lt;br /&gt;
| 51&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.7&#039;&#039;&#039;&lt;br /&gt;
| 4205&lt;br /&gt;
| 2605&lt;br /&gt;
| 570&lt;br /&gt;
| 982&lt;br /&gt;
| 48&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.6&#039;&#039;&#039;&lt;br /&gt;
| 3918&lt;br /&gt;
| 2405&lt;br /&gt;
| 534&lt;br /&gt;
| 943&lt;br /&gt;
| 36&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.5&#039;&#039;&#039;&lt;br /&gt;
| 3676&lt;br /&gt;
| 2233&lt;br /&gt;
| 498&lt;br /&gt;
| 912&lt;br /&gt;
| 33&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.4&#039;&#039;&#039;&lt;br /&gt;
| 3376&lt;br /&gt;
| 2021&lt;br /&gt;
| 457&lt;br /&gt;
| 874&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| 3146&lt;br /&gt;
| 1866&lt;br /&gt;
| 435&lt;br /&gt;
| 827&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| 2608&lt;br /&gt;
| 1502&lt;br /&gt;
| 444&lt;br /&gt;
| 652&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| 2135&lt;br /&gt;
| 1222&lt;br /&gt;
| 365&lt;br /&gt;
| 547&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| 1983&lt;br /&gt;
| 1139&lt;br /&gt;
| 332&lt;br /&gt;
| 511&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.10&#039;&#039;&#039;&lt;br /&gt;
| 1639&lt;br /&gt;
| 918&lt;br /&gt;
| 282&lt;br /&gt;
| 438&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.9&#039;&#039;&#039;&lt;br /&gt;
| 958&lt;br /&gt;
| 549&lt;br /&gt;
| 139&lt;br /&gt;
| 269&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:201806-aports.png|center|Aports]]&lt;br /&gt;
&lt;br /&gt;
== Commit per year to aports ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2008 : 146&lt;br /&gt;
2009 : 3122&lt;br /&gt;
2010 : 3365&lt;br /&gt;
2011 : 5561&lt;br /&gt;
2012 : 5312&lt;br /&gt;
2013 : 6597&lt;br /&gt;
2014 : 5759&lt;br /&gt;
2015 : 7315&lt;br /&gt;
2016 : 9065&lt;br /&gt;
2017 : 11661&lt;br /&gt;
2018 : 5339 (so far)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;High score list&amp;quot; of committer to aports ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 29557	Natanael Copa&lt;br /&gt;
  3996	Francesco Colista&lt;br /&gt;
  2850	Jakub Jirutka&lt;br /&gt;
  2827	Leonardo Arena&lt;br /&gt;
  2744	Carlo Landmeter&lt;br /&gt;
  2707	Timo Teräs&lt;br /&gt;
  2220	Fabian Affolter&lt;br /&gt;
  1952	William Pitcock&lt;br /&gt;
  1490	Sören Tempel&lt;br /&gt;
  1349	Bartłomiej Piotrowski&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== First commit to aports == &lt;br /&gt;
The first commit in git was made:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit 645531103b2ee8ef54d53a58eca3b52f7d3fb9ac&lt;br /&gt;
Author: Natanael Copa &amp;lt;ncopa@alpinelinux.org&amp;gt;&lt;br /&gt;
Date:   Sat Oct 18 09:16:29 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    added busybox&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=17718</id>
		<title>Alpine Linux:Trivia</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=17718"/>
		<updated>2020-06-12T08:21:36Z</updated>

		<summary type="html">&lt;p&gt;Fab: /* Packages */ Ohloh is gone&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains only irrelevant and unhelpful information and statistics about Alpine Linux. If you are going to prepare a talk about Alpine Linux, perhaps some information mentioned here can be used for the intro. &lt;br /&gt;
&lt;br /&gt;
= The first release =&lt;br /&gt;
* Archives going back to 1.1 are (currently) at http://ancient.alpinelinux.org &lt;br /&gt;
* First public mention of &amp;quot;Alpine Linux&amp;quot; is archived here: http://comments.gmane.org/gmane.linux.leaf.devel/1183 (2005)&lt;br /&gt;
* The first saved [[Release_Notes_for_Alpine_1.7.3|release notes]] were made for 1.7.3.&lt;br /&gt;
&lt;br /&gt;
= The name =&lt;br /&gt;
&amp;quot;Alpine&amp;quot; originally stood for &#039;&#039;&#039;A&#039;&#039;&#039; &#039;&#039;&#039;L&#039;&#039;&#039;inux &#039;&#039;&#039;P&#039;&#039;&#039;owered &#039;&#039;&#039;I&#039;&#039;&#039;ntegrated &#039;&#039;&#039;N&#039;&#039;&#039;etwork &#039;&#039;&#039;E&#039;&#039;&#039;ngine. The idea was that the distribution would be focused on networking, and be a tiny &amp;quot;engine&amp;quot; or framework, which larger systems could be built upon. Today, &amp;quot;Alpine&amp;quot; is nothing more than a name.&lt;br /&gt;
&lt;br /&gt;
= Who is working on Alpine Linux? =&lt;br /&gt;
&lt;br /&gt;
* Check the statistics of cgit, e. g. [http://git.alpinelinux.org/cgit/aports/stats/?period=y&amp;amp;ofs=50 aports]&lt;br /&gt;
&lt;br /&gt;
= Packages =&lt;br /&gt;
&lt;br /&gt;
* https://gitlab.alpinelinux.org/alpine/aports can give you a little insight&lt;br /&gt;
&lt;br /&gt;
== Packages per release ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Release&lt;br /&gt;
! Total&lt;br /&gt;
! normal&lt;br /&gt;
! dev&lt;br /&gt;
! doc&lt;br /&gt;
! libs&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.8&#039;&#039;&#039;&lt;br /&gt;
| 5674&lt;br /&gt;
| 3652&lt;br /&gt;
| 663&lt;br /&gt;
| 1272&lt;br /&gt;
| 87&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.7&#039;&#039;&#039;&lt;br /&gt;
| 5699&lt;br /&gt;
| 3629&lt;br /&gt;
| 683&lt;br /&gt;
| 1298&lt;br /&gt;
| 89&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.6&#039;&#039;&#039;&lt;br /&gt;
| 5548&lt;br /&gt;
| 3510&lt;br /&gt;
| 681&lt;br /&gt;
| 1271&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| 5643&lt;br /&gt;
| 3615&lt;br /&gt;
| 678&lt;br /&gt;
| 1264&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| 5231&lt;br /&gt;
| 3253&lt;br /&gt;
| 664&lt;br /&gt;
| 1235&lt;br /&gt;
| 79&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| 5314&lt;br /&gt;
| 3328&lt;br /&gt;
| 676&lt;br /&gt;
| 1239&lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| 5277&lt;br /&gt;
| 3343&lt;br /&gt;
| 684&lt;br /&gt;
| 1189&lt;br /&gt;
| 61&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| 4860&lt;br /&gt;
| 3075&lt;br /&gt;
| 620&lt;br /&gt;
| 1109&lt;br /&gt;
| 56&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| 4410&lt;br /&gt;
| 2752&lt;br /&gt;
| 578&lt;br /&gt;
| 1029&lt;br /&gt;
| 51&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.7&#039;&#039;&#039;&lt;br /&gt;
| 4205&lt;br /&gt;
| 2605&lt;br /&gt;
| 570&lt;br /&gt;
| 982&lt;br /&gt;
| 48&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.6&#039;&#039;&#039;&lt;br /&gt;
| 3918&lt;br /&gt;
| 2405&lt;br /&gt;
| 534&lt;br /&gt;
| 943&lt;br /&gt;
| 36&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.5&#039;&#039;&#039;&lt;br /&gt;
| 3676&lt;br /&gt;
| 2233&lt;br /&gt;
| 498&lt;br /&gt;
| 912&lt;br /&gt;
| 33&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.4&#039;&#039;&#039;&lt;br /&gt;
| 3376&lt;br /&gt;
| 2021&lt;br /&gt;
| 457&lt;br /&gt;
| 874&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| 3146&lt;br /&gt;
| 1866&lt;br /&gt;
| 435&lt;br /&gt;
| 827&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| 2608&lt;br /&gt;
| 1502&lt;br /&gt;
| 444&lt;br /&gt;
| 652&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| 2135&lt;br /&gt;
| 1222&lt;br /&gt;
| 365&lt;br /&gt;
| 547&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| 1983&lt;br /&gt;
| 1139&lt;br /&gt;
| 332&lt;br /&gt;
| 511&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.10&#039;&#039;&#039;&lt;br /&gt;
| 1639&lt;br /&gt;
| 918&lt;br /&gt;
| 282&lt;br /&gt;
| 438&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.9&#039;&#039;&#039;&lt;br /&gt;
| 958&lt;br /&gt;
| 549&lt;br /&gt;
| 139&lt;br /&gt;
| 269&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:201806-aports.png|center|Aports]]&lt;br /&gt;
&lt;br /&gt;
== Commit per year to aports ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2008 : 146&lt;br /&gt;
2009 : 3122&lt;br /&gt;
2010 : 3365&lt;br /&gt;
2011 : 5561&lt;br /&gt;
2012 : 5312&lt;br /&gt;
2013 : 6597&lt;br /&gt;
2014 : 5759&lt;br /&gt;
2015 : 7315&lt;br /&gt;
2016 : 9065&lt;br /&gt;
2017 : 11661&lt;br /&gt;
2018 : 5339 (so far)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;High score list&amp;quot; of committer to aports ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 29557	Natanael Copa&lt;br /&gt;
  3996	Francesco Colista&lt;br /&gt;
  2850	Jakub Jirutka&lt;br /&gt;
  2827	Leonardo Arena&lt;br /&gt;
  2744	Carlo Landmeter&lt;br /&gt;
  2707	Timo Teräs&lt;br /&gt;
  2220	Fabian Affolter&lt;br /&gt;
  1952	William Pitcock&lt;br /&gt;
  1490	Sören Tempel&lt;br /&gt;
  1349	Bartłomiej Piotrowski&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== First commit to aports == &lt;br /&gt;
The first commit in git was made:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit 645531103b2ee8ef54d53a58eca3b52f7d3fb9ac&lt;br /&gt;
Author: Natanael Copa &amp;lt;ncopa@alpinelinux.org&amp;gt;&lt;br /&gt;
Date:   Sat Oct 18 09:16:29 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    added busybox&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Setting_Up_Lighttpd_With_FastCGI&amp;diff=17139</id>
		<title>Setting Up Lighttpd With FastCGI</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Setting_Up_Lighttpd_With_FastCGI&amp;diff=17139"/>
		<updated>2020-03-26T08:57:34Z</updated>

		<summary type="html">&lt;p&gt;Fab: Update to 3.11&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For installing the additional packages first activate community packages:&lt;br /&gt;
{{Cmd|vi /etc/apk/repositories}}&lt;br /&gt;
Uncomment the following:&lt;br /&gt;
{{Cmd|http://pkg.example.com/alpine/v3.11/community}}&lt;br /&gt;
&lt;br /&gt;
Update the packagelist:&lt;br /&gt;
{{Cmd|apk update}}&lt;br /&gt;
&lt;br /&gt;
Install the additional packages:&lt;br /&gt;
{{Cmd|apk add lighttpd php7-common php7-iconv php7-json php7-gd php7-curl php7-xml php7-mysqli php7-imap php7-cgi fcgi php7-pdo php7-pdo_mysql php7-soap php7-xmlrpc php7-posix php7-mcrypt php7-gettext php7-ldap php7-ctype php7-dom}}&lt;br /&gt;
&lt;br /&gt;
==Configure Lighttpd==&lt;br /&gt;
&#039;&#039;&#039;Edit lighttpd.conf&#039;&#039;&#039;&lt;br /&gt;
{{Cmd|vi /etc/lighttpd/lighttpd.conf}}&lt;br /&gt;
Uncomment line:&lt;br /&gt;
 include &amp;quot;mod_fastcgi.conf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Edit mod_fastcgi.conf&#039;&#039;&#039;&lt;br /&gt;
{{Cmd|vi /etc/lighttpd/mod_fastcgi.conf}}&lt;br /&gt;
Edit the section:&lt;br /&gt;
 /usr/bin/php-cgi&lt;br /&gt;
To:&lt;br /&gt;
 /usr/bin/php-cgi7&lt;br /&gt;
&lt;br /&gt;
==Start lighttpd service and add to needed runlevel==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|rc-service lighttpd start &amp;amp;&amp;amp; rc-update add lighttpd default}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:PHP]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=PhpMyAdmin&amp;diff=17138</id>
		<title>PhpMyAdmin</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=PhpMyAdmin&amp;diff=17138"/>
		<updated>2020-03-26T08:56:01Z</updated>

		<summary type="html">&lt;p&gt;Fab: phpMyAdmin &amp;lt; 5.0.2 has SQL injection vulnerabilities&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.phpmyadmin.net phpMyAdmin] is a free software tool written in PHP intended to handle the administration of MySQL over the World Wide Web. phpMyAdmin supports a wide range of operations with MySQL. The most frequently used operations are supported by the user interface (managing databases, tables, fields, relations, indexes, users, permissions, etc), while you still have the ability to directly execute any SQL statement. &lt;br /&gt;
&lt;br /&gt;
== Install lighttpd, PHP and MySql ==&lt;br /&gt;
{{:Setting Up Lighttpd With FastCGI}}&lt;br /&gt;
&lt;br /&gt;
Install extra packages:&lt;br /&gt;
{{Cmd|apk add mysql mysql-client php-mysql php-mysqli}}&lt;br /&gt;
&lt;br /&gt;
== Configuring MySql ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|&amp;lt;nowiki&amp;gt;/usr/bin/mysql_install_db --user=mysql&lt;br /&gt;
/etc/init.d/mysql start &amp;amp;&amp;amp; rc-update add mysql default&lt;br /&gt;
/usr/bin/mysqladmin -u root password &#039;password&#039;&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
== Installing phpMyAdmin ==&lt;br /&gt;
&lt;br /&gt;
Create a directory named {{Path|webapps}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|mkdir -p /usr/share/webapps/}}&lt;br /&gt;
Download the source code&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cd /usr/share/webapps&lt;br /&gt;
wget http://files.directadmin.com/services/all/phpMyAdmin/phpMyAdmin-5.0.2-all-languages.tar.gz}}&lt;br /&gt;
&lt;br /&gt;
Unpack the archive and remove the archive&lt;br /&gt;
&lt;br /&gt;
{{Cmd|tar zxvf phpMyAdmin-5.0.2-all-languages.tar.gz&lt;br /&gt;
rm phpMyAdmin-5.0.2-all-languages.tar.gz}}&lt;br /&gt;
&lt;br /&gt;
Rename the folder&lt;br /&gt;
&lt;br /&gt;
{{Cmd|mv phpMyAdmin-5.0.2-all-languages phpmyadmin}}&lt;br /&gt;
 &lt;br /&gt;
Change the folder permissions&lt;br /&gt;
&lt;br /&gt;
{{Cmd|chmod -R 777 /usr/share/webapps/}}&lt;br /&gt;
&lt;br /&gt;
Create a symlink to the &#039;&#039;phpmyadmin&#039;&#039; folder&lt;br /&gt;
&lt;br /&gt;
{{Cmd|ln -s /usr/share/webapps/phpmyadmin/ /var/www/localhost/htdocs/phpmyadmin}}&lt;br /&gt;
&lt;br /&gt;
== Log on your phpMyAdmin ==&lt;br /&gt;
&lt;br /&gt;
Browse to: http://WEBSERVER_IP_ADDRESS/phpmyadmin and logon to phpMyAdmin using your MySQL user and password.&lt;br /&gt;
&lt;br /&gt;
[[Category:PHP]]&lt;br /&gt;
[[Category:SQL]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Talk:Python_package_policies&amp;diff=15796</id>
		<title>Talk:Python package policies</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Talk:Python_package_policies&amp;diff=15796"/>
		<updated>2019-03-11T17:30:13Z</updated>

		<summary type="html">&lt;p&gt;Fab: Created page with &amp;quot;This page duplicates quite a bit of details which are already present:  - https://wiki.alpinelinux.org/wiki/Package_policies - https://wiki.alpinelinux.org/wiki/APKBUILD_examp...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page duplicates quite a bit of details which are already present:&lt;br /&gt;
&lt;br /&gt;
- https://wiki.alpinelinux.org/wiki/Package_policies&lt;br /&gt;
- https://wiki.alpinelinux.org/wiki/APKBUILD_examples:Python&lt;br /&gt;
&lt;br /&gt;
Instead of creating a new page the existing information should be updated.&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=15318</id>
		<title>Alpine Linux:Trivia</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=15318"/>
		<updated>2018-07-01T15:40:50Z</updated>

		<summary type="html">&lt;p&gt;Fab: /* Packages per release */ New diagram&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains only irrelevant and unhelpful information and statistics about Alpine Linux. If you are going to prepare a talk about Alpine Linux, perhaps some information mentioned here can be used for the intro. &lt;br /&gt;
&lt;br /&gt;
= The first release =&lt;br /&gt;
* Archives going back to 1.1 are (currently) at http://ancient.alpinelinux.org &lt;br /&gt;
* First public mention of &amp;quot;Alpine Linux&amp;quot; is archived here: http://comments.gmane.org/gmane.linux.leaf.devel/1183 (2005)&lt;br /&gt;
* The first saved [[Release_Notes_for_Alpine_1.7.3|release notes]] were made for 1.7.3.&lt;br /&gt;
&lt;br /&gt;
= The name =&lt;br /&gt;
&amp;quot;Alpine&amp;quot; originally stood for &#039;&#039;&#039;A&#039;&#039;&#039; &#039;&#039;&#039;L&#039;&#039;&#039;inux &#039;&#039;&#039;P&#039;&#039;&#039;owered &#039;&#039;&#039;I&#039;&#039;&#039;ntegrated &#039;&#039;&#039;N&#039;&#039;&#039;etwork &#039;&#039;&#039;E&#039;&#039;&#039;ngine. The idea was that the distribution would be focused on networking, and be a tiny &amp;quot;engine&amp;quot; or framework, which larger systems could be built upon. Today, &amp;quot;Alpine&amp;quot; is nothing more than a name.&lt;br /&gt;
&lt;br /&gt;
= Who is working on Alpine Linux? =&lt;br /&gt;
&lt;br /&gt;
* Check the statistics of cgit, e. g. [http://git.alpinelinux.org/cgit/aports/stats/?period=y&amp;amp;ofs=50 aports]&lt;br /&gt;
&lt;br /&gt;
= Packages =&lt;br /&gt;
&lt;br /&gt;
* [https://www.ohloh.net/p/aports aports] statistics provided by Ohloh.&lt;br /&gt;
&lt;br /&gt;
== Packages per release ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Release&lt;br /&gt;
! Total&lt;br /&gt;
! normal&lt;br /&gt;
! dev&lt;br /&gt;
! doc&lt;br /&gt;
! libs&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.8&#039;&#039;&#039;&lt;br /&gt;
| 5674&lt;br /&gt;
| 3652&lt;br /&gt;
| 663&lt;br /&gt;
| 1272&lt;br /&gt;
| 87&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.7&#039;&#039;&#039;&lt;br /&gt;
| 5699&lt;br /&gt;
| 3629&lt;br /&gt;
| 683&lt;br /&gt;
| 1298&lt;br /&gt;
| 89&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.6&#039;&#039;&#039;&lt;br /&gt;
| 5548&lt;br /&gt;
| 3510&lt;br /&gt;
| 681&lt;br /&gt;
| 1271&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| 5643&lt;br /&gt;
| 3615&lt;br /&gt;
| 678&lt;br /&gt;
| 1264&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| 5231&lt;br /&gt;
| 3253&lt;br /&gt;
| 664&lt;br /&gt;
| 1235&lt;br /&gt;
| 79&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| 5314&lt;br /&gt;
| 3328&lt;br /&gt;
| 676&lt;br /&gt;
| 1239&lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| 5277&lt;br /&gt;
| 3343&lt;br /&gt;
| 684&lt;br /&gt;
| 1189&lt;br /&gt;
| 61&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| 4860&lt;br /&gt;
| 3075&lt;br /&gt;
| 620&lt;br /&gt;
| 1109&lt;br /&gt;
| 56&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| 4410&lt;br /&gt;
| 2752&lt;br /&gt;
| 578&lt;br /&gt;
| 1029&lt;br /&gt;
| 51&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.7&#039;&#039;&#039;&lt;br /&gt;
| 4205&lt;br /&gt;
| 2605&lt;br /&gt;
| 570&lt;br /&gt;
| 982&lt;br /&gt;
| 48&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.6&#039;&#039;&#039;&lt;br /&gt;
| 3918&lt;br /&gt;
| 2405&lt;br /&gt;
| 534&lt;br /&gt;
| 943&lt;br /&gt;
| 36&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.5&#039;&#039;&#039;&lt;br /&gt;
| 3676&lt;br /&gt;
| 2233&lt;br /&gt;
| 498&lt;br /&gt;
| 912&lt;br /&gt;
| 33&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.4&#039;&#039;&#039;&lt;br /&gt;
| 3376&lt;br /&gt;
| 2021&lt;br /&gt;
| 457&lt;br /&gt;
| 874&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| 3146&lt;br /&gt;
| 1866&lt;br /&gt;
| 435&lt;br /&gt;
| 827&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| 2608&lt;br /&gt;
| 1502&lt;br /&gt;
| 444&lt;br /&gt;
| 652&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| 2135&lt;br /&gt;
| 1222&lt;br /&gt;
| 365&lt;br /&gt;
| 547&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| 1983&lt;br /&gt;
| 1139&lt;br /&gt;
| 332&lt;br /&gt;
| 511&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.10&#039;&#039;&#039;&lt;br /&gt;
| 1639&lt;br /&gt;
| 918&lt;br /&gt;
| 282&lt;br /&gt;
| 438&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.9&#039;&#039;&#039;&lt;br /&gt;
| 958&lt;br /&gt;
| 549&lt;br /&gt;
| 139&lt;br /&gt;
| 269&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:201806-aports.png|center|Aports]]&lt;br /&gt;
&lt;br /&gt;
== Commit per year to aports ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2008 : 146&lt;br /&gt;
2009 : 3122&lt;br /&gt;
2010 : 3365&lt;br /&gt;
2011 : 5561&lt;br /&gt;
2012 : 5312&lt;br /&gt;
2013 : 6597&lt;br /&gt;
2014 : 5759&lt;br /&gt;
2015 : 7315&lt;br /&gt;
2016 : 9065&lt;br /&gt;
2017 : 11661&lt;br /&gt;
2018 : 5339 (so far)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;High score list&amp;quot; of committer to aports ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 29557	Natanael Copa&lt;br /&gt;
  3996	Francesco Colista&lt;br /&gt;
  2850	Jakub Jirutka&lt;br /&gt;
  2827	Leonardo Arena&lt;br /&gt;
  2744	Carlo Landmeter&lt;br /&gt;
  2707	Timo Teräs&lt;br /&gt;
  2220	Fabian Affolter&lt;br /&gt;
  1952	William Pitcock&lt;br /&gt;
  1490	Sören Tempel&lt;br /&gt;
  1349	Bartłomiej Piotrowski&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== First commit to aports == &lt;br /&gt;
The first commit in git was made:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit 645531103b2ee8ef54d53a58eca3b52f7d3fb9ac&lt;br /&gt;
Author: Natanael Copa &amp;lt;ncopa@alpinelinux.org&amp;gt;&lt;br /&gt;
Date:   Sat Oct 18 09:16:29 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    added busybox&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=File:201806-aports.png&amp;diff=15317</id>
		<title>File:201806-aports.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=File:201806-aports.png&amp;diff=15317"/>
		<updated>2018-07-01T15:39:08Z</updated>

		<summary type="html">&lt;p&gt;Fab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=15316</id>
		<title>Alpine Linux:Trivia</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=15316"/>
		<updated>2018-07-01T15:34:24Z</updated>

		<summary type="html">&lt;p&gt;Fab: /* &amp;quot;High score list&amp;quot; of committer to aports */ update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains only irrelevant and unhelpful information and statistics about Alpine Linux. If you are going to prepare a talk about Alpine Linux, perhaps some information mentioned here can be used for the intro. &lt;br /&gt;
&lt;br /&gt;
= The first release =&lt;br /&gt;
* Archives going back to 1.1 are (currently) at http://ancient.alpinelinux.org &lt;br /&gt;
* First public mention of &amp;quot;Alpine Linux&amp;quot; is archived here: http://comments.gmane.org/gmane.linux.leaf.devel/1183 (2005)&lt;br /&gt;
* The first saved [[Release_Notes_for_Alpine_1.7.3|release notes]] were made for 1.7.3.&lt;br /&gt;
&lt;br /&gt;
= The name =&lt;br /&gt;
&amp;quot;Alpine&amp;quot; originally stood for &#039;&#039;&#039;A&#039;&#039;&#039; &#039;&#039;&#039;L&#039;&#039;&#039;inux &#039;&#039;&#039;P&#039;&#039;&#039;owered &#039;&#039;&#039;I&#039;&#039;&#039;ntegrated &#039;&#039;&#039;N&#039;&#039;&#039;etwork &#039;&#039;&#039;E&#039;&#039;&#039;ngine. The idea was that the distribution would be focused on networking, and be a tiny &amp;quot;engine&amp;quot; or framework, which larger systems could be built upon. Today, &amp;quot;Alpine&amp;quot; is nothing more than a name.&lt;br /&gt;
&lt;br /&gt;
= Who is working on Alpine Linux? =&lt;br /&gt;
&lt;br /&gt;
* Check the statistics of cgit, e. g. [http://git.alpinelinux.org/cgit/aports/stats/?period=y&amp;amp;ofs=50 aports]&lt;br /&gt;
&lt;br /&gt;
= Packages =&lt;br /&gt;
&lt;br /&gt;
* [https://www.ohloh.net/p/aports aports] statistics provided by Ohloh.&lt;br /&gt;
&lt;br /&gt;
== Packages per release ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Release&lt;br /&gt;
! Total&lt;br /&gt;
! normal&lt;br /&gt;
! dev&lt;br /&gt;
! doc&lt;br /&gt;
! libs&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.8&#039;&#039;&#039;&lt;br /&gt;
| 5674&lt;br /&gt;
| 3652&lt;br /&gt;
| 663&lt;br /&gt;
| 1272&lt;br /&gt;
| 87&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.7&#039;&#039;&#039;&lt;br /&gt;
| 5699&lt;br /&gt;
| 3629&lt;br /&gt;
| 683&lt;br /&gt;
| 1298&lt;br /&gt;
| 89&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.6&#039;&#039;&#039;&lt;br /&gt;
| 5548&lt;br /&gt;
| 3510&lt;br /&gt;
| 681&lt;br /&gt;
| 1271&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| 5643&lt;br /&gt;
| 3615&lt;br /&gt;
| 678&lt;br /&gt;
| 1264&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| 5231&lt;br /&gt;
| 3253&lt;br /&gt;
| 664&lt;br /&gt;
| 1235&lt;br /&gt;
| 79&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| 5314&lt;br /&gt;
| 3328&lt;br /&gt;
| 676&lt;br /&gt;
| 1239&lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| 5277&lt;br /&gt;
| 3343&lt;br /&gt;
| 684&lt;br /&gt;
| 1189&lt;br /&gt;
| 61&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| 4860&lt;br /&gt;
| 3075&lt;br /&gt;
| 620&lt;br /&gt;
| 1109&lt;br /&gt;
| 56&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| 4410&lt;br /&gt;
| 2752&lt;br /&gt;
| 578&lt;br /&gt;
| 1029&lt;br /&gt;
| 51&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.7&#039;&#039;&#039;&lt;br /&gt;
| 4205&lt;br /&gt;
| 2605&lt;br /&gt;
| 570&lt;br /&gt;
| 982&lt;br /&gt;
| 48&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.6&#039;&#039;&#039;&lt;br /&gt;
| 3918&lt;br /&gt;
| 2405&lt;br /&gt;
| 534&lt;br /&gt;
| 943&lt;br /&gt;
| 36&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.5&#039;&#039;&#039;&lt;br /&gt;
| 3676&lt;br /&gt;
| 2233&lt;br /&gt;
| 498&lt;br /&gt;
| 912&lt;br /&gt;
| 33&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.4&#039;&#039;&#039;&lt;br /&gt;
| 3376&lt;br /&gt;
| 2021&lt;br /&gt;
| 457&lt;br /&gt;
| 874&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| 3146&lt;br /&gt;
| 1866&lt;br /&gt;
| 435&lt;br /&gt;
| 827&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| 2608&lt;br /&gt;
| 1502&lt;br /&gt;
| 444&lt;br /&gt;
| 652&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| 2135&lt;br /&gt;
| 1222&lt;br /&gt;
| 365&lt;br /&gt;
| 547&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| 1983&lt;br /&gt;
| 1139&lt;br /&gt;
| 332&lt;br /&gt;
| 511&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.10&#039;&#039;&#039;&lt;br /&gt;
| 1639&lt;br /&gt;
| 918&lt;br /&gt;
| 282&lt;br /&gt;
| 438&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.9&#039;&#039;&#039;&lt;br /&gt;
| 958&lt;br /&gt;
| 549&lt;br /&gt;
| 139&lt;br /&gt;
| 269&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:201705-aports.png|center|Aports]]&lt;br /&gt;
&lt;br /&gt;
== Commit per year to aports ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2008 : 146&lt;br /&gt;
2009 : 3122&lt;br /&gt;
2010 : 3365&lt;br /&gt;
2011 : 5561&lt;br /&gt;
2012 : 5312&lt;br /&gt;
2013 : 6597&lt;br /&gt;
2014 : 5759&lt;br /&gt;
2015 : 7315&lt;br /&gt;
2016 : 9065&lt;br /&gt;
2017 : 11661&lt;br /&gt;
2018 : 5339 (so far)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;High score list&amp;quot; of committer to aports ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 29557	Natanael Copa&lt;br /&gt;
  3996	Francesco Colista&lt;br /&gt;
  2850	Jakub Jirutka&lt;br /&gt;
  2827	Leonardo Arena&lt;br /&gt;
  2744	Carlo Landmeter&lt;br /&gt;
  2707	Timo Teräs&lt;br /&gt;
  2220	Fabian Affolter&lt;br /&gt;
  1952	William Pitcock&lt;br /&gt;
  1490	Sören Tempel&lt;br /&gt;
  1349	Bartłomiej Piotrowski&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== First commit to aports == &lt;br /&gt;
The first commit in git was made:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit 645531103b2ee8ef54d53a58eca3b52f7d3fb9ac&lt;br /&gt;
Author: Natanael Copa &amp;lt;ncopa@alpinelinux.org&amp;gt;&lt;br /&gt;
Date:   Sat Oct 18 09:16:29 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    added busybox&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=15315</id>
		<title>Alpine Linux:Trivia</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=15315"/>
		<updated>2018-07-01T15:31:22Z</updated>

		<summary type="html">&lt;p&gt;Fab: /* Commit per year to aports */ update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains only irrelevant and unhelpful information and statistics about Alpine Linux. If you are going to prepare a talk about Alpine Linux, perhaps some information mentioned here can be used for the intro. &lt;br /&gt;
&lt;br /&gt;
= The first release =&lt;br /&gt;
* Archives going back to 1.1 are (currently) at http://ancient.alpinelinux.org &lt;br /&gt;
* First public mention of &amp;quot;Alpine Linux&amp;quot; is archived here: http://comments.gmane.org/gmane.linux.leaf.devel/1183 (2005)&lt;br /&gt;
* The first saved [[Release_Notes_for_Alpine_1.7.3|release notes]] were made for 1.7.3.&lt;br /&gt;
&lt;br /&gt;
= The name =&lt;br /&gt;
&amp;quot;Alpine&amp;quot; originally stood for &#039;&#039;&#039;A&#039;&#039;&#039; &#039;&#039;&#039;L&#039;&#039;&#039;inux &#039;&#039;&#039;P&#039;&#039;&#039;owered &#039;&#039;&#039;I&#039;&#039;&#039;ntegrated &#039;&#039;&#039;N&#039;&#039;&#039;etwork &#039;&#039;&#039;E&#039;&#039;&#039;ngine. The idea was that the distribution would be focused on networking, and be a tiny &amp;quot;engine&amp;quot; or framework, which larger systems could be built upon. Today, &amp;quot;Alpine&amp;quot; is nothing more than a name.&lt;br /&gt;
&lt;br /&gt;
= Who is working on Alpine Linux? =&lt;br /&gt;
&lt;br /&gt;
* Check the statistics of cgit, e. g. [http://git.alpinelinux.org/cgit/aports/stats/?period=y&amp;amp;ofs=50 aports]&lt;br /&gt;
&lt;br /&gt;
= Packages =&lt;br /&gt;
&lt;br /&gt;
* [https://www.ohloh.net/p/aports aports] statistics provided by Ohloh.&lt;br /&gt;
&lt;br /&gt;
== Packages per release ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Release&lt;br /&gt;
! Total&lt;br /&gt;
! normal&lt;br /&gt;
! dev&lt;br /&gt;
! doc&lt;br /&gt;
! libs&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.8&#039;&#039;&#039;&lt;br /&gt;
| 5674&lt;br /&gt;
| 3652&lt;br /&gt;
| 663&lt;br /&gt;
| 1272&lt;br /&gt;
| 87&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.7&#039;&#039;&#039;&lt;br /&gt;
| 5699&lt;br /&gt;
| 3629&lt;br /&gt;
| 683&lt;br /&gt;
| 1298&lt;br /&gt;
| 89&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.6&#039;&#039;&#039;&lt;br /&gt;
| 5548&lt;br /&gt;
| 3510&lt;br /&gt;
| 681&lt;br /&gt;
| 1271&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| 5643&lt;br /&gt;
| 3615&lt;br /&gt;
| 678&lt;br /&gt;
| 1264&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| 5231&lt;br /&gt;
| 3253&lt;br /&gt;
| 664&lt;br /&gt;
| 1235&lt;br /&gt;
| 79&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| 5314&lt;br /&gt;
| 3328&lt;br /&gt;
| 676&lt;br /&gt;
| 1239&lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| 5277&lt;br /&gt;
| 3343&lt;br /&gt;
| 684&lt;br /&gt;
| 1189&lt;br /&gt;
| 61&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| 4860&lt;br /&gt;
| 3075&lt;br /&gt;
| 620&lt;br /&gt;
| 1109&lt;br /&gt;
| 56&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| 4410&lt;br /&gt;
| 2752&lt;br /&gt;
| 578&lt;br /&gt;
| 1029&lt;br /&gt;
| 51&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.7&#039;&#039;&#039;&lt;br /&gt;
| 4205&lt;br /&gt;
| 2605&lt;br /&gt;
| 570&lt;br /&gt;
| 982&lt;br /&gt;
| 48&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.6&#039;&#039;&#039;&lt;br /&gt;
| 3918&lt;br /&gt;
| 2405&lt;br /&gt;
| 534&lt;br /&gt;
| 943&lt;br /&gt;
| 36&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.5&#039;&#039;&#039;&lt;br /&gt;
| 3676&lt;br /&gt;
| 2233&lt;br /&gt;
| 498&lt;br /&gt;
| 912&lt;br /&gt;
| 33&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.4&#039;&#039;&#039;&lt;br /&gt;
| 3376&lt;br /&gt;
| 2021&lt;br /&gt;
| 457&lt;br /&gt;
| 874&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| 3146&lt;br /&gt;
| 1866&lt;br /&gt;
| 435&lt;br /&gt;
| 827&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| 2608&lt;br /&gt;
| 1502&lt;br /&gt;
| 444&lt;br /&gt;
| 652&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| 2135&lt;br /&gt;
| 1222&lt;br /&gt;
| 365&lt;br /&gt;
| 547&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| 1983&lt;br /&gt;
| 1139&lt;br /&gt;
| 332&lt;br /&gt;
| 511&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.10&#039;&#039;&#039;&lt;br /&gt;
| 1639&lt;br /&gt;
| 918&lt;br /&gt;
| 282&lt;br /&gt;
| 438&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.9&#039;&#039;&#039;&lt;br /&gt;
| 958&lt;br /&gt;
| 549&lt;br /&gt;
| 139&lt;br /&gt;
| 269&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:201705-aports.png|center|Aports]]&lt;br /&gt;
&lt;br /&gt;
== Commit per year to aports ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2008 : 146&lt;br /&gt;
2009 : 3122&lt;br /&gt;
2010 : 3365&lt;br /&gt;
2011 : 5561&lt;br /&gt;
2012 : 5312&lt;br /&gt;
2013 : 6597&lt;br /&gt;
2014 : 5759&lt;br /&gt;
2015 : 7315&lt;br /&gt;
2016 : 9065&lt;br /&gt;
2017 : 11661&lt;br /&gt;
2018 : 5339 (so far)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;High score list&amp;quot; of committer to aports ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 26715	Natanael Copa&lt;br /&gt;
  2938	Francesco Colista&lt;br /&gt;
  2477	Carlo Landmeter&lt;br /&gt;
  2369	Timo Teräs&lt;br /&gt;
  2312	Leonardo Arena&lt;br /&gt;
  1971	Fabian Affolter&lt;br /&gt;
  1571	William Pitcock&lt;br /&gt;
  1350	Jakub Jirutka&lt;br /&gt;
  1349	Bartłomiej Piotrowski&lt;br /&gt;
  1037	Sören Tempel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== First commit to aports == &lt;br /&gt;
The first commit in git was made:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit 645531103b2ee8ef54d53a58eca3b52f7d3fb9ac&lt;br /&gt;
Author: Natanael Copa &amp;lt;ncopa@alpinelinux.org&amp;gt;&lt;br /&gt;
Date:   Sat Oct 18 09:16:29 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    added busybox&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=15314</id>
		<title>Alpine Linux:Trivia</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=15314"/>
		<updated>2018-07-01T15:28:27Z</updated>

		<summary type="html">&lt;p&gt;Fab: /* Packages per release */ update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains only irrelevant and unhelpful information and statistics about Alpine Linux. If you are going to prepare a talk about Alpine Linux, perhaps some information mentioned here can be used for the intro. &lt;br /&gt;
&lt;br /&gt;
= The first release =&lt;br /&gt;
* Archives going back to 1.1 are (currently) at http://ancient.alpinelinux.org &lt;br /&gt;
* First public mention of &amp;quot;Alpine Linux&amp;quot; is archived here: http://comments.gmane.org/gmane.linux.leaf.devel/1183 (2005)&lt;br /&gt;
* The first saved [[Release_Notes_for_Alpine_1.7.3|release notes]] were made for 1.7.3.&lt;br /&gt;
&lt;br /&gt;
= The name =&lt;br /&gt;
&amp;quot;Alpine&amp;quot; originally stood for &#039;&#039;&#039;A&#039;&#039;&#039; &#039;&#039;&#039;L&#039;&#039;&#039;inux &#039;&#039;&#039;P&#039;&#039;&#039;owered &#039;&#039;&#039;I&#039;&#039;&#039;ntegrated &#039;&#039;&#039;N&#039;&#039;&#039;etwork &#039;&#039;&#039;E&#039;&#039;&#039;ngine. The idea was that the distribution would be focused on networking, and be a tiny &amp;quot;engine&amp;quot; or framework, which larger systems could be built upon. Today, &amp;quot;Alpine&amp;quot; is nothing more than a name.&lt;br /&gt;
&lt;br /&gt;
= Who is working on Alpine Linux? =&lt;br /&gt;
&lt;br /&gt;
* Check the statistics of cgit, e. g. [http://git.alpinelinux.org/cgit/aports/stats/?period=y&amp;amp;ofs=50 aports]&lt;br /&gt;
&lt;br /&gt;
= Packages =&lt;br /&gt;
&lt;br /&gt;
* [https://www.ohloh.net/p/aports aports] statistics provided by Ohloh.&lt;br /&gt;
&lt;br /&gt;
== Packages per release ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Release&lt;br /&gt;
! Total&lt;br /&gt;
! normal&lt;br /&gt;
! dev&lt;br /&gt;
! doc&lt;br /&gt;
! libs&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.8&#039;&#039;&#039;&lt;br /&gt;
| 5674&lt;br /&gt;
| 3652&lt;br /&gt;
| 663&lt;br /&gt;
| 1272&lt;br /&gt;
| 87&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.7&#039;&#039;&#039;&lt;br /&gt;
| 5699&lt;br /&gt;
| 3629&lt;br /&gt;
| 683&lt;br /&gt;
| 1298&lt;br /&gt;
| 89&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.6&#039;&#039;&#039;&lt;br /&gt;
| 5548&lt;br /&gt;
| 3510&lt;br /&gt;
| 681&lt;br /&gt;
| 1271&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| 5643&lt;br /&gt;
| 3615&lt;br /&gt;
| 678&lt;br /&gt;
| 1264&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| 5231&lt;br /&gt;
| 3253&lt;br /&gt;
| 664&lt;br /&gt;
| 1235&lt;br /&gt;
| 79&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| 5314&lt;br /&gt;
| 3328&lt;br /&gt;
| 676&lt;br /&gt;
| 1239&lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| 5277&lt;br /&gt;
| 3343&lt;br /&gt;
| 684&lt;br /&gt;
| 1189&lt;br /&gt;
| 61&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| 4860&lt;br /&gt;
| 3075&lt;br /&gt;
| 620&lt;br /&gt;
| 1109&lt;br /&gt;
| 56&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| 4410&lt;br /&gt;
| 2752&lt;br /&gt;
| 578&lt;br /&gt;
| 1029&lt;br /&gt;
| 51&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.7&#039;&#039;&#039;&lt;br /&gt;
| 4205&lt;br /&gt;
| 2605&lt;br /&gt;
| 570&lt;br /&gt;
| 982&lt;br /&gt;
| 48&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.6&#039;&#039;&#039;&lt;br /&gt;
| 3918&lt;br /&gt;
| 2405&lt;br /&gt;
| 534&lt;br /&gt;
| 943&lt;br /&gt;
| 36&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.5&#039;&#039;&#039;&lt;br /&gt;
| 3676&lt;br /&gt;
| 2233&lt;br /&gt;
| 498&lt;br /&gt;
| 912&lt;br /&gt;
| 33&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.4&#039;&#039;&#039;&lt;br /&gt;
| 3376&lt;br /&gt;
| 2021&lt;br /&gt;
| 457&lt;br /&gt;
| 874&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| 3146&lt;br /&gt;
| 1866&lt;br /&gt;
| 435&lt;br /&gt;
| 827&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| 2608&lt;br /&gt;
| 1502&lt;br /&gt;
| 444&lt;br /&gt;
| 652&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| 2135&lt;br /&gt;
| 1222&lt;br /&gt;
| 365&lt;br /&gt;
| 547&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| 1983&lt;br /&gt;
| 1139&lt;br /&gt;
| 332&lt;br /&gt;
| 511&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.10&#039;&#039;&#039;&lt;br /&gt;
| 1639&lt;br /&gt;
| 918&lt;br /&gt;
| 282&lt;br /&gt;
| 438&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.9&#039;&#039;&#039;&lt;br /&gt;
| 958&lt;br /&gt;
| 549&lt;br /&gt;
| 139&lt;br /&gt;
| 269&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:201705-aports.png|center|Aports]]&lt;br /&gt;
&lt;br /&gt;
== Commit per year to aports ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2008 : 146&lt;br /&gt;
2009 : 3122&lt;br /&gt;
2010 : 3365&lt;br /&gt;
2011 : 5561&lt;br /&gt;
2012 : 5312&lt;br /&gt;
2013 : 6597&lt;br /&gt;
2014 : 5759&lt;br /&gt;
2015 : 7315&lt;br /&gt;
2016 : 9065&lt;br /&gt;
2017 : 4901 (so far)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;High score list&amp;quot; of committer to aports ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 26715	Natanael Copa&lt;br /&gt;
  2938	Francesco Colista&lt;br /&gt;
  2477	Carlo Landmeter&lt;br /&gt;
  2369	Timo Teräs&lt;br /&gt;
  2312	Leonardo Arena&lt;br /&gt;
  1971	Fabian Affolter&lt;br /&gt;
  1571	William Pitcock&lt;br /&gt;
  1350	Jakub Jirutka&lt;br /&gt;
  1349	Bartłomiej Piotrowski&lt;br /&gt;
  1037	Sören Tempel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== First commit to aports == &lt;br /&gt;
The first commit in git was made:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit 645531103b2ee8ef54d53a58eca3b52f7d3fb9ac&lt;br /&gt;
Author: Natanael Copa &amp;lt;ncopa@alpinelinux.org&amp;gt;&lt;br /&gt;
Date:   Sat Oct 18 09:16:29 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    added busybox&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Fab&amp;diff=15313</id>
		<title>User:Fab</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Fab&amp;diff=15313"/>
		<updated>2018-07-01T15:27:07Z</updated>

		<summary type="html">&lt;p&gt;Fab: Update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My Name is Fabian Affolter and I&#039;m living in Berne/Switzerland. One of my passions is free software and open source. I&#039;m a long time contributor to various free and open source software projects. A big bunch of my spare time is spent on the [https://fedoraproject.org Fedora Project] and [https://home-assistant.io Home Assistant].  &lt;br /&gt;
&lt;br /&gt;
By the way, my first system was a Amiga 2000 but this is a long long time ago ;-). &lt;br /&gt;
&lt;br /&gt;
My area of interest are computer aided design (CAD), computer algebra system (CAS), provisioning, automatic configuration management, version control systems, software packaging and microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Apart from spending time at the computer, I like to read, to listen to music and to hike in the Swiss mountains.&lt;br /&gt;
&lt;br /&gt;
== more personal stuff ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039; Location&#039;&#039;&#039;:  [http://en.wikipedia.org/wiki/Berne Berne]  [http://de.wikipedia.org/wiki/Bern Bern], [http://en.wikipedia.org/wiki/Switzerland Switzerland] [http://de.wikipedia.org/wiki/Schweiz Schweiz]&lt;br /&gt;
* &#039;&#039;&#039; Time zone&#039;&#039;&#039; :  UTC +01:00 (CET) or UTC +02:00 (CEST)&lt;br /&gt;
* &#039;&#039;&#039; Languages&#039;&#039;&#039; :  German (it&#039;s more Swiss German), English, and French&lt;br /&gt;
* &#039;&#039;&#039; Profession&#039;&#039;&#039; :  Senior Engineer, B.Sc. [http://www.ti.bfh.ch/en/bachelor/mechanical.html ME] and [http://www.ti.bfh.ch/en/bachelor/computer_science.html CS] [http://www.ti.bfh.ch/ Berne University of Applied Sciences] - Engineering and Information Technology&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Postal address&#039;&#039;&#039; :&lt;br /&gt;
::ask for the street&lt;br /&gt;
::CH-3000 Berne&lt;br /&gt;
::Switzerland&lt;br /&gt;
* &#039;&#039;&#039;Blog&#039;&#039;&#039; : [http://blog.fabian-affolter.ch/ My blog] (be aware...some parts are in german)&lt;br /&gt;
* &#039;&#039;&#039;Websites&#039;&#039;&#039;: [http://fabian-affolter.ch/ fabian-affolter.ch]&lt;br /&gt;
* &#039;&#039;&#039;Email&#039;&#039;&#039;:  [mailto:fabian%affolter-engineering%2ench fabian AT affolter-engineering DOT ch]&lt;br /&gt;
* &#039;&#039;&#039;GPG/PGP&#039;&#039;&#039; : [http://pgp.mit.edu:11371/pks/lookup?op=get&amp;amp;search=0x36A4397F 0x36A4397F] &lt;br /&gt;
* &#039;&#039;&#039;Jabber&#039;&#039;&#039; : fab AT swissjabber DOT dk&lt;br /&gt;
* &#039;&#039;&#039;IRC&#039;&#039;&#039; : faffolter (or fabian_a) on FreeNode&lt;br /&gt;
&lt;br /&gt;
== Misc ==&lt;br /&gt;
* [[Alpine_Security_and_Rescue|Alpine Security Flavor]]&lt;br /&gt;
* [[User:Fab/Personal_aports_repo|Personal aport repo]]&lt;br /&gt;
* [[User:Fab/Stats|Stats]]&lt;br /&gt;
* [[User:Fab/Cleanup|Cleanup]]&lt;br /&gt;
* [[User:Fab/msg.alpinelinux.org|msg.alpinelinux.org]]&lt;br /&gt;
* [[User:Fab/Notifications|Notifications]]&lt;br /&gt;
&lt;br /&gt;
=== Configuration management ===&lt;br /&gt;
&lt;br /&gt;
* [[User:Fab/Ansible|Ansible]]&lt;br /&gt;
* [[User:Fab/Bcfg2|Bcfg2]]&lt;br /&gt;
* [[User:Fab/Salt|Salt]]&lt;br /&gt;
&lt;br /&gt;
=== Other docs ===&lt;br /&gt;
* [[User:Fab/Nodejs|Node.js]]&lt;br /&gt;
* [[User:Fab/Ocr|OCR]]&lt;br /&gt;
* [[User:Fab/Tryton|Tryton]]&lt;br /&gt;
* [[User:Fab/Metasploit|Metasploit]]&lt;br /&gt;
* [[User:Fab/Beeswarm|Beeswarm]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=APKBUILD_examples:Python&amp;diff=14140</id>
		<title>APKBUILD examples:Python</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=APKBUILD_examples:Python&amp;diff=14140"/>
		<updated>2017-11-17T14:48:00Z</updated>

		<summary type="html">&lt;p&gt;Fab: add check()&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A lot of Python packages use the &#039;&#039;setuptools&#039;&#039; or &#039;&#039;distutils&#039;&#039; framework. This mean that the build() and the package() section looks a bit different compared to an application which uses &#039;&#039;make&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Considerations ==&lt;br /&gt;
&lt;br /&gt;
=== Python 2 vs. Python 3 ===&lt;br /&gt;
&lt;br /&gt;
Python 3 should be the default option.&lt;br /&gt;
If the project support both Python 2 and Python 3, then the Alpine package may provide both variants as &#039;&#039;py2-&#039;&#039; and &#039;&#039;py3-&#039;&#039; subpackages.&lt;br /&gt;
You may omit &#039;&#039;py2&#039;&#039; variant, but never omit &#039;&#039;py3&#039;&#039; variant if it&#039;s supported by the project.&lt;br /&gt;
&lt;br /&gt;
=== pkgname ===&lt;br /&gt;
&lt;br /&gt;
Package name for a Python &#039;&#039;library&#039;&#039; must be prefixed with &#039;&#039;py-&#039;&#039;, &#039;&#039;py2-&#039;&#039;, or &#039;&#039;py3-&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
; py- : Use if the project supports both Python 2 and Python 3, even if it does not support Python 3 yet, but may in future.&lt;br /&gt;
; py2- : TODO&lt;br /&gt;
; py3- : Use if the project does not support Python 2.&lt;br /&gt;
&lt;br /&gt;
There’s no exact rule if the prefix should be used for tools and applications written in Python, it varies.&lt;br /&gt;
&lt;br /&gt;
=== arch ===&lt;br /&gt;
&lt;br /&gt;
; noarch : Use for pure Python packages (i.e. without compiled code). Also add python2, or python3 to &amp;lt;tt&amp;gt;depends=&amp;lt;/tt&amp;gt;.&lt;br /&gt;
; all (and others) :  Use for packages with native extensions (i.e. with compiled code). &#039;&#039;&#039;Do not&#039;&#039;&#039; add python2/python3 to &amp;lt;tt&amp;gt;depends=&amp;lt;/tt&amp;gt; (it&#039;s auto-detected via dynamic linking to python library).&lt;br /&gt;
&lt;br /&gt;
=== source ===&lt;br /&gt;
&lt;br /&gt;
Basically all Python are published in [https://pypi.python.org/pypi PyPI] (the Python Package Index).&lt;br /&gt;
If the package has a source tarball available in PyPI (that’s true for most packages), you should reference it in &amp;lt;tt&amp;gt;source=&amp;lt;/tt&amp;gt; as:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
https://files.pythonhosted.org/packages/source/${_pkgname:0:1}/$_pkgname/$_pkgname-$pkgver.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;tt&amp;gt;_pkgname&amp;lt;/tt&amp;gt; is a real name of the Python package.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&lt;br /&gt;
Comments marked with &amp;lt;tt&amp;gt;##&amp;lt;/tt&amp;gt; should not be copied into final APKBUILD!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Package for single Python version ===&lt;br /&gt;
&lt;br /&gt;
If the project supports only Python 3 (or 2), then the APKBUILD is very simple:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pkgname=&amp;quot;py3-foo&amp;quot;&lt;br /&gt;
_pkgname=&amp;quot;foo&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
depends=&amp;quot;python3&amp;quot;&lt;br /&gt;
makedepends=&amp;quot;python3-dev&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
build() {&lt;br /&gt;
	cd &amp;quot;$builddir&amp;quot;&lt;br /&gt;
	python3 setup.py build&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
check() {&lt;br /&gt;
	cd &amp;quot;$builddir&amp;quot;&lt;br /&gt;
	python3 setup.py test&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
package() {&lt;br /&gt;
	cd &amp;quot;$builddir&amp;quot;&lt;br /&gt;
	python3 setup.py install --prefix=/usr --root=&amp;quot;$pkgdir&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Multiversion package without executables ===&lt;br /&gt;
&lt;br /&gt;
Use this variant if the package does not install any files outside of &amp;lt;tt&amp;gt;/usr/lib/pythonX.Y/site-packages&amp;lt;/tt&amp;gt;.&lt;br /&gt;
If the build modifies source code, e.g. using 2to3, read the last section!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pkgname=&amp;quot;py-foo&amp;quot;&lt;br /&gt;
_pkgname=&amp;quot;PyFoo&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
depends=&amp;quot;py-bar py-baz&amp;quot;&lt;br /&gt;
makedepends=&amp;quot;python2-dev python3-dev py-setuptools&amp;quot;&lt;br /&gt;
subpackages=&amp;quot;py2-${pkgname#py-}:_py2 py3-${pkgname#py-}:_py3&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
build() {&lt;br /&gt;
	cd &amp;quot;$builddir&amp;quot;&lt;br /&gt;
	python2 setup.py build&lt;br /&gt;
	python3 setup.py build&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
check() {&lt;br /&gt;
	cd &amp;quot;$builddir&amp;quot;&lt;br /&gt;
	python2 setup.py test&lt;br /&gt;
	python3 setup.py test&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
package() {&lt;br /&gt;
	mkdir -p &amp;quot;$pkgdir&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
_py2() {&lt;br /&gt;
	replaces=&amp;quot;$pkgname&amp;quot;&lt;br /&gt;
	depends=&amp;quot;${depends//py-/py2-}&amp;quot;  ## remove if there are no common Python dependencies&lt;br /&gt;
	_py python2&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
_py3() {&lt;br /&gt;
	depends=&amp;quot;${depends//py-/py3-}&amp;quot;  ## remove if there are no common Python dependencies&lt;br /&gt;
	_py python3&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
_py() {&lt;br /&gt;
	local python=&amp;quot;$1&amp;quot;&lt;br /&gt;
	pkgdesc=&amp;quot;$pkgdesc (for $python)&amp;quot;&lt;br /&gt;
	depends=&amp;quot;$depends $python&amp;quot;  ## remove if arch isn&#039;t noarch&lt;br /&gt;
	install_if=&amp;quot;$pkgname=$pkgver-r$pkgrel $python&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	cd &amp;quot;$builddir&amp;quot;&lt;br /&gt;
	$python setup.py install --prefix=/usr --root=&amp;quot;$subpkgdir&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Multiversion package with executables ===&lt;br /&gt;
&lt;br /&gt;
Use this variant if the packages installs some executables into &amp;lt;tt&amp;gt;/usr/bin&amp;lt;/tt&amp;gt;.&lt;br /&gt;
If the build modifies source code, e.g. using 2to3, read the last section!&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; This is just mere workaround that will not be needed in future once we add needed features to apk.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pkgname=&amp;quot;py-foo&amp;quot;&lt;br /&gt;
_pkgname=&amp;quot;PyFoo&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
depends=&amp;quot;py-bar py-baz&amp;quot;&lt;br /&gt;
makedepends=&amp;quot;python2-dev python3-dev py-setuptools&amp;quot;&lt;br /&gt;
subpackages=&amp;quot;py2-${pkgname#py-}:_py2 py3-${pkgname#py-}:_py3&amp;quot;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
build() {&lt;br /&gt;
	cd &amp;quot;$builddir&amp;quot;&lt;br /&gt;
	python2 setup.py build&lt;br /&gt;
	python3 setup.py build&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
package() {&lt;br /&gt;
	mkdir -p &amp;quot;$pkgdir&amp;quot;/usr/bin&lt;br /&gt;
&lt;br /&gt;
	# Create unsuffixed symlinks for executables from py3 subpackage.&lt;br /&gt;
	local name; for name in foo bar baz; do&lt;br /&gt;
		ln -s $name-3 &amp;quot;$pkgdir&amp;quot;/usr/bin/$name&lt;br /&gt;
	done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
_py2() {&lt;br /&gt;
	replaces=&amp;quot;$pkgname&amp;quot;&lt;br /&gt;
	depends=&amp;quot;${depends//py-/py2-}&amp;quot;  ## remove if there are no common Python dependencies&lt;br /&gt;
	_py python2&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
_py3() {&lt;br /&gt;
	depends=&amp;quot;${depends//py-/py3-}&amp;quot;  ## remove if there are no common Python dependencies&lt;br /&gt;
	_py python3&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
_py() {&lt;br /&gt;
	local python=&amp;quot;$1&amp;quot;&lt;br /&gt;
	local pyver=&amp;quot;${1:6:1}&amp;quot;&lt;br /&gt;
	pkgdesc=&amp;quot;$pkgdesc (for $python)&amp;quot;&lt;br /&gt;
	depends=&amp;quot;$depends $python&amp;quot;  ## remove if arch isn&#039;t noarch&lt;br /&gt;
	install_if=&amp;quot;$pkgname=$pkgver-r$pkgrel $python&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	cd &amp;quot;$builddir&amp;quot;&lt;br /&gt;
	$python setup.py install --prefix=/usr --root=&amp;quot;$subpkgdir&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	# Add version suffix to executable files.&lt;br /&gt;
	local path; for path in &amp;quot;$subpkgdir&amp;quot;/usr/bin/*; do&lt;br /&gt;
		mv &amp;quot;$path&amp;quot; &amp;quot;$path-$pyver&amp;quot;&lt;br /&gt;
	done&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Multiversion package for project using 2to3 ===&lt;br /&gt;
&lt;br /&gt;
Some Python projects use 2to3 (or similar tools) during build phase to make the code-base compatible with Python 3.&lt;br /&gt;
Since it modifies sources during build, you cannot run &amp;lt;tt&amp;gt;setup.py build&amp;lt;/tt&amp;gt; with python2 and python3 one after another with the same source files.&lt;br /&gt;
You must duplicate the buildir and run them separately.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
prepare() {&lt;br /&gt;
	default_prepare&lt;br /&gt;
&lt;br /&gt;
	# Soure files are modified during build with 2to3 tool, so we cannot&lt;br /&gt;
	# build it for both Python versions in the same location.&lt;br /&gt;
	local python; for python in python2 python3; do&lt;br /&gt;
		cp -r &amp;quot;$builddir&amp;quot; &amp;quot;$builddir-$python&amp;quot;&lt;br /&gt;
	done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
build() {&lt;br /&gt;
	local python; for python in python2 python3; do&lt;br /&gt;
		cd &amp;quot;$builddir&amp;quot;-$python&lt;br /&gt;
		$python setup.py build&lt;br /&gt;
	done&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
_py() {&lt;br /&gt;
	...&lt;br /&gt;
&lt;br /&gt;
	cd &amp;quot;$builddir&amp;quot;-$python&lt;br /&gt;
	$python setup.py install --prefix=/usr --root=&amp;quot;$subpkgdir&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]] [[Category:Python]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=13559</id>
		<title>Alpine Linux:Trivia</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=13559"/>
		<updated>2017-05-31T07:09:12Z</updated>

		<summary type="html">&lt;p&gt;Fab: /* Packages per release */ new graph&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains only irrelevant and unhelpful information and statistics about Alpine Linux. If you are going to prepare a talk about Alpine Linux, perhaps some information mentioned here can be used for the intro. &lt;br /&gt;
&lt;br /&gt;
= The first release =&lt;br /&gt;
* Archives going back to 1.1 are (currently) at http://ancient.alpinelinux.org &lt;br /&gt;
* First public mention of &amp;quot;Alpine Linux&amp;quot; is archived here: http://comments.gmane.org/gmane.linux.leaf.devel/1183 (2005)&lt;br /&gt;
* The first saved [[Release_Notes_for_Alpine_1.7.3|release notes]] were made for 1.7.3.&lt;br /&gt;
&lt;br /&gt;
= The name =&lt;br /&gt;
&amp;quot;Alpine&amp;quot; originally stood for &#039;&#039;&#039;A&#039;&#039;&#039; &#039;&#039;&#039;L&#039;&#039;&#039;inux &#039;&#039;&#039;P&#039;&#039;&#039;owered &#039;&#039;&#039;I&#039;&#039;&#039;ntegrated &#039;&#039;&#039;N&#039;&#039;&#039;etwork &#039;&#039;&#039;E&#039;&#039;&#039;ngine. The idea was that the distribution would be focused on networking, and be a tiny &amp;quot;engine&amp;quot; or framework, which larger systems could be built upon. Today, &amp;quot;Alpine&amp;quot; is nothing more than a name.&lt;br /&gt;
&lt;br /&gt;
= Who is working on Alpine Linux? =&lt;br /&gt;
&lt;br /&gt;
* Check the statistics of cgit, e. g. [http://git.alpinelinux.org/cgit/aports/stats/?period=y&amp;amp;ofs=50 aports]&lt;br /&gt;
&lt;br /&gt;
= Packages =&lt;br /&gt;
&lt;br /&gt;
* [https://www.ohloh.net/p/aports aports] statistics provided by Ohloh.&lt;br /&gt;
&lt;br /&gt;
== Packages per release ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Release&lt;br /&gt;
! Total&lt;br /&gt;
! normal&lt;br /&gt;
! dev&lt;br /&gt;
! doc&lt;br /&gt;
! libs&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.6&#039;&#039;&#039;&lt;br /&gt;
| 5548&lt;br /&gt;
| 3510&lt;br /&gt;
| 681&lt;br /&gt;
| 1271&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| 5643&lt;br /&gt;
| 3615&lt;br /&gt;
| 678&lt;br /&gt;
| 1264&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| 5231&lt;br /&gt;
| 3253&lt;br /&gt;
| 664&lt;br /&gt;
| 1235&lt;br /&gt;
| 79&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| 5314&lt;br /&gt;
| 3328&lt;br /&gt;
| 676&lt;br /&gt;
| 1239&lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| 5277&lt;br /&gt;
| 3343&lt;br /&gt;
| 684&lt;br /&gt;
| 1189&lt;br /&gt;
| 61&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| 4860&lt;br /&gt;
| 3075&lt;br /&gt;
| 620&lt;br /&gt;
| 1109&lt;br /&gt;
| 56&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| 4410&lt;br /&gt;
| 2752&lt;br /&gt;
| 578&lt;br /&gt;
| 1029&lt;br /&gt;
| 51&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.7&#039;&#039;&#039;&lt;br /&gt;
| 4205&lt;br /&gt;
| 2605&lt;br /&gt;
| 570&lt;br /&gt;
| 982&lt;br /&gt;
| 48&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.6&#039;&#039;&#039;&lt;br /&gt;
| 3918&lt;br /&gt;
| 2405&lt;br /&gt;
| 534&lt;br /&gt;
| 943&lt;br /&gt;
| 36&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.5&#039;&#039;&#039;&lt;br /&gt;
| 3676&lt;br /&gt;
| 2233&lt;br /&gt;
| 498&lt;br /&gt;
| 912&lt;br /&gt;
| 33&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.4&#039;&#039;&#039;&lt;br /&gt;
| 3376&lt;br /&gt;
| 2021&lt;br /&gt;
| 457&lt;br /&gt;
| 874&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| 3146&lt;br /&gt;
| 1866&lt;br /&gt;
| 435&lt;br /&gt;
| 827&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| 2608&lt;br /&gt;
| 1502&lt;br /&gt;
| 444&lt;br /&gt;
| 652&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| 2135&lt;br /&gt;
| 1222&lt;br /&gt;
| 365&lt;br /&gt;
| 547&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| 1983&lt;br /&gt;
| 1139&lt;br /&gt;
| 332&lt;br /&gt;
| 511&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.10&#039;&#039;&#039;&lt;br /&gt;
| 1639&lt;br /&gt;
| 918&lt;br /&gt;
| 282&lt;br /&gt;
| 438&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.9&#039;&#039;&#039;&lt;br /&gt;
| 958&lt;br /&gt;
| 549&lt;br /&gt;
| 139&lt;br /&gt;
| 269&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:201705-aports.png|center|Aports]]&lt;br /&gt;
&lt;br /&gt;
== Commit per year to aports ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2008 : 146&lt;br /&gt;
2009 : 3122&lt;br /&gt;
2010 : 3365&lt;br /&gt;
2011 : 5561&lt;br /&gt;
2012 : 5312&lt;br /&gt;
2013 : 6597&lt;br /&gt;
2014 : 5759&lt;br /&gt;
2015 : 7315&lt;br /&gt;
2016 : 9065&lt;br /&gt;
2017 : 4901 (so far)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;High score list&amp;quot; of committer to aports ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 26715	Natanael Copa&lt;br /&gt;
  2938	Francesco Colista&lt;br /&gt;
  2477	Carlo Landmeter&lt;br /&gt;
  2369	Timo Teräs&lt;br /&gt;
  2312	Leonardo Arena&lt;br /&gt;
  1971	Fabian Affolter&lt;br /&gt;
  1571	William Pitcock&lt;br /&gt;
  1350	Jakub Jirutka&lt;br /&gt;
  1349	Bartłomiej Piotrowski&lt;br /&gt;
  1037	Sören Tempel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== First commit to aports == &lt;br /&gt;
The first commit in git was made:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit 645531103b2ee8ef54d53a58eca3b52f7d3fb9ac&lt;br /&gt;
Author: Natanael Copa &amp;lt;ncopa@alpinelinux.org&amp;gt;&lt;br /&gt;
Date:   Sat Oct 18 09:16:29 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    added busybox&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=File:201705-aports.png&amp;diff=13558</id>
		<title>File:201705-aports.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=File:201705-aports.png&amp;diff=13558"/>
		<updated>2017-05-31T07:08:24Z</updated>

		<summary type="html">&lt;p&gt;Fab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=13557</id>
		<title>Alpine Linux:Trivia</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=13557"/>
		<updated>2017-05-31T07:05:52Z</updated>

		<summary type="html">&lt;p&gt;Fab: /* Packages per release */ update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains only irrelevant and unhelpful information and statistics about Alpine Linux. If you are going to prepare a talk about Alpine Linux, perhaps some information mentioned here can be used for the intro. &lt;br /&gt;
&lt;br /&gt;
= The first release =&lt;br /&gt;
* Archives going back to 1.1 are (currently) at http://ancient.alpinelinux.org &lt;br /&gt;
* First public mention of &amp;quot;Alpine Linux&amp;quot; is archived here: http://comments.gmane.org/gmane.linux.leaf.devel/1183 (2005)&lt;br /&gt;
* The first saved [[Release_Notes_for_Alpine_1.7.3|release notes]] were made for 1.7.3.&lt;br /&gt;
&lt;br /&gt;
= The name =&lt;br /&gt;
&amp;quot;Alpine&amp;quot; originally stood for &#039;&#039;&#039;A&#039;&#039;&#039; &#039;&#039;&#039;L&#039;&#039;&#039;inux &#039;&#039;&#039;P&#039;&#039;&#039;owered &#039;&#039;&#039;I&#039;&#039;&#039;ntegrated &#039;&#039;&#039;N&#039;&#039;&#039;etwork &#039;&#039;&#039;E&#039;&#039;&#039;ngine. The idea was that the distribution would be focused on networking, and be a tiny &amp;quot;engine&amp;quot; or framework, which larger systems could be built upon. Today, &amp;quot;Alpine&amp;quot; is nothing more than a name.&lt;br /&gt;
&lt;br /&gt;
= Who is working on Alpine Linux? =&lt;br /&gt;
&lt;br /&gt;
* Check the statistics of cgit, e. g. [http://git.alpinelinux.org/cgit/aports/stats/?period=y&amp;amp;ofs=50 aports]&lt;br /&gt;
&lt;br /&gt;
= Packages =&lt;br /&gt;
&lt;br /&gt;
* [https://www.ohloh.net/p/aports aports] statistics provided by Ohloh.&lt;br /&gt;
&lt;br /&gt;
== Packages per release ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Release&lt;br /&gt;
! Total&lt;br /&gt;
! normal&lt;br /&gt;
! dev&lt;br /&gt;
! doc&lt;br /&gt;
! libs&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.6&#039;&#039;&#039;&lt;br /&gt;
| 5548&lt;br /&gt;
| 3510&lt;br /&gt;
| 681&lt;br /&gt;
| 1271&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| 5643&lt;br /&gt;
| 3615&lt;br /&gt;
| 678&lt;br /&gt;
| 1264&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| 5231&lt;br /&gt;
| 3253&lt;br /&gt;
| 664&lt;br /&gt;
| 1235&lt;br /&gt;
| 79&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| 5314&lt;br /&gt;
| 3328&lt;br /&gt;
| 676&lt;br /&gt;
| 1239&lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| 5277&lt;br /&gt;
| 3343&lt;br /&gt;
| 684&lt;br /&gt;
| 1189&lt;br /&gt;
| 61&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| 4860&lt;br /&gt;
| 3075&lt;br /&gt;
| 620&lt;br /&gt;
| 1109&lt;br /&gt;
| 56&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| 4410&lt;br /&gt;
| 2752&lt;br /&gt;
| 578&lt;br /&gt;
| 1029&lt;br /&gt;
| 51&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.7&#039;&#039;&#039;&lt;br /&gt;
| 4205&lt;br /&gt;
| 2605&lt;br /&gt;
| 570&lt;br /&gt;
| 982&lt;br /&gt;
| 48&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.6&#039;&#039;&#039;&lt;br /&gt;
| 3918&lt;br /&gt;
| 2405&lt;br /&gt;
| 534&lt;br /&gt;
| 943&lt;br /&gt;
| 36&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.5&#039;&#039;&#039;&lt;br /&gt;
| 3676&lt;br /&gt;
| 2233&lt;br /&gt;
| 498&lt;br /&gt;
| 912&lt;br /&gt;
| 33&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.4&#039;&#039;&#039;&lt;br /&gt;
| 3376&lt;br /&gt;
| 2021&lt;br /&gt;
| 457&lt;br /&gt;
| 874&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| 3146&lt;br /&gt;
| 1866&lt;br /&gt;
| 435&lt;br /&gt;
| 827&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| 2608&lt;br /&gt;
| 1502&lt;br /&gt;
| 444&lt;br /&gt;
| 652&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| 2135&lt;br /&gt;
| 1222&lt;br /&gt;
| 365&lt;br /&gt;
| 547&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| 1983&lt;br /&gt;
| 1139&lt;br /&gt;
| 332&lt;br /&gt;
| 511&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.10&#039;&#039;&#039;&lt;br /&gt;
| 1639&lt;br /&gt;
| 918&lt;br /&gt;
| 282&lt;br /&gt;
| 438&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.9&#039;&#039;&#039;&lt;br /&gt;
| 958&lt;br /&gt;
| 549&lt;br /&gt;
| 139&lt;br /&gt;
| 269&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:201612-aports.png|center|Aports]]&lt;br /&gt;
&lt;br /&gt;
== Commit per year to aports ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2008 : 146&lt;br /&gt;
2009 : 3122&lt;br /&gt;
2010 : 3365&lt;br /&gt;
2011 : 5561&lt;br /&gt;
2012 : 5312&lt;br /&gt;
2013 : 6597&lt;br /&gt;
2014 : 5759&lt;br /&gt;
2015 : 7315&lt;br /&gt;
2016 : 9065&lt;br /&gt;
2017 : 4901 (so far)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;High score list&amp;quot; of committer to aports ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 26715	Natanael Copa&lt;br /&gt;
  2938	Francesco Colista&lt;br /&gt;
  2477	Carlo Landmeter&lt;br /&gt;
  2369	Timo Teräs&lt;br /&gt;
  2312	Leonardo Arena&lt;br /&gt;
  1971	Fabian Affolter&lt;br /&gt;
  1571	William Pitcock&lt;br /&gt;
  1350	Jakub Jirutka&lt;br /&gt;
  1349	Bartłomiej Piotrowski&lt;br /&gt;
  1037	Sören Tempel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== First commit to aports == &lt;br /&gt;
The first commit in git was made:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit 645531103b2ee8ef54d53a58eca3b52f7d3fb9ac&lt;br /&gt;
Author: Natanael Copa &amp;lt;ncopa@alpinelinux.org&amp;gt;&lt;br /&gt;
Date:   Sat Oct 18 09:16:29 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    added busybox&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=13556</id>
		<title>Alpine Linux:Trivia</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=13556"/>
		<updated>2017-05-31T07:03:03Z</updated>

		<summary type="html">&lt;p&gt;Fab: /* Commit per year to aports */ update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains only irrelevant and unhelpful information and statistics about Alpine Linux. If you are going to prepare a talk about Alpine Linux, perhaps some information mentioned here can be used for the intro. &lt;br /&gt;
&lt;br /&gt;
= The first release =&lt;br /&gt;
* Archives going back to 1.1 are (currently) at http://ancient.alpinelinux.org &lt;br /&gt;
* First public mention of &amp;quot;Alpine Linux&amp;quot; is archived here: http://comments.gmane.org/gmane.linux.leaf.devel/1183 (2005)&lt;br /&gt;
* The first saved [[Release_Notes_for_Alpine_1.7.3|release notes]] were made for 1.7.3.&lt;br /&gt;
&lt;br /&gt;
= The name =&lt;br /&gt;
&amp;quot;Alpine&amp;quot; originally stood for &#039;&#039;&#039;A&#039;&#039;&#039; &#039;&#039;&#039;L&#039;&#039;&#039;inux &#039;&#039;&#039;P&#039;&#039;&#039;owered &#039;&#039;&#039;I&#039;&#039;&#039;ntegrated &#039;&#039;&#039;N&#039;&#039;&#039;etwork &#039;&#039;&#039;E&#039;&#039;&#039;ngine. The idea was that the distribution would be focused on networking, and be a tiny &amp;quot;engine&amp;quot; or framework, which larger systems could be built upon. Today, &amp;quot;Alpine&amp;quot; is nothing more than a name.&lt;br /&gt;
&lt;br /&gt;
= Who is working on Alpine Linux? =&lt;br /&gt;
&lt;br /&gt;
* Check the statistics of cgit, e. g. [http://git.alpinelinux.org/cgit/aports/stats/?period=y&amp;amp;ofs=50 aports]&lt;br /&gt;
&lt;br /&gt;
= Packages =&lt;br /&gt;
&lt;br /&gt;
* [https://www.ohloh.net/p/aports aports] statistics provided by Ohloh.&lt;br /&gt;
&lt;br /&gt;
== Packages per release ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Release&lt;br /&gt;
! Total&lt;br /&gt;
! normal&lt;br /&gt;
! dev&lt;br /&gt;
! doc&lt;br /&gt;
! libs&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| 5643&lt;br /&gt;
| 3615&lt;br /&gt;
| 678&lt;br /&gt;
| 1264&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| 5231&lt;br /&gt;
| 3253&lt;br /&gt;
| 664&lt;br /&gt;
| 1235&lt;br /&gt;
| 79&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| 5314&lt;br /&gt;
| 3328&lt;br /&gt;
| 676&lt;br /&gt;
| 1239&lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| 5277&lt;br /&gt;
| 3343&lt;br /&gt;
| 684&lt;br /&gt;
| 1189&lt;br /&gt;
| 61&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| 4860&lt;br /&gt;
| 3075&lt;br /&gt;
| 620&lt;br /&gt;
| 1109&lt;br /&gt;
| 56&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| 4410&lt;br /&gt;
| 2752&lt;br /&gt;
| 578&lt;br /&gt;
| 1029&lt;br /&gt;
| 51&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.7&#039;&#039;&#039;&lt;br /&gt;
| 4205&lt;br /&gt;
| 2605&lt;br /&gt;
| 570&lt;br /&gt;
| 982&lt;br /&gt;
| 48&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.6&#039;&#039;&#039;&lt;br /&gt;
| 3918&lt;br /&gt;
| 2405&lt;br /&gt;
| 534&lt;br /&gt;
| 943&lt;br /&gt;
| 36&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.5&#039;&#039;&#039;&lt;br /&gt;
| 3676&lt;br /&gt;
| 2233&lt;br /&gt;
| 498&lt;br /&gt;
| 912&lt;br /&gt;
| 33&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.4&#039;&#039;&#039;&lt;br /&gt;
| 3376&lt;br /&gt;
| 2021&lt;br /&gt;
| 457&lt;br /&gt;
| 874&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| 3146&lt;br /&gt;
| 1866&lt;br /&gt;
| 435&lt;br /&gt;
| 827&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| 2608&lt;br /&gt;
| 1502&lt;br /&gt;
| 444&lt;br /&gt;
| 652&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| 2135&lt;br /&gt;
| 1222&lt;br /&gt;
| 365&lt;br /&gt;
| 547&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| 1983&lt;br /&gt;
| 1139&lt;br /&gt;
| 332&lt;br /&gt;
| 511&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.10&#039;&#039;&#039;&lt;br /&gt;
| 1639&lt;br /&gt;
| 918&lt;br /&gt;
| 282&lt;br /&gt;
| 438&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.9&#039;&#039;&#039;&lt;br /&gt;
| 958&lt;br /&gt;
| 549&lt;br /&gt;
| 139&lt;br /&gt;
| 269&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:201612-aports.png|center|Aports]]&lt;br /&gt;
&lt;br /&gt;
== Commit per year to aports ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2008 : 146&lt;br /&gt;
2009 : 3122&lt;br /&gt;
2010 : 3365&lt;br /&gt;
2011 : 5561&lt;br /&gt;
2012 : 5312&lt;br /&gt;
2013 : 6597&lt;br /&gt;
2014 : 5759&lt;br /&gt;
2015 : 7315&lt;br /&gt;
2016 : 9065&lt;br /&gt;
2017 : 4901 (so far)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;High score list&amp;quot; of committer to aports ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 26715	Natanael Copa&lt;br /&gt;
  2938	Francesco Colista&lt;br /&gt;
  2477	Carlo Landmeter&lt;br /&gt;
  2369	Timo Teräs&lt;br /&gt;
  2312	Leonardo Arena&lt;br /&gt;
  1971	Fabian Affolter&lt;br /&gt;
  1571	William Pitcock&lt;br /&gt;
  1350	Jakub Jirutka&lt;br /&gt;
  1349	Bartłomiej Piotrowski&lt;br /&gt;
  1037	Sören Tempel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== First commit to aports == &lt;br /&gt;
The first commit in git was made:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit 645531103b2ee8ef54d53a58eca3b52f7d3fb9ac&lt;br /&gt;
Author: Natanael Copa &amp;lt;ncopa@alpinelinux.org&amp;gt;&lt;br /&gt;
Date:   Sat Oct 18 09:16:29 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    added busybox&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=13555</id>
		<title>Alpine Linux:Trivia</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=13555"/>
		<updated>2017-05-31T07:01:56Z</updated>

		<summary type="html">&lt;p&gt;Fab: /* &amp;quot;High score list&amp;quot; of committer to aports */ update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains only irrelevant and unhelpful information and statistics about Alpine Linux. If you are going to prepare a talk about Alpine Linux, perhaps some information mentioned here can be used for the intro. &lt;br /&gt;
&lt;br /&gt;
= The first release =&lt;br /&gt;
* Archives going back to 1.1 are (currently) at http://ancient.alpinelinux.org &lt;br /&gt;
* First public mention of &amp;quot;Alpine Linux&amp;quot; is archived here: http://comments.gmane.org/gmane.linux.leaf.devel/1183 (2005)&lt;br /&gt;
* The first saved [[Release_Notes_for_Alpine_1.7.3|release notes]] were made for 1.7.3.&lt;br /&gt;
&lt;br /&gt;
= The name =&lt;br /&gt;
&amp;quot;Alpine&amp;quot; originally stood for &#039;&#039;&#039;A&#039;&#039;&#039; &#039;&#039;&#039;L&#039;&#039;&#039;inux &#039;&#039;&#039;P&#039;&#039;&#039;owered &#039;&#039;&#039;I&#039;&#039;&#039;ntegrated &#039;&#039;&#039;N&#039;&#039;&#039;etwork &#039;&#039;&#039;E&#039;&#039;&#039;ngine. The idea was that the distribution would be focused on networking, and be a tiny &amp;quot;engine&amp;quot; or framework, which larger systems could be built upon. Today, &amp;quot;Alpine&amp;quot; is nothing more than a name.&lt;br /&gt;
&lt;br /&gt;
= Who is working on Alpine Linux? =&lt;br /&gt;
&lt;br /&gt;
* Check the statistics of cgit, e. g. [http://git.alpinelinux.org/cgit/aports/stats/?period=y&amp;amp;ofs=50 aports]&lt;br /&gt;
&lt;br /&gt;
= Packages =&lt;br /&gt;
&lt;br /&gt;
* [https://www.ohloh.net/p/aports aports] statistics provided by Ohloh.&lt;br /&gt;
&lt;br /&gt;
== Packages per release ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Release&lt;br /&gt;
! Total&lt;br /&gt;
! normal&lt;br /&gt;
! dev&lt;br /&gt;
! doc&lt;br /&gt;
! libs&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| 5643&lt;br /&gt;
| 3615&lt;br /&gt;
| 678&lt;br /&gt;
| 1264&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| 5231&lt;br /&gt;
| 3253&lt;br /&gt;
| 664&lt;br /&gt;
| 1235&lt;br /&gt;
| 79&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| 5314&lt;br /&gt;
| 3328&lt;br /&gt;
| 676&lt;br /&gt;
| 1239&lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| 5277&lt;br /&gt;
| 3343&lt;br /&gt;
| 684&lt;br /&gt;
| 1189&lt;br /&gt;
| 61&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| 4860&lt;br /&gt;
| 3075&lt;br /&gt;
| 620&lt;br /&gt;
| 1109&lt;br /&gt;
| 56&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| 4410&lt;br /&gt;
| 2752&lt;br /&gt;
| 578&lt;br /&gt;
| 1029&lt;br /&gt;
| 51&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.7&#039;&#039;&#039;&lt;br /&gt;
| 4205&lt;br /&gt;
| 2605&lt;br /&gt;
| 570&lt;br /&gt;
| 982&lt;br /&gt;
| 48&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.6&#039;&#039;&#039;&lt;br /&gt;
| 3918&lt;br /&gt;
| 2405&lt;br /&gt;
| 534&lt;br /&gt;
| 943&lt;br /&gt;
| 36&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.5&#039;&#039;&#039;&lt;br /&gt;
| 3676&lt;br /&gt;
| 2233&lt;br /&gt;
| 498&lt;br /&gt;
| 912&lt;br /&gt;
| 33&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.4&#039;&#039;&#039;&lt;br /&gt;
| 3376&lt;br /&gt;
| 2021&lt;br /&gt;
| 457&lt;br /&gt;
| 874&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| 3146&lt;br /&gt;
| 1866&lt;br /&gt;
| 435&lt;br /&gt;
| 827&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| 2608&lt;br /&gt;
| 1502&lt;br /&gt;
| 444&lt;br /&gt;
| 652&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| 2135&lt;br /&gt;
| 1222&lt;br /&gt;
| 365&lt;br /&gt;
| 547&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| 1983&lt;br /&gt;
| 1139&lt;br /&gt;
| 332&lt;br /&gt;
| 511&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.10&#039;&#039;&#039;&lt;br /&gt;
| 1639&lt;br /&gt;
| 918&lt;br /&gt;
| 282&lt;br /&gt;
| 438&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.9&#039;&#039;&#039;&lt;br /&gt;
| 958&lt;br /&gt;
| 549&lt;br /&gt;
| 139&lt;br /&gt;
| 269&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:201612-aports.png|center|Aports]]&lt;br /&gt;
&lt;br /&gt;
== Commit per year to aports ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2008 : 146&lt;br /&gt;
2009 : 3122&lt;br /&gt;
2010 : 3365&lt;br /&gt;
2011 : 5561&lt;br /&gt;
2012 : 5312&lt;br /&gt;
2013 : 6597&lt;br /&gt;
2014 : 5759&lt;br /&gt;
2015 : 7315&lt;br /&gt;
2016 : 1383 (so far)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;High score list&amp;quot; of committer to aports ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 26715	Natanael Copa&lt;br /&gt;
  2938	Francesco Colista&lt;br /&gt;
  2477	Carlo Landmeter&lt;br /&gt;
  2369	Timo Teräs&lt;br /&gt;
  2312	Leonardo Arena&lt;br /&gt;
  1971	Fabian Affolter&lt;br /&gt;
  1571	William Pitcock&lt;br /&gt;
  1350	Jakub Jirutka&lt;br /&gt;
  1349	Bartłomiej Piotrowski&lt;br /&gt;
  1037	Sören Tempel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== First commit to aports == &lt;br /&gt;
The first commit in git was made:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit 645531103b2ee8ef54d53a58eca3b52f7d3fb9ac&lt;br /&gt;
Author: Natanael Copa &amp;lt;ncopa@alpinelinux.org&amp;gt;&lt;br /&gt;
Date:   Sat Oct 18 09:16:29 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    added busybox&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=APKBUILD_examples:Simple&amp;diff=13554</id>
		<title>APKBUILD examples:Simple</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=APKBUILD_examples:Simple&amp;diff=13554"/>
		<updated>2017-05-31T06:57:59Z</updated>

		<summary type="html">&lt;p&gt;Fab: add builddir&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Simple APKBUILD with -doc subpackage, using abuild&#039;s default &#039;&#039;doc()&#039;&#039; and &#039;&#039;prepare()&#039;&#039; functions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Contributor: William Pitcock &amp;lt;nenolod@dereferenced.org&amp;gt;&lt;br /&gt;
# Maintainer:&lt;br /&gt;
pkgname=gnuplot&lt;br /&gt;
pkgver=4.4.4&lt;br /&gt;
pkgrel=0&lt;br /&gt;
pkgdesc=&amp;quot;Utility for plotting graphs&amp;quot;&lt;br /&gt;
url=&amp;quot;http://www.gnuplot.info/&amp;quot;&lt;br /&gt;
arch=&amp;quot;all&amp;quot;&lt;br /&gt;
license=&amp;quot;GPL&amp;quot;&lt;br /&gt;
depends=&amp;quot;&amp;quot;&lt;br /&gt;
depends_dev=&amp;quot;cairo-dev pango-dev gd-dev lua-dev readline-dev libpng-dev jpeg-dev&amp;quot;&lt;br /&gt;
makedepends=&amp;quot;$depends_dev&amp;quot;&lt;br /&gt;
install=&amp;quot;&amp;quot;&lt;br /&gt;
subpackages=&amp;quot;$pkgname-doc&amp;quot;&lt;br /&gt;
source=&amp;quot;http://downloads.sourceforge.net/project/$pkgname/$pkgname/$pkgver/$pkgname-$pkgver.tar.gz&amp;quot;&lt;br /&gt;
builddir=&amp;quot;$srcdir/$pkgname-$pkgver&amp;quot;&lt;br /&gt;
&lt;br /&gt;
prepare() {&lt;br /&gt;
        default_prepare || return&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
build() {&lt;br /&gt;
	cd &amp;quot;$builddir&amp;quot;&lt;br /&gt;
	./configure --prefix=/usr \&lt;br /&gt;
		--sysconfdir=/etc \&lt;br /&gt;
		--mandir=/usr/share/man \&lt;br /&gt;
		--infodir=/usr/share/info \&lt;br /&gt;
		--localstatedir=/var \&lt;br /&gt;
		--disable-wxwidgets \&lt;br /&gt;
		--disable-qt || return 1&lt;br /&gt;
	make || return 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
check() {&lt;br /&gt;
	cd &amp;quot;$builddir&amp;quot;&lt;br /&gt;
        make check || return 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
package() {&lt;br /&gt;
	cd &amp;quot;$builddir&amp;quot;&lt;br /&gt;
	make DESTDIR=&amp;quot;$pkgdir&amp;quot; install || return 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sha512sums=&amp;quot;d65a43b834b1926097...c0b8c6017ffc6d9e011217fb7e86e80  gnuplot-4.4.4.tar.gz&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=APKBUILD_examples:Simple&amp;diff=13553</id>
		<title>APKBUILD examples:Simple</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=APKBUILD_examples:Simple&amp;diff=13553"/>
		<updated>2017-05-31T06:23:23Z</updated>

		<summary type="html">&lt;p&gt;Fab: update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Simple APKBUILD with -doc subpackage, using abuild&#039;s default &#039;&#039;doc()&#039;&#039; and &#039;&#039;prepare()&#039;&#039; functions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Contributor: William Pitcock &amp;lt;nenolod@dereferenced.org&amp;gt;&lt;br /&gt;
# Maintainer:&lt;br /&gt;
pkgname=gnuplot&lt;br /&gt;
pkgver=4.4.4&lt;br /&gt;
pkgrel=0&lt;br /&gt;
pkgdesc=&amp;quot;Utility for plotting graphs&amp;quot;&lt;br /&gt;
url=&amp;quot;http://www.gnuplot.info/&amp;quot;&lt;br /&gt;
arch=&amp;quot;all&amp;quot;&lt;br /&gt;
license=&amp;quot;GPL&amp;quot;&lt;br /&gt;
depends=&amp;quot;&amp;quot;&lt;br /&gt;
depends_dev=&amp;quot;cairo-dev pango-dev gd-dev lua-dev readline-dev libpng-dev jpeg-dev&amp;quot;&lt;br /&gt;
makedepends=&amp;quot;$depends_dev&amp;quot;&lt;br /&gt;
install=&amp;quot;&amp;quot;&lt;br /&gt;
subpackages=&amp;quot;$pkgname-doc&amp;quot;&lt;br /&gt;
source=&amp;quot;http://downloads.sourceforge.net/project/$pkgname/$pkgname/$pkgver/$pkgname-$pkgver.tar.gz&amp;quot;&lt;br /&gt;
builddir=&amp;quot;$srcdir/$pkgname-$pkgver&amp;quot;&lt;br /&gt;
&lt;br /&gt;
prepare() {&lt;br /&gt;
        default_prepare || return&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
build() {&lt;br /&gt;
	cd &amp;quot;$builddir&amp;quot;&lt;br /&gt;
	./configure --prefix=/usr \&lt;br /&gt;
		--sysconfdir=/etc \&lt;br /&gt;
		--mandir=/usr/share/man \&lt;br /&gt;
		--infodir=/usr/share/info \&lt;br /&gt;
		--localstatedir=/var \&lt;br /&gt;
		--disable-wxwidgets \&lt;br /&gt;
		--disable-qt || return 1&lt;br /&gt;
	make || return 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
check() {&lt;br /&gt;
        make check || return 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
package() {&lt;br /&gt;
	cd &amp;quot;$builddir&amp;quot;&lt;br /&gt;
	make DESTDIR=&amp;quot;$pkgdir&amp;quot; install || return 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
sha512sums=&amp;quot;d65a43b834b1926097...c0b8c6017ffc6d9e011217fb7e86e80  gnuplot-4.4.4.tar.gz&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=APKBUILD_Reference&amp;diff=13400</id>
		<title>APKBUILD Reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=APKBUILD_Reference&amp;diff=13400"/>
		<updated>2017-05-29T06:33:51Z</updated>

		<summary type="html">&lt;p&gt;Fab: /* User-defined functions */ for copy-&amp;amp;-paste&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;APKBUILDs are the scripts that are created in order to build Alpine packages using the [[abuild]] tool.&lt;br /&gt;
&lt;br /&gt;
See [[aports]] for details on Alpine&#039;s official ports repository.&lt;br /&gt;
&lt;br /&gt;
This page is intended to serve as a reference for creating APKBUILDs; if this is your first time creating a package for Alpine Linux, please see [[Creating an Alpine package]].&lt;br /&gt;
&lt;br /&gt;
= Legend =&lt;br /&gt;
The following notes will assist you in understanding this document.&lt;br /&gt;
&lt;br /&gt;
In description text:&lt;br /&gt;
* If a variable is not prefixed with a &#039;&#039;$&#039;&#039;, it will be represented by italics (i.e., &#039;&#039;srcdir&#039;&#039; ).&lt;br /&gt;
* Functions will also be represented by italics, but will also end with a pair of parentheses (i.e., &#039;&#039;build()&#039;&#039; ).&lt;br /&gt;
* Shell commands will be represented &amp;lt;code&amp;gt;like this&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Variables =&lt;br /&gt;
{{Note|Variables that contain a path (e.g. &#039;&#039;$srcdir&#039;&#039; and &#039;&#039;$pkgdir&#039;&#039;) should always be quoted using double quotes (i.e., &#039;&#039;&amp;quot;$srcdir&amp;quot;&#039;&#039;).  This is done to prevent things from breaking, should the user have the APKBUILD in a directory path that contains spaces.}}&lt;br /&gt;
{{Note|All arbitrary variable and function names should be prefixed with an underscore character ( _ ) to avoid name clashes with the internals of abuild (for example, &#039;&#039;_luaversions&#039;&#039;).}}&lt;br /&gt;
&lt;br /&gt;
== abuild-defined variables ==&lt;br /&gt;
The following variables are defined by abuild:&lt;br /&gt;
&lt;br /&gt;
==== startdir ====&lt;br /&gt;
: The directory where the APKBUILD script is.&lt;br /&gt;
==== srcdir ====&lt;br /&gt;
: The directory where sources, from the &#039;&#039;source&#039;&#039; variable, are downloaded to and unpacked to.&lt;br /&gt;
==== pkgdir ====&lt;br /&gt;
: This directory should receive the files for the main package.  For example, a normal [http://en.wikipedia.org/wiki/GNU_build_system autotools] package would have &amp;lt;code&amp;gt;make DESTDIR=&amp;quot;$pkgdir&amp;quot; install&amp;lt;/code&amp;gt; in the &#039;&#039;package()&#039;&#039; function.&lt;br /&gt;
==== subpkgdir ====&lt;br /&gt;
: This directory should receive the files for a subpackage. This variable should only be used from subpackage functions.&lt;br /&gt;
==== builddir ====&lt;br /&gt;
: This variable should point to the directory inside the &#039;&#039;srcdir&#039;&#039; where the main package source is unpacked.  This is typically &#039;&#039;$srcdir/$pkgname-$pkgver&#039;&#039;.  It’s used by the default &#039;&#039;prepare()&#039;&#039; function as a working directory when applying patches.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== User-defined variables ==&lt;br /&gt;
The following variables should be defined by the user:&lt;br /&gt;
==== arch ====&lt;br /&gt;
: Package architecture(s) to build for.  Can be one of: &#039;&#039;&#039;[[x86]], [[x86_64]], [[armhf]], [[aarch64]], [[ppc64le]], [[s390x]], all&#039;&#039;&#039;, or &#039;&#039;&#039;noarch&#039;&#039;&#039;, where &#039;&#039;&#039;all&#039;&#039;&#039; means all architectures, and &#039;&#039;&#039;noarch&#039;&#039;&#039; means it&#039;s architecture-independent (e.g., a pure-python package).&lt;br /&gt;
: {{Tip|To determine if your APKBUILD can use &#039;&#039;&#039;noarch&#039;&#039;&#039;: First specify &#039;&#039;&#039;all&#039;&#039;&#039; and then build the package by executing &amp;lt;code&amp;gt;abuild -r&amp;lt;/code&amp;gt;.  Watch the output towards the end for warnings saying that &#039;&#039;&#039;noarch&#039;&#039;&#039; can be used.  If the main package and all subpackages, if you have any subpackages, give a warning saying that &#039;&#039;&#039;noarch&#039;&#039;&#039; can be used, then you can use &#039;&#039;&#039;noarch&#039;&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
==== depends ====&lt;br /&gt;
: Run-time dependency package(s) that are not shared-object dependencies.  Shared objects dependencies are auto-detected and should not be specified here.&lt;br /&gt;
==== depends_dev ====&lt;br /&gt;
: Run-time dependency package(s) for the &#039;&#039;&#039;$pkgname-dev&#039;&#039;&#039; subpackage.&lt;br /&gt;
&lt;br /&gt;
: {{Note|From ncopa on IRC: To find out if you need to add a package to depends_dev have a look at *requires* in usr/lib/pkgconfig/*.pc. With libtool it gets more complicated, but we should delete the .la files. Also check if there are any  /usr/bin/*-configure #!/bin/bash #!/usr/bin/perl or Python. Sometimes scripts or similar are generated at build time (i.e autoconf automake) then you normally don&#039;t need add those to depends_dev. You can also just add all -dev makedepends to depends_dev but it will slow the build process a little bit (more build dependencies).}}&lt;br /&gt;
==== giturl ====&lt;br /&gt;
:Git repository from which &amp;lt;code&amp;gt;abuild checkout&amp;lt;/code&amp;gt; checks out. You can checkout a specific branch in git by adding &amp;lt;code&amp;gt;-b $branch&amp;lt;/code&amp;gt;.&lt;br /&gt;
==== install ====&lt;br /&gt;
: There are 6 different types of install scripts.  Install scripts are named &#039;&#039;&#039;$pkgname.action&#039;&#039;&#039;, where &#039;&#039;&#039;action&#039;&#039;&#039; can be:  &#039;&#039;&#039;pre-install, post-install, pre-upgrade, post-upgrade, pre-deinstall&#039;&#039;&#039;, or &#039;&#039;&#039;post-deinstall&#039;&#039;&#039;.  For example, if &#039;&#039;pkgname&#039;&#039; is set to &#039;&#039;&#039;mypackage&#039;&#039;&#039; and &#039;&#039;install&#039;&#039; is set to &#039;&#039;&#039;$pkgname.post-install&#039;&#039;&#039;, then a script named &#039;&#039;&#039;mypackage.post-install&#039;&#039;&#039; must exist along-side the APKBUILD.&lt;br /&gt;
&lt;br /&gt;
: First, a few notes regarding install scripts:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;{{Note|When using install scripts, &#039;&#039;$install&#039;&#039; should be included in &#039;&#039;source&#039;&#039; so that checksums can be generated and used for the install scripts specified in &#039;&#039;install&#039;&#039;.  For example:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
install=&amp;quot;$pkgname.pre-install $pkgname.post-install&amp;quot;&lt;br /&gt;
source=&amp;quot;http://....&lt;br /&gt;
       $install&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;}}&lt;br /&gt;
{{Note|Always use &amp;lt;code&amp;gt;/bin/sh&amp;lt;/code&amp;gt; for the command-line interpreter on the [http://en.wikipedia.org/wiki/Shebang_%28Unix%29 shebang line] of your install scripts.}}&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following are the different types of install scripts in detail:&lt;br /&gt;
&lt;br /&gt;
===== $pkgname.pre-install =====&lt;br /&gt;
: This script is executed &#039;&#039;before installing&#039;&#039; the package.  Typical use is when the package needs a group and a user to be created. For example:&lt;br /&gt;
&amp;lt;blockquote&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
addgroup -S clamav 2&amp;gt;/dev/null&lt;br /&gt;
adduser -S -D -H -s /bin/false -G clamav -g clamav clamav 2&amp;gt;/dev/null&lt;br /&gt;
&lt;br /&gt;
exit 0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{Note|If the script exits with a failure (e.g., if the user already exists), the package will not be installed and &amp;lt;code&amp;gt;apk&amp;lt;/code&amp;gt; will exit with failure, hence the &amp;lt;code&amp;gt;exit 0&amp;lt;/code&amp;gt; at the end.}}&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== $pkgname.post-install =====&lt;br /&gt;
: This script is executed &#039;&#039;after installing&#039;&#039; the package.&lt;br /&gt;
&lt;br /&gt;
===== $pkgname.pre-upgrade =====&lt;br /&gt;
: This script is executed &#039;&#039;before upgrading/downgrading/reinstalling&#039;&#039; the package. Note that exiting with failure will not cause apk to exit with failure, but will mark the package as broken.&lt;br /&gt;
&lt;br /&gt;
===== $pkgname.post-upgrade =====&lt;br /&gt;
: This script is executed &#039;&#039;after upgrading/downgrading/reinstalling&#039;&#039; the package.&lt;br /&gt;
&lt;br /&gt;
===== $pkgname.pre-deinstall =====&lt;br /&gt;
: This script is executed &#039;&#039;before uninstalling&#039;&#039; the package.&lt;br /&gt;
: {{Note|If the script exits with failure, &amp;lt;code&amp;gt;apk&amp;lt;/code&amp;gt; will not uninstall the package.}}&lt;br /&gt;
&lt;br /&gt;
===== $pkgname.post-deinstall =====&lt;br /&gt;
: This script is executed &#039;&#039;after uninstalling&#039;&#039; the package.&lt;br /&gt;
&lt;br /&gt;
==== install_if ====&lt;br /&gt;
:install_if can be used when a package needs to be installed when some packages are already installed or are in the dependency tree. As example we could take open-vm-tools. Currently it contains the userspace tools and separate packages for the kernel modules (grsec and vserver). When we install the userspace tools, apk should automatically install the correct kernel modules and will need to figure out for which kernel. This is where install_if jumps in. For any of the kernel modules package we would use:&lt;br /&gt;
&lt;br /&gt;
:&amp;lt;pre&amp;gt;install_if=&amp;quot;linux-${_flavor}=${_kernelver} open-vm-tools&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:This will automatically install the package when the specified packages are installed or are in dependency tree.&lt;br /&gt;
&lt;br /&gt;
==== license ====&lt;br /&gt;
: License(s) for the package.&lt;br /&gt;
==== makedepends ====&lt;br /&gt;
: Build-time dependency package(s).&lt;br /&gt;
==== md5sums ====&lt;br /&gt;
: Checksums for the files/URLs listed in &#039;&#039;source&#039;&#039;.  The checksums are normally generated and updated by executing &amp;lt;code&amp;gt;abuild checksum&amp;lt;/code&amp;gt; and should be the last item in the APKBUILD.&lt;br /&gt;
==== options ====&lt;br /&gt;
: Build-time options for the package.  Can be: &#039;&#039;&#039;!strip&#039;&#039;&#039; - to avoid stripping symbols from binaries.&lt;br /&gt;
==== pkgdesc ====&lt;br /&gt;
: A brief, one-line description of what the package does.&lt;br /&gt;
&lt;br /&gt;
: Here&#039;s an example from the OpenSSH client package:&lt;br /&gt;
: &amp;lt;pre&amp;gt;pkgdesc=&amp;quot;Port of OpenBSD&#039;s free SSH release - client&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
==== pkggroups ====&lt;br /&gt;
: System group(s) to be created during build-time.  System group(s) should also be created in the &#039;&#039;&#039;[[APKBUILD Reference#.24pkgname.pre-install|$pkgname.pre-install]]&#039;&#039;&#039; script, so that the system group(s) are also created prior to package installation for run-time use.&lt;br /&gt;
==== pkgname ====&lt;br /&gt;
: The name of the package.  All letters should be lowercase.&lt;br /&gt;
: {{Note|When creating an APKBUILD of a module or library for another package, we use some common package prefixes, such as: &#039;&#039;lua-&#039;&#039;, &#039;&#039;perl-&#039;&#039;, &#039;&#039;php-&#039;&#039;, and &#039;&#039;py-&#039;&#039;.  Search aports for other common prefixes.}}&lt;br /&gt;
&lt;br /&gt;
==== pkgrel ====&lt;br /&gt;
: Alpine package release number.  Starts at 0 (zero).  Always increment &#039;&#039;pkgrel&#039;&#039; when making updates to an aport; reset &#039;&#039;pkgrel&#039;&#039; to 0 (zero) when incrementing &#039;&#039;pkgver&#039;&#039;.&lt;br /&gt;
==== pkgusers ====&lt;br /&gt;
: System user(s) to be created during build-time.  System user(s) should also be created in the &#039;&#039;&#039;[[APKBUILD Reference#.24pkgname.pre-install|$pkgname.pre-install]]&#039;&#039;&#039; script, so that the system user(s) are also created prior to package installation for run-time use.&lt;br /&gt;
==== pkgver ====&lt;br /&gt;
: The version of the software being packaged.&lt;br /&gt;
==== provides ====&lt;br /&gt;
: List of package names (and optionally version info) this package provides.&lt;br /&gt;
&lt;br /&gt;
: If package with a version is provided (provides=&#039;foo=1.2&#039;) apk will consider it as an alternate name and it will automatically consider the package for installation by the alternate name, and conflict with other packages having the same name, or provides.&lt;br /&gt;
&lt;br /&gt;
: If version is not provided (provides=&#039;foo&#039;), apk will consider it as virtual package name. Several package with same non-versioned provides can be installed simultaneously. However, none of them will be installed by default when requested by the virtual name - instead, error message is given and user is asked to choose which package providing the virtual name should be installed.&lt;br /&gt;
==== replaces ====&lt;br /&gt;
: Package(s) that this package replaces.  This package will &amp;quot;take over&amp;quot; files owned by packages listed in the &#039;&#039;replaces&#039;&#039; variable.  This is useful when files move from one package to another, or when a package gets renamed.&lt;br /&gt;
==== replaces_priority ====&lt;br /&gt;
: The priority of the replaces. If multiple packages replace each other, then will the package with highest &#039;&#039;replaces_priority&#039;&#039; win.&lt;br /&gt;
==== source ====&lt;br /&gt;
: The source variable is not only used to list the remote source files to fetch, it is also used to list the local files that abuild will need in order to build the apk. Examples of such local files include: init.d files, conf.d files, install files (see [[APKBUILD Reference#install|install variable]]), patches, and all other necessary files.&lt;br /&gt;
&lt;br /&gt;
: Here are few things to note:&lt;br /&gt;
&lt;br /&gt;
:* When you are finished adding local and/or remote files to &#039;&#039;source&#039;&#039;, you can execute the following command to add their checksums to the APKBUILD file:&lt;br /&gt;
:: {{Cmd|abuild checksum}}&lt;br /&gt;
:: {{Note|When later updating the content of &#039;&#039;source&#039;&#039;, or updating a file that is listed in &#039;&#039;source&#039;&#039;, you must also update their checksums again with the same command.}}&lt;br /&gt;
&lt;br /&gt;
:* When the remote file is hosted at SourceForge, it&#039;s best to specify the special mirrors link used by SourceForge:&lt;br /&gt;
:: &amp;lt;pre&amp;gt;http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
:: (or similar depending on the package).&lt;br /&gt;
&lt;br /&gt;
:* You can set target filename (eg &#039;save as...&#039;) by prefixing the URI with &#039;&#039;filename::&#039;&#039;. This is useful when the remote filename is not specified in the URI (ie, does not end in &#039;/software-1.0.tar.gz&#039;), such as:&lt;br /&gt;
:: &amp;lt;pre&amp;gt;http://oss.example.org/?get=software&amp;amp;ver=1.0&amp;lt;/pre&amp;gt;&lt;br /&gt;
:: or when the filename is braindead, like githubs&#039; download tags:&lt;br /&gt;
:: &amp;lt;pre&amp;gt;https://github.com/software/software/archive/v$pkgver.tar.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
:: The above two examples needs a target filename prefix:&lt;br /&gt;
:: &amp;lt;pre&amp;gt;$pkgname-$pkgver.tar.gz::http://oss.example.org/?get=software&amp;amp;ver=$pkgver&amp;lt;/pre&amp;gt;&lt;br /&gt;
:: and:&lt;br /&gt;
:: &amp;lt;pre&amp;gt;$pkgname-$pkgver.tar.gz::https://github.com/software/software/archive/v$pkgver.tar.gz&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:* abuild currently supports the following protocols for remote file retrieval:&lt;br /&gt;
:** http&lt;br /&gt;
:** https&lt;br /&gt;
:** ftp&lt;br /&gt;
&lt;br /&gt;
:* abuild currently supports the following archive types/archive file extensions:&lt;br /&gt;
:** .tar.gz / .tgz&lt;br /&gt;
:** .tar.bz2&lt;br /&gt;
:** .tar.lzma&lt;br /&gt;
:** .tar.xz&lt;br /&gt;
:** .zip&lt;br /&gt;
&lt;br /&gt;
:: {{Note|Legacy APKBUILD scripts define &#039;&#039;source&#039;&#039; variable as &amp;quot;saveas-[brain-dead-url]/[target-filename]&amp;quot; format instead of the modern [target-filename]::[brain-dead-url].&amp;lt;br /&amp;gt;&#039;&#039;BAD&#039;&#039;:   source&amp;amp;#61;&amp;quot;saveas-http://releases.ddvtech.com/download.php?pack&amp;amp;#61;libmist_dist&amp;amp;ver&amp;amp;#61;RC/$pkgname-$pkgver.tar.gz&amp;quot;&amp;lt;br /&amp;gt;&#039;&#039;GOOD&#039;&#039;:   source&amp;amp;#61;$pkgname-$pkgver.tar.gz::http://releases.ddvtech.com/download.php?pack&amp;amp;#61;libmist_dist&amp;amp;ver&amp;amp;#61;RC&amp;quot;}}&lt;br /&gt;
&lt;br /&gt;
==== subpackages ====&lt;br /&gt;
: Subpackages built from this APKBUILD.  abuild will parse this variable and try to find a subpackage split function.  The split function must &#039;&#039;move&#039;&#039; files that do not belong in the main package, from &#039;&#039;$pkgdir&#039;&#039; to &#039;&#039;$subpkgdir&#039;&#039;.  Files and directories can also be &#039;&#039;copied&#039;&#039; from &#039;&#039;$startdir&#039;&#039; and &#039;&#039;$srcdir&#039;&#039; to &#039;&#039;$subpkgdir&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
: The split function can be specified in 1 of 3 different methods:&lt;br /&gt;
:# subpkgname:&#039;&#039;&#039;splitfunc&#039;&#039;&#039;&lt;br /&gt;
:# $pkgname-&#039;&#039;&#039;splitfunc&#039;&#039;&#039;&lt;br /&gt;
:# &#039;&#039;&#039;splitfunc&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
: {{Note|Split function names &#039;&#039;&#039;cannot&#039;&#039;&#039; use hyphens; use the first method above if the subpackage name contains a hyphen (-) character, like this: &#039;&#039;subpkg-name:subpkg_name&#039;&#039;, where &amp;lt;code&amp;gt;subpkg-name&amp;lt;/code&amp;gt; is the name of the &#039;&#039;&#039;subpackage&#039;&#039;&#039; and &amp;lt;code&amp;gt;subpkg_name&amp;lt;/code&amp;gt; is the name of the &#039;&#039;&#039;subpackage&#039;s split function&#039;&#039;&#039;.}}&lt;br /&gt;
&lt;br /&gt;
: {{Tip|For more information, see the [[APKBUILD_examples:Subpackages|Subpackages example]].}}&lt;br /&gt;
&lt;br /&gt;
==== triggers ====&lt;br /&gt;
: Apk-tools can &amp;quot;monitor&amp;quot; directories and execute a trigger if any package installed/uninstalled any file in the monitored dir. The triggers are always execute after the apk action (install, uninstall, upgrade).&lt;br /&gt;
&lt;br /&gt;
: The triggers are specified in the format: &#039;&#039;scriptname&#039;&#039;=&#039;&#039;pathlist&#039;&#039; where &#039;&#039;scriptname&#039;&#039; is the (sub)package name + .trigger suffix and pathlist is : separated list of the dirs to monitor.&lt;br /&gt;
&lt;br /&gt;
: The &#039;&#039;&#039;triggers&#039;&#039;&#039; variable must include the triggers for subpackages too if they have any.&lt;br /&gt;
&lt;br /&gt;
: It is possible to use wildcards (*) in the dir list.&lt;br /&gt;
&lt;br /&gt;
==== url ====&lt;br /&gt;
: The homepage for the package.  This is to help users find upstream documentation and other information regarding the package.&lt;br /&gt;
&lt;br /&gt;
= Functions =&lt;br /&gt;
{{Note|All functions should consider the current working directory as undefined, and should therefore use the [[APKBUILD Reference#abuild-defined_variables|abuild-defined directory variables]] to their advantage.}}&lt;br /&gt;
&lt;br /&gt;
== abuild-defined functions ==&lt;br /&gt;
The following functions are provided by abuild and can be overridden:&lt;br /&gt;
&lt;br /&gt;
==== fetch() ====&lt;br /&gt;
: Downloads remote sources listed in &#039;&#039;source&#039;&#039; to &#039;&#039;SRCDEST&#039;&#039; (&#039;&#039;SRCDEST&#039;&#039; is configured in &#039;&#039;/etc/abuild.conf&#039;&#039;) and creates symlinks in &#039;&#039;$srcdir&#039;&#039;.&lt;br /&gt;
==== unpack() ====&lt;br /&gt;
: Unpacks .tgz, .tar.gz, .tar.bz2, .tar.lzma, .tar.xz, and .zip archives in &#039;&#039;$srcdir&#039;&#039; to &#039;&#039;$srcdir&#039;&#039;.&lt;br /&gt;
==== dev() ====&lt;br /&gt;
: Subpackage function for the &#039;&#039;&#039;$pkgname-dev&#039;&#039;&#039; package.  Without specifying a custom &#039;&#039;dev()&#039;&#039; function, abuild will call it&#039;s internal &#039;&#039;dev()&#039;&#039; function, which in turn calls &#039;&#039;default_dev()&#039;&#039;, which will move &#039;&#039;&amp;quot;$pkgdir&amp;quot;/usr/include&#039;&#039;, &#039;&#039;*.a&#039;&#039;, &#039;&#039;*.la&#039;&#039; and similar files to &#039;&#039;$subpkgdir&#039;&#039;.&lt;br /&gt;
==== doc() ====&lt;br /&gt;
: Subpackage function for the &#039;&#039;&#039;$pkgname-doc&#039;&#039;&#039; package.  Without specifying a custom &#039;&#039;doc()&#039;&#039; function, abuild will call it&#039;s internal &#039;&#039;doc()&#039;&#039; function, which in turn calls &#039;&#039;default_doc()&#039;&#039;, which will move &#039;&#039;&amp;quot;$pkgdir&amp;quot;/usr/share/doc&#039;&#039;, &#039;&#039;&amp;quot;$pkgdir&amp;quot;/usr/share/man&#039;&#039; and similar to &#039;&#039;$subpkgdir&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== User-defined functions ==&lt;br /&gt;
The following functions should be defined by the user: &lt;br /&gt;
&lt;br /&gt;
==== prepare() ====&lt;br /&gt;
: &#039;&#039;&#039;&#039;&#039;Optional&#039;&#039;.&#039;&#039;&#039;  Used for build preparation: patches, etc, should be applied here.  This function is available for your convenience. It is better to use &amp;quot;default_prepare || return&amp;quot; to handle *.patch file, and the patch file should always be prepared as -p1 format.&lt;br /&gt;
==== build() ====&lt;br /&gt;
: &#039;&#039;&#039;Required.&#039;&#039;&#039;  This is the compilation stage.  This function will be called as the current user (unless the &#039;&#039;package()&#039;&#039; function is missing - for compatibility reasons).  If no compilation is needed, this function can contain a single line: &amp;lt;code&amp;gt;return 0&amp;lt;/code&amp;gt;&lt;br /&gt;
==== check() ====&lt;br /&gt;
: &#039;&#039;&#039;Recommended.&#039;&#039;&#039; This function is called right after the build stage.  It should check that the packaged thing is actually working, typically by running (integration) tests, if provided by upstream.  If there’s no (easy) way how to test the package, you can declare that it does not want to use &#039;&#039;check()&#039;&#039; by adding &amp;quot;!check&amp;quot; into the &#039;&#039;options&#039;&#039; variable (&amp;lt;code&amp;gt;options=&amp;quot;!check&amp;quot;&amp;lt;/code&amp;gt;).&lt;br /&gt;
==== package() ====&lt;br /&gt;
: &#039;&#039;&#039;Required.&#039;&#039;&#039;  This is the packaging stage.  Here, the built application and support files should be installed into &#039;&#039;&#039;$pkgdir&#039;&#039;&#039;.  If this is a metapackage, this function can contain a single line: &amp;lt;code&amp;gt;mkdir -p &amp;quot;$pkgdir&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Note|Building in fakeroot will reduce performance for parallel builds dramatically.  It is for this reason that we split the build and package process into two separate functions.}}&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
The [[APKBUILD examples]] page will assist you in understanding how to create an APKBUILD.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=13105</id>
		<title>Alpine Linux:Trivia</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=13105"/>
		<updated>2017-01-04T14:30:33Z</updated>

		<summary type="html">&lt;p&gt;Fab: /* Packages per release */ update graph&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains only irrelevant and unhelpful information and statistics about Alpine Linux. If you are going to prepare a talk about Alpine Linux, perhaps some information mentioned here can be used for the intro. &lt;br /&gt;
&lt;br /&gt;
= The first release =&lt;br /&gt;
* Archives going back to 1.1 are (currently) at http://ancient.alpinelinux.org &lt;br /&gt;
* First public mention of &amp;quot;Alpine Linux&amp;quot; is archived here: http://comments.gmane.org/gmane.linux.leaf.devel/1183 (2005)&lt;br /&gt;
* The first saved [[Release_Notes_for_Alpine_1.7.3|release notes]] were made for 1.7.3.&lt;br /&gt;
&lt;br /&gt;
= The name =&lt;br /&gt;
&amp;quot;Alpine&amp;quot; originally stood for &#039;&#039;&#039;A&#039;&#039;&#039; &#039;&#039;&#039;L&#039;&#039;&#039;inux &#039;&#039;&#039;P&#039;&#039;&#039;owered &#039;&#039;&#039;I&#039;&#039;&#039;ntegrated &#039;&#039;&#039;N&#039;&#039;&#039;etwork &#039;&#039;&#039;E&#039;&#039;&#039;ngine. The idea was that the distribution would be focused on networking, and be a tiny &amp;quot;engine&amp;quot; or framework, which larger systems could be built upon. Today, &amp;quot;Alpine&amp;quot; is nothing more than a name.&lt;br /&gt;
&lt;br /&gt;
= Who is working on Alpine Linux? =&lt;br /&gt;
&lt;br /&gt;
* Check the statistics of cgit, e. g. [http://git.alpinelinux.org/cgit/aports/stats/?period=y&amp;amp;ofs=50 aports]&lt;br /&gt;
&lt;br /&gt;
= Packages =&lt;br /&gt;
&lt;br /&gt;
* [https://www.ohloh.net/p/aports aports] statistics provided by Ohloh.&lt;br /&gt;
&lt;br /&gt;
== Packages per release ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Release&lt;br /&gt;
! Total&lt;br /&gt;
! normal&lt;br /&gt;
! dev&lt;br /&gt;
! doc&lt;br /&gt;
! libs&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| 5643&lt;br /&gt;
| 3615&lt;br /&gt;
| 678&lt;br /&gt;
| 1264&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| 5231&lt;br /&gt;
| 3253&lt;br /&gt;
| 664&lt;br /&gt;
| 1235&lt;br /&gt;
| 79&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| 5314&lt;br /&gt;
| 3328&lt;br /&gt;
| 676&lt;br /&gt;
| 1239&lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| 5277&lt;br /&gt;
| 3343&lt;br /&gt;
| 684&lt;br /&gt;
| 1189&lt;br /&gt;
| 61&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| 4860&lt;br /&gt;
| 3075&lt;br /&gt;
| 620&lt;br /&gt;
| 1109&lt;br /&gt;
| 56&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| 4410&lt;br /&gt;
| 2752&lt;br /&gt;
| 578&lt;br /&gt;
| 1029&lt;br /&gt;
| 51&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.7&#039;&#039;&#039;&lt;br /&gt;
| 4205&lt;br /&gt;
| 2605&lt;br /&gt;
| 570&lt;br /&gt;
| 982&lt;br /&gt;
| 48&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.6&#039;&#039;&#039;&lt;br /&gt;
| 3918&lt;br /&gt;
| 2405&lt;br /&gt;
| 534&lt;br /&gt;
| 943&lt;br /&gt;
| 36&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.5&#039;&#039;&#039;&lt;br /&gt;
| 3676&lt;br /&gt;
| 2233&lt;br /&gt;
| 498&lt;br /&gt;
| 912&lt;br /&gt;
| 33&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.4&#039;&#039;&#039;&lt;br /&gt;
| 3376&lt;br /&gt;
| 2021&lt;br /&gt;
| 457&lt;br /&gt;
| 874&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| 3146&lt;br /&gt;
| 1866&lt;br /&gt;
| 435&lt;br /&gt;
| 827&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| 2608&lt;br /&gt;
| 1502&lt;br /&gt;
| 444&lt;br /&gt;
| 652&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| 2135&lt;br /&gt;
| 1222&lt;br /&gt;
| 365&lt;br /&gt;
| 547&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| 1983&lt;br /&gt;
| 1139&lt;br /&gt;
| 332&lt;br /&gt;
| 511&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.10&#039;&#039;&#039;&lt;br /&gt;
| 1639&lt;br /&gt;
| 918&lt;br /&gt;
| 282&lt;br /&gt;
| 438&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.9&#039;&#039;&#039;&lt;br /&gt;
| 958&lt;br /&gt;
| 549&lt;br /&gt;
| 139&lt;br /&gt;
| 269&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:201612-aports.png|center|Aports]]&lt;br /&gt;
&lt;br /&gt;
== Commit per year to aports ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2008 : 146&lt;br /&gt;
2009 : 3122&lt;br /&gt;
2010 : 3365&lt;br /&gt;
2011 : 5561&lt;br /&gt;
2012 : 5312&lt;br /&gt;
2013 : 6597&lt;br /&gt;
2014 : 5759&lt;br /&gt;
2015 : 7315&lt;br /&gt;
2016 : 1383 (so far)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;High score list&amp;quot; of committer to aports ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 22872	Natanael Copa&lt;br /&gt;
  1873	Carlo Landmeter&lt;br /&gt;
  1804	Timo Teräs&lt;br /&gt;
  1725	Fabian Affolter&lt;br /&gt;
  1637	Leonardo Arena&lt;br /&gt;
  1317	William Pitcock&lt;br /&gt;
  1230	Bartłomiej Piotrowski&lt;br /&gt;
  1105	Francesco Colista&lt;br /&gt;
   686	Ted Trask&lt;br /&gt;
   562	Sören Tempel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== First commit to aports == &lt;br /&gt;
The first commit in git was made:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit 645531103b2ee8ef54d53a58eca3b52f7d3fb9ac&lt;br /&gt;
Author: Natanael Copa &amp;lt;ncopa@alpinelinux.org&amp;gt;&lt;br /&gt;
Date:   Sat Oct 18 09:16:29 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    added busybox&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=File:201612-aports.png&amp;diff=13104</id>
		<title>File:201612-aports.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=File:201612-aports.png&amp;diff=13104"/>
		<updated>2017-01-04T14:30:02Z</updated>

		<summary type="html">&lt;p&gt;Fab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=13103</id>
		<title>Alpine Linux:Trivia</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=13103"/>
		<updated>2017-01-04T14:24:27Z</updated>

		<summary type="html">&lt;p&gt;Fab: update for 3.5&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains only irrelevant and unhelpful information and statistics about Alpine Linux. If you are going to prepare a talk about Alpine Linux, perhaps some information mentioned here can be used for the intro. &lt;br /&gt;
&lt;br /&gt;
= The first release =&lt;br /&gt;
* Archives going back to 1.1 are (currently) at http://ancient.alpinelinux.org &lt;br /&gt;
* First public mention of &amp;quot;Alpine Linux&amp;quot; is archived here: http://comments.gmane.org/gmane.linux.leaf.devel/1183 (2005)&lt;br /&gt;
* The first saved [[Release_Notes_for_Alpine_1.7.3|release notes]] were made for 1.7.3.&lt;br /&gt;
&lt;br /&gt;
= The name =&lt;br /&gt;
&amp;quot;Alpine&amp;quot; originally stood for &#039;&#039;&#039;A&#039;&#039;&#039; &#039;&#039;&#039;L&#039;&#039;&#039;inux &#039;&#039;&#039;P&#039;&#039;&#039;owered &#039;&#039;&#039;I&#039;&#039;&#039;ntegrated &#039;&#039;&#039;N&#039;&#039;&#039;etwork &#039;&#039;&#039;E&#039;&#039;&#039;ngine. The idea was that the distribution would be focused on networking, and be a tiny &amp;quot;engine&amp;quot; or framework, which larger systems could be built upon. Today, &amp;quot;Alpine&amp;quot; is nothing more than a name.&lt;br /&gt;
&lt;br /&gt;
= Who is working on Alpine Linux? =&lt;br /&gt;
&lt;br /&gt;
* Check the statistics of cgit, e. g. [http://git.alpinelinux.org/cgit/aports/stats/?period=y&amp;amp;ofs=50 aports]&lt;br /&gt;
&lt;br /&gt;
= Packages =&lt;br /&gt;
&lt;br /&gt;
* [https://www.ohloh.net/p/aports aports] statistics provided by Ohloh.&lt;br /&gt;
&lt;br /&gt;
== Packages per release ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Release&lt;br /&gt;
! Total&lt;br /&gt;
! normal&lt;br /&gt;
! dev&lt;br /&gt;
! doc&lt;br /&gt;
! libs&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.5&#039;&#039;&#039;&lt;br /&gt;
| 5643&lt;br /&gt;
| 3615&lt;br /&gt;
| 678&lt;br /&gt;
| 1264&lt;br /&gt;
| 86&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| 5231&lt;br /&gt;
| 3253&lt;br /&gt;
| 664&lt;br /&gt;
| 1235&lt;br /&gt;
| 79&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| 5314&lt;br /&gt;
| 3328&lt;br /&gt;
| 676&lt;br /&gt;
| 1239&lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| 5277&lt;br /&gt;
| 3343&lt;br /&gt;
| 684&lt;br /&gt;
| 1189&lt;br /&gt;
| 61&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| 4860&lt;br /&gt;
| 3075&lt;br /&gt;
| 620&lt;br /&gt;
| 1109&lt;br /&gt;
| 56&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| 4410&lt;br /&gt;
| 2752&lt;br /&gt;
| 578&lt;br /&gt;
| 1029&lt;br /&gt;
| 51&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.7&#039;&#039;&#039;&lt;br /&gt;
| 4205&lt;br /&gt;
| 2605&lt;br /&gt;
| 570&lt;br /&gt;
| 982&lt;br /&gt;
| 48&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.6&#039;&#039;&#039;&lt;br /&gt;
| 3918&lt;br /&gt;
| 2405&lt;br /&gt;
| 534&lt;br /&gt;
| 943&lt;br /&gt;
| 36&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.5&#039;&#039;&#039;&lt;br /&gt;
| 3676&lt;br /&gt;
| 2233&lt;br /&gt;
| 498&lt;br /&gt;
| 912&lt;br /&gt;
| 33&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.4&#039;&#039;&#039;&lt;br /&gt;
| 3376&lt;br /&gt;
| 2021&lt;br /&gt;
| 457&lt;br /&gt;
| 874&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| 3146&lt;br /&gt;
| 1866&lt;br /&gt;
| 435&lt;br /&gt;
| 827&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| 2608&lt;br /&gt;
| 1502&lt;br /&gt;
| 444&lt;br /&gt;
| 652&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| 2135&lt;br /&gt;
| 1222&lt;br /&gt;
| 365&lt;br /&gt;
| 547&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| 1983&lt;br /&gt;
| 1139&lt;br /&gt;
| 332&lt;br /&gt;
| 511&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.10&#039;&#039;&#039;&lt;br /&gt;
| 1639&lt;br /&gt;
| 918&lt;br /&gt;
| 282&lt;br /&gt;
| 438&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.9&#039;&#039;&#039;&lt;br /&gt;
| 958&lt;br /&gt;
| 549&lt;br /&gt;
| 139&lt;br /&gt;
| 269&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:201608-aports.png|center|Aports]]&lt;br /&gt;
&lt;br /&gt;
== Commit per year to aports ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2008 : 146&lt;br /&gt;
2009 : 3122&lt;br /&gt;
2010 : 3365&lt;br /&gt;
2011 : 5561&lt;br /&gt;
2012 : 5312&lt;br /&gt;
2013 : 6597&lt;br /&gt;
2014 : 5759&lt;br /&gt;
2015 : 7315&lt;br /&gt;
2016 : 1383 (so far)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;High score list&amp;quot; of committer to aports ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 22872	Natanael Copa&lt;br /&gt;
  1873	Carlo Landmeter&lt;br /&gt;
  1804	Timo Teräs&lt;br /&gt;
  1725	Fabian Affolter&lt;br /&gt;
  1637	Leonardo Arena&lt;br /&gt;
  1317	William Pitcock&lt;br /&gt;
  1230	Bartłomiej Piotrowski&lt;br /&gt;
  1105	Francesco Colista&lt;br /&gt;
   686	Ted Trask&lt;br /&gt;
   562	Sören Tempel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== First commit to aports == &lt;br /&gt;
The first commit in git was made:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit 645531103b2ee8ef54d53a58eca3b52f7d3fb9ac&lt;br /&gt;
Author: Natanael Copa &amp;lt;ncopa@alpinelinux.org&amp;gt;&lt;br /&gt;
Date:   Sat Oct 18 09:16:29 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    added busybox&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Development_using_git:Developer_repositories&amp;diff=13016</id>
		<title>Development using git:Developer repositories</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Development_using_git:Developer_repositories&amp;diff=13016"/>
		<updated>2016-11-06T14:02:38Z</updated>

		<summary type="html">&lt;p&gt;Fab: Add tld&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
__FORCETOC__&lt;br /&gt;
&lt;br /&gt;
Some git repositories of Alpine developer are hosted at [http://git.alpinelinux.org/ git.alpinelinux.org]. Developers who has no push access to the offical aports repo can has a developer aports repo that can be used as a staging area. Developers with push access, &#039;&#039;integration managers&#039;&#039;, can review and pull from this or can choose to reject if the changes needs more fixing.&lt;br /&gt;
&lt;br /&gt;
The git repos are to be used when there are many changes (more than 3) that need no or very little review. If comments are requested or if there are doubts, then its better to use &#039;&#039;git send-email&#039;&#039;. It might also be better to use &#039;&#039;git send-email&#039;&#039; for single commits.&lt;br /&gt;
&lt;br /&gt;
== Git Push (Distributed Workflows) ==&lt;br /&gt;
When working with [http://book.git-scm.com/3_distributed_workflows.html Distributed Workflows] you would &#039;pull&#039; from public repository, &#039;push&#039; to another publically accessible repository &#039;&#039;(where you have write access)&#039;&#039;, main developeres or &#039;&#039;integration managers&#039;&#039; who have write access to public repository, &#039;pulls&#039; you changes from your public accessed repository into the blessed official public repository. &lt;br /&gt;
&lt;br /&gt;
To make it easier for you to work, you can configure &#039;git push&#039; to push your work to your public developer repository (&#039;git pull&#039; would still pull from the blessed/official repository as you cloned from).&lt;br /&gt;
{{cmd|cd /your/private/repo/where/you/work/reponame&lt;br /&gt;
git config remote.origin.pushurl &amp;quot;ssh://user@dev.alpinelinux.org/home/user/cgit/reponame.git&amp;quot;}}&lt;br /&gt;
Now &#039;git pull&#039; pulls the official, blessed, repository and &#039;git push&#039; pushes to &#039;&#039;&#039;your&#039;&#039;&#039; public developer repository.&lt;br /&gt;
{{Note|The path where you want to push to should first be prepared with {{cmd|git clone --bare ...}} as described below in section &#039;Upload the new project&#039;}}&lt;br /&gt;
&lt;br /&gt;
== Requesting a pull from developer repo to official ==&lt;br /&gt;
Before asking for merging the developer repo into the official make sure that:&lt;br /&gt;
# All modified packages builds&lt;br /&gt;
# The commit history looks nice. You can use the [http://git.alpinelinux.org/cgit cgit interface] for this. It is a goal that it should be easy to revert single commits in case problems should appear in future so avoid changing multiple packages with single commits.&lt;br /&gt;
&lt;br /&gt;
Before asking for a pull, rebase your public repo with the official repo. This is done with:&lt;br /&gt;
{{Cmd|git pull --rebase&lt;br /&gt;
git push}}&lt;br /&gt;
&lt;br /&gt;
If there have been changes in official repo that conflicts with your work, then you have to resolve those conflicts. And maybe redo or drop some of your commits.&lt;br /&gt;
&lt;br /&gt;
You can ask directly on IRC #alpine-devel or by sending an email to alpine-devel mailing list. Please include the git url (eg. git://git.alpinelinux.org/user/aports.git) that can easily be copied and pasted and please also mention &#039;&#039;why&#039;&#039; the merge is needed. This explanation is meant to be copied and pasted in the merge commit unless the pull is a fast-forward.&lt;br /&gt;
&lt;br /&gt;
Example request on IRC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
please git pull git://git.alpinelinux.org/ncopa/aports&lt;br /&gt;
It includes a new python application pyfoo with all its dependencies.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Example email:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Subject: please git pull git://git.alpinelinux.org/ncopa/aports&lt;br /&gt;
&lt;br /&gt;
The libfoo was upgraded to 2.0. This upgrade breaks ABI so all packages linking&lt;br /&gt;
to libfoo was rebuilt. The rebuilt packages was:&lt;br /&gt;
- libbar&lt;br /&gt;
- bazapp&lt;br /&gt;
- bar-utils&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Dealing with pull rejects ==&lt;br /&gt;
If the pull was rejected for some reason or you need change things, then you can do an interactive reabase.&lt;br /&gt;
{{Cmd|git rebase --interactive}}&lt;br /&gt;
This will let you go thru all you commits inteactively, fix up commits and/or commit messages (aka --ammend), merge commits etc. It might be the &#039;&#039;integration manager&#039;&#039; will see what you are trying to fix and just fix it there and then. In that case you might need drop your own commit. This can also be done with &#039;&#039;git rebase&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
When the needed changes have been done you again push to your public developer repo (and as always you &#039;&#039;git pull --rebase&#039;&#039; before pushing), but since the history have changed due to the rebase git might give you an error message when pushing. As long no-one else have cloned/pulled your repo, it should safe to use --force option.&lt;br /&gt;
{{Cmd|git push --force}}&lt;br /&gt;
Note that this will overwrite the changes and history on your public repo so make sure that your local work clone has all the commits that should be there. (use git log to verify).&lt;br /&gt;
&lt;br /&gt;
This also means that only the &#039;&#039;integration managers&#039;&#039; should pull from the developers repo. All other developers should pull from the blessed repository. (In theory multiple developers can work on a bigger subproject but then one of the developers should work as a &#039;&#039;lieutenant&#039;&#039; in the [http://git-scm.com/book/ch5-1.html#Dictator-and-Lieutenants-Workflow dictator and lieutenants workflow].)&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Git]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=12910</id>
		<title>Alpine Linux:Trivia</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=12910"/>
		<updated>2016-08-29T10:32:21Z</updated>

		<summary type="html">&lt;p&gt;Fab: update graph&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains only irrelevant and unhelpful information and statistics about Alpine Linux. If you are going to prepare a talk about Alpine Linux, perhaps some information mentioned here can be used for the intro. &lt;br /&gt;
&lt;br /&gt;
= The first release =&lt;br /&gt;
* Archives going back to 1.1 are (currently) at http://ancient.alpinelinux.org &lt;br /&gt;
* First public mention of &amp;quot;Alpine Linux&amp;quot; is archived here: http://comments.gmane.org/gmane.linux.leaf.devel/1183 (2005)&lt;br /&gt;
* The first saved [[Release_Notes_for_Alpine_1.7.3|release notes]] were made for 1.7.3.&lt;br /&gt;
&lt;br /&gt;
= The name =&lt;br /&gt;
&amp;quot;Alpine&amp;quot; originally stood for &#039;&#039;&#039;A&#039;&#039;&#039; &#039;&#039;&#039;L&#039;&#039;&#039;inux &#039;&#039;&#039;P&#039;&#039;&#039;owered &#039;&#039;&#039;I&#039;&#039;&#039;ntegrated &#039;&#039;&#039;N&#039;&#039;&#039;etwork &#039;&#039;&#039;E&#039;&#039;&#039;ngine. The idea was that the distribution would be focused on networking, and be a tiny &amp;quot;engine&amp;quot; or framework, which larger systems could be built upon. Today, &amp;quot;Alpine&amp;quot; is nothing more than a name.&lt;br /&gt;
&lt;br /&gt;
= Who is working on Alpine Linux? =&lt;br /&gt;
&lt;br /&gt;
* Check the statistics of cgit, e. g. [http://git.alpinelinux.org/cgit/aports/stats/?period=y&amp;amp;ofs=50 aports]&lt;br /&gt;
&lt;br /&gt;
= Packages =&lt;br /&gt;
&lt;br /&gt;
* [https://www.ohloh.net/p/aports aports] statistics provided by Ohloh.&lt;br /&gt;
&lt;br /&gt;
== Packages per release ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Release&lt;br /&gt;
! Total&lt;br /&gt;
! normal&lt;br /&gt;
! dev&lt;br /&gt;
! doc&lt;br /&gt;
! libs&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| 5231&lt;br /&gt;
| 3253&lt;br /&gt;
| 664&lt;br /&gt;
| 1235&lt;br /&gt;
| 79&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| 5314&lt;br /&gt;
| 3328&lt;br /&gt;
| 676&lt;br /&gt;
| 1239&lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| 5277&lt;br /&gt;
| 3343&lt;br /&gt;
| 684&lt;br /&gt;
| 1189&lt;br /&gt;
| 61&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| 4860&lt;br /&gt;
| 3075&lt;br /&gt;
| 620&lt;br /&gt;
| 1109&lt;br /&gt;
| 56&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| 4410&lt;br /&gt;
| 2752&lt;br /&gt;
| 578&lt;br /&gt;
| 1029&lt;br /&gt;
| 51&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.7&#039;&#039;&#039;&lt;br /&gt;
| 4205&lt;br /&gt;
| 2605&lt;br /&gt;
| 570&lt;br /&gt;
| 982&lt;br /&gt;
| 48&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.6&#039;&#039;&#039;&lt;br /&gt;
| 3918&lt;br /&gt;
| 2405&lt;br /&gt;
| 534&lt;br /&gt;
| 943&lt;br /&gt;
| 36&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.5&#039;&#039;&#039;&lt;br /&gt;
| 3676&lt;br /&gt;
| 2233&lt;br /&gt;
| 498&lt;br /&gt;
| 912&lt;br /&gt;
| 33&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.4&#039;&#039;&#039;&lt;br /&gt;
| 3376&lt;br /&gt;
| 2021&lt;br /&gt;
| 457&lt;br /&gt;
| 874&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| 3146&lt;br /&gt;
| 1866&lt;br /&gt;
| 435&lt;br /&gt;
| 827&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| 2608&lt;br /&gt;
| 1502&lt;br /&gt;
| 444&lt;br /&gt;
| 652&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| 2135&lt;br /&gt;
| 1222&lt;br /&gt;
| 365&lt;br /&gt;
| 547&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| 1983&lt;br /&gt;
| 1139&lt;br /&gt;
| 332&lt;br /&gt;
| 511&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.10&#039;&#039;&#039;&lt;br /&gt;
| 1639&lt;br /&gt;
| 918&lt;br /&gt;
| 282&lt;br /&gt;
| 438&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.9&#039;&#039;&#039;&lt;br /&gt;
| 958&lt;br /&gt;
| 549&lt;br /&gt;
| 139&lt;br /&gt;
| 269&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:201608-aports.png|center|Aports]]&lt;br /&gt;
&lt;br /&gt;
== Commit per year to aports ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2008 : 146&lt;br /&gt;
2009 : 3122&lt;br /&gt;
2010 : 3365&lt;br /&gt;
2011 : 5561&lt;br /&gt;
2012 : 5312&lt;br /&gt;
2013 : 6597&lt;br /&gt;
2014 : 5759&lt;br /&gt;
2015 : 7315&lt;br /&gt;
2016 : 1383 (so far)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;High score list&amp;quot; of committer to aports ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 22872	Natanael Copa&lt;br /&gt;
  1873	Carlo Landmeter&lt;br /&gt;
  1804	Timo Teräs&lt;br /&gt;
  1725	Fabian Affolter&lt;br /&gt;
  1637	Leonardo Arena&lt;br /&gt;
  1317	William Pitcock&lt;br /&gt;
  1230	Bartłomiej Piotrowski&lt;br /&gt;
  1105	Francesco Colista&lt;br /&gt;
   686	Ted Trask&lt;br /&gt;
   562	Sören Tempel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== First commit to aports == &lt;br /&gt;
The first commit in git was made:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit 645531103b2ee8ef54d53a58eca3b52f7d3fb9ac&lt;br /&gt;
Author: Natanael Copa &amp;lt;ncopa@alpinelinux.org&amp;gt;&lt;br /&gt;
Date:   Sat Oct 18 09:16:29 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    added busybox&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=File:201608-aports.png&amp;diff=12909</id>
		<title>File:201608-aports.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=File:201608-aports.png&amp;diff=12909"/>
		<updated>2016-08-29T10:30:06Z</updated>

		<summary type="html">&lt;p&gt;Fab: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=12908</id>
		<title>Alpine Linux:Trivia</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=12908"/>
		<updated>2016-08-29T10:25:28Z</updated>

		<summary type="html">&lt;p&gt;Fab: add 3.4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains only irrelevant and unhelpful information and statistics about Alpine Linux. If you are going to prepare a talk about Alpine Linux, perhaps some information mentioned here can be used for the intro. &lt;br /&gt;
&lt;br /&gt;
= The first release =&lt;br /&gt;
* Archives going back to 1.1 are (currently) at http://ancient.alpinelinux.org &lt;br /&gt;
* First public mention of &amp;quot;Alpine Linux&amp;quot; is archived here: http://comments.gmane.org/gmane.linux.leaf.devel/1183 (2005)&lt;br /&gt;
* The first saved [[Release_Notes_for_Alpine_1.7.3|release notes]] were made for 1.7.3.&lt;br /&gt;
&lt;br /&gt;
= The name =&lt;br /&gt;
&amp;quot;Alpine&amp;quot; originally stood for &#039;&#039;&#039;A&#039;&#039;&#039; &#039;&#039;&#039;L&#039;&#039;&#039;inux &#039;&#039;&#039;P&#039;&#039;&#039;owered &#039;&#039;&#039;I&#039;&#039;&#039;ntegrated &#039;&#039;&#039;N&#039;&#039;&#039;etwork &#039;&#039;&#039;E&#039;&#039;&#039;ngine. The idea was that the distribution would be focused on networking, and be a tiny &amp;quot;engine&amp;quot; or framework, which larger systems could be built upon. Today, &amp;quot;Alpine&amp;quot; is nothing more than a name.&lt;br /&gt;
&lt;br /&gt;
= Who is working on Alpine Linux? =&lt;br /&gt;
&lt;br /&gt;
* Check the statistics of cgit, e. g. [http://git.alpinelinux.org/cgit/aports/stats/?period=y&amp;amp;ofs=50 aports]&lt;br /&gt;
&lt;br /&gt;
= Packages =&lt;br /&gt;
&lt;br /&gt;
* [https://www.ohloh.net/p/aports aports] statistics provided by Ohloh.&lt;br /&gt;
&lt;br /&gt;
== Packages per release ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Release&lt;br /&gt;
! Total&lt;br /&gt;
! normal&lt;br /&gt;
! dev&lt;br /&gt;
! doc&lt;br /&gt;
! libs&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.4&#039;&#039;&#039;&lt;br /&gt;
| 5231&lt;br /&gt;
| 3253&lt;br /&gt;
| 664&lt;br /&gt;
| 1235&lt;br /&gt;
| 79&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| 5314&lt;br /&gt;
| 3328&lt;br /&gt;
| 676&lt;br /&gt;
| 1239&lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| 5277&lt;br /&gt;
| 3343&lt;br /&gt;
| 684&lt;br /&gt;
| 1189&lt;br /&gt;
| 61&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| 4860&lt;br /&gt;
| 3075&lt;br /&gt;
| 620&lt;br /&gt;
| 1109&lt;br /&gt;
| 56&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| 4410&lt;br /&gt;
| 2752&lt;br /&gt;
| 578&lt;br /&gt;
| 1029&lt;br /&gt;
| 51&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.7&#039;&#039;&#039;&lt;br /&gt;
| 4205&lt;br /&gt;
| 2605&lt;br /&gt;
| 570&lt;br /&gt;
| 982&lt;br /&gt;
| 48&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.6&#039;&#039;&#039;&lt;br /&gt;
| 3918&lt;br /&gt;
| 2405&lt;br /&gt;
| 534&lt;br /&gt;
| 943&lt;br /&gt;
| 36&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.5&#039;&#039;&#039;&lt;br /&gt;
| 3676&lt;br /&gt;
| 2233&lt;br /&gt;
| 498&lt;br /&gt;
| 912&lt;br /&gt;
| 33&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.4&#039;&#039;&#039;&lt;br /&gt;
| 3376&lt;br /&gt;
| 2021&lt;br /&gt;
| 457&lt;br /&gt;
| 874&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| 3146&lt;br /&gt;
| 1866&lt;br /&gt;
| 435&lt;br /&gt;
| 827&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| 2608&lt;br /&gt;
| 1502&lt;br /&gt;
| 444&lt;br /&gt;
| 652&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| 2135&lt;br /&gt;
| 1222&lt;br /&gt;
| 365&lt;br /&gt;
| 547&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| 1983&lt;br /&gt;
| 1139&lt;br /&gt;
| 332&lt;br /&gt;
| 511&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.10&#039;&#039;&#039;&lt;br /&gt;
| 1639&lt;br /&gt;
| 918&lt;br /&gt;
| 282&lt;br /&gt;
| 438&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.9&#039;&#039;&#039;&lt;br /&gt;
| 958&lt;br /&gt;
| 549&lt;br /&gt;
| 139&lt;br /&gt;
| 269&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:201501-aports.png|center|Aports]]&lt;br /&gt;
&lt;br /&gt;
== Commit per year to aports ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2008 : 146&lt;br /&gt;
2009 : 3122&lt;br /&gt;
2010 : 3365&lt;br /&gt;
2011 : 5561&lt;br /&gt;
2012 : 5312&lt;br /&gt;
2013 : 6597&lt;br /&gt;
2014 : 5759&lt;br /&gt;
2015 : 7315&lt;br /&gt;
2016 : 1383 (so far)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;High score list&amp;quot; of committer to aports ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 22872	Natanael Copa&lt;br /&gt;
  1873	Carlo Landmeter&lt;br /&gt;
  1804	Timo Teräs&lt;br /&gt;
  1725	Fabian Affolter&lt;br /&gt;
  1637	Leonardo Arena&lt;br /&gt;
  1317	William Pitcock&lt;br /&gt;
  1230	Bartłomiej Piotrowski&lt;br /&gt;
  1105	Francesco Colista&lt;br /&gt;
   686	Ted Trask&lt;br /&gt;
   562	Sören Tempel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== First commit to aports == &lt;br /&gt;
The first commit in git was made:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit 645531103b2ee8ef54d53a58eca3b52f7d3fb9ac&lt;br /&gt;
Author: Natanael Copa &amp;lt;ncopa@alpinelinux.org&amp;gt;&lt;br /&gt;
Date:   Sat Oct 18 09:16:29 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    added busybox&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Fab&amp;diff=12907</id>
		<title>User:Fab</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Fab&amp;diff=12907"/>
		<updated>2016-08-29T09:44:39Z</updated>

		<summary type="html">&lt;p&gt;Fab: update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;My Name is Fabian Affolter and I&#039;m living in Berne/Switzerland. One of my passions is free software and open source. I&#039;m a long time contributor to various free and open source software projects. A big bunch of my spare time is spent on the [https://fedoraproject.org Fedora Project] and [http://bcfg2.org Bcfg2].  &lt;br /&gt;
&lt;br /&gt;
By the way, my first system was a Amiga 2000 but this is a long long time ago ;-). &lt;br /&gt;
&lt;br /&gt;
My area of interest are computer aided design (CAD), computer algebra system (CAS), provisioning, automatic configuration management, version control systems, software packaging, and microcontrollers.&lt;br /&gt;
&lt;br /&gt;
Apart from spending time at the computer, I like to read, to listen to music, and to hike in the Swiss mountains.&lt;br /&gt;
&lt;br /&gt;
== more personal stuff ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039; Location&#039;&#039;&#039;:  [http://en.wikipedia.org/wiki/Berne Berne]  [http://de.wikipedia.org/wiki/Bern Bern], [http://en.wikipedia.org/wiki/Switzerland Switzerland] [http://de.wikipedia.org/wiki/Schweiz Schweiz]&lt;br /&gt;
* &#039;&#039;&#039; Time zone&#039;&#039;&#039; :  UTC +01:00 (CET) or UTC +02:00 (CEST)&lt;br /&gt;
* &#039;&#039;&#039; Languages&#039;&#039;&#039; :  German (it&#039;s more Swiss German), English, and French&lt;br /&gt;
* &#039;&#039;&#039; Profession&#039;&#039;&#039; :  Senior Engineer, B.Sc. [http://www.ti.bfh.ch/en/bachelor/mechanical.html ME] and [http://www.ti.bfh.ch/en/bachelor/computer_science.html CS] [http://www.ti.bfh.ch/ Berne University of Applied Sciences] - Engineering and Information Technology&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Postal address&#039;&#039;&#039; :&lt;br /&gt;
::ask for the street&lt;br /&gt;
::CH-3000 Berne&lt;br /&gt;
::Switzerland&lt;br /&gt;
* &#039;&#039;&#039;Blog&#039;&#039;&#039; : [http://blog.fabian-affolter.ch/ My blog] (be aware...some parts are in german)&lt;br /&gt;
* &#039;&#039;&#039;Websites&#039;&#039;&#039;: [http://fabian-affolter.ch/ fabian-affolter.ch]&lt;br /&gt;
* &#039;&#039;&#039;Email&#039;&#039;&#039;:  [mailto:fabian%affolter-engineering%2ench fabian AT affolter-engineering DOT ch]&lt;br /&gt;
* &#039;&#039;&#039;GPG/PGP&#039;&#039;&#039; : [http://pgp.mit.edu:11371/pks/lookup?op=get&amp;amp;search=0x36A4397F 0x36A4397F] &lt;br /&gt;
* &#039;&#039;&#039;Jabber&#039;&#039;&#039; : fab AT swissjabber DOT org&lt;br /&gt;
* &#039;&#039;&#039;IRC&#039;&#039;&#039; : faffolter (or fabian_a) on FreeNode&lt;br /&gt;
&lt;br /&gt;
== Misc ==&lt;br /&gt;
* [[Alpine_Security_and_Rescue|Alpine Security Flavor]]&lt;br /&gt;
* [[User:Fab/Personal_aports_repo|Personal aport repo]]&lt;br /&gt;
* [[User:Fab/Stats|Stats]]&lt;br /&gt;
* [[User:Fab/Cleanup|Cleanup]]&lt;br /&gt;
* [[User:Fab/msg.alpinelinux.org|msg.alpinelinux.org]]&lt;br /&gt;
* [[User:Fab/Notifications|Notifications]]&lt;br /&gt;
&lt;br /&gt;
=== Configuration management ===&lt;br /&gt;
&lt;br /&gt;
* [[User:Fab/Ansible|Ansible]]&lt;br /&gt;
* [[User:Fab/Bcfg2|Bcfg2]]&lt;br /&gt;
* [[User:Fab/Salt|Salt]]&lt;br /&gt;
&lt;br /&gt;
=== Other docs ===&lt;br /&gt;
* [[User:Fab/Nodejs|Node.js]]&lt;br /&gt;
* [[User:Fab/Ocr|OCR]]&lt;br /&gt;
* [[User:Fab/Tryton|Tryton]]&lt;br /&gt;
* [[User:Fab/Metasploit|Metasploit]]&lt;br /&gt;
* [[User:Fab/Beeswarm|Beeswarm]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=PhpSysInfo&amp;diff=12724</id>
		<title>PhpSysInfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=PhpSysInfo&amp;diff=12724"/>
		<updated>2016-04-29T13:39:05Z</updated>

		<summary type="html">&lt;p&gt;Fab: Update to 3.2.5&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://phpsysinfo.sourceforge.net/ phpSysInfo] is a simple application that displays information about the host it&#039;s running on.&lt;br /&gt;
&lt;br /&gt;
The following stuff is shown&lt;br /&gt;
&lt;br /&gt;
* Uptime&lt;br /&gt;
* CPU&lt;br /&gt;
* Memory&lt;br /&gt;
* SCSI, IDE, PCI&lt;br /&gt;
* Ethernet&lt;br /&gt;
* Floppy&lt;br /&gt;
* Video Information&lt;br /&gt;
&lt;br /&gt;
== Install lighttpd and PHP ==&lt;br /&gt;
{{:Setting_Up_Lighttpd_With_FastCGI}}&lt;br /&gt;
&lt;br /&gt;
== Installation of pypSysInfo ==&lt;br /&gt;
&lt;br /&gt;
Create a directory named {{Path|webapps}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|mkdir -p /usr/share/webapps/}}&lt;br /&gt;
&lt;br /&gt;
Now get the current release of phpSysInfo.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cd /usr/share/webapps/&lt;br /&gt;
wget http://downloads.sourceforge.net/project/phpsysinfo/phpsysinfo/3.2.5/phpsysinfo-3.2.5.tar.gz}}&lt;br /&gt;
&lt;br /&gt;
Unpack the archive in the current location&lt;br /&gt;
&lt;br /&gt;
{{Cmd|tar -xzf phpsysinfo-3.2.5.tar.gz &amp;amp;&amp;amp; rm phpsysinfo-3.2.5.tar.gz}}&lt;br /&gt;
&lt;br /&gt;
A {{Path|config.php}} is needed to run phpSysInfo. The fastest way is to make a copy of the template file.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cp phpsysinfo/config.php.new phpsysinfo/config.php}}&lt;br /&gt;
&lt;br /&gt;
Create a symlink that point to the webserver directory.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|ln -s /usr/share/webapps/phpsysinfo/ /var/www/localhost/htdocs/phpsysinfo}}&lt;br /&gt;
&lt;br /&gt;
Change the permission of the directory.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|chmod -R 777 /usr/share/webapps/}}&lt;br /&gt;
&lt;br /&gt;
Restart lighttpd&lt;br /&gt;
&lt;br /&gt;
{{Cmd|/etc/init.d/lighttpd restart}}&lt;br /&gt;
&lt;br /&gt;
Now the page is up and running&lt;br /&gt;
&lt;br /&gt;
http://IP-ADDRESS/phpsysinfo&lt;br /&gt;
&lt;br /&gt;
[[Category:Monitoring]] [[Category:PHP]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=User:Fab/Stats&amp;diff=12538</id>
		<title>User:Fab/Stats</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=User:Fab/Stats&amp;diff=12538"/>
		<updated>2016-03-30T10:50:13Z</updated>

		<summary type="html">&lt;p&gt;Fab: update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Some ideas to gether data for statistics about Alpine Linux. &lt;br /&gt;
&lt;br /&gt;
The data are presented at the [[Alpine_Linux:Trivia|Trivia]] page. A git repository is available [http://git.alpinelinux.org/cgit/fab/alpine-stats/ here].&lt;br /&gt;
&lt;br /&gt;
= Packages =&lt;br /&gt;
&lt;br /&gt;
== Ancient releases ==&lt;br /&gt;
&lt;br /&gt;
See: http://ancient.alpinelinux.org/alpine/&lt;br /&gt;
&lt;br /&gt;
* Grab INDEX.md5.gz (e.g. http://ancient.alpinelinux.org/alpine/v1.1/apks/INDEX.md5.gz)&lt;br /&gt;
* Count the entries&lt;br /&gt;
* Print the number of packages&lt;br /&gt;
&lt;br /&gt;
== Newer releases ==&lt;br /&gt;
&lt;br /&gt;
* Grab APKINDEX.tar.gz (e.g. http://nl.alpinelinux.org/alpine/v2.4/main/x86/APKINDEX.tar.gz)&lt;br /&gt;
* Count the lines which starts with P: (e.g. P:libxinerama-dev, P:postfix) in APKINDEX&lt;br /&gt;
* Perhaps separate packages (-dev, -doc, -lang)&lt;br /&gt;
* Print the data&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;High score list&amp;quot; of committer ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|git shortlog -s -n | head}}&lt;br /&gt;
&lt;br /&gt;
== Commit per year ==&lt;br /&gt;
To grab the data use the command below:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|&amp;lt;nowiki&amp;gt;git log --after=&amp;quot;2016/1/1&amp;quot; --until=&amp;quot;2016/12/31&amp;quot; --pretty=format:&#039;&#039; | wc -l&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
= Tools =&lt;br /&gt;
Some tools which could help to generate statistics. &lt;br /&gt;
&lt;br /&gt;
* [http://gitstats.sourceforge.net/ GitStats] - git history statistics generator&lt;br /&gt;
  {{Cmd|apk add gitstats -U -X http://dl-3.alpinelinux.org/alpine/edge/testing/ --allow-untrusted}}&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=12521</id>
		<title>Alpine Linux:Trivia</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Alpine_Linux:Trivia&amp;diff=12521"/>
		<updated>2016-03-22T07:32:02Z</updated>

		<summary type="html">&lt;p&gt;Fab: update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page contains only irrelevant and unhelpful information and statistics about Alpine Linux. If you are going to prepare a talk about Alpine Linux, perhaps some information mentioned here can be used for the intro. &lt;br /&gt;
&lt;br /&gt;
= The first release =&lt;br /&gt;
* Archives going back to 1.1 are (currently) at http://ancient.alpinelinux.org &lt;br /&gt;
* First public mention of &amp;quot;Alpine Linux&amp;quot; is archived here: http://comments.gmane.org/gmane.linux.leaf.devel/1183 (2005)&lt;br /&gt;
* The first saved [[Release_Notes_for_Alpine_1.7.3|release notes]] were made for 1.7.3.&lt;br /&gt;
&lt;br /&gt;
= The name =&lt;br /&gt;
&amp;quot;Alpine&amp;quot; originally stood for &#039;&#039;&#039;A&#039;&#039;&#039; &#039;&#039;&#039;L&#039;&#039;&#039;inux &#039;&#039;&#039;P&#039;&#039;&#039;owered &#039;&#039;&#039;I&#039;&#039;&#039;ntegrated &#039;&#039;&#039;N&#039;&#039;&#039;etwork &#039;&#039;&#039;E&#039;&#039;&#039;ngine. The idea was that the distribution would be focused on networking, and be a tiny &amp;quot;engine&amp;quot; or framework, which larger systems could be built upon. Today, &amp;quot;Alpine&amp;quot; is nothing more than a name.&lt;br /&gt;
&lt;br /&gt;
= Who is working on Alpine Linux? =&lt;br /&gt;
&lt;br /&gt;
* Check the statistics of cgit, e. g. [http://git.alpinelinux.org/cgit/aports/stats/?period=y&amp;amp;ofs=50 aports]&lt;br /&gt;
&lt;br /&gt;
= Packages =&lt;br /&gt;
&lt;br /&gt;
* [https://www.ohloh.net/p/aports aports] statistics provided by Ohloh.&lt;br /&gt;
&lt;br /&gt;
== Packages per release ==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot; class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|- &lt;br /&gt;
! Release&lt;br /&gt;
! Total&lt;br /&gt;
! normal&lt;br /&gt;
! dev&lt;br /&gt;
! doc&lt;br /&gt;
! libs&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.3&#039;&#039;&#039;&lt;br /&gt;
| 5314&lt;br /&gt;
| 3328&lt;br /&gt;
| 676&lt;br /&gt;
| 1239&lt;br /&gt;
| 71&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.2&#039;&#039;&#039;&lt;br /&gt;
| 5277&lt;br /&gt;
| 3343&lt;br /&gt;
| 684&lt;br /&gt;
| 1189&lt;br /&gt;
| 61&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.1&#039;&#039;&#039;&lt;br /&gt;
| 4860&lt;br /&gt;
| 3075&lt;br /&gt;
| 620&lt;br /&gt;
| 1109&lt;br /&gt;
| 56&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;3.0&#039;&#039;&#039;&lt;br /&gt;
| 4410&lt;br /&gt;
| 2752&lt;br /&gt;
| 578&lt;br /&gt;
| 1029&lt;br /&gt;
| 51&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.7&#039;&#039;&#039;&lt;br /&gt;
| 4205&lt;br /&gt;
| 2605&lt;br /&gt;
| 570&lt;br /&gt;
| 982&lt;br /&gt;
| 48&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.6&#039;&#039;&#039;&lt;br /&gt;
| 3918&lt;br /&gt;
| 2405&lt;br /&gt;
| 534&lt;br /&gt;
| 943&lt;br /&gt;
| 36&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.5&#039;&#039;&#039;&lt;br /&gt;
| 3676&lt;br /&gt;
| 2233&lt;br /&gt;
| 498&lt;br /&gt;
| 912&lt;br /&gt;
| 33&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.4&#039;&#039;&#039;&lt;br /&gt;
| 3376&lt;br /&gt;
| 2021&lt;br /&gt;
| 457&lt;br /&gt;
| 874&lt;br /&gt;
| 24&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| &#039;&#039;&#039;2.3&#039;&#039;&#039;&lt;br /&gt;
| 3146&lt;br /&gt;
| 1866&lt;br /&gt;
| 435&lt;br /&gt;
| 827&lt;br /&gt;
| 18&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.2&#039;&#039;&#039;&lt;br /&gt;
| 2608&lt;br /&gt;
| 1502&lt;br /&gt;
| 444&lt;br /&gt;
| 652&lt;br /&gt;
| 10&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.1&#039;&#039;&#039;&lt;br /&gt;
| 2135&lt;br /&gt;
| 1222&lt;br /&gt;
| 365&lt;br /&gt;
| 547&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;2.0&#039;&#039;&#039;&lt;br /&gt;
| 1983&lt;br /&gt;
| 1139&lt;br /&gt;
| 332&lt;br /&gt;
| 511&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.10&#039;&#039;&#039;&lt;br /&gt;
| 1639&lt;br /&gt;
| 918&lt;br /&gt;
| 282&lt;br /&gt;
| 438&lt;br /&gt;
| 1&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;1.9&#039;&#039;&#039;&lt;br /&gt;
| 958&lt;br /&gt;
| 549&lt;br /&gt;
| 139&lt;br /&gt;
| 269&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[File:201501-aports.png|center|Aports]]&lt;br /&gt;
&lt;br /&gt;
== Commit per year to aports ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
2008 : 146&lt;br /&gt;
2009 : 3122&lt;br /&gt;
2010 : 3365&lt;br /&gt;
2011 : 5561&lt;br /&gt;
2012 : 5312&lt;br /&gt;
2013 : 6597&lt;br /&gt;
2014 : 5759&lt;br /&gt;
2015 : 7315&lt;br /&gt;
2016 : 1383 (so far)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &amp;quot;High score list&amp;quot; of committer to aports ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 22872	Natanael Copa&lt;br /&gt;
  1873	Carlo Landmeter&lt;br /&gt;
  1804	Timo Teräs&lt;br /&gt;
  1725	Fabian Affolter&lt;br /&gt;
  1637	Leonardo Arena&lt;br /&gt;
  1317	William Pitcock&lt;br /&gt;
  1230	Bartłomiej Piotrowski&lt;br /&gt;
  1105	Francesco Colista&lt;br /&gt;
   686	Ted Trask&lt;br /&gt;
   562	Sören Tempel&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== First commit to aports == &lt;br /&gt;
The first commit in git was made:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
commit 645531103b2ee8ef54d53a58eca3b52f7d3fb9ac&lt;br /&gt;
Author: Natanael Copa &amp;lt;ncopa@alpinelinux.org&amp;gt;&lt;br /&gt;
Date:   Sat Oct 18 09:16:29 2008 +0000&lt;br /&gt;
&lt;br /&gt;
    added busybox&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=1.9.0_package_changes_since_1.8.3&amp;diff=12480</id>
		<title>1.9.0 package changes since 1.8.3</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=1.9.0_package_changes_since_1.8.3&amp;diff=12480"/>
		<updated>2016-03-07T12:31:03Z</updated>

		<summary type="html">&lt;p&gt;Fab: Reverted edits by RuthHughes (talk) to last revision by Dubiousjim&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= 1.9.0 Package changes since 1.8.3 =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Removed packages:&lt;br /&gt;
acf-devtools-0.3.4&lt;br /&gt;
acf-fetch-crl-0.1.2&lt;br /&gt;
acf-gnats-0.3.6&lt;br /&gt;
acl-2.2.47&lt;br /&gt;
acpid-1.0.6-r1&lt;br /&gt;
aggregate-1.6&lt;br /&gt;
aggregate-flim-1.0.2&lt;br /&gt;
amap-5.2-r1&lt;br /&gt;
apcupsd-3.12.4&lt;br /&gt;
apg-2.3.0b-r4&lt;br /&gt;
arp-sk-0.0.16-r1&lt;br /&gt;
arpoison-0.6&lt;br /&gt;
asterisk-ldap-1.6.1_rc1-r1&lt;br /&gt;
asterisk-sounds-1.2.1&lt;br /&gt;
asterisk-sqlite-1.6.1_rc1-r1&lt;br /&gt;
atftp-0.7-r1&lt;br /&gt;
attr-2.4.41&lt;br /&gt;
audio-entropyd-1.0.1&lt;br /&gt;
authforce-0.9.9&lt;br /&gt;
barnyard-0.2.0-r1&lt;br /&gt;
bcm43xx-fwcutter-006&lt;br /&gt;
beecrypt-4.1.2-r1&lt;br /&gt;
bigeye-0.3-r1&lt;br /&gt;
bing-1.1.3&lt;br /&gt;
bmake-20080515&lt;br /&gt;
bnc-2.9.4&lt;br /&gt;
bonnie-2.0.6&lt;br /&gt;
braa-0.8-r1&lt;br /&gt;
btpd-0.13&lt;br /&gt;
bwbar-1.2.3&lt;br /&gt;
bwmon-1.3&lt;br /&gt;
calamaris-2.59&lt;br /&gt;
cdparanoia-3.10_pre2&lt;br /&gt;
chaosreader-0.94&lt;br /&gt;
chillispot-1.1.0&lt;br /&gt;
chntpw-080526&lt;br /&gt;
chpax-0.7&lt;br /&gt;
chrpath-0.13&lt;br /&gt;
clearsilver-0.10.5&lt;br /&gt;
clutch-0.4&lt;br /&gt;
cmix-1.6&lt;br /&gt;
com_err-1.41.2&lt;br /&gt;
cpio-2.9-r1&lt;br /&gt;
cpuburn-1.4&lt;br /&gt;
cryptsetup-1.0.5-r1&lt;br /&gt;
ctorrent-3.3.2&lt;br /&gt;
cups-1.3.9-r1&lt;br /&gt;
dante-1.1.19-r1&lt;br /&gt;
dash-0.5.4.11&lt;br /&gt;
debootstrap-1.0.10&lt;br /&gt;
dhclient-3.1.1&lt;br /&gt;
di-4.5&lt;br /&gt;
diffstat-1.45&lt;br /&gt;
disktype-9&lt;br /&gt;
distcc-client-3.0-r4&lt;br /&gt;
distcc-server-3.0-r4&lt;br /&gt;
dmidecode-2.9&lt;br /&gt;
dnrd-2.20.3-r1&lt;br /&gt;
dnstop-20070510-r1&lt;br /&gt;
dnstracer-1.9&lt;br /&gt;
dpkg-1.14.22&lt;br /&gt;
driftnet-0.1.6-r4&lt;br /&gt;
drupal-6.8&lt;br /&gt;
dspam-3.8.0-r15&lt;br /&gt;
dyntun-0.2&lt;br /&gt;
e2fsprogs-libs-1.41.2&lt;br /&gt;
ebtables-2.0.8.2&lt;br /&gt;
ed-1.0&lt;br /&gt;
eibd-0.0.3&lt;br /&gt;
ethloop-10-r1&lt;br /&gt;
ettercap-0.7.3-r2&lt;br /&gt;
ez-ipupdate-3.0.11_beta8-r4&lt;br /&gt;
faad2-2.6.1-r2&lt;br /&gt;
ferm-1.3.3&lt;br /&gt;
fetch-crl-2.7.0&lt;br /&gt;
ffmpeg-0.4.9_p20090201&lt;br /&gt;
findutils-4.4.0&lt;br /&gt;
flow-tools-0.68-r5&lt;br /&gt;
flyspray-0.9.9.5.1&lt;br /&gt;
fmtools-0.99.1&lt;br /&gt;
fprobe-1.1&lt;br /&gt;
fprobe-ulog-1.1&lt;br /&gt;
freeradius-2.0.5&lt;br /&gt;
freeradius-krb5-2.0.5&lt;br /&gt;
freeradius-ldap-2.0.5&lt;br /&gt;
freeradius-postgres-2.0.5&lt;br /&gt;
frox-0.7.18-r2&lt;br /&gt;
ftp-0.17-r7&lt;br /&gt;
fuse-2.7.0&lt;br /&gt;
gensink-4.1&lt;br /&gt;
giflib-4.1.6-r1&lt;br /&gt;
gmp-dev-4.2.2-r2&lt;br /&gt;
gnats-4.1.0&lt;br /&gt;
gradm-2.1.12.200805181037&lt;br /&gt;
gramofile-1.6&lt;br /&gt;
grub-0.97-r6&lt;br /&gt;
gsm-1.0.12-r1&lt;br /&gt;
gzsign-1.1&lt;br /&gt;
haproxy-1.3.15.5&lt;br /&gt;
haproxy-doc-1.3.15.5&lt;br /&gt;
hashalot-0.3-r2&lt;br /&gt;
hdparm-9.3&lt;br /&gt;
hexedit-1.2.12&lt;br /&gt;
hping-2.0.0_rc3-r1&lt;br /&gt;
hunt-1.5&lt;br /&gt;
hydra-5.4&lt;br /&gt;
icecast-2.3.2&lt;br /&gt;
ices-2.0.1-r1&lt;br /&gt;
ifenslave-1.1.0-r3&lt;br /&gt;
ifmetric-0.3&lt;br /&gt;
ii-1.4&lt;br /&gt;
imspector-0.7&lt;br /&gt;
ipac-ng-1.31-r2&lt;br /&gt;
ipband-0.8&lt;br /&gt;
ipcad-3.7&lt;br /&gt;
iperf-2.0.2&lt;br /&gt;
ipp2p-0.8.2-r4&lt;br /&gt;
ipsec-tools-cvs-0&lt;br /&gt;
ipvsadm-1.24&lt;br /&gt;
ircii-20060725&lt;br /&gt;
irda-utils-0.9.16-r1&lt;br /&gt;
iscsi-initiator-core-tools-2.3&lt;br /&gt;
isic-0.07&lt;br /&gt;
ivtv-1.2.0-r1&lt;br /&gt;
jfsutils-1.1.13&lt;br /&gt;
jpeg-6b-r8&lt;br /&gt;
kbd-1.15&lt;br /&gt;
keepalived-1.1.15&lt;br /&gt;
knock-0.5&lt;br /&gt;
lame-3.98.2&lt;br /&gt;
lft-3.0&lt;br /&gt;
libICE-1.0.4&lt;br /&gt;
libSM-1.0.3&lt;br /&gt;
libX11-1.1.4&lt;br /&gt;
libXau-1.0.3&lt;br /&gt;
libXdmcp-1.0.2&lt;br /&gt;
libXext-1.0.3&lt;br /&gt;
libaal-1.0.5&lt;br /&gt;
libao-0.8.8&lt;br /&gt;
libarchive-2.5.5&lt;br /&gt;
libart_lgpl-2.3.20&lt;br /&gt;
libconfig-1.2&lt;br /&gt;
libdvbpsi-0.1.5&lt;br /&gt;
libevent-1.4.7&lt;br /&gt;
libid3tag-0.15.1b-r2&lt;br /&gt;
liblockfile-1.06-r2&lt;br /&gt;
libmad-0.15.1b-r2&lt;br /&gt;
libpaper-1.1.23&lt;br /&gt;
libpcre-7.8&lt;br /&gt;
libshout-2.1&lt;br /&gt;
libssh-0.11&lt;br /&gt;
libtasn1-1.3&lt;br /&gt;
libtheora-1.0_beta3-r1&lt;br /&gt;
libtool-1.5.26&lt;br /&gt;
libusb-dev-0.1.12-r1&lt;br /&gt;
libuuid1-1.41.2&lt;br /&gt;
libvorbis-1.2.1_rc1&lt;br /&gt;
lilo-22.8-r2&lt;br /&gt;
linux-wlan-ng-0.2.3-r2&lt;br /&gt;
linux-wlan-ng-utils-0.2.2&lt;br /&gt;
linuxtv-dvb-apps-1.1.1.20080317&lt;br /&gt;
logsentry-1.1.1&lt;br /&gt;
lpeg-0.8.1&lt;br /&gt;
lsscsi-0.19&lt;br /&gt;
lua-discount-1.2.10&lt;br /&gt;
luafilesystem-1.4.1&lt;br /&gt;
lualdap-1.1.0&lt;br /&gt;
luasocket-2.0.2_p1&lt;br /&gt;
luasql-sqlite3-2.1.1&lt;br /&gt;
luatdb-20080214&lt;br /&gt;
luatdb-doc-20080214&lt;br /&gt;
luuid-20070925&lt;br /&gt;
lynx-2.8.6-r2&lt;br /&gt;
macchanger-1.5.0-r1&lt;br /&gt;
madwifi-ng-tools-0.9.4&lt;br /&gt;
mailbase-1&lt;br /&gt;
mailx-8.1.2.20050715-r1&lt;br /&gt;
mailx-support-20060102-r1&lt;br /&gt;
maradns-1.2.12.09&lt;br /&gt;
mawk-1.3.3&lt;br /&gt;
mcrypt-2.6.7&lt;br /&gt;
mediawiki-1.11.2&lt;br /&gt;
metalog-0.8-r1&lt;br /&gt;
metamail-2.7.45.3-r1&lt;br /&gt;
mgetty-1.1.36-r3&lt;br /&gt;
mhash-0.9.9-r1&lt;br /&gt;
mime-types-7&lt;br /&gt;
mingetty-1.08&lt;br /&gt;
minicom-2.3-r1&lt;br /&gt;
mjpegtools-1.8.0-r1&lt;br /&gt;
mktemp-1.5&lt;br /&gt;
motion-3.2.11&lt;br /&gt;
mp-3.3.18b&lt;br /&gt;
mpc-0.12.1&lt;br /&gt;
mpd-0.13.2&lt;br /&gt;
mpg321-0.2.10-r3&lt;br /&gt;
mping-2.01&lt;br /&gt;
mpt-status-1.2.0&lt;br /&gt;
mtx-1.2.18&lt;br /&gt;
mutt-1.5.16&lt;br /&gt;
mysql-init-scripts-1.2&lt;br /&gt;
nast-0.2.0&lt;br /&gt;
net-tools-1.60_p20071202044231-r1&lt;br /&gt;
netatalk-2.0.3-r2&lt;br /&gt;
netcat-110-r8&lt;br /&gt;
netkit-talk-0.17-r4&lt;br /&gt;
netwox-5.33.0&lt;br /&gt;
ngircd-0.12.0&lt;br /&gt;
ngrep-1.45-r1&lt;br /&gt;
nictools-20030719&lt;br /&gt;
ntfs3g-1.2531&lt;br /&gt;
ntfsprogs-2.0.0&lt;br /&gt;
obexftp-0.22&lt;br /&gt;
oftpd-0.3.7-r3&lt;br /&gt;
olsrd-0.5.6&lt;br /&gt;
open-iscsi-2.0.870-r1&lt;br /&gt;
opencdk-0.6.6&lt;br /&gt;
openct-0.6.14&lt;br /&gt;
openobex-1.3&lt;br /&gt;
opensc-0.11.6&lt;br /&gt;
openssh-kerberos-5.1_p1-r2&lt;br /&gt;
openssh-server-5.1_p1-r2&lt;br /&gt;
paxtest-0.9.6&lt;br /&gt;
pcalc-1.2&lt;br /&gt;
pcsc-lite-1.4.2&lt;br /&gt;
peercast-0.1218-r1&lt;br /&gt;
pfqueue-0.5.6&lt;br /&gt;
phpBB-3.0.3&lt;br /&gt;
pmacct-0.11.4&lt;br /&gt;
portage-utils-0.1.29&lt;br /&gt;
privoxy-3.0.10&lt;br /&gt;
procps-3.2.7&lt;br /&gt;
progsreiserfs-0.3.1_rc8&lt;br /&gt;
psmisc-22.6&lt;br /&gt;
psycopg-2.0.2&lt;br /&gt;
pthsem-2.0.7&lt;br /&gt;
pwcrypt-1.2.2&lt;br /&gt;
pwgen-2.06&lt;br /&gt;
python-dev-2.5.2-r7&lt;br /&gt;
rcs-5.7-r3&lt;br /&gt;
recaptcha-8.05.26&lt;br /&gt;
reiser4progs-1.0.6&lt;br /&gt;
reiserfsprogs-3.6.19-r2&lt;br /&gt;
rp-pppoe-3.8-r2&lt;br /&gt;
rrdcollect-0.2.3&lt;br /&gt;
rsyslog-3.21.9&lt;br /&gt;
rtapd-1.7&lt;br /&gt;
rtnppd-1.7b-r1&lt;br /&gt;
rxmtp-1.1.3&lt;br /&gt;
samba-ldap-3.0.33&lt;br /&gt;
sarg-2.2.5&lt;br /&gt;
sdparm-1.03&lt;br /&gt;
ser2net-2.3&lt;br /&gt;
setserial-2.17-r3&lt;br /&gt;
setuptools-0.6_rc8-r1&lt;br /&gt;
sg3_utils-1.25&lt;br /&gt;
sharutils-4.6.3&lt;br /&gt;
shorewall-doc-3.4.8&lt;br /&gt;
slmodem-2.9.11_pre20080417&lt;br /&gt;
smartmontools-5.38&lt;br /&gt;
smixer-1.0.1&lt;br /&gt;
snarf-7.0-r3&lt;br /&gt;
sox-14.2.0&lt;br /&gt;
speex-1.2_beta3_p2&lt;br /&gt;
squid-kerb-auth-2.7.6&lt;br /&gt;
squid-ldap-auth-2.7.6&lt;br /&gt;
ssmping-0.9-r1&lt;br /&gt;
stunnel-4.25&lt;br /&gt;
sysvinit-2.86-r10&lt;br /&gt;
tcc-0.9.23-r1&lt;br /&gt;
tcc-dev-0.9.23-r1&lt;br /&gt;
tcp-wrappers-7.6-r8&lt;br /&gt;
telnetd-1.2-r1&lt;br /&gt;
testdisk-6.8-r1&lt;br /&gt;
tftp-hpa-0.48&lt;br /&gt;
thttpd-2.25b-r7&lt;br /&gt;
tinc-1.0.8&lt;br /&gt;
tor-0.2.0.34&lt;br /&gt;
trac-0.11.2&lt;br /&gt;
traceroute-2.0.11&lt;br /&gt;
transmission-1.22&lt;br /&gt;
ucarp-1.3&lt;br /&gt;
uclibc++-dev-0.2.2-r1&lt;br /&gt;
ucspi-tcp-0.88-r16&lt;br /&gt;
ulogd-1.23-r1&lt;br /&gt;
umix-1.0.2&lt;br /&gt;
unbound-1.0.2&lt;br /&gt;
unixODBC-2.2.12&lt;br /&gt;
unzip-5.52-r2&lt;br /&gt;
up-imapproxy-1.2.5_rc2&lt;br /&gt;
usbd-0.1&lt;br /&gt;
usermode-utilities-20040406-r1&lt;br /&gt;
util-linux-2.13.1.1&lt;br /&gt;
util-vserver-0.30.215&lt;br /&gt;
valgrind-dev-3.3.1&lt;br /&gt;
vanessa-logger-0.0.7&lt;br /&gt;
varnish-1.1.2&lt;br /&gt;
vconfig-1.9&lt;br /&gt;
vifm-0.3a&lt;br /&gt;
vim-core-7.2&lt;br /&gt;
vixie-cron-4.1-r10&lt;br /&gt;
vlc-0.9.8a&lt;br /&gt;
vorbis-tools-1.2.0-r2&lt;br /&gt;
vpnc-0.5.1-r1&lt;br /&gt;
vtun-2.6-r1&lt;br /&gt;
which-2.19&lt;br /&gt;
wireless-tools-29&lt;br /&gt;
wireshark-1.0.5&lt;br /&gt;
x86info-1.21&lt;br /&gt;
xl2tpd-1.1.12-r1&lt;br /&gt;
xl2tpd-doc-1.1.12-r1&lt;br /&gt;
xssfilter-8.06.22&lt;br /&gt;
ytree-1.92&lt;br /&gt;
zgsmplay-1.4&lt;br /&gt;
zlib-dev-1.2.3-r1&lt;br /&gt;
zsh-4.3.4-r1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
New packages:&lt;br /&gt;
abuild-2.0_rc9-r1&lt;br /&gt;
acct-6.3.2-r1&lt;br /&gt;
acct-doc-6.3.2-r1&lt;br /&gt;
acf-heimdal-0.1.0-r0&lt;br /&gt;
acf-iproute2-qos-0.1.1-r0&lt;br /&gt;
acf-postgresql-0.3.0-r0&lt;br /&gt;
acf-weblog-0.4.6-r1&lt;br /&gt;
alpine-base-2.0-r1&lt;br /&gt;
alpine-sdk-0.3-r0&lt;br /&gt;
alsa-lib-1.0.21a-r0&lt;br /&gt;
arpon-1.90-r1&lt;br /&gt;
aspell-0.60.6-r0&lt;br /&gt;
aspell-doc-0.60.6-r0&lt;br /&gt;
bash-doc-4.0.028-r0&lt;br /&gt;
bc-doc-1.06-r1&lt;br /&gt;
beep-doc-1.2.2-r0&lt;br /&gt;
bind-doc-9.6.1_p1-r1&lt;br /&gt;
bind-libs-9.6.1_p1-r1&lt;br /&gt;
binutils-doc-2.19.51.0.9-r0&lt;br /&gt;
bridge-utils-doc-1.4-r0&lt;br /&gt;
build-base-0.2-r0&lt;br /&gt;
busybox-initscripts-2.0-r7&lt;br /&gt;
bzip2-doc-1.0.5-r1&lt;br /&gt;
c-ares-doc-1.6.0-r1&lt;br /&gt;
ca-certificates-20090709-r0&lt;br /&gt;
ccache-2.4-r0&lt;br /&gt;
ccache-doc-2.4-r0&lt;br /&gt;
cdrkit-doc-1.1.9-r1&lt;br /&gt;
chrony-doc-1.23-r4&lt;br /&gt;
cksfv-1.3.13-r0&lt;br /&gt;
cksfv-doc-1.3.13-r0&lt;br /&gt;
clamav-doc-0.95.2-r1&lt;br /&gt;
clamsmtp-doc-1.10-r6&lt;br /&gt;
conntrack-tools-doc-0.9.13-r1&lt;br /&gt;
coreutils-doc-7.6-r0&lt;br /&gt;
cpufreqd-2.3.4-r1&lt;br /&gt;
cpufreqd-doc-2.3.4-r1&lt;br /&gt;
cpufrequtils-005-r0&lt;br /&gt;
cpufrequtils-doc-005-r0&lt;br /&gt;
ctags-5.8-r0&lt;br /&gt;
curl-doc-7.19.6-r0&lt;br /&gt;
cvs-doc-1.11.23-r0&lt;br /&gt;
cyrus-sasl-2.1.23-r1&lt;br /&gt;
cyrus-sasl-doc-2.1.23-r1&lt;br /&gt;
dahdi-linux-2.2.0-r1&lt;br /&gt;
dahdi-linux-dev-2.2.0-r1&lt;br /&gt;
dahdi-linux-grsec-2.2.0-r19&lt;br /&gt;
dahdi-linux-grsec-dev-2.2.0-r19&lt;br /&gt;
dahdi-tools-doc-2.2.0-r0&lt;br /&gt;
dansguardian-doc-2.10.1.1-r4&lt;br /&gt;
db-doc-4.7.25.4-r0&lt;br /&gt;
dhcp-doc-4.1.0_p1-r4&lt;br /&gt;
dhcpcd-doc-5.1.1-r0&lt;br /&gt;
dialog-doc-1.1.20080819-r0&lt;br /&gt;
diffutils-doc-2.8.1-r1&lt;br /&gt;
dircproxy-doc-1.1.0-r0&lt;br /&gt;
distcc-doc-3.1-r2&lt;br /&gt;
dnsmasq-doc-2.50-r1&lt;br /&gt;
dosfstools-doc-3.0.5-r0&lt;br /&gt;
dovecot-doc-1.2.5-r0&lt;br /&gt;
dtach-doc-0.8-r0&lt;br /&gt;
e2fsprogs-doc-1.41.9-r0&lt;br /&gt;
eggdrop-1.6.19-r1&lt;br /&gt;
eggdrop-gseen-1.6.19-r1&lt;br /&gt;
eggdrop-logs2html-1.6.19-r1&lt;br /&gt;
email-doc-3.1.2-r0&lt;br /&gt;
ethtool-doc-6-r0&lt;br /&gt;
expat-doc-2.0.1-r0&lt;br /&gt;
fakeroot-doc-1.13-r0&lt;br /&gt;
fcgi-2.4.0-r0&lt;br /&gt;
fetchmail-doc-6.3.9-r4&lt;br /&gt;
fetchmailconf-6.3.9-r4&lt;br /&gt;
file-doc-5.03-r0&lt;br /&gt;
flac-doc-1.2.1-r0&lt;br /&gt;
fping-doc-2.4_beta2-r1&lt;br /&gt;
freetds-doc-0.82-r1&lt;br /&gt;
g++-4.4.1-r3&lt;br /&gt;
gawk-doc-3.1.7-r0&lt;br /&gt;
gcc-doc-4.4.1-r3&lt;br /&gt;
gd-doc-2.0.35-r2&lt;br /&gt;
gdb-doc-6.8-r3&lt;br /&gt;
gettext-0.17-r2&lt;br /&gt;
gettext-doc-0.17-r2&lt;br /&gt;
ghostscript-8.70-r0&lt;br /&gt;
ghostscript-doc-8.70-r0&lt;br /&gt;
glib-doc-2.20.5-r0&lt;br /&gt;
gmp-doc-4.3.1-r0&lt;br /&gt;
gnupg-2.0.10-r0&lt;br /&gt;
gnupg-doc-2.0.10-r0&lt;br /&gt;
gnutls-doc-2.8.3-r0&lt;br /&gt;
gperf-3.0.4-r0&lt;br /&gt;
gperf-doc-3.0.4-r0&lt;br /&gt;
grep-doc-2.5.4-r1&lt;br /&gt;
groff-doc-1.20.1-r1&lt;br /&gt;
gross-doc-1.0.2-r0&lt;br /&gt;
gzip-doc-1.3.12-r2&lt;br /&gt;
haserl-doc-0.9.25-r1&lt;br /&gt;
heimdal-doc-1.2.1-r3&lt;br /&gt;
heimdal-ftp-1.2.1-r3&lt;br /&gt;
heimdal-kf-1.2.1-r3&lt;br /&gt;
heimdal-pagsh-1.2.1-r3&lt;br /&gt;
heimdal-rcp-1.2.1-r3&lt;br /&gt;
heimdal-rsh-1.2.1-r3&lt;br /&gt;
heimdal-su-1.2.1-r3&lt;br /&gt;
heimdal-telnet-1.2.1-r3&lt;br /&gt;
htop-0.8.3-r0&lt;br /&gt;
htop-doc-0.8.3-r0&lt;br /&gt;
hunspell-1.2.8-r0&lt;br /&gt;
hunspell-doc-1.2.8-r0&lt;br /&gt;
iaxmodem-1.2.0-r2&lt;br /&gt;
iaxmodem-doc-1.2.0-r2&lt;br /&gt;
imagemagick-doc-6.5.5.6-r0&lt;br /&gt;
ip6tables-1.4.5-r0&lt;br /&gt;
iproute2-doc-2.6.29.1-r0&lt;br /&gt;
iproute2-qos-0.2-r1&lt;br /&gt;
iptables-doc-1.4.5-r0&lt;br /&gt;
iptraf-doc-3.0.0-r0&lt;br /&gt;
irssi-0.8.14-r1&lt;br /&gt;
irssi-doc-0.8.14-r1&lt;br /&gt;
irssi-perl-0.8.14-r1&lt;br /&gt;
iscsitarget-doc-0.4.17-r3&lt;br /&gt;
iscsitarget-grsec-0.4.17-r17&lt;br /&gt;
kqemu-grsec-1.4.0_pre1-r10&lt;br /&gt;
ksymoops-2.4.11-r0&lt;br /&gt;
ksymoops-doc-2.4.11-r0&lt;br /&gt;
less-doc-436-r0&lt;br /&gt;
lftp-3.7.15-r0&lt;br /&gt;
lftp-doc-3.7.15-r0&lt;br /&gt;
libart-lgpl-2.3.20-r0&lt;br /&gt;
libblkid-2.16-r1&lt;br /&gt;
libcom_err-1.41.9-r0&lt;br /&gt;
libcrypto-0.9.8k-r7&lt;br /&gt;
libdnet-1.12-r0&lt;br /&gt;
libgcc-4.4.1-r3&lt;br /&gt;
libiconv-1.12-r0&lt;br /&gt;
libjpeg-7-r0&lt;br /&gt;
libksba-1.0.3-r0&lt;br /&gt;
libsasl-2.1.23-r1&lt;br /&gt;
libstdc++-4.4.1-r3&lt;br /&gt;
libusb-compat-0.1.0-r0&lt;br /&gt;
libuuid-2.16-r1&lt;br /&gt;
lighttpd-doc-1.4.23-r2&lt;br /&gt;
links-doc-2.2-r0&lt;br /&gt;
linux-firmware-2.6.30.8-r0&lt;br /&gt;
linux-grsec-2.6.30.8-r0&lt;br /&gt;
linux-grsec-dev-2.6.30.8-r0&lt;br /&gt;
lm_sensors-detect-3.1.1-r0&lt;br /&gt;
lm_sensors-doc-3.1.1-r0&lt;br /&gt;
logrotate-doc-3.7.8-r1&lt;br /&gt;
lua-dev-5.1.4-r3&lt;br /&gt;
lua-doc-5.1.4-r3&lt;br /&gt;
lvm2-doc-2.02.53-r0&lt;br /&gt;
m4-1.4.13-r0&lt;br /&gt;
m4-doc-1.4.13-r0&lt;br /&gt;
make-doc-3.81-r1&lt;br /&gt;
man-doc-1.6f-r1&lt;br /&gt;
mdadm-doc-2.6.9-r1&lt;br /&gt;
mini_httpd-doc-1.19-r3&lt;br /&gt;
miniperl-5.10.1-r0&lt;br /&gt;
mkinitfs-2.0_rc5-r2&lt;br /&gt;
mlmmj-doc-1.2.16-r0&lt;br /&gt;
mpfr-2.4.1-r0&lt;br /&gt;
mpfr-doc-2.4.1-r0&lt;br /&gt;
mpg123-doc-1.9.0-r0&lt;br /&gt;
mtools-doc-4.0.10-r2&lt;br /&gt;
mysql-client-5.0.83-r1&lt;br /&gt;
mysql-doc-5.0.83-r1&lt;br /&gt;
mysql-test-5.0.83-r1&lt;br /&gt;
nano-doc-2.0.9-r2&lt;br /&gt;
nasm-2.05.01-r0&lt;br /&gt;
nasm-doc-2.05.01-r0&lt;br /&gt;
ncftp-3.2.3-r0&lt;br /&gt;
ncftp-bookmarks-3.2.3-r0&lt;br /&gt;
ncftp-doc-3.2.3-r0&lt;br /&gt;
ncurses-doc-5.7-r1&lt;br /&gt;
ncurses-terminfo-5.7-r1&lt;br /&gt;
net-snmp-doc-5.4.2.1-r3&lt;br /&gt;
net-snmp-tools-5.4.2.1-r3&lt;br /&gt;
newt-doc-0.52.8-r0&lt;br /&gt;
nfs-utils-doc-1.2.0-r1&lt;br /&gt;
nmap-doc-5.00-r0&lt;br /&gt;
nmap-nse-5.00-r0&lt;br /&gt;
oidentd-2.0.8-r1&lt;br /&gt;
oidentd-doc-2.0.8-r1&lt;br /&gt;
openldap-doc-2.4.18-r0&lt;br /&gt;
openntpd-doc-3.9_p1-r4&lt;br /&gt;
openrc-0.5.0-r11&lt;br /&gt;
openrc-doc-0.5.0-r11&lt;br /&gt;
openssh-doc-5.2_p1-r3&lt;br /&gt;
openssl-doc-0.9.8k-r7&lt;br /&gt;
p7zip-4.65-r0&lt;br /&gt;
p7zip-doc-4.65-r0&lt;br /&gt;
parted-doc-1.8.8-r1&lt;br /&gt;
patch-doc-2.5.9-r0&lt;br /&gt;
pax-utils-doc-0.1.19-r0&lt;br /&gt;
paxctl-doc-0.5-r0&lt;br /&gt;
pciutils-doc-3.1.4-r0&lt;br /&gt;
pcmciautils-doc-015-r0&lt;br /&gt;
pcre-7.9-r0&lt;br /&gt;
perl-db-0.38-r0&lt;br /&gt;
perl-digest-sha1-2.12-r0&lt;br /&gt;
perl-doc-5.10.1-r0&lt;br /&gt;
perl-getopt-long-2.38-r0&lt;br /&gt;
perl-io-multiplex-1.10-r0&lt;br /&gt;
perl-net-server-0.97-r0&lt;br /&gt;
perl-uri-1.38-r0&lt;br /&gt;
perl-uri-doc-1.38-r0&lt;br /&gt;
perl-uri-escape-1.38-r0&lt;br /&gt;
perl-xml-parser-2.36-r0&lt;br /&gt;
php-apc-3.1.2-r1&lt;br /&gt;
php-bcmath-5.2.10-r2&lt;br /&gt;
php-bz2-5.2.10-r2&lt;br /&gt;
php-calendar-5.2.10-r2&lt;br /&gt;
php-curl-5.2.10-r2&lt;br /&gt;
php-dba-5.2.10-r2&lt;br /&gt;
php-dev-5.2.10-r2&lt;br /&gt;
php-doc-5.2.10-r2&lt;br /&gt;
php-exif-5.2.10-r2&lt;br /&gt;
php-fileinfo-1.0.4-r0&lt;br /&gt;
php-ftp-5.2.10-r2&lt;br /&gt;
php-gd-5.2.10-r2&lt;br /&gt;
php-gettext-5.2.10-r2&lt;br /&gt;
php-gmp-5.2.10-r2&lt;br /&gt;
php-iconv-5.2.10-r2&lt;br /&gt;
php-imap-5.2.10-r2&lt;br /&gt;
php-json-5.2.10-r2&lt;br /&gt;
php-ldap-5.2.10-r2&lt;br /&gt;
php-mcrypt-5.2.10-r2&lt;br /&gt;
php-mime_magic-5.2.10-r2&lt;br /&gt;
php-mysql-5.2.10-r2&lt;br /&gt;
php-mysqli-5.2.10-r2&lt;br /&gt;
php-odbc-5.2.10-r2&lt;br /&gt;
php-openssl-5.2.10-r2&lt;br /&gt;
php-pdo-5.2.10-r2&lt;br /&gt;
php-pdo_mysql-5.2.10-r2&lt;br /&gt;
php-pdo_odbc-5.2.10-r2&lt;br /&gt;
php-pdo_pgsql-5.2.10-r2&lt;br /&gt;
php-pdo_sqlite-5.2.10-r2&lt;br /&gt;
php-pgsql-5.2.10-r2&lt;br /&gt;
php-posix-5.2.10-r2&lt;br /&gt;
php-pspell-5.2.10-r2&lt;br /&gt;
php-shmop-5.2.10-r2&lt;br /&gt;
php-snmp-5.2.10-r2&lt;br /&gt;
php-soap-5.2.10-r2&lt;br /&gt;
php-sockets-5.2.10-r2&lt;br /&gt;
php-sqlite-5.2.10-r2&lt;br /&gt;
php-sysvmsg-5.2.10-r2&lt;br /&gt;
php-sysvsem-5.2.10-r2&lt;br /&gt;
php-sysvshm-5.2.10-r2&lt;br /&gt;
php-xml-5.2.10-r2&lt;br /&gt;
php-xmlrpc-5.2.10-r2&lt;br /&gt;
php-xsl-5.2.10-r2&lt;br /&gt;
php-zip-5.2.10-r2&lt;br /&gt;
php-zlib-5.2.10-r2&lt;br /&gt;
pinentry-0.7.6-r0&lt;br /&gt;
pinentry-doc-0.7.6-r0&lt;br /&gt;
pkgconfig-0.23-r0&lt;br /&gt;
pkgconfig-doc-0.23-r0&lt;br /&gt;
portmap-doc-6.0-r3&lt;br /&gt;
postfix-doc-2.6.5-r0&lt;br /&gt;
postfix-ldap-2.6.5-r0&lt;br /&gt;
postfix-mysql-2.6.5-r0&lt;br /&gt;
postfix-pcre-2.6.5-r0&lt;br /&gt;
postfix-pgsql-2.6.5-r0&lt;br /&gt;
postgresql-client-8.4.1-r1&lt;br /&gt;
postgresql-doc-8.4.1-r1&lt;br /&gt;
postgrey-1.32-r0&lt;br /&gt;
ppp-doc-2.4.4-r0&lt;br /&gt;
pth-2.0.7-r0&lt;br /&gt;
pth-doc-2.0.7-r0&lt;br /&gt;
python-doc-2.6.2-r1&lt;br /&gt;
quagga-doc-0.99.13-r2&lt;br /&gt;
razor-2.84-r0&lt;br /&gt;
roundcubemail-0.2.2-r0&lt;br /&gt;
rrdtool-doc-1.2.30-r0&lt;br /&gt;
rsync-doc-3.0.6-r1&lt;br /&gt;
ruby-1.8.7_p174-r2&lt;br /&gt;
ruby-dev-1.8.7_p174-r2&lt;br /&gt;
ruby-doc-1.8.7_p174-r2&lt;br /&gt;
rubygems-1.3.5-r1&lt;br /&gt;
run-parts-3.1.3-r0&lt;br /&gt;
run-parts-doc-3.1.3-r0&lt;br /&gt;
samba-common-3.3.7-r4&lt;br /&gt;
samba-doc-3.3.7-r4&lt;br /&gt;
samba-initscript-3.3.7-r4&lt;br /&gt;
screen-doc-4.0.3-r0&lt;br /&gt;
sed-doc-4.2.1-r0&lt;br /&gt;
sfdisk-2.16-r1&lt;br /&gt;
sfic-doc-0.1.7-r1&lt;br /&gt;
shorewall-common-4.2.10-r0&lt;br /&gt;
shorewall-common-doc-4.2.10-r0&lt;br /&gt;
shorewall-perl-4.2.10.3-r0&lt;br /&gt;
shorewall-shell-4.2.10-r0&lt;br /&gt;
sic-1.0-r0&lt;br /&gt;
sic-doc-1.0-r0&lt;br /&gt;
slang-doc-2.1.4-r0&lt;br /&gt;
snort-doc-2.8.4-r1&lt;br /&gt;
sntpc-0.9-r1&lt;br /&gt;
sqlite-doc-3.6.15-r0&lt;br /&gt;
squid-doc-2.7.6-r11&lt;br /&gt;
squid-errors-ukrainian-1251-2.7.6-r11&lt;br /&gt;
squid-errors-ukrainian-koi8-u-2.7.6-r11&lt;br /&gt;
squid-errors-ukrainian-utf8-2.7.6-r11&lt;br /&gt;
ssmtp-doc-2.62-r0&lt;br /&gt;
strace-doc-4.5.18-r0&lt;br /&gt;
subversion-doc-1.6.5-r1&lt;br /&gt;
sudo-doc-1.7.2_p1-r0&lt;br /&gt;
sysfsutils-doc-2.1.0-r3&lt;br /&gt;
sysklogd-doc-1.5-r3&lt;br /&gt;
syslinux-doc-3.82-r0&lt;br /&gt;
sysstat-doc-9.0.4-r0&lt;br /&gt;
tar-doc-1.22-r0&lt;br /&gt;
tcl-doc-8.5.7-r0&lt;br /&gt;
tcpdump-doc-4.0.0-r1&lt;br /&gt;
tinyproxy-doc-1.6.3-r3&lt;br /&gt;
udev-142-r0&lt;br /&gt;
udev-doc-142-r0&lt;br /&gt;
unfs3-0.9.22-r0&lt;br /&gt;
unfs3-doc-0.9.22-r0&lt;br /&gt;
unixodbc-2.2.14-r0&lt;br /&gt;
unrar-doc-3.9.6-r0&lt;br /&gt;
util-linux-ng-2.16-r1&lt;br /&gt;
v86d-0.1.9-r0&lt;br /&gt;
valgrind-doc-3.4.1-r1&lt;br /&gt;
vim-doc-7.2.245-r2&lt;br /&gt;
wget-doc-1.12-r0&lt;br /&gt;
winbind-3.3.7-r4&lt;br /&gt;
xfsprogs-doc-3.0.3-r0&lt;br /&gt;
xtables-addons-doc-1.17-r1&lt;br /&gt;
xtables-addons-grsec-1.17-r15&lt;br /&gt;
zip-doc-3.0-r0&lt;br /&gt;
zonenotify-0.1-r0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Upgraded/downgraded packages (from version):&lt;br /&gt;
acf-alpine-baselayout-0.5.7-r0		   (0.4.12)&lt;br /&gt;
acf-alpine-conf-0.3.14-r0		   (0.3.14)&lt;br /&gt;
acf-apk-tools-0.4.3-r0			   (0.1.5)&lt;br /&gt;
acf-asterisk-0.2.0-r0			   (0.1.1)&lt;br /&gt;
acf-chrony-0.2.0-r0			   (0.1.12)&lt;br /&gt;
acf-clamav-0.2.1-r0			   (0.1.1)&lt;br /&gt;
acf-clamsmtp-0.2.0-r0			   (0.1.1)&lt;br /&gt;
acf-core-0.8.3-r0			   (0.4.22)&lt;br /&gt;
acf-dansguardian-0.3.1-r0		   (0.2.6)&lt;br /&gt;
acf-dhcp-0.4.2-r0			   (0.3.10)&lt;br /&gt;
acf-dnscache-0.2.0-r0			   (0.1.10)&lt;br /&gt;
acf-dnsmasq-0.2.0-r0			   (0.1.2)&lt;br /&gt;
acf-dovecot-0.2.0-r0			   (0.1.0)&lt;br /&gt;
acf-fetchmail-0.4.1-r0			   (0.2.6)&lt;br /&gt;
acf-gross-0.2.0-r0			   (0.1.0)&lt;br /&gt;
acf-ipsec-tools-0.4.0-r0		   (0.3.17)&lt;br /&gt;
acf-iptables-0.2.0-r0			   (0.1.0)&lt;br /&gt;
acf-lvm2-0.2.0-r0			   (0.1.0)&lt;br /&gt;
acf-mdadm-0.2.0-r0			   (0.1.0)&lt;br /&gt;
acf-opennhrp-0.4.0-r0			   (0.3.12)&lt;br /&gt;
acf-openntpd-0.4.0-r0			   (0.3.12)&lt;br /&gt;
acf-openssh-0.2.2-r0			   (0.1.4)&lt;br /&gt;
acf-openssl-0.2.0-r0			   (0.1.8)&lt;br /&gt;
acf-openvpn-0.4.3-r0			   (0.4.1)&lt;br /&gt;
acf-pingu-0.2.0-r0			   (0.1.0)&lt;br /&gt;
acf-postfix-0.2.3-r0			   (0.1.2)&lt;br /&gt;
acf-ppp-0.1.2-r0			   (0.1.0)&lt;br /&gt;
acf-quagga-0.4.0-r0			   (0.3.4)&lt;br /&gt;
acf-samba-0.3.2-r0			   (0.1.1)&lt;br /&gt;
acf-shorewall-0.5.0-r0			   (0.4.5)&lt;br /&gt;
acf-skins-0.2.2-r0			   (0.1.6)&lt;br /&gt;
acf-snort-0.4.0-r0			   (0.3.10)&lt;br /&gt;
acf-squid-0.5.1-r0			   (0.3.8)&lt;br /&gt;
acf-tcpproxy-0.1.0-r0			   (0.0.4)&lt;br /&gt;
acf-tinydns-0.3.0-r0			   (0.2.14)&lt;br /&gt;
alpine-baselayout-2.0_rc1-r0		   (1.13.1)&lt;br /&gt;
alpine-conf-2.0_rc7-r1			   (1.8.1)&lt;br /&gt;
apk-tools-2.0_rc5-r1			   (0.15.2)&lt;br /&gt;
apr-1.3.8-r0				   (1.3.2)&lt;br /&gt;
apr-util-1.3.9-r0			   (1.3.2)&lt;br /&gt;
arpwatch-2.1a15-r1			   (2.1.15-r5)&lt;br /&gt;
asterisk-1.6.0.15-r2			   (1.6.1_rc1-r1)&lt;br /&gt;
asterisk-doc-1.6.0.15-r2		   (1.6.1_rc1-r1)&lt;br /&gt;
asterisk-odbc-1.6.0.15-r2		   (1.6.1_rc1-r1)&lt;br /&gt;
asterisk-pgsql-1.6.0.15-r2		   (1.6.1_rc1-r1)&lt;br /&gt;
asterisk-tds-1.6.0.15-r2		   (1.6.1_rc1-r1)&lt;br /&gt;
aumix-2.8-r1				   (2.8-r4)&lt;br /&gt;
bash-4.0.028-r0				   (3.2_p33)&lt;br /&gt;
bbsuid-0.3-r0				   (0.1)&lt;br /&gt;
bc-1.06-r1				   (1.06.95)&lt;br /&gt;
beep-1.2.2-r0				   (1.2.2-r1)&lt;br /&gt;
bind-9.6.1_p1-r1			   (9.4.3_p2)&lt;br /&gt;
bind-tools-9.6.1_p1-r1			   (9.4.2_p2)&lt;br /&gt;
binutils-2.19.51.0.9-r0			   (2.18-r3)&lt;br /&gt;
bitlib-25-r0				   (23_p2)&lt;br /&gt;
bkeymaps-1.13-r0			   (1.13)&lt;br /&gt;
bridge-utils-1.4-r0			   (1.4)&lt;br /&gt;
busybox-1.14.4-r0			   (1.13.2-r1)&lt;br /&gt;
bwm-ng-0.6-r0				   (0.6)&lt;br /&gt;
c-ares-1.6.0-r1				   (1.4.0)&lt;br /&gt;
cdrkit-1.1.9-r1				   (1.1.8)&lt;br /&gt;
cgit-0.8.2.1-r1				   (0.8.1)&lt;br /&gt;
chrony-1.23-r4				   (1.23-r1)&lt;br /&gt;
clamav-0.95.2-r1			   (0.94.2)&lt;br /&gt;
clamsmtp-1.10-r6			   (1.9)&lt;br /&gt;
conntrack-tools-0.9.13-r1		   (0.9.9)&lt;br /&gt;
coreutils-7.6-r0			   (6.10-r2)&lt;br /&gt;
cracklib-2.8.13-r0			   (2.8.12)&lt;br /&gt;
cracklib-words-20080507-r0		   (20080507)&lt;br /&gt;
cramfs-1.1-r0				   (1.1)&lt;br /&gt;
curl-7.19.6-r0				   (7.19.4)&lt;br /&gt;
cvs-1.11.23-r0				   (1.12.12-r4)&lt;br /&gt;
dahdi-tools-2.2.0-r0			   (2.1.0-r1)&lt;br /&gt;
dansguardian-2.10.1.1-r4		   (2.10-r1)&lt;br /&gt;
db-4.7.25.4-r0				   (4.5.20_p2-r1)&lt;br /&gt;
device-mapper-2.02.53-r0		   (1.02.24-r1)&lt;br /&gt;
dhcp-4.1.0_p1-r4			   (3.1.1)&lt;br /&gt;
dhcpcd-5.1.1-r0				   (4.0.2)&lt;br /&gt;
dialog-1.1.20080819-r0			   (1.1.20080316)&lt;br /&gt;
diffutils-2.8.1-r1			   (2.8.7-r2)&lt;br /&gt;
dircproxy-1.1.0-r0			   (1.0.5-r1)&lt;br /&gt;
distcc-3.1-r2				   (2.18.3-r10)&lt;br /&gt;
djbdns-1.05-r32				   (1.05-r22)&lt;br /&gt;
dnscache-1.05-r32			   (1.05-r22)&lt;br /&gt;
dnsmasq-2.50-r1				   (2.45)&lt;br /&gt;
dosfstools-3.0.5-r0			   (2.11-r3)&lt;br /&gt;
dovecot-1.2.5-r0			   (1.1.7-r1)&lt;br /&gt;
dropbear-0.52-r2			   (0.51)&lt;br /&gt;
dtach-0.8-r0				   (0.8)&lt;br /&gt;
e2fsprogs-1.41.9-r0			   (1.41.2)&lt;br /&gt;
email-3.1.2-r0				   (2.5.0)&lt;br /&gt;
espeak-1.40.02-r0			   (1.40.02)&lt;br /&gt;
ethtool-6-r0				   (6)&lt;br /&gt;
expat-2.0.1-r0				   (2.0.1)&lt;br /&gt;
fakeroot-1.13-r0			   (1.9.1)&lt;br /&gt;
fetchmail-6.3.9-r4			   (6.3.8-r2)&lt;br /&gt;
file-5.03-r0				   (4.23)&lt;br /&gt;
flac-1.2.1-r0				   (1.2.1-r3)&lt;br /&gt;
freetds-0.82-r1				   (0.64)&lt;br /&gt;
freetype-2.3.8-r0			   (2.3.7)&lt;br /&gt;
gawk-3.1.7-r0				   (3.1.6)&lt;br /&gt;
gcc-4.4.1-r3				   (3.4.6-r2)&lt;br /&gt;
gd-2.0.35-r2				   (2.0.35)&lt;br /&gt;
gdb-6.8-r3				   (6.7.1-r3)&lt;br /&gt;
gdbm-1.8.3-r0				   (1.8.3-r3)&lt;br /&gt;
git-1.6.4.4-r0				   (1.6.0.6)&lt;br /&gt;
glib-2.20.5-r0				   (1.2.10-r5)&lt;br /&gt;
gmp-4.3.1-r0				   (4.2.2-r2)&lt;br /&gt;
gnutls-2.8.3-r0				   (2.4.1-r2)&lt;br /&gt;
grep-2.5.4-r1				   (2.5.1a-r1)&lt;br /&gt;
groff-1.20.1-r1				   (1.19.2-r1)&lt;br /&gt;
gross-1.0.2-r0				   (1.0.1-r1)&lt;br /&gt;
gzip-1.3.12-r2				   (1.3.12-r1)&lt;br /&gt;
haserl-0.9.25-r1			   (0.9.24)&lt;br /&gt;
heimdal-1.2.1-r3			   (0.7.2-r3)&lt;br /&gt;
hypermail-2.2.0-r0			   (2.2.0)&lt;br /&gt;
imagemagick-6.5.5.6-r0			   (6.4.4.6)&lt;br /&gt;
iproute2-2.6.29.1-r0			   (2.6.22.20070710)&lt;br /&gt;
ipsec-tools-0.8_alpha20090903-r2	   (0.8_alpha20090422-r2)&lt;br /&gt;
ipsec-tools-doc-0.8_alpha20090903-r2	   (0.8_alpha20090422-r2)&lt;br /&gt;
iptables-1.4.5-r0			   (1.4.2-r2)&lt;br /&gt;
iptraf-3.0.0-r0				   (3.0.0-r4)&lt;br /&gt;
iputils-20071127-r1			   (20071127)&lt;br /&gt;
iscsitarget-0.4.17-r3			   (0.4.17)&lt;br /&gt;
json4lua-0.9.20-r0			   (0.9.20)&lt;br /&gt;
less-436-r0				   (418)&lt;br /&gt;
libcap-2.16-r1				   (2.15)&lt;br /&gt;
libgcrypt-1.4.4-r1			   (1.4.0-r1)&lt;br /&gt;
libgpg-error-1.7-r0			   (1.6)&lt;br /&gt;
libldap-2.4.18-r0			   (2.3.43)&lt;br /&gt;
libltdl-2.2.6a-r4			   (1.5.26)&lt;br /&gt;
libmcrypt-2.5.8-r0			   (2.5.8)&lt;br /&gt;
libmysqlclient-5.0.83-r1		   (5.0.70-r1)&lt;br /&gt;
libnet-1.1.4-r0				   (1.1.2.1-r1)&lt;br /&gt;
libnetfilter_conntrack-0.0.100-r0	   (0.0.99)&lt;br /&gt;
libnfnetlink-1.0.0-r0			   (0.0.39)&lt;br /&gt;
libogg-1.1.4-r0				   (1.1.3)&lt;br /&gt;
libpcap-1.0.0-r2			   (0.9.8-r2)&lt;br /&gt;
libpng-1.2.39-r0			   (1.2.35)&lt;br /&gt;
libpq-8.4.1-r1				   (8.2.7)&lt;br /&gt;
libusb-1.0.1-r0				   (0.1.12-r1)&lt;br /&gt;
libxml2-2.7.3-r0			   (2.7.2-r1)&lt;br /&gt;
lighttpd-1.4.23-r2			   (1.4.20)&lt;br /&gt;
links-2.2-r0				   (2.2)&lt;br /&gt;
linux-headers-2.6.30.5-r0		   (2.6.23-r3)&lt;br /&gt;
lm_sensors-3.1.1-r0			   (2.10.7)&lt;br /&gt;
logrotate-3.7.8-r1			   (3.7.2)&lt;br /&gt;
lpc-1.0.0-r0				   (1.0.0_p1)&lt;br /&gt;
lsof-4.82-r0				   (4.78-r2)&lt;br /&gt;
lua-5.1.4-r3				   (5.1.3-r3)&lt;br /&gt;
luaposix-5.1.4-r0			   (5.1.4)&lt;br /&gt;
luasql-postgres-2.1.1-r1		   (2.1.1)&lt;br /&gt;
lvm2-2.02.53-r0				   (2.02.36)&lt;br /&gt;
lzo-2.03-r0				   (2.02-r1)&lt;br /&gt;
make-3.81-r1				   (3.81)&lt;br /&gt;
man-1.6f-r1				   (1.6f-r2)&lt;br /&gt;
md5-1.1.2-r0				   (1.1.2)&lt;br /&gt;
mdadm-2.6.9-r1				   (2.6.4-r1)&lt;br /&gt;
mini_httpd-1.19-r3			   (1.19)&lt;br /&gt;
mlmmj-1.2.16-r0				   (1.2.12)&lt;br /&gt;
module-init-tools-3.10-r0		   (3.4)&lt;br /&gt;
mpg123-1.9.0-r0				   (1.7.2)&lt;br /&gt;
mtools-4.0.10-r2			   (3.9.10)&lt;br /&gt;
mysql-5.0.83-r1				   (5.0.70-r1)&lt;br /&gt;
nano-2.0.9-r2				   (2.1.5)&lt;br /&gt;
ncurses-5.7-r1				   (5.6-r2)&lt;br /&gt;
neon-0.28.6-r0				   (0.28.3)&lt;br /&gt;
net-snmp-5.4.2.1-r3			   (5.4.2.1)&lt;br /&gt;
newt-0.52.8-r0				   (0.52.8)&lt;br /&gt;
nfs-utils-1.2.0-r1			   (1.0.6-r6)&lt;br /&gt;
nmap-5.00-r0				   (4.76)&lt;br /&gt;
openldap-2.4.18-r0			   (2.3.43)&lt;br /&gt;
opennhrp-0.11.2-r1			   (0.10.3)&lt;br /&gt;
opennhrp-doc-0.11.2-r1			   (0.10.3)&lt;br /&gt;
openntpd-3.9_p1-r4			   (3.9_p1-r1)&lt;br /&gt;
openssh-5.2_p1-r3			   (4.7_p1-r3)&lt;br /&gt;
openssh-client-5.2_p1-r3		   (5.1_p1-r2)&lt;br /&gt;
openssl-0.9.8k-r7			   (0.9.8k)&lt;br /&gt;
openvpn-2.0.9-r2			   (2.0.7-r2)&lt;br /&gt;
openvpn-doc-2.0.9-r2			   (2.0.7-r2)&lt;br /&gt;
parted-1.8.8-r1				   (1.8.8)&lt;br /&gt;
patch-2.5.9-r0				   (2.5.9)&lt;br /&gt;
pax-utils-0.1.19-r0			   (0.1.17)&lt;br /&gt;
paxctl-0.5-r0				   (0.5)&lt;br /&gt;
pciutils-3.1.4-r0			   (3.0.0)&lt;br /&gt;
pcmciautils-015-r0			   (014-r1)&lt;br /&gt;
perl-5.10.1-r0				   (5.8.8-r5)&lt;br /&gt;
php-5.2.10-r2				   (5.2.8-r1)&lt;br /&gt;
pingu-0.3-r1				   (0.3)&lt;br /&gt;
popt-1.14-r0				   (1.10.7)&lt;br /&gt;
portmap-6.0-r3				   (6.0)&lt;br /&gt;
postfix-2.6.5-r0			   (2.5.5)&lt;br /&gt;
postgresql-8.4.1-r1			   (8.2.7)&lt;br /&gt;
ppp-2.4.4-r0				   (2.4.4-r21)&lt;br /&gt;
python-2.6.2-r1				   (2.5.2-r7)&lt;br /&gt;
quagga-0.99.13-r2			   (0.99.11-r4)&lt;br /&gt;
readline-6.0.004-r0			   (5.2_p12-r1)&lt;br /&gt;
rrdtool-1.2.30-r0			   (1.2.28-r1)&lt;br /&gt;
rsync-3.0.6-r1				   (3.0.4)&lt;br /&gt;
samba-3.3.7-r4				   (3.0.33)&lt;br /&gt;
screen-4.0.3-r0				   (4.0.3)&lt;br /&gt;
sed-4.2.1-r0				   (4.1.5-r1)&lt;br /&gt;
sfic-0.1.7-r1				   (0.1.7)&lt;br /&gt;
shorewall-4.2.10-r0			   (3.4.8)&lt;br /&gt;
shorewall-lite-4.2.10-r0		   (3.4.8)&lt;br /&gt;
slang-2.1.4-r0				   (2.1.3-r1)&lt;br /&gt;
snort-2.8.4-r1				   (2.6.1.3-r1)&lt;br /&gt;
sqlite-3.6.15-r0			   (3.5.9)&lt;br /&gt;
squid-2.7.6-r11				   (2.7.6)&lt;br /&gt;
squid-errors-armenian-2.7.6-r11		   (2.7.6)&lt;br /&gt;
squid-errors-azerbaijani-2.7.6-r11	   (2.7.6)&lt;br /&gt;
squid-errors-bulgarian-2.7.6-r11	   (2.7.6)&lt;br /&gt;
squid-errors-catalan-2.7.6-r11		   (2.7.6)&lt;br /&gt;
squid-errors-czech-2.7.6-r11		   (2.7.6)&lt;br /&gt;
squid-errors-danish-2.7.6-r11		   (2.7.6)&lt;br /&gt;
squid-errors-dutch-2.7.6-r11		   (2.7.6)&lt;br /&gt;
squid-errors-english-2.7.6-r11		   (2.7.6)&lt;br /&gt;
squid-errors-estonian-2.7.6-r11		   (2.7.6)&lt;br /&gt;
squid-errors-finnish-2.7.6-r11		   (2.7.6)&lt;br /&gt;
squid-errors-french-2.7.6-r11		   (2.7.6)&lt;br /&gt;
squid-errors-german-2.7.6-r11		   (2.7.6)&lt;br /&gt;
squid-errors-greek-2.7.6-r11		   (2.7.6)&lt;br /&gt;
squid-errors-hebrew-2.7.6-r11		   (2.7.6)&lt;br /&gt;
squid-errors-hungarian-2.7.6-r11	   (2.7.6)&lt;br /&gt;
squid-errors-italian-2.7.6-r11		   (2.7.6)&lt;br /&gt;
squid-errors-japanese-2.7.6-r11		   (2.7.6)&lt;br /&gt;
squid-errors-korean-2.7.6-r11		   (2.7.6)&lt;br /&gt;
squid-errors-lithuanian-2.7.6-r11	   (2.7.6)&lt;br /&gt;
squid-errors-polish-2.7.6-r11		   (2.7.6)&lt;br /&gt;
squid-errors-portuguese-2.7.6-r11	   (2.7.6)&lt;br /&gt;
squid-errors-romanian-2.7.6-r11		   (2.7.6)&lt;br /&gt;
squid-errors-russian-1251-2.7.6-r11	   (2.7.6)&lt;br /&gt;
squid-errors-russian-koi8-r-2.7.6-r11	   (2.7.6)&lt;br /&gt;
squid-errors-serbian-2.7.6-r11		   (2.7.6)&lt;br /&gt;
squid-errors-simplify_chinese-2.7.6-r11	   (2.7.6)&lt;br /&gt;
squid-errors-slovak-2.7.6-r11		   (2.7.6)&lt;br /&gt;
squid-errors-spanish-2.7.6-r11		   (2.7.6)&lt;br /&gt;
squid-errors-swedish-2.7.6-r11		   (2.7.6)&lt;br /&gt;
squid-errors-traditional_chinese-2.7.6-r11 (2.7.6)&lt;br /&gt;
squid-errors-turkish-2.7.6-r11		   (2.7.6)&lt;br /&gt;
ssmtp-2.62-r0				   (2.62-r4)&lt;br /&gt;
strace-4.5.18-r0			   (4.5.18)&lt;br /&gt;
subversion-1.6.5-r1			   (1.5.4)&lt;br /&gt;
sudo-1.7.2_p1-r0			   (1.7.0)&lt;br /&gt;
sysfsutils-2.1.0-r3			   (2.1.0)&lt;br /&gt;
sysklogd-1.5-r3				   (1.4.2_pre20061230-r2)&lt;br /&gt;
syslinux-3.82-r0			   (3.72)&lt;br /&gt;
sysstat-9.0.4-r0			   (8.0.4-r1)&lt;br /&gt;
tar-1.22-r0				   (1.20)&lt;br /&gt;
tcl-8.5.7-r0				   (8.4.18)&lt;br /&gt;
tcpdump-4.0.0-r1			   (3.9.8-r1)&lt;br /&gt;
tcpproxy-2.0.0_beta15-r0		   (1.1.9)&lt;br /&gt;
tdb-3.3.7-r4				   (1.0.6-r1)&lt;br /&gt;
tinydns-1.05-r32			   (1.05-r22)&lt;br /&gt;
tinyproxy-1.6.3-r3			   (1.6.3-r1)&lt;br /&gt;
uclibc++-0.2.2-r5			   (0.2.2-r1)&lt;br /&gt;
uclibc-0.9.30.1-r18			   (0.9.28.3-r7)&lt;br /&gt;
uclibc-dev-0.9.30.1-r18			   (0.9.28.3-r7)&lt;br /&gt;
unrar-3.9.6-r0				   (3.8.5)&lt;br /&gt;
usbutils-0.86-r0			   (0.73)&lt;br /&gt;
valgrind-3.4.1-r1			   (3.3.1)&lt;br /&gt;
vim-7.2.245-r2				   (7.2)&lt;br /&gt;
vsftpd-2.1.0-r2				   (2.0.6)&lt;br /&gt;
vsftpd-doc-2.1.0-r2			   (2.0.6)&lt;br /&gt;
wget-1.12-r0				   (1.11.3)&lt;br /&gt;
xfsprogs-3.0.3-r0			   (2.7.11)&lt;br /&gt;
xtables-addons-1.17-r1			   (1.10)&lt;br /&gt;
zip-3.0-r0				   (2.32-r1)&lt;br /&gt;
zlib-1.2.3.3-r7				   (1.2.3-r1)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:News]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=1.9.0_package_changes_since_1.9.0_rc5&amp;diff=12479</id>
		<title>1.9.0 package changes since 1.9.0 rc5</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=1.9.0_package_changes_since_1.9.0_rc5&amp;diff=12479"/>
		<updated>2016-03-07T12:30:59Z</updated>

		<summary type="html">&lt;p&gt;Fab: Reverted edits by RuthHughes (talk) to last revision by Dubiousjim&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Package changes since 1.9.0_rc5 =&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Removed packages:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
New packages:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Upgraded/downgraded packages (from version):&lt;br /&gt;
acf-apk-tools-0.4.3-r0			   (0.4.2-r0)&lt;br /&gt;
acf-iproute2-qos-0.1.1-r0		   (0.1.0-r0)&lt;br /&gt;
alpine-conf-2.0_rc7-r1			   (2.0_rc6-r0)&lt;br /&gt;
dahdi-linux-grsec-2.2.0-r19		   (2.2.0-r18)&lt;br /&gt;
dahdi-linux-grsec-dev-2.2.0-r19		   (2.2.0-r18)&lt;br /&gt;
device-mapper-2.02.53-r0		   (2.02.52-r0)&lt;br /&gt;
gross-1.0.2-r0				   (1.0.1-r5)&lt;br /&gt;
gross-doc-1.0.2-r0			   (1.0.1-r5)&lt;br /&gt;
ip6tables-1.4.5-r0			   (1.4.4-r0)&lt;br /&gt;
ipsec-tools-0.8_alpha20090903-r2	   (0.8_alpha20090903-r1)&lt;br /&gt;
ipsec-tools-doc-0.8_alpha20090903-r2	   (0.8_alpha20090903-r1)&lt;br /&gt;
iptables-1.4.5-r0			   (1.4.4-r0)&lt;br /&gt;
iptables-doc-1.4.5-r0			   (1.4.4-r0)&lt;br /&gt;
iscsitarget-grsec-0.4.17-r17		   (0.4.17-r16)&lt;br /&gt;
kqemu-grsec-1.4.0_pre1-r10		   (1.4.0_pre1-r9)&lt;br /&gt;
libpq-8.4.1-r1				   (8.4.1-r0)&lt;br /&gt;
linux-firmware-2.6.30.8-r0		   (2.6.30.7-r2)&lt;br /&gt;
linux-grsec-2.6.30.8-r0			   (2.6.30.7-r2)&lt;br /&gt;
linux-grsec-dev-2.6.30.8-r0		   (2.6.30.7-r2)&lt;br /&gt;
lvm2-2.02.53-r0				   (2.02.52-r0)&lt;br /&gt;
lvm2-doc-2.02.53-r0			   (2.02.52-r0)&lt;br /&gt;
mkinitfs-2.0_rc5-r2			   (2.0_rc5-r1)&lt;br /&gt;
opennhrp-0.11.2-r1			   (0.11.1-r2)&lt;br /&gt;
opennhrp-doc-0.11.2-r1			   (0.11.1-r2)&lt;br /&gt;
openrc-0.5.0-r11			   (0.5.0-r10)&lt;br /&gt;
openrc-doc-0.5.0-r11			   (0.5.0-r10)&lt;br /&gt;
postgresql-8.4.1-r1			   (8.4.1-r0)&lt;br /&gt;
postgresql-client-8.4.1-r1		   (8.4.1-r0)&lt;br /&gt;
postgresql-doc-8.4.1-r1			   (8.4.1-r0)&lt;br /&gt;
xtables-addons-grsec-1.17-r15		   (1.17-r14)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:News]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=2600hz&amp;diff=12478</id>
		<title>2600hz</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=2600hz&amp;diff=12478"/>
		<updated>2016-03-07T12:30:54Z</updated>

		<summary type="html">&lt;p&gt;Fab: Reverted edits by RuthHughes (talk) to last revision by Fab&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://www.2600hz.org blue.box] is an open source GUI for administration and configuration of FreeSWITCH and Asterisk based VoIP systems. It supports multi-tenancy and skinning, and is completely modular.&lt;br /&gt;
&lt;br /&gt;
== Install Lighttpd ==&lt;br /&gt;
&lt;br /&gt;
{{:Setting Up Lighttpd With FastCGI}}&lt;br /&gt;
&lt;br /&gt;
== Configuring postgresql ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add postgresql postgresql-client git&lt;br /&gt;
/etc/init.d/postgresql setup}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Starting http service and adding to boot&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Cmd|/etc/init.d/postgresql start &amp;amp;&amp;amp; rc-update add postgresql default}}&lt;br /&gt;
&lt;br /&gt;
== Installing FreeSwitch ==&lt;br /&gt;
&lt;br /&gt;
First use &amp;lt;code&amp;gt;apk&amp;lt;/code&amp;gt; to install the needed software parts.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add freeswitch freeswitch-flite freeswitch-sounds-en-us-callie-8000 freeswitch-sample-config}}&lt;br /&gt;
&lt;br /&gt;
Change the permissions of {{Path|/etc/freeswitch/}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|chown lighttpd:lighttpd /etc/freeswitch/	&lt;br /&gt;
chmod 777 -R /etc/freeswitch/}}&lt;br /&gt;
&lt;br /&gt;
== Starting ==&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;Starting http and sql server and adding to boot&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Cmd|/etc/init.d/postgresql setup&lt;br /&gt;
/etc/init.d/postgresql start &amp;amp;&amp;amp; rc-update add postgresql default&lt;br /&gt;
/etc/init.d/lighttpd start &amp;amp;&amp;amp; rc-update add lighttpd default }}&lt;br /&gt;
&lt;br /&gt;
== Installing 2600hz ==&lt;br /&gt;
&lt;br /&gt;
Create a {{Path|webapps}} folder&lt;br /&gt;
&lt;br /&gt;
{{Cmd|mkdir /usr/share/webapps/ -p}}&lt;br /&gt;
&lt;br /&gt;
Checkout the source code from the git repository&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cd /usr/share/webapps/&lt;br /&gt;
git clone git://source.2600hz.org/bluebox.git bluebox/}}&lt;br /&gt;
&lt;br /&gt;
Change the folder permissions&lt;br /&gt;
&lt;br /&gt;
{{Cmd|chmod -R 777 /usr/share/webapps/bluebox}}&lt;br /&gt;
&lt;br /&gt;
Create a symlink to the create directory&lt;br /&gt;
&lt;br /&gt;
{{Cmd|ln -s /usr/share/webapps/bluebox/ /var/www/localhost/htdocs/bluebox}}&lt;br /&gt;
&lt;br /&gt;
== Configuring bluebox ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Log on your bluebox&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Browse to: http://WEBSERVER_IP_ADDRESS/bluebox and start configuration.&lt;br /&gt;
&lt;br /&gt;
* Welcome to Bluebox 1.0 Setup Wizard&lt;br /&gt;
&lt;br /&gt;
Accept Terms and Conditions&lt;br /&gt;
Next&lt;br /&gt;
&lt;br /&gt;
* Initial Configuration&lt;br /&gt;
&lt;br /&gt;
Select pqsl as database server, &#039;&#039;&#039;bluebox&#039;&#039;&#039; as database name, &#039;&#039;&#039;postgres&#039;&#039;&#039; as user,&#039;&#039;&#039; no password&#039;&#039;&#039;&lt;br /&gt;
Set &#039;&#039;&#039;Default Timezone&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Set Port to 3306 (for mysql); see - http://tickets.2600hz.org/browse/BLUEBOX-445&lt;br /&gt;
&lt;br /&gt;
Next&lt;br /&gt;
&lt;br /&gt;
* Create Main Administrator&lt;br /&gt;
&lt;br /&gt;
Master Administration Account&lt;br /&gt;
&lt;br /&gt;
Email Address:&#039;&#039;&#039;youremail@yourserver.net&#039;&#039;&#039;&lt;br /&gt;
Password:&#039;&#039;&#039;adminpassword&#039;&#039;&#039;&lt;br /&gt;
Confirm Password:&#039;&#039;&#039;adminpassword&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Next &lt;br /&gt;
&lt;br /&gt;
* Telephony Engine&lt;br /&gt;
&lt;br /&gt;
In &#039;&#039;Telephony Configuration&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Conf Directory: &#039;&#039;&#039;/etc/freeswitch&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Global Sound File Directory: &#039;&#039;&#039;/usr/sounds&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Next &lt;br /&gt;
&lt;br /&gt;
Conflicting configuration files will be permanently erased if you continue!&lt;br /&gt;
&lt;br /&gt;
Next&lt;br /&gt;
&lt;br /&gt;
* Installation&lt;br /&gt;
&lt;br /&gt;
Ready to Install&lt;br /&gt;
&lt;br /&gt;
Next&lt;br /&gt;
&lt;br /&gt;
After that you will see &#039;&#039;&#039;Click here to use Bluebox 1.0!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
And you finish you Bluesbox installation.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; If you are using the Alpine ACF, or if you change the port in the lighttpd.conf file, the go to the port you set.&lt;br /&gt;
e.g: if you set the port to 8080, then browse to: http://WEBSERVER_IP_ADDRESS:8080/bluebox&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Needs PHP DOM package (apk add php-dom)&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; This documentation need some minor fixes.&lt;br /&gt;
&lt;br /&gt;
[[Category:SQL]]&lt;br /&gt;
[[Category:Telephony]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=ACF&amp;diff=12477</id>
		<title>ACF</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=ACF&amp;diff=12477"/>
		<updated>2016-03-07T12:30:51Z</updated>

		<summary type="html">&lt;p&gt;Fab: Reverted edits by RuthHughes (talk) to last revision by Fab&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Alpine_Configuration_Framework_Design]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=ACF_Libraries&amp;diff=12476</id>
		<title>ACF Libraries</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=ACF_Libraries&amp;diff=12476"/>
		<updated>2016-03-07T12:30:48Z</updated>

		<summary type="html">&lt;p&gt;Fab: Reverted edits by RuthHughes (talk) to last revision by Dubiousjim&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ACF Libraries =&lt;br /&gt;
Because of using lua, a very small language, the need arises to build everything from scratch. This can lead to some confusion, apprehension, or just feeling overwhelmed. Here is documentation on what we have now in the form of libraries and common functions. We hope to build some more and use this information to get the juices flowing in regard to ACF. &lt;br /&gt;
&lt;br /&gt;
Some of these are lua libs or ones written for ACF.&lt;br /&gt;
We are also using as a standard the lposix library which is documented here [[LPOSIX]]&lt;br /&gt;
&lt;br /&gt;
== Generic Libraries (acf-lib) ==&lt;br /&gt;
&lt;br /&gt;
===[[apk.lua]]===&lt;br /&gt;
Functions to load/unload apk packages&lt;br /&gt;
* delete - Deletes a package&lt;br /&gt;
* install - Installs a package&lt;br /&gt;
* version - Checks a package&#039;s installed version&lt;br /&gt;
&lt;br /&gt;
===[[date.lua]]===&lt;br /&gt;
Date and time functions&lt;br /&gt;
To be used with os.time() and os.date()&lt;br /&gt;
*date_to_seconds - Takes a date table and converts it to seconds from 1970&lt;br /&gt;
*seconds_to_date - Takes table of seconds values and converts to a date sorted smallest to largest&lt;br /&gt;
*string_to_table&lt;br /&gt;
*date_diff - Takes two values of seconds and gives back the difference&lt;br /&gt;
*num_month_name - Month number to name of month&lt;br /&gt;
*num_month_name_abr - Month number to abr of month&lt;br /&gt;
*name_month_num - Month name to number&lt;br /&gt;
*abr_month_num - Month abbreviation to number&lt;br /&gt;
*num_dow_name - Day of Week number to name&lt;br /&gt;
*num_dow_name_abr - Day of week number to abbreviation&lt;br /&gt;
*name_dow_num - Day of Week full name to number&lt;br /&gt;
*abr_dow_num - Day of week abbreviation to number&lt;br /&gt;
*what_tz - Checks to see what timezone the box is set to; /etc/TZ&lt;br /&gt;
*change_tz - Changes the timezone&lt;br /&gt;
**Tables are included with this information&lt;br /&gt;
***Timezones&lt;br /&gt;
***Days of Week&lt;br /&gt;
***Months of the Year&lt;br /&gt;
&lt;br /&gt;
===[[format.lua]]===&lt;br /&gt;
Used to format tables and strings&lt;br /&gt;
*dostounix - Converts DOS line endings to Unix&lt;br /&gt;
*escapemagiccharacters - Escape Lua magic characters&lt;br /&gt;
*escapespecialcharacters - Escape shell special characters&lt;br /&gt;
*parse_lines - Takes out the blank and commented lines&lt;br /&gt;
*parse_linesandwords - Removes blanks and comments, and parses each line for words &lt;br /&gt;
*parse_configfile - Parses a config file for name/value pairs&lt;br /&gt;
*search_replace - Goes through a table of lines to search and replace&lt;br /&gt;
*search_for_lines - Goes through a file or table of lines and returns a table of matching lines&lt;br /&gt;
*cap_begin_word - Capitalizes beginning of words&lt;br /&gt;
*string_to_table - Takes a delimited string and turns it into a table&lt;br /&gt;
*expand_bash_syntax_vars - Takes a string and expands any ${...} constructs with the Lua variable&lt;br /&gt;
*replace_line - Removes the indicated line from a string and replaces it&lt;br /&gt;
*insert_line - Inserts a new line at the indicated location in a string&lt;br /&gt;
*get_line - Returns the specified line by number&lt;br /&gt;
*opts_to_table - Searches an option string for separate options and puts them in a table&lt;br /&gt;
*table_to_opts - Goes through an options table and creates the option string&lt;br /&gt;
*update_ini_file - Set a value in a particular ini section&lt;br /&gt;
*parse_ini_file - Read a value / values from an ini file&lt;br /&gt;
*get_ini_section - Read an entire section from an ini file&lt;br /&gt;
*set_ini_section - Set an entire section in an ini file&lt;br /&gt;
*get_ini_entry - Get an entry value from an ini file, accounting for parent sections and variables&lt;br /&gt;
&lt;br /&gt;
=== [[fs.lua]] ===&lt;br /&gt;
Used for various filesystem specific functions&lt;br /&gt;
*is_dir  - Test if the path is a directory&lt;br /&gt;
*is_file - Test if the path is a file&lt;br /&gt;
*is_link - Test if the path is a link&lt;br /&gt;
*create_directory - Creates a directory if it doesn&#039;t exist, including the parent dirs&lt;br /&gt;
*remove_directory - Deletes a directory along with its contents&lt;br /&gt;
*create_file - Creates a blank file (and the directory if necessary)&lt;br /&gt;
*copy_properties - Copies the permissions and ownership of one file to another&lt;br /&gt;
*copy_file - Copies a file to a directory or new filename (creating the directory if necessary)&lt;br /&gt;
*move_file - Moves a file to a directory or new filename (creating the directory if necessary)&lt;br /&gt;
*read_file / read_file_as_array - Reads a file as a string / array&lt;br /&gt;
*write_file - Replaces contents of a file&lt;br /&gt;
*write_line_file - Appends lines to a file&lt;br /&gt;
*find_files_as_array - Returns an array of files under &amp;quot;where&amp;quot; that match &amp;quot;what&amp;quot; (a Lua pattern)&lt;br /&gt;
*find - Give a path and a search string and iterate over matching files&lt;br /&gt;
*stat - Does almost the same as posix.stat, but instead it writes the output human readable&lt;br /&gt;
&lt;br /&gt;
=== [[html.lua]] ===&lt;br /&gt;
Used to generate HTML code.&lt;br /&gt;
*cookie.set - Creates a cookie&lt;br /&gt;
*cookie.unset - Clears a cookie&lt;br /&gt;
*html_escape - Escapes HTML encoded strings&lt;br /&gt;
*entity - Outputs tags such as h1, h2, p, etc.&lt;br /&gt;
*link - Creates a link tag&lt;br /&gt;
*Form setup functions - Create form tags&lt;br /&gt;
**form.text&lt;br /&gt;
**form.longtext&lt;br /&gt;
**form.password&lt;br /&gt;
**form.hidden&lt;br /&gt;
**form.submit&lt;br /&gt;
**form.action&lt;br /&gt;
**form.file&lt;br /&gt;
**form.image&lt;br /&gt;
**form.select&lt;br /&gt;
**form.checkbox&lt;br /&gt;
**form.start&lt;br /&gt;
**form.stop&lt;br /&gt;
&lt;br /&gt;
=== [[processinfo.lua]] ===&lt;br /&gt;
Manages processes&lt;br /&gt;
*package_version - Returns the version of an apk package&lt;br /&gt;
*process_autostart - Returns a string describing run level of a process&lt;br /&gt;
*read_initrunlevels - Returns all processes in all run levels&lt;br /&gt;
*add_runlevels - Add a process to a list of run levels&lt;br /&gt;
*delete_runlevels - Remove a process from a list of run levels&lt;br /&gt;
*daemoncontrol - Start/Stop/Restart/... a process (calls /etc/init.d/service)&lt;br /&gt;
*pidof - Find the process ID of a running program&lt;br /&gt;
&lt;br /&gt;
=== [[validator.lua]] ===&lt;br /&gt;
This contains multiple different functions that each will validate input in there own way.&lt;br /&gt;
*is_string - Tests if a variable is of type string&lt;br /&gt;
*is_boolean - Tests if a variable is of type boolean&lt;br /&gt;
*is_number - Tests if a variable is of type number&lt;br /&gt;
*is_ipv4 - Tests if this is a valid ipv4 address&lt;br /&gt;
*is_partial_ipv4 - Tests if this is part of a valid ipv4 address&lt;br /&gt;
*is_mac - Tests to see if this is a valid mac address&lt;br /&gt;
*is_integer - Tests to see if a string contains an integer&lt;br /&gt;
*is_integer_in_range - Tests to see if a string contains an integer in a given range&lt;br /&gt;
*is_port - Tests to see if a string contains an integer in the IP port range&lt;br /&gt;
*is_valid_filename - Tests to see if a string is a valid filename and (optionally) located in a specified path&lt;br /&gt;
&lt;br /&gt;
== ACF-specific Libraries (acf-core) ==&lt;br /&gt;
===[[authenticator.lua]]===&lt;br /&gt;
Authentication module.  This module loads one sub-authenticator module and exposes its functionality via &#039;&#039;&#039;auth&#039;&#039;&#039; table.&lt;br /&gt;
* authenticate&lt;br /&gt;
* get_userinfo&lt;br /&gt;
* get_userinfo_roles&lt;br /&gt;
* list_users&lt;br /&gt;
* change_settings&lt;br /&gt;
* new_settings&lt;br /&gt;
* delete_user&lt;br /&gt;
&lt;br /&gt;
===[[authenticator-plaintext.lua]]===&lt;br /&gt;
Authentication sub-module for plaintext database&lt;br /&gt;
* list_fields&lt;br /&gt;
* read_field&lt;br /&gt;
* delete_field&lt;br /&gt;
* write_entry&lt;br /&gt;
* read_entry&lt;br /&gt;
* delete_entry&lt;br /&gt;
&lt;br /&gt;
===[[controllerfunctions.lua]]===&lt;br /&gt;
Controller helper functions&lt;br /&gt;
* handle_clientdata&lt;br /&gt;
* handle_form&lt;br /&gt;
* handle_startstop&lt;br /&gt;
&lt;br /&gt;
=== menubuilder.lua ===&lt;br /&gt;
Written by nangel for ACF&lt;br /&gt;
*get_menuitems&lt;br /&gt;
&lt;br /&gt;
=== [[modelfunctions.lua]] ===&lt;br /&gt;
*getenabled&lt;br /&gt;
*startstop_service&lt;br /&gt;
*getstatus&lt;br /&gt;
*getfiledetails&lt;br /&gt;
*setfiledetails&lt;br /&gt;
*validateselect&lt;br /&gt;
*validatemulti&lt;br /&gt;
*write_file_with_audit&lt;br /&gt;
&lt;br /&gt;
=== [[roles.lua]] ===&lt;br /&gt;
*list_controllers&lt;br /&gt;
*get_controllers&lt;br /&gt;
*get_controllers_func&lt;br /&gt;
*get_controllers_view&lt;br /&gt;
*list_default_roles&lt;br /&gt;
*list_roles&lt;br /&gt;
*list_all_roles&lt;br /&gt;
*get_roles_perm&lt;br /&gt;
*get_role_perm&lt;br /&gt;
*delete_role&lt;br /&gt;
*set_role_perm&lt;br /&gt;
&lt;br /&gt;
=== [[session.lua]] ===&lt;br /&gt;
Written by nangel for ACF.&lt;br /&gt;
*random_hash - will create a bash64-like hash from /dev/urandom&lt;br /&gt;
*hash_ip_addr - create a hash encoded ip address &lt;br /&gt;
*ip_addr_from_hash - take the hash encoded ip and give me the ip&lt;br /&gt;
*serialize - go through a table or set of tables and serialize&lt;br /&gt;
*save_session - save the session table&lt;br /&gt;
*load_session - load a saved session table&lt;br /&gt;
*unlink_session - delete a saved session table&lt;br /&gt;
*record_event - record an invalid login attempt&lt;br /&gt;
*count_events - check if there are too many invalid attempts&lt;br /&gt;
*expired_events - delete the expired invalid attempts and saved sessions&lt;br /&gt;
&lt;br /&gt;
=== [[viewfunctions.lua]] ===&lt;br /&gt;
displayinfo - obsolete&lt;br /&gt;
displaymanagement - obsolete&lt;br /&gt;
*displayitem&lt;br /&gt;
*displayformitem&lt;br /&gt;
*displayform&lt;br /&gt;
*displaycommandresults&lt;br /&gt;
&lt;br /&gt;
[[Category:ACF]] [[Category:Lua]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=ACF_acf_www-controller.lua_reference&amp;diff=12475</id>
		<title>ACF acf www-controller.lua reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=ACF_acf_www-controller.lua_reference&amp;diff=12475"/>
		<updated>2016-03-07T12:30:45Z</updated>

		<summary type="html">&lt;p&gt;Fab: Reverted edits by RuthHughes (talk) to last revision by Dubiousjim&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== acf_www-controller.lua reference ==&lt;br /&gt;
&lt;br /&gt;
The acf_www-controller.lua provides the basic dispatcher, exception handler, and application-wide functions for the acf web application.&lt;br /&gt;
&lt;br /&gt;
=== build_menus ( self ) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(internal function)&#039;&#039; Builds the permissions and menu tables and stores them in &#039;&#039;self.sessiondata&#039;&#039; for use on each page throughout the user session.&lt;br /&gt;
&lt;br /&gt;
# Searches for roles files to determine which controllers and actions the current user has permission to view&lt;br /&gt;
# Searches for menu files to create the entire menu structure&lt;br /&gt;
# Removes from the menu any actions for which the user does not have permission&lt;br /&gt;
&lt;br /&gt;
=== check_permission ( self, controller, action ) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(internal function)&#039;&#039; Returns a boolean to tell whether or not this user is permitted to access this controller/action combo.  The decision is based upon the permissions table in &#039;&#039;self.sessiondata&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== find_template ( appdir, prefix, controller, action, viewtype ) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(internal function)&#039;&#039; Looks for a .lsp (Lua Server Page) template.  Looks for the first matching:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;appdir/prefix&#039;&#039;/template-&#039;&#039;controller-action-viewtype&#039;&#039;.lsp&lt;br /&gt;
# &#039;&#039;appdir/prefix&#039;&#039;/template-&#039;&#039;controller-viewtype&#039;&#039;.lsp&lt;br /&gt;
# &#039;&#039;appdir/prefix&#039;&#039;/template-&#039;&#039;action-viewtype&#039;&#039;.lsp&lt;br /&gt;
# &#039;&#039;appdir/prefix&#039;&#039;/template-&#039;&#039;viewtype&#039;&#039;.lsp&lt;br /&gt;
&lt;br /&gt;
It repeats through each upper level of prefix until prefix is &amp;quot;nil&amp;quot;.&lt;br /&gt;
Returns the first found lsp, or false.&lt;br /&gt;
&lt;br /&gt;
=== find_view ( appdir, prefix, controller, action, viewtype ) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(internal function)&#039;&#039; Looks for a .lsp (Lua Server Page) view.  Looks for the first matching:&lt;br /&gt;
&lt;br /&gt;
# &#039;&#039;appdir/prefix/controller-action-viewtype&#039;&#039;.lsp&lt;br /&gt;
# &#039;&#039;appdir/prefix/controller-viewtype&#039;&#039;.lsp&lt;br /&gt;
&lt;br /&gt;
=== has_view ( self ) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(internal function)&#039;&#039; Returns true if there is a .lsp (Lua Server Page) view specifically for this action.&lt;br /&gt;
&lt;br /&gt;
=== dispatch_component ( str, clientdata, suppress_view ) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(internal function)&#039;&#039; This function is made available to each view file to allow loading of components (sub-actions).  It will launch a new controller/action, passing any clientdata, and return the result of the action.  If &#039;&#039;suppress_view&#039;&#039; is not true, it will display the component action&#039;s view.&lt;br /&gt;
&lt;br /&gt;
=== create_helper_library ( self ) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(internal function)&#039;&#039; Creates a helper library to be passed to each view.  Currently, the only function passed is &#039;&#039;dispatch_component&#039;&#039;, but in the future functions that need access to &#039;&#039;self&#039;&#039; may be added.&lt;br /&gt;
&lt;br /&gt;
=== view_resolver ( self ) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;(internal function)&#039;&#039; Returns a function that will run the template and view.  The template is found with &#039;&#039;find_template&#039;&#039;, and the view with &#039;&#039;find_view&#039;&#039;.  Also generates and returns the view parameters besides viewtable.&lt;br /&gt;
&lt;br /&gt;
=== mvc.on_load ( self, parent ) ===&lt;br /&gt;
&lt;br /&gt;
Sets up &#039;&#039;self.conf&#039;&#039; and &#039;&#039;self.sessiondata&#039;&#039;.  If the client reports a session id, this function will attempt to load the existing session.  If not, a new session is created and &#039;&#039;build_menus&#039;&#039; is called to fill in the permissions and menu tables.&lt;br /&gt;
&lt;br /&gt;
=== mvc.on_unload ( self ) ===&lt;br /&gt;
&lt;br /&gt;
Saves the session data before returning.  This function will be called after the action is complete and before the view is displayed.&lt;br /&gt;
&lt;br /&gt;
=== exception_handler ( self, message ) ===&lt;br /&gt;
&lt;br /&gt;
If &#039;&#039;message&#039;&#039; is a table and &#039;&#039;message.type&#039;&#039;=&amp;quot;redir&amp;quot;, then issues a 302 Moved to the client, with the target of the redirect being &#039;&#039;message.prefix/message.controller/message.action message.extra&#039;&#039;  If found while displaying a component, an error message is output instead.&lt;br /&gt;
&lt;br /&gt;
If the &#039;&#039;message.type&#039;&#039; is &amp;quot;redir_to_referrer&amp;quot;, then issues a 302 Moved to the client, with the target of the redirect being the referring page.&lt;br /&gt;
&lt;br /&gt;
If the &#039;&#039;message.type&#039;&#039; is &amp;quot;dispatch&amp;quot;, then calls the parent (mvc.lua) exception handler.&lt;br /&gt;
&lt;br /&gt;
Otherwise, calls the parent (mvc.lua) exception handler.&lt;br /&gt;
&lt;br /&gt;
=== dispatch ( self, prefix, controller, action ) ===&lt;br /&gt;
&lt;br /&gt;
Overload of the MVC &#039;&#039;dispatch&#039;&#039; function to check permissions (and redirect if not allowed), handle components, pass more data to the view, and allow display of views without actions.  Controller actions are executed in a protected xpcall.&lt;br /&gt;
&lt;br /&gt;
# Checks if user has permission to access this controller/action by calling &#039;&#039;check_permission&#039;&#039;&lt;br /&gt;
## If no permission to action, redirects to default action&lt;br /&gt;
## If no permission to controller, redirects to default controller/action&lt;br /&gt;
# If the controller/action exists&lt;br /&gt;
## Creates a &#039;&#039;&#039;self:new ( prefix .. controller)&#039;&#039;&#039; mvc object&lt;br /&gt;
## Runs any existing &#039;&#039;worker.mvc.pre_exec&#039;&#039; function&lt;br /&gt;
## Runs the &#039;&#039;worker.&#039;&#039;&#039;action&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
## Runs any existing &#039;&#039;worker.mvc.post_exec&#039;&#039; function&lt;br /&gt;
## Calls &#039;&#039;destroy&#039;&#039; to destroy the mvc object&lt;br /&gt;
# Gets the view function and parameters from &#039;&#039;view_resolver&#039;&#039;&lt;br /&gt;
# Executes the view with the result of the &#039;&#039;worker.&#039;&#039;&#039;action&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
# Returns the result of the &#039;&#039;worker.&#039;&#039;&#039;action&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If an error occurs, an exception_handler function is run.  If possible, the exception handler of the new mvc object is run, otherwise &#039;&#039;self::exception_handler&#039;&#039; function handles the error.  If an exception occurs after creating the new mvc object, &#039;&#039;mvc.on_unload&#039;&#039; is guaranteed to run, but &#039;&#039;mvc.post_exec&#039;&#039; is not.&lt;br /&gt;
&lt;br /&gt;
=== redirect ( self, str ) ===&lt;br /&gt;
&lt;br /&gt;
Cause a redirect to the specified path. If a prefix or controller is not found in the string, use the current prefix and/or controller. If an action is not found in the string, use the default action. The actual redirection is defined in &#039;&#039;exception_handler&#039;&#039;. This function can be called by an action to redirect to another action rather than display it&#039;s own view.  Note: The controller post_exec function will not be called after redirect is called.&lt;br /&gt;
&lt;br /&gt;
=== redirect_to_referrer ( self ) ===&lt;br /&gt;
&lt;br /&gt;
If we&#039;ve acted on a command, put the result in the session and cause a redirect to the referring page (assuming it&#039;s different). If not, check to see if there is a result in the session from a previous redirection.  The actual redirection is defined in &#039;&#039;exception_handler&#039;&#039;. This function should be called by an action to redirect to the referring page rather than display it&#039;s own view. This allows actions that are used as components to display the container view after completing the requested command, and then display the result when reloaded as a component.  Note: The controller post_exec function will not be called if redirect_to_referrer causes a redirection.&lt;br /&gt;
&lt;br /&gt;
=== logevent ( message ) ===&lt;br /&gt;
&lt;br /&gt;
Writes a message to the acf log file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ACF]] [[Category:Lua]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=ACF_acf_www_example&amp;diff=12474</id>
		<title>ACF acf www example</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=ACF_acf_www_example&amp;diff=12474"/>
		<updated>2016-03-07T12:30:42Z</updated>

		<summary type="html">&lt;p&gt;Fab: Reverted edits by RuthHughes (talk) to last revision by Ttrask&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{ Obsolete }}&lt;br /&gt;
= Set the hostname with a web interface =&lt;br /&gt;
&lt;br /&gt;
In this example we will use the hostname-model.lua and hostname-controller.lua from the previous example to set the hostname using the acf web interface.&lt;br /&gt;
&lt;br /&gt;
For this example, we will assume you have root access on the linux box you are running on (preferably an alpine box!)&lt;br /&gt;
&lt;br /&gt;
== Use the existing code  ==&lt;br /&gt;
&lt;br /&gt;
We should have &#039;&#039;&#039;mvc.lua&#039;&#039; in the current directory, with the controller and model in &#039;&#039;helloworld/app&#039;&#039;  The Controller and Model look the same as the end of the mvc.lua example, except we&#039;ve taken out the on_load, pre_exec, post_exec, and on_unload methods. &lt;br /&gt;
&lt;br /&gt;
=== helloworld/app/hostname-controller.lua ===&lt;br /&gt;
 -- hostname controller code &lt;br /&gt;
 &lt;br /&gt;
 module ( ... , package.seeall )&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 create = function (self )      &lt;br /&gt;
         return self.model.update(self.clientdata.hostname)&lt;br /&gt;
 end                                   &lt;br /&gt;
    &lt;br /&gt;
 read = function (self)&lt;br /&gt;
         return self.model.read()&lt;br /&gt;
 end                             &lt;br /&gt;
 &lt;br /&gt;
 update =  create&lt;br /&gt;
    &lt;br /&gt;
 delete = function (self )&lt;br /&gt;
         self.clientdata.hostname=&amp;quot;&amp;quot;                      &lt;br /&gt;
         return self.worker:create()       &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== helloworld/app/hostname-model.lua ===&lt;br /&gt;
 -- Model functions for retrieving / setting the hostname&lt;br /&gt;
 module ( ..., package.seeall )&lt;br /&gt;
 &lt;br /&gt;
 -- All functions return a table with&lt;br /&gt;
 -- A value, the type of the value, and a message if there was an error&lt;br /&gt;
 &lt;br /&gt;
 local hosttype={ type=&amp;quot;string&amp;quot; }&lt;br /&gt;
 &lt;br /&gt;
 update= function ( name )&lt;br /&gt;
         -- Check to make sure the name is valid &lt;br /&gt;
 &lt;br /&gt;
         if (name == nil) then&lt;br /&gt;
                 hosttype.msg = &amp;quot;Hostname cannot be nil&amp;quot;&lt;br /&gt;
         elseif (#name &amp;gt; 16) then&lt;br /&gt;
                 hosttype.msg = &amp;quot;Hostname must be less than 16 chars&amp;quot;&lt;br /&gt;
         elseif (string.find(name, &amp;quot;[^%w%_%-]&amp;quot;)) then&lt;br /&gt;
                 hosttype.msg = &amp;quot;Hostname can contain alphanumerics only&amp;quot;&lt;br /&gt;
         end&lt;br /&gt;
 &lt;br /&gt;
         -- If it is, set the hostname&lt;br /&gt;
         if (hosttype.msg == nil ) then&lt;br /&gt;
                 local f = io.open(&amp;quot;/etc/hostname&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
                 if f then&lt;br /&gt;
                         f:write(name .. &amp;quot;\n&amp;quot;)&lt;br /&gt;
                         f:close()&lt;br /&gt;
                 end&lt;br /&gt;
                 f = io.popen (&amp;quot;/bin/hostname -F /etc/hostname&amp;quot;)&lt;br /&gt;
                 f:close()&lt;br /&gt;
                 return read()&lt;br /&gt;
         -- Otherwise, return the error message&lt;br /&gt;
         else&lt;br /&gt;
                 hosttype.value = name&lt;br /&gt;
                 return hosttype&lt;br /&gt;
         end&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 read= function ()&lt;br /&gt;
         local f = io.popen (&amp;quot;/bin/hostname&amp;quot;)&lt;br /&gt;
         local n = f:read(&amp;quot;*a&amp;quot;) or &amp;quot;none&amp;quot;&lt;br /&gt;
         f:close()&lt;br /&gt;
         n=string.gsub(n, &amp;quot;\n$&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
         hosttype.value = n&lt;br /&gt;
         return (hosttype) &lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
== Get and configure ACF ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Grab a copy of all the acf code and support libraries from svn and copy into an &amp;quot;/usr/share/acf&amp;quot; directory&lt;br /&gt;
&lt;br /&gt;
 svn export svn://svn.alpinelinux.org/acf/core/trunk /usr/share/acf&lt;br /&gt;
&lt;br /&gt;
2. Copy the acf.conf file to /etc/acf&lt;br /&gt;
&lt;br /&gt;
 cp /usr/share/acf/acf.conf /etc/acf/acf.conf&lt;br /&gt;
&lt;br /&gt;
3. Start the web server &lt;br /&gt;
&lt;br /&gt;
You&#039;ll need haserl, lua, and mini_httpd installed to run acf.  If not already done, please install them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Start mini_httpd (by hand for now)&lt;br /&gt;
&lt;br /&gt;
  mini_httpd -d /usr/share/acf/www -c &#039;cgi-bin/**&#039; start&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Move your hostname model and controller&lt;br /&gt;
&lt;br /&gt;
  mkdir /usr/share/acf/app/sample&lt;br /&gt;
  mv helloworld/app/hostname-* /usr/share/acf/app/sample/&lt;br /&gt;
&lt;br /&gt;
5. Create a new view template, which is a &amp;quot;lua server page&amp;quot;  Create the file as &#039;&#039;/usr/share/acf/app/sample/hostname-html.lsp&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;? local form = ... ?&amp;gt;                                                                          &lt;br /&gt;
 &amp;amp;lt;h1&amp;amp;gt;Hostname&amp;amp;lt;/h1&amp;amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;amp;lt;form action=&amp;quot;update&amp;quot; method=post&amp;amp;gt;                                                          &lt;br /&gt;
 &amp;amp;lt;p&amp;amp;gt;The Hostname is now &amp;amp;lt;input name=hostname value=&amp;quot;&amp;amp;lt;?= form.value ?&amp;amp;gt;&amp;quot;&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
                                                                                             &lt;br /&gt;
 &amp;amp;lt;p&amp;amp;gt;input type=submit value=Submit&amp;amp;gt;&amp;amp;lt;/p&amp;amp;gt;&lt;br /&gt;
 &amp;amp;lt;/form&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. Create a new roles file, which gives all users permission to access your actions. Create the file as &#039;&#039;/usr/share/acf/app/sample/hostname.roles&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 GUEST=hostname/read,hostname/update&lt;br /&gt;
&lt;br /&gt;
== Try the app ==&lt;br /&gt;
&lt;br /&gt;
point your browser to your host/cgi-bin/acf/sample/hostname/read&lt;br /&gt;
&lt;br /&gt;
You should now be able to update the hostname using the web interface, and your &#039;&#039;existing&#039;&#039; model and controller.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ACF]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=ACF_core_principles&amp;diff=12473</id>
		<title>ACF core principles</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=ACF_core_principles&amp;diff=12473"/>
		<updated>2016-03-07T12:30:38Z</updated>

		<summary type="html">&lt;p&gt;Fab: Reverted edits by RuthHughes (talk) to last revision by Ttrask&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;While the mvc.lua code provides a generic framework for any lua &amp;quot;mvc&amp;quot;-based application, &amp;quot;acf&amp;quot; is the component that makes the mvc.lua framework into a web configuration Application. Some ideas and rationales for application-wide settings are discussed here.&lt;br /&gt;
&lt;br /&gt;
= Use of &#039;&#039;cfe&#039;&#039; =&lt;br /&gt;
&lt;br /&gt;
A &#039;&#039;cfe&#039;&#039; (&#039;&#039;&#039;C&#039;&#039;&#039;onfiguration &#039;&#039;&#039;F&#039;&#039;&#039;ramework &#039;&#039;&#039;E&#039;&#039;&#039;ntity) is a way to pass data between a model, controller and view in a common way. There are many ways to do this (e.g. closures, AKClass); use of cfe is an arbitrary decision just to keep development moving forward.&lt;br /&gt;
&lt;br /&gt;
A cfe is a table with some fields guaranteed to exist. It is also a way to abstract user-modifiable data from view-centric HTML input types. ACF isn&#039;t necessarily web-only. With a different controller and views, it could be cli (or gui?!). The acf-cli application is an example of this.&lt;br /&gt;
&lt;br /&gt;
== Fields in all cfes  ==&lt;br /&gt;
&lt;br /&gt;
cfe&#039;s are constructed from a function in &amp;lt;tt&amp;gt;mvc.lua&amp;lt;/tt&amp;gt; that returns an anonymous table with the following fields&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
 ! Field !! Default !! Description&lt;br /&gt;
 |-&lt;br /&gt;
 |value || &amp;quot;&amp;quot; || The value of the cfe (e.g. the IP address, hostname, password, etc.)&lt;br /&gt;
 |-&lt;br /&gt;
 |type || &amp;quot;text&amp;quot; || The type of entity (see below)&lt;br /&gt;
 |-&lt;br /&gt;
 |label || &amp;quot;&amp;quot;  || User-readable label for the value&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The reason for having these fields pre-defined is to allow models, controllers and views to use the indexes without having to first check if they exist. For example the entity will always have a value and type.&lt;br /&gt;
&lt;br /&gt;
cfe&#039;s can have other fields.  Some common fields that may, or may not, be present:&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
 ! Field !! Description&lt;br /&gt;
 |-&lt;br /&gt;
 |errtxt || Text explaining why validation failed&lt;br /&gt;
 |-&lt;br /&gt;
 |option || A list of options for this value&lt;br /&gt;
 |-&lt;br /&gt;
 |descr || User-readable description for the value&lt;br /&gt;
 |-&lt;br /&gt;
 |seq || Numeric sequence suggesting display order for cfe&#039;s in a group or form&lt;br /&gt;
 |-&lt;br /&gt;
 |default || Default value (can be displayed to user)&lt;br /&gt;
 |-&lt;br /&gt;
 |readonly || If present, indicates that the information is to be displayed, but not editable, typically used in forms&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To set fields or overwrite field defaults, specify a table in the argument list to the cfe constructor:&lt;br /&gt;
&lt;br /&gt;
:mycfe = cfe({label=&amp;quot;User&amp;quot;, value=&amp;quot;asdf&amp;quot;, errtxt=&amp;quot;Invalid User&amp;quot;})&lt;br /&gt;
is equivalent to&lt;br /&gt;
:mycfe = {label=&amp;quot;User&amp;quot;, value=&amp;quot;asdf&amp;quot;, type=&amp;quot;text&amp;quot;, errtxt=&amp;quot;Invalid User&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
== cfe types ==&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;type&#039;&#039; field of a cfe can be one of the following:&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
 ! type !! Description !! Modifiers &lt;br /&gt;
 |-&lt;br /&gt;
 | text || a text field, typically one line of text ||&lt;br /&gt;
 |-&lt;br /&gt;
 | longtext || a multi-line text field, like a textarea  ||&lt;br /&gt;
 |-&lt;br /&gt;
 | select || a select list || &#039;&#039;value&#039;&#039; is the currently selected item &amp;lt;br&amp;gt;&#039;&#039;option&#039;&#039; is an array of select options &lt;br /&gt;
 |-&lt;br /&gt;
 | multi || a multi-select list || &#039;&#039;value&#039;&#039; is an array of selected items &amp;lt;br&amp;gt;&#039;&#039;option&#039;&#039; is an array of select options &lt;br /&gt;
 |-&lt;br /&gt;
 | list || a list || &#039;&#039;value&#039;&#039; is an array of strings&lt;br /&gt;
 |-&lt;br /&gt;
 | boolean || true or false ||&lt;br /&gt;
 |-&lt;br /&gt;
 | raw || raw binary data || &lt;br /&gt;
 |-&lt;br /&gt;
 | form || a set of cfe&#039;s that make up a form || &#039;&#039;value&#039;&#039; is a table of cfe&#039;s that make up a form (the table should be name-indexed)&amp;lt;br&amp;gt;&#039;&#039;option&#039;&#039; is the command name to save changes (button name for HTML)&amp;lt;br&amp;gt;&#039;&#039;descr&#039;&#039; or &#039;&#039;errtxt&#039;&#039; may contain the result of a save attempt&lt;br /&gt;
 |-&lt;br /&gt;
 |  group || a set of cfe&#039;s that make up an anonymous group || &#039;&#039;value&#039;&#039; is a table of grouped cfe&#039;s (can be used to pass several items to a view) (the table should be name-indexed)&lt;br /&gt;
 |-&lt;br /&gt;
 |  structure || a Lua table with no further type info || &lt;br /&gt;
 |-&lt;br /&gt;
 |  password || a password which should not be readable by a user || &lt;br /&gt;
 |-&lt;br /&gt;
 |  hidden || a hidden field typically containing information used by ACF and not visible to a user || &lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
= The Model defines the object set =&lt;br /&gt;
&lt;br /&gt;
The model is responsible for writing and reading from the running system. The model typically does not need to know which part of a specific acf module it is running under. It is not mandatory that the model be lua &amp;quot;oop&amp;quot; as the rest of the system is. (the model may not have any need to know &amp;quot;self&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
Since the model can choose how much or how little of the system to expose, the basic data set should be defined in the model.&lt;br /&gt;
&lt;br /&gt;
[[Category:ACF]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=ACF_css&amp;diff=12472</id>
		<title>ACF css</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=ACF_css&amp;diff=12472"/>
		<updated>2016-03-07T12:30:34Z</updated>

		<summary type="html">&lt;p&gt;Fab: Reverted edits by RuthHughes (talk) to last revision by Ncopa&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Draft =&lt;br /&gt;
&amp;lt;span style=&#039;color:red&#039;&amp;gt;&lt;br /&gt;
This is just a place where I want to write down some notes on css issues for Alpine.&amp;lt;BR&amp;gt;&lt;br /&gt;
Don&#039;t consider this as a Alpine documentation until/if this heading saids otherwise.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Design/coding questions =&lt;br /&gt;
Feel the need of some back-bone tabs that is general for all (or most) acf-modules.&amp;lt;BR&amp;gt;&lt;br /&gt;
This results in that a user &#039;recognizes&#039; the layout and information on every acf-module.&amp;lt;BR&amp;gt;&lt;br /&gt;
This way user easy finds what he is looking for and feels that he doesn&#039;t accidentally change something that he doesn&#039;t want to change. &lt;br /&gt;
== View-files ==&lt;br /&gt;
=== Status tab ===&lt;br /&gt;
Display information in this order&amp;lt;BR&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;(H1)&#039;&#039;&#039;&#039;&#039;(Description of the main function of this program)&#039;&#039;&#039;&#039;&#039;(/H1)&#039;&#039;&#039;&amp;lt;BR&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;(H2)SYSTEM INFO(/H2)&#039;&#039;&#039;&lt;br /&gt;
* Status of the current program/process&lt;br /&gt;
* Version of program (if applicable)&lt;br /&gt;
&#039;&#039;&#039;(H3)PROGRAM SPECIFIC(/H3)&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;(Some program specific information)&#039;&#039;&lt;br /&gt;
* &#039;&#039;(Some program specific information)&#039;&#039;&lt;br /&gt;
=== Config tab ===&lt;br /&gt;
&#039;&#039;&#039;(H1)&#039;&#039;&#039;&#039;&#039;(Description of the main function of this program)&#039;&#039;&#039;&#039;&#039;(/H1)&#039;&#039;&#039;&amp;lt;BR&amp;gt;&lt;br /&gt;
&#039;&#039;Above information is same for each tab (expert, status, config, whatever).&#039;&#039;&amp;lt;BR&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;(H2)CONFIGURATION(/H2)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;(H3)GENERAL SETTINGS(/H3)&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Enable/Disable this process&#039;&#039;&#039; [ ]enable  [x]disable&lt;br /&gt;
* &#039;&#039;(Some general settings)&#039;&#039;&lt;br /&gt;
* &#039;&#039;(Some general settings)&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;(H3)&#039;&#039;&#039;&#039;&#039;(Some other category of settings)&#039;&#039;&#039;&#039;&#039;(/H3)&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;(Some specific settings)&#039;&#039;&lt;br /&gt;
* &#039;&#039;(Some specific settings)&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;(H3)&#039;&#039;&#039;&#039;&#039;(Some other category of settings)&#039;&#039;&#039;&#039;&#039;(/H3)&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;(Some specific settings)&#039;&#039;&lt;br /&gt;
* &#039;&#039;(Some specific settings)&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;(H2)APPLY CHANGES(/H2)&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Apply above changes&#039;&#039;&#039; [Apply]&lt;br /&gt;
=== Expert tab ===&lt;br /&gt;
Show the config file(s) in plain text and let the &#039;expert&#039; modify them as he wants (and hope that the &#039;expert&#039; knows what he&#039;s doing)&lt;br /&gt;
&lt;br /&gt;
= CSS =&lt;br /&gt;
== BR ==&lt;br /&gt;
I think that the use of BR is not that big.&amp;lt;BR&amp;gt;&lt;br /&gt;
Instead you could do...&lt;br /&gt;
 &#039;&#039;&#039;(P)&#039;&#039;&#039; your text &#039;&#039;&#039;(/P)&#039;&#039;&#039; &#039;&#039;&#039;(P)&#039;&#039;&#039; some other text &#039;&#039;&#039;(/P)&#039;&#039;&#039;&lt;br /&gt;
== H1,H2,H3 ==&lt;br /&gt;
These headings are (as most other things) defined by the css.&amp;lt;BR&amp;gt;&lt;br /&gt;
By using these you can split your page into sections that handle different parts of functions or data.&lt;br /&gt;
* &#039;&#039;&#039;H1&#039;&#039;&#039; &#039;&#039;(Main data under the &#039;main&#039; heading)&#039;&#039;&lt;br /&gt;
** &#039;&#039;&#039;H2&#039;&#039;&#039; &#039;&#039;(Data related to the &#039;main&#039; heading, but is sectioned into a sub-heading)&#039;&#039;&lt;br /&gt;
*** &#039;&#039;&#039;H3&#039;&#039;&#039; &#039;&#039;(A sub-heading to previous heading)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== PRE ==&lt;br /&gt;
&#039;&#039;&#039;PRE&#039;&#039;&#039; is used to display data &#039;as it comes out from the system&#039;.&amp;lt;BR&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;PRE&#039;&#039;&#039; doesn&#039;t change the linefeed and other things.&lt;br /&gt;
== DL,DT,DD ==&lt;br /&gt;
When you want to present some data, your are limited to the &#039;&#039;&#039;(DIV ID=content)&#039;&#039;&#039;.&amp;lt;BR&amp;gt;&lt;br /&gt;
Below you are supposed to use &#039;&amp;lt;&#039; and &#039;&amp;gt;&#039; instead of &#039;(&#039; and &#039;)&#039; when you use P, DL, DD or some other html tag.&amp;lt;BR&amp;gt;&lt;br /&gt;
Often you present some information on a row, and on the next row you present the next information.&amp;lt;BR&amp;gt;&lt;br /&gt;
* If you want to use 100% of available width you could...&lt;br /&gt;
 &#039;&#039;&#039;(P)&#039;&#039;&#039; Whatever your text is that you want to present &#039;&#039;&#039;(/P)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
In some cases you want to specify some description on what your data is (like a heading). Then you could...&lt;br /&gt;
* Use DT/DD fileds...&lt;br /&gt;
 &#039;&#039;&#039;(DT)&#039;&#039;&#039;The value is:&#039;&#039;&#039;(/DT) (DD)&#039;&#039;&#039;1235&#039;&#039;&#039;(/DD)&#039;&#039;&#039;&lt;br /&gt;
The use of &#039;&#039;&#039;(DL)&#039;&#039;&#039; is still not defined.&amp;lt;br&amp;gt;&lt;br /&gt;
By using these above types of presenting data, you let the style sheet (css) present your output in a nice way.&amp;lt;BR&amp;gt;&lt;br /&gt;
This also makes it possible to add new style sheets when needed.&amp;lt;BR&amp;gt;&lt;br /&gt;
Try not to specify a width or other graphical settings in your view-files.&amp;lt;BR&amp;gt;Let the css do it for you (and if the css can&#039;t handle it for the moment... then we just fix the css)&lt;br /&gt;
&lt;br /&gt;
== DIV ==&lt;br /&gt;
* ID&lt;br /&gt;
** This attribute assigns a name to an element.&lt;br /&gt;
** This name must be unique in a document&lt;br /&gt;
*** [http://www.w3.org/TR/html4/struct/global.html#h-7.5.2 w3.org]&lt;br /&gt;
* CLASS&lt;br /&gt;
** This attribute assigns a class name or set of class names to an element.&lt;br /&gt;
** Any number of elements may be assigned the same class name or names.&lt;br /&gt;
** Multiple class names must be separated by white space characters.&lt;br /&gt;
*** [http://www.w3.org/TR/html4/struct/global.html#h-7.5.2 w3.org]&lt;br /&gt;
&lt;br /&gt;
=== DIV CLASS=... ===&lt;br /&gt;
&lt;br /&gt;
==== leader/tailer(class) ====&lt;br /&gt;
Would it be a good idea to have a leader/tailer class inside every (DIV ID)?&lt;br /&gt;
* leader(class)&lt;br /&gt;
* Main content&lt;br /&gt;
* tailer(class)&lt;br /&gt;
The leader/tailer(class) could be used ether to display information or could be used for graphical changes (with the CSS)?!?!&lt;br /&gt;
&lt;br /&gt;
==== hide(class) ====&lt;br /&gt;
By adding class=&#039;hide&#039; to some object, you could hide it.&lt;br /&gt;
&lt;br /&gt;
==== mute(class) ====&lt;br /&gt;
The &#039;&#039;&#039;mute&#039;&#039;&#039; class could be used to show &amp;quot;quiet&amp;quot; items that aren&#039;t quite hidden.  Perhaps smaller font, greyed out, etc... &amp;quot;extra info&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== header(class) ====&lt;br /&gt;
Could be used to decorate header rows in a table (e.g. colored background and bold text).&lt;br /&gt;
&lt;br /&gt;
==== selected(class) ====&lt;br /&gt;
This could mark tabs/menus which is selected/current.&lt;br /&gt;
&lt;br /&gt;
==== error(class) ====&lt;br /&gt;
This could mark text/background/whatever so your attention is drawn to this.&amp;lt;BR&amp;gt;&lt;br /&gt;
Could indicate that you are forced to take some action or change something.&lt;br /&gt;
&lt;br /&gt;
==== attention(class) ====&lt;br /&gt;
This could mark text/background/whatever so your attention is drawn to this.&lt;br /&gt;
&lt;br /&gt;
=== DIV ID=... ===&lt;br /&gt;
==== header (id) ====&lt;br /&gt;
 [Skip to main content]&amp;lt;BR&amp;gt;&lt;br /&gt;
 Alpine Linux &#039;&#039;(or maybe hostname)&#039;&#039;&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== main (id) ====&lt;br /&gt;
&lt;br /&gt;
===== nav (id) =====&lt;br /&gt;
 Navigation (main)&amp;lt;BR&amp;gt;&lt;br /&gt;
 Where we have been&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== subnav (id) =====&lt;br /&gt;
 Navigation (subnav)&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== content (id) =====&lt;br /&gt;
 Main content of the page.&amp;lt;BR&amp;gt;&lt;br /&gt;
 This is where the interesting information is shown.&amp;lt;BR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== footer (id) ====&lt;br /&gt;
 Made with care by webconf&lt;br /&gt;
&lt;br /&gt;
=== Graphical presentation ===&lt;br /&gt;
  -------------------&lt;br /&gt;
 / header&lt;br /&gt;
 |  -----------------&lt;br /&gt;
 | / leader (class)&lt;br /&gt;
 | \                  [Skip to main content] &lt;br /&gt;
 |  -----------------&lt;br /&gt;
 |                    (H1)Alpine Linux(/H1) &#039;&#039;(or maybe hostname)&#039;&#039;&lt;br /&gt;
 |&lt;br /&gt;
 |  -----------------&lt;br /&gt;
 | / trailer (class)&lt;br /&gt;
 | \&lt;br /&gt;
 |  -----------------&lt;br /&gt;
 \&lt;br /&gt;
  -------------------&lt;br /&gt;
  -------------------&lt;br /&gt;
 / main&lt;br /&gt;
 |  -----------------&lt;br /&gt;
 | / leader (class)&lt;br /&gt;
 | \&lt;br /&gt;
 |  -----------------&lt;br /&gt;
 |  -----------------&lt;br /&gt;
 | / nav&lt;br /&gt;
 | |  ---------------&lt;br /&gt;
 | | / leader (class)&lt;br /&gt;
 | | \&lt;br /&gt;
 | |  ---------------&lt;br /&gt;
 | |                  Navigation (main) (and its items)&lt;br /&gt;
 | |&lt;br /&gt;
 | |  ---------------&lt;br /&gt;
 | | / trailer (class)&lt;br /&gt;
 | | \                Where we have been&lt;br /&gt;
 | |  ---------------&lt;br /&gt;
 | \&lt;br /&gt;
 |  -----------------&lt;br /&gt;
 |  -----------------&lt;br /&gt;
 | / subnav&lt;br /&gt;
 | |  ---------------&lt;br /&gt;
 | | / leader (class)&lt;br /&gt;
 | | \&lt;br /&gt;
 | |  ---------------&lt;br /&gt;
 | |                  Navigation (subnav) (and its items)&lt;br /&gt;
 | |&lt;br /&gt;
 | |  ---------------&lt;br /&gt;
 | | / trailer (class)&lt;br /&gt;
 | | \&lt;br /&gt;
 | |  ---------------&lt;br /&gt;
 | \&lt;br /&gt;
 |  -----------------&lt;br /&gt;
 |  -----------------&lt;br /&gt;
 | / content&lt;br /&gt;
 | |  ---------------&lt;br /&gt;
 | | / leader (class)&lt;br /&gt;
 | | \&lt;br /&gt;
 | |  ---------------&lt;br /&gt;
 | |                  Main content of the page.&lt;br /&gt;
 | |&lt;br /&gt;
 | |  ---------------&lt;br /&gt;
 | | / trailer (class)&lt;br /&gt;
 | | \&lt;br /&gt;
 | |  ---------------&lt;br /&gt;
 | \&lt;br /&gt;
 |  -----------------&lt;br /&gt;
 |  -----------------&lt;br /&gt;
 | / footer&lt;br /&gt;
 | |  ---------------&lt;br /&gt;
 | | / leader (class)&lt;br /&gt;
 | | \&lt;br /&gt;
 | |  ---------------&lt;br /&gt;
 | |                  Made with care by webconf&lt;br /&gt;
 | |&lt;br /&gt;
 | |  ---------------&lt;br /&gt;
 | | / trailer (class)&lt;br /&gt;
 | | \&lt;br /&gt;
 | |  ---------------&lt;br /&gt;
 | \&lt;br /&gt;
 |  -----------------&lt;br /&gt;
 |  -----------------&lt;br /&gt;
 | / tailer (class)&lt;br /&gt;
 | \&lt;br /&gt;
 |  -----------------&lt;br /&gt;
 \ &lt;br /&gt;
  -------------------&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ACF]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=ACF_how_to_write&amp;diff=12471</id>
		<title>ACF how to write</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=ACF_how_to_write&amp;diff=12471"/>
		<updated>2016-03-07T12:30:31Z</updated>

		<summary type="html">&lt;p&gt;Fab: Reverted edits by RuthHughes (talk) to last revision by Ttrask&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=How to Write an ACF=&lt;br /&gt;
&lt;br /&gt;
For some examples please see the Web Configuration Framework projects in the Alpine Linux git repository&lt;br /&gt;
&lt;br /&gt;
http://git.alpinelinux.org/&lt;br /&gt;
&lt;br /&gt;
*acf-unbound - a simple ACF to control a service&lt;br /&gt;
*acf-awall - a slightly more complicated ACF for a firewall&lt;br /&gt;
*acf-provisioning - a complicated database application based on ACF&lt;br /&gt;
*...&lt;br /&gt;
&lt;br /&gt;
==From &amp;lt;nil&amp;gt; to a running ACF example application==&lt;br /&gt;
&lt;br /&gt;
===Step 1 - The Programming Language===&lt;br /&gt;
* ACF uses lua as its programming language. Have a look at [http://www.lua.org/ lua.org] before starting.&lt;br /&gt;
&lt;br /&gt;
===Step 2 - The Application Environment===&lt;br /&gt;
* Setup the ACF web application by running &#039;&#039;setup-acf&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
===Step 3 - Create A Development Directory===&lt;br /&gt;
* In your user home create a directory for your application (e.g. mkdir ~/myapp)&lt;br /&gt;
* And cd into it (e.g. cd ~/myapp)&lt;br /&gt;
&lt;br /&gt;
===Step 4 - MVC, How Does It Affect My Coding?===&lt;br /&gt;
ACF is an MVC based framework. What does this mean to you? Your application is separated into three layers: Model, View, Controller - each of which may have one or more files.&lt;br /&gt;
* Controller: The event dispatcher. Most of the controller functionality is handled by the ACF mvc.lua code and some standard controllers (such as acf_www-controller.lua or acf_cli-controller.lua). For the controller layer of your new ACF package, you must export one lua function per action in a lua module named &#039;myapp-controller.lua&#039;. The ACF controller code will interpret the user interaction to load your new controller and fire the appropriate action - the same-named function in your controller will be called.&lt;br /&gt;
* View: The view layer defines what your application will look like. For most actions, such as forms, your application can use the built-in automatic view generation. For others, you can link to standard views which are included in the acf-core package. For other actions, such as lists of data, you may create view files, each presenting a dynamic HTML page with only as much code as necessary to display the data you receive from the controller.&lt;br /&gt;
* Model:  The &#039;real work&#039; is done in the Model (e.g. modifying config files, starting/stopping services etc.). Each action exported by your controller will call into model functions to retrieve data and carry out actions.&lt;br /&gt;
&lt;br /&gt;
===Step 5 - The Example Files To Start With===&lt;br /&gt;
Now let us have a look at the files we need to place into our application directory:&lt;br /&gt;
&lt;br /&gt;
* config.mk&lt;br /&gt;
* Makefile&lt;br /&gt;
* myapp-controller.lua&lt;br /&gt;
* myapp-model.lua&lt;br /&gt;
* myapp.roles&lt;br /&gt;
* myapp.menu&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;config.mk:&#039;&#039;&#039;&lt;br /&gt;
For use with the Makefile. Just copy/paste it. We will look at it later.&lt;br /&gt;
 prefix=/usr&lt;br /&gt;
 datadir=${prefix}/share&lt;br /&gt;
 sysconfdir=${prefix}/etc&lt;br /&gt;
 localstatedir=${prefix}/var&lt;br /&gt;
 acfdir=${datadir}/acf&lt;br /&gt;
 wwwdir=${acfdir}/www&lt;br /&gt;
 cgibindir=${acfdir}/cgi-bin&lt;br /&gt;
 appdir=${acfdir}/app&lt;br /&gt;
 acflibdir=${acfdir}/lib&lt;br /&gt;
 sessionsdir=${localstatedir}/lib/acf/sessions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Makefile:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The Makefile is called to install our ACF application so that we can see it working.&lt;br /&gt;
 APP_NAME=myapp&lt;br /&gt;
 PACKAGE=acf-$(APP_NAME)&lt;br /&gt;
 VERSION=0.1&lt;br /&gt;
 &lt;br /&gt;
 APP_DIST=        \&lt;br /&gt;
         myapp*        \&lt;br /&gt;
 &lt;br /&gt;
 EXTRA_DIST=README Makefile config.mk&lt;br /&gt;
 &lt;br /&gt;
 DISTFILES=$(APP_DIST) $(EXTRA_DIST)&lt;br /&gt;
 &lt;br /&gt;
 TAR=tar&lt;br /&gt;
 &lt;br /&gt;
 P=$(PACKAGE)-$(VERSION)&lt;br /&gt;
 tarball=$(P).tar.bz2&lt;br /&gt;
 install_dir=$(DESTDIR)/$(appdir)/$(APP_NAME)&lt;br /&gt;
 &lt;br /&gt;
 all:&lt;br /&gt;
 clean:&lt;br /&gt;
 	rm -rf $(tarball) $(P)&lt;br /&gt;
 &lt;br /&gt;
 dist: $(tarball)&lt;br /&gt;
 &lt;br /&gt;
 install:&lt;br /&gt;
 	mkdir -p &amp;quot;$(install_dir)&amp;quot;&lt;br /&gt;
 	cp -a $(APP_DIST) &amp;quot;$(install_dir)&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 $(tarball):     $(DISTFILES)&lt;br /&gt;
 	rm -rf $(P)&lt;br /&gt;
 	mkdir -p $(P)&lt;br /&gt;
 	cp $(DISTFILES) $(P)&lt;br /&gt;
 	$(TAR) -jcf $@ $(P)&lt;br /&gt;
 	rm -rf $(P)&lt;br /&gt;
 &lt;br /&gt;
 # target that creates a tar package, unpacks is and install from package&lt;br /&gt;
 dist-install: $(tarball)&lt;br /&gt;
 	$(TAR) -jxf $(tarball)&lt;br /&gt;
 	$(MAKE) -C $(P) install DESTDIR=$(DESTDIR)&lt;br /&gt;
 	rm -rf $(P)&lt;br /&gt;
 &lt;br /&gt;
 include config.mk&lt;br /&gt;
 &lt;br /&gt;
 .PHONY: all clean dist install dist-install&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;myapp-controller.lua:&#039;&#039;&#039;&lt;br /&gt;
 -- the myapp controller&lt;br /&gt;
 local mymodule = {}&lt;br /&gt;
 &lt;br /&gt;
 mymodule.default_action = &amp;quot;myaction&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 mymodule.myaction = function(self)&lt;br /&gt;
    -- self.clientdata contains the user data&lt;br /&gt;
    -- self.model points to our model&lt;br /&gt;
    -- use the helper function to implement our form&lt;br /&gt;
    return self.handle_form(self, self.model.getdata, self.model.setdata, self.clientdata, &amp;quot;Submit&amp;quot;, &amp;quot;Edit data&amp;quot;, &amp;quot;Data Submitted&amp;quot;)&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 return mymodule&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;myapp-model.lua:&#039;&#039;&#039;&lt;br /&gt;
 -- acf model for myapp&lt;br /&gt;
 local mymodule = {}&lt;br /&gt;
 &lt;br /&gt;
 local cfgfile = &amp;quot;/tmp/myfile&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 -- This function returns a cfe (table of values) containing the file&#039;s&lt;br /&gt;
 -- value as a string. If the file does not exist, we&#039;ll&lt;br /&gt;
 -- simply return &amp;quot;&amp;quot; (an empty string, but NOT nil)&lt;br /&gt;
 mymodule.getdata = function(self, clientdata)&lt;br /&gt;
    local retval = cfe({ type=&amp;quot;group&amp;quot;, value={}, label=&amp;quot;Data&amp;quot; })&lt;br /&gt;
    retval.value.data = cfe({ type=&amp;quot;longtext&amp;quot;, label=&amp;quot;Data&amp;quot; })&lt;br /&gt;
 &lt;br /&gt;
    local fileptr = io.open(cfgfile, &amp;quot;r&amp;quot;)&lt;br /&gt;
    if fileptr ~= nil then&lt;br /&gt;
       retval.value.data.value = fileptr:read(&amp;quot;*a&amp;quot;) or &amp;quot;&amp;quot;&lt;br /&gt;
       fileptr:close()&lt;br /&gt;
    end&lt;br /&gt;
 &lt;br /&gt;
    return retval&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 -- This function will write new contents into our file&lt;br /&gt;
 -- The newdata parameter receives the same cfe as returned by getdata, now with the user data filled in&lt;br /&gt;
 mymodule.setdata = function(self, newdata, action)&lt;br /&gt;
    fileptr = io.open( cfgfile, &amp;quot;w+&amp;quot; )&lt;br /&gt;
    if fileptr ~= nil then&lt;br /&gt;
       fileptr:write(newdata.value.data.value)&lt;br /&gt;
       fileptr:close()&lt;br /&gt;
    else&lt;br /&gt;
       newdata.errtxt = &amp;quot;Failed to save data&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
    return newdata&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 return mymodule&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;myapp.roles:&#039;&#039;&#039;&lt;br /&gt;
 GUEST=myapp:myaction&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;myapp.menu:&#039;&#039;&#039;&lt;br /&gt;
 # Cat   Group   Tab     Action&lt;br /&gt;
 Test    MyApp   MyAction  myaction&lt;br /&gt;
&lt;br /&gt;
===Step 6 - What Does It Do?===&lt;br /&gt;
This program just displays a &amp;amp;lt;textarea&amp;gt; box and a &amp;quot;Submit&amp;quot; button. The user can enter text that is saved into a file once he presses &amp;quot;Submit&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
====In Depth====&lt;br /&gt;
Now let us have a closer look at the different files&#039; contents:&lt;br /&gt;
&lt;br /&gt;
=====myapp-controller.lua=====&lt;br /&gt;
The controller is an event dispatcher. So, here you define all the actions that the user can call or that are defined in the menu. Each action is a separate function that will receive &#039;&#039;self&#039;&#039; as the only parameter.&lt;br /&gt;
&lt;br /&gt;
In our case the action is &#039;&#039;myaction&#039;&#039; - a simple form.&lt;br /&gt;
&lt;br /&gt;
This function can call the &#039;&#039;model&#039;s&#039;&#039; functions to update and/or retrieve data (e.g. self.model.getdata()).&lt;br /&gt;
&lt;br /&gt;
Anything that this function returns will be passed on to the &#039;&#039;view&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=====myapp-model.lua=====&lt;br /&gt;
The functions defined in here can be accessed by the controller to update/set/retrieve data, start/stop services, basically do any &#039;real work&#039;.&lt;br /&gt;
&lt;br /&gt;
In our case, we have implemented the getdata/setdata functions required for a form.&lt;br /&gt;
&lt;br /&gt;
The getdata function receives a copy of &#039;self&#039;, a clientdata table, and a string containing the submit action. It will generate a &#039;CFE&#039; table defining the form and including the current data.&lt;br /&gt;
&lt;br /&gt;
The setdata function is only called when the form is submitted, and it receives a copy of &#039;self&#039; and the updated form &#039;CFE&#039; now containing the submitted data. The setdata function will attempt to perform the action, returning the same form &#039;CFE&#039;. If there is an error, it will fill in the errtxt field of the &#039;CFE&#039;.&lt;br /&gt;
&lt;br /&gt;
=====myapp.roles=====&lt;br /&gt;
This file determines which users have access to which controllers and views. A separate &#039;&#039;roles&#039;&#039; file is generally defined for each ACF. The format of the file is as follows:&lt;br /&gt;
 group=controller:action[,controller:action]&lt;br /&gt;
Each line defines controller:action combinations that are permitted for a particular group. &#039;&#039;&#039;GUEST&#039;&#039;&#039; is a special group to which all users, including anonymous users, are members.&lt;br /&gt;
&lt;br /&gt;
=====myapp.menu=====&lt;br /&gt;
In this file you define:&lt;br /&gt;
* &#039;&#039;&#039;The Category&#039;&#039;&#039; in which a menu entry for your program will appear&lt;br /&gt;
* &#039;&#039;&#039;The Group&#039;&#039;&#039; menu name under Category for this controller&lt;br /&gt;
* &#039;&#039;&#039;The Tab&#039;&#039;&#039; name on the controller page&lt;br /&gt;
* &#039;&#039;&#039;The Action&#039;&#039;&#039; with-in your controller that will be called once the user clicks on the menu entry or tab defined by Category, Group, and Tab.&lt;br /&gt;
&lt;br /&gt;
===Step 7 - How To Get It Going?===&lt;br /&gt;
Once you have completed all the above mentioned steps, go on with:&lt;br /&gt;
* sudo make install (this will install your app)&lt;br /&gt;
* point your browser to https://ip-of-your-dev-host/&lt;br /&gt;
&lt;br /&gt;
===More Info===&lt;br /&gt;
====Where is the View?====&lt;br /&gt;
The above example does not contain any code for a view. So, how is the action getting displayed?&lt;br /&gt;
&lt;br /&gt;
For every action that you define in myapp-controller.lua, you can define a separate view file named: myapp-&#039;&#039;action&#039;&#039;-html.lsp&lt;br /&gt;
&lt;br /&gt;
If there is no view file for a specific action, the application will look for a generic view file for the controller named: myapp-html.lsp&lt;br /&gt;
&lt;br /&gt;
If that file does not exist, the ACF controller will attempt to display the &#039;CFE&#039; using the built-in library functions. This works well for forms, and is what allows us to display our view here.&lt;br /&gt;
&lt;br /&gt;
Here is a &#039;&#039;view&#039;&#039; file that displays our action using the built-in library functions. It looks exactly the same as when no view exists.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;myapp-myaction-html.lsp:&#039;&#039;&#039; &lt;br /&gt;
 &amp;lt;%&lt;br /&gt;
 local form, viewlibrary, page_info, session = ...&lt;br /&gt;
 htmlviewfunctions = require(&amp;quot;htmlviewfunctions&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 htmlviewfunctions.displayitem(form, page_info)&lt;br /&gt;
 %&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The view receives the data to be displayed from the &#039;&#039;controller&#039;&#039;. The view has access to the table returned by the controller action along with a helper library, a table of page information, and the session data &#039;&#039;(see the second line)&#039;&#039;.  The view can also load other libraries, but it should not directly access the &#039;&#039;controller&#039;&#039;, &#039;&#039;model&#039;&#039;, or any global variables.&lt;br /&gt;
&lt;br /&gt;
====How to exchange data between model-view-controller?====&lt;br /&gt;
To exchange data between model, view, and controller ACF uses &#039;&#039;Configuration Framework Entities (CFEs)&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Please see [[ACF_core_principles]] for further details on CFEs.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:ACF]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=ACF_mvc.lua_example&amp;diff=12470</id>
		<title>ACF mvc.lua example</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=ACF_mvc.lua_example&amp;diff=12470"/>
		<updated>2016-03-07T12:30:24Z</updated>

		<summary type="html">&lt;p&gt;Fab: Reverted edits by RuthHughes (talk) to last revision by Ttrask&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Set the hostname with mvc.lua =&lt;br /&gt;
&lt;br /&gt;
In this example we will create a simple hostname-setting command-line application using mvc.lua.  Once the controller/model are built, you can use &#039;&#039;the same code&#039;&#039; to set the hostname via the web with a web-based application controller.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For this example, we will assume you have root access on the linux box you are running on (preferably an Alpine Linux box!)&lt;br /&gt;
&lt;br /&gt;
== Get the mvc.lua module == &lt;br /&gt;
&lt;br /&gt;
Get the mvc.lua module from the git repository.&lt;br /&gt;
&lt;br /&gt;
 wget http://git.alpinelinux.org/cgit/acf-core/plain/lua/mvc.lua&lt;br /&gt;
&lt;br /&gt;
== Create a model and controller ==&lt;br /&gt;
&lt;br /&gt;
Create a file &#039;&#039;&#039;hostname-controller.lua&#039;&#039;&#039;, defining the functions that an &amp;quot;end user&amp;quot; could run. We will only create one action, edithostname, which will be used to read and update the hostname. Since the action makes changes to the system, it naturally takes the form of a &#039;form&#039;:&lt;br /&gt;
&lt;br /&gt;
=== hostname-controller.lua ===&lt;br /&gt;
 -- Controller for editing hostname&lt;br /&gt;
 local mymodule = {} &lt;br /&gt;
 &lt;br /&gt;
 mymodule.edithostname = function (self)&lt;br /&gt;
         return self.handle_form(self, self.model.get_hostname, self.model.set_hostname, self.clientdata, &amp;quot;Edit&amp;quot;, &amp;quot;Edit Hostname&amp;quot;, &amp;quot;Hostname Updated&amp;quot;)&lt;br /&gt;
 end                                   &lt;br /&gt;
 &lt;br /&gt;
 return mymodule&lt;br /&gt;
&lt;br /&gt;
Create a file &#039;&#039;&#039;hostname-model.lua&#039;&#039;&#039;, defining the model functions to get and set the hostname.  We return a cfe table for each function including the form with the one entry for hostname:&lt;br /&gt;
&lt;br /&gt;
=== hostname-model.lua ===&lt;br /&gt;
 -- Model functions for retrieving / setting the hostname&lt;br /&gt;
 local mymodule = {}&lt;br /&gt;
 &lt;br /&gt;
 -- Create a cfe defining the form for editing the hostname and containing the current value&lt;br /&gt;
 mymodule.get_hostname = function(self, clientdata)&lt;br /&gt;
         local retval = cfe({ type=&amp;quot;group&amp;quot;, value={}, label=&amp;quot;Hostname&amp;quot; })&lt;br /&gt;
 &lt;br /&gt;
         -- Warning - io.popen has security risks, never pass user data to io.popen&lt;br /&gt;
         local f = io.popen (&amp;quot;/bin/hostname&amp;quot;)&lt;br /&gt;
         local n = f:read(&amp;quot;*a&amp;quot;) or &amp;quot;none&amp;quot;&lt;br /&gt;
         f:close()&lt;br /&gt;
         n=string.gsub(n, &amp;quot;\n$&amp;quot;, &amp;quot;&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
         retval.value.hostname = cfe({ value=n, label=&amp;quot;Hostname&amp;quot; })&lt;br /&gt;
 &lt;br /&gt;
         return retval&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 -- Set the hostname from the value contained in the cfe created by get_hostname&lt;br /&gt;
 mymodule.set_hostname = function(self, hostnameform, action)&lt;br /&gt;
         local success = true&lt;br /&gt;
 &lt;br /&gt;
         -- Check to make sure the name is valid&lt;br /&gt;
         if (hostnameform.value.hostname.value == &amp;quot;&amp;quot;) then&lt;br /&gt;
                 success = false&lt;br /&gt;
                 hostnameform.value.hostname.errtxt = &amp;quot;Hostname must not be blank&amp;quot;&lt;br /&gt;
         elseif (#hostnameform.value.hostname.value &amp;gt; 16) then&lt;br /&gt;
                 success = false&lt;br /&gt;
                 hostnameform.value.hostname.errtxt = &amp;quot;Hostname must be 16 characters or less&amp;quot;&lt;br /&gt;
         elseif (string.find(hostnameform.value.hostname.value, &amp;quot;[^%w%_%-]&amp;quot;)) then&lt;br /&gt;
                 success = false&lt;br /&gt;
                 hostnameform.value.hostname.errtxt = &amp;quot;Hostname can contain alphanumerics only&amp;quot;&lt;br /&gt;
         end&lt;br /&gt;
 &lt;br /&gt;
         -- If it is valid, set the hostname&lt;br /&gt;
         if ( success ) then&lt;br /&gt;
                 local f = io.open(&amp;quot;/etc/hostname&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
                 if f then&lt;br /&gt;
                         f:write(hostnameform.value.hostname.value .. &amp;quot;\n&amp;quot;)&lt;br /&gt;
                         f:close()&lt;br /&gt;
                 end&lt;br /&gt;
                 -- Warning - io.popen has security risks, never pass user data to io.popen&lt;br /&gt;
                 f = io.popen (&amp;quot;/bin/hostname -F /etc/hostname&amp;quot;)&lt;br /&gt;
                 f:close()&lt;br /&gt;
         else&lt;br /&gt;
                 hostnameform.errtxt = &amp;quot;Failed to set hostname&amp;quot;&lt;br /&gt;
         end&lt;br /&gt;
 &lt;br /&gt;
         return hostnameform&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 return mymodule&lt;br /&gt;
&lt;br /&gt;
== Optionally test the model code (without mvc.lua)  ==&lt;br /&gt;
&lt;br /&gt;
If you want, you can create a &#039;&#039;&#039;test.lua&#039;&#039;&#039; script to validate the model code works on its own:&lt;br /&gt;
&lt;br /&gt;
=== test.lua ===&lt;br /&gt;
 require(&amp;quot;mvc&amp;quot;) -- Needed for cfe function definition&lt;br /&gt;
 m=require(&amp;quot;hostname-model&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 local form = m.get_hostname()&lt;br /&gt;
 form.value.hostname.value = arg[1] or &amp;quot;&amp;quot;&lt;br /&gt;
 form = m.set_hostname(nil, form)&lt;br /&gt;
 &lt;br /&gt;
 if form.errtxt then&lt;br /&gt;
         print(&amp;quot;FAILED: &amp;quot;..form.value.hostname.errtxt or form.errtxt)&lt;br /&gt;
 end&lt;br /&gt;
 form = m.get_hostname()&lt;br /&gt;
 print(form.value.hostname.value)&lt;br /&gt;
&lt;br /&gt;
You can then test this with:&lt;br /&gt;
&lt;br /&gt;
 #lua test.lua &amp;quot;Alpine&amp;quot;&lt;br /&gt;
  Alpine&lt;br /&gt;
&lt;br /&gt;
 #lua test.lua &amp;quot;Invalid Name&amp;quot;&lt;br /&gt;
  FAILED: Hostname can contain alphanumerics only&lt;br /&gt;
  Alpine&lt;br /&gt;
&lt;br /&gt;
== Add the package to the ACF framework ==&lt;br /&gt;
&lt;br /&gt;
To make the model and controller work within the ACF mvc.lua framework, we must do several things.   &lt;br /&gt;
&lt;br /&gt;
1. Install the ACF core package:&lt;br /&gt;
&lt;br /&gt;
 apk add acf-core&lt;br /&gt;
&lt;br /&gt;
Optionally, you can add the entire web-based ACF framework:&lt;br /&gt;
&lt;br /&gt;
 setup-acf&lt;br /&gt;
&lt;br /&gt;
2. Modify the ACF configuration file to look in /etc/acf/app/ for additional packages. Edit the /etc/acf/acf.conf file to add the &#039;&#039;/etc/acf/app/&#039;&#039; directory to the &#039;&#039;appdir&#039;&#039; comma-separated list:&lt;br /&gt;
&lt;br /&gt;
 appdir=/etc/acf/app/,/usr/share/acf/app/&lt;br /&gt;
&lt;br /&gt;
3. Move the model and controller to the new package directory. We will call the package &amp;quot;test&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 mkdir -p /etc/acf/app/test&lt;br /&gt;
 mv hostname-*.lua /etc/acf/app/test&lt;br /&gt;
&lt;br /&gt;
4. Test the new package using the acf-cli application:&lt;br /&gt;
&lt;br /&gt;
 # acf-cli /test/hostname/edithostname&lt;br /&gt;
 result = {}&lt;br /&gt;
 result[&amp;quot;label&amp;quot;] = &amp;quot;Edit Hostname&amp;quot;&lt;br /&gt;
 result[&amp;quot;option&amp;quot;] = &amp;quot;Edit&amp;quot;&lt;br /&gt;
 result[&amp;quot;type&amp;quot;] = &amp;quot;form&amp;quot;&lt;br /&gt;
 result[&amp;quot;value&amp;quot;] = {}&lt;br /&gt;
 result[&amp;quot;value&amp;quot;][&amp;quot;hostname&amp;quot;] = {}&lt;br /&gt;
 result[&amp;quot;value&amp;quot;][&amp;quot;hostname&amp;quot;][&amp;quot;label&amp;quot;] = &amp;quot;Hostname&amp;quot;&lt;br /&gt;
 result[&amp;quot;value&amp;quot;][&amp;quot;hostname&amp;quot;][&amp;quot;type&amp;quot;] = &amp;quot;text&amp;quot;&lt;br /&gt;
 result[&amp;quot;value&amp;quot;][&amp;quot;hostname&amp;quot;][&amp;quot;value&amp;quot;] = &amp;quot;Alpine&amp;quot;&lt;br /&gt;
 # acf-cli /test/hostname/edithostname hostname=test submit=true&lt;br /&gt;
 result = {}&lt;br /&gt;
 result[&amp;quot;descr&amp;quot;] = &amp;quot;Hostname Updated&amp;quot;&lt;br /&gt;
 result[&amp;quot;label&amp;quot;] = &amp;quot;Edit Hostname&amp;quot;&lt;br /&gt;
 result[&amp;quot;option&amp;quot;] = &amp;quot;Edit&amp;quot;&lt;br /&gt;
 result[&amp;quot;type&amp;quot;] = &amp;quot;form&amp;quot;&lt;br /&gt;
 result[&amp;quot;value&amp;quot;] = {}&lt;br /&gt;
 result[&amp;quot;value&amp;quot;][&amp;quot;hostname&amp;quot;] = {}&lt;br /&gt;
 result[&amp;quot;value&amp;quot;][&amp;quot;hostname&amp;quot;][&amp;quot;label&amp;quot;] = &amp;quot;Hostname&amp;quot;&lt;br /&gt;
 result[&amp;quot;value&amp;quot;][&amp;quot;hostname&amp;quot;][&amp;quot;type&amp;quot;] = &amp;quot;text&amp;quot;&lt;br /&gt;
 result[&amp;quot;value&amp;quot;][&amp;quot;hostname&amp;quot;][&amp;quot;value&amp;quot;] = &amp;quot;test&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note that the first case read the existing hostname and the second case updated it. The output of the acf-cli application is a serialized version of the cfe form, which is good for testing but not too useful in real life.&lt;br /&gt;
&lt;br /&gt;
== Enable the package in the ACF web interface ==&lt;br /&gt;
&lt;br /&gt;
1. Add the web-based ACF framework:&lt;br /&gt;
&lt;br /&gt;
 setup-acf&lt;br /&gt;
&lt;br /&gt;
2. Configure all users to have access to the new hostname action. Edit &amp;quot;/etc/acf/app/test/hostname.roles&amp;quot; file and add GUEST permission for the edithostname action:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;GUEST=hostname/edithostname&amp;quot; &amp;gt; /etc/acf/app/test/hostname.roles&lt;br /&gt;
&lt;br /&gt;
The new action should now be visible by browsing to &#039;&#039;https://IP-of-host/cgi-bin/acf/test/hostname/edithostname&#039;&#039;. Obviously you might want to reconsider providing GUEST access to this action, because this allows unauthenticated users to modify your hostname.&lt;br /&gt;
&lt;br /&gt;
3. Add the new hostname action to the ACF menu. Edit &amp;quot;/etc/acf/app/test/hostname.menu&amp;quot; file and add a menu item:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;Test Hostname Edit edithostname&amp;quot; &amp;gt; /etc/acf/app/test/hostname.menu&lt;br /&gt;
&lt;br /&gt;
You will need to log off from the ACF interface (or delete the session cookie) before the new menu item will be visible.&lt;br /&gt;
&lt;br /&gt;
== Make an MVC based application ==&lt;br /&gt;
You have two options for creating an MVC based application of your own.&lt;br /&gt;
&lt;br /&gt;
1. Use the &#039;&#039;dispatch&#039;&#039; function. This is the method used by the web interface and the acf-cli application. The action to be dispatched is passed in a string format &#039;&#039;/prefix/controller/action&#039;&#039; and the input values are passed in as a clientinfo table. Output is written to stdout.&lt;br /&gt;
&lt;br /&gt;
2. Use the &#039;&#039;new&#039;&#039; function to load the desired controller and then directly call the controller actions. For handling forms and user input, the application will call the action once to retrieve the form cfe, then fill in the desired input values into the cfe and call the action again to submit the form and perform the desired action. The MVC application is responsible for any user interaction and display of the results.&lt;br /&gt;
&lt;br /&gt;
=== Use the Dispatch method ===&lt;br /&gt;
Todo&lt;br /&gt;
&lt;br /&gt;
=== Use the New method ===&lt;br /&gt;
Todo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Obsolete}}&lt;br /&gt;
4. Create a dispatch wrapper program, named &#039;&#039;&#039;helloworld.lua&#039;&#039;&#039; in the current directory:&lt;br /&gt;
&lt;br /&gt;
 -- Simple CLI based mvc application&lt;br /&gt;
 &lt;br /&gt;
 -- this is to get around having to store&lt;br /&gt;
 -- the config file in /etc/helloworld/helloworld.conf&lt;br /&gt;
 ENV={}&lt;br /&gt;
 ENV.HOME=&amp;quot;.&amp;quot; &lt;br /&gt;
 &lt;br /&gt;
 -- load the module&lt;br /&gt;
 require(&amp;quot;mvc&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
 -- create an new &amp;quot;mvc object&amp;quot;&lt;br /&gt;
 MVC=mvc:new()&lt;br /&gt;
 &lt;br /&gt;
 -- load the config file so we can find the appdir&lt;br /&gt;
 MVC:read_config(&amp;quot;helloworld&amp;quot;) &lt;br /&gt;
 &lt;br /&gt;
 -- create an application container&lt;br /&gt;
 APP=MVC:new(&amp;quot;app&amp;quot;)&lt;br /&gt;
  &lt;br /&gt;
 -- dispatch the request&lt;br /&gt;
 APP.clientdata.hostname=arg[2]&lt;br /&gt;
 APP:dispatch( &amp;quot;&amp;quot;, &amp;quot;hostname&amp;quot;, (arg[1] or &amp;quot;&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
 -- destroy the mvc objects&lt;br /&gt;
 APP:destroy()&lt;br /&gt;
 MVC:destroy()&lt;br /&gt;
&lt;br /&gt;
This application loads the &amp;quot;mvc.lua&amp;quot; framework, creates an mvc &amp;quot;object&amp;quot; named &amp;quot;MVC&amp;quot;, then reads the helloworld.conf file to find out where the app dir is (helloworld/app/).  It then loads the &#039;&#039;&#039;app-controller.lua&#039;&#039;&#039; into a new &amp;quot;application level&amp;quot; object named &#039;&#039;&#039;APP&#039;&#039;&#039;.  Finally, it sets the clientdata and dispatches the hostname-controller/model pair.&lt;br /&gt;
&lt;br /&gt;
5.  Test the application:&lt;br /&gt;
 # hostname&lt;br /&gt;
 Alpine&lt;br /&gt;
 # lua helloworld.lua no-such-function foo&lt;br /&gt;
 The following unhandled application error occured:&lt;br /&gt;
 &lt;br /&gt;
 controller: &amp;quot;hostname&amp;quot; does not have a &amp;quot;no-such-function&amp;quot; action.&lt;br /&gt;
 # hostname&lt;br /&gt;
 Alpine&lt;br /&gt;
&lt;br /&gt;
 # hostname&lt;br /&gt;
 Alpine&lt;br /&gt;
 # lua helloworld.lua update Alline&lt;br /&gt;
 Your controller and application did not specify a view resolver.&lt;br /&gt;
 The MVC framework has no view available. sorry.&lt;br /&gt;
 # hostname&lt;br /&gt;
 Alline&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Note in the second case the hostname &#039;&#039;was&#039;&#039; changed, although the application does not know how to report success.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Create a view resolver and view formatter ==&lt;br /&gt;
&lt;br /&gt;
The view resolver is a function that returns a function that processes the view. The returned function receives input from the controller and generates the output to be displayed.&lt;br /&gt;
&lt;br /&gt;
We will build a very simple view resolver and view processor for our application. Add this to the end of &#039;&#039;&#039;helloworld/app/hostname-controller.lua&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 local private = {} &lt;br /&gt;
 &lt;br /&gt;
 private.view = function (f)&lt;br /&gt;
        if (f.msg) then&lt;br /&gt;
                print( (f.value or &amp;quot;&amp;quot;) .. &amp;quot; is not a valid hostname &amp;quot;)&lt;br /&gt;
        else&lt;br /&gt;
                print (&amp;quot;Hostname is currently &amp;quot; .. f.value )&lt;br /&gt;
        end&lt;br /&gt;
 end &lt;br /&gt;
 &lt;br /&gt;
 view_resolver = function (self)&lt;br /&gt;
         return private.view&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we can test:&lt;br /&gt;
&lt;br /&gt;
 # lua helloworld.lua update &amp;quot;1 2 3&amp;quot;&lt;br /&gt;
    1 2 3 is not a valid hostname &lt;br /&gt;
 # lua helloworld.lua update        &lt;br /&gt;
    is not a valid hostname &lt;br /&gt;
 # lua helloworld.lua update Alpine&lt;br /&gt;
   Hostname is currently Alpine&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
But we have two problems:&lt;br /&gt;
&lt;br /&gt;
1. We now have to make a view resolver and view function for every controller.  If we add a &#039;&#039;date&#039;&#039; setting controller, we&#039;ll have to make a view resolver and view function for it, and so on.&lt;br /&gt;
&lt;br /&gt;
2. Perhaps more importantly, view_resolver is now an &amp;quot;action&amp;quot; in our appliction.  Recall that invalid actions are captured, but try this:&lt;br /&gt;
&lt;br /&gt;
  # lua helloworld.lua no_such_action Alpine&lt;br /&gt;
     The following unhandled application error occured:&lt;br /&gt;
   &lt;br /&gt;
     controller: &amp;quot;hostname&amp;quot; does not have a &amp;quot;no_such_action&amp;quot; action.&lt;br /&gt;
  &lt;br /&gt;
  # lua helloworld.lua view_resolver Alpine &lt;br /&gt;
     The following unhandled application error occured:&lt;br /&gt;
   &lt;br /&gt;
     ./helloworld/app/hostname-controller.lua:27: attempt to index local &#039;f&#039; (a function value)&lt;br /&gt;
     stack traceback:&lt;br /&gt;
        ./helloworld/app/hostname-controller.lua:27: in function &#039;viewfunc&#039;&lt;br /&gt;
        ./mvc.lua:139: in function &amp;lt;./mvc.lua:90&amp;gt;&lt;br /&gt;
        [C]: in function &#039;xpcall&#039;&lt;br /&gt;
        ./mvc.lua:90: in function &#039;dispatch&#039;&lt;br /&gt;
        helloworld.lua:23: in main chunk&lt;br /&gt;
        [C]: ?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Because view_resolver is an action in the worker table, the &#039;&#039;&#039;mvc.lua&#039;&#039;&#039; runs it; but it returns a function, not a table, and causes an unhandled exception in the view.&lt;br /&gt;
&lt;br /&gt;
== Move the view resolver to the application level ==&lt;br /&gt;
&lt;br /&gt;
The solution to both problems is to move the view resolver and the view function out of the controller&#039;s worker table, into the next higher level, in this case, the application&#039;s worker table:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. Delete the private.view and view_resolver functions from &#039;&#039;&#039;helloworld/app/hostname-controller.lua&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
2. Add the following to &#039;&#039;&#039;helloworld/app/app-controller.lua&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 local private = {}&lt;br /&gt;
 &lt;br /&gt;
 private.view = function ( controller, action, viewtable )&lt;br /&gt;
         io.write(string.format(&amp;quot;Controller: %s  Action: %s\n&amp;quot;,&lt;br /&gt;
                 controller or &amp;quot;&amp;quot;, action or &amp;quot;&amp;quot;))&lt;br /&gt;
         io.write (&amp;quot;Returned a table with the following values:\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
         for k,v in pairs(viewtable) do&lt;br /&gt;
                 io.write(string.format(&amp;quot;%s\t%s\n&amp;quot;, k, v))&lt;br /&gt;
         end&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 view_resolver = function (self)&lt;br /&gt;
         return function (viewtable)&lt;br /&gt;
                 return private.view (self.conf.controller, self.conf.action, viewtable)&lt;br /&gt;
         end&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This creates a more &amp;quot;generic&amp;quot; view, but one that will work for any controller - not just &#039;&#039;&#039;hostname&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now things work as they should:&lt;br /&gt;
&lt;br /&gt;
 # lua helloworld.lua update &amp;quot;one two&amp;quot;&lt;br /&gt;
   Controller: hostname  Action: update&lt;br /&gt;
   Returned a table with the following values:&lt;br /&gt;
   value   one two&lt;br /&gt;
   type    string&lt;br /&gt;
   msg     Hostname can contain alphanumerics only&lt;br /&gt;
 &lt;br /&gt;
 # lua helloworld.lua view_resolver &amp;quot;Alpine&amp;quot;&lt;br /&gt;
   The following unhandled application error occured:&lt;br /&gt;
   &lt;br /&gt;
   controller: &amp;quot;hostname&amp;quot; does not have a &amp;quot;view_resolver&amp;quot; action.&lt;br /&gt;
&lt;br /&gt;
= mvc load &amp;amp; exec special functions =&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;mvc.lua&#039;&#039;&#039; module has a provision for executing code on module load, prior to executing the controller&#039;s action, just after executing the controller&#039;s action, and on module unload.&lt;br /&gt;
&lt;br /&gt;
This is done with the mvc table in the controller.  To demonstrate, let&#039;s add a few functions to &#039;&#039;&#039;helloworld/app/app-controller.lua&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 mvc = {}&lt;br /&gt;
 mvc.on_load = function (self, parent)&lt;br /&gt;
         print (&amp;quot;This is the app controller&#039;s on_load function&amp;quot;)&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 mvc.pre_exec = function (self)&lt;br /&gt;
         print (&amp;quot;This is the app controller&#039;s pre_exec function&amp;quot;)&lt;br /&gt;
 end &lt;br /&gt;
 &lt;br /&gt;
 mvc.post_exec = function (self)&lt;br /&gt;
         print (&amp;quot;This is the app controller&#039;s post_exec function&amp;quot;)&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
 mvc.on_unload = function (self)&lt;br /&gt;
         print (&amp;quot;This is the app controller&#039;s on_unload function&amp;quot;)&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
Now running our script shows when the functions get called:&lt;br /&gt;
&lt;br /&gt;
 # lua helloworld.lua update &amp;quot;Alpine&amp;quot;&lt;br /&gt;
   This is the app controller&#039;s on_load function&lt;br /&gt;
   This is the app controller&#039;s pre_exec function&lt;br /&gt;
   This is the app controller&#039;s post_exec function&lt;br /&gt;
   Controller: hostname  Action: update&lt;br /&gt;
   Returned a table with the following values:&lt;br /&gt;
   value   Alpine&lt;br /&gt;
   type    string&lt;br /&gt;
   This is the app controller&#039;s on_unload function&lt;br /&gt;
&lt;br /&gt;
We can add mvc functions to a specific controller, as well.  Add this to &#039;&#039;&#039;helloworld/app/hostname-controller.lua&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 mvc = {}&lt;br /&gt;
 mvc.on_load = function (self, parent)&lt;br /&gt;
         print (&amp;quot;This is the hostname controller&#039;s on_load function&amp;quot;)&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 mvc.pre_exec = function (self)&lt;br /&gt;
         print (&amp;quot;This is the hostname controller&#039;s pre_exec function&amp;quot;)&lt;br /&gt;
 end &lt;br /&gt;
 &lt;br /&gt;
 mvc.post_exec = function (self)&lt;br /&gt;
         print (&amp;quot;This is the hostname controller&#039;s post_exec function&amp;quot;)&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 mvc.on_unload = function (self)&lt;br /&gt;
         print (&amp;quot;This is the hostname controller&#039;s on_unload function&amp;quot;)&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
And this happens:&lt;br /&gt;
&lt;br /&gt;
 # lua helloworld.lua update &amp;quot;Alpine&amp;quot;&lt;br /&gt;
   This is the app controller&#039;s on_load function&lt;br /&gt;
   This is the hostname controller&#039;s on_load function&lt;br /&gt;
   This is the hostname controller&#039;s pre_exec function&lt;br /&gt;
   This is the hostname controller&#039;s post_exec function&lt;br /&gt;
   This is the hostname controller&#039;s on_unload function&lt;br /&gt;
   Controller: hostname  Action: update&lt;br /&gt;
   Returned a table with the following values:&lt;br /&gt;
   value   Alpine&lt;br /&gt;
   type    string&lt;br /&gt;
   This is the app controller&#039;s on_unload function&lt;br /&gt;
&lt;br /&gt;
Note that both the &#039;&#039;app&#039;&#039; and &#039;&#039;hostname&#039;&#039; &#039;&#039;&#039;on_load&#039;&#039;&#039; and &#039;&#039;&#039;on_unload&#039;&#039;&#039; functions were run, but only the &#039;&#039;hostname&#039;&#039; &#039;&#039;&#039;pre_exec&#039;&#039;&#039; and &#039;&#039;&#039;post_exec&#039;&#039;&#039; functions ran.  This is because the pre and post exec functions are run as part of the &amp;quot;action&amp;quot;, and the &#039;&#039;&#039;dispatch&#039;&#039;&#039; function looks in the lowest-level controller for the pre/post_exec function.  Since &#039;&#039;hostname&#039;&#039; now defines those functions, it runs them.&lt;br /&gt;
&lt;br /&gt;
To run both the &#039;&#039;hostname&#039;&#039; and &#039;&#039;app&#039;&#039; pre_exec function, you must arrange for the &#039;&#039;hostname&#039;&#039; pre_exec function to call it&#039;s parent pre_exec:&lt;br /&gt;
&lt;br /&gt;
 mvc = {}&lt;br /&gt;
 mvc.on_load = function (self, parent)&lt;br /&gt;
        print (&amp;quot;This is the hostname controller&#039;s on_load function&amp;quot;)&lt;br /&gt;
        mvc.parent_pre_exec = parent.worker.mvc.pre_exec&lt;br /&gt;
 end&lt;br /&gt;
 &lt;br /&gt;
 mvc.pre_exec = function (self)&lt;br /&gt;
         mvc.parent_pre_exec (self)&lt;br /&gt;
         print (&amp;quot;This is the hostname controller&#039;s pre_exec function&amp;quot;)&lt;br /&gt;
 end&lt;br /&gt;
&lt;br /&gt;
[[Category:ACF]] [[Category:Lua]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=ACF_mvc.lua_reference&amp;diff=12469</id>
		<title>ACF mvc.lua reference</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=ACF_mvc.lua_reference&amp;diff=12469"/>
		<updated>2016-03-07T12:30:21Z</updated>

		<summary type="html">&lt;p&gt;Fab: Reverted edits by RuthHughes (talk) to last revision by Ttrask&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== mvc.lua function reference ==&lt;br /&gt;
&lt;br /&gt;
This lua module provides the basics for creating an mvc application.  It is patterned&lt;br /&gt;
loosely after the Ruby on Rails pattern - but much more simplistic.&lt;br /&gt;
&lt;br /&gt;
The general pattern is to use the mvc &#039;&#039;&#039;new&#039;&#039;&#039; function to create a set of tables,&lt;br /&gt;
and then use &#039;&#039;&#039;new&#039;&#039; within those tables to create sub &amp;quot;objects&amp;quot;.   By using&lt;br /&gt;
metatable .__index methods, function references flow up through the parent tables.&lt;br /&gt;
&lt;br /&gt;
=== new( self, modname ) ===&lt;br /&gt;
&lt;br /&gt;
Returns 3 values: an &#039;&#039;mvc&#039;&#039; table and 2 booleans ( true or false if the &#039;&#039;modname&#039;&#039;-controller and &#039;&#039;modname&#039;&#039;-model.lua were loaded)  &lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;mvc&#039;&#039; table contains:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! table !! used for  !! comments !! .__index points to&lt;br /&gt;
|-&lt;br /&gt;
|conf&lt;br /&gt;
|configuration items&lt;br /&gt;
|only created if a &#039;&#039;conf&#039;&#039; table does not exist in a parent&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
|clientdata&lt;br /&gt;
|data sent from the client&lt;br /&gt;
|only created if a &#039;&#039;clientdata&#039;&#039; table does not exist in a parent&lt;br /&gt;
| n/a&lt;br /&gt;
|-&lt;br /&gt;
|worker&lt;br /&gt;
|the &amp;quot;controller&amp;quot; methods&lt;br /&gt;
|if &#039;&#039;&#039;modname&#039;&#039;&#039; is given, then &#039;&#039;&#039;&#039;&#039;modname&#039;&#039;&#039;-controller.lua&#039;&#039; module is loaded into this table.  Otherwise, an empty table is returned.&lt;br /&gt;
|&#039;&#039;&#039;self&#039;&#039;&#039; (parent mvc object)&lt;br /&gt;
|-&lt;br /&gt;
|worker.mvc&lt;br /&gt;
|special methods run by the mvc dispatch function&lt;br /&gt;
|If the &#039;&#039;&#039;modname&#039;&#039;&#039;-controller.lua module does not initalize a .mvc table, an empty one is created&lt;br /&gt;
|&#039;&#039;&#039;self.mvc&#039;&#039;&#039; (parent mvc object&#039;s mvc table)&lt;br /&gt;
|-&lt;br /&gt;
|model&lt;br /&gt;
|the &amp;quot;model&amp;quot; methods&lt;br /&gt;
|if &#039;&#039;&#039;modname&#039;&#039;&#039; is given, then &#039;&#039;&#039;&#039;&#039;modname&#039;&#039;&#039;-model.lua&#039;&#039; module is loaded into this table.  Otherwise, an empty table is returned.&lt;br /&gt;
|&#039;&#039;&#039;worker&#039;&#039;&#039; (this mvc object&#039;s worker table)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The returned table  has a .__index method that points to &#039;&#039;&#039;worker&#039;&#039;&#039;, so this table can&lt;br /&gt;
inherit values from the parent table.&lt;br /&gt;
&lt;br /&gt;
If the &#039;&#039;&#039;&#039;&#039;modname&#039;&#039;&#039;-controller.lua&#039;&#039; contains a .mvc.on_load function, the function is run before &#039;&#039;new&#039;&#039; returns.&lt;br /&gt;
&lt;br /&gt;
The .__index metamethods mean that this code will set up inheritance as shown in the diagram:&lt;br /&gt;
&lt;br /&gt;
  require(&amp;quot;mvc&amp;quot;)&lt;br /&gt;
  MVC=mvc:new()&lt;br /&gt;
    APP=MVC:new()&lt;br /&gt;
     controller=APP:new()&lt;br /&gt;
       subcontroller=controller:new()&lt;br /&gt;
&lt;br /&gt;
If you try to run &#039;&#039;&#039;subcontroller.model.somefunction()&#039;&#039;&#039;, and it does not exist, the inheritance will look for somefunction() in ...&lt;br /&gt;
&lt;br /&gt;
# subcontroller.worker&lt;br /&gt;
# controller&lt;br /&gt;
# controller.worker&lt;br /&gt;
# APP&lt;br /&gt;
# APP.worker&lt;br /&gt;
# MVC&lt;br /&gt;
# MVC.worker&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This allows, for instance, the application to set a default method that is available to all child controllers.  The reason the model looks to its parent worker table first is that controller methods are usually in the worker table, and models do not normally inherit from each other.&lt;br /&gt;
&lt;br /&gt;
The calling code should be sure to call the &#039;&#039;destroy&#039;&#039; function when done with this object.&lt;br /&gt;
&lt;br /&gt;
=== destroy ( self ) ===&lt;br /&gt;
&lt;br /&gt;
Calls the &#039;&#039;mvc.on_unload&#039;&#039; function, if it exists, to close any resources opened by the object.&lt;br /&gt;
&lt;br /&gt;
=== dispatch ( self, prefix, controller, action, clientdata ) ===&lt;br /&gt;
&lt;br /&gt;
The gateway for executing controller actions in a protected xpcall.&lt;br /&gt;
&lt;br /&gt;
# If no controller specified, use default prefix/controller&lt;br /&gt;
# Creates a &#039;&#039;&#039;self:new ( prefix .. controller)&#039;&#039;&#039; mvc object&lt;br /&gt;
# If no action specified, use controller default_action&lt;br /&gt;
# runs any existing &#039;&#039;worker.mvc.pre_exec&#039;&#039; function&lt;br /&gt;
# runs the &#039;&#039;worker.&#039;&#039;&#039;action&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
# runs any existing &#039;&#039;worker.mvc.post_exec&#039;&#039; function&lt;br /&gt;
# gets the view function from &#039;&#039;view_resolver&#039;&#039;&lt;br /&gt;
# executes the view with the results of the &#039;&#039;worker.&#039;&#039;&#039;action&#039;&#039;&#039;&#039;&#039; &lt;br /&gt;
# and calls &#039;&#039;destroy&#039;&#039; to destroy the mvc object&lt;br /&gt;
&lt;br /&gt;
If an error occurs, an exception_handler function is run.  If possible, the exception handler of the new mvc object is run, otherwise &#039;&#039;self::exception_handler&#039;&#039; function handles the error.  If an exception occurs after creating the new mvc object, &#039;&#039;mvc.on_unload&#039;&#039; is guaranteed to run, but &#039;&#039;mvc.post_exec&#039;&#039; is not.&lt;br /&gt;
&lt;br /&gt;
=== soft_require ( self, modname ) ===&lt;br /&gt;
&lt;br /&gt;
Looks for &#039;&#039;&#039;&#039;&#039;modname&#039;&#039;&#039;.lua&#039;&#039; in &#039;&#039;self.conf.appdir&#039;&#039; and returns the results of a &#039;&#039;require()&#039;&#039;  If the &#039;&#039;&#039;modname&#039;&#039;&#039; does not exist, returns nil.&lt;br /&gt;
&lt;br /&gt;
This function allows modules to be loaded without generating an exception if they do not exist.&lt;br /&gt;
&lt;br /&gt;
=== read_config ( self, modname ) ===&lt;br /&gt;
&lt;br /&gt;
Looks in various places for a &#039;&#039;&#039;&#039;&#039;modname&#039;&#039;&#039;.conf&#039;&#039; file and parses its contents into the &#039;&#039;&#039;self.conf&#039;&#039;&#039; table.&lt;br /&gt;
&lt;br /&gt;
=== parse_path_info ( string ) ===&lt;br /&gt;
&lt;br /&gt;
Returns 3 strings: a prefix, controller, and action.  Given a string in the format of a URI or pathspec, returns the &#039;&#039;basename&#039;&#039; as the action, the last component of the &#039;&#039;dirname&#039;&#039; as the controller, and the&lt;br /&gt;
rest as the prefix.   Missing components are returned as empty strings.&lt;br /&gt;
&lt;br /&gt;
=== find_view ( appdir, prefix, controller, action, viewtype ) ===&lt;br /&gt;
&lt;br /&gt;
Returns a string with the view filename for this combination of prefix/controller/action/viewtype or nil if no view file exists.&lt;br /&gt;
&lt;br /&gt;
=== create_helper_library ( self ) ===&lt;br /&gt;
&lt;br /&gt;
Returns a table of function pointers to be passed to each view.&lt;br /&gt;
&lt;br /&gt;
=== auto_view (viewtable, viewlibrary, pageinfo, session) ===&lt;br /&gt;
&lt;br /&gt;
This functions is used as the view of last resort. If no view file is found, this function is called to display the CFE resulting from the invoked action. The following &#039;viewtype&#039;s are supported:&lt;br /&gt;
&lt;br /&gt;
* html&lt;br /&gt;
* json&lt;br /&gt;
* stream&lt;br /&gt;
* serialized&lt;br /&gt;
&lt;br /&gt;
=== view_resolver ( self ) ===&lt;br /&gt;
&lt;br /&gt;
Returns a function pointer to display the view, a table of functions made available to the view function, a table containing values of interest to the view, and a table containing the session data. The last three return values are designed to be the last three parameters to the view function pointer.&lt;br /&gt;
&lt;br /&gt;
=== soft_traceback ( self, message ) ===&lt;br /&gt;
&lt;br /&gt;
If called with no arguments, returns a &#039;&#039;debug.traceback&#039;&#039;, otherwise returns &amp;quot;message&amp;quot;.   &lt;br /&gt;
&lt;br /&gt;
=== exception_handler ( self, message ) ===&lt;br /&gt;
&lt;br /&gt;
Prints an error message and then re-asserts the exception.  Called if the xpcall in &#039;&#039;dispatch&#039;&#039; has an error.  &lt;br /&gt;
This is the exception_handler of last resort.  The application should provide&lt;br /&gt;
a more robust exception handler.&lt;br /&gt;
&lt;br /&gt;
=== cfe ( table ) ===&lt;br /&gt;
&lt;br /&gt;
Returns a table with &#039;&#039;value&#039;&#039;, &#039;&#039;type&#039;&#039;, and &#039;&#039;label&#039;&#039; values.  If an input table is given in the call, those key/value pairs are added as well.&lt;br /&gt;
Guarantees the view will not get a &amp;quot;nil&amp;quot; on value, type, or label.&lt;br /&gt;
This function is added to the global (_G) environment so it is available to the entire application.&lt;br /&gt;
&lt;br /&gt;
=== logevent ( message ) ===&lt;br /&gt;
&lt;br /&gt;
Logs the message to syslog.&lt;br /&gt;
&lt;br /&gt;
=== handle_clientdata ( form, clientdata ) ===&lt;br /&gt;
&lt;br /&gt;
This is a helper function for controllers to implement forms. It parses the form CFE and applies any changes submitted by the user in clientdata.&lt;br /&gt;
&lt;br /&gt;
=== handle_form ( self, getFunction, setFunction, clientdata, option, label, descr ) ===&lt;br /&gt;
This is a helper function for controllers to implement forms. It calls the getFunction to get the form CFE. If the form is submitted, it will call handle_clientdata and the setFunction to submit the form. The form CFE is returned.&lt;br /&gt;
&lt;br /&gt;
[[Category:ACF]] [[Category:Lua]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=ACF_packages&amp;diff=12468</id>
		<title>ACF packages</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=ACF_packages&amp;diff=12468"/>
		<updated>2016-03-07T12:30:18Z</updated>

		<summary type="html">&lt;p&gt;Fab: Reverted edits by RuthHughes (talk) to last revision by Ncopa&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
== Networking  ==&lt;br /&gt;
&lt;br /&gt;
Networking related modules. &lt;br /&gt;
&lt;br /&gt;
=== Interfaces (acf-alpine-baselayout) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Local interface management&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Create/Edit/Delete interfaces &lt;br /&gt;
*Bring up/down interfaces and restart networking&lt;br /&gt;
&lt;br /&gt;
=== Dialup/PPPoE (acf-ppp) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure Dialup/PPP/PPPoE connectivity&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Create/Edit/Delete peers &lt;br /&gt;
*Edit PAP/CHAP configuration&lt;br /&gt;
&lt;br /&gt;
=== Quality of Service (acf-iproute2-qos) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Ready for Beta test&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure Quality of Service settings on each interface&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Enable/Configure/Disable QOS on each interface &lt;br /&gt;
&lt;br /&gt;
=== IPtables (acf-iptables) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Ready for Beta test&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;iptables&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration (rules-save file) &lt;br /&gt;
*Create/Edit/Delete chains and rules&lt;br /&gt;
&lt;br /&gt;
=== Firewall (acf-shorewall) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;shorewall&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration &lt;br /&gt;
*View logfile&lt;br /&gt;
&lt;br /&gt;
=== DNS (acf-tinydns) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;tinydns&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*View current DNS configuration/information &lt;br /&gt;
*Create/Edit/Delete domain files &lt;br /&gt;
*Per user and per role permissions&lt;br /&gt;
*Multiple-instance capable&lt;br /&gt;
&lt;br /&gt;
=== DNScache (acf-dnscache) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;dnscache&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration &lt;br /&gt;
*Edit allowed clients &lt;br /&gt;
*Create/Edit/Delete DNS server entries&lt;br /&gt;
&lt;br /&gt;
=== DNSmasq (acf-dnsmasq) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;dnsmasq&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration &lt;br /&gt;
*View leases &lt;br /&gt;
*View logfile&lt;br /&gt;
&lt;br /&gt;
=== DHCP server (acf-dhcp) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;isc-dhcp&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit global settings &lt;br /&gt;
*Create/Edit/Delete subnets and hosts &lt;br /&gt;
*View leases&lt;br /&gt;
&lt;br /&gt;
=== Chrony (acf-chrony) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;chrony&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration &lt;br /&gt;
*View logfile&lt;br /&gt;
&lt;br /&gt;
=== NTPD (acf-openntpd) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure timeserver &#039;&#039;&#039;openntpd&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration &lt;br /&gt;
*View logfile&lt;br /&gt;
&lt;br /&gt;
=== IPsec (acf-ipsec-tools) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;ipsec-tools&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration &lt;br /&gt;
*Upload/View/Delete certificates &lt;br /&gt;
*View logfile&lt;br /&gt;
&lt;br /&gt;
=== OpenVPN (acf-openvpn) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Ready for Beta test&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;openvpn&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit config&lt;br /&gt;
*View connected clients&lt;br /&gt;
*Manage certificates &lt;br /&gt;
*View logfile&lt;br /&gt;
*Multiple-instance capable&lt;br /&gt;
&lt;br /&gt;
=== NHRP (acf-opennhrp) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;opennhrp&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration&lt;br /&gt;
&lt;br /&gt;
=== Zebra and BGP (acf-quagga) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;quagga&#039;&#039;&#039; zebra and bgp functionality.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*View routes &lt;br /&gt;
*Edit configuration&lt;br /&gt;
&lt;br /&gt;
=== TCPproxy (acf-tcpproxy) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;tcpproxy&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration &lt;br /&gt;
*Create/Edit/Delete STMP Proxy entries and files&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Applications  ==&lt;br /&gt;
&lt;br /&gt;
Application related modules &lt;br /&gt;
&lt;br /&gt;
=== SSH (acf-openssh) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;openssh&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*View connections &lt;br /&gt;
*Edit configuration &lt;br /&gt;
*Edit authorized keys&lt;br /&gt;
&lt;br /&gt;
=== Kerberos (acf-heimdal) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Ready for Beta test&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;heimdal&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Obtain/View/Destroy kerberos tickets &lt;br /&gt;
*Edit configuration&lt;br /&gt;
&lt;br /&gt;
=== Samba (acf-samba) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;samba&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration &lt;br /&gt;
*Create/Edit/Delete shares &lt;br /&gt;
*Join domain&lt;br /&gt;
&lt;br /&gt;
=== Postgresql (acf-postgresql) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;postgresql&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Setup postgresql &lt;br /&gt;
*View logfile&lt;br /&gt;
&lt;br /&gt;
=== Web Proxy (acf-squid) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;squid&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration &lt;br /&gt;
*Edit user list &lt;br /&gt;
*Edit associated files&lt;br /&gt;
&lt;br /&gt;
=== Content Filter (acf-dansguardian) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;dansguardian&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration&lt;br /&gt;
&lt;br /&gt;
=== Web Log application (acf-weblog) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Import &#039;&#039;&#039;squid&#039;&#039;&#039; and &#039;&#039;&#039;dansguardian&#039;&#039;&#039; logs into a database for auditing.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Create postgres database&lt;br /&gt;
*Manage logfile sources&lt;br /&gt;
*Audit blocks and bypasses&lt;br /&gt;
*View web viewing activity&lt;br /&gt;
*View web usage statistics&lt;br /&gt;
*Query database&lt;br /&gt;
&lt;br /&gt;
=== ClamAV (acf-clamav) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Manage &#039;&#039;&#039;clamav&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration&lt;br /&gt;
*View logfile&lt;br /&gt;
&lt;br /&gt;
=== ClamSMTP (acf-clamsmtp) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Manage &#039;&#039;&#039;clamsmtp&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration&lt;br /&gt;
*View logfile&lt;br /&gt;
&lt;br /&gt;
=== Postfix (acf-postfix) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Manage &#039;&#039;&#039;postfix&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*View/flush mail queue&lt;br /&gt;
*Edit configuration&lt;br /&gt;
*View logfile&lt;br /&gt;
&lt;br /&gt;
=== Amavis (acf-amavis) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Manage &#039;&#039;&#039;amavis&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration&lt;br /&gt;
&lt;br /&gt;
=== Dovecot (acf-dovecot) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Manage &#039;&#039;&#039;dovecot&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration&lt;br /&gt;
*View logfile&lt;br /&gt;
&lt;br /&gt;
=== Gross (acf-gross) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Manage &#039;&#039;&#039;gross&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration&lt;br /&gt;
*View logfile&lt;br /&gt;
&lt;br /&gt;
=== Fetchmail (acf-fetchmail) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;fetchmail&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit global settings &lt;br /&gt;
*Create/Edit/Delete mailbox/domain entries&lt;br /&gt;
&lt;br /&gt;
=== Snort (acf-snort) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;snort&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*View alerts &lt;br /&gt;
*Edit configuration&lt;br /&gt;
&lt;br /&gt;
=== Asterisk (acf-asterisk) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;asterisk&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration&lt;br /&gt;
&lt;br /&gt;
=== Kamailio (acf-kamailio) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;kamailio&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration&lt;br /&gt;
&lt;br /&gt;
=== Freeswitch (acf-freeswitch) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;Work in progress&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;freeswitch&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration&lt;br /&gt;
&lt;br /&gt;
=== Certificate Authority (acf-openssl) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Generate / sign certificates using &#039;&#039;&#039;openssl&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration &lt;br /&gt;
*View/Create/Upload CA certificate &lt;br /&gt;
*Edit certificate defaults &lt;br /&gt;
*Generate/View/Delete/Approve requests &lt;br /&gt;
*View/Download/Renew/Revoke certificates &lt;br /&gt;
*Generate and download CRLs&lt;br /&gt;
&lt;br /&gt;
=== Gnats ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;Obsolete&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;gnats&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration &lt;br /&gt;
*Report a bug &lt;br /&gt;
*Query problem reports&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
Storage related modules &lt;br /&gt;
&lt;br /&gt;
=== MDADM (acf-mdadm) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;Work in progress&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Raid storage.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Show status&lt;br /&gt;
&lt;br /&gt;
=== LVM (acf-lvm) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;Work in progress&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Show status&lt;br /&gt;
&lt;br /&gt;
== System  ==&lt;br /&gt;
&lt;br /&gt;
System/Other related modules &lt;br /&gt;
&lt;br /&gt;
=== General health (acf-alpine-baselayout) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Show status on your running system.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Show system status &lt;br /&gt;
*Show storage status &lt;br /&gt;
*Show network status &lt;br /&gt;
*Graph network activity &lt;br /&gt;
*Show modules status &lt;br /&gt;
*Show proc status&lt;br /&gt;
&lt;br /&gt;
=== User Management (acf-core) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| ACF User management&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit self &lt;br /&gt;
*Create/Edit/Delete ACF users &lt;br /&gt;
*View roles for user&lt;br /&gt;
&lt;br /&gt;
=== Roles Management (acf-core) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| ACF Roles management&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*View own permissions &lt;br /&gt;
*Create/Edit/Delete ACF roles &lt;br /&gt;
*View all possible permissions&lt;br /&gt;
&lt;br /&gt;
=== Packages (acf-apk-tools) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Manage system packages (&#039;&#039;&#039;apk-tools&#039;&#039;&#039;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*View/Delete loaded packages &lt;br /&gt;
*View/Install available packages &lt;br /&gt;
*Manage package cache&lt;br /&gt;
*Manage repositories&lt;br /&gt;
*Edit configuration&lt;br /&gt;
&lt;br /&gt;
=== Modules (acf-alpine-baselayout) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Manage system modules&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*View loaded modules &lt;br /&gt;
*Edit/Reload modules file&lt;br /&gt;
&lt;br /&gt;
=== Init (acf-alpine-baselayout) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Manage system startup with openrc&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*View/Edit service runlevels&lt;br /&gt;
&lt;br /&gt;
=== Cron (acf-alpine-baselayout) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Manage periodic jobs (&#039;&#039;&#039;cron&#039;&#039;&#039;)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration &lt;br /&gt;
*Create/Edit/Delete periodic jobs&lt;br /&gt;
&lt;br /&gt;
=== System logging (acf-alpine-baselayout) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Configure &#039;&#039;&#039;syslog&#039;&#039;&#039;.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Edit configuration&lt;br /&gt;
&lt;br /&gt;
=== Logfiles (acf-alpine-baselayout) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Manage logfiles.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*View/Tail/Download/Delete logfiles&lt;br /&gt;
&lt;br /&gt;
=== Skins (acf-core) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Switch ACF skin&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Select ACF skin&lt;br /&gt;
&lt;br /&gt;
=== Local Backups (acf-alpine-conf) ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| Released&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Saves your settings to floppy/usb/other media (&#039;&#039;&#039;lbu&#039;&#039;&#039;).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*Show unsaved changes &lt;br /&gt;
*Edit configuration &lt;br /&gt;
*Commit/Save changes to media &lt;br /&gt;
*Select backup archives &lt;br /&gt;
*Generate and download overlay&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DevTools  ==&lt;br /&gt;
&lt;br /&gt;
DevTools is a (set of) ACF(s) that could come in handy when developing ACF. &lt;br /&gt;
&lt;br /&gt;
=== SVN status  ===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Status:&#039;&#039;&#039; &lt;br /&gt;
| &#039;&#039;Obsolete&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Summary:&#039;&#039;&#039; &lt;br /&gt;
| Different information/functions related to the SVN-tree&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
*svn status (Shows whats changed since last &#039;svn update&#039;) &lt;br /&gt;
*svn diff (Shows difference on your computer and on svn-server) &lt;br /&gt;
*svn log (Shows the changelog 1 week back in time) &lt;br /&gt;
*svn update (Fetch all available updates)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ToDo  ==&lt;br /&gt;
&lt;br /&gt;
=== Diagnostic  ===&lt;br /&gt;
&lt;br /&gt;
Stats/Resource use/maybe graphs-rrd. Ability to run &#039;&#039;ping&#039;&#039; command.&lt;br /&gt;
&lt;br /&gt;
[[Category:ACF]]&lt;/div&gt;</summary>
		<author><name>Fab</name></author>
	</entry>
</feed>