<?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=Fcolista</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=Fcolista"/>
	<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/wiki/Special:Contributions/Fcolista"/>
	<updated>2026-04-30T15:33:54Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.40.0</generator>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Setting_up_GVM_21.4&amp;diff=21618</id>
		<title>Setting up GVM 21.4</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Setting_up_GVM_21.4&amp;diff=21618"/>
		<updated>2022-02-25T09:55:32Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: Created page with &amp;quot;= Greenbone Vulnerability Management (GVM) 21.4 = = Introduction =  Greenbone Vulnerability Management is available in community repository.  The version 21.4, at the moment o...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Greenbone Vulnerability Management (GVM) 21.4 =&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
Greenbone Vulnerability Management is available in community repository.&lt;br /&gt;
&lt;br /&gt;
The version 21.4, at the moment of the writing, is available on edge.&lt;br /&gt;
&lt;br /&gt;
This How-To will guide you to install a complete server solution for vulnerability scanning and vulnerability management solution.&lt;br /&gt;
&lt;br /&gt;
= Install =&lt;br /&gt;
[[Enable_Community_Repository|Enable the community repository]] and install the required packages:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add openvas openvas-config gvmd gvm-libs gsad ospd-openvas}}&lt;br /&gt;
&lt;br /&gt;
= Configuration = &lt;br /&gt;
&lt;br /&gt;
== PostgreSQL  ==&lt;br /&gt;
&lt;br /&gt;
OpenVAS relies on PostgreSQL, that now is mandatory.&lt;br /&gt;
&lt;br /&gt;
Start PostgreSQL and add it to default runlevel:&lt;br /&gt;
 rc-service postgresql setup&lt;br /&gt;
 rc-service postgresql start&lt;br /&gt;
 rc-update add postgresql&lt;br /&gt;
&lt;br /&gt;
Create and configure the gvm database:&lt;br /&gt;
&lt;br /&gt;
 su postgres&lt;br /&gt;
 createuser -DRS gvm&lt;br /&gt;
 createdb -O gvm gvmd&lt;br /&gt;
 psql gvmd&lt;br /&gt;
 create role dba with superuser noinherit;&lt;br /&gt;
 grant dba to gvm;&lt;br /&gt;
 create extension if not exists &amp;quot;uuid-ossp&amp;quot;;&lt;br /&gt;
 create extension &amp;quot;pgcrypto&amp;quot;;&lt;br /&gt;
 exit&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
== GVMd  ==&lt;br /&gt;
&lt;br /&gt;
GVMd run as gvm user.&lt;br /&gt;
&lt;br /&gt;
Generate the certificate.&lt;br /&gt;
&lt;br /&gt;
The certificate infrastructure enables GVMd to communicate in a secure manner and is used for authentication and authorization before establishing TLS connections between the daemons.&lt;br /&gt;
&lt;br /&gt;
You can setup the certificate automatically with:&lt;br /&gt;
 su gvm&lt;br /&gt;
 gvm-manage-certs -a&lt;br /&gt;
 exit&lt;br /&gt;
Create credentials used to interact with gvmd:&lt;br /&gt;
&lt;br /&gt;
 rc-service gvmd start&lt;br /&gt;
 su gvm&lt;br /&gt;
 gvmd --create-user=admin --password=admin&lt;br /&gt;
&lt;br /&gt;
Certain resources that were previously part of the gvmd source code are now shipped via the feed. An example is the config &amp;quot;Full and Fast&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
gvmd will only create these resources if a &amp;quot;Feed Import Owner&amp;quot; is configured:&lt;br /&gt;
&lt;br /&gt;
 gvmd --modify-setting 78eceaec-3385-11ea-b237-28d24461215b --value &amp;lt;uuid_of_user&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The UUIDs of all created users can be found using&lt;br /&gt;
&lt;br /&gt;
 gvmd --get-users --verbose&lt;br /&gt;
&lt;br /&gt;
Make sure that gvmd responds with &amp;quot;USER CREATED&amp;quot;. If you run through these steps fast, and gvm is in the middle of something, it may not create the user until it is done with what it is computing.&lt;br /&gt;
&lt;br /&gt;
== Update GVM definitions ==&lt;br /&gt;
&lt;br /&gt;
Download the GVM definitions and start GVMd, as gvm user.&lt;br /&gt;
Be patient...it will take a while: &lt;br /&gt;
&lt;br /&gt;
  su gvm&lt;br /&gt;
  greenbone-feed-sync --type GVMD_DATA&lt;br /&gt;
  greenbone-feed-sync --type SCAP&lt;br /&gt;
  greenbone-feed-sync --type CERT&lt;br /&gt;
  exit&lt;br /&gt;
&lt;br /&gt;
This three feeds needs to be scheduled via cron.&lt;br /&gt;
&lt;br /&gt;
Add gvmd to start on boot:&lt;br /&gt;
&lt;br /&gt;
 rc-update add gvmd&lt;br /&gt;
&lt;br /&gt;
Download NVT definitions:&lt;br /&gt;
&lt;br /&gt;
 su gvm&lt;br /&gt;
 greenbone-nvt-sync&lt;br /&gt;
&lt;br /&gt;
== Greenbone Security Assistant (GSAD) ==&lt;br /&gt;
&lt;br /&gt;
Configure Greenbone Security Assistant (GSAD) to listen to other interfaces rather than localhost only, so it is reachable from other hosts.&lt;br /&gt;
&lt;br /&gt;
Create &#039;&#039;&#039;/etc/conf.d/gsad:&#039;&#039;&#039; with:&lt;br /&gt;
 echo &#039;GSAD_LISTEN_ADDRESS=&amp;quot;0.0.0.0&amp;quot;&#039; &amp;gt; /etc/conf.d/gsad&lt;br /&gt;
&lt;br /&gt;
Start GSAD and add it to default runlevel:&lt;br /&gt;
 rc-service gsad start&lt;br /&gt;
 rc-update add gsad&lt;br /&gt;
&lt;br /&gt;
Open the browser at the IP address where GSAD is running, on http port 9392, and login with the credentials previously created.&lt;br /&gt;
&lt;br /&gt;
Happy vulnerability assessment!&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting=&lt;br /&gt;
&lt;br /&gt;
==greenbone-nvt-sync can&#039;t create /run/ospd/feed-update.lock==&lt;br /&gt;
If during the first greenbone-nvt-sync, or greenbone-feed-sync, you get an error about can&#039;t create /run/ospd/feed-update.lock permission denied you might&#039;ve run ospd / openvas too early. In /var/log/gvm/openvas.log there will be a loop where ospd is looking for the feed files which don&#039;t exist. Kill the process, then manually remove the lock file. However, if it looks like it is actively syncing the feed (iftop), then let it complete the sync first.&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:Monitoring]]&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Ddclient&amp;diff=18606</id>
		<title>Ddclient</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Ddclient&amp;diff=18606"/>
		<updated>2021-01-25T15:36:56Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TOC right}}&lt;br /&gt;
&lt;br /&gt;
== How to download and install the latest version of ddclient ==&lt;br /&gt;
&lt;br /&gt;
DDclient is a perl script to update accounts for Dynamic DNS Service Provider. [https://sourceforge.net/projects/ddclient/]&lt;br /&gt;
&lt;br /&gt;
== Install ==&lt;br /&gt;
&lt;br /&gt;
ddclient is available in testing/edge repository.&lt;br /&gt;
&lt;br /&gt;
In order to use it, you need first to enable that repository by adding to /etc/apk/repositories:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;# echo http://dl-cdn.alpinelinux.org/alpine/edge/testing&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;# apk update&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;# apk add ddclient&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
A sample configuration file is installed by default in &amp;lt;code&amp;gt;/etc/ddclient/ddclient.conf.sample.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Rename it as &amp;lt;code&amp;gt;/etc/ddclient/ddclient.conf&amp;lt;/code&amp;gt; and modify it according to your needs.&lt;br /&gt;
&lt;br /&gt;
Then, start ddclient as usual:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;# rc-service ddclient start&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you want/need, configure the service to start automatically on boot:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;# rc-update add ddclient default&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Networking]]&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Setting_up_GVM11&amp;diff=17656</id>
		<title>Setting up GVM11</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Setting_up_GVM11&amp;diff=17656"/>
		<updated>2020-05-23T09:08:55Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Greenbone Vulnerability Management (GVM) 11 =&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
OpenVAS with version 11 has been renamed in Greenbone Vulnerability Management and it is available in community repository.&lt;br /&gt;
&lt;br /&gt;
This How-To will guide you to install a complete server solution for vulnerability scanning and vulnerability management solution.&lt;br /&gt;
&lt;br /&gt;
= Install =&lt;br /&gt;
[[Enable_Community_Repository|Enable the community repository]] and install the required packages:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add openvas openvas-config gvmd gvm-libs greenbone-security-assistant ospd-openvas}}&lt;br /&gt;
&lt;br /&gt;
= Configuration = &lt;br /&gt;
&lt;br /&gt;
== PostgreSQL  ==&lt;br /&gt;
&lt;br /&gt;
OpenVAS relies on PostgreSQL, that now is mandatory.&lt;br /&gt;
&lt;br /&gt;
Start PostgreSQL and add it to default runlevel:&lt;br /&gt;
 rc-service postgresql setup&lt;br /&gt;
 rc-service postgresql start&lt;br /&gt;
 rc-update add postgresql&lt;br /&gt;
&lt;br /&gt;
Create and configure the gvm database:&lt;br /&gt;
&lt;br /&gt;
 su - postgres&lt;br /&gt;
 createuser -DRS gvm&lt;br /&gt;
 createdb -O gvm gvmd&lt;br /&gt;
 psql gvmd&lt;br /&gt;
 create role dba with superuser noinherit;&lt;br /&gt;
 grant dba to gvm;&lt;br /&gt;
 create extension if not exists &amp;quot;uuid-ossp&amp;quot;;&lt;br /&gt;
 create extension &amp;quot;pgcrypto&amp;quot;;&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
== GVMd  ==&lt;br /&gt;
&lt;br /&gt;
GVMd run as gvm user. Generate the certificate.&lt;br /&gt;
The certificate infrastructure enables GVMd to communicate in a secure manner and is used for authentication and authorization before establishing TLS connections between the daemons.&lt;br /&gt;
You can setup the certificate automatically with:&lt;br /&gt;
 su - gvm&lt;br /&gt;
 gvm-manage-certs -a&lt;br /&gt;
&lt;br /&gt;
Create credentials used to interact with gvmd:&lt;br /&gt;
&lt;br /&gt;
 gvmd --create-user=admin --password=admin&lt;br /&gt;
&lt;br /&gt;
== Update GVM definitions ==&lt;br /&gt;
&lt;br /&gt;
Download the GVM definitions and start GVMd, as root user.&lt;br /&gt;
Be patient...it will take a while: &lt;br /&gt;
&lt;br /&gt;
 greenbone-scapdata-sync&lt;br /&gt;
 greenbone-certdata-sync&lt;br /&gt;
 rc-service gvmd start&lt;br /&gt;
&lt;br /&gt;
Add gvmd to start on boot:&lt;br /&gt;
&lt;br /&gt;
 rc-update add gvmd&lt;br /&gt;
&lt;br /&gt;
NVT definitions can be downloaded as gvm user:&lt;br /&gt;
&lt;br /&gt;
 su - gvm&lt;br /&gt;
 greenbone-nvt-sync&lt;br /&gt;
&lt;br /&gt;
== Greenbone Security Assistant (GSAD) ==&lt;br /&gt;
&lt;br /&gt;
Configure Greenbone Security Assistant (GSAD) to listen to other interfaces rather than localhost only, so it is reachable from other hosts.&lt;br /&gt;
&lt;br /&gt;
Modify &#039;&#039;&#039;/etc/conf.d/gsad:&#039;&#039;&#039; with:&lt;br /&gt;
 GSAD_LISTEN=&amp;quot;--listen=0.0.0.0&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Start GSAD and add it to default runlevel:&lt;br /&gt;
 rc-service gsad start&lt;br /&gt;
 rc-update add gsad&lt;br /&gt;
&lt;br /&gt;
Open the browser at the IP address where GSAD is running, on http port 9392, and login with the credentials previously created.&lt;br /&gt;
&lt;br /&gt;
Happy vulnerability assestment!&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:Monitoring]]&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Setting_up_GVM11&amp;diff=17578</id>
		<title>Setting up GVM11</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Setting_up_GVM11&amp;diff=17578"/>
		<updated>2020-05-15T20:32:43Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Greenbone Vulnerability Management (GVM) 11 =&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
OpenVAS with version 11 has been renamed in Greenbone Vulnerability Management and it is available in community repository.&lt;br /&gt;
&lt;br /&gt;
This How-To will guide you to install a complete server solution for vulnerability scanning and vulnerability management solution.&lt;br /&gt;
&lt;br /&gt;
= Install =&lt;br /&gt;
[[Enable_Community_Repository|Enable the community repository]] and install the required packages:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add openvas openvas-config gvmd gvm-libs greenbone-security-assistant ospd-openvas}}&lt;br /&gt;
&lt;br /&gt;
= Configuration = &lt;br /&gt;
&lt;br /&gt;
== PostgreSQL  ==&lt;br /&gt;
&lt;br /&gt;
OpenVAS relies on PostgreSQL, that now is mandatory.&lt;br /&gt;
&lt;br /&gt;
Start PostgreSQL and add it to default runlevel:&lt;br /&gt;
 rc-service postgresql setup&lt;br /&gt;
 rc-service postgresql start&lt;br /&gt;
 rc-update add postgresql&lt;br /&gt;
&lt;br /&gt;
Create and configure the gvm database:&lt;br /&gt;
&lt;br /&gt;
 su - postgres&lt;br /&gt;
 createuser -DRS gvm&lt;br /&gt;
 createdb -O gvm gvmd&lt;br /&gt;
 psql gvmd&lt;br /&gt;
 create role dba with superuser noinherit;&lt;br /&gt;
 grant dba to gvm;&lt;br /&gt;
 create extension if not exists &amp;quot;uuid-ossp&amp;quot;;&lt;br /&gt;
 create extension &amp;quot;pgcrypto&amp;quot;;&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
== GVMd  ==&lt;br /&gt;
&lt;br /&gt;
GVMd run as gvm user. Generate the certificate.&lt;br /&gt;
The certificate infrastructure enables GVMd to communicate in a secure manner and is used for authentication and authorization before establishing TLS connections between the daemons.&lt;br /&gt;
You can setup the certificate automatically with:&lt;br /&gt;
 su - gvm&lt;br /&gt;
 gvm-manage-certs -a&lt;br /&gt;
&lt;br /&gt;
Create credentials used to interact with gvmd:&lt;br /&gt;
&lt;br /&gt;
 gvmd --create-user=admin --password=admin&lt;br /&gt;
&lt;br /&gt;
== Update GVM definitions ==&lt;br /&gt;
&lt;br /&gt;
Download the GVM definitions and start GVMd, as root user.&lt;br /&gt;
Be patient...it will take a while: &lt;br /&gt;
&lt;br /&gt;
 greenbone-scapdata-sync&lt;br /&gt;
 greenbone-certdata-sync&lt;br /&gt;
 rc-service gvmd start&lt;br /&gt;
&lt;br /&gt;
Add gvmd to start on boot:&lt;br /&gt;
&lt;br /&gt;
 rc-update add gvmd&lt;br /&gt;
&lt;br /&gt;
NVT definitions can be downloaded as gvm user:&lt;br /&gt;
&lt;br /&gt;
 su - gvm&lt;br /&gt;
 greenbone-nvt-sync&lt;br /&gt;
&lt;br /&gt;
== Greenbone Security Assistant (GSAD) ==&lt;br /&gt;
&lt;br /&gt;
Configure Greenbone Security Assistant (GSAD) to listen to other interfaces rather than localhost only, so it is reachable from other hosts.&lt;br /&gt;
&lt;br /&gt;
Modify &#039;&#039;&#039;/etc/conf.d/gsad:&#039;&#039;&#039; with:&lt;br /&gt;
 GSAD_LISTEN=&amp;quot;--listen=0.0.0.0&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Start GSAD and add it to default runlevel:&lt;br /&gt;
 rc-service gsad start&lt;br /&gt;
 rc-update add gsad&lt;br /&gt;
&lt;br /&gt;
Open the browser at the IP address where GSAD is running, on port 9392, and login with the credentials previously created.&lt;br /&gt;
&lt;br /&gt;
Happy vulnerability assestment!&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:Monitoring]]&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Setting_up_GVM11&amp;diff=17572</id>
		<title>Setting up GVM11</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Setting_up_GVM11&amp;diff=17572"/>
		<updated>2020-05-15T16:40:24Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: Created page with &amp;quot;= Greenbone Vulnerability Management (GVM) 11 = = Introduction =  OpenVAS with version 11 has been renamed in Greenbone Vulnerability Management and it is available in communi...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Greenbone Vulnerability Management (GVM) 11 =&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
OpenVAS with version 11 has been renamed in Greenbone Vulnerability Management and it is available in community repository.&lt;br /&gt;
&lt;br /&gt;
This How-To will guide you to install a complete server solution for vulnerability scanning and vulnerability management solution.&lt;br /&gt;
&lt;br /&gt;
= Install =&lt;br /&gt;
[[Enable_Community_Repository|Enable the community repository]] and install the required packages:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add openvas openvas-config gvmd gvm-libs greenbone-security-assistant ospd-openvas}}&lt;br /&gt;
&lt;br /&gt;
= Configuration = &lt;br /&gt;
&lt;br /&gt;
== PostgreSQL  ==&lt;br /&gt;
&lt;br /&gt;
OpenVAS relies on PostgreSQL, that now is mandatory.&lt;br /&gt;
&lt;br /&gt;
Start PostgreSQL and add it to default runlevel:&lt;br /&gt;
 rc-service postgresql setup&lt;br /&gt;
 rc-service postgresql start&lt;br /&gt;
 rc-update add postgresql&lt;br /&gt;
&lt;br /&gt;
Create and configure the gvm database:&lt;br /&gt;
&lt;br /&gt;
 su - postgres&lt;br /&gt;
 createuser -DRS gvm&lt;br /&gt;
 createdb -O gvm gvmd&lt;br /&gt;
 psql gvmd&lt;br /&gt;
 create role dba with superuser noinherit;&lt;br /&gt;
 grant dba to gvm;&lt;br /&gt;
 create extension if not exists &amp;quot;uuid-ossp&amp;quot;;&lt;br /&gt;
 create extension &amp;quot;pgcrypto&amp;quot;;&lt;br /&gt;
 exit&lt;br /&gt;
&lt;br /&gt;
== GVMd  ==&lt;br /&gt;
&lt;br /&gt;
GVMd run as gvm user. Generate the certificate.&lt;br /&gt;
The certificate infrastructure enables GVMd to communicate in a secure manner and is used for authentication and authorization before establishing TLS connections between the daemons.&lt;br /&gt;
You can setup the certificate automatically with:&lt;br /&gt;
 su - gvm&lt;br /&gt;
 gvm-manage-certs -a&lt;br /&gt;
&lt;br /&gt;
Create credentials used to interact with gvmd:&lt;br /&gt;
&lt;br /&gt;
 gvmd --create-user=admin --password=admin&lt;br /&gt;
&lt;br /&gt;
== Update GVM definitions ==&lt;br /&gt;
&lt;br /&gt;
Download the GVM definitions and start GVMd, as root user.&lt;br /&gt;
Be patient...it will take a while: &lt;br /&gt;
&lt;br /&gt;
 greenbone-scapdata-sync&lt;br /&gt;
 greenbone-certdata-sync&lt;br /&gt;
 rc-service gvmd start&lt;br /&gt;
&lt;br /&gt;
Add gvmd to start on boot:&lt;br /&gt;
&lt;br /&gt;
 rc-update add gvmd&lt;br /&gt;
&lt;br /&gt;
NVT definitions can be downloaded as gvm user:&lt;br /&gt;
&lt;br /&gt;
 su - gvm&lt;br /&gt;
 greenbone-nvt-sync&lt;br /&gt;
&lt;br /&gt;
== Greenbone Security Assistant (GSAD) ==&lt;br /&gt;
&lt;br /&gt;
Configure Greenbone Security Assistant (GSAD) to listen to other interfaces rather than localhost only, so it is reachable from other hosts.&lt;br /&gt;
&lt;br /&gt;
Modify &#039;&#039;&#039;/etc/conf.d/gsad:&#039;&#039;&#039; with:&lt;br /&gt;
 GSAD_LISTEN=&amp;quot;--listen=0.0.0.0&amp;quot; &lt;br /&gt;
&lt;br /&gt;
Or, in one shot:&lt;br /&gt;
 sed -i -e &amp;quot;s/127\.0\.0\.1/0\.0\.0\.0/g&amp;quot; /etc/conf.d/gsad&lt;br /&gt;
&lt;br /&gt;
Start GSAD and add it to default runlevel:&lt;br /&gt;
 rc-service gsad start&lt;br /&gt;
 rc-update add gsad&lt;br /&gt;
&lt;br /&gt;
Open the browser at the IP address where GSAD is running, on port 9392, and login with the credentials previously created.&lt;br /&gt;
&lt;br /&gt;
Happy vulnerability assestment!&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:Monitoring]]&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=How_to_make_a_custom_ISO_image_with_mkimage&amp;diff=13339</id>
		<title>How to make a custom ISO image with mkimage</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=How_to_make_a_custom_ISO_image_with_mkimage&amp;diff=13339"/>
		<updated>2017-05-19T09:15:08Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document explains how to build a custom ISO image using the new mkimage scripts located in aports directory.&lt;br /&gt;
&lt;br /&gt;
== Prerequisite ==&lt;br /&gt;
&lt;br /&gt;
First make sure we have the needed tools&lt;br /&gt;
{{Cmd|apk add build-base apk-tools alpine-conf busybox fakeroot syslinux xorriso}}&lt;br /&gt;
For efi you shoud add&lt;br /&gt;
{{Cmd|mtools dosfstools grub-efi}}&lt;br /&gt;
&lt;br /&gt;
Create a user (e.g. build) and add it to abuild group:&lt;br /&gt;
{{Cmd|useradd build -G abuild}}&lt;br /&gt;
&lt;br /&gt;
Then create signing keys (-i installs them in /etc/apk/keys which is required for later)&lt;br /&gt;
{{Cmd|abuild-keygen -i -a}}&lt;br /&gt;
&lt;br /&gt;
{{Tip| Make sure your public keys are placed in /etc/apk/keys/ (example: build-xxxxxxxx.rsa.pub):&lt;br /&gt;
{{Cmd|ls /etc/apk/keys/}}&lt;br /&gt;
&lt;br /&gt;
Clone (or update) the [http://git.alpinelinux.org/cgit/aports/ git repository].&lt;br /&gt;
{{Cmd|git clone git://git.alpinelinux.org/aports}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make sure the apk index is up to date (so apk finds the packages):&lt;br /&gt;
{{Cmd|apk update}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
The mkimg scripts are shipped with pre-configured profiles.&lt;br /&gt;
&lt;br /&gt;
The format is &#039;&#039;&#039;mkimg.$PROFILENAME.sh&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So, in order to have a custom ISO, you should create your own &#039;&#039;&#039;mkimg.$PROFILENAME.sh&#039;&#039;&#039; script.&lt;br /&gt;
&lt;br /&gt;
This is an example used to have ZFS module, overlayfs (which allows to have /lib/modules in r/w), a serial console output and some other useful apks to build a simple NAS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export PROFILENAME=nas&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cat &amp;lt;&amp;lt; EOF &amp;gt; ~/aports/scripts/mkimg.$PROFILENAME.sh}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
profile_$PROFILENAME() {&lt;br /&gt;
	profile_standard&lt;br /&gt;
	kernel_flavors=&amp;quot;&amp;quot;&lt;br /&gt;
	kernel_cmdline=&amp;quot;unionfs_size=512M console=tty0 console=ttyS0,115200&amp;quot;&lt;br /&gt;
	syslinux_serial=&amp;quot;0 115200&amp;quot;&lt;br /&gt;
	kernel_addons=&amp;quot;zfs spl&amp;quot;&lt;br /&gt;
	apks=&amp;quot;$apks iscsi-scst zfs-scripts zfs zfs-utils-py&lt;br /&gt;
		cciss_vol_status lvm2 mdadm mkinitfs mtools nfs-utils&lt;br /&gt;
		parted rsync sfdisk syslinux unrar util-linux xfsprogs&lt;br /&gt;
		dosfstools ntfs-3g&lt;br /&gt;
		&amp;quot;&lt;br /&gt;
	local _k _a&lt;br /&gt;
	for _k in $kernel_flavors; do&lt;br /&gt;
		apks=&amp;quot;$apks linux-$_k&amp;quot;&lt;br /&gt;
		for _a in $kernel_addons; do&lt;br /&gt;
			apks=&amp;quot;$apks $_a-$_k&amp;quot;&lt;br /&gt;
		done&lt;br /&gt;
	done&lt;br /&gt;
	apks=&amp;quot;$apks linux-firmware&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Set the script as executable:&lt;br /&gt;
{{Cmd|chmod +x mkimg.$PROFILENAME.sh}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Create the ISO ==&lt;br /&gt;
&lt;br /&gt;
Create a iso directory in your home dir:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|mkdir -p ~/iso}}&lt;br /&gt;
&lt;br /&gt;
Then create the actual ISO.&lt;br /&gt;
In this example we will use the edge version x86_64:&lt;br /&gt;
{{Cmd|sh mkimage.sh --tag edge \&lt;br /&gt;
	--outdir ~/iso \&lt;br /&gt;
	--arch x86_64 \&lt;br /&gt;
	--repository http://dl-cdn.alpinelinux.org/alpine/edge/main \&lt;br /&gt;
	--profile $PROFILENAME&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Of course, several passages of this doc can be automated with a script, like the repository/arch/outdir settings.&lt;br /&gt;
This steps are left to you and to your imagination :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing your ISO image ==&lt;br /&gt;
&lt;br /&gt;
[[Qemu#Live_mode| Qemu]] is useful for a quick test of your created ISO image.&lt;br /&gt;
&lt;br /&gt;
[[Category:Package Manager]]&lt;br /&gt;
[[Category:ISO]]&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=How_to_make_a_custom_ISO_image_with_mkimage&amp;diff=13338</id>
		<title>How to make a custom ISO image with mkimage</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=How_to_make_a_custom_ISO_image_with_mkimage&amp;diff=13338"/>
		<updated>2017-05-19T09:09:34Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: Created page with &amp;quot;This document explains how to build a custom ISO image using the new mkimage scripts located in aports directory.  == Prerequisite ==  First make sure we have the needed tools...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document explains how to build a custom ISO image using the new mkimage scripts located in aports directory.&lt;br /&gt;
&lt;br /&gt;
== Prerequisite ==&lt;br /&gt;
&lt;br /&gt;
First make sure we have the needed tools&lt;br /&gt;
{{Cmd|apk add build-base apk-tools alpine-conf busybox fakeroot syslinux xorriso}}&lt;br /&gt;
For efi you shoud add&lt;br /&gt;
{{Cmd|mtools dosfstools grub-efi}}&lt;br /&gt;
&lt;br /&gt;
Create a user (e.g. build) and add it to abuild group:&lt;br /&gt;
{{Cmd|useradd build -G abuild}}&lt;br /&gt;
&lt;br /&gt;
Then create signing keys (-i installs them in /etc/apk/keys which is required for later)&lt;br /&gt;
{{Cmd|abuild-keygen -i -a}}&lt;br /&gt;
&lt;br /&gt;
{{Tip| Make sure your public keys are placed in /etc/apk/keys/ (example: build-xxxxxxxx.rsa.pub):&lt;br /&gt;
{{Cmd|ls /etc/apk/keys/}}&lt;br /&gt;
&lt;br /&gt;
Clone (or update) the [http://git.alpinelinux.org/cgit/aports/ git repository].&lt;br /&gt;
{{Cmd|git clone git://git.alpinelinux.org/aports}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make sure the apk index is up to date (so apk finds the packages):&lt;br /&gt;
{{Cmd|apk update}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
The mkimg scripts are shipped with pre-configured profiles.&lt;br /&gt;
&lt;br /&gt;
The format is &#039;&#039;&#039;mkimg.$PROFILENAME.sh&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
So, in order to have a custom ISO, you should create your own &#039;&#039;&#039;mkimg.$PROFILENAME.sh&#039;&#039;&#039; script.&lt;br /&gt;
&lt;br /&gt;
This is an example used to have ZFS module, unionfs (which allows to have /lib/modules in r/w), a serial console output and some other useful apks to build a simple NAS:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;export PROFILENAME=nas&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cat &amp;lt;&amp;lt; EOF &amp;gt; ~/aports/scripts/mkimg.$PROFILENAME.sh}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
profile_$PROFILENAME() {&lt;br /&gt;
	profile_standard&lt;br /&gt;
	kernel_flavors=&amp;quot;&amp;quot;&lt;br /&gt;
	kernel_cmdline=&amp;quot;unionfs_size=512M console=tty0 console=ttyS0,115200&amp;quot;&lt;br /&gt;
	syslinux_serial=&amp;quot;0 115200&amp;quot;&lt;br /&gt;
	kernel_addons=&amp;quot;zfs spl&amp;quot;&lt;br /&gt;
	apks=&amp;quot;$apks iscsi-scst zfs-scripts zfs zfs-utils-py&lt;br /&gt;
		cciss_vol_status lvm2 mdadm mkinitfs mtools nfs-utils&lt;br /&gt;
		parted rsync sfdisk syslinux unrar util-linux xfsprogs&lt;br /&gt;
		dosfstools ntfs-3g&lt;br /&gt;
		&amp;quot;&lt;br /&gt;
	local _k _a&lt;br /&gt;
	for _k in $kernel_flavors; do&lt;br /&gt;
		apks=&amp;quot;$apks linux-$_k&amp;quot;&lt;br /&gt;
		for _a in $kernel_addons; do&lt;br /&gt;
			apks=&amp;quot;$apks $_a-$_k&amp;quot;&lt;br /&gt;
		done&lt;br /&gt;
	done&lt;br /&gt;
	apks=&amp;quot;$apks linux-firmware&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Set the script as executable:&lt;br /&gt;
{{Cmd|chmod +x mkimg.$PROFILENAME.sh}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Create the ISO ==&lt;br /&gt;
&lt;br /&gt;
Create a iso directory in your home dir:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|mkdir -p ~/iso}}&lt;br /&gt;
&lt;br /&gt;
Then create the actual ISO.&lt;br /&gt;
In this example we will use the edge version x86_64:&lt;br /&gt;
{{Cmd|sh mkimage.sh --tag edge \&lt;br /&gt;
	--outdir ~/iso \&lt;br /&gt;
	--arch x86_64 \&lt;br /&gt;
	--repository http://dl-cdn.alpinelinux.org/alpine/edge/main \&lt;br /&gt;
	--profile $PROFILENAME&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Notes:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Of course, several passages of this doc can be automated with a script, like the repository/arch/outdir settings.&lt;br /&gt;
This steps are left to you and to your imagination :)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Testing your ISO image ==&lt;br /&gt;
&lt;br /&gt;
[[Qemu#Live_mode| Qemu]] is useful for a quick test of your created ISO image.&lt;br /&gt;
&lt;br /&gt;
[[Category:Package Manager]]&lt;br /&gt;
[[Category:ISO]]&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Install_Alpine_on_LXD&amp;diff=13336</id>
		<title>Install Alpine on LXD</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Install_Alpine_on_LXD&amp;diff=13336"/>
		<updated>2017-05-17T06:52:23Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: Seems that the user copy/pasted the doc from a debian-oriented distro documentation...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== LXD ==&lt;br /&gt;
&lt;br /&gt;
LXD is an easy to use daemon and client for managing LXC containers.  It is included by default in Ubuntu 16.04 and later versions.  It may become available in other distributions, such as debian.  If you are not familiar at all with LXC or LXD, start directly with LXD. For detailed instructions on how to use it, lookup Stéphane Graber&#039;s blog post series on LXD.&lt;br /&gt;
&lt;br /&gt;
With LXD you can start an Alpine Linux container in seconds, in practically any Ubuntu 16.04 (or later) system, including:&lt;br /&gt;
* A standalone system&lt;br /&gt;
* An Amazon EC2 instance&lt;br /&gt;
* An OpenStack KVM VPS&lt;br /&gt;
&lt;br /&gt;
These instructions assume you are running on an amd64 (x86_64) platform.&lt;br /&gt;
&lt;br /&gt;
== LXD configuration ==&lt;br /&gt;
Before you launch LXD containers, you must configure LXD:&lt;br /&gt;
{{Cmd|sudo lxd init}}&lt;br /&gt;
Accept all the defaults.  You can rerun this if you have no containers.&lt;br /&gt;
The ZFS storage method is recommended, because of its ability to create instant snapshots and copies of containers, but it requires additional configuration and it is not available everywhere (e.g. in a VPS host).  dir will do just fine for a demo.&lt;br /&gt;
&lt;br /&gt;
== Container creation ==&lt;br /&gt;
&lt;br /&gt;
To install Alpine Linux edge version run:&lt;br /&gt;
{{Cmd|lxc launch images:alpine/edge a1}}&lt;br /&gt;
&lt;br /&gt;
To install Alpine Linux 3.5 run:&lt;br /&gt;
{{Cmd|lxc launch images:alpine/3.5 a2}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To enter a shell in the container:&lt;br /&gt;
{{Cmd|lxc exec a1 ash}}&lt;br /&gt;
&lt;br /&gt;
== Fixing the container ==&lt;br /&gt;
Once you create the container, edit /etc/inittab and comment out all lines that start with &amp;quot;tty&amp;quot;.  Otherwise, the container will keep writing warnings on /var/log/messages.  Here&#039;s a script to automate this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
sed -i &#039;s/^tty/# tty/g&#039; /etc/inittab&lt;br /&gt;
&lt;br /&gt;
# clean messages&lt;br /&gt;
rm /var/log/messages&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Let&#039;s say this script is called fixgetty.sh.  To copy it to the container, use the following:&lt;br /&gt;
{{Cmd|lxc file push fixgetty.sh a1/root/}}&lt;br /&gt;
&lt;br /&gt;
After you fix /etc/inittab, reboot the container:&lt;br /&gt;
{{Cmd|reboot}}&lt;br /&gt;
&lt;br /&gt;
== Networking ==&lt;br /&gt;
The container has outgoing access to the network, but no incoming public access, since it doesn&#039;t have a public ip.  You can provide incoming access using several networking techniques:&lt;br /&gt;
* On a LAN, it suffices to add a route through the host LXD node&lt;br /&gt;
* Use an iptables configurator, such as shorewall&lt;br /&gt;
* For HTTP/HTTPS access, use an HTTP reverse proxy/load balancer, such as pound, to redirect HTTP requests to various containers.  You can run the HTTP reverse proxy in an Alpine container, once you redirect the ports that you want to it, (using iptables).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Virtualization]]&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Talk:LXC&amp;diff=12719</id>
		<title>Talk:LXC</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Talk:LXC&amp;diff=12719"/>
		<updated>2016-04-28T06:22:55Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: /* About lxc-attach */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Alternative Network Setup =&lt;br /&gt;
&lt;br /&gt;
These are notes on macvlan on a box with real vlans.  The goal here is to have the host on a management vlan, and several guests each on other vlans.  There&#039;s no need for the host to talk to the guests.  The host resides on the &amp;quot;OOB&amp;quot; network, and if the host needs to talk to a guest, it does so with lxc-console, like having a KVM.  Each guest should get its address from the DHCP server on the appropriate vlan.Something like this:&lt;br /&gt;
&lt;br /&gt;
Setup:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| host&lt;br /&gt;
| dhcp on vlan 8&lt;br /&gt;
|-&lt;br /&gt;
| guest1&lt;br /&gt;
| dhcp on vlan 64&lt;br /&gt;
|-&lt;br /&gt;
| guest2&lt;br /&gt;
| dhcp on vlan 129&lt;br /&gt;
|-&lt;br /&gt;
| guest3&lt;br /&gt;
| dhcp on vlan64 (different address)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* Host&#039;s /etc/network/interfaces file&lt;br /&gt;
 auto lo&lt;br /&gt;
 iface lo inet loopback&lt;br /&gt;
  &lt;br /&gt;
 # MGMT vlan&lt;br /&gt;
 auto eth0.8&lt;br /&gt;
 iface eth0.8 inet dhcp&lt;br /&gt;
      hostname lxchost&lt;br /&gt;
 &lt;br /&gt;
 # USR vlan - we bring it up, but dont assign an address&lt;br /&gt;
 auto eth0.65&lt;br /&gt;
 iface eth0.65 inet manual&lt;br /&gt;
    up ip link set $IFACE addr de:ad:be:ef:ca:fe&lt;br /&gt;
    up ip link set $IFACE up&lt;br /&gt;
    down ip link set $IFACE down&lt;br /&gt;
 &lt;br /&gt;
 # VoIP vlan - we bring it up, but dont assign an address&lt;br /&gt;
 auto eth0.129&lt;br /&gt;
 iface eth0.129 inet manual&lt;br /&gt;
    up ip link set $IFACE addr 0f:f1:ce:c0:ff:ee&lt;br /&gt;
    up ip link set $IFACE up&lt;br /&gt;
    down ip link set $IFACE down&lt;br /&gt;
&lt;br /&gt;
* Here&#039;s /etc/lxc/lxc.conf&lt;br /&gt;
 lxc.network.type   =   macvlan&lt;br /&gt;
 # Allow guests on the same vlan to see each other                                   &lt;br /&gt;
 lxc.network.macvlan.mode = bridge                                                    &lt;br /&gt;
 lxc.network.link   =   eth0.65                     &lt;br /&gt;
 lxc.network.name   =   eth0                                                                   &lt;br /&gt;
 # lxc.network.hwaddr = de:ad:be:ef:c0:00    # macvlan will make one up, but possible if wanted                 &lt;br /&gt;
 # lxc.network.flags  =   up                 # Do NOT bring up the interface, we will do so within the container&lt;br /&gt;
 # lxc.network.ipv4   =   0.0.0.0            # Do NOT assign an address, we do so within the container          &lt;br /&gt;
                                                                                                      &lt;br /&gt;
 # Capabilities to drop (for instance, to stop the guest from mounting sys)   &lt;br /&gt;
 # Taken from http://sourceforge.net/mailarchive/message.php?msg_id=28285704  &lt;br /&gt;
 # sys_boot is not listed here, as it causes problems when the host tries to stop the guest&lt;br /&gt;
 &lt;br /&gt;
 # If you trust the guest, then you can get by without dropping capabilities&lt;br /&gt;
                                                                                   &lt;br /&gt;
 lxc.cap.drop= sys_admin audit_control audit_write fsetid ipc_lock                 &lt;br /&gt;
 lxc.cap.drop= ipc_owner lease linux_immutable mac_admin mac_override mknod setfcap&lt;br /&gt;
 lxc.cap.drop= setpcap sys_module sys_nice sys_pacct sys_ptrace sys_rawio&lt;br /&gt;
 lxc.cap.drop= sys_tty_config sys_time  &lt;br /&gt;
* Create the guests&lt;br /&gt;
 for a in `seq 1 3`; do &lt;br /&gt;
   lxc-create -n guest${a} -f /etc/lxc/lxc.conf -t alpine&lt;br /&gt;
   ln -s /etc/init.d/lxc /etc/init.d/lxc.guest${a}&lt;br /&gt;
 done&lt;br /&gt;
* vi /var/lib/lxc/guest2/config&lt;br /&gt;
   change lxc.network.link to eth0.129&lt;br /&gt;
* Start and enter the first guest (this is where the fun starts)&lt;br /&gt;
 /etc/init.d/lxc.guest1 start&lt;br /&gt;
 lxc-console -n guest1&lt;br /&gt;
&lt;br /&gt;
=== Fun inside the guest ===&lt;br /&gt;
&lt;br /&gt;
* /dev/null is currently created as a regular file&lt;br /&gt;
* /dev/zero doesn&#039;t exist&lt;br /&gt;
&lt;br /&gt;
To create these, do the following from &#039;&#039;the host&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
rm -f /var/lib/lxc/[guest-name]/rootfs/dev/null&lt;br /&gt;
rm -f /var/lib/lxc/[guest-name]/rootfs/dev/zero&lt;br /&gt;
mknod  /var/lib/lxc/[guest-name]/rootfs/dev/zero c 1 5&lt;br /&gt;
mknod  /var/lib/lxc/[guest-name]/rootfs/dev/null c 1 3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
We do this in the host because our default config drops mknod capabilites in the guest.&lt;br /&gt;
&lt;br /&gt;
=== What Works, What Doesnt ===&lt;br /&gt;
* Pro&lt;br /&gt;
** Each guest has its own mac address&lt;br /&gt;
** Network connectivity between each guest &lt;br /&gt;
** No communication allowed between host and guests (this is a plus in our case - managment vlan != user vlan)&lt;br /&gt;
** if iptables modules are loaded in the host, each guest can create its own iptables rules (awall for all! sweet)&lt;br /&gt;
* Con&lt;br /&gt;
** No communication allowed between host and guests because we are not using a bridge interface (this is a plus in our case - managment vlan != user vlan)&lt;br /&gt;
&lt;br /&gt;
== About lxc-attach ==&lt;br /&gt;
&lt;br /&gt;
I cannot conncect to any AL LXC build under AL... the response is always &amp;lt;pre&amp;gt;&lt;br /&gt;
infra:~# lxc-attach --name=git -- &amp;quot;ps ax&amp;quot;&lt;br /&gt;
lxc_container: attach.c: lxc_attach_to_ns: 196 Operation not permitted - failed to set namespace &#039;pid&#039;&lt;br /&gt;
lxc_container: attach.c: lxc_attach: 844 failed to enter the namespace&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
What did I possibly wrong?&amp;lt;br/&amp;gt;&lt;br /&gt;
Or is it a bug in AL LXC?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Update about lxc-attach ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;LXC-host: lxc-attach fail with &amp;quot;lxc_attach_to_ns: 270 Operation not permitted - failed to set namespace &#039;pid&#039;&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Issue:&#039;&#039;&#039; When you try to run lxc-attach, this fails. &amp;quot;use of CAP_SYS_ADMIN in chroot denied for /usr/bin/lxc-attach&amp;quot; appears in dmesg.&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Cause:&#039;&#039;&#039; This issue due to grsecurity restriction in the lxc host.&amp;lt;br/&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Workaround:&#039;&#039;&#039; Add the following settings to your sysctl.conf file:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
kernel.grsecurity.chroot_caps=0&lt;br /&gt;
kernel.grsecurity.chroot_deny_chmod=0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Since those settings are read only at lxc host boot, and they have been applied in a second time, some of the lxc hosts might not have those settings loaded yet. &lt;br /&gt;
A simple workaround can be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo 0 &amp;gt; /proc/sys/kernel/grsecurity/chroot_caps &lt;br /&gt;
echo 0 &amp;gt; /proc/sys/kernel/grsecurity/chroot_deny_chroot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or simply run:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;sysctl -p&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Dynamic_Multipoint_VPN_(DMVPN)_Phase_3_with_Quagga_NHRPd&amp;diff=11278</id>
		<title>Dynamic Multipoint VPN (DMVPN) Phase 3 with Quagga NHRPd</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Dynamic_Multipoint_VPN_(DMVPN)_Phase_3_with_Quagga_NHRPd&amp;diff=11278"/>
		<updated>2015-10-29T09:35:55Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= THIS DOC IS STILL A DRAFT =&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
This is a follow-up of the most famous document [http://wiki.alpinelinux.org/wiki/Dynamic_Multipoint_VPN_(DMVPN)],&lt;br /&gt;
since opennhrp has been rewritten as quagga plugin [1], supporting interoperability with new Cisco&#039;s FlexVPN and Strongswan.&lt;br /&gt;
&lt;br /&gt;
This NHRP implementation has some limits yet (Multicast is not ready, so you need to use BGP rather than OSPF), though is usable in a production environment.&lt;br /&gt;
&lt;br /&gt;
{{Note|This document assumes that all Alpine installations are run in [[Installation#Basics|diskless mode]] and that the configuration is saved on USB key}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This How-To will show you how to configure a DMVPN solution with this key items:&lt;br /&gt;
&lt;br /&gt;
.1 VPN setup with Strongswan with PSK for the authentication (same PSK between all of the spokes and hub)&lt;br /&gt;
&lt;br /&gt;
.2 DMVPN setup with quagga.nhrpd; &lt;br /&gt;
&lt;br /&gt;
.3 iBGP used for announce LAN subnet&lt;br /&gt;
&lt;br /&gt;
.4 Awall rules to allow NHRP shortcuts between spokes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The goal is making private network of spoke&#039;s nodes and hub to communicate each other over VPN created dynamically.&lt;br /&gt;
Routes are learned via BGP, and hte IPSEC VPN is authenticated via PSK.&lt;br /&gt;
&lt;br /&gt;
The logical setup is configured as shown:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Terminology =&lt;br /&gt;
;NBMA: &#039;&#039;Non-Broadcast Multi-Access&#039;&#039; network as described in [http://tools.ietf.org/html/rfc2332 RFC 2332]&lt;br /&gt;
&lt;br /&gt;
;Hub: the &#039;&#039;Next Hop Server&#039;&#039; (NHS) performing the Next Hop Resolution Protocol service within the NBMA cloud.&lt;br /&gt;
&lt;br /&gt;
;Spoke: the &#039;&#039;Next Hop Resolution Protocol Client&#039;&#039; (NHC) which initiates NHRP requests of various types in order to obtain access to the NHRP service.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
For supporting VIA Padlock engine enable its modules:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|echo -e &amp;quot;padlock_aes\npadlock-sha&amp;quot; &amp;gt;&amp;gt; /etc/modules}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Alpine Installation =&lt;br /&gt;
&lt;br /&gt;
Follow the instructions on  http://wiki.alpinelinux.org/wiki/Create_a_Bootable_USB about how to create a bootable USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Spoke Nodes =&lt;br /&gt;
&lt;br /&gt;
== Spoke Node 1 ==&lt;br /&gt;
&lt;br /&gt;
== Networking ==&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to setup the spoke node 1 as follow:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Host&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Interface&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Subnet&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;|Spoke 1&lt;br /&gt;
|eth0&lt;br /&gt;
|Internet&lt;br /&gt;
|DHCP&lt;br /&gt;
|-&lt;br /&gt;
|eth1&lt;br /&gt;
|LAN&lt;br /&gt;
|192.168.10.0/24&lt;br /&gt;
|-&lt;br /&gt;
|gre1&lt;br /&gt;
|Tunnel&lt;br /&gt;
|172.16.1.1 &lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;|Spoke 2&lt;br /&gt;
|eth0&lt;br /&gt;
|Internet&lt;br /&gt;
|DHCP&lt;br /&gt;
|-&lt;br /&gt;
|eth1&lt;br /&gt;
|LAN&lt;br /&gt;
|192.168.20.0/24&lt;br /&gt;
|-&lt;br /&gt;
|gre1&lt;br /&gt;
|Tunnel&lt;br /&gt;
|172.16.2.1 &lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;|Spoke 3&lt;br /&gt;
|eth0&lt;br /&gt;
|Internet&lt;br /&gt;
|90.100.150.200&lt;br /&gt;
|-&lt;br /&gt;
|eth1&lt;br /&gt;
|LAN&lt;br /&gt;
|192.168.30.0/24&lt;br /&gt;
|-&lt;br /&gt;
|gre1&lt;br /&gt;
|Tunnel&lt;br /&gt;
|172.16.3.1 &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With your favorite editor open &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; and add interfaces:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/network/interfaces|&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet dhcp&lt;br /&gt;
        &lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 192.168.10.1&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SSH ==&lt;br /&gt;
Remove password authentication and DNS reverse lookup:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sed -i &amp;quot;s/.PasswordAuthentication yes/PasswordAuthentication no/&amp;quot; /etc/ssh/sshd_config&lt;br /&gt;
sed -i &amp;quot;s/.UseDNS yes/UseDNS no/&amp;quot; /etc/ssh/sshd_config}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Restart ssh:&lt;br /&gt;
{{Cmd|/etc/init.d/sshd restart}}&lt;br /&gt;
&lt;br /&gt;
== GRE Tunnel ==&lt;br /&gt;
With your favorite editor open &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; and add the following:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/network/interfaces|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
auto gre1&lt;br /&gt;
iface gre1 inet static&lt;br /&gt;
        pre-up ip tunnel add gre1 mode gre key 42 ttl 64 dev eth0 || true&lt;br /&gt;
        address 172.16.1.1&lt;br /&gt;
        netmask 255.255.255.255&lt;br /&gt;
        post-down ip tunnel del $IFACE || true&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Bring up the new &amp;lt;code&amp;gt;gre1&amp;lt;/code&amp;gt; interface:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|ifup gre1}}&lt;br /&gt;
&lt;br /&gt;
== IPSEC ==&lt;br /&gt;
Install package(s):&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add strongswan&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/swanctl/swanctl.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
connections {&lt;br /&gt;
        dmvpn {&lt;br /&gt;
                version = 2&lt;br /&gt;
                pull = no&lt;br /&gt;
                mobike = no&lt;br /&gt;
                dpd_delay = 15&lt;br /&gt;
                dpd_timeout = 30&lt;br /&gt;
                fragmentation = yes&lt;br /&gt;
                unique = replace&lt;br /&gt;
                rekey_time = 4h&lt;br /&gt;
                reauth_time = 13h&lt;br /&gt;
                proposals = aes256-sha512-ecp384&lt;br /&gt;
                local {&lt;br /&gt;
                        auth = psk&lt;br /&gt;
                        id = spoke1&lt;br /&gt;
                }&lt;br /&gt;
                remote {&lt;br /&gt;
                        auth = psk&lt;br /&gt;
                }&lt;br /&gt;
                children {&lt;br /&gt;
                        dmvpn {&lt;br /&gt;
                                esp_proposals = aes256-sha512-ecp384&lt;br /&gt;
                                local_ts = dynamic[gre]&lt;br /&gt;
                                remote_ts = dynamic[gre]&lt;br /&gt;
                                inactivity = 90m&lt;br /&gt;
                                rekey_time = 100m&lt;br /&gt;
                                mode = transport&lt;br /&gt;
                                dpd_action = clear&lt;br /&gt;
                                reqid = 1&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/ipsec.secrets|&lt;br /&gt;
# /etc/ipsec.secrets - strongSwan IPsec secrets file&lt;br /&gt;
&lt;br /&gt;
%any : PSK &amp;quot;cisco12345678987654321&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Start service(s):&lt;br /&gt;
&lt;br /&gt;
{{Cmd|/etc/init.d/charon start&lt;br /&gt;
rc-update add charon}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Routing ==&lt;br /&gt;
&lt;br /&gt;
This section will configure the routing protocol suite quagga patched with NHRP support.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add quagga-nhrp&lt;br /&gt;
touch /etc/quagga/zebra.conf /etc/quagga/bgpd.conf /etc/quagga/nhrpd.conf}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fix permissions:&lt;br /&gt;
{{Cmd|chown -R quagga:quagga /etc/quagga}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Start all the daemons:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|/etc/init.d/zebra start&lt;br /&gt;
/etc/init.d/bgpd start&lt;br /&gt;
/etc/init.d/nhrpd start&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Configure it to start from boot:&lt;br /&gt;
{{Cmd|rc-update add zebra nhrpd bgpd}}&lt;br /&gt;
&lt;br /&gt;
Now  we&#039;re going to configure it with &amp;lt;code&amp;gt;vtysh&amp;lt;/code&amp;gt; cli:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|vtysh&lt;br /&gt;
&lt;br /&gt;
configure terminal&lt;br /&gt;
log syslog&lt;br /&gt;
debug nhrp common&lt;br /&gt;
&lt;br /&gt;
router bgp 65000&lt;br /&gt;
 bgp router-id 172.16.1.1&lt;br /&gt;
 network 192.168.10.0/24&lt;br /&gt;
 neighbor spokes-ibgp peer-group&lt;br /&gt;
 neighbor spokes-ibgp remote-as 65000&lt;br /&gt;
 neighbor spokes-ibgp ebgp-multihop 1&lt;br /&gt;
 neighbor spokes-ibgp disable-connected-check&lt;br /&gt;
 neighbor spokes-ibgp advertisement-interval 1&lt;br /&gt;
 neighbor spokes-ibgp next-hop-self&lt;br /&gt;
 neighbor spokes-ibgp soft-reconfiguration inbound&lt;br /&gt;
 neighbor 172.16.0.1 peer-group spokes-ibgp&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
nhrp nflog-group 1&lt;br /&gt;
interface gre1&lt;br /&gt;
 ip nhrp network-id 1&lt;br /&gt;
 ip nhrp nhs dynamic nbma 50.60.70.80&lt;br /&gt;
 ip nhrp registration no-unique&lt;br /&gt;
 ip nhrp shortcut&lt;br /&gt;
 ipv6 nd suppress-ra&lt;br /&gt;
 no link-detect&lt;br /&gt;
 tunnel protection vici profile dmvpn&lt;br /&gt;
 tunnel source eth0&lt;br /&gt;
 exit&lt;br /&gt;
write mem&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Hub Node =&lt;br /&gt;
&lt;br /&gt;
We will document only what changes from the Spoke node setup.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Networking ==&lt;br /&gt;
&lt;br /&gt;
The NHS (Hub) has the following settings:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Host&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Interface&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Subnet&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Hub&lt;br /&gt;
|eth0&lt;br /&gt;
|Internet&lt;br /&gt;
|50.60.70.80&lt;br /&gt;
|-&lt;br /&gt;
|eth1&lt;br /&gt;
|LAN&lt;br /&gt;
|192.168.1.0/24&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With your favorite editor open &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; and add interfaces:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/network/interfaces|&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
    address 50.60.70.80&lt;br /&gt;
    netmask 255.255.255.0&lt;br /&gt;
    gateway 50.60.70.1&lt;br /&gt;
        &lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 192.168.1.1&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== GRE Tunnel ==&lt;br /&gt;
With your favorite editor open &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; and add the following:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/network/interfaces|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
auto gre1&lt;br /&gt;
iface gre1 inet static&lt;br /&gt;
        pre-up ip tunnel add gre1 mode gre key 42 ttl 64 dev eth0 || true&lt;br /&gt;
        address 172.16.0.1&lt;br /&gt;
        netmask 255.255.255.255&lt;br /&gt;
        post-down ip tunnel del $IFACE || true&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Bring up the new gre1 interface:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|ifup gre1}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Routing ==&lt;br /&gt;
&lt;br /&gt;
Again, routing is configured directly with &amp;lt;code&amp;gt;vtysh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Cmd|vtysh&lt;br /&gt;
&lt;br /&gt;
configure terminal&lt;br /&gt;
log syslog&lt;br /&gt;
debug nhrp common&lt;br /&gt;
&lt;br /&gt;
router bgp 65000&lt;br /&gt;
 bgp router-id 172.16.0.1&lt;br /&gt;
 bgp deterministic-med&lt;br /&gt;
 network 172.16.0.0/16&lt;br /&gt;
 redistribute nhrp&lt;br /&gt;
 neighbor spokes-ibgp peer-group&lt;br /&gt;
 neighbor spokes-ibgp remote-as 65000&lt;br /&gt;
 neighbor spokes-ibgp ebgp-multihop 1&lt;br /&gt;
 neighbor spokes-ibgp disable-connected-check&lt;br /&gt;
 neighbor spokes-ibgp route-reflector-client&lt;br /&gt;
 neighbor spokes-ibgp next-hop-self all&lt;br /&gt;
 neighbor spokes-ibgp advertisement-interval 1&lt;br /&gt;
 neighbor spokes-ibgp soft-reconfiguration inbound&lt;br /&gt;
 neighbor 172.16.1.1 peer-group spokes-ibgp&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
interface gre1&lt;br /&gt;
 ip nhrp network-id 1&lt;br /&gt;
 ip nhrp nhs dynamic nbma 50.60.70.80&lt;br /&gt;
 ip nhrp registration no-unique&lt;br /&gt;
 ip nhrp shortcut&lt;br /&gt;
 ipv6 nd suppress-ra&lt;br /&gt;
 no link-detect&lt;br /&gt;
 tunnel protection vici profile dmvpn&lt;br /&gt;
 tunnel source eth0&lt;br /&gt;
 exit&lt;br /&gt;
write mem&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Add the lines &amp;lt;code&amp;gt;neighbor %Spoke1_GRE_IP%...&amp;lt;/code&amp;gt; for each spoke node you have.&lt;br /&gt;
For instance, if you want to add spoke node with gre1 address 172.16.3.1: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|vtysh&lt;br /&gt;
conf t&lt;br /&gt;
router bgp 65000&lt;br /&gt;
neighbor 172.16.3.1 peer-group spokes-ibgp&lt;br /&gt;
exit&lt;br /&gt;
write mem&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Awall ==&lt;br /&gt;
&lt;br /&gt;
Differently from DMVPN Phase 2, in the Phase 3 DMVPN the HUB is the default gateway for all the spokes, then the spokes are able to communicate directly each other by means of NHRP redirects.&lt;br /&gt;
&lt;br /&gt;
(For a good explanation of the differences between Phase 1, Phase 2 and Phase 3 DMVPN, see http://blog.ine.com/2008/12/23/dmvpn-phase-3/).&lt;br /&gt;
&lt;br /&gt;
This is implemented by sending traffic indication notifications with iptables nflog.&lt;br /&gt;
&lt;br /&gt;
This is the  complete firewall configuration for the HUB, using Alpine Firewall Framework, Awall [http://wiki.alpinelinux.org/wiki/Alpine_Wall].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With your favorite editor open &amp;lt;code&amp;gt;/etc/awall/optional/zones.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/awall/optional/zones.json|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Zones - zone definition for management&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;variable&amp;quot;: {&lt;br /&gt;
        &amp;quot;SUBNETS&amp;quot;: [ &amp;quot;192.168.0.0/16&amp;quot;, &amp;quot;172.16.0.0/16&amp;quot; ]&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;zone&amp;quot;: {&lt;br /&gt;
    &amp;quot;DMVPN&amp;quot;: { &amp;quot;addr&amp;quot;: &amp;quot;$SUBNETS&amp;quot; }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, create &amp;lt;code&amp;gt;/etc/awall/optional/inet.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/awall/optional/inet.json|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Internet - Host Management (rate limited)&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;zone&amp;quot;: {&lt;br /&gt;
    &amp;quot;INET&amp;quot;: { &amp;quot;iface&amp;quot;: &amp;quot;eth0&amp;quot; }&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;policy&amp;quot;: [&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;INET&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;drop&amp;quot; }&lt;br /&gt;
  ],&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;filter&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;INET&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;ping&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;,&lt;br /&gt;
      &amp;quot;flow-limit&amp;quot;: { &amp;quot;count&amp;quot;: 10, &amp;quot;interval&amp;quot;: 6 }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;INET&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;ssh&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;,&lt;br /&gt;
      &amp;quot;conn-limit&amp;quot;: { &amp;quot;count&amp;quot;: 3, &amp;quot;interval&amp;quot;: 60 }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;INET&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: [ &amp;quot;dns&amp;quot;, &amp;quot;http&amp;quot;, &amp;quot;ntp&amp;quot; ],&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: [ &amp;quot;ping&amp;quot;, &amp;quot;ssh&amp;quot; ],&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Now, the DMVPN rule:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/awall/optional/dmvpn.json|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;DMVPN specific rules&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;import&amp;quot;: [ &amp;quot;inet&amp;quot;, &amp;quot;zones&amp;quot; ],&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;variable&amp;quot;: {&lt;br /&gt;
    &amp;quot;HUB&amp;quot;: true&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;policy&amp;quot;: [&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot; }&lt;br /&gt;
  ],&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;zone&amp;quot;: {&lt;br /&gt;
    &amp;quot;DMVPN&amp;quot;: { &amp;quot;iface&amp;quot;: &amp;quot;gre1&amp;quot;, &amp;quot;addr&amp;quot;: &amp;quot;$SUBNETS&amp;quot;, &amp;quot;route-back&amp;quot;: &amp;quot;$HUB&amp;quot; }&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;filter&amp;quot;: [&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;INET&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;, &amp;quot;service&amp;quot;: &amp;quot;ipsec&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot; },&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;INET&amp;quot;, &amp;quot;service&amp;quot;: &amp;quot;ipsec&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot; },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;INET&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;ipsec&amp;quot;: &amp;quot;in&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;gre&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;INET&amp;quot;,&lt;br /&gt;
      &amp;quot;ipsec&amp;quot;: &amp;quot;out&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;gre&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;service&amp;quot;: &amp;quot;bgp&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot; },&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;, &amp;quot;service&amp;quot;: &amp;quot;bgp&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;},&lt;br /&gt;
    { &amp;quot;out&amp;quot;: &amp;quot;INET&amp;quot;, &amp;quot;dest&amp;quot;: &amp;quot;$SUBNETS&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;reject&amp;quot; }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Management interface allowed traffic:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/awall/optional/management.json|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Host Management (ssh, https, ping)&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;import&amp;quot;: [ &amp;quot;zones&amp;quot; ],&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;policy&amp;quot;: [&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;reject&amp;quot; }&lt;br /&gt;
  ],&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;filter&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;DMVPN&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: [ &amp;quot;ping&amp;quot;, &amp;quot;ssh&amp;quot;, &amp;quot;https&amp;quot;, &amp;quot;bgp&amp;quot; ],&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;DMVPN&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: [ &amp;quot;ping&amp;quot;, &amp;quot;ssh&amp;quot;, &amp;quot;http&amp;quot;, &amp;quot;http-alt&amp;quot;, &amp;quot;https&amp;quot;, &amp;quot;dns&amp;quot;, &amp;quot;ntp&amp;quot; ],&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
NHRP redirects rule:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/awall/optional/vpnredirect.json|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;NHRP Traffic Indication Probe&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;log&amp;quot;: {&lt;br /&gt;
    &amp;quot;dmvpn&amp;quot;: {&lt;br /&gt;
       &amp;quot;mode&amp;quot;: &amp;quot;nflog&amp;quot;,&lt;br /&gt;
       &amp;quot;group&amp;quot;: 1,&lt;br /&gt;
       &amp;quot;range&amp;quot;: 128,&lt;br /&gt;
       &amp;quot;limit&amp;quot;: {&lt;br /&gt;
          &amp;quot;count&amp;quot;: 6,&lt;br /&gt;
          &amp;quot;interval&amp;quot;: 60,&lt;br /&gt;
          &amp;quot;mask&amp;quot;: {&lt;br /&gt;
             &amp;quot;inet&amp;quot;: { &amp;quot;src&amp;quot;: 16, &amp;quot;dest&amp;quot;: 16 },&lt;br /&gt;
             &amp;quot;inet6&amp;quot;: { &amp;quot;src&amp;quot;: 48, &amp;quot;dest&amp;quot;: 48 }&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;packet-log&amp;quot;: [ { &amp;quot;in&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;log&amp;quot;: &amp;quot;dmvpn&amp;quot; } ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enable awall rules:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|awall enable zones&lt;br /&gt;
awall enable inet&lt;br /&gt;
awall enable dmvpn&lt;br /&gt;
awall enable vpnredirect&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Apply awall rules:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|awall activate -f &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== IPSEC ==&lt;br /&gt;
Install package(s):&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add strongswan&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/swanctl/swanctl.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
connections {&lt;br /&gt;
        dmvpn {&lt;br /&gt;
                version = 2&lt;br /&gt;
                pull = no&lt;br /&gt;
                mobike = no&lt;br /&gt;
                dpd_delay = 15&lt;br /&gt;
                dpd_timeout = 30&lt;br /&gt;
                fragmentation = yes&lt;br /&gt;
                unique = replace&lt;br /&gt;
                rekey_time = 4h&lt;br /&gt;
                reauth_time = 13h&lt;br /&gt;
                proposals = aes256-sha512-ecp384&lt;br /&gt;
                local {&lt;br /&gt;
                        auth = psk&lt;br /&gt;
                        id = hub&lt;br /&gt;
                }&lt;br /&gt;
                remote {&lt;br /&gt;
                        auth = psk&lt;br /&gt;
                }&lt;br /&gt;
                children {&lt;br /&gt;
                        dmvpn {&lt;br /&gt;
                                esp_proposals = aes256-sha512-ecp384&lt;br /&gt;
                                local_ts = dynamic[gre]&lt;br /&gt;
                                remote_ts = dynamic[gre]&lt;br /&gt;
                                inactivity = 90m&lt;br /&gt;
                                rekey_time = 100m&lt;br /&gt;
                                mode = transport&lt;br /&gt;
                                dpd_action = clear&lt;br /&gt;
                                reqid = 1&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/ipsec.secrets|&lt;br /&gt;
# /etc/ipsec.secrets - strongSwan IPsec secrets file&lt;br /&gt;
&lt;br /&gt;
%any : PSK &amp;quot;cisco12345678987654321&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Start service(s):&lt;br /&gt;
&lt;br /&gt;
{{Cmd|/etc/init.d/charon start&lt;br /&gt;
rc-update add charon}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, test if it works.&lt;br /&gt;
In this example, spoke 1 tries to connect to spoke 3, who announces his subnet 192.168.30.0/24 via iBGP, the gre1 address is 172.16.3.1 and the public ip address is 90.100.150.200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The first traffic goes from through the HUB.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|spoke1:~/root# traceroute -n 192.168.30.1&lt;br /&gt;
traceroute to 192.168.30.1 (192.168.30.1), 30 hops max, 38 byte packets&lt;br /&gt;
 1  172.16.0.1  0.664 ms  0.461 ms  0.457 ms&lt;br /&gt;
 2  192.168.30.1  0.907 ms  0.776 ms  0.771 ms&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Then, once the VPN is created, the traffic goes directly to the spoke node.&lt;br /&gt;
 &lt;br /&gt;
{{Cmd|spoke1:~/root# traceroute -n 192.168.30.1&lt;br /&gt;
traceroute to 192.168.30.1 (192.168.30.1), 30 hops max, 38 byte packets&lt;br /&gt;
 1  192.168.30.1  0.456 ms  0.385 ms  0.357 ms&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With &amp;lt;code&amp;gt;ipsec --status-all&amp;lt;/code&amp;gt; you can see alle the VPNs created:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|spoke1:~/root# ipsec statusall&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Status of IKE charon daemon (strongSwan 5.3.2, Linux 3.18.20-1-grsec, i686):&lt;br /&gt;
  uptime: 9 days, since Aug 28 14:22:27 2015&lt;br /&gt;
  worker threads: 11 of 16 idle, 5/0/0/0 working, job queue: 0/0/0/0, scheduled: 28&lt;br /&gt;
  loaded plugins: charon random nonce x509 revocation constraints pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey pem openssl fips-prf gmp xcbc cmac curl sqlite attr kernel-netlink resolve socket-default farp stroke vici updown eap-identity eap-sim eap-aka eap-aka-3gpp2 eap-simaka-pseudonym eap-simaka-reauth eap-md5 eap-mschapv2 eap-radius eap-tls xauth-generic xauth-eap dhcp unity&lt;br /&gt;
Listening IP addresses:&lt;br /&gt;
  192.168.10.1&lt;br /&gt;
  172.17.50.1&lt;br /&gt;
  172.16.1.1&lt;br /&gt;
Connections:&lt;br /&gt;
       dmvpn:  %any...%any  IKEv2, dpddelay=15s&lt;br /&gt;
       dmvpn:   local:  [spoke1] uses pre-shared key authentication&lt;br /&gt;
       dmvpn:   remote: uses pre-shared key authentication&lt;br /&gt;
       dmvpn:   child:  dynamic[gre] === dynamic[gre] TRANSPORT, dpdaction=clear&lt;br /&gt;
Security Associations (3 up, 0 connecting):&lt;br /&gt;
       dmvpn[121]: ESTABLISHED 4 seconds ago, 172.17.50.1[spoke1]...90.100.150.200[spoke3]&lt;br /&gt;
       dmvpn[121]: IKEv2 SPIs: c770729967ea636c_i 0de8ffedbe32f21c_r*, rekeying in 3 hours, pre-shared key reauthentication in 12 hours&lt;br /&gt;
       dmvpn[121]: IKE proposal: AES_CBC_256/HMAC_SHA2_512_256/PRF_HMAC_SHA2_512/ECP_384&lt;br /&gt;
       dmvpn{187}:  INSTALLED, TRANSPORT, reqid 1, ESP in UDP SPIs: c132e6c3_i c49ae122_o&lt;br /&gt;
       dmvpn{187}:  AES_CBC_256/HMAC_SHA2_512_256, 469 bytes_i (6 pkts, 2s ago), 326 bytes_o (6 pkts, 2s ago), rekeying in 90 minutes&lt;br /&gt;
       dmvpn{187}:   172.17.50.1/32[gre] === 90.100.150.200/32[gre] &lt;br /&gt;
       dmvpn[120]: ESTABLISHED 8 seconds ago, 172.17.50.1[spoke1]...90.100.150.200[spoke3]&lt;br /&gt;
       dmvpn[120]: IKEv2 SPIs: 46f81c8ec9a4b753_i* f768298b31ebe4da_r, rekeying in 3 hours, pre-shared key reauthentication in 11 hours&lt;br /&gt;
       dmvpn[120]: IKE proposal: AES_CBC_256/HMAC_SHA2_512_256/PRF_HMAC_SHA2_512/ECP_384&lt;br /&gt;
       dmvpn{186}:  INSTALLED, TRANSPORT, reqid 1, ESP in UDP SPIs: cad2c1c9_i cd5a287c_o&lt;br /&gt;
       dmvpn{186}:  AES_CBC_256/HMAC_SHA2_512_256, 74 bytes_i (1 pkt, 2s ago), 46 bytes_o (1 pkt, 2s ago), rekeying in 91 minutes&lt;br /&gt;
       dmvpn{186}:   172.17.50.1/32[gre] === 90.100.150.200/32[gre] &lt;br /&gt;
       dmvpn[119]: ESTABLISHED 2 hours ago, 172.17.50.1[spoke1]...50.60.70.80[hub]&lt;br /&gt;
       dmvpn[119]: IKEv2 SPIs: 0e999ad802ced9cc_i* 6eaa469463601437_r, rekeying in 84 minutes, pre-shared key reauthentication in 8 hours&lt;br /&gt;
       dmvpn[119]: IKE proposal: AES_CBC_256/HMAC_SHA2_512_256/PRF_HMAC_SHA2_512/ECP_384&lt;br /&gt;
       dmvpn{185}:  INSTALLED, TRANSPORT, reqid 1, ESP in UDP SPIs: c84d6035_i cb72cd30_o&lt;br /&gt;
       dmvpn{185}:  AES_CBC_256/HMAC_SHA2_512_256, 35764 bytes_i (473 pkts, 0s ago), 38266 bytes_o (384 pkts, 0s ago), rekeying in 46 minutes&lt;br /&gt;
       dmvpn{185}:   172.17.50.1/32[gre] === 50.60.70.80/32[gre] &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Dynamic_Multipoint_VPN_(DMVPN)_Phase_3_with_Quagga_NHRPd&amp;diff=11277</id>
		<title>Dynamic Multipoint VPN (DMVPN) Phase 3 with Quagga NHRPd</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Dynamic_Multipoint_VPN_(DMVPN)_Phase_3_with_Quagga_NHRPd&amp;diff=11277"/>
		<updated>2015-10-29T09:34:37Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= THIS DOC IS STILL A DRAFT =&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
This is a follow-up of the most famous document [http://wiki.alpinelinux.org/wiki/Dynamic_Multipoint_VPN_(DMVPN)],&lt;br /&gt;
since opennhrp has been rewritten as quagga plugin [1], supporting interoperability with new Cisco&#039;s FlexVPN and Strongswan.&lt;br /&gt;
&lt;br /&gt;
This NHRP implementation has some limits yet (Multicast is not ready, so you need to use BGP rather than OSPF), though is usable in a production environment.&lt;br /&gt;
&lt;br /&gt;
{{Note|This document assumes that all Alpine installations are run in [[Installation#Basics|diskless mode]] and that the configuration is saved on USB key}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This How-To will show you how to configure a DMVPN solution with this key items:&lt;br /&gt;
&lt;br /&gt;
.1 VPN setup with Strongswan with PSK for the authentication (same PSK between all of the spokes and hub)&lt;br /&gt;
&lt;br /&gt;
.2 DMVPN setup with quagga.nhrpd; &lt;br /&gt;
&lt;br /&gt;
.3 iBGP used for announce LAN subnet&lt;br /&gt;
&lt;br /&gt;
.4 Awall rules to allow NHRP shortcuts between spokes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The goal is making private network of spoke&#039;s nodes and hub to communicate each other over VPN created dynamically.&lt;br /&gt;
Routes are learned via BGP, and hte IPSEC VPN is authenticated via PSK.&lt;br /&gt;
&lt;br /&gt;
The logical setup is configured as shown:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Terminology =&lt;br /&gt;
;NBMA: &#039;&#039;Non-Broadcast Multi-Access&#039;&#039; network as described in [http://tools.ietf.org/html/rfc2332 RFC 2332]&lt;br /&gt;
&lt;br /&gt;
;Hub: the &#039;&#039;Next Hop Server&#039;&#039; (NHS) performing the Next Hop Resolution Protocol service within the NBMA cloud.&lt;br /&gt;
&lt;br /&gt;
;Spoke: the &#039;&#039;Next Hop Resolution Protocol Client&#039;&#039; (NHC) which initiates NHRP requests of various types in order to obtain access to the NHRP service.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
For supporting VIA Padlock engine enable its modules:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|echo -e &amp;quot;padlock_aes\npadlock-sha&amp;quot; &amp;gt;&amp;gt; /etc/modules}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Alpine Installation =&lt;br /&gt;
&lt;br /&gt;
Follow the instructions on  http://wiki.alpinelinux.org/wiki/Create_a_Bootable_USB about how to create a bootable USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Spoke Nodes =&lt;br /&gt;
&lt;br /&gt;
== Spoke Node 1 ==&lt;br /&gt;
&lt;br /&gt;
== Networking ==&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to setup the spoke node 1 as follow:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Host&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Interface&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Subnet&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;|Spoke 1&lt;br /&gt;
|eth0&lt;br /&gt;
|Internet&lt;br /&gt;
|DHCP&lt;br /&gt;
|-&lt;br /&gt;
|eth1&lt;br /&gt;
|LAN&lt;br /&gt;
|192.168.10.0/24&lt;br /&gt;
|-&lt;br /&gt;
|gre1&lt;br /&gt;
|Tunnel&lt;br /&gt;
|172.16.1.1 &lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;|Spoke 2&lt;br /&gt;
|eth0&lt;br /&gt;
|Internet&lt;br /&gt;
|DHCP&lt;br /&gt;
|-&lt;br /&gt;
|eth1&lt;br /&gt;
|LAN&lt;br /&gt;
|192.168.20.0/24&lt;br /&gt;
|-&lt;br /&gt;
|gre1&lt;br /&gt;
|Tunnel&lt;br /&gt;
|172.16.2.1 &lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;|Spoke 3&lt;br /&gt;
|eth0&lt;br /&gt;
|Internet&lt;br /&gt;
|90.100.150.200&lt;br /&gt;
|-&lt;br /&gt;
|eth1&lt;br /&gt;
|LAN&lt;br /&gt;
|192.168.30.0/24&lt;br /&gt;
|-&lt;br /&gt;
|gre1&lt;br /&gt;
|Tunnel&lt;br /&gt;
|172.16.3.1 &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With your favorite editor open &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; and add interfaces:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/network/interfaces|&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet dhcp&lt;br /&gt;
        &lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 192.168.10.1&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SSH ==&lt;br /&gt;
Remove password authentication and DNS reverse lookup:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sed -i &amp;quot;s/.PasswordAuthentication yes/PasswordAuthentication no/&amp;quot; /etc/ssh/sshd_config&lt;br /&gt;
sed -i &amp;quot;s/.UseDNS yes/UseDNS no/&amp;quot; /etc/ssh/sshd_config}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Restart ssh:&lt;br /&gt;
{{Cmd|/etc/init.d/sshd restart}}&lt;br /&gt;
&lt;br /&gt;
== GRE Tunnel ==&lt;br /&gt;
With your favorite editor open &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; and add the following:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/network/interfaces|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
auto gre1&lt;br /&gt;
iface gre1 inet static&lt;br /&gt;
        pre-up ip tunnel add gre1 mode gre key 42 ttl 64 dev eth0 || true&lt;br /&gt;
        address 172.16.1.1&lt;br /&gt;
        netmask 255.255.255.255&lt;br /&gt;
        post-down ip tunnel del $IFACE || true&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Bring up the new &amp;lt;code&amp;gt;gre1&amp;lt;/code&amp;gt; interface:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|ifup gre1}}&lt;br /&gt;
&lt;br /&gt;
== IPSEC ==&lt;br /&gt;
Install package(s):&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add strongswan&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/swanctl/swanctl.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
connections {&lt;br /&gt;
        dmvpn {&lt;br /&gt;
                version = 2&lt;br /&gt;
                pull = no&lt;br /&gt;
                mobike = no&lt;br /&gt;
                dpd_delay = 15&lt;br /&gt;
                dpd_timeout = 30&lt;br /&gt;
                fragmentation = yes&lt;br /&gt;
                unique = replace&lt;br /&gt;
                rekey_time = 4h&lt;br /&gt;
                reauth_time = 13h&lt;br /&gt;
                proposals = aes256-sha512-ecp384&lt;br /&gt;
                local {&lt;br /&gt;
                        auth = psk&lt;br /&gt;
                        id = spoke1&lt;br /&gt;
                }&lt;br /&gt;
                remote {&lt;br /&gt;
                        auth = psk&lt;br /&gt;
                }&lt;br /&gt;
                children {&lt;br /&gt;
                        dmvpn {&lt;br /&gt;
                                esp_proposals = aes256-sha512-ecp384&lt;br /&gt;
                                local_ts = dynamic[gre]&lt;br /&gt;
                                remote_ts = dynamic[gre]&lt;br /&gt;
                                inactivity = 90m&lt;br /&gt;
                                rekey_time = 100m&lt;br /&gt;
                                mode = transport&lt;br /&gt;
                                dpd_action = clear&lt;br /&gt;
                                reqid = 1&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/ipsec.secrets|&lt;br /&gt;
# /etc/ipsec.secrets - strongSwan IPsec secrets file&lt;br /&gt;
&lt;br /&gt;
%any : PSK &amp;quot;cisco12345678987654321&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Start service(s):&lt;br /&gt;
&lt;br /&gt;
{{Cmd|/etc/init.d/charon start&lt;br /&gt;
rc-update add charon}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Routing ==&lt;br /&gt;
&lt;br /&gt;
This section will configure the routing protocol suite quagga patched with NHRP support.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add quagga-nhrp&lt;br /&gt;
touch /etc/quagga/zebra.conf /etc/quagga/bgpd.conf /etc/quagga/nhrpd.conf}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fix permissions:&lt;br /&gt;
{{Cmd|chown -R quagga:quagga /etc/quagga}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Start all the daemons:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|/etc/init.d/zebra start&lt;br /&gt;
/etc/init.d/bgpd start&lt;br /&gt;
/etc/init.d/nhrpd start&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Configure it to start from boot:&lt;br /&gt;
{{Cmd|rc-update add zebra nhrpd bgpd}}&lt;br /&gt;
&lt;br /&gt;
Now  we&#039;re going to configure it with &amp;lt;code&amp;gt;vtysh&amp;lt;/code&amp;gt; cli:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|vtysh&lt;br /&gt;
&lt;br /&gt;
configure terminal&lt;br /&gt;
log syslog&lt;br /&gt;
debug nhrp common&lt;br /&gt;
&lt;br /&gt;
router bgp 65000&lt;br /&gt;
 bgp router-id 172.16.1.1&lt;br /&gt;
 network 192.168.10.0/24&lt;br /&gt;
 neighbor spokes-ibgp peer-group&lt;br /&gt;
 neighbor spokes-ibgp remote-as 65000&lt;br /&gt;
 neighbor spokes-ibgp ebgp-multihop 1&lt;br /&gt;
 neighbor spokes-ibgp disable-connected-check&lt;br /&gt;
 neighbor spokes-ibgp advertisement-interval 1&lt;br /&gt;
 neighbor spokes-ibgp next-hop-self&lt;br /&gt;
 neighbor spokes-ibgp soft-reconfiguration inbound&lt;br /&gt;
 neighbor 172.16.0.1 peer-group spokes-ibgp&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
nhrp nflog-group 1&lt;br /&gt;
interface gre1&lt;br /&gt;
 ip nhrp network-id 1&lt;br /&gt;
 ip nhrp nhs dynamic nbma 50.60.70.80&lt;br /&gt;
 ip nhrp registration no-unique&lt;br /&gt;
 ip nhrp shortcut&lt;br /&gt;
 ipv6 nd suppress-ra&lt;br /&gt;
 no link-detect&lt;br /&gt;
 tunnel protection vici profile dmvpn&lt;br /&gt;
 tunnel source eth0&lt;br /&gt;
 exit&lt;br /&gt;
write mem&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Hub Node =&lt;br /&gt;
&lt;br /&gt;
We will document only what changes from the Spoke node setup.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Networking ==&lt;br /&gt;
&lt;br /&gt;
The NHS (Hub) has the following settings:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Host&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Interface&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Subnet&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Hub&lt;br /&gt;
|eth0&lt;br /&gt;
|Internet&lt;br /&gt;
|50.60.70.80&lt;br /&gt;
|-&lt;br /&gt;
|eth1&lt;br /&gt;
|LAN&lt;br /&gt;
|192.168.1.0/24&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With your favorite editor open &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; and add interfaces:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/network/interfaces|&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
    address 50.60.70.80&lt;br /&gt;
    netmask 255.255.255.0&lt;br /&gt;
    gateway 50.60.70.1&lt;br /&gt;
        &lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 192.168.1.1&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== GRE Tunnel ==&lt;br /&gt;
With your favorite editor open &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; and add the following:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/network/interfaces&amp;lt;nowiki&amp;gt;|&lt;br /&gt;
auto gre1&lt;br /&gt;
iface gre1 inet static&lt;br /&gt;
        pre-up ip tunnel add gre1 mode gre key 42 ttl 64 dev eth0 || true&lt;br /&gt;
        address 172.16.0.1&lt;br /&gt;
        netmask 255.255.255.255&lt;br /&gt;
        post-down ip tunnel del $IFACE || true&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Bring up the new gre1 interface:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|ifup gre1}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Routing ==&lt;br /&gt;
&lt;br /&gt;
Again, routing is configured directly with &amp;lt;code&amp;gt;vtysh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Cmd|vtysh&lt;br /&gt;
&lt;br /&gt;
configure terminal&lt;br /&gt;
log syslog&lt;br /&gt;
debug nhrp common&lt;br /&gt;
&lt;br /&gt;
router bgp 65000&lt;br /&gt;
 bgp router-id 172.16.0.1&lt;br /&gt;
 bgp deterministic-med&lt;br /&gt;
 network 172.16.0.0/16&lt;br /&gt;
 redistribute nhrp&lt;br /&gt;
 neighbor spokes-ibgp peer-group&lt;br /&gt;
 neighbor spokes-ibgp remote-as 65000&lt;br /&gt;
 neighbor spokes-ibgp ebgp-multihop 1&lt;br /&gt;
 neighbor spokes-ibgp disable-connected-check&lt;br /&gt;
 neighbor spokes-ibgp route-reflector-client&lt;br /&gt;
 neighbor spokes-ibgp next-hop-self all&lt;br /&gt;
 neighbor spokes-ibgp advertisement-interval 1&lt;br /&gt;
 neighbor spokes-ibgp soft-reconfiguration inbound&lt;br /&gt;
 neighbor 172.16.1.1 peer-group spokes-ibgp&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
interface gre1&lt;br /&gt;
 ip nhrp network-id 1&lt;br /&gt;
 ip nhrp nhs dynamic nbma 50.60.70.80&lt;br /&gt;
 ip nhrp registration no-unique&lt;br /&gt;
 ip nhrp shortcut&lt;br /&gt;
 ipv6 nd suppress-ra&lt;br /&gt;
 no link-detect&lt;br /&gt;
 tunnel protection vici profile dmvpn&lt;br /&gt;
 tunnel source eth0&lt;br /&gt;
 exit&lt;br /&gt;
write mem&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Add the lines &amp;lt;code&amp;gt;neighbor %Spoke1_GRE_IP%...&amp;lt;/code&amp;gt; for each spoke node you have.&lt;br /&gt;
For instance, if you want to add spoke node with gre1 address 172.16.3.1: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|vtysh&lt;br /&gt;
conf t&lt;br /&gt;
router bgp 65000&lt;br /&gt;
neighbor 172.16.3.1 peer-group spokes-ibgp&lt;br /&gt;
exit&lt;br /&gt;
write mem&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Awall ==&lt;br /&gt;
&lt;br /&gt;
Differently from DMVPN Phase 2, in the Phase 3 DMVPN the HUB is the default gateway for all the spokes, then the spokes are able to communicate directly each other by means of NHRP redirects.&lt;br /&gt;
&lt;br /&gt;
(For a good explanation of the differences between Phase 1, Phase 2 and Phase 3 DMVPN, see http://blog.ine.com/2008/12/23/dmvpn-phase-3/).&lt;br /&gt;
&lt;br /&gt;
This is implemented by sending traffic indication notifications with iptables nflog.&lt;br /&gt;
&lt;br /&gt;
This is the  complete firewall configuration for the HUB, using Alpine Firewall Framework, Awall [http://wiki.alpinelinux.org/wiki/Alpine_Wall].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With your favorite editor open &amp;lt;code&amp;gt;/etc/awall/optional/zones.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/awall/optional/zones.json|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Zones - zone definition for management&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;variable&amp;quot;: {&lt;br /&gt;
        &amp;quot;SUBNETS&amp;quot;: [ &amp;quot;192.168.0.0/16&amp;quot;, &amp;quot;172.16.0.0/16&amp;quot; ]&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;zone&amp;quot;: {&lt;br /&gt;
    &amp;quot;DMVPN&amp;quot;: { &amp;quot;addr&amp;quot;: &amp;quot;$SUBNETS&amp;quot; }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, create &amp;lt;code&amp;gt;/etc/awall/optional/inet.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/awall/optional/inet.json|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Internet - Host Management (rate limited)&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;zone&amp;quot;: {&lt;br /&gt;
    &amp;quot;INET&amp;quot;: { &amp;quot;iface&amp;quot;: &amp;quot;eth0&amp;quot; }&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;policy&amp;quot;: [&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;INET&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;drop&amp;quot; }&lt;br /&gt;
  ],&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;filter&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;INET&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;ping&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;,&lt;br /&gt;
      &amp;quot;flow-limit&amp;quot;: { &amp;quot;count&amp;quot;: 10, &amp;quot;interval&amp;quot;: 6 }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;INET&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;ssh&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;,&lt;br /&gt;
      &amp;quot;conn-limit&amp;quot;: { &amp;quot;count&amp;quot;: 3, &amp;quot;interval&amp;quot;: 60 }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;INET&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: [ &amp;quot;dns&amp;quot;, &amp;quot;http&amp;quot;, &amp;quot;ntp&amp;quot; ],&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: [ &amp;quot;ping&amp;quot;, &amp;quot;ssh&amp;quot; ],&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Now, the DMVPN rule:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/awall/optional/dmvpn.json|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;DMVPN specific rules&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;import&amp;quot;: [ &amp;quot;inet&amp;quot;, &amp;quot;zones&amp;quot; ],&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;variable&amp;quot;: {&lt;br /&gt;
    &amp;quot;HUB&amp;quot;: true&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;policy&amp;quot;: [&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot; }&lt;br /&gt;
  ],&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;zone&amp;quot;: {&lt;br /&gt;
    &amp;quot;DMVPN&amp;quot;: { &amp;quot;iface&amp;quot;: &amp;quot;gre1&amp;quot;, &amp;quot;addr&amp;quot;: &amp;quot;$SUBNETS&amp;quot;, &amp;quot;route-back&amp;quot;: &amp;quot;$HUB&amp;quot; }&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;filter&amp;quot;: [&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;INET&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;, &amp;quot;service&amp;quot;: &amp;quot;ipsec&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot; },&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;INET&amp;quot;, &amp;quot;service&amp;quot;: &amp;quot;ipsec&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot; },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;INET&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;ipsec&amp;quot;: &amp;quot;in&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;gre&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;INET&amp;quot;,&lt;br /&gt;
      &amp;quot;ipsec&amp;quot;: &amp;quot;out&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;gre&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;service&amp;quot;: &amp;quot;bgp&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot; },&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;, &amp;quot;service&amp;quot;: &amp;quot;bgp&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;},&lt;br /&gt;
    { &amp;quot;out&amp;quot;: &amp;quot;INET&amp;quot;, &amp;quot;dest&amp;quot;: &amp;quot;$SUBNETS&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;reject&amp;quot; }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Management interface allowed traffic:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/awall/optional/management.json|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Host Management (ssh, https, ping)&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;import&amp;quot;: [ &amp;quot;zones&amp;quot; ],&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;policy&amp;quot;: [&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;reject&amp;quot; }&lt;br /&gt;
  ],&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;filter&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;DMVPN&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: [ &amp;quot;ping&amp;quot;, &amp;quot;ssh&amp;quot;, &amp;quot;https&amp;quot;, &amp;quot;bgp&amp;quot; ],&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;DMVPN&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: [ &amp;quot;ping&amp;quot;, &amp;quot;ssh&amp;quot;, &amp;quot;http&amp;quot;, &amp;quot;http-alt&amp;quot;, &amp;quot;https&amp;quot;, &amp;quot;dns&amp;quot;, &amp;quot;ntp&amp;quot; ],&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
NHRP redirects rule:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/awall/optional/vpnredirect.json|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;NHRP Traffic Indication Probe&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;log&amp;quot;: {&lt;br /&gt;
    &amp;quot;dmvpn&amp;quot;: {&lt;br /&gt;
       &amp;quot;mode&amp;quot;: &amp;quot;nflog&amp;quot;,&lt;br /&gt;
       &amp;quot;group&amp;quot;: 1,&lt;br /&gt;
       &amp;quot;range&amp;quot;: 128,&lt;br /&gt;
       &amp;quot;limit&amp;quot;: {&lt;br /&gt;
          &amp;quot;count&amp;quot;: 6,&lt;br /&gt;
          &amp;quot;interval&amp;quot;: 60,&lt;br /&gt;
          &amp;quot;mask&amp;quot;: {&lt;br /&gt;
             &amp;quot;inet&amp;quot;: { &amp;quot;src&amp;quot;: 16, &amp;quot;dest&amp;quot;: 16 },&lt;br /&gt;
             &amp;quot;inet6&amp;quot;: { &amp;quot;src&amp;quot;: 48, &amp;quot;dest&amp;quot;: 48 }&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;packet-log&amp;quot;: [ { &amp;quot;in&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;log&amp;quot;: &amp;quot;dmvpn&amp;quot; } ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enable awall rules:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|awall enable zones&lt;br /&gt;
awall enable inet&lt;br /&gt;
awall enable dmvpn&lt;br /&gt;
awall enable vpnredirect&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Apply awall rules:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|awall activate -f &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== IPSEC ==&lt;br /&gt;
Install package(s):&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add strongswan&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/swanctl/swanctl.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
connections {&lt;br /&gt;
        dmvpn {&lt;br /&gt;
                version = 2&lt;br /&gt;
                pull = no&lt;br /&gt;
                mobike = no&lt;br /&gt;
                dpd_delay = 15&lt;br /&gt;
                dpd_timeout = 30&lt;br /&gt;
                fragmentation = yes&lt;br /&gt;
                unique = replace&lt;br /&gt;
                rekey_time = 4h&lt;br /&gt;
                reauth_time = 13h&lt;br /&gt;
                proposals = aes256-sha512-ecp384&lt;br /&gt;
                local {&lt;br /&gt;
                        auth = psk&lt;br /&gt;
                        id = hub&lt;br /&gt;
                }&lt;br /&gt;
                remote {&lt;br /&gt;
                        auth = psk&lt;br /&gt;
                }&lt;br /&gt;
                children {&lt;br /&gt;
                        dmvpn {&lt;br /&gt;
                                esp_proposals = aes256-sha512-ecp384&lt;br /&gt;
                                local_ts = dynamic[gre]&lt;br /&gt;
                                remote_ts = dynamic[gre]&lt;br /&gt;
                                inactivity = 90m&lt;br /&gt;
                                rekey_time = 100m&lt;br /&gt;
                                mode = transport&lt;br /&gt;
                                dpd_action = clear&lt;br /&gt;
                                reqid = 1&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/ipsec.secrets|&lt;br /&gt;
# /etc/ipsec.secrets - strongSwan IPsec secrets file&lt;br /&gt;
&lt;br /&gt;
%any : PSK &amp;quot;cisco12345678987654321&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Start service(s):&lt;br /&gt;
&lt;br /&gt;
{{Cmd|/etc/init.d/charon start&lt;br /&gt;
rc-update add charon}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, test if it works.&lt;br /&gt;
In this example, spoke 1 tries to connect to spoke 3, who announces his subnet 192.168.30.0/24 via iBGP, the gre1 address is 172.16.3.1 and the public ip address is 90.100.150.200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The first traffic goes from through the HUB.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|spoke1:~/root# traceroute -n 192.168.30.1&lt;br /&gt;
traceroute to 192.168.30.1 (192.168.30.1), 30 hops max, 38 byte packets&lt;br /&gt;
 1  172.16.0.1  0.664 ms  0.461 ms  0.457 ms&lt;br /&gt;
 2  192.168.30.1  0.907 ms  0.776 ms  0.771 ms&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Then, once the VPN is created, the traffic goes directly to the spoke node.&lt;br /&gt;
 &lt;br /&gt;
{{Cmd|spoke1:~/root# traceroute -n 192.168.30.1&lt;br /&gt;
traceroute to 192.168.30.1 (192.168.30.1), 30 hops max, 38 byte packets&lt;br /&gt;
 1  192.168.30.1  0.456 ms  0.385 ms  0.357 ms&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With &amp;lt;code&amp;gt;ipsec --status-all&amp;lt;/code&amp;gt; you can see alle the VPNs created:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|spoke1:~/root# ipsec statusall&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Status of IKE charon daemon (strongSwan 5.3.2, Linux 3.18.20-1-grsec, i686):&lt;br /&gt;
  uptime: 9 days, since Aug 28 14:22:27 2015&lt;br /&gt;
  worker threads: 11 of 16 idle, 5/0/0/0 working, job queue: 0/0/0/0, scheduled: 28&lt;br /&gt;
  loaded plugins: charon random nonce x509 revocation constraints pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey pem openssl fips-prf gmp xcbc cmac curl sqlite attr kernel-netlink resolve socket-default farp stroke vici updown eap-identity eap-sim eap-aka eap-aka-3gpp2 eap-simaka-pseudonym eap-simaka-reauth eap-md5 eap-mschapv2 eap-radius eap-tls xauth-generic xauth-eap dhcp unity&lt;br /&gt;
Listening IP addresses:&lt;br /&gt;
  192.168.10.1&lt;br /&gt;
  172.17.50.1&lt;br /&gt;
  172.16.1.1&lt;br /&gt;
Connections:&lt;br /&gt;
       dmvpn:  %any...%any  IKEv2, dpddelay=15s&lt;br /&gt;
       dmvpn:   local:  [spoke1] uses pre-shared key authentication&lt;br /&gt;
       dmvpn:   remote: uses pre-shared key authentication&lt;br /&gt;
       dmvpn:   child:  dynamic[gre] === dynamic[gre] TRANSPORT, dpdaction=clear&lt;br /&gt;
Security Associations (3 up, 0 connecting):&lt;br /&gt;
       dmvpn[121]: ESTABLISHED 4 seconds ago, 172.17.50.1[spoke1]...90.100.150.200[spoke3]&lt;br /&gt;
       dmvpn[121]: IKEv2 SPIs: c770729967ea636c_i 0de8ffedbe32f21c_r*, rekeying in 3 hours, pre-shared key reauthentication in 12 hours&lt;br /&gt;
       dmvpn[121]: IKE proposal: AES_CBC_256/HMAC_SHA2_512_256/PRF_HMAC_SHA2_512/ECP_384&lt;br /&gt;
       dmvpn{187}:  INSTALLED, TRANSPORT, reqid 1, ESP in UDP SPIs: c132e6c3_i c49ae122_o&lt;br /&gt;
       dmvpn{187}:  AES_CBC_256/HMAC_SHA2_512_256, 469 bytes_i (6 pkts, 2s ago), 326 bytes_o (6 pkts, 2s ago), rekeying in 90 minutes&lt;br /&gt;
       dmvpn{187}:   172.17.50.1/32[gre] === 90.100.150.200/32[gre] &lt;br /&gt;
       dmvpn[120]: ESTABLISHED 8 seconds ago, 172.17.50.1[spoke1]...90.100.150.200[spoke3]&lt;br /&gt;
       dmvpn[120]: IKEv2 SPIs: 46f81c8ec9a4b753_i* f768298b31ebe4da_r, rekeying in 3 hours, pre-shared key reauthentication in 11 hours&lt;br /&gt;
       dmvpn[120]: IKE proposal: AES_CBC_256/HMAC_SHA2_512_256/PRF_HMAC_SHA2_512/ECP_384&lt;br /&gt;
       dmvpn{186}:  INSTALLED, TRANSPORT, reqid 1, ESP in UDP SPIs: cad2c1c9_i cd5a287c_o&lt;br /&gt;
       dmvpn{186}:  AES_CBC_256/HMAC_SHA2_512_256, 74 bytes_i (1 pkt, 2s ago), 46 bytes_o (1 pkt, 2s ago), rekeying in 91 minutes&lt;br /&gt;
       dmvpn{186}:   172.17.50.1/32[gre] === 90.100.150.200/32[gre] &lt;br /&gt;
       dmvpn[119]: ESTABLISHED 2 hours ago, 172.17.50.1[spoke1]...50.60.70.80[hub]&lt;br /&gt;
       dmvpn[119]: IKEv2 SPIs: 0e999ad802ced9cc_i* 6eaa469463601437_r, rekeying in 84 minutes, pre-shared key reauthentication in 8 hours&lt;br /&gt;
       dmvpn[119]: IKE proposal: AES_CBC_256/HMAC_SHA2_512_256/PRF_HMAC_SHA2_512/ECP_384&lt;br /&gt;
       dmvpn{185}:  INSTALLED, TRANSPORT, reqid 1, ESP in UDP SPIs: c84d6035_i cb72cd30_o&lt;br /&gt;
       dmvpn{185}:  AES_CBC_256/HMAC_SHA2_512_256, 35764 bytes_i (473 pkts, 0s ago), 38266 bytes_o (384 pkts, 0s ago), rekeying in 46 minutes&lt;br /&gt;
       dmvpn{185}:   172.17.50.1/32[gre] === 50.60.70.80/32[gre] &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Dynamic_Multipoint_VPN_(DMVPN)_Phase_3_with_Quagga_NHRPd&amp;diff=11197</id>
		<title>Dynamic Multipoint VPN (DMVPN) Phase 3 with Quagga NHRPd</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Dynamic_Multipoint_VPN_(DMVPN)_Phase_3_with_Quagga_NHRPd&amp;diff=11197"/>
		<updated>2015-09-08T08:20:26Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: Created page with &amp;quot;= THIS DOC IS STILL A DRAFT =  = Overview = This is a follow-up of the most famous document [http://wiki.alpinelinux.org/wiki/Dynamic_Multipoint_VPN_(DMVPN)], since opennhrp h...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= THIS DOC IS STILL A DRAFT =&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
This is a follow-up of the most famous document [http://wiki.alpinelinux.org/wiki/Dynamic_Multipoint_VPN_(DMVPN)],&lt;br /&gt;
since opennhrp has been rewritten as quagga plugin [1], supporting interoperability with new Cisco&#039;s FlexVPN and Strongswan.&lt;br /&gt;
&lt;br /&gt;
This NHRP implementation has some limits yet (Multicast is not ready, so you need to use BGP rather than OSPF), though is usable in a production environment.&lt;br /&gt;
&lt;br /&gt;
{{Note|This document assumes that all Alpine installations are run in [[Installation#Basics|diskless mode]] and that the configuration is saved on USB key}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This How-To will show you how to configure a DMVPN solution with this key items:&lt;br /&gt;
&lt;br /&gt;
.1 VPN setup with Strongswan with PSK for the authentication (same PSK between all of the spokes and hub)&lt;br /&gt;
&lt;br /&gt;
.2 DMVPN setup with quagga.nhrpd; &lt;br /&gt;
&lt;br /&gt;
.3 iBGP used for announce LAN subnet&lt;br /&gt;
&lt;br /&gt;
.4 Awall rules to allow NHRP shortcuts between spokes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The goal is making private network of spoke&#039;s nodes and hub to communicate each other over VPN created dynamically.&lt;br /&gt;
Routes are learned via BGP, and hte IPSEC VPN is authenticated via PSK.&lt;br /&gt;
&lt;br /&gt;
The logical setup is configured as shown:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Terminology =&lt;br /&gt;
;NBMA: &#039;&#039;Non-Broadcast Multi-Access&#039;&#039; network as described in [http://tools.ietf.org/html/rfc2332 RFC 2332]&lt;br /&gt;
&lt;br /&gt;
;Hub: the &#039;&#039;Next Hop Server&#039;&#039; (NHS) performing the Next Hop Resolution Protocol service within the NBMA cloud.&lt;br /&gt;
&lt;br /&gt;
;Spoke: the &#039;&#039;Next Hop Resolution Protocol Client&#039;&#039; (NHC) which initiates NHRP requests of various types in order to obtain access to the NHRP service.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
&lt;br /&gt;
For supporting VIA Padlock engine enable its modules:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|echo -e &amp;quot;padlock_aes\npadlock-sha&amp;quot; &amp;gt;&amp;gt; /etc/modules}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Alpine Installation =&lt;br /&gt;
&lt;br /&gt;
Follow the instructions on  http://wiki.alpinelinux.org/wiki/Create_a_Bootable_USB about how to create a bootable USB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Spoke Nodes =&lt;br /&gt;
&lt;br /&gt;
== Spoke Node 1 ==&lt;br /&gt;
&lt;br /&gt;
== Networking ==&lt;br /&gt;
&lt;br /&gt;
We&#039;re going to setup the spoke node 1 as follow:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Host&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Interface&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Subnet&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;|Spoke 1&lt;br /&gt;
|eth0&lt;br /&gt;
|Internet&lt;br /&gt;
|DHCP&lt;br /&gt;
|-&lt;br /&gt;
|eth1&lt;br /&gt;
|LAN&lt;br /&gt;
|192.168.10.0/24&lt;br /&gt;
|-&lt;br /&gt;
|gre1&lt;br /&gt;
|Tunnel&lt;br /&gt;
|172.16.1.1 &lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;|Spoke 2&lt;br /&gt;
|eth0&lt;br /&gt;
|Internet&lt;br /&gt;
|DHCP&lt;br /&gt;
|-&lt;br /&gt;
|eth1&lt;br /&gt;
|LAN&lt;br /&gt;
|192.168.20.0/24&lt;br /&gt;
|-&lt;br /&gt;
|gre1&lt;br /&gt;
|Tunnel&lt;br /&gt;
|172.16.2.1 &lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;3&amp;quot;|Spoke 3&lt;br /&gt;
|eth0&lt;br /&gt;
|Internet&lt;br /&gt;
|90.100.150.200&lt;br /&gt;
|-&lt;br /&gt;
|eth1&lt;br /&gt;
|LAN&lt;br /&gt;
|192.168.30.0/24&lt;br /&gt;
|-&lt;br /&gt;
|gre1&lt;br /&gt;
|Tunnel&lt;br /&gt;
|172.16.3.1 &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With your favorite editor open &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; and add interfaces:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/network/interfaces|&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet dhcp&lt;br /&gt;
        &lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 192.168.10.1&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== SSH ==&lt;br /&gt;
Remove password authentication and DNS reverse lookup:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|sed -i &amp;quot;s/.PasswordAuthentication yes/PasswordAuthentication no/&amp;quot; /etc/ssh/sshd_config&lt;br /&gt;
sed -i &amp;quot;s/.UseDNS yes/UseDNS no/&amp;quot; /etc/ssh/sshd_config}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Restart ssh:&lt;br /&gt;
{{Cmd|/etc/init.d/sshd restart}}&lt;br /&gt;
&lt;br /&gt;
== GRE Tunnel ==&lt;br /&gt;
With your favorite editor open &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; and add the following:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/network/interfaces|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
auto gre1&lt;br /&gt;
iface gre1 inet static&lt;br /&gt;
        pre-up ip tunnel add gre1 mode gre key 42 ttl 64 dev eth0 || true&lt;br /&gt;
        address 172.16.1.1&lt;br /&gt;
        netmask 255.255.255.255&lt;br /&gt;
        post-down ip tunnel del $IFACE || true&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Bring up the new &amp;lt;code&amp;gt;gre1&amp;lt;/code&amp;gt; interface:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|ifup gre1}}&lt;br /&gt;
&lt;br /&gt;
== IPSEC ==&lt;br /&gt;
Install package(s):&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add strongswan&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/swanctl/swanctl.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
connections {&lt;br /&gt;
        dmvpn {&lt;br /&gt;
                version = 2&lt;br /&gt;
                pull = no&lt;br /&gt;
                mobike = no&lt;br /&gt;
                dpd_delay = 15&lt;br /&gt;
                dpd_timeout = 30&lt;br /&gt;
                fragmentation = yes&lt;br /&gt;
                unique = replace&lt;br /&gt;
                rekey_time = 4h&lt;br /&gt;
                reauth_time = 13h&lt;br /&gt;
                proposals = aes256-sha512-ecp384&lt;br /&gt;
                local {&lt;br /&gt;
                        auth = psk&lt;br /&gt;
                        id = spoke1&lt;br /&gt;
                }&lt;br /&gt;
                remote {&lt;br /&gt;
                        auth = psk&lt;br /&gt;
                }&lt;br /&gt;
                children {&lt;br /&gt;
                        dmvpn {&lt;br /&gt;
                                esp_proposals = aes256-sha512-ecp384&lt;br /&gt;
                                local_ts = dynamic[gre]&lt;br /&gt;
                                remote_ts = dynamic[gre]&lt;br /&gt;
                                inactivity = 90m&lt;br /&gt;
                                rekey_time = 100m&lt;br /&gt;
                                mode = transport&lt;br /&gt;
                                dpd_action = clear&lt;br /&gt;
                                reqid = 1&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/ipsec.secrets|&lt;br /&gt;
# /etc/ipsec.secrets - strongSwan IPsec secrets file&lt;br /&gt;
&lt;br /&gt;
%any : PSK &amp;quot;cisco12345678987654321&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Start service(s):&lt;br /&gt;
&lt;br /&gt;
{{Cmd|/etc/init.d/charon start&lt;br /&gt;
rc-update add charon}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Routing ==&lt;br /&gt;
&lt;br /&gt;
This section will configure the routing protocol suite quagga patched with NHRP support.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add quagga-nhrp&lt;br /&gt;
touch /etc/quagga/zebra.conf /etc/quagga/bgpd.conf /etc/quagga/nhrpd.conf}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fix permissions:&lt;br /&gt;
{{Cmd|chown -R quagga:quagga /etc/quagga}}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Start all the daemons:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|/etc/init.d/zebra start&lt;br /&gt;
/etc/init.d/bgpd start&lt;br /&gt;
/etc/init.d/nhrpd start&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Configure it to start from boot:&lt;br /&gt;
{{Cmd|rc-update add zebra nhrpd bgpd}}&lt;br /&gt;
&lt;br /&gt;
Now  we&#039;re going to configure it with &amp;lt;code&amp;gt;vtysh&amp;lt;/code&amp;gt; cli:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|vtysh&lt;br /&gt;
&lt;br /&gt;
configure terminal&lt;br /&gt;
log syslog&lt;br /&gt;
debug nhrp common&lt;br /&gt;
&lt;br /&gt;
router bgp 65000&lt;br /&gt;
 bgp router-id 172.16.1.1&lt;br /&gt;
 network 192.168.10.0/24&lt;br /&gt;
 neighbor spokes-ibgp peer-group&lt;br /&gt;
 neighbor spokes-ibgp remote-as 65000&lt;br /&gt;
 neighbor spokes-ibgp ebgp-multihop 1&lt;br /&gt;
 neighbor spokes-ibgp disable-connected-check&lt;br /&gt;
 neighbor spokes-ibgp advertisement-interval 1&lt;br /&gt;
 neighbor spokes-ibgp next-hop-self&lt;br /&gt;
 neighbor spokes-ibgp soft-reconfiguration inbound&lt;br /&gt;
 neighbor 172.16.0.1 peer-group spokes-ibgp&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
nhrp nflog-group 1&lt;br /&gt;
interface gre1&lt;br /&gt;
 ip nhrp network-id 1&lt;br /&gt;
 ip nhrp nhs dynamic nbma 50.60.70.80&lt;br /&gt;
 ip nhrp registration no-unique&lt;br /&gt;
 ip nhrp shortcut&lt;br /&gt;
 ipv6 nd suppress-ra&lt;br /&gt;
 no link-detect&lt;br /&gt;
 tunnel protection vici profile dmvpn&lt;br /&gt;
 tunnel source eth0&lt;br /&gt;
 exit&lt;br /&gt;
write mem&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Hub Node =&lt;br /&gt;
&lt;br /&gt;
We will document only what changes from the Spoke node setup.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Networking ==&lt;br /&gt;
&lt;br /&gt;
The NHS (Hub) has the following settings:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!&#039;&#039;&#039;Host&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Interface&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
!&#039;&#039;&#039;Subnet&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|rowspan=&amp;quot;2&amp;quot;|Hub&lt;br /&gt;
|eth0&lt;br /&gt;
|Internet&lt;br /&gt;
|50.60.70.80&lt;br /&gt;
|-&lt;br /&gt;
|eth1&lt;br /&gt;
|LAN&lt;br /&gt;
|192.168.1.0/24&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With your favorite editor open &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; and add interfaces:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/network/interfaces|&lt;br /&gt;
auto lo&lt;br /&gt;
iface lo inet loopback&lt;br /&gt;
&lt;br /&gt;
auto eth0&lt;br /&gt;
iface eth0 inet static&lt;br /&gt;
    address 50.60.70.80&lt;br /&gt;
    netmask 255.255.255.0&lt;br /&gt;
    gateway 50.60.70.1&lt;br /&gt;
        &lt;br /&gt;
auto eth1&lt;br /&gt;
iface eth1 inet static&lt;br /&gt;
        address 192.168.1.1&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== GRE Tunnel ==&lt;br /&gt;
With your favorite editor open &amp;lt;code&amp;gt;/etc/network/interfaces&amp;lt;/code&amp;gt; and add the following:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/network/interfaces|&lt;br /&gt;
auto gre1&lt;br /&gt;
iface gre1 inet static&lt;br /&gt;
        pre-up ip tunnel add gre1 mode gre key 42 ttl 64 dev eth0 || true&lt;br /&gt;
        address 172.16.0.1&lt;br /&gt;
        netmask 255.255.255.255&lt;br /&gt;
        post-down ip tunnel del $IFACE || true&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Bring up the new gre1 interface:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|ifup gre1}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Routing ==&lt;br /&gt;
&lt;br /&gt;
Again, routing is configured directly with &amp;lt;code&amp;gt;vtysh&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Cmd|vtysh&lt;br /&gt;
&lt;br /&gt;
configure terminal&lt;br /&gt;
log syslog&lt;br /&gt;
debug nhrp common&lt;br /&gt;
&lt;br /&gt;
router bgp 65000&lt;br /&gt;
 bgp router-id 172.16.0.1&lt;br /&gt;
 bgp deterministic-med&lt;br /&gt;
 network 172.16.0.0/16&lt;br /&gt;
 redistribute nhrp&lt;br /&gt;
 neighbor spokes-ibgp peer-group&lt;br /&gt;
 neighbor spokes-ibgp remote-as 65000&lt;br /&gt;
 neighbor spokes-ibgp ebgp-multihop 1&lt;br /&gt;
 neighbor spokes-ibgp disable-connected-check&lt;br /&gt;
 neighbor spokes-ibgp route-reflector-client&lt;br /&gt;
 neighbor spokes-ibgp next-hop-self all&lt;br /&gt;
 neighbor spokes-ibgp advertisement-interval 1&lt;br /&gt;
 neighbor spokes-ibgp soft-reconfiguration inbound&lt;br /&gt;
 neighbor 172.16.1.1 peer-group spokes-ibgp&lt;br /&gt;
exit&lt;br /&gt;
&lt;br /&gt;
interface gre1&lt;br /&gt;
 ip nhrp network-id 1&lt;br /&gt;
 ip nhrp nhs dynamic nbma 50.60.70.80&lt;br /&gt;
 ip nhrp registration no-unique&lt;br /&gt;
 ip nhrp shortcut&lt;br /&gt;
 ipv6 nd suppress-ra&lt;br /&gt;
 no link-detect&lt;br /&gt;
 tunnel protection vici profile dmvpn&lt;br /&gt;
 tunnel source eth0&lt;br /&gt;
 exit&lt;br /&gt;
write mem&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Add the lines &amp;lt;code&amp;gt;neighbor %Spoke1_GRE_IP%...&amp;lt;/code&amp;gt; for each spoke node you have.&lt;br /&gt;
For instance, if you want to add spoke node with gre1 address 172.16.3.1: &lt;br /&gt;
&lt;br /&gt;
{{Cmd|vtysh&lt;br /&gt;
conf t&lt;br /&gt;
router bgp 65000&lt;br /&gt;
neighbor 172.16.3.1 peer-group spokes-ibgp&lt;br /&gt;
exit&lt;br /&gt;
write mem&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Awall ==&lt;br /&gt;
&lt;br /&gt;
Differently from DMVPN Phase 2, in the Phase 3 DMVPN the HUB is the default gateway for all the spokes, then the spokes are able to communicate directly each other by means of NHRP redirects.&lt;br /&gt;
&lt;br /&gt;
(For a good explanation of the differences between Phase 1, Phase 2 and Phase 3 DMVPN, see http://blog.ine.com/2008/12/23/dmvpn-phase-3/).&lt;br /&gt;
&lt;br /&gt;
This is implemented by sending traffic indication notifications with iptables nflog.&lt;br /&gt;
&lt;br /&gt;
This is the  complete firewall configuration for the HUB, using Alpine Firewall Framework, Awall [http://wiki.alpinelinux.org/wiki/Alpine_Wall].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With your favorite editor open &amp;lt;code&amp;gt;/etc/awall/optional/zones.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/awall/optional/zones.json|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Zones - zone definition for management&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;variable&amp;quot;: {&lt;br /&gt;
        &amp;quot;SUBNETS&amp;quot;: [ &amp;quot;192.168.0.0/16&amp;quot;, &amp;quot;172.16.0.0/16&amp;quot; ]&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;zone&amp;quot;: {&lt;br /&gt;
    &amp;quot;DMVPN&amp;quot;: { &amp;quot;addr&amp;quot;: &amp;quot;$SUBNETS&amp;quot; }&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, create &amp;lt;code&amp;gt;/etc/awall/optional/inet.json&amp;lt;/code&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/awall/optional/inet.json|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Internet - Host Management (rate limited)&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;zone&amp;quot;: {&lt;br /&gt;
    &amp;quot;INET&amp;quot;: { &amp;quot;iface&amp;quot;: &amp;quot;eth0&amp;quot; }&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;policy&amp;quot;: [&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;INET&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;drop&amp;quot; }&lt;br /&gt;
  ],&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;filter&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;INET&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;ping&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;,&lt;br /&gt;
      &amp;quot;flow-limit&amp;quot;: { &amp;quot;count&amp;quot;: 10, &amp;quot;interval&amp;quot;: 6 }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;INET&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;ssh&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;,&lt;br /&gt;
      &amp;quot;conn-limit&amp;quot;: { &amp;quot;count&amp;quot;: 3, &amp;quot;interval&amp;quot;: 60 }&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;INET&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: [ &amp;quot;dns&amp;quot;, &amp;quot;http&amp;quot;, &amp;quot;ntp&amp;quot; ],&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: [ &amp;quot;ping&amp;quot;, &amp;quot;ssh&amp;quot; ],&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Now, the DMVPN rule:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/awall/optional/dmvpn.json|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;DMVPN specific rules&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;import&amp;quot;: [ &amp;quot;inet&amp;quot;, &amp;quot;zones&amp;quot; ],&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;variable&amp;quot;: {&lt;br /&gt;
    &amp;quot;HUB&amp;quot;: true&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;policy&amp;quot;: [&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot; }&lt;br /&gt;
  ],&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;zone&amp;quot;: {&lt;br /&gt;
    &amp;quot;DMVPN&amp;quot;: { &amp;quot;iface&amp;quot;: &amp;quot;gre1&amp;quot;, &amp;quot;addr&amp;quot;: &amp;quot;$SUBNETS&amp;quot;, &amp;quot;route-back&amp;quot;: &amp;quot;$HUB&amp;quot; }&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;filter&amp;quot;: [&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;INET&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;, &amp;quot;service&amp;quot;: &amp;quot;ipsec&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot; },&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;INET&amp;quot;, &amp;quot;service&amp;quot;: &amp;quot;ipsec&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot; },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;INET&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;ipsec&amp;quot;: &amp;quot;in&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;gre&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;INET&amp;quot;,&lt;br /&gt;
      &amp;quot;ipsec&amp;quot;: &amp;quot;out&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: &amp;quot;gre&amp;quot;,&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;service&amp;quot;: &amp;quot;bgp&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot; },&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;, &amp;quot;service&amp;quot;: &amp;quot;bgp&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;},&lt;br /&gt;
    { &amp;quot;out&amp;quot;: &amp;quot;INET&amp;quot;, &amp;quot;dest&amp;quot;: &amp;quot;$SUBNETS&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;reject&amp;quot; }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Management interface allowed traffic:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/awall/optional/management.json|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;Host Management (ssh, https, ping)&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;import&amp;quot;: [ &amp;quot;zones&amp;quot; ],&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;policy&amp;quot;: [&lt;br /&gt;
    { &amp;quot;in&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;, &amp;quot;action&amp;quot;: &amp;quot;reject&amp;quot; }&lt;br /&gt;
  ],&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;filter&amp;quot;: [&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;DMVPN&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: [ &amp;quot;ping&amp;quot;, &amp;quot;ssh&amp;quot;, &amp;quot;https&amp;quot;, &amp;quot;bgp&amp;quot; ],&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    },&lt;br /&gt;
    {&lt;br /&gt;
      &amp;quot;in&amp;quot;: &amp;quot;_fw&amp;quot;,&lt;br /&gt;
      &amp;quot;out&amp;quot;: &amp;quot;DMVPN&amp;quot;,&lt;br /&gt;
      &amp;quot;service&amp;quot;: [ &amp;quot;ping&amp;quot;, &amp;quot;ssh&amp;quot;, &amp;quot;http&amp;quot;, &amp;quot;http-alt&amp;quot;, &amp;quot;https&amp;quot;, &amp;quot;dns&amp;quot;, &amp;quot;ntp&amp;quot; ],&lt;br /&gt;
      &amp;quot;action&amp;quot;: &amp;quot;accept&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
  ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
NHRP redirects rule:&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/awall/optional/vpnredirect.json|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
{&lt;br /&gt;
  &amp;quot;description&amp;quot;: &amp;quot;NHRP Traffic Indication Probe&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;log&amp;quot;: {&lt;br /&gt;
    &amp;quot;dmvpn&amp;quot;: {&lt;br /&gt;
       &amp;quot;mode&amp;quot;: &amp;quot;nflog&amp;quot;,&lt;br /&gt;
       &amp;quot;group&amp;quot;: 1,&lt;br /&gt;
       &amp;quot;range&amp;quot;: 128,&lt;br /&gt;
       &amp;quot;limit&amp;quot;: {&lt;br /&gt;
          &amp;quot;count&amp;quot;: 6,&lt;br /&gt;
          &amp;quot;interval&amp;quot;: 60,&lt;br /&gt;
          &amp;quot;mask&amp;quot;: {&lt;br /&gt;
             &amp;quot;inet&amp;quot;: { &amp;quot;src&amp;quot;: 16, &amp;quot;dest&amp;quot;: 16 },&lt;br /&gt;
             &amp;quot;inet6&amp;quot;: { &amp;quot;src&amp;quot;: 48, &amp;quot;dest&amp;quot;: 48 }&lt;br /&gt;
          }&lt;br /&gt;
       }&lt;br /&gt;
    }&lt;br /&gt;
  },&lt;br /&gt;
&lt;br /&gt;
  &amp;quot;packet-log&amp;quot;: [ { &amp;quot;in&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;out&amp;quot;: &amp;quot;DMVPN&amp;quot;, &amp;quot;log&amp;quot;: &amp;quot;dmvpn&amp;quot; } ]&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Enable awall rules:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|awall enable zones&lt;br /&gt;
awall enable inet&lt;br /&gt;
awall enable dmvpn&lt;br /&gt;
awall enable vpnredirect&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Apply awall rules:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|awall activate -f &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== IPSEC ==&lt;br /&gt;
Install package(s):&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add strongswan&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/swanctl/swanctl.conf|&amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
connections {&lt;br /&gt;
        dmvpn {&lt;br /&gt;
                version = 2&lt;br /&gt;
                pull = no&lt;br /&gt;
                mobike = no&lt;br /&gt;
                dpd_delay = 15&lt;br /&gt;
                dpd_timeout = 30&lt;br /&gt;
                fragmentation = yes&lt;br /&gt;
                unique = replace&lt;br /&gt;
                rekey_time = 4h&lt;br /&gt;
                reauth_time = 13h&lt;br /&gt;
                proposals = aes256-sha512-ecp384&lt;br /&gt;
                local {&lt;br /&gt;
                        auth = psk&lt;br /&gt;
                        id = hub&lt;br /&gt;
                }&lt;br /&gt;
                remote {&lt;br /&gt;
                        auth = psk&lt;br /&gt;
                }&lt;br /&gt;
                children {&lt;br /&gt;
                        dmvpn {&lt;br /&gt;
                                esp_proposals = aes256-sha512-ecp384&lt;br /&gt;
                                local_ts = dynamic[gre]&lt;br /&gt;
                                remote_ts = dynamic[gre]&lt;br /&gt;
                                inactivity = 90m&lt;br /&gt;
                                rekey_time = 100m&lt;br /&gt;
                                mode = transport&lt;br /&gt;
                                dpd_action = clear&lt;br /&gt;
                                reqid = 1&lt;br /&gt;
                        }&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{cat|/etc/ipsec.secrets|&lt;br /&gt;
# /etc/ipsec.secrets - strongSwan IPsec secrets file&lt;br /&gt;
&lt;br /&gt;
%any : PSK &amp;quot;cisco12345678987654321&amp;quot;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Start service(s):&lt;br /&gt;
&lt;br /&gt;
{{Cmd|/etc/init.d/charon start&lt;br /&gt;
rc-update add charon}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, test if it works.&lt;br /&gt;
In this example, spoke 1 tries to connect to spoke 3, who announces his subnet 192.168.30.0/24 via iBGP, the gre1 address is 172.16.3.1 and the public ip address is 90.100.150.200.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The first traffic goes from through the HUB.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|spoke1:~/root# traceroute -n 192.168.30.1&lt;br /&gt;
traceroute to 192.168.30.1 (192.168.30.1), 30 hops max, 38 byte packets&lt;br /&gt;
 1  172.16.0.1  0.664 ms  0.461 ms  0.457 ms&lt;br /&gt;
 2  192.168.30.1  0.907 ms  0.776 ms  0.771 ms&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Then, once the VPN is created, the traffic goes directly to the spoke node.&lt;br /&gt;
 &lt;br /&gt;
{{Cmd|spoke1:~/root# traceroute -n 192.168.30.1&lt;br /&gt;
traceroute to 192.168.30.1 (192.168.30.1), 30 hops max, 38 byte packets&lt;br /&gt;
 1  192.168.30.1  0.456 ms  0.385 ms  0.357 ms&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
With &amp;lt;code&amp;gt;ipsec --status-all&amp;lt;/code&amp;gt; you can see alle the VPNs created:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|spoke1:~/root# ipsec statusall&amp;lt;nowiki&amp;gt;&lt;br /&gt;
Status of IKE charon daemon (strongSwan 5.3.2, Linux 3.18.20-1-grsec, i686):&lt;br /&gt;
  uptime: 9 days, since Aug 28 14:22:27 2015&lt;br /&gt;
  worker threads: 11 of 16 idle, 5/0/0/0 working, job queue: 0/0/0/0, scheduled: 28&lt;br /&gt;
  loaded plugins: charon random nonce x509 revocation constraints pubkey pkcs1 pkcs7 pkcs8 pkcs12 pgp dnskey sshkey pem openssl fips-prf gmp xcbc cmac curl sqlite attr kernel-netlink resolve socket-default farp stroke vici updown eap-identity eap-sim eap-aka eap-aka-3gpp2 eap-simaka-pseudonym eap-simaka-reauth eap-md5 eap-mschapv2 eap-radius eap-tls xauth-generic xauth-eap dhcp unity&lt;br /&gt;
Listening IP addresses:&lt;br /&gt;
  192.168.10.1&lt;br /&gt;
  172.17.50.1&lt;br /&gt;
  172.16.1.1&lt;br /&gt;
Connections:&lt;br /&gt;
       dmvpn:  %any...%any  IKEv2, dpddelay=15s&lt;br /&gt;
       dmvpn:   local:  [spoke1] uses pre-shared key authentication&lt;br /&gt;
       dmvpn:   remote: uses pre-shared key authentication&lt;br /&gt;
       dmvpn:   child:  dynamic[gre] === dynamic[gre] TRANSPORT, dpdaction=clear&lt;br /&gt;
Security Associations (3 up, 0 connecting):&lt;br /&gt;
       dmvpn[121]: ESTABLISHED 4 seconds ago, 172.17.50.1[spoke1]...90.100.150.200[spoke3]&lt;br /&gt;
       dmvpn[121]: IKEv2 SPIs: c770729967ea636c_i 0de8ffedbe32f21c_r*, rekeying in 3 hours, pre-shared key reauthentication in 12 hours&lt;br /&gt;
       dmvpn[121]: IKE proposal: AES_CBC_256/HMAC_SHA2_512_256/PRF_HMAC_SHA2_512/ECP_384&lt;br /&gt;
       dmvpn{187}:  INSTALLED, TRANSPORT, reqid 1, ESP in UDP SPIs: c132e6c3_i c49ae122_o&lt;br /&gt;
       dmvpn{187}:  AES_CBC_256/HMAC_SHA2_512_256, 469 bytes_i (6 pkts, 2s ago), 326 bytes_o (6 pkts, 2s ago), rekeying in 90 minutes&lt;br /&gt;
       dmvpn{187}:   172.17.50.1/32[gre] === 90.100.150.200/32[gre] &lt;br /&gt;
       dmvpn[120]: ESTABLISHED 8 seconds ago, 172.17.50.1[spoke1]...90.100.150.200[spoke3]&lt;br /&gt;
       dmvpn[120]: IKEv2 SPIs: 46f81c8ec9a4b753_i* f768298b31ebe4da_r, rekeying in 3 hours, pre-shared key reauthentication in 11 hours&lt;br /&gt;
       dmvpn[120]: IKE proposal: AES_CBC_256/HMAC_SHA2_512_256/PRF_HMAC_SHA2_512/ECP_384&lt;br /&gt;
       dmvpn{186}:  INSTALLED, TRANSPORT, reqid 1, ESP in UDP SPIs: cad2c1c9_i cd5a287c_o&lt;br /&gt;
       dmvpn{186}:  AES_CBC_256/HMAC_SHA2_512_256, 74 bytes_i (1 pkt, 2s ago), 46 bytes_o (1 pkt, 2s ago), rekeying in 91 minutes&lt;br /&gt;
       dmvpn{186}:   172.17.50.1/32[gre] === 90.100.150.200/32[gre] &lt;br /&gt;
       dmvpn[119]: ESTABLISHED 2 hours ago, 172.17.50.1[spoke1]...50.60.70.80[hub]&lt;br /&gt;
       dmvpn[119]: IKEv2 SPIs: 0e999ad802ced9cc_i* 6eaa469463601437_r, rekeying in 84 minutes, pre-shared key reauthentication in 8 hours&lt;br /&gt;
       dmvpn[119]: IKE proposal: AES_CBC_256/HMAC_SHA2_512_256/PRF_HMAC_SHA2_512/ECP_384&lt;br /&gt;
       dmvpn{185}:  INSTALLED, TRANSPORT, reqid 1, ESP in UDP SPIs: c84d6035_i cb72cd30_o&lt;br /&gt;
       dmvpn{185}:  AES_CBC_256/HMAC_SHA2_512_256, 35764 bytes_i (473 pkts, 0s ago), 38266 bytes_o (384 pkts, 0s ago), rekeying in 46 minutes&lt;br /&gt;
       dmvpn{185}:   172.17.50.1/32[gre] === 50.60.70.80/32[gre] &lt;br /&gt;
&amp;lt;/nowiki&amp;gt;}}&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Patch_Workflow&amp;diff=11076</id>
		<title>Patch Workflow</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Patch_Workflow&amp;diff=11076"/>
		<updated>2015-07-20T07:55:39Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: Added &amp;quot;how to submit a patch&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a &#039;&#039;&#039;very draft&#039;&#039;&#039; docs that aims to have a defined workflow for sending and applying patch.&lt;br /&gt;
&lt;br /&gt;
It provides a background both for alpine developers and contributors.&lt;br /&gt;
&lt;br /&gt;
It&#039;s in the form of FAQ, but it might be changed with a better approach.&lt;br /&gt;
&lt;br /&gt;
Also, a graphical workflow would be useful. A nice idea is here: [https://sourceware.org/glibc/wiki/Patch%20Review%20Workflow]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== I want to contribute to Alpine project by sending patches.  How can i do this? == &lt;br /&gt;
&lt;br /&gt;
First of all, thanks :)&lt;br /&gt;
&lt;br /&gt;
Please, take a look at http://wiki.alpinelinux.org/wiki/Development_using_git and docs linked to it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== How should i submit a patch to alpine-aports ML?  == &lt;br /&gt;
&lt;br /&gt;
You can follow this document: http://wiki.alpinelinux.org/wiki/Creating_patches&lt;br /&gt;
&lt;br /&gt;
Please note that Patchwork is able to catch the patch if they are sent inline, rather than as attachment.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Ok, now i&#039;ve an aports git tree ready and i&#039;ve sent a patch to alpine-aports ML. And now? ==&lt;br /&gt;
&lt;br /&gt;
Well done. Now the patch is in our workflow.&lt;br /&gt;
&lt;br /&gt;
After you&#039;ve sent the patch, it is going to be injected in patchwork.alpinelinux.org.&lt;br /&gt;
&lt;br /&gt;
There&#039;s a web interface where you can see all the patches sent to git.&lt;br /&gt;
&lt;br /&gt;
From there,  alpine delevopers will check the patch and proceed accordingly.&lt;br /&gt;
&lt;br /&gt;
Workflow status are:&lt;br /&gt;
&lt;br /&gt;
New:&lt;br /&gt;
    Patch has been submitted to the list, and none of the maintainers has changed it&#039;s state since. Under Review:: &lt;br /&gt;
Accepted:&lt;br /&gt;
    When a patch has been applied to a custodian repository that gets used for pulling from into upstream, they are put into &amp;quot;accepted&amp;quot; state. &lt;br /&gt;
Rejected:&lt;br /&gt;
    Rejected means we just don&#039;t want to do what the patch does. &lt;br /&gt;
RFC:&lt;br /&gt;
    The patch is not intended to be applied to any of the mainline repositories, but merely for discussing or testing some idea or new feature. &lt;br /&gt;
Not Applicable:&lt;br /&gt;
    The patch does not apply cleanly against the current U-Boot repository, most probably because it was made against a much older version of U-Boot, or because the submitter&#039;s mailer mangled it (for example by converting TABs into SPACEs, or by breaking long lines). &lt;br /&gt;
Changes Requested:&lt;br /&gt;
    The patch looks mostly OK, but requires some rework before it will be accepted for mainline. Awaiting Upstream:: &lt;br /&gt;
Superseeded:&lt;br /&gt;
    Patches are marked as &#039;superseeded&#039; when the poster submits a new version of these patches. &lt;br /&gt;
Deferred:&lt;br /&gt;
    Deferred usually means the patch depends on something else that isn&#039;t upstream, such as patches that only apply against some specific other repository. &lt;br /&gt;
Archived:&lt;br /&gt;
    Archiving puts the patch away somewhere where it doesn&#039;t appear in the normal pages and needs extra effort to get to. &lt;br /&gt;
&lt;br /&gt;
We also can put patches in a &amp;quot;bundle&amp;quot;. I don&#039;t know yet if that has any deeper sense but to mark them to be handled together, like a patch series that logically belongs together. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Set &amp;quot;approved&amp;quot; on webif does not have an impact on the git tree.&lt;br /&gt;
If is actually approved, after pwclient git-am the state of the patch will automatically be changed to &amp;quot;approved&amp;quot;.&lt;br /&gt;
This is the right way to change state.&lt;br /&gt;
Generally speaking, change the state on webif is not needed.&lt;br /&gt;
Webpage only report what the user does with pwclient tool.&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== I&#039;m an alpine developer. How can I start to use patchwork ? ==  &lt;br /&gt;
&lt;br /&gt;
There are two ways to work with patches from alpine-aports Mailing List:&lt;br /&gt;
&lt;br /&gt;
.1 Web Interface: https://patchwork.alpinelinux.org/&lt;br /&gt;
&lt;br /&gt;
.2 On your local build environment, you need pwclient:&lt;br /&gt;
&lt;br /&gt;
    apk add pwclient &lt;br /&gt;
    cd $your_aports_dir&lt;br /&gt;
    pwclient list&lt;br /&gt;
&lt;br /&gt;
This command returns the list of patches sent to alpine-aports@lists.alpinelinux.org and injected in patchwork workflow.&lt;br /&gt;
&lt;br /&gt;
look at the patch:&lt;br /&gt;
&lt;br /&gt;
    pwclient view $PATCH_ID.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s assume is 66:&lt;br /&gt;
&lt;br /&gt;
    pwclient view 66&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
host:~/aports$ pwclient view 66&lt;br /&gt;
Content-Type: text/plain; charset=&amp;quot;utf-8&amp;quot;&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Transfer-Encoding: 7bit&lt;br /&gt;
Subject: [alpine-aports] testing/proxychains-ng: install and install-config&lt;br /&gt;
 returns 1 in case of error&lt;br /&gt;
From: Francesco Colista &amp;lt;fcolista@alpinelinux.org&amp;gt;&lt;br /&gt;
X-Patchwork-Id: 66&lt;br /&gt;
Message-Id: &amp;lt;1430294296-26952-1-git-send-email-fcolista@alpinelinux.org&amp;gt;&lt;br /&gt;
To: alpine-aports@lists.alpinelinux.org&lt;br /&gt;
Cc: Francesco Colista &amp;lt;fcolista@alpinelinux.org&amp;gt;&lt;br /&gt;
Date: Wed, 29 Apr 2015 07:58:16 +0000&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
 testing/proxychains-ng/APKBUILD | 5 ++---&lt;br /&gt;
 1 file changed, 2 insertions(+), 3 deletions(-)&lt;br /&gt;
&lt;br /&gt;
diff --git a/testing/proxychains-ng/APKBUILD b/testing/proxychains-ng/APKBUILD&lt;br /&gt;
index 463a2ac..b40ba25 100644&lt;br /&gt;
--- a/testing/proxychains-ng/APKBUILD&lt;br /&gt;
+++ b/testing/proxychains-ng/APKBUILD&lt;br /&gt;
@@ -2,7 +2,7 @@&lt;br /&gt;
 # Maintainer: Francesco Colista &amp;lt;fcolista@alpinelinux.org&amp;gt;&lt;br /&gt;
 pkgname=proxychains-ng&lt;br /&gt;
 pkgver=4.8.1&lt;br /&gt;
-pkgrel=0&lt;br /&gt;
+pkgrel=1&lt;br /&gt;
 pkgdesc=&amp;quot;This tool provides proxy server support to any app.&amp;quot;&lt;br /&gt;
 url=&amp;quot;https://github.com/rofl0r/proxychains-ng&amp;quot;&lt;br /&gt;
 arch=&amp;quot;all&amp;quot;&lt;br /&gt;
@@ -36,8 +36,7 @@ build() {&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&lt;br /&gt;
-       make DESTDIR=&amp;quot;$pkgdir&amp;quot; install-config&lt;br /&gt;
+       make DESTDIR=&amp;quot;$pkgdir&amp;quot; install install-config || return 1&lt;br /&gt;
        ln -s proxychains4 &amp;quot;$pkgdir&amp;quot;/usr/bin/proxychains&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it looks fine, try to apply the patch, first, in your git tree, and test it.&lt;br /&gt;
&lt;br /&gt;
There are three ways to apply patch in the local tree. We are going to show all of them...then choose what is more fitting for you.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;.1 pwclient apply&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; pwclient apply command apply patch using -p1. So patch is applied starting from the current dir.&lt;br /&gt;
    pwclient apply 66&lt;br /&gt;
This apply patch in your local git tree.&lt;br /&gt;
Then you can:&lt;br /&gt;
    abuild -r.&lt;br /&gt;
If patch is ok, then you need to reset the your git tree (because it got modified by applying the patch).&lt;br /&gt;
so: &lt;br /&gt;
    git checkout --&lt;br /&gt;
then &lt;br /&gt;
    pwclient git-am 66&lt;br /&gt;
&lt;br /&gt;
this apply and commit the patch in one shot.&lt;br /&gt;
&lt;br /&gt;
Last step is pushing the change to git repo with:&lt;br /&gt;
    git pull--rebase &amp;amp;&amp;amp; git push&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;.2 pwclient get&#039;&#039;&#039;&lt;br /&gt;
    pwclient get 66&lt;br /&gt;
update the APKBUILD in order to apply the patch, then build it with the usual:&lt;br /&gt;
&lt;br /&gt;
    abuild -r&lt;br /&gt;
&lt;br /&gt;
If patch is ok, then you need to reset the your git tree (because it got modified by applying the patch).&lt;br /&gt;
so: &lt;br /&gt;
    git checkout --&lt;br /&gt;
then &lt;br /&gt;
    pwclient git-am 66&lt;br /&gt;
&lt;br /&gt;
this apply and commit the patch in one shot.&lt;br /&gt;
&lt;br /&gt;
Last step is pushing the change to git repo with:&lt;br /&gt;
    git pull--rebase &amp;amp;&amp;amp; git push&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;.3 pwclient git-am&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This can be done by:&lt;br /&gt;
    pwclient git-am 66&lt;br /&gt;
&lt;br /&gt;
Since this command aply and commits directly as already stated before, the last step is pushing the change to git repo with:&lt;br /&gt;
    git pull--rebase &amp;amp;&amp;amp; git push &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Patch does not apply. And now? ==&lt;br /&gt;
If you have used &lt;br /&gt;
    pwclient apply&lt;br /&gt;
or &lt;br /&gt;
    pwclient get&lt;br /&gt;
Then you shoud go for:&lt;br /&gt;
    git checkout&lt;br /&gt;
&lt;br /&gt;
If you have used&lt;br /&gt;
    pwclient git-am&lt;br /&gt;
&lt;br /&gt;
Then patch is committed, so you need to &lt;br /&gt;
    git reset HEAD@{1}&lt;br /&gt;
This uses the last entry in the reflog.&lt;br /&gt;
If you did other things in between, look at:&lt;br /&gt;
    git reflog&lt;br /&gt;
to see which number corresponds to which commit.&lt;br /&gt;
&lt;br /&gt;
== Oh, looks that someone else already applied the patch while i was going to do it. Now, when i try to git pull --rebase, i got: &amp;quot;It looks like git-am is in progress. Cannot rebase.&amp;quot; and now? ==&lt;br /&gt;
&lt;br /&gt;
    git am --abort&lt;br /&gt;
&lt;br /&gt;
== I sent a patch that was already applied.  ==&lt;br /&gt;
 &lt;br /&gt;
At the moment, patchwork does not allow to comment reasons for a state change (it&#039;s in their todo list)&lt;br /&gt;
&lt;br /&gt;
So, we can simple set it as &amp;quot;Not Applicable&amp;quot; (since &amp;quot;Duplicate&amp;quot; does not exists)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== My patch got rejected. == &lt;br /&gt;
 &lt;br /&gt;
You&#039;ll be alterted via email about that.&lt;br /&gt;
You can ask why patch is got rejected on #alpine-devel IRC channel.&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Git]]&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Patch_Workflow&amp;diff=10827</id>
		<title>Patch Workflow</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Patch_Workflow&amp;diff=10827"/>
		<updated>2015-04-30T09:47:49Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a &#039;&#039;&#039;very draft&#039;&#039;&#039; docs that aims to have a defined workflow for sending and applying patch.&lt;br /&gt;
&lt;br /&gt;
It provides a background both for alpine developers and contributors.&lt;br /&gt;
&lt;br /&gt;
It&#039;s in the form of FAQ, but it might be changed with a better approach.&lt;br /&gt;
&lt;br /&gt;
Also, a graphical workflow would be useful. A nice idea is here: [https://sourceware.org/glibc/wiki/Patch%20Review%20Workflow]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== I want to contribute to Alpine project by sending patches.  How can i do this? == &lt;br /&gt;
&lt;br /&gt;
First of all, thanks :)&lt;br /&gt;
&lt;br /&gt;
Please, take a look at http://wiki.alpinelinux.org/wiki/Development_using_git and docs linked to it.&lt;br /&gt;
&lt;br /&gt;
== Ok, now i&#039;ve an aports git tree ready and i&#039;ve sent a patch to alpine-aports ML. And now? ==&lt;br /&gt;
&lt;br /&gt;
Well done. Now the patch is in our workflow.&lt;br /&gt;
&lt;br /&gt;
After you&#039;ve sent the patch, it is going to be injected in patchwork.alpinelinux.org.&lt;br /&gt;
&lt;br /&gt;
There&#039;s a web interface where you can see all the patches sent to git.&lt;br /&gt;
&lt;br /&gt;
From there,  alpine delevopers will check the patch and proceed accordingly.&lt;br /&gt;
&lt;br /&gt;
Workflow status are:&lt;br /&gt;
&lt;br /&gt;
New:&lt;br /&gt;
    Patch has been submitted to the list, and none of the maintainers has changed it&#039;s state since. Under Review:: &lt;br /&gt;
Accepted:&lt;br /&gt;
    When a patch has been applied to a custodian repository that gets used for pulling from into upstream, they are put into &amp;quot;accepted&amp;quot; state. &lt;br /&gt;
Rejected:&lt;br /&gt;
    Rejected means we just don&#039;t want to do what the patch does. &lt;br /&gt;
RFC:&lt;br /&gt;
    The patch is not intended to be applied to any of the mainline repositories, but merely for discussing or testing some idea or new feature. &lt;br /&gt;
Not Applicable:&lt;br /&gt;
    The patch does not apply cleanly against the current U-Boot repository, most probably because it was made against a much older version of U-Boot, or because the submitter&#039;s mailer mangled it (for example by converting TABs into SPACEs, or by breaking long lines). &lt;br /&gt;
Changes Requested:&lt;br /&gt;
    The patch looks mostly OK, but requires some rework before it will be accepted for mainline. Awaiting Upstream:: &lt;br /&gt;
Superseeded:&lt;br /&gt;
    Patches are marked as &#039;superseeded&#039; when the poster submits a new version of these patches. &lt;br /&gt;
Deferred:&lt;br /&gt;
    Deferred usually means the patch depends on something else that isn&#039;t upstream, such as patches that only apply against some specific other repository. &lt;br /&gt;
Archived:&lt;br /&gt;
    Archiving puts the patch away somewhere where it doesn&#039;t appear in the normal pages and needs extra effort to get to. &lt;br /&gt;
&lt;br /&gt;
We also can put patches in a &amp;quot;bundle&amp;quot;. I don&#039;t know yet if that has any deeper sense but to mark them to be handled together, like a patch series that logically belongs together. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Set &amp;quot;approved&amp;quot; on webif does not have an impact on the git tree.&lt;br /&gt;
If is actually approved, after pwclient git-am the state of the patch will automatically be changed to &amp;quot;approved&amp;quot;.&lt;br /&gt;
This is the right way to change state.&lt;br /&gt;
Generally speaking, change the state on webif is not needed.&lt;br /&gt;
Webpage only report what the user does with pwclient tool.&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== I&#039;m an alpine developer. How can I start to use patchwork ? ==  &lt;br /&gt;
&lt;br /&gt;
There are two ways to work with patches from alpine-aports Mailing List:&lt;br /&gt;
&lt;br /&gt;
.1 Web Interface: https://patchwork.alpinelinux.org/&lt;br /&gt;
&lt;br /&gt;
.2 On your local build environment, you need pwclient:&lt;br /&gt;
&lt;br /&gt;
    apk add pwclient &lt;br /&gt;
    cd $your_aports_dir&lt;br /&gt;
    pwclient list&lt;br /&gt;
&lt;br /&gt;
This command returns the list of patches sent to alpine-aports@lists.alpinelinux.org and injected in patchwork workflow.&lt;br /&gt;
&lt;br /&gt;
look at the patch:&lt;br /&gt;
&lt;br /&gt;
    pwclient view $PATCH_ID.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s assume is 66:&lt;br /&gt;
&lt;br /&gt;
    pwclient view 66&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
host:~/aports$ pwclient view 66&lt;br /&gt;
Content-Type: text/plain; charset=&amp;quot;utf-8&amp;quot;&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Transfer-Encoding: 7bit&lt;br /&gt;
Subject: [alpine-aports] testing/proxychains-ng: install and install-config&lt;br /&gt;
 returns 1 in case of error&lt;br /&gt;
From: Francesco Colista &amp;lt;fcolista@alpinelinux.org&amp;gt;&lt;br /&gt;
X-Patchwork-Id: 66&lt;br /&gt;
Message-Id: &amp;lt;1430294296-26952-1-git-send-email-fcolista@alpinelinux.org&amp;gt;&lt;br /&gt;
To: alpine-aports@lists.alpinelinux.org&lt;br /&gt;
Cc: Francesco Colista &amp;lt;fcolista@alpinelinux.org&amp;gt;&lt;br /&gt;
Date: Wed, 29 Apr 2015 07:58:16 +0000&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
 testing/proxychains-ng/APKBUILD | 5 ++---&lt;br /&gt;
 1 file changed, 2 insertions(+), 3 deletions(-)&lt;br /&gt;
&lt;br /&gt;
diff --git a/testing/proxychains-ng/APKBUILD b/testing/proxychains-ng/APKBUILD&lt;br /&gt;
index 463a2ac..b40ba25 100644&lt;br /&gt;
--- a/testing/proxychains-ng/APKBUILD&lt;br /&gt;
+++ b/testing/proxychains-ng/APKBUILD&lt;br /&gt;
@@ -2,7 +2,7 @@&lt;br /&gt;
 # Maintainer: Francesco Colista &amp;lt;fcolista@alpinelinux.org&amp;gt;&lt;br /&gt;
 pkgname=proxychains-ng&lt;br /&gt;
 pkgver=4.8.1&lt;br /&gt;
-pkgrel=0&lt;br /&gt;
+pkgrel=1&lt;br /&gt;
 pkgdesc=&amp;quot;This tool provides proxy server support to any app.&amp;quot;&lt;br /&gt;
 url=&amp;quot;https://github.com/rofl0r/proxychains-ng&amp;quot;&lt;br /&gt;
 arch=&amp;quot;all&amp;quot;&lt;br /&gt;
@@ -36,8 +36,7 @@ build() {&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&lt;br /&gt;
-       make DESTDIR=&amp;quot;$pkgdir&amp;quot; install-config&lt;br /&gt;
+       make DESTDIR=&amp;quot;$pkgdir&amp;quot; install install-config || return 1&lt;br /&gt;
        ln -s proxychains4 &amp;quot;$pkgdir&amp;quot;/usr/bin/proxychains&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it looks fine, try to apply the patch, first, in your git tree, and test it.&lt;br /&gt;
&lt;br /&gt;
There are three ways to apply patch in the local tree. We are going to show all of them...then choose what is more fitting for you.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;.1 pwclient apply&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; pwclient apply command apply patch using -p1. So patch is applied starting from the current dir.&lt;br /&gt;
    pwclient apply 66&lt;br /&gt;
This apply patch in your local git tree.&lt;br /&gt;
Then you can:&lt;br /&gt;
    abuild -r.&lt;br /&gt;
If patch is ok, then you need to reset the your git tree (because it got modified by applying the patch).&lt;br /&gt;
so: &lt;br /&gt;
    git checkout --&lt;br /&gt;
then &lt;br /&gt;
    pwclient git-am 66&lt;br /&gt;
&lt;br /&gt;
this apply and commit the patch in one shot.&lt;br /&gt;
&lt;br /&gt;
Last step is pushing the change to git repo with:&lt;br /&gt;
    git pull--rebase &amp;amp;&amp;amp; git push&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;.2 pwclient get&#039;&#039;&#039;&lt;br /&gt;
    pwclient get 66&lt;br /&gt;
update the APKBUILD in order to apply the patch, then build it with the usual:&lt;br /&gt;
&lt;br /&gt;
    abuild -r&lt;br /&gt;
&lt;br /&gt;
If patch is ok, then you need to reset the your git tree (because it got modified by applying the patch).&lt;br /&gt;
so: &lt;br /&gt;
    git checkout --&lt;br /&gt;
then &lt;br /&gt;
    pwclient git-am 66&lt;br /&gt;
&lt;br /&gt;
this apply and commit the patch in one shot.&lt;br /&gt;
&lt;br /&gt;
Last step is pushing the change to git repo with:&lt;br /&gt;
    git pull--rebase &amp;amp;&amp;amp; git push&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;.3 pwclient git-am&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This can be done by:&lt;br /&gt;
    pwclient git-am 66&lt;br /&gt;
&lt;br /&gt;
Since this command aply and commits directly as already stated before, the last step is pushing the change to git repo with:&lt;br /&gt;
    git pull--rebase &amp;amp;&amp;amp; git push &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Patch does not apply. And now? ==&lt;br /&gt;
If you have used &lt;br /&gt;
    pwclient apply&lt;br /&gt;
or &lt;br /&gt;
    pwclient get&lt;br /&gt;
Then you shoud go for:&lt;br /&gt;
    git checkout&lt;br /&gt;
&lt;br /&gt;
If you have used&lt;br /&gt;
    pwclient git-am&lt;br /&gt;
&lt;br /&gt;
Then patch is committed, so you need to &lt;br /&gt;
    git reset HEAD@{1}&lt;br /&gt;
This uses the last entry in the reflog.&lt;br /&gt;
If you did other things in between, look at:&lt;br /&gt;
    git reflog&lt;br /&gt;
to see which number corresponds to which commit.&lt;br /&gt;
&lt;br /&gt;
== Oh, looks that someone else already applied the patch while i was going to do it. Now, when i try to git pull --rebase, i got: &amp;quot;It looks like git-am is in progress. Cannot rebase.&amp;quot; and now? ==&lt;br /&gt;
&lt;br /&gt;
    git am --abort&lt;br /&gt;
&lt;br /&gt;
== I sent a patch that was already applied.  ==&lt;br /&gt;
 &lt;br /&gt;
At the moment, patchwork does not allow to comment reasons for a state change (it&#039;s in their todo list)&lt;br /&gt;
&lt;br /&gt;
So, we can simple set it as &amp;quot;Not Applicable&amp;quot; (since &amp;quot;Duplicate&amp;quot; does not exists)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== My patch got rejected. == &lt;br /&gt;
 &lt;br /&gt;
You&#039;ll be alterted via email about that.&lt;br /&gt;
You can ask why patch is got rejected on #alpine-devel IRC channel.&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Patch_Workflow&amp;diff=10826</id>
		<title>Patch Workflow</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Patch_Workflow&amp;diff=10826"/>
		<updated>2015-04-30T09:46:35Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: Created page with &amp;quot;This is a &amp;#039;&amp;#039;&amp;#039;very draft&amp;#039;&amp;#039;&amp;#039; docs that aims to have a defined workflow for sending and applying patch.  It provides a background both for alpine developers and contributors.  It...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a &#039;&#039;&#039;very draft&#039;&#039;&#039; docs that aims to have a defined workflow for sending and applying patch.&lt;br /&gt;
&lt;br /&gt;
It provides a background both for alpine developers and contributors.&lt;br /&gt;
&lt;br /&gt;
It&#039;s in the form of FAQ, but it might be changed with a better approach.&lt;br /&gt;
&lt;br /&gt;
Also, a graphical workflow would be useful. A nice idea is here: [https://sourceware.org/glibc/wiki/Patch%20Review%20Workflow]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== I want to contribute to Alpine project by sending patches.  How can i do this? == &lt;br /&gt;
&lt;br /&gt;
First of all, thanks :)&lt;br /&gt;
&lt;br /&gt;
Please, take a look at http://wiki.alpinelinux.org/wiki/Development_using_git and docs linked to it.&lt;br /&gt;
&lt;br /&gt;
== Ok, now i&#039;ve an aports git tree ready and i&#039;ve sent a patch to alpine-aports ML. And now? ==&lt;br /&gt;
&lt;br /&gt;
Well done. Now the patch is in our workflow.&lt;br /&gt;
&lt;br /&gt;
After you&#039;ve sent the patch, it is going to be injected in patchwork.alpinelinux.org.&lt;br /&gt;
&lt;br /&gt;
There&#039;s a web interface where you can see all the patches sent to git.&lt;br /&gt;
&lt;br /&gt;
From there,  alpine delevopers will check the patch and proceed accordingly.&lt;br /&gt;
&lt;br /&gt;
Workflow status are:&lt;br /&gt;
&lt;br /&gt;
New:&lt;br /&gt;
    Patch has been submitted to the list, and none of the maintainers has changed it&#039;s state since. Under Review:: &lt;br /&gt;
Accepted:&lt;br /&gt;
    When a patch has been applied to a custodian repository that gets used for pulling from into upstream, they are put into &amp;quot;accepted&amp;quot; state. &lt;br /&gt;
Rejected:&lt;br /&gt;
    Rejected means we just don&#039;t want to do what the patch does. &lt;br /&gt;
RFC:&lt;br /&gt;
    The patch is not intended to be applied to any of the mainline repositories, but merely for discussing or testing some idea or new feature. &lt;br /&gt;
Not Applicable:&lt;br /&gt;
    The patch does not apply cleanly against the current U-Boot repository, most probably because it was made against a much older version of U-Boot, or because the submitter&#039;s mailer mangled it (for example by converting TABs into SPACEs, or by breaking long lines). &lt;br /&gt;
Changes Requested:&lt;br /&gt;
    The patch looks mostly OK, but requires some rework before it will be accepted for mainline. Awaiting Upstream:: &lt;br /&gt;
Superseeded:&lt;br /&gt;
    Patches are marked as &#039;superseeded&#039; when the poster submits a new version of these patches. &lt;br /&gt;
Deferred:&lt;br /&gt;
    Deferred usually means the patch depends on something else that isn&#039;t upstream, such as patches that only apply against some specific other repository. &lt;br /&gt;
Archived:&lt;br /&gt;
    Archiving puts the patch away somewhere where it doesn&#039;t appear in the normal pages and needs extra effort to get to. &lt;br /&gt;
&lt;br /&gt;
We also can put patches in a &amp;quot;bundle&amp;quot;. I don&#039;t know yet if that has any deeper sense but to mark them to be handled together, like a patch series that logically belongs together. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; Set &amp;quot;approved&amp;quot; on webif does not have an impact on the git tree.&lt;br /&gt;
If is actually approved, after pwclient git-am the state of the patch will automatically be changed to &amp;quot;approved&amp;quot;.&lt;br /&gt;
This is the right way to change state.&lt;br /&gt;
Generally speaking, change the state on webif is not needed.&lt;br /&gt;
Webpage only report what the user does with pwclient tool.&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
== I&#039;m an alpine developer. How can I start to use patchwork ? ==  &lt;br /&gt;
&lt;br /&gt;
There are two ways to work with patches from alpine-aports Mailing List:&lt;br /&gt;
&lt;br /&gt;
.1 Web Interface: https://patchwork.alpinelinux.org/&lt;br /&gt;
&lt;br /&gt;
.2 On your local build environment, you need pwclient:&lt;br /&gt;
&lt;br /&gt;
    apk add pwclient &lt;br /&gt;
    cd $your_aports_dir&lt;br /&gt;
    pwclient list&lt;br /&gt;
&lt;br /&gt;
This command returns the list of patches sent to alpine-aports@lists.alpinelinux.org and injected in patchwork workflow.&lt;br /&gt;
&lt;br /&gt;
look at the patch:&lt;br /&gt;
&lt;br /&gt;
    pwclient view $PATCH_ID.&lt;br /&gt;
&lt;br /&gt;
Let&#039;s assume is 66:&lt;br /&gt;
&lt;br /&gt;
    pwclient view 66&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
host:~/aports$ pwclient view 66&lt;br /&gt;
Content-Type: text/plain; charset=&amp;quot;utf-8&amp;quot;&lt;br /&gt;
MIME-Version: 1.0&lt;br /&gt;
Content-Transfer-Encoding: 7bit&lt;br /&gt;
Subject: [alpine-aports] testing/proxychains-ng: install and install-config&lt;br /&gt;
 returns 1 in case of error&lt;br /&gt;
From: Francesco Colista &amp;lt;fcolista@alpinelinux.org&amp;gt;&lt;br /&gt;
X-Patchwork-Id: 66&lt;br /&gt;
Message-Id: &amp;lt;1430294296-26952-1-git-send-email-fcolista@alpinelinux.org&amp;gt;&lt;br /&gt;
To: alpine-aports@lists.alpinelinux.org&lt;br /&gt;
Cc: Francesco Colista &amp;lt;fcolista@alpinelinux.org&amp;gt;&lt;br /&gt;
Date: Wed, 29 Apr 2015 07:58:16 +0000&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
 testing/proxychains-ng/APKBUILD | 5 ++---&lt;br /&gt;
 1 file changed, 2 insertions(+), 3 deletions(-)&lt;br /&gt;
&lt;br /&gt;
diff --git a/testing/proxychains-ng/APKBUILD b/testing/proxychains-ng/APKBUILD&lt;br /&gt;
index 463a2ac..b40ba25 100644&lt;br /&gt;
--- a/testing/proxychains-ng/APKBUILD&lt;br /&gt;
+++ b/testing/proxychains-ng/APKBUILD&lt;br /&gt;
@@ -2,7 +2,7 @@&lt;br /&gt;
 # Maintainer: Francesco Colista &amp;lt;fcolista@alpinelinux.org&amp;gt;&lt;br /&gt;
 pkgname=proxychains-ng&lt;br /&gt;
 pkgver=4.8.1&lt;br /&gt;
-pkgrel=0&lt;br /&gt;
+pkgrel=1&lt;br /&gt;
 pkgdesc=&amp;quot;This tool provides proxy server support to any app.&amp;quot;&lt;br /&gt;
 url=&amp;quot;https://github.com/rofl0r/proxychains-ng&amp;quot;&lt;br /&gt;
 arch=&amp;quot;all&amp;quot;&lt;br /&gt;
@@ -36,8 +36,7 @@ build() {&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&lt;br /&gt;
-       make DESTDIR=&amp;quot;$pkgdir&amp;quot; install-config&lt;br /&gt;
+       make DESTDIR=&amp;quot;$pkgdir&amp;quot; install install-config || return 1&lt;br /&gt;
        ln -s proxychains4 &amp;quot;$pkgdir&amp;quot;/usr/bin/proxychains&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If it looks fine, try to apply the patch, first, in your git tree, and test it.&lt;br /&gt;
&lt;br /&gt;
There are three ways to apply patch in the local tree. We are going to show all of them...then choose what is more fitting for you.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;.1 pwclient apply&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Note: pwclient apply command apply patch using -p1. So patch is applied starting from the current dir.&lt;br /&gt;
    pwclient apply 66&lt;br /&gt;
This apply patch in your local git tree.&lt;br /&gt;
Then you can:&lt;br /&gt;
    abuild -r.&lt;br /&gt;
If patch is ok, then you need to reset the your git tree (because it got modified by applying the patch).&lt;br /&gt;
so: &lt;br /&gt;
    git checkout --&lt;br /&gt;
then &lt;br /&gt;
    pwclient git-am 66&lt;br /&gt;
&lt;br /&gt;
this apply and commit the patch in one shot.&lt;br /&gt;
&lt;br /&gt;
Last step is pushing the change to git repo with:&lt;br /&gt;
    git pull--rebase &amp;amp;&amp;amp; git push&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;.2 pwclient get&#039;&#039;&#039;&lt;br /&gt;
    pwclient get 66&lt;br /&gt;
update the APKBUILD in order to apply the patch, then build it with the usual:&lt;br /&gt;
&lt;br /&gt;
    abuild -r&lt;br /&gt;
&lt;br /&gt;
If patch is ok, then you need to reset the your git tree (because it got modified by applying the patch).&lt;br /&gt;
so: &lt;br /&gt;
    git checkout --&lt;br /&gt;
then &lt;br /&gt;
    pwclient git-am 66&lt;br /&gt;
&lt;br /&gt;
this apply and commit the patch in one shot.&lt;br /&gt;
&lt;br /&gt;
Last step is pushing the change to git repo with:&lt;br /&gt;
    git pull--rebase &amp;amp;&amp;amp; git push&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&#039;&#039;&#039;.3 pwclient git-am&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
This can be done by:&lt;br /&gt;
    pwclient git-am 66&lt;br /&gt;
&lt;br /&gt;
Since this command aply and commits directly as already stated before, the last step is pushing the change to git repo with:&lt;br /&gt;
    git pull--rebase &amp;amp;&amp;amp; git push &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Patch does not apply. And now? ==&lt;br /&gt;
If you have used &lt;br /&gt;
    pwclient apply&lt;br /&gt;
or &lt;br /&gt;
    pwclient get&lt;br /&gt;
Then you shoud go for:&lt;br /&gt;
    git checkout&lt;br /&gt;
&lt;br /&gt;
If you have used&lt;br /&gt;
    pwclient git-am&lt;br /&gt;
&lt;br /&gt;
Then patch is committed, so you need to &lt;br /&gt;
    git reset HEAD@{1}&lt;br /&gt;
This uses the last entry in the reflog.&lt;br /&gt;
If you did other things in between, look at:&lt;br /&gt;
    git reflog&lt;br /&gt;
to see which number corresponds to which commit.&lt;br /&gt;
&lt;br /&gt;
== Oh, looks that someone else already applied the patch while i was going to do it. Now, when i try to git pull --rebase, i got: &amp;quot;It looks like git-am is in progress. Cannot rebase.&amp;quot; and now? ==&lt;br /&gt;
&lt;br /&gt;
    git am --abort&lt;br /&gt;
&lt;br /&gt;
== I sent a patch that was already applied.  ==&lt;br /&gt;
 &lt;br /&gt;
At the moment, patchwork does not allow to comment reasons for a state change (it&#039;s in their todo list)&lt;br /&gt;
&lt;br /&gt;
So, we can simple set it as &amp;quot;Not Applicable&amp;quot; (since &amp;quot;Duplicate&amp;quot; does not exists)&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== My patch got rejected. == &lt;br /&gt;
 &lt;br /&gt;
You&#039;ll be alterted via email about that.&lt;br /&gt;
You can ask why patch is got rejected on #alpine-devel IRC channel.&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Tutorials_and_Howtos&amp;diff=10721</id>
		<title>Tutorials and Howtos</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Tutorials_and_Howtos&amp;diff=10721"/>
		<updated>2015-04-18T15:25:19Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: /* Other Servers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:package_edutainment.svg|right|link=]]&lt;br /&gt;
{{TOC left}}&lt;br /&gt;
&#039;&#039;&#039;Welcome to Tutorials and Howtos, a place of basic and advanced configuration tasks for your Alpine Linux.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The tutorials are hands-on and the reader is expected to try and achieve the goals described in each step, possibly with the help of a good example. The output in one step is the starting point for the following step.&lt;br /&gt;
&lt;br /&gt;
Howtos are smaller articles explaining how to perform a particular task with Alpine Linux.&lt;br /&gt;
&lt;br /&gt;
We encourage people to send in both complete articles as well as requesting topics to be covered. If you think you have the skills and knowledge to write an Alpine Linux related article please do so on this Wiki. If you want to request a topic, please add your request in this page&#039;s [[Talk:Tutorials_and_Howtos|Discussion]].&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
* [[Alpine local backup|Alpine local backup (lbu)]] &#039;&#039;(Permanently store your modifications in case your box needs reboot)&#039;&#039; &amp;lt;!-- Installation and Storage --&amp;gt;&lt;br /&gt;
** [[Back Up a Flash Memory Installation]] &amp;lt;!-- Installation and Storage --&amp;gt;&lt;br /&gt;
** [[Manually editing a existing apkovl]]&lt;br /&gt;
&lt;br /&gt;
* [[Setting up disks manually]] &amp;lt;!-- Installation and Storage --&amp;gt;&lt;br /&gt;
* [[Setting up a software RAID array]]&lt;br /&gt;
&amp;lt;!-- ** [[Setting up a /var partition on software IDE raid1]]  Obsolete, Installation and Storage --&amp;gt; &lt;br /&gt;
* [[Raid Administration]]&lt;br /&gt;
* [[Setting up encrypted volumes with LUKS]]&lt;br /&gt;
* [[Setting up LVM on LUKS]]&lt;br /&gt;
* [[Setting up Logical Volumes with LVM]]&lt;br /&gt;
** [[Setting up LVM on GPT-labeled disks]]&lt;br /&gt;
** [[Installing on GPT LVM]]&lt;br /&gt;
* [[Filesystems|Formatting HD/Floppy/Other]] &amp;lt;!-- just a stub --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Setting up iSCSI]]&lt;br /&gt;
** [[iSCSI Raid and Clustered File Systems]]&lt;br /&gt;
* [[Setting up NBD]]&lt;br /&gt;
* [[High performance SCST iSCSI Target on Linux software Raid]] &#039;&#039;(deprecated)&#039;&#039; &amp;lt;!-- solution --&amp;gt;&lt;br /&gt;
* [[Linux iSCSI Target (TCM)]]&lt;br /&gt;
* [[Disk Replication with DRBD]] &amp;lt;!-- draft --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Burning ISOs]] &amp;lt;!-- just some links now --&amp;gt;&lt;br /&gt;
* [[Partitioning and Bootmanagers]]&lt;br /&gt;
* [[Migrating data]]&lt;br /&gt;
&lt;br /&gt;
== Networking ==&lt;br /&gt;
&lt;br /&gt;
* [[Configure Networking]]&lt;br /&gt;
* [[Connecting to a wireless access point]]&lt;br /&gt;
* [[Bonding]]&lt;br /&gt;
* [[Vlan]]&lt;br /&gt;
* [[Bridge]]&lt;br /&gt;
* [[OpenVSwitch]]&lt;br /&gt;
* [[How to configure static routes]]&lt;br /&gt;
&lt;br /&gt;
* [[Alpine Wall]] - [[How-To Alpine Wall]] - [[Alpine Wall User&#039;s Guide]] &#039;&#039;(a new firewall management framework)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Using serial modem]]&lt;br /&gt;
* [[Using HSDPA modem]]&lt;br /&gt;
* [[Setting up Satellite Internet Connection]]&lt;br /&gt;
* [[Using Alpine on Windows domain with IPSEC isolation]]&lt;br /&gt;
&lt;br /&gt;
* [[Setting up a ssh-server]] &#039;&#039;(Using ssh is a good way to administer your box remotely)&#039;&#039; &amp;lt;!-- Server and Networking --&amp;gt;&lt;br /&gt;
* [[How to setup a wireless access point]] &#039;&#039;(Setting up Secure Wireless AP w/ WPA encryption with bridge to wired network)&#039;&#039;&lt;br /&gt;
* [[Setting up a OpenVPN server with Alpine]] &#039;&#039;(Allowing single users or devices to remotely connect to your network)&#039;&#039;&lt;br /&gt;
&amp;lt;!-- [[Using Racoon for Remote Sites]] is a different VPN tunnelling method, but that article is just a stub --&amp;gt;&lt;br /&gt;
* [[Experiences with OpenVPN-client on ALIX.2D3]]  &amp;lt;!-- solution --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Generating SSL certs with ACF]] &amp;lt;!-- Generating SSL certs with ACF 1.9 --&amp;gt;&lt;br /&gt;
* [[Setting up unbound DNS server]]&lt;br /&gt;
* [[Setting up nsd DNS server]]&lt;br /&gt;
* [[TinyDNS Format]]&lt;br /&gt;
* [[Fault Tolerant Routing with Alpine Linux]] &amp;lt;!-- solution --&amp;gt;&lt;br /&gt;
* [[Freeradius Active Directory Integration]]&lt;br /&gt;
* [[Multi_ISP]] &#039;&#039;(Dual-ISP setup with load-balancing and automatic failover)&#039;&#039;&lt;br /&gt;
* [[OwnCloud]] &#039;&#039;(Installing OwnCloud)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Apache with php-fpm]]&lt;br /&gt;
* [[Seafile: setting up your own private cloud]]&lt;br /&gt;
&lt;br /&gt;
== Post-Install ==&lt;br /&gt;
&amp;lt;!-- If you edit this, please coordinate with Installation#Post-Install and Developer_Documentation#Package_management.  Note that these three sections are not exact duplicates. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Alpine Linux package management|Package Management (apk)]] &#039;&#039;(How to add/remove packages on your Alpine)&#039;&#039;&lt;br /&gt;
   &amp;lt;!-- [[Alpine Linux package management#Local_Cache|How to enable APK caching]] --&amp;gt;&lt;br /&gt;
** [[Comparison with other distros]]&lt;br /&gt;
* [[Alpine local backup|Alpine local backup (lbu)]] &#039;&#039;(Permanently store your modifications in case your box needs reboot)&#039;&#039;&lt;br /&gt;
** [[Back Up a Flash Memory Installation]] &amp;lt;!-- new --&amp;gt;&lt;br /&gt;
** [[Manually editing a existing apkovl]]&lt;br /&gt;
* [[Alpine Linux Init System|Init System (OpenRC)]] &#039;&#039;(Configure a service to automatically boot at next reboot)&#039;&#039;&lt;br /&gt;
** [[Multiple Instances of Services]]&lt;br /&gt;
   &amp;lt;!-- [[Writing Init Scripts]] --&amp;gt;&lt;br /&gt;
* [[Upgrading Alpine]]&lt;br /&gt;
&amp;lt;!-- Obsolete&lt;br /&gt;
 [[Upgrading Alpine - v1.9.x]]&lt;br /&gt;
 [[Upgrading Alpine - CD v1.8.x]]&lt;br /&gt;
 [[Upgrading Alpine - HD v1.8.x]]&lt;br /&gt;
 [[Upgrade to repository main|Upgrading to signed repositories]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Setting up a ssh-server]] &#039;&#039;(Using ssh is a good way to administer your box remotely)&#039;&#039;&lt;br /&gt;
* [[setup-acf]] &#039;&#039;(Configures ACF (webconfiguration) so you can manage your box through https)&#039;&#039;&lt;br /&gt;
* [[Changing passwords for ACF|Changing passwords]]&lt;br /&gt;
* [[Ansible]] &#039;&#039;(Configuration management)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Enable Serial Console on Boot]]&lt;br /&gt;
&amp;lt;!-- Obsolete?&lt;br /&gt;
* [[Error message on boot: Address space collision: host bridge window conflicts with Adaptor ROM]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Virtualization==&lt;br /&gt;
&lt;br /&gt;
* [[Xen Dom0]] &#039;&#039;(Setting up Alpine as a dom0 for Xen hypervisor)&#039;&#039;&lt;br /&gt;
* [[Xen Dom0 on USB or SD]]&lt;br /&gt;
* [[Create Alpine Linux PV DomU]]&lt;br /&gt;
* [[Xen PCI Passthrough]]&lt;br /&gt;
* [[Xen LiveCD]]&lt;br /&gt;
* [[qemu]]&lt;br /&gt;
* [[LXC]] &#039;&#039;(Setting up a Linux container in Alpine Linux)&#039;&#039;&lt;br /&gt;
* [[Docker]]&lt;br /&gt;
&lt;br /&gt;
== Desktop Environment ==&lt;br /&gt;
&lt;br /&gt;
* [[Awesome(wm) Setup]]&lt;br /&gt;
* [[EyeOS]] &#039;&#039;(Cloud Computing Desktop)&#039;&#039;&lt;br /&gt;
* [[Gnome Setup]]&lt;br /&gt;
* [[MATE|MATE Setup]]&lt;br /&gt;
* [[Oneye]] &#039;&#039;(Cloud Computing Desktop - Dropbox Alternative)&#039;&#039;&lt;br /&gt;
* [[Owncloud]] &#039;&#039;(Cloud Computing Desktop - Dropbox Alternative)&#039;&#039;&lt;br /&gt;
** (to be merged with [[OwnCloud]] &#039;&#039;(Your personal Cloud for storing and sharing your data on-line)&#039;&#039;)&lt;br /&gt;
* [[Remote Desktop Server]]&lt;br /&gt;
* [[Suspend on LID close]]&lt;br /&gt;
* [[XFCE Setup]] and [[Xfce Desktop|Desktop Ideas]]&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
=== Telephony ===&lt;br /&gt;
* [[Setting up Zaptel/Asterisk on Alpine]]&lt;br /&gt;
** [[Setting up Streaming an Asterisk Channel]]&lt;br /&gt;
* [[Freepbx on Alpine Linux]]&lt;br /&gt;
* [[FreePBX_V3]] &#039;&#039;(FreeSWITCH, Asterisk GUI web acces tool)&#039;&#039;&lt;br /&gt;
* [[2600hz]] &#039;&#039;(FreeSWITCH, Asterisk GUI web access tool)&#039;&#039;&lt;br /&gt;
* [[Kamailio]] &#039;&#039;(SIP Server, formerly OpenSER)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Mail ===&lt;br /&gt;
* [[Hosting services on Alpine]] &#039;&#039;(Hosting mail, webservices and other services)&#039;&#039;&lt;br /&gt;
** [[Hosting Web/Email services on Alpine]]&lt;br /&gt;
* [[ISP Mail Server HowTo]] &amp;lt;!-- solution, Mail --&amp;gt;&lt;br /&gt;
** [[ISP Mail Server Upgrade 2.x]]&lt;br /&gt;
** [[ISP Mail Server 2.x HowTo]] &#039;&#039;(Beta, please test)&#039;&#039;&lt;br /&gt;
* [[Roundcube]] &#039;&#039;(Webmail system)&#039;&#039;&lt;br /&gt;
* [[Setting up postfix with virtual domains]]&lt;br /&gt;
* [[Protecting your email server with Alpine]]&lt;br /&gt;
* [[Setting up clamsmtp]]&lt;br /&gt;
* [[Setting up dovecot with imap and ssl]]&lt;br /&gt;
&lt;br /&gt;
=== HTTP ===&lt;br /&gt;
* [[Lighttpd]]&lt;br /&gt;
** [[Lighttpd Https access]]&lt;br /&gt;
** [[Setting Up Lighttpd with PHP]]&lt;br /&gt;
** [[Setting Up Lighttpd With FastCGI]]&lt;br /&gt;
* [[Cherokee]]&lt;br /&gt;
* [[Nginx]]&lt;br /&gt;
* [[Apache]]&lt;br /&gt;
** [[Setting Up Apache with PHP]]&lt;br /&gt;
** [[Apache authentication: NTLM Single Signon]]&lt;br /&gt;
&lt;br /&gt;
* [[High Availability High Performance Web Cache]] &#039;&#039;(uCarp + HAProxy for High Availability Services such as Squid web proxy)&#039;&#039; &amp;lt;!-- solution, Server --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Setting up Transparent Squid Proxy]] &amp;lt;!-- draft --&amp;gt;&lt;br /&gt;
** [[SqStat]] &#039;&#039;(Script to look at active squid users connections)&#039;&#039;&lt;br /&gt;
** [[Obtaining user information via SNMP]] &#039;&#039;(Using squark-auth-snmp as a Squid authentication helper)&#039;&#039; &amp;lt;!-- Networking and Server, &amp;lt;== Using squark-auth-snmp --&amp;gt;&lt;br /&gt;
* [[Setting up Explicit Squid Proxy]]&lt;br /&gt;
&lt;br /&gt;
* [[Drupal]] &#039;&#039;(Content Management System (CMS) written in PHP)&#039;&#039;&lt;br /&gt;
* [[WordPress]] &#039;&#039;(Web software to create website or blog)&#039;&#039;&lt;br /&gt;
* [[MediaWiki]] &#039;&#039;(Free web-based wiki software application)&#039;&#039;&lt;br /&gt;
* [[DokuWiki]]&lt;br /&gt;
* [[Darkhttpd]]&lt;br /&gt;
&lt;br /&gt;
=== Other Servers ===&lt;br /&gt;
* [[Setting up a ssh-server]] &#039;&#039;(Using ssh is a good way to administer your box remotely)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Setting up a nfs-server]]&lt;br /&gt;
* [[Phpizabi]] &#039;&#039;(Social Networking Platform)&#039;&#039;&lt;br /&gt;
* [[Statusnet]] &#039;&#039;(Microblogging Platform)&#039;&#039;&lt;br /&gt;
* [[Pastebin]] &#039;&#039;(Pastebin software application)&#039;&#039;&lt;br /&gt;
* [[Setting up Transmission (bittorrent) with Clutch WebUI]]&lt;br /&gt;
&lt;br /&gt;
* [[Patchwork]] &#039;&#039;(Patch review management system)&#039;&#039;&lt;br /&gt;
* [[Redmine]] &#039;&#039;(Project management system)&#039;&#039;&lt;br /&gt;
* [[Request-Tracker]] &#039;&#039;(Ticket system)&#039;&#039;&lt;br /&gt;
* [[OsTicket]] &#039;&#039;(Ticket system)&#039;&#039;&lt;br /&gt;
* [[Setting up trac wiki|Trac]] &#039;&#039;(Enhanced wiki and issue tracking system for software development projects)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Cgit]]&lt;br /&gt;
** [[Setting up a git repository server with gitolite and cgit]] &amp;lt;!-- doesn&#039;t exist yet --&amp;gt;&lt;br /&gt;
* [[Roundcube]] &#039;&#039;(Webmail system)&#039;&#039;&lt;br /&gt;
* [[Glpi]] &#039;&#039;(Manage inventory of technical resources)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[How to setup a Alpine Linux mirror]]&lt;br /&gt;
* [[Cups]]&lt;br /&gt;
* [[NgIRCd]] &#039;&#039;(Server for Internet Relay Chat/IRC)&#039;&#039;&lt;br /&gt;
* [[OpenVCP]] &#039;&#039;(VServer Control Panel)&#039;&#039;&lt;br /&gt;
* [[Mahara]] &#039;&#039;(E-portfolio and social networking system)&#039;&#039;&lt;br /&gt;
* [[Chrony and GPSD | Using chrony, gpsd, and a garmin LVC 18 as a Stratum 1 NTP source ]]&lt;br /&gt;
* [[Sending SMS using gnokii]]&lt;br /&gt;
&lt;br /&gt;
=== Monitoring ===&lt;br /&gt;
* [[Traffic monitoring]] &amp;lt;!-- Networking and Monitoring --&amp;gt;&lt;br /&gt;
* [[Setting up traffic monitoring using rrdtool (and snmp)]] &amp;lt;!-- Monitoring --&amp;gt;&lt;br /&gt;
* [[Setting up monitoring using rrdtool (and rrdcollect)]]&lt;br /&gt;
* [[Setting up Cacti|Cacti]] &#039;&#039;(Front-end for rrdtool networking monitor)&#039;&#039;&lt;br /&gt;
* [[Setting up Zabbix|Zabbix]] &#039;&#039;(Monitor and track the status of network services and hardware)&#039;&#039;&lt;br /&gt;
* [[Setting up A Network Monitoring and Inventory System]] &#039;&#039;(Nagios + OpenAudit and related components)&#039;&#039; &amp;lt;!-- draft, solution, Networking and Monitoring and Server --&amp;gt;&lt;br /&gt;
** [[Setting up NRPE daemon]] &#039;&#039;(Performs remote Nagios checks)&#039;&#039; &amp;lt;!-- Networking and Monitoring --&amp;gt;&lt;br /&gt;
* [[Setting up Smokeping|Smokeping]] &#039;&#039;(Network latency monitoring)&#039;&#039; &amp;lt;!-- Networking and Monitoring --&amp;gt;&lt;br /&gt;
** [[Setting up MRTG and Smokeping to Monitor Bandwidth Usage and Network Latency]]&lt;br /&gt;
* [[Setting Up Fprobe And Ntop|Ntop]] &#039;&#039;(NetFlow collection and analysis using a remote fprobe instance)&#039;&#039; &amp;lt;!-- Networking and Monitoring --&amp;gt;&lt;br /&gt;
* [[Cvechecker]] &#039;&#039;(Compare installed packages for Common Vulnerabilities Exposure)&#039;&#039; &amp;lt;!-- Monitoring and Security --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[IP Accounting]] &amp;lt;!-- Networking and Monitoring --&amp;gt;&lt;br /&gt;
* [[Obtaining user information via SNMP]] &#039;&#039;(Using squark-auth-snmp as a Squid authentication helper)&#039;&#039; &amp;lt;!-- Networking and Server, &amp;lt;== Using squark-auth-snmp --&amp;gt;&lt;br /&gt;
* [[SqStat]] &#039;&#039;(Script to look at active squid users connections)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Piwik]] &#039;&#039;(A real time web analytics software program)&#039;&#039;&lt;br /&gt;
* [[Awstats]] &#039;&#039;(Free log file analyzer)&#039;&#039;&lt;br /&gt;
* [[Intrusion Detection using Snort]]&lt;br /&gt;
** [[Intrusion Detection using Snort, Sguil, Barnyard and more]]&lt;br /&gt;
* [[Dglog]] &#039;&#039;(Log analyzer for the web content filter DansGuardian)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Webmin]] &#039;&#039;(A web-based interface for Linux system)&#039;&#039;&lt;br /&gt;
* [[PhpPgAdmin]] &#039;&#039;(Web-based administration tool for PostgreSQL)&#039;&#039;&lt;br /&gt;
* [[PhpMyAdmin]] &#039;&#039;(Web-based administration tool for MYSQL)&#039;&#039;&lt;br /&gt;
* [[PhpSysInfo]] &#039;&#039;(A simple application that displays information about the host it&#039;s running on)&#039;&#039;&lt;br /&gt;
* [[Linfo]]&lt;br /&gt;
&lt;br /&gt;
* [[Setting up lm_sensors]]&lt;br /&gt;
&lt;br /&gt;
* [[ZoneMinder video camera security and surveillance]]&lt;br /&gt;
&lt;br /&gt;
== Misc ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Shell]]&lt;br /&gt;
* [[:Category:Programming]]&lt;br /&gt;
* [[Running glibc programs]]&lt;br /&gt;
* [[:Category:Drivers]]&lt;br /&gt;
* [[:Category:Multimedia]]&lt;br /&gt;
&lt;br /&gt;
== Complete Solutions ==&lt;br /&gt;
* [[Replacing non-Alpine Linux with Alpine remotely]]&lt;br /&gt;
* [[High performance SCST iSCSI Target on Linux software Raid]]&lt;br /&gt;
* [[Fault Tolerant Routing with Alpine Linux]]&lt;br /&gt;
* [[Experiences with OpenVPN-client on ALIX.2D3]]&lt;br /&gt;
&lt;br /&gt;
* [[ISP Mail Server HowTo]] &#039;&#039;(Postfix+PostfixAdmin+DoveCot+Roundcube+ClamAV+Spamd - A full-serivce ISP mail server)&#039;&#039;&lt;br /&gt;
** [[ISP Mail Server Upgrade 2.x]]&lt;br /&gt;
** [[ISP Mail Server 2.x HowTo]] &#039;&#039;(Beta, please test)&#039;&#039;&lt;br /&gt;
* [[High Availability High Performance Web Cache]] &#039;&#039;(uCarp + HAProxy for High Availability Services such as Squid web proxy)&#039;&#039;&lt;br /&gt;
* [[Setting up A Network Monitoring and Inventory System]] &#039;&#039;(Nagios + OpenAudit and related components)&#039;&#039; &amp;lt;!-- draft --&amp;gt;&lt;br /&gt;
* [[Streaming Security Camera Video with VLC]]&lt;br /&gt;
* [[Dynamic Multipoint VPN (DMVPN)]] combined with [[Small_Office_Services]]&lt;br /&gt;
* [[RPI Video Receiver]] &#039;&#039;(network video decoder using Rasperry Pi and omxplayer)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
This does not attempt to be complete. Is it useful to have these listed here? I find them more accessible if grouped with their topics; also, an up-to-date list of all Draft or Obsolete pages can be found at [[Project:Wiki maintenance]].&lt;br /&gt;
&lt;br /&gt;
== Drafts ==&lt;br /&gt;
Currently unfinished/works-in-progress.&lt;br /&gt;
* [[Using Racoon for Remote Sites]]&lt;br /&gt;
* [[Setting up Transparent Squid Proxy]] &#039;&#039;(Covers Squid proxy and URL Filtering system)&#039;&#039;&lt;br /&gt;
** [[Obtaining user information via SNMP]] &#039;&#039;(Using the Squark Squid authentication helper)&#039;&#039; [!-- no longer a draft --]&lt;br /&gt;
* [[Setting up Streaming an Asterisk Channel]]&lt;br /&gt;
* [[Setting up A Network Monitoring and Inventory System]] &#039;&#039;(Nagios + OpenAudit and related components)&#039;&#039;&lt;br /&gt;
* [[Intrusion Detection using Snort]] &#039;&#039;(Installing and configuring Snort and related applications on Alpine 2.0.x)&#039;&#039;&lt;br /&gt;
* [[IP Accounting]] &#039;&#039;(Installing and configuring pmacct for IP Accounting, Netflow/sFlow collector)&#039;&#039;&lt;br /&gt;
* [[Disk Replication with DRBD]]&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Patchwork&amp;diff=10720</id>
		<title>Patchwork</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Patchwork&amp;diff=10720"/>
		<updated>2015-04-18T15:23:14Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Patchwork it&#039;s a widely used patch review system.&lt;br /&gt;
&lt;br /&gt;
This How-To aims to give a basis to setup Patchwork with PostgreSQL as backend.&lt;br /&gt;
&lt;br /&gt;
There are some aspects which can be improved that this how-to is not covering.&lt;br /&gt;
* Create an apk for patchwork with init script&lt;br /&gt;
* Describe how to setup Patchwork for one project&lt;br /&gt;
* Describe how to setup Patchwork with MariaDB&lt;br /&gt;
&lt;br /&gt;
== Initial package installation and setup PostgreSQL==&lt;br /&gt;
{{Cmd|apk add python py-django1.5 py-psycopg2 py-django-registration git postgresql}}&lt;br /&gt;
{{Cmd|/etc/init.d/postgresql setup}}&lt;br /&gt;
{{Cmd|/etc/init.d/postgresql start}}&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039; we are using py-django1.5 even if py-django (ver.1.7) is present in the repository.&lt;br /&gt;
This is because Patchwork is not yet compatible with django 1.7.&lt;br /&gt;
&lt;br /&gt;
Create a regular account called &amp;quot;pwuser&amp;quot;:&lt;br /&gt;
{{Cmd|adduser pwuser}}&lt;br /&gt;
&lt;br /&gt;
As root:&lt;br /&gt;
{{Cmd|su - postgresql&lt;br /&gt;
createdb patchwork&lt;br /&gt;
createuser pwuser&lt;br /&gt;
createuser www-data&lt;br /&gt;
createuser nobody}}&lt;br /&gt;
&lt;br /&gt;
Last two users are hardcoded in one of the next sql script. That&#039;s why you need to create it.&lt;br /&gt;
&lt;br /&gt;
== Patchwork Installation and Configuration ==&lt;br /&gt;
Login with &amp;quot;pwuser&amp;quot; and clone the patchwork&#039;s git repository:&lt;br /&gt;
{{Cmd|git clone git://ozlabs.org/home/jk/git/patchwork}}&lt;br /&gt;
&lt;br /&gt;
Create a local_settings.py starting from settings.py:&lt;br /&gt;
{{Cmd|cd patchwork/apps&lt;br /&gt;
cp settings.py local_settings.py}}&lt;br /&gt;
&lt;br /&gt;
Customize local_settings.py according with your need.&lt;br /&gt;
&lt;br /&gt;
SECRET_KEY can be generated with the following python script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import string, random&lt;br /&gt;
chars = string.letters + string.digits + string.punctuation&lt;br /&gt;
print repr(&amp;quot;&amp;quot;.join([random.choice(chars) for i in range(0,50)]))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, populate PostgreSQL with patchwork database.&lt;br /&gt;
&lt;br /&gt;
As &amp;quot;pwuser&amp;quot;:&lt;br /&gt;
{{Cmd|python patchwork/apps/manage.py syncdb}}&lt;br /&gt;
&lt;br /&gt;
At the end, the script will ask for patchwork&#039;s administrator username,email, and password.&lt;br /&gt;
&lt;br /&gt;
Run another script for setting up the user&#039;s permissions:&lt;br /&gt;
{{Cmd|psql -f patchwork/lib/sql/grant-all.postgres.sql patchwork}}&lt;br /&gt;
&lt;br /&gt;
Now you can run the server:&lt;br /&gt;
{{Cmd|python patchwork/apps/manage.py runserver 0.0.0.0:8000}}&lt;br /&gt;
&lt;br /&gt;
Point your browser to http://$PATCHWORKS_SERVER_ADDRESS:8000&lt;br /&gt;
&lt;br /&gt;
Login with the username and password you set before.&lt;br /&gt;
&lt;br /&gt;
Enjoy.&lt;br /&gt;
&lt;br /&gt;
[[Category:Mail]]&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:Programming]]&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Patchwork&amp;diff=10719</id>
		<title>Patchwork</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Patchwork&amp;diff=10719"/>
		<updated>2015-04-18T15:20:07Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: Created page with &amp;quot;Patchwork it&amp;#039;s a widely used patch review system.  This How-To aims to give a basis to setup Patchwork with PostgreSQL as backend.  There are some aspects which can be improve...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Patchwork it&#039;s a widely used patch review system.&lt;br /&gt;
&lt;br /&gt;
This How-To aims to give a basis to setup Patchwork with PostgreSQL as backend.&lt;br /&gt;
&lt;br /&gt;
There are some aspects which can be improved that this how-to is not covering.&lt;br /&gt;
* Create an apk for patchwork with init script&lt;br /&gt;
* Describe how to setup Patchwork for one project&lt;br /&gt;
* Describe how to setup Patchwork with MariaDB&lt;br /&gt;
&lt;br /&gt;
== Initial package installation and setup PostgreSQL==&lt;br /&gt;
{{Cmd|apk add python py-django1.5 py-psycopg2 py-django-registration git postgresql}}&lt;br /&gt;
{{Cmd|/etc/init.d/postgresql setup}}&lt;br /&gt;
{{Cmd|/etc/init.d/postgresql start}}&lt;br /&gt;
&lt;br /&gt;
Create a regular account called &amp;quot;pwuser&amp;quot;:&lt;br /&gt;
{{Cmd|adduser pwuser}}&lt;br /&gt;
&lt;br /&gt;
As root:&lt;br /&gt;
{{Cmd|su - postgresql&lt;br /&gt;
createdb patchwork&lt;br /&gt;
createuser pwuser&lt;br /&gt;
createuser www-data&lt;br /&gt;
createuser nobody}}&lt;br /&gt;
&lt;br /&gt;
Last two users are hardcoded in one of the next sql script. That&#039;s why you need to create it.&lt;br /&gt;
&lt;br /&gt;
== Patchwork Installation and Configuration ==&lt;br /&gt;
Login with &amp;quot;pwuser&amp;quot; and clone the patchwork&#039;s git repository:&lt;br /&gt;
{{Cmd|git clone git://ozlabs.org/home/jk/git/patchwork}}&lt;br /&gt;
&lt;br /&gt;
Create a local_settings.py starting from settings.py:&lt;br /&gt;
{{Cmd|cd patchwork/apps&lt;br /&gt;
cp settings.py local_settings.py}}&lt;br /&gt;
&lt;br /&gt;
Customize local_settings.py according with your need.&lt;br /&gt;
&lt;br /&gt;
SECRET_KEY can be generated with the following python script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import string, random&lt;br /&gt;
chars = string.letters + string.digits + string.punctuation&lt;br /&gt;
print repr(&amp;quot;&amp;quot;.join([random.choice(chars) for i in range(0,50)]))&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, populate PostgreSQL with patchwork database.&lt;br /&gt;
&lt;br /&gt;
As &amp;quot;pwuser&amp;quot;:&lt;br /&gt;
{{Cmd|python patchwork/apps/manage.py syncdb}}&lt;br /&gt;
&lt;br /&gt;
At the end, the script will ask for patchwork&#039;s administrator username,email, and password.&lt;br /&gt;
&lt;br /&gt;
Run another script for setting up the user&#039;s permissions:&lt;br /&gt;
{{Cmd|psql -f patchwork/lib/sql/grant-all.postgres.sql patchwork}}&lt;br /&gt;
&lt;br /&gt;
Now you can run the server:&lt;br /&gt;
{{Cmd|python patchwork/apps/manage.py runserver 0.0.0.0:8000}}&lt;br /&gt;
&lt;br /&gt;
Point your browser to http://$PATCHWORKS_SERVER_ADDRESS:8000&lt;br /&gt;
&lt;br /&gt;
Login with the username and password you set before.&lt;br /&gt;
&lt;br /&gt;
Enjoy.&lt;br /&gt;
&lt;br /&gt;
[[Category:Mail]]&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:Programming]]&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Tutorials_and_Howtos&amp;diff=10718</id>
		<title>Tutorials and Howtos</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Tutorials_and_Howtos&amp;diff=10718"/>
		<updated>2015-04-18T14:36:14Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: /* Other Servers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:package_edutainment.svg|right|link=]]&lt;br /&gt;
{{TOC left}}&lt;br /&gt;
&#039;&#039;&#039;Welcome to Tutorials and Howtos, a place of basic and advanced configuration tasks for your Alpine Linux.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
The tutorials are hands-on and the reader is expected to try and achieve the goals described in each step, possibly with the help of a good example. The output in one step is the starting point for the following step.&lt;br /&gt;
&lt;br /&gt;
Howtos are smaller articles explaining how to perform a particular task with Alpine Linux.&lt;br /&gt;
&lt;br /&gt;
We encourage people to send in both complete articles as well as requesting topics to be covered. If you think you have the skills and knowledge to write an Alpine Linux related article please do so on this Wiki. If you want to request a topic, please add your request in this page&#039;s [[Talk:Tutorials_and_Howtos|Discussion]].&lt;br /&gt;
&lt;br /&gt;
{{Clear}}&lt;br /&gt;
== Storage ==&lt;br /&gt;
&lt;br /&gt;
* [[Alpine local backup|Alpine local backup (lbu)]] &#039;&#039;(Permanently store your modifications in case your box needs reboot)&#039;&#039; &amp;lt;!-- Installation and Storage --&amp;gt;&lt;br /&gt;
** [[Back Up a Flash Memory Installation]] &amp;lt;!-- Installation and Storage --&amp;gt;&lt;br /&gt;
** [[Manually editing a existing apkovl]]&lt;br /&gt;
&lt;br /&gt;
* [[Setting up disks manually]] &amp;lt;!-- Installation and Storage --&amp;gt;&lt;br /&gt;
* [[Setting up a software RAID array]]&lt;br /&gt;
&amp;lt;!-- ** [[Setting up a /var partition on software IDE raid1]]  Obsolete, Installation and Storage --&amp;gt; &lt;br /&gt;
* [[Raid Administration]]&lt;br /&gt;
* [[Setting up encrypted volumes with LUKS]]&lt;br /&gt;
* [[Setting up LVM on LUKS]]&lt;br /&gt;
* [[Setting up Logical Volumes with LVM]]&lt;br /&gt;
** [[Setting up LVM on GPT-labeled disks]]&lt;br /&gt;
** [[Installing on GPT LVM]]&lt;br /&gt;
* [[Filesystems|Formatting HD/Floppy/Other]] &amp;lt;!-- just a stub --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Setting up iSCSI]]&lt;br /&gt;
** [[iSCSI Raid and Clustered File Systems]]&lt;br /&gt;
* [[Setting up NBD]]&lt;br /&gt;
* [[High performance SCST iSCSI Target on Linux software Raid]] &#039;&#039;(deprecated)&#039;&#039; &amp;lt;!-- solution --&amp;gt;&lt;br /&gt;
* [[Linux iSCSI Target (TCM)]]&lt;br /&gt;
* [[Disk Replication with DRBD]] &amp;lt;!-- draft --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Burning ISOs]] &amp;lt;!-- just some links now --&amp;gt;&lt;br /&gt;
* [[Partitioning and Bootmanagers]]&lt;br /&gt;
* [[Migrating data]]&lt;br /&gt;
&lt;br /&gt;
== Networking ==&lt;br /&gt;
&lt;br /&gt;
* [[Configure Networking]]&lt;br /&gt;
* [[Connecting to a wireless access point]]&lt;br /&gt;
* [[Bonding]]&lt;br /&gt;
* [[Vlan]]&lt;br /&gt;
* [[Bridge]]&lt;br /&gt;
* [[OpenVSwitch]]&lt;br /&gt;
* [[How to configure static routes]]&lt;br /&gt;
&lt;br /&gt;
* [[Alpine Wall]] - [[How-To Alpine Wall]] - [[Alpine Wall User&#039;s Guide]] &#039;&#039;(a new firewall management framework)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Using serial modem]]&lt;br /&gt;
* [[Using HSDPA modem]]&lt;br /&gt;
* [[Setting up Satellite Internet Connection]]&lt;br /&gt;
* [[Using Alpine on Windows domain with IPSEC isolation]]&lt;br /&gt;
&lt;br /&gt;
* [[Setting up a ssh-server]] &#039;&#039;(Using ssh is a good way to administer your box remotely)&#039;&#039; &amp;lt;!-- Server and Networking --&amp;gt;&lt;br /&gt;
* [[How to setup a wireless access point]] &#039;&#039;(Setting up Secure Wireless AP w/ WPA encryption with bridge to wired network)&#039;&#039;&lt;br /&gt;
* [[Setting up a OpenVPN server with Alpine]] &#039;&#039;(Allowing single users or devices to remotely connect to your network)&#039;&#039;&lt;br /&gt;
&amp;lt;!-- [[Using Racoon for Remote Sites]] is a different VPN tunnelling method, but that article is just a stub --&amp;gt;&lt;br /&gt;
* [[Experiences with OpenVPN-client on ALIX.2D3]]  &amp;lt;!-- solution --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Generating SSL certs with ACF]] &amp;lt;!-- Generating SSL certs with ACF 1.9 --&amp;gt;&lt;br /&gt;
* [[Setting up unbound DNS server]]&lt;br /&gt;
* [[Setting up nsd DNS server]]&lt;br /&gt;
* [[TinyDNS Format]]&lt;br /&gt;
* [[Fault Tolerant Routing with Alpine Linux]] &amp;lt;!-- solution --&amp;gt;&lt;br /&gt;
* [[Freeradius Active Directory Integration]]&lt;br /&gt;
* [[Multi_ISP]] &#039;&#039;(Dual-ISP setup with load-balancing and automatic failover)&#039;&#039;&lt;br /&gt;
* [[OwnCloud]] &#039;&#039;(Installing OwnCloud)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Apache with php-fpm]]&lt;br /&gt;
* [[Seafile: setting up your own private cloud]]&lt;br /&gt;
&lt;br /&gt;
== Post-Install ==&lt;br /&gt;
&amp;lt;!-- If you edit this, please coordinate with Installation#Post-Install and Developer_Documentation#Package_management.  Note that these three sections are not exact duplicates. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Alpine Linux package management|Package Management (apk)]] &#039;&#039;(How to add/remove packages on your Alpine)&#039;&#039;&lt;br /&gt;
   &amp;lt;!-- [[Alpine Linux package management#Local_Cache|How to enable APK caching]] --&amp;gt;&lt;br /&gt;
** [[Comparison with other distros]]&lt;br /&gt;
* [[Alpine local backup|Alpine local backup (lbu)]] &#039;&#039;(Permanently store your modifications in case your box needs reboot)&#039;&#039;&lt;br /&gt;
** [[Back Up a Flash Memory Installation]] &amp;lt;!-- new --&amp;gt;&lt;br /&gt;
** [[Manually editing a existing apkovl]]&lt;br /&gt;
* [[Alpine Linux Init System|Init System (OpenRC)]] &#039;&#039;(Configure a service to automatically boot at next reboot)&#039;&#039;&lt;br /&gt;
** [[Multiple Instances of Services]]&lt;br /&gt;
   &amp;lt;!-- [[Writing Init Scripts]] --&amp;gt;&lt;br /&gt;
* [[Upgrading Alpine]]&lt;br /&gt;
&amp;lt;!-- Obsolete&lt;br /&gt;
 [[Upgrading Alpine - v1.9.x]]&lt;br /&gt;
 [[Upgrading Alpine - CD v1.8.x]]&lt;br /&gt;
 [[Upgrading Alpine - HD v1.8.x]]&lt;br /&gt;
 [[Upgrade to repository main|Upgrading to signed repositories]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Setting up a ssh-server]] &#039;&#039;(Using ssh is a good way to administer your box remotely)&#039;&#039;&lt;br /&gt;
* [[setup-acf]] &#039;&#039;(Configures ACF (webconfiguration) so you can manage your box through https)&#039;&#039;&lt;br /&gt;
* [[Changing passwords for ACF|Changing passwords]]&lt;br /&gt;
* [[Ansible]] &#039;&#039;(Configuration management)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Enable Serial Console on Boot]]&lt;br /&gt;
&amp;lt;!-- Obsolete?&lt;br /&gt;
* [[Error message on boot: Address space collision: host bridge window conflicts with Adaptor ROM]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Virtualization==&lt;br /&gt;
&lt;br /&gt;
* [[Xen Dom0]] &#039;&#039;(Setting up Alpine as a dom0 for Xen hypervisor)&#039;&#039;&lt;br /&gt;
* [[Xen Dom0 on USB or SD]]&lt;br /&gt;
* [[Create Alpine Linux PV DomU]]&lt;br /&gt;
* [[Xen PCI Passthrough]]&lt;br /&gt;
* [[Xen LiveCD]]&lt;br /&gt;
* [[qemu]]&lt;br /&gt;
* [[LXC]] &#039;&#039;(Setting up a Linux container in Alpine Linux)&#039;&#039;&lt;br /&gt;
* [[Docker]]&lt;br /&gt;
&lt;br /&gt;
== Desktop Environment ==&lt;br /&gt;
&lt;br /&gt;
* [[Awesome(wm) Setup]]&lt;br /&gt;
* [[EyeOS]] &#039;&#039;(Cloud Computing Desktop)&#039;&#039;&lt;br /&gt;
* [[Gnome Setup]]&lt;br /&gt;
* [[MATE|MATE Setup]]&lt;br /&gt;
* [[Oneye]] &#039;&#039;(Cloud Computing Desktop - Dropbox Alternative)&#039;&#039;&lt;br /&gt;
* [[Owncloud]] &#039;&#039;(Cloud Computing Desktop - Dropbox Alternative)&#039;&#039;&lt;br /&gt;
** (to be merged with [[OwnCloud]] &#039;&#039;(Your personal Cloud for storing and sharing your data on-line)&#039;&#039;)&lt;br /&gt;
* [[Remote Desktop Server]]&lt;br /&gt;
* [[Suspend on LID close]]&lt;br /&gt;
* [[XFCE Setup]] and [[Xfce Desktop|Desktop Ideas]]&lt;br /&gt;
&lt;br /&gt;
== Applications ==&lt;br /&gt;
&lt;br /&gt;
=== Telephony ===&lt;br /&gt;
* [[Setting up Zaptel/Asterisk on Alpine]]&lt;br /&gt;
** [[Setting up Streaming an Asterisk Channel]]&lt;br /&gt;
* [[Freepbx on Alpine Linux]]&lt;br /&gt;
* [[FreePBX_V3]] &#039;&#039;(FreeSWITCH, Asterisk GUI web acces tool)&#039;&#039;&lt;br /&gt;
* [[2600hz]] &#039;&#039;(FreeSWITCH, Asterisk GUI web access tool)&#039;&#039;&lt;br /&gt;
* [[Kamailio]] &#039;&#039;(SIP Server, formerly OpenSER)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Mail ===&lt;br /&gt;
* [[Hosting services on Alpine]] &#039;&#039;(Hosting mail, webservices and other services)&#039;&#039;&lt;br /&gt;
** [[Hosting Web/Email services on Alpine]]&lt;br /&gt;
* [[ISP Mail Server HowTo]] &amp;lt;!-- solution, Mail --&amp;gt;&lt;br /&gt;
** [[ISP Mail Server Upgrade 2.x]]&lt;br /&gt;
** [[ISP Mail Server 2.x HowTo]] &#039;&#039;(Beta, please test)&#039;&#039;&lt;br /&gt;
* [[Roundcube]] &#039;&#039;(Webmail system)&#039;&#039;&lt;br /&gt;
* [[Setting up postfix with virtual domains]]&lt;br /&gt;
* [[Protecting your email server with Alpine]]&lt;br /&gt;
* [[Setting up clamsmtp]]&lt;br /&gt;
* [[Setting up dovecot with imap and ssl]]&lt;br /&gt;
&lt;br /&gt;
=== HTTP ===&lt;br /&gt;
* [[Lighttpd]]&lt;br /&gt;
** [[Lighttpd Https access]]&lt;br /&gt;
** [[Setting Up Lighttpd with PHP]]&lt;br /&gt;
** [[Setting Up Lighttpd With FastCGI]]&lt;br /&gt;
* [[Cherokee]]&lt;br /&gt;
* [[Nginx]]&lt;br /&gt;
* [[Apache]]&lt;br /&gt;
** [[Setting Up Apache with PHP]]&lt;br /&gt;
** [[Apache authentication: NTLM Single Signon]]&lt;br /&gt;
&lt;br /&gt;
* [[High Availability High Performance Web Cache]] &#039;&#039;(uCarp + HAProxy for High Availability Services such as Squid web proxy)&#039;&#039; &amp;lt;!-- solution, Server --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[Setting up Transparent Squid Proxy]] &amp;lt;!-- draft --&amp;gt;&lt;br /&gt;
** [[SqStat]] &#039;&#039;(Script to look at active squid users connections)&#039;&#039;&lt;br /&gt;
** [[Obtaining user information via SNMP]] &#039;&#039;(Using squark-auth-snmp as a Squid authentication helper)&#039;&#039; &amp;lt;!-- Networking and Server, &amp;lt;== Using squark-auth-snmp --&amp;gt;&lt;br /&gt;
* [[Setting up Explicit Squid Proxy]]&lt;br /&gt;
&lt;br /&gt;
* [[Drupal]] &#039;&#039;(Content Management System (CMS) written in PHP)&#039;&#039;&lt;br /&gt;
* [[WordPress]] &#039;&#039;(Web software to create website or blog)&#039;&#039;&lt;br /&gt;
* [[MediaWiki]] &#039;&#039;(Free web-based wiki software application)&#039;&#039;&lt;br /&gt;
* [[DokuWiki]]&lt;br /&gt;
* [[Darkhttpd]]&lt;br /&gt;
&lt;br /&gt;
=== Other Servers ===&lt;br /&gt;
* [[Setting up a ssh-server]] &#039;&#039;(Using ssh is a good way to administer your box remotely)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Setting up a nfs-server]]&lt;br /&gt;
* [[Phpizabi]] &#039;&#039;(Social Networking Platform)&#039;&#039;&lt;br /&gt;
* [[Statusnet]] &#039;&#039;(Microblogging Platform)&#039;&#039;&lt;br /&gt;
* [[Pastebin]] &#039;&#039;(Pastebin software application)&#039;&#039;&lt;br /&gt;
* [[Setting up Transmission (bittorrent) with Clutch WebUI]]&lt;br /&gt;
&lt;br /&gt;
* [[Patchwork]] &#039;&#039;(Project management system)&#039;&#039;&lt;br /&gt;
* [[Redmine]] &#039;&#039;(Project management system)&#039;&#039;&lt;br /&gt;
* [[Request-Tracker]] &#039;&#039;(Ticket system)&#039;&#039;&lt;br /&gt;
* [[OsTicket]] &#039;&#039;(Ticket system)&#039;&#039;&lt;br /&gt;
* [[Setting up trac wiki|Trac]] &#039;&#039;(Enhanced wiki and issue tracking system for software development projects)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Cgit]]&lt;br /&gt;
** [[Setting up a git repository server with gitolite and cgit]] &amp;lt;!-- doesn&#039;t exist yet --&amp;gt;&lt;br /&gt;
* [[Roundcube]] &#039;&#039;(Webmail system)&#039;&#039;&lt;br /&gt;
* [[Glpi]] &#039;&#039;(Manage inventory of technical resources)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[How to setup a Alpine Linux mirror]]&lt;br /&gt;
* [[Cups]]&lt;br /&gt;
* [[NgIRCd]] &#039;&#039;(Server for Internet Relay Chat/IRC)&#039;&#039;&lt;br /&gt;
* [[OpenVCP]] &#039;&#039;(VServer Control Panel)&#039;&#039;&lt;br /&gt;
* [[Mahara]] &#039;&#039;(E-portfolio and social networking system)&#039;&#039;&lt;br /&gt;
* [[Chrony and GPSD | Using chrony, gpsd, and a garmin LVC 18 as a Stratum 1 NTP source ]]&lt;br /&gt;
* [[Sending SMS using gnokii]]&lt;br /&gt;
&lt;br /&gt;
=== Monitoring ===&lt;br /&gt;
* [[Traffic monitoring]] &amp;lt;!-- Networking and Monitoring --&amp;gt;&lt;br /&gt;
* [[Setting up traffic monitoring using rrdtool (and snmp)]] &amp;lt;!-- Monitoring --&amp;gt;&lt;br /&gt;
* [[Setting up monitoring using rrdtool (and rrdcollect)]]&lt;br /&gt;
* [[Setting up Cacti|Cacti]] &#039;&#039;(Front-end for rrdtool networking monitor)&#039;&#039;&lt;br /&gt;
* [[Setting up Zabbix|Zabbix]] &#039;&#039;(Monitor and track the status of network services and hardware)&#039;&#039;&lt;br /&gt;
* [[Setting up A Network Monitoring and Inventory System]] &#039;&#039;(Nagios + OpenAudit and related components)&#039;&#039; &amp;lt;!-- draft, solution, Networking and Monitoring and Server --&amp;gt;&lt;br /&gt;
** [[Setting up NRPE daemon]] &#039;&#039;(Performs remote Nagios checks)&#039;&#039; &amp;lt;!-- Networking and Monitoring --&amp;gt;&lt;br /&gt;
* [[Setting up Smokeping|Smokeping]] &#039;&#039;(Network latency monitoring)&#039;&#039; &amp;lt;!-- Networking and Monitoring --&amp;gt;&lt;br /&gt;
** [[Setting up MRTG and Smokeping to Monitor Bandwidth Usage and Network Latency]]&lt;br /&gt;
* [[Setting Up Fprobe And Ntop|Ntop]] &#039;&#039;(NetFlow collection and analysis using a remote fprobe instance)&#039;&#039; &amp;lt;!-- Networking and Monitoring --&amp;gt;&lt;br /&gt;
* [[Cvechecker]] &#039;&#039;(Compare installed packages for Common Vulnerabilities Exposure)&#039;&#039; &amp;lt;!-- Monitoring and Security --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* [[IP Accounting]] &amp;lt;!-- Networking and Monitoring --&amp;gt;&lt;br /&gt;
* [[Obtaining user information via SNMP]] &#039;&#039;(Using squark-auth-snmp as a Squid authentication helper)&#039;&#039; &amp;lt;!-- Networking and Server, &amp;lt;== Using squark-auth-snmp --&amp;gt;&lt;br /&gt;
* [[SqStat]] &#039;&#039;(Script to look at active squid users connections)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Piwik]] &#039;&#039;(A real time web analytics software program)&#039;&#039;&lt;br /&gt;
* [[Awstats]] &#039;&#039;(Free log file analyzer)&#039;&#039;&lt;br /&gt;
* [[Intrusion Detection using Snort]]&lt;br /&gt;
** [[Intrusion Detection using Snort, Sguil, Barnyard and more]]&lt;br /&gt;
* [[Dglog]] &#039;&#039;(Log analyzer for the web content filter DansGuardian)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* [[Webmin]] &#039;&#039;(A web-based interface for Linux system)&#039;&#039;&lt;br /&gt;
* [[PhpPgAdmin]] &#039;&#039;(Web-based administration tool for PostgreSQL)&#039;&#039;&lt;br /&gt;
* [[PhpMyAdmin]] &#039;&#039;(Web-based administration tool for MYSQL)&#039;&#039;&lt;br /&gt;
* [[PhpSysInfo]] &#039;&#039;(A simple application that displays information about the host it&#039;s running on)&#039;&#039;&lt;br /&gt;
* [[Linfo]]&lt;br /&gt;
&lt;br /&gt;
* [[Setting up lm_sensors]]&lt;br /&gt;
&lt;br /&gt;
* [[ZoneMinder video camera security and surveillance]]&lt;br /&gt;
&lt;br /&gt;
== Misc ==&lt;br /&gt;
&lt;br /&gt;
* [[:Category:Shell]]&lt;br /&gt;
* [[:Category:Programming]]&lt;br /&gt;
* [[Running glibc programs]]&lt;br /&gt;
* [[:Category:Drivers]]&lt;br /&gt;
* [[:Category:Multimedia]]&lt;br /&gt;
&lt;br /&gt;
== Complete Solutions ==&lt;br /&gt;
* [[Replacing non-Alpine Linux with Alpine remotely]]&lt;br /&gt;
* [[High performance SCST iSCSI Target on Linux software Raid]]&lt;br /&gt;
* [[Fault Tolerant Routing with Alpine Linux]]&lt;br /&gt;
* [[Experiences with OpenVPN-client on ALIX.2D3]]&lt;br /&gt;
&lt;br /&gt;
* [[ISP Mail Server HowTo]] &#039;&#039;(Postfix+PostfixAdmin+DoveCot+Roundcube+ClamAV+Spamd - A full-serivce ISP mail server)&#039;&#039;&lt;br /&gt;
** [[ISP Mail Server Upgrade 2.x]]&lt;br /&gt;
** [[ISP Mail Server 2.x HowTo]] &#039;&#039;(Beta, please test)&#039;&#039;&lt;br /&gt;
* [[High Availability High Performance Web Cache]] &#039;&#039;(uCarp + HAProxy for High Availability Services such as Squid web proxy)&#039;&#039;&lt;br /&gt;
* [[Setting up A Network Monitoring and Inventory System]] &#039;&#039;(Nagios + OpenAudit and related components)&#039;&#039; &amp;lt;!-- draft --&amp;gt;&lt;br /&gt;
* [[Streaming Security Camera Video with VLC]]&lt;br /&gt;
* [[Dynamic Multipoint VPN (DMVPN)]] combined with [[Small_Office_Services]]&lt;br /&gt;
* [[RPI Video Receiver]] &#039;&#039;(network video decoder using Rasperry Pi and omxplayer)&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
This does not attempt to be complete. Is it useful to have these listed here? I find them more accessible if grouped with their topics; also, an up-to-date list of all Draft or Obsolete pages can be found at [[Project:Wiki maintenance]].&lt;br /&gt;
&lt;br /&gt;
== Drafts ==&lt;br /&gt;
Currently unfinished/works-in-progress.&lt;br /&gt;
* [[Using Racoon for Remote Sites]]&lt;br /&gt;
* [[Setting up Transparent Squid Proxy]] &#039;&#039;(Covers Squid proxy and URL Filtering system)&#039;&#039;&lt;br /&gt;
** [[Obtaining user information via SNMP]] &#039;&#039;(Using the Squark Squid authentication helper)&#039;&#039; [!-- no longer a draft --]&lt;br /&gt;
* [[Setting up Streaming an Asterisk Channel]]&lt;br /&gt;
* [[Setting up A Network Monitoring and Inventory System]] &#039;&#039;(Nagios + OpenAudit and related components)&#039;&#039;&lt;br /&gt;
* [[Intrusion Detection using Snort]] &#039;&#039;(Installing and configuring Snort and related applications on Alpine 2.0.x)&#039;&#039;&lt;br /&gt;
* [[IP Accounting]] &#039;&#039;(Installing and configuring pmacct for IP Accounting, Netflow/sFlow collector)&#039;&#039;&lt;br /&gt;
* [[Disk Replication with DRBD]]&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Flyspray&amp;diff=10061</id>
		<title>Flyspray</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Flyspray&amp;diff=10061"/>
		<updated>2014-06-25T06:02:19Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: /* Flyspray configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Draft}}&lt;br /&gt;
&lt;br /&gt;
=Installing Flyspray=&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add flyspray}}&lt;br /&gt;
&lt;br /&gt;
=Database support=&lt;br /&gt;
&lt;br /&gt;
Flyspray supports only MySQL and PostgreSQL. Here we cover MySQL installation, but the steps are basically the same with PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
== Install Database support ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add flyspray-mysqli}}&lt;br /&gt;
&lt;br /&gt;
Notice that even though flyspray-mysql package is available, if you install it Flyspray will report that the function library is deprecated, that is quite annoying.&lt;br /&gt;
&lt;br /&gt;
Is better to use mysqli package.&lt;br /&gt;
&lt;br /&gt;
Now before we continue we need to create the database. &lt;br /&gt;
&lt;br /&gt;
{{Cmd|create database flyspray;&lt;br /&gt;
create user &#039;flyspraydbuser&#039;@&#039;localhost&#039; identified by &#039;my_password&#039;;&lt;br /&gt;
grant all privileges on flyspray.* to &#039;flyspraydbuser&#039;@&#039;localhost&#039;;}}&lt;br /&gt;
&lt;br /&gt;
If you need mysql client, you can install it like this:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add mysql-client}}&lt;br /&gt;
&lt;br /&gt;
You can of course also use a tool like phpmyadmin to create the database and setup the user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Setup Lighttpd=&lt;br /&gt;
&lt;br /&gt;
Now our database is ready, we need to install and configure Lighttpd, with PHP support.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add lighttpd}}&lt;br /&gt;
&lt;br /&gt;
Now, you should enable PHP/FastCGI support modifying Lighttpd configuration.&lt;br /&gt;
&lt;br /&gt;
You can find it in /etc/lighttpd.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|vi /etc/lighttpd/lighttpd.conf}}&lt;br /&gt;
&lt;br /&gt;
  ... &lt;br /&gt;
  include &amp;quot;mod_fastcgi.conf&amp;quot;&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
{{Cmd|/etc/init.d/lighttpd start}}&lt;br /&gt;
&lt;br /&gt;
If your server does not run, you can find information in /var/log/lighttpd. If that does not provide a clue you can also run Lighttpd in foreground. It should display some more debug information.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|/etc/init.d/lighttpd stop&lt;br /&gt;
lighttpd -f /etc/lighttpd/lighttpd.conf -D}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Flyspray configuration=&lt;br /&gt;
&lt;br /&gt;
Now that everything is ready, you need to make Flyspray visible to the webserver. &lt;br /&gt;
For doing that, create a symlink from /usr/share/webapps/flyspray (that is the default location where flyspray is installed) to /var/www/localhost/htdocs.&lt;br /&gt;
This is the document root directory of lighttpd server. If you use another webserver, check what is the document root and put the symlink there.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|ln -s /usr/share/webapps/flyspray /var/www/localhost/htdocs/flyspray}}&lt;br /&gt;
&lt;br /&gt;
Flyspray needs permission to write on flyspray.conf.php that is in the root directory.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|touch /usr/share/webapps/flyspray/flyspray.conf &lt;br /&gt;
chmod 775 /usr/share/webapps/flyspray/flyspray.conf.php &lt;br /&gt;
chgrp www-data /usr/share/webapps/flyspray/flyspray.conf.php}}&lt;br /&gt;
&lt;br /&gt;
That&#039;s all.&lt;br /&gt;
&lt;br /&gt;
Open your browser to http://$FLYSPRAY_SERVER/flyspray and follow the instruction.&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Flyspray&amp;diff=10041</id>
		<title>Flyspray</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Flyspray&amp;diff=10041"/>
		<updated>2014-06-24T15:21:19Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: /* Flyspray configuration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Draft}}&lt;br /&gt;
&lt;br /&gt;
=Installing Flyspray=&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add flyspray}}&lt;br /&gt;
&lt;br /&gt;
=Database support=&lt;br /&gt;
&lt;br /&gt;
Flyspray supports only MySQL and PostgreSQL. Here we cover MySQL installation, but the steps are basically the same with PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
== Install Database support ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add flyspray-mysqli}}&lt;br /&gt;
&lt;br /&gt;
Notice that even though flyspray-mysql package is available, if you install it Flyspray will report that the function library is deprecated, that is quite annoying.&lt;br /&gt;
&lt;br /&gt;
Is better to use mysqli package.&lt;br /&gt;
&lt;br /&gt;
Now before we continue we need to create the database. &lt;br /&gt;
&lt;br /&gt;
{{Cmd|create database flyspray;&lt;br /&gt;
create user &#039;flyspraydbuser&#039;@&#039;localhost&#039; identified by &#039;my_password&#039;;&lt;br /&gt;
grant all privileges on flyspray.* to &#039;flyspraydbuser&#039;@&#039;localhost&#039;;}}&lt;br /&gt;
&lt;br /&gt;
If you need mysql client, you can install it like this:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add mysql-client}}&lt;br /&gt;
&lt;br /&gt;
You can of course also use a tool like phpmyadmin to create the database and setup the user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Setup Lighttpd=&lt;br /&gt;
&lt;br /&gt;
Now our database is ready, we need to install and configure Lighttpd, with PHP support.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add lighttpd}}&lt;br /&gt;
&lt;br /&gt;
Now, you should enable PHP/FastCGI support modifying Lighttpd configuration.&lt;br /&gt;
&lt;br /&gt;
You can find it in /etc/lighttpd.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|vi /etc/lighttpd/lighttpd.conf}}&lt;br /&gt;
&lt;br /&gt;
  ... &lt;br /&gt;
  include &amp;quot;mod_fastcgi.conf&amp;quot;&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
{{Cmd|/etc/init.d/lighttpd start}}&lt;br /&gt;
&lt;br /&gt;
If your server does not run, you can find information in /var/log/lighttpd. If that does not provide a clue you can also run Lighttpd in foreground. It should display some more debug information.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|/etc/init.d/lighttpd stop&lt;br /&gt;
lighttpd -f /etc/lighttpd/lighttpd.conf -D}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Flyspray configuration=&lt;br /&gt;
&lt;br /&gt;
Now that everything is ready, you need to make Flyspray visible to the webserver. &lt;br /&gt;
For doing that, create a symlink from /usr/share/webapps/flyspray (that is the default location where flyspray is installed) to /var/www/localhost/htdocs.&lt;br /&gt;
This is the document root directory of lighttpd server. If you use another webserver, check what is the document root and put the symlink there.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|ln -s /usr/share/webapps/flyspray /var/www/localhost/htdocs/flyspray}}&lt;br /&gt;
&lt;br /&gt;
Flyspray needs permission to write on flyspray.conf.php that is in the root directory.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|touch /usr/share/webapps/flyspray/flyspray.conf &lt;br /&gt;
chmod 775 /usr/share/webapps/flyspray/flyspray.conf.php &lt;br /&gt;
chgrp www-data /usr/share/webapps/flyspray/flyspray.conf}}&lt;br /&gt;
&lt;br /&gt;
That&#039;s all.&lt;br /&gt;
&lt;br /&gt;
Open your browser to http://$FLYSPRAY_SERVER/flyspray and follow the instruction.&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Flyspray&amp;diff=10040</id>
		<title>Flyspray</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Flyspray&amp;diff=10040"/>
		<updated>2014-06-24T15:17:54Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: Created page with &amp;quot;{{Draft}}  =Installing Flyspray=  {{Cmd|apk add flyspray}}  =Database support=  Flyspray supports only MySQL and PostgreSQL. Here we cover MySQL installation, but the steps ar...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Draft}}&lt;br /&gt;
&lt;br /&gt;
=Installing Flyspray=&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add flyspray}}&lt;br /&gt;
&lt;br /&gt;
=Database support=&lt;br /&gt;
&lt;br /&gt;
Flyspray supports only MySQL and PostgreSQL. Here we cover MySQL installation, but the steps are basically the same with PostgreSQL.&lt;br /&gt;
&lt;br /&gt;
== Install Database support ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add flyspray-mysqli}}&lt;br /&gt;
&lt;br /&gt;
Notice that even though flyspray-mysql package is available, if you install it Flyspray will report that the function library is deprecated, that is quite annoying.&lt;br /&gt;
&lt;br /&gt;
Is better to use mysqli package.&lt;br /&gt;
&lt;br /&gt;
Now before we continue we need to create the database. &lt;br /&gt;
&lt;br /&gt;
{{Cmd|create database flyspray;&lt;br /&gt;
create user &#039;flyspraydbuser&#039;@&#039;localhost&#039; identified by &#039;my_password&#039;;&lt;br /&gt;
grant all privileges on flyspray.* to &#039;flyspraydbuser&#039;@&#039;localhost&#039;;}}&lt;br /&gt;
&lt;br /&gt;
If you need mysql client, you can install it like this:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add mysql-client}}&lt;br /&gt;
&lt;br /&gt;
You can of course also use a tool like phpmyadmin to create the database and setup the user.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Setup Lighttpd=&lt;br /&gt;
&lt;br /&gt;
Now our database is ready, we need to install and configure Lighttpd, with PHP support.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add lighttpd}}&lt;br /&gt;
&lt;br /&gt;
Now, you should enable PHP/FastCGI support modifying Lighttpd configuration.&lt;br /&gt;
&lt;br /&gt;
You can find it in /etc/lighttpd.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|vi /etc/lighttpd/lighttpd.conf}}&lt;br /&gt;
&lt;br /&gt;
  ... &lt;br /&gt;
  include &amp;quot;mod_fastcgi.conf&amp;quot;&lt;br /&gt;
  ...&lt;br /&gt;
&lt;br /&gt;
{{Cmd|/etc/init.d/lighttpd start}}&lt;br /&gt;
&lt;br /&gt;
If your server does not run, you can find information in /var/log/lighttpd. If that does not provide a clue you can also run Lighttpd in foreground. It should display some more debug information.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|/etc/init.d/lighttpd stop&lt;br /&gt;
lighttpd -f /etc/lighttpd/lighttpd.conf -D}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Flyspray configuration=&lt;br /&gt;
&lt;br /&gt;
Now that everything is ready, you need to make Flyspray visible to the webserver. For doing that, create a symlink from /usr/share/webapps/flyspray (that is the default location where flyspray is installed) to /var/www/localhost/htdocs.&lt;br /&gt;
This is the document root directory of lighttpd server. If you use another webserver, check what is the document root and put the symlink there.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|ln -s /usr/share/webapps/flyspray /var/www/localhost/htdocs/flyspray}}&lt;br /&gt;
&lt;br /&gt;
Flyspray needs permission to write on flyspray.conf.php that is in the root directory.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|touch /usr/share/webapps/flyspray/flyspray.conf &amp;amp;&amp;amp; chmod 775 /usr/share/webapps/flyspray/flyspray.conf.php &lt;br /&gt;
chgrp www-data /usr/share/webapps/flyspray/flyspray.conf}}&lt;br /&gt;
&lt;br /&gt;
That&#039;s all.&lt;br /&gt;
&lt;br /&gt;
Open your browser to http://$FLYSPRAY_SERVER/flyspray and follow the instruction.&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=How_To_Setup_Your_Own_IRC_Network&amp;diff=9073</id>
		<title>How To Setup Your Own IRC Network</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=How_To_Setup_Your_Own_IRC_Network&amp;diff=9073"/>
		<updated>2013-03-13T19:35:35Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: /* Configure Atheme-iris */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This doc aims to assist you on setup your own irc network with Alpine Linux.&lt;br /&gt;
&lt;br /&gt;
We will configure two irc daemons and a simple ajax webirc client.&lt;br /&gt;
&lt;br /&gt;
The irc daemons will work together sharing the channel, users and other informations.&lt;br /&gt;
&lt;br /&gt;
From charybdis point of view, this configuration is called &#039;&#039;&#039;&amp;quot;cluster&amp;quot;&#039;&#039;&#039;, but this word should not be understood with the common meaning of &amp;quot;cluster&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We assume that, as example, we want create Alpine Linux IRC Network.&lt;br /&gt;
&lt;br /&gt;
We have irc1 and irc2 servers, called respectively irc1.alpinelab.lan and irc2.alpinelab.lan.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Prerequisites are two PC with Alpine Linux installed (v2.5).&lt;br /&gt;
&lt;br /&gt;
Packages that we are going to install are:&lt;br /&gt;
&lt;br /&gt;
* Charybdis&lt;br /&gt;
* atheme-iris&lt;br /&gt;
&lt;br /&gt;
Both of those packages are in edge.&lt;br /&gt;
Charybdis is in main, atheme-iris in testing.&lt;br /&gt;
&lt;br /&gt;
You can easily use this pinning edge repo:&lt;br /&gt;
{{Cmd|vi /etc/apk/repositories}}&lt;br /&gt;
&lt;br /&gt;
Add the line:&lt;br /&gt;
{{Cmd|@edgem http://dl-2.alpinelinux.org/alpine/edge/main}}&lt;br /&gt;
{{Cmd|@edget http://dl-2.alpinelinux.org/alpine/edge/testing}}&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
{{Cmd|apk update}}&lt;br /&gt;
{{Cmd|apk add charybdis@edgem}}&lt;br /&gt;
{{Cmd|apk add atheme-iris@edget}}&lt;br /&gt;
&lt;br /&gt;
== Configure Charybdis ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cp /etc/charybdis/example.conf /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|vi /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
Modify the file starting from /etc/charybdis/reference.conf (that is well documented).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
loadmodule &amp;quot;extensions/chm_operonly.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_account.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_canjoin.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_channel.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_extgecos.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_oper.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_realname.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_identify.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_mkpasswd.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_webirc.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_farconnect.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_globalkline.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_globaloper.so&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
serverinfo {&lt;br /&gt;
	name = &amp;quot;irc1.alpinelab.lan&amp;quot;;&lt;br /&gt;
	sid = &amp;quot;01A&amp;quot;;&lt;br /&gt;
        description = &amp;quot;Alpine Linux IRC Server&amp;quot;;&lt;br /&gt;
	network_name = &amp;quot;Alpine Linux Network&amp;quot;;&lt;br /&gt;
	network_desc = &amp;quot;Alpine Linux IRC network.&amp;quot;;&lt;br /&gt;
	hub = yes;&lt;br /&gt;
	default_max_clients = 10000;&lt;br /&gt;
	nicklen = 30;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
admin {&lt;br /&gt;
	name = &amp;quot;admin&amp;quot;;&lt;br /&gt;
	description = &amp;quot;Alpine Linux IRC network administrator&amp;quot;;&lt;br /&gt;
	email = &amp;quot;ircadmin@alpinelab.lan&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
log {&lt;br /&gt;
	fname_userlog = &amp;quot;logs/userlog&amp;quot;;&lt;br /&gt;
	#fname_fuserlog = &amp;quot;logs/fuserlog&amp;quot;;&lt;br /&gt;
	fname_operlog = &amp;quot;logs/operlog&amp;quot;;&lt;br /&gt;
	#fname_foperlog = &amp;quot;logs/foperlog&amp;quot;;&lt;br /&gt;
	fname_serverlog = &amp;quot;logs/serverlog&amp;quot;;&lt;br /&gt;
	#fname_klinelog = &amp;quot;logs/klinelog&amp;quot;;&lt;br /&gt;
	fname_killlog = &amp;quot;logs/killlog&amp;quot;;&lt;br /&gt;
	fname_operspylog = &amp;quot;logs/operspylog&amp;quot;;&lt;br /&gt;
	#fname_ioerrorlog = &amp;quot;logs/ioerror&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;users&amp;quot; {&lt;br /&gt;
	ping_time = 2 minutes;&lt;br /&gt;
	number_per_ident = 10;&lt;br /&gt;
	number_per_ip = 10;&lt;br /&gt;
	number_per_ip_global = 50;&lt;br /&gt;
	cidr_ipv4_bitlen = 24;&lt;br /&gt;
	cidr_ipv6_bitlen = 64;&lt;br /&gt;
	number_per_cidr = 200;&lt;br /&gt;
	max_number = 100;&lt;br /&gt;
	sendq = 400 kbytes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;opers&amp;quot; {&lt;br /&gt;
	ping_time = 5 minutes;&lt;br /&gt;
	number_per_ip = 10;&lt;br /&gt;
	max_number = 1000;&lt;br /&gt;
	sendq = 1 megabyte;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;server&amp;quot; {&lt;br /&gt;
	ping_time = 5 minutes;&lt;br /&gt;
	connectfreq = 5 minutes;&lt;br /&gt;
	max_number = 10;&lt;br /&gt;
	sendq = 4 megabytes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
listen {&lt;br /&gt;
	defer_accept = yes;&lt;br /&gt;
	port = 5000, 6665 .. 6669;&lt;br /&gt;
	sslport = 6697;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
auth {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;&lt;br /&gt;
	class = &amp;quot;users&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;local_op&amp;quot; {&lt;br /&gt;
	privs = oper:local_kill, oper:operwall;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;server_bot&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;local_op&amp;quot;;&lt;br /&gt;
	privs = oper:kline, oper:remoteban, snomask:nick_changes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;global_op&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;local_op&amp;quot;;&lt;br /&gt;
	privs = oper:global_kill, oper:routing, oper:kline, oper:unkline, oper:xline,&lt;br /&gt;
		oper:resv, oper:mass_notice, oper:remoteban;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;admin&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;global_op&amp;quot;;&lt;br /&gt;
	privs = oper:admin, oper:die, oper:rehash, oper:spy;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;&lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;;&lt;br /&gt;
	snomask = &amp;quot;+Zbfkrsuy&amp;quot;;&lt;br /&gt;
	flags = ~encrypted;&lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc2.alpinelab.lan&amp;quot; {&lt;br /&gt;
	host=&amp;quot;10.0.2.10&amp;quot;;&lt;br /&gt;
        send_password = &amp;quot;Password_To_Server&amp;quot;;&lt;br /&gt;
	accept_password = &amp;quot;Password_From_Server&amp;quot;; &lt;br /&gt;
	port = 6666;&lt;br /&gt;
	hub_mask = &amp;quot;*&amp;quot;;&lt;br /&gt;
	class = &amp;quot;server&amp;quot;;&lt;br /&gt;
	flags = compressed, topicburst, autoconn;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
service {&lt;br /&gt;
	name = &amp;quot;services.int&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
cluster {&lt;br /&gt;
	name = &amp;quot;*.alpinelab.lan&amp;quot;;&lt;br /&gt;
	flags = kline, tkline, unkline, xline, txline, unxline, resv, tresv, unresv;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
shared {&lt;br /&gt;
	oper = &amp;quot;*@*&amp;quot;, &amp;quot;*&amp;quot;;&lt;br /&gt;
	flags = all, rehash;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
channel {&lt;br /&gt;
	use_invex = yes;&lt;br /&gt;
	use_except = yes;&lt;br /&gt;
	use_forward = yes;&lt;br /&gt;
	use_knock = yes;&lt;br /&gt;
	knock_delay = 5 minutes;&lt;br /&gt;
	knock_delay_channel = 1 minute;&lt;br /&gt;
	max_chans_per_user = 15;&lt;br /&gt;
	max_bans = 100;&lt;br /&gt;
	max_bans_large = 500;&lt;br /&gt;
	default_split_user_count = 0;&lt;br /&gt;
	default_split_server_count = 0;&lt;br /&gt;
	no_create_on_split = no;&lt;br /&gt;
	no_join_on_split = no;&lt;br /&gt;
	burst_topicwho = yes;&lt;br /&gt;
	kick_on_split_riding = no;&lt;br /&gt;
	only_ascii_channels = no;&lt;br /&gt;
	resv_forcepart = yes;&lt;br /&gt;
	channel_target_change = yes;&lt;br /&gt;
	disable_local_channels = no;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
serverhide {&lt;br /&gt;
	flatten_links = yes;&lt;br /&gt;
	links_delay = 5 minutes;&lt;br /&gt;
	hidden = no;&lt;br /&gt;
	disable_hidden = no;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
blacklist {&lt;br /&gt;
	host = &amp;quot;rbl.efnetrbl.org&amp;quot;;&lt;br /&gt;
	type = ipv4;&lt;br /&gt;
	reject_reason = &amp;quot;${nick}, your IP (${ip}) is listed in EFnet&#039;s RBL. For assistance, see http://efnetrbl.org/?i=${ip}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	/* Example of a blacklist that supports both IPv4 and IPv6 */&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;NickServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;NickServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;ChanServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;ChanServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;OperServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;OperServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;MemoServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;MemoServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;NS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;NickServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;CS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;ChanServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;OS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;OperServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;MS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;MemoServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
general {&lt;br /&gt;
	hide_error_messages = opers;&lt;br /&gt;
	hide_spoof_ips = yes;&lt;br /&gt;
	default_umodes = &amp;quot;+i&amp;quot;;&lt;br /&gt;
	default_operstring = &amp;quot;is an IRC Operator&amp;quot;;&lt;br /&gt;
	default_adminstring = &amp;quot;is a Server Administrator&amp;quot;;&lt;br /&gt;
	servicestring = &amp;quot;is a Network Service&amp;quot;;&lt;br /&gt;
	disable_fake_channels = no;&lt;br /&gt;
	tkline_expire_notices = no;&lt;br /&gt;
	default_floodcount = 10;&lt;br /&gt;
	failed_oper_notice = yes;&lt;br /&gt;
	dots_in_ident=2;&lt;br /&gt;
	min_nonwildcard = 4;&lt;br /&gt;
	min_nonwildcard_simple = 3;&lt;br /&gt;
	max_accept = 100;&lt;br /&gt;
	max_monitor = 100;&lt;br /&gt;
	anti_nick_flood = yes;&lt;br /&gt;
	max_nick_time = 20 seconds;&lt;br /&gt;
	max_nick_changes = 5;&lt;br /&gt;
	anti_spam_exit_message_time = 5 minutes;&lt;br /&gt;
	ts_warn_delta = 30 seconds;&lt;br /&gt;
	ts_max_delta = 5 minutes;&lt;br /&gt;
	client_exit = yes;&lt;br /&gt;
	collision_fnc = yes;&lt;br /&gt;
	resv_fnc = yes;&lt;br /&gt;
	global_snotices = yes;&lt;br /&gt;
	dline_with_reason = yes;&lt;br /&gt;
	kline_delay = 0 seconds;&lt;br /&gt;
	kline_with_reason = yes;&lt;br /&gt;
	kline_reason = &amp;quot;K-Lined&amp;quot;;&lt;br /&gt;
	identify_service = &amp;quot;NickServ@services.int&amp;quot;;&lt;br /&gt;
	identify_command = &amp;quot;IDENTIFY&amp;quot;;&lt;br /&gt;
	non_redundant_klines = yes;&lt;br /&gt;
	warn_no_nline = yes;&lt;br /&gt;
	use_propagated_bans = yes;&lt;br /&gt;
	stats_e_disabled = no;&lt;br /&gt;
	stats_c_oper_only=no;&lt;br /&gt;
	stats_h_oper_only=no;&lt;br /&gt;
	stats_y_oper_only=no;&lt;br /&gt;
	stats_o_oper_only=yes;&lt;br /&gt;
	stats_P_oper_only=no;&lt;br /&gt;
	stats_i_oper_only=masked;&lt;br /&gt;
	stats_k_oper_only=masked;&lt;br /&gt;
	map_oper_only = no;&lt;br /&gt;
	operspy_admin_only = no;&lt;br /&gt;
	operspy_dont_care_user_info = no;&lt;br /&gt;
	caller_id_wait = 1 minute;&lt;br /&gt;
	pace_wait_simple = 1 second;&lt;br /&gt;
	pace_wait = 10 seconds;&lt;br /&gt;
	short_motd = no;&lt;br /&gt;
	ping_cookie = no;&lt;br /&gt;
	connect_timeout = 30 seconds;&lt;br /&gt;
	default_ident_timeout = 5;&lt;br /&gt;
	disable_auth = no;&lt;br /&gt;
	no_oper_flood = yes;&lt;br /&gt;
	max_targets = 4;&lt;br /&gt;
	client_flood_max_lines = 20;&lt;br /&gt;
	use_whois_actually = no;&lt;br /&gt;
	oper_only_umodes = operwall, locops, servnotice;&lt;br /&gt;
	oper_umodes = locops, servnotice, operwall, wallop;&lt;br /&gt;
	oper_snomask = &amp;quot;+s&amp;quot;;&lt;br /&gt;
	burst_away = yes;&lt;br /&gt;
	nick_delay = 0 seconds; # 15 minutes if you want to enable this&lt;br /&gt;
	reject_ban_time = 1 minute;&lt;br /&gt;
	reject_after_count = 3;&lt;br /&gt;
	reject_duration = 5 minutes;&lt;br /&gt;
	throttle_duration = 60;&lt;br /&gt;
	throttle_count = 4;&lt;br /&gt;
	max_ratelimit_tokens = 30;&lt;br /&gt;
	away_interval = 30;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
modules {&lt;br /&gt;
	path = &amp;quot;/usr/lib/charybdis/modules&amp;quot;;&lt;br /&gt;
	path = &amp;quot;/usr/lib/charybdis/modules/autoload&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant part of the config file are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
serverinfo {&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
	sid = &amp;quot;01A&amp;quot;; &amp;lt;-----------   This must be unique. You can choose two cipher and one letter.&lt;br /&gt;
	hub = yes;   &amp;lt;-----------   This works as an hub. Allows other irc server to connects.&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
listen {&lt;br /&gt;
	port = 5000, 6665 .. 6669; &amp;lt;---- Port where charybdis is listening. You can also bind to a specific ip adding &amp;quot;host&amp;quot; directive. If not specifyied charybdis listen on all interfaces.&lt;br /&gt;
	sslport = 6697;            &amp;lt;---- Port for SSL connection. You need a certificate in order to use this feature.&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;  &amp;lt;----------- This is a masq used to match who can become operator. This support CIDR. If you want to allows only 10.0.0.0/24, you can choose &amp;quot;*@10.0.0.*&amp;quot;.&lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;; &amp;lt;---- Password used to become IRC Operator. &lt;br /&gt;
	flags = ~encrypted;            &amp;lt;---- Tilde &amp;quot;~&amp;quot; means not. So the password used in this block is not encrypted. Without &amp;quot;~&amp;quot;, you need to write the password in this block encrypted.&lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc2.alpinelab.lan&amp;quot; {                &amp;lt;----------- Descriptive name of the server you want to connect to.&lt;br /&gt;
	host=&amp;quot;10.0.2.10&amp;quot;;                     &amp;lt;----------- IP or HOST. They MUST be valid. If hostname, it MUST be an A record.&lt;br /&gt;
	send_password = &amp;quot;Password_To_Server&amp;quot;;     &amp;lt;------- Password you sent TO irc2. In irc2 this is &amp;quot;accept_password&amp;quot;.&lt;br /&gt;
	accept_password = &amp;quot;Password_From_Server&amp;quot;; &amp;lt;------- Password you expect to receive FROM irc2. In irc2 this is &amp;quot;send_password&amp;quot;&lt;br /&gt;
	flags = compressed, topicburst, autoconn; &amp;lt;------- Autoconn means that irc1 will try automatically to connect to irc2.&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
cluster {&lt;br /&gt;
	name = &amp;quot;*.alpinelab.lan&amp;quot;;             &amp;lt;----------- Masq to indicate what servers can share the information. Those information are written in the following &amp;quot;flags&amp;quot; entry.&lt;br /&gt;
	flags = kline, tkline, unkline, xline, txline, unxline, resv, tresv, unresv; &amp;lt;--- Check IRC documentation to understand the meaning of those flags. &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
shared {&lt;br /&gt;
	oper = &amp;quot;*@*&amp;quot;, &amp;quot;*&amp;quot;;  &amp;lt;----------- The user@host and the server must be on in order to set klines.               &lt;br /&gt;
	flags = all,rehash; &amp;lt;----------- flags: list of what to allow them to place. All oper will receive this.&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can even remove the *Serv entries. Charybdis itselfs does not have this features, you should use externa programs that works as bot for that (atheme services for example).&lt;br /&gt;
&lt;br /&gt;
In the other server, irc2, configuration is pretty similar.&lt;br /&gt;
&lt;br /&gt;
Those are the only difference of /etc/charybdis/ircd.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
serverinfo {&lt;br /&gt;
	sid = &amp;quot;02A&amp;quot;; &lt;br /&gt;
	hub = yes;   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;  &lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;; &lt;br /&gt;
	flags = ~encrypted;            &lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc1.alpinelab.lan&amp;quot; {                &lt;br /&gt;
	host=&amp;quot;10.0.1.10&amp;quot;;                     &lt;br /&gt;
	send_password = &amp;quot;Password_From_Server&amp;quot;; &lt;br /&gt;
	accept_password = &amp;quot;Password_To_Server&amp;quot;; &lt;br /&gt;
	flags = compressed, topicburst;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In flags directive, connect{} block, we do not set &amp;quot;autoconn&amp;quot;. &lt;br /&gt;
This means that irc1 will automatically connect to irc2, but not the contrary.&lt;br /&gt;
&lt;br /&gt;
Charybdis has a lot of other cool features, like ssl connection, spam blacklisting and so on. &lt;br /&gt;
Look at documentation here: [http://www.stack.nl/~jilles/irc/charybdis-oper-guide/]&lt;br /&gt;
&lt;br /&gt;
After having modifyied the ircd.conf in both server, fix the permissions:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|chown ircd /etc/charybdis/ircd.conf}}&lt;br /&gt;
{{Cmd|chmod 400 /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
== Configure Atheme-iris ==&lt;br /&gt;
&lt;br /&gt;
Atheme-iris is a nice webchat written in AJAX and Python. It&#039;s a fork of the famous qwebirc.&lt;br /&gt;
&lt;br /&gt;
Configuration in pretty simple.&lt;br /&gt;
&lt;br /&gt;
By default, atheme-iris will listen on all interfaces. If you want modify this behaviour, change /etc/conf.d/atheme-iris and set the IP address where atheme will bind.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[execution]&lt;br /&gt;
args: -n -p 3989&lt;br /&gt;
syslog_addr:&lt;br /&gt;
syslog_port: 514&lt;br /&gt;
&lt;br /&gt;
[irc]&lt;br /&gt;
server: localhost&lt;br /&gt;
port: 6667&lt;br /&gt;
ssl: false&lt;br /&gt;
bind_ip: 127.0.0.1&lt;br /&gt;
realname: http://irc1.alpinelab.lan&lt;br /&gt;
ident: nick&lt;br /&gt;
ident_string: webchat&lt;br /&gt;
webirc_mode: webirc&lt;br /&gt;
webirc_password: fish&lt;br /&gt;
&lt;br /&gt;
[athemeengine]&lt;br /&gt;
# Leave this unset to disable all Atheme integration.&lt;br /&gt;
xmlrpc_path:&lt;br /&gt;
chan_list_enabled: true&lt;br /&gt;
chan_list_max_age: 120&lt;br /&gt;
chan_list_count: 3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[feedbackengine]&lt;br /&gt;
from: moo@moo.com&lt;br /&gt;
to: moo@moo.com&lt;br /&gt;
smtp_host: 127.0.0.1&lt;br /&gt;
smtp_port: 25&lt;br /&gt;
&lt;br /&gt;
[frontend]&lt;br /&gt;
base_url: http://irc1.alpinelab.lan:9090&lt;br /&gt;
network_name: AlpineLinux&lt;br /&gt;
app_title: %(network_name)s Web IRC&lt;br /&gt;
extra_html:&lt;br /&gt;
initial_nick:&lt;br /&gt;
prompt: true&lt;br /&gt;
chan_prompt: true&lt;br /&gt;
chan_autoconnect: true&lt;br /&gt;
static_base_url: /&lt;br /&gt;
dynamic_base_url: /&lt;br /&gt;
&lt;br /&gt;
[atheme]&lt;br /&gt;
# Even if we don&#039;t use nickserv, disabling it cause atheme-iris to not work.&lt;br /&gt;
# Look at https://github.com/atheme/iris/issues/12&lt;br /&gt;
nickserv_login: true&lt;br /&gt;
chan_list_on_start: true&lt;br /&gt;
chan_list_cloud_view: false&lt;br /&gt;
&lt;br /&gt;
[ui]&lt;br /&gt;
dedicated_msg_window: false&lt;br /&gt;
dedicated_notice_window: false&lt;br /&gt;
hide_joinparts: false&lt;br /&gt;
simple_color: false&lt;br /&gt;
fg_color: DDDDDD&lt;br /&gt;
fg_sec_color: 999999&lt;br /&gt;
bg_color: 111111&lt;br /&gt;
lastpos_line: true&lt;br /&gt;
nick_click_query: false&lt;br /&gt;
nick_colors: false&lt;br /&gt;
nick_status: false&lt;br /&gt;
flash_on_mention: false&lt;br /&gt;
beep_on_mention: false&lt;br /&gt;
&lt;br /&gt;
[adminengine]&lt;br /&gt;
hosts: 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
[proxy]&lt;br /&gt;
forwarded_for_header:&lt;br /&gt;
forwarded_for_ips: 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
[tuneback]&lt;br /&gt;
update_freq: 0.5&lt;br /&gt;
maxbuflen: 100000&lt;br /&gt;
maxsubscriptions: 1&lt;br /&gt;
maxlinelen: 600&lt;br /&gt;
dns_timeout: 5&lt;br /&gt;
http_ajax_request_timeout: 30&lt;br /&gt;
http_request_timeout: 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the [execution] block, parameters are overridden by /etc/conf.d/atheme-iris settings.&lt;br /&gt;
&lt;br /&gt;
Replicate the same configuration in irc2.alpinelab.lan. &lt;br /&gt;
&lt;br /&gt;
But in irc2 server, change the entry irc1.alpinelab.lan with irc2.alpinelab.lan.&lt;br /&gt;
&lt;br /&gt;
Atheme-iris will connect to charybdis on 127.0.0.1 ip, according with this directive:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;server: localhost&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That&#039;s all.&lt;br /&gt;
&lt;br /&gt;
Now, you can go with one browser to http://irc1.alpinelab.lan:9090 and another in http://irc2.alpinelab.lan:9090.&lt;br /&gt;
&lt;br /&gt;
Login with two different users in the same channel.&lt;br /&gt;
&lt;br /&gt;
You should view both users on both webclients.&lt;br /&gt;
&lt;br /&gt;
Happy chatting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When you login into webchat, you will see &amp;quot;webchat@127.0.0.1&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re wondering how change 127.0.0.1 with a spoofed address, you need another auth{} block in charybdis. Look at /etc/charybdis/reference.conf for details. &lt;br /&gt;
&lt;br /&gt;
If you want the real ip address of the client, you need to setup cgi:irc with atheme-iris, and Charybdis will use the  module called _mwebirc to &amp;quot;glue&amp;quot; himself with atheme-iris. Cgiirc is available in edge/testing repository.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to remove the button &amp;quot;Menu&amp;quot; which appears in the top-left position into webchat, then:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
vim /var/lib/atheme-iris/css/qui.mcss&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Look for .dropdown-tab and then add &amp;quot;display: none;&amp;quot; as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
.qwebirc-qui .outertabbar .dropdown-tab {&lt;br /&gt;
  float: left;&lt;br /&gt;
  width: 24px;&lt;br /&gt;
  cursor: pointer;&lt;br /&gt;
  cursor: hand;&lt;br /&gt;
  display: none; &amp;lt;---- This is what you need to add.&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Enjoy!&lt;br /&gt;
&lt;br /&gt;
== Useful links ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IRC Commands&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/List_of_Internet_Relay_Chat_commands&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*-Line flags&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/K-line_%28IRC%29#K-line&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=How_To_Setup_Your_Own_IRC_Network&amp;diff=9072</id>
		<title>How To Setup Your Own IRC Network</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=How_To_Setup_Your_Own_IRC_Network&amp;diff=9072"/>
		<updated>2013-03-13T19:26:07Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: /* Prerequisites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This doc aims to assist you on setup your own irc network with Alpine Linux.&lt;br /&gt;
&lt;br /&gt;
We will configure two irc daemons and a simple ajax webirc client.&lt;br /&gt;
&lt;br /&gt;
The irc daemons will work together sharing the channel, users and other informations.&lt;br /&gt;
&lt;br /&gt;
From charybdis point of view, this configuration is called &#039;&#039;&#039;&amp;quot;cluster&amp;quot;&#039;&#039;&#039;, but this word should not be understood with the common meaning of &amp;quot;cluster&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We assume that, as example, we want create Alpine Linux IRC Network.&lt;br /&gt;
&lt;br /&gt;
We have irc1 and irc2 servers, called respectively irc1.alpinelab.lan and irc2.alpinelab.lan.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Prerequisites are two PC with Alpine Linux installed (v2.5).&lt;br /&gt;
&lt;br /&gt;
Packages that we are going to install are:&lt;br /&gt;
&lt;br /&gt;
* Charybdis&lt;br /&gt;
* atheme-iris&lt;br /&gt;
&lt;br /&gt;
Both of those packages are in edge.&lt;br /&gt;
Charybdis is in main, atheme-iris in testing.&lt;br /&gt;
&lt;br /&gt;
You can easily use this pinning edge repo:&lt;br /&gt;
{{Cmd|vi /etc/apk/repositories}}&lt;br /&gt;
&lt;br /&gt;
Add the line:&lt;br /&gt;
{{Cmd|@edgem http://dl-2.alpinelinux.org/alpine/edge/main}}&lt;br /&gt;
{{Cmd|@edget http://dl-2.alpinelinux.org/alpine/edge/testing}}&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
{{Cmd|apk update}}&lt;br /&gt;
{{Cmd|apk add charybdis@edgem}}&lt;br /&gt;
{{Cmd|apk add atheme-iris@edget}}&lt;br /&gt;
&lt;br /&gt;
== Configure Charybdis ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cp /etc/charybdis/example.conf /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|vi /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
Modify the file starting from /etc/charybdis/reference.conf (that is well documented).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
loadmodule &amp;quot;extensions/chm_operonly.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_account.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_canjoin.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_channel.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_extgecos.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_oper.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_realname.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_identify.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_mkpasswd.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_webirc.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_farconnect.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_globalkline.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_globaloper.so&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
serverinfo {&lt;br /&gt;
	name = &amp;quot;irc1.alpinelab.lan&amp;quot;;&lt;br /&gt;
	sid = &amp;quot;01A&amp;quot;;&lt;br /&gt;
        description = &amp;quot;Alpine Linux IRC Server&amp;quot;;&lt;br /&gt;
	network_name = &amp;quot;Alpine Linux Network&amp;quot;;&lt;br /&gt;
	network_desc = &amp;quot;Alpine Linux IRC network.&amp;quot;;&lt;br /&gt;
	hub = yes;&lt;br /&gt;
	default_max_clients = 10000;&lt;br /&gt;
	nicklen = 30;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
admin {&lt;br /&gt;
	name = &amp;quot;admin&amp;quot;;&lt;br /&gt;
	description = &amp;quot;Alpine Linux IRC network administrator&amp;quot;;&lt;br /&gt;
	email = &amp;quot;ircadmin@alpinelab.lan&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
log {&lt;br /&gt;
	fname_userlog = &amp;quot;logs/userlog&amp;quot;;&lt;br /&gt;
	#fname_fuserlog = &amp;quot;logs/fuserlog&amp;quot;;&lt;br /&gt;
	fname_operlog = &amp;quot;logs/operlog&amp;quot;;&lt;br /&gt;
	#fname_foperlog = &amp;quot;logs/foperlog&amp;quot;;&lt;br /&gt;
	fname_serverlog = &amp;quot;logs/serverlog&amp;quot;;&lt;br /&gt;
	#fname_klinelog = &amp;quot;logs/klinelog&amp;quot;;&lt;br /&gt;
	fname_killlog = &amp;quot;logs/killlog&amp;quot;;&lt;br /&gt;
	fname_operspylog = &amp;quot;logs/operspylog&amp;quot;;&lt;br /&gt;
	#fname_ioerrorlog = &amp;quot;logs/ioerror&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;users&amp;quot; {&lt;br /&gt;
	ping_time = 2 minutes;&lt;br /&gt;
	number_per_ident = 10;&lt;br /&gt;
	number_per_ip = 10;&lt;br /&gt;
	number_per_ip_global = 50;&lt;br /&gt;
	cidr_ipv4_bitlen = 24;&lt;br /&gt;
	cidr_ipv6_bitlen = 64;&lt;br /&gt;
	number_per_cidr = 200;&lt;br /&gt;
	max_number = 100;&lt;br /&gt;
	sendq = 400 kbytes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;opers&amp;quot; {&lt;br /&gt;
	ping_time = 5 minutes;&lt;br /&gt;
	number_per_ip = 10;&lt;br /&gt;
	max_number = 1000;&lt;br /&gt;
	sendq = 1 megabyte;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;server&amp;quot; {&lt;br /&gt;
	ping_time = 5 minutes;&lt;br /&gt;
	connectfreq = 5 minutes;&lt;br /&gt;
	max_number = 10;&lt;br /&gt;
	sendq = 4 megabytes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
listen {&lt;br /&gt;
	defer_accept = yes;&lt;br /&gt;
	port = 5000, 6665 .. 6669;&lt;br /&gt;
	sslport = 6697;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
auth {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;&lt;br /&gt;
	class = &amp;quot;users&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;local_op&amp;quot; {&lt;br /&gt;
	privs = oper:local_kill, oper:operwall;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;server_bot&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;local_op&amp;quot;;&lt;br /&gt;
	privs = oper:kline, oper:remoteban, snomask:nick_changes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;global_op&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;local_op&amp;quot;;&lt;br /&gt;
	privs = oper:global_kill, oper:routing, oper:kline, oper:unkline, oper:xline,&lt;br /&gt;
		oper:resv, oper:mass_notice, oper:remoteban;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;admin&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;global_op&amp;quot;;&lt;br /&gt;
	privs = oper:admin, oper:die, oper:rehash, oper:spy;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;&lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;;&lt;br /&gt;
	snomask = &amp;quot;+Zbfkrsuy&amp;quot;;&lt;br /&gt;
	flags = ~encrypted;&lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc2.alpinelab.lan&amp;quot; {&lt;br /&gt;
	host=&amp;quot;10.0.2.10&amp;quot;;&lt;br /&gt;
        send_password = &amp;quot;Password_To_Server&amp;quot;;&lt;br /&gt;
	accept_password = &amp;quot;Password_From_Server&amp;quot;; &lt;br /&gt;
	port = 6666;&lt;br /&gt;
	hub_mask = &amp;quot;*&amp;quot;;&lt;br /&gt;
	class = &amp;quot;server&amp;quot;;&lt;br /&gt;
	flags = compressed, topicburst, autoconn;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
service {&lt;br /&gt;
	name = &amp;quot;services.int&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
cluster {&lt;br /&gt;
	name = &amp;quot;*.alpinelab.lan&amp;quot;;&lt;br /&gt;
	flags = kline, tkline, unkline, xline, txline, unxline, resv, tresv, unresv;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
shared {&lt;br /&gt;
	oper = &amp;quot;*@*&amp;quot;, &amp;quot;*&amp;quot;;&lt;br /&gt;
	flags = all, rehash;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
channel {&lt;br /&gt;
	use_invex = yes;&lt;br /&gt;
	use_except = yes;&lt;br /&gt;
	use_forward = yes;&lt;br /&gt;
	use_knock = yes;&lt;br /&gt;
	knock_delay = 5 minutes;&lt;br /&gt;
	knock_delay_channel = 1 minute;&lt;br /&gt;
	max_chans_per_user = 15;&lt;br /&gt;
	max_bans = 100;&lt;br /&gt;
	max_bans_large = 500;&lt;br /&gt;
	default_split_user_count = 0;&lt;br /&gt;
	default_split_server_count = 0;&lt;br /&gt;
	no_create_on_split = no;&lt;br /&gt;
	no_join_on_split = no;&lt;br /&gt;
	burst_topicwho = yes;&lt;br /&gt;
	kick_on_split_riding = no;&lt;br /&gt;
	only_ascii_channels = no;&lt;br /&gt;
	resv_forcepart = yes;&lt;br /&gt;
	channel_target_change = yes;&lt;br /&gt;
	disable_local_channels = no;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
serverhide {&lt;br /&gt;
	flatten_links = yes;&lt;br /&gt;
	links_delay = 5 minutes;&lt;br /&gt;
	hidden = no;&lt;br /&gt;
	disable_hidden = no;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
blacklist {&lt;br /&gt;
	host = &amp;quot;rbl.efnetrbl.org&amp;quot;;&lt;br /&gt;
	type = ipv4;&lt;br /&gt;
	reject_reason = &amp;quot;${nick}, your IP (${ip}) is listed in EFnet&#039;s RBL. For assistance, see http://efnetrbl.org/?i=${ip}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	/* Example of a blacklist that supports both IPv4 and IPv6 */&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;NickServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;NickServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;ChanServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;ChanServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;OperServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;OperServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;MemoServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;MemoServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;NS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;NickServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;CS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;ChanServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;OS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;OperServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;MS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;MemoServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
general {&lt;br /&gt;
	hide_error_messages = opers;&lt;br /&gt;
	hide_spoof_ips = yes;&lt;br /&gt;
	default_umodes = &amp;quot;+i&amp;quot;;&lt;br /&gt;
	default_operstring = &amp;quot;is an IRC Operator&amp;quot;;&lt;br /&gt;
	default_adminstring = &amp;quot;is a Server Administrator&amp;quot;;&lt;br /&gt;
	servicestring = &amp;quot;is a Network Service&amp;quot;;&lt;br /&gt;
	disable_fake_channels = no;&lt;br /&gt;
	tkline_expire_notices = no;&lt;br /&gt;
	default_floodcount = 10;&lt;br /&gt;
	failed_oper_notice = yes;&lt;br /&gt;
	dots_in_ident=2;&lt;br /&gt;
	min_nonwildcard = 4;&lt;br /&gt;
	min_nonwildcard_simple = 3;&lt;br /&gt;
	max_accept = 100;&lt;br /&gt;
	max_monitor = 100;&lt;br /&gt;
	anti_nick_flood = yes;&lt;br /&gt;
	max_nick_time = 20 seconds;&lt;br /&gt;
	max_nick_changes = 5;&lt;br /&gt;
	anti_spam_exit_message_time = 5 minutes;&lt;br /&gt;
	ts_warn_delta = 30 seconds;&lt;br /&gt;
	ts_max_delta = 5 minutes;&lt;br /&gt;
	client_exit = yes;&lt;br /&gt;
	collision_fnc = yes;&lt;br /&gt;
	resv_fnc = yes;&lt;br /&gt;
	global_snotices = yes;&lt;br /&gt;
	dline_with_reason = yes;&lt;br /&gt;
	kline_delay = 0 seconds;&lt;br /&gt;
	kline_with_reason = yes;&lt;br /&gt;
	kline_reason = &amp;quot;K-Lined&amp;quot;;&lt;br /&gt;
	identify_service = &amp;quot;NickServ@services.int&amp;quot;;&lt;br /&gt;
	identify_command = &amp;quot;IDENTIFY&amp;quot;;&lt;br /&gt;
	non_redundant_klines = yes;&lt;br /&gt;
	warn_no_nline = yes;&lt;br /&gt;
	use_propagated_bans = yes;&lt;br /&gt;
	stats_e_disabled = no;&lt;br /&gt;
	stats_c_oper_only=no;&lt;br /&gt;
	stats_h_oper_only=no;&lt;br /&gt;
	stats_y_oper_only=no;&lt;br /&gt;
	stats_o_oper_only=yes;&lt;br /&gt;
	stats_P_oper_only=no;&lt;br /&gt;
	stats_i_oper_only=masked;&lt;br /&gt;
	stats_k_oper_only=masked;&lt;br /&gt;
	map_oper_only = no;&lt;br /&gt;
	operspy_admin_only = no;&lt;br /&gt;
	operspy_dont_care_user_info = no;&lt;br /&gt;
	caller_id_wait = 1 minute;&lt;br /&gt;
	pace_wait_simple = 1 second;&lt;br /&gt;
	pace_wait = 10 seconds;&lt;br /&gt;
	short_motd = no;&lt;br /&gt;
	ping_cookie = no;&lt;br /&gt;
	connect_timeout = 30 seconds;&lt;br /&gt;
	default_ident_timeout = 5;&lt;br /&gt;
	disable_auth = no;&lt;br /&gt;
	no_oper_flood = yes;&lt;br /&gt;
	max_targets = 4;&lt;br /&gt;
	client_flood_max_lines = 20;&lt;br /&gt;
	use_whois_actually = no;&lt;br /&gt;
	oper_only_umodes = operwall, locops, servnotice;&lt;br /&gt;
	oper_umodes = locops, servnotice, operwall, wallop;&lt;br /&gt;
	oper_snomask = &amp;quot;+s&amp;quot;;&lt;br /&gt;
	burst_away = yes;&lt;br /&gt;
	nick_delay = 0 seconds; # 15 minutes if you want to enable this&lt;br /&gt;
	reject_ban_time = 1 minute;&lt;br /&gt;
	reject_after_count = 3;&lt;br /&gt;
	reject_duration = 5 minutes;&lt;br /&gt;
	throttle_duration = 60;&lt;br /&gt;
	throttle_count = 4;&lt;br /&gt;
	max_ratelimit_tokens = 30;&lt;br /&gt;
	away_interval = 30;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
modules {&lt;br /&gt;
	path = &amp;quot;/usr/lib/charybdis/modules&amp;quot;;&lt;br /&gt;
	path = &amp;quot;/usr/lib/charybdis/modules/autoload&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant part of the config file are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
serverinfo {&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
	sid = &amp;quot;01A&amp;quot;; &amp;lt;-----------   This must be unique. You can choose two cipher and one letter.&lt;br /&gt;
	hub = yes;   &amp;lt;-----------   This works as an hub. Allows other irc server to connects.&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
listen {&lt;br /&gt;
	port = 5000, 6665 .. 6669; &amp;lt;---- Port where charybdis is listening. You can also bind to a specific ip adding &amp;quot;host&amp;quot; directive. If not specifyied charybdis listen on all interfaces.&lt;br /&gt;
	sslport = 6697;            &amp;lt;---- Port for SSL connection. You need a certificate in order to use this feature.&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;  &amp;lt;----------- This is a masq used to match who can become operator. This support CIDR. If you want to allows only 10.0.0.0/24, you can choose &amp;quot;*@10.0.0.*&amp;quot;.&lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;; &amp;lt;---- Password used to become IRC Operator. &lt;br /&gt;
	flags = ~encrypted;            &amp;lt;---- Tilde &amp;quot;~&amp;quot; means not. So the password used in this block is not encrypted. Without &amp;quot;~&amp;quot;, you need to write the password in this block encrypted.&lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc2.alpinelab.lan&amp;quot; {                &amp;lt;----------- Descriptive name of the server you want to connect to.&lt;br /&gt;
	host=&amp;quot;10.0.2.10&amp;quot;;                     &amp;lt;----------- IP or HOST. They MUST be valid. If hostname, it MUST be an A record.&lt;br /&gt;
	send_password = &amp;quot;Password_To_Server&amp;quot;;     &amp;lt;------- Password you sent TO irc2. In irc2 this is &amp;quot;accept_password&amp;quot;.&lt;br /&gt;
	accept_password = &amp;quot;Password_From_Server&amp;quot;; &amp;lt;------- Password you expect to receive FROM irc2. In irc2 this is &amp;quot;send_password&amp;quot;&lt;br /&gt;
	flags = compressed, topicburst, autoconn; &amp;lt;------- Autoconn means that irc1 will try automatically to connect to irc2.&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
cluster {&lt;br /&gt;
	name = &amp;quot;*.alpinelab.lan&amp;quot;;             &amp;lt;----------- Masq to indicate what servers can share the information. Those information are written in the following &amp;quot;flags&amp;quot; entry.&lt;br /&gt;
	flags = kline, tkline, unkline, xline, txline, unxline, resv, tresv, unresv; &amp;lt;--- Check IRC documentation to understand the meaning of those flags. &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
shared {&lt;br /&gt;
	oper = &amp;quot;*@*&amp;quot;, &amp;quot;*&amp;quot;;  &amp;lt;----------- The user@host and the server must be on in order to set klines.               &lt;br /&gt;
	flags = all,rehash; &amp;lt;----------- flags: list of what to allow them to place. All oper will receive this.&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can even remove the *Serv entries. Charybdis itselfs does not have this features, you should use externa programs that works as bot for that (atheme services for example).&lt;br /&gt;
&lt;br /&gt;
In the other server, irc2, configuration is pretty similar.&lt;br /&gt;
&lt;br /&gt;
Those are the only difference of /etc/charybdis/ircd.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
serverinfo {&lt;br /&gt;
	sid = &amp;quot;02A&amp;quot;; &lt;br /&gt;
	hub = yes;   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;  &lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;; &lt;br /&gt;
	flags = ~encrypted;            &lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc1.alpinelab.lan&amp;quot; {                &lt;br /&gt;
	host=&amp;quot;10.0.1.10&amp;quot;;                     &lt;br /&gt;
	send_password = &amp;quot;Password_From_Server&amp;quot;; &lt;br /&gt;
	accept_password = &amp;quot;Password_To_Server&amp;quot;; &lt;br /&gt;
	flags = compressed, topicburst;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In flags directive, connect{} block, we do not set &amp;quot;autoconn&amp;quot;. &lt;br /&gt;
This means that irc1 will automatically connect to irc2, but not the contrary.&lt;br /&gt;
&lt;br /&gt;
Charybdis has a lot of other cool features, like ssl connection, spam blacklisting and so on. &lt;br /&gt;
Look at documentation here: [http://www.stack.nl/~jilles/irc/charybdis-oper-guide/]&lt;br /&gt;
&lt;br /&gt;
After having modifyied the ircd.conf in both server, fix the permissions:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|chown ircd /etc/charybdis/ircd.conf}}&lt;br /&gt;
{{Cmd|chmod 400 /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
== Configure Atheme-iris ==&lt;br /&gt;
&lt;br /&gt;
Atheme-iris is a nice webchat written in AJAX and Python. It&#039;s a fork of the famous qwebirc.&lt;br /&gt;
&lt;br /&gt;
Configuration in pretty simple.&lt;br /&gt;
&lt;br /&gt;
By default, atheme-iris will listen on all interfaces. If you want modify this behaviour, change /etc/conf.d/atheme-iris and set the IP address where atheme will bind.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[execution]&lt;br /&gt;
args: -n -p 3989&lt;br /&gt;
syslog_addr:&lt;br /&gt;
syslog_port: 514&lt;br /&gt;
&lt;br /&gt;
[irc]&lt;br /&gt;
server: localhost&lt;br /&gt;
port: 6667&lt;br /&gt;
ssl: false&lt;br /&gt;
bind_ip: 127.0.0.1&lt;br /&gt;
realname: http://irc1.alpinelab.lan&lt;br /&gt;
ident: nick&lt;br /&gt;
ident_string: webchat&lt;br /&gt;
webirc_mode: webirc&lt;br /&gt;
webirc_password: fish&lt;br /&gt;
&lt;br /&gt;
[athemeengine]&lt;br /&gt;
xmlrpc_path:&lt;br /&gt;
chan_list_enabled: true&lt;br /&gt;
chan_list_max_age: 120&lt;br /&gt;
chan_list_count: 3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[feedbackengine]&lt;br /&gt;
from: moo@moo.com&lt;br /&gt;
to: moo@moo.com&lt;br /&gt;
smtp_host: 127.0.0.1&lt;br /&gt;
smtp_port: 25&lt;br /&gt;
&lt;br /&gt;
[frontend]&lt;br /&gt;
base_url: http://irc1.alpinelab.lan:9090&lt;br /&gt;
network_name: AlpineLinux&lt;br /&gt;
app_title: %(network_name)s Web IRC&lt;br /&gt;
extra_html:&lt;br /&gt;
initial_nick:&lt;br /&gt;
prompt: true&lt;br /&gt;
chan_prompt: true&lt;br /&gt;
chan_autoconnect: true&lt;br /&gt;
static_base_url: /&lt;br /&gt;
dynamic_base_url: /&lt;br /&gt;
&lt;br /&gt;
[atheme]&lt;br /&gt;
nickserv_login: true&lt;br /&gt;
chan_list_on_start: true&lt;br /&gt;
chan_list_cloud_view: false&lt;br /&gt;
&lt;br /&gt;
[ui]&lt;br /&gt;
dedicated_msg_window: false&lt;br /&gt;
dedicated_notice_window: false&lt;br /&gt;
hide_joinparts: false&lt;br /&gt;
simple_color: false&lt;br /&gt;
fg_color: DDDDDD&lt;br /&gt;
fg_sec_color: 999999&lt;br /&gt;
bg_color: 111111&lt;br /&gt;
lastpos_line: true&lt;br /&gt;
nick_click_query: false&lt;br /&gt;
nick_colors: false&lt;br /&gt;
nick_status: false&lt;br /&gt;
flash_on_mention: false&lt;br /&gt;
beep_on_mention: false&lt;br /&gt;
&lt;br /&gt;
[adminengine]&lt;br /&gt;
hosts: 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
[proxy]&lt;br /&gt;
forwarded_for_header:&lt;br /&gt;
forwarded_for_ips: 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
[tuneback]&lt;br /&gt;
update_freq: 0.5&lt;br /&gt;
maxbuflen: 100000&lt;br /&gt;
maxsubscriptions: 1&lt;br /&gt;
maxlinelen: 600&lt;br /&gt;
dns_timeout: 5&lt;br /&gt;
http_ajax_request_timeout: 30&lt;br /&gt;
http_request_timeout: 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the [execution] block, parameters are overridden by /etc/conf.d/atheme-iris settings.&lt;br /&gt;
&lt;br /&gt;
Replicate the same configuration in irc2.alpinelab.lan. &lt;br /&gt;
&lt;br /&gt;
But in irc2 server, change the entry irc1.alpinelab.lan with irc2.alpinelab.lan.&lt;br /&gt;
&lt;br /&gt;
Atheme-iris will connect to charybdis on 127.0.0.1 ip, according with this directive:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;server: localhost&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That&#039;s all.&lt;br /&gt;
&lt;br /&gt;
Now, you can go with one browser to http://irc1.alpinelab.lan:9090 and another in http://irc2.alpinelab.lan:9090.&lt;br /&gt;
&lt;br /&gt;
Login with two different users in the same channel.&lt;br /&gt;
&lt;br /&gt;
You should view both users on both webclients.&lt;br /&gt;
&lt;br /&gt;
Happy chatting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When you login into webchat, you will see &amp;quot;webchat@127.0.0.1&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re wondering how change 127.0.0.1 with a spoofed address, you need another auth{} block in charybdis. Look at /etc/charybdis/reference.conf for details. &lt;br /&gt;
&lt;br /&gt;
If you want the real ip address of the client, you need to setup cgi:irc with atheme-iris, and Charybdis will use the  module called _mwebirc to &amp;quot;glue&amp;quot; himself with atheme-iris.&lt;br /&gt;
&lt;br /&gt;
== Useful links ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IRC Commands&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/List_of_Internet_Relay_Chat_commands&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*-Line flags&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/K-line_%28IRC%29#K-line&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=How_To_Setup_Your_Own_IRC_Network&amp;diff=9071</id>
		<title>How To Setup Your Own IRC Network</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=How_To_Setup_Your_Own_IRC_Network&amp;diff=9071"/>
		<updated>2013-03-13T19:23:46Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: /* Configure Charybdis */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This doc aims to assist you on setup your own irc network with Alpine Linux.&lt;br /&gt;
&lt;br /&gt;
We will configure two irc daemons and a simple ajax webirc client.&lt;br /&gt;
&lt;br /&gt;
The irc daemons will work together sharing the channel, users and other informations.&lt;br /&gt;
&lt;br /&gt;
From charybdis point of view, this configuration is called &#039;&#039;&#039;&amp;quot;cluster&amp;quot;&#039;&#039;&#039;, but this word should not be understood with the common meaning of &amp;quot;cluster&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We assume that, as example, we want create Alpine Linux IRC Network.&lt;br /&gt;
&lt;br /&gt;
We have irc1 and irc2 servers, called respectively irc1.alpinelab.lan and irc2.alpinelab.lan.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Prerequisites are two PC with Alpine Linux installed (v2.5).&lt;br /&gt;
&lt;br /&gt;
Packages that we are going to install are:&lt;br /&gt;
&lt;br /&gt;
* Charybdis&lt;br /&gt;
* atheme-iris&lt;br /&gt;
&lt;br /&gt;
Both of those packages are in edge testing.&lt;br /&gt;
&lt;br /&gt;
You can easily use this pinning edge repo:&lt;br /&gt;
{{Cmd|vi /etc/apk/repositories}}&lt;br /&gt;
&lt;br /&gt;
Add the line:&lt;br /&gt;
{{Cmd|@edge http://dl-2.alpinelinux.org/alpine/edge/testing}}&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
{{Cmd|apk update}}&lt;br /&gt;
{{Cmd|apk add charybdis}}&lt;br /&gt;
{{Cmd|apk add atheme-iris}}&lt;br /&gt;
&lt;br /&gt;
== Configure Charybdis ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cp /etc/charybdis/example.conf /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|vi /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
Modify the file starting from /etc/charybdis/reference.conf (that is well documented).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
loadmodule &amp;quot;extensions/chm_operonly.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_account.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_canjoin.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_channel.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_extgecos.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_oper.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_realname.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_identify.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_mkpasswd.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_webirc.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_farconnect.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_globalkline.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_globaloper.so&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
serverinfo {&lt;br /&gt;
	name = &amp;quot;irc1.alpinelab.lan&amp;quot;;&lt;br /&gt;
	sid = &amp;quot;01A&amp;quot;;&lt;br /&gt;
        description = &amp;quot;Alpine Linux IRC Server&amp;quot;;&lt;br /&gt;
	network_name = &amp;quot;Alpine Linux Network&amp;quot;;&lt;br /&gt;
	network_desc = &amp;quot;Alpine Linux IRC network.&amp;quot;;&lt;br /&gt;
	hub = yes;&lt;br /&gt;
	default_max_clients = 10000;&lt;br /&gt;
	nicklen = 30;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
admin {&lt;br /&gt;
	name = &amp;quot;admin&amp;quot;;&lt;br /&gt;
	description = &amp;quot;Alpine Linux IRC network administrator&amp;quot;;&lt;br /&gt;
	email = &amp;quot;ircadmin@alpinelab.lan&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
log {&lt;br /&gt;
	fname_userlog = &amp;quot;logs/userlog&amp;quot;;&lt;br /&gt;
	#fname_fuserlog = &amp;quot;logs/fuserlog&amp;quot;;&lt;br /&gt;
	fname_operlog = &amp;quot;logs/operlog&amp;quot;;&lt;br /&gt;
	#fname_foperlog = &amp;quot;logs/foperlog&amp;quot;;&lt;br /&gt;
	fname_serverlog = &amp;quot;logs/serverlog&amp;quot;;&lt;br /&gt;
	#fname_klinelog = &amp;quot;logs/klinelog&amp;quot;;&lt;br /&gt;
	fname_killlog = &amp;quot;logs/killlog&amp;quot;;&lt;br /&gt;
	fname_operspylog = &amp;quot;logs/operspylog&amp;quot;;&lt;br /&gt;
	#fname_ioerrorlog = &amp;quot;logs/ioerror&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;users&amp;quot; {&lt;br /&gt;
	ping_time = 2 minutes;&lt;br /&gt;
	number_per_ident = 10;&lt;br /&gt;
	number_per_ip = 10;&lt;br /&gt;
	number_per_ip_global = 50;&lt;br /&gt;
	cidr_ipv4_bitlen = 24;&lt;br /&gt;
	cidr_ipv6_bitlen = 64;&lt;br /&gt;
	number_per_cidr = 200;&lt;br /&gt;
	max_number = 100;&lt;br /&gt;
	sendq = 400 kbytes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;opers&amp;quot; {&lt;br /&gt;
	ping_time = 5 minutes;&lt;br /&gt;
	number_per_ip = 10;&lt;br /&gt;
	max_number = 1000;&lt;br /&gt;
	sendq = 1 megabyte;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;server&amp;quot; {&lt;br /&gt;
	ping_time = 5 minutes;&lt;br /&gt;
	connectfreq = 5 minutes;&lt;br /&gt;
	max_number = 10;&lt;br /&gt;
	sendq = 4 megabytes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
listen {&lt;br /&gt;
	defer_accept = yes;&lt;br /&gt;
	port = 5000, 6665 .. 6669;&lt;br /&gt;
	sslport = 6697;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
auth {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;&lt;br /&gt;
	class = &amp;quot;users&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;local_op&amp;quot; {&lt;br /&gt;
	privs = oper:local_kill, oper:operwall;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;server_bot&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;local_op&amp;quot;;&lt;br /&gt;
	privs = oper:kline, oper:remoteban, snomask:nick_changes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;global_op&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;local_op&amp;quot;;&lt;br /&gt;
	privs = oper:global_kill, oper:routing, oper:kline, oper:unkline, oper:xline,&lt;br /&gt;
		oper:resv, oper:mass_notice, oper:remoteban;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;admin&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;global_op&amp;quot;;&lt;br /&gt;
	privs = oper:admin, oper:die, oper:rehash, oper:spy;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;&lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;;&lt;br /&gt;
	snomask = &amp;quot;+Zbfkrsuy&amp;quot;;&lt;br /&gt;
	flags = ~encrypted;&lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc2.alpinelab.lan&amp;quot; {&lt;br /&gt;
	host=&amp;quot;10.0.2.10&amp;quot;;&lt;br /&gt;
        send_password = &amp;quot;Password_To_Server&amp;quot;;&lt;br /&gt;
	accept_password = &amp;quot;Password_From_Server&amp;quot;; &lt;br /&gt;
	port = 6666;&lt;br /&gt;
	hub_mask = &amp;quot;*&amp;quot;;&lt;br /&gt;
	class = &amp;quot;server&amp;quot;;&lt;br /&gt;
	flags = compressed, topicburst, autoconn;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
service {&lt;br /&gt;
	name = &amp;quot;services.int&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
cluster {&lt;br /&gt;
	name = &amp;quot;*.alpinelab.lan&amp;quot;;&lt;br /&gt;
	flags = kline, tkline, unkline, xline, txline, unxline, resv, tresv, unresv;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
shared {&lt;br /&gt;
	oper = &amp;quot;*@*&amp;quot;, &amp;quot;*&amp;quot;;&lt;br /&gt;
	flags = all, rehash;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
channel {&lt;br /&gt;
	use_invex = yes;&lt;br /&gt;
	use_except = yes;&lt;br /&gt;
	use_forward = yes;&lt;br /&gt;
	use_knock = yes;&lt;br /&gt;
	knock_delay = 5 minutes;&lt;br /&gt;
	knock_delay_channel = 1 minute;&lt;br /&gt;
	max_chans_per_user = 15;&lt;br /&gt;
	max_bans = 100;&lt;br /&gt;
	max_bans_large = 500;&lt;br /&gt;
	default_split_user_count = 0;&lt;br /&gt;
	default_split_server_count = 0;&lt;br /&gt;
	no_create_on_split = no;&lt;br /&gt;
	no_join_on_split = no;&lt;br /&gt;
	burst_topicwho = yes;&lt;br /&gt;
	kick_on_split_riding = no;&lt;br /&gt;
	only_ascii_channels = no;&lt;br /&gt;
	resv_forcepart = yes;&lt;br /&gt;
	channel_target_change = yes;&lt;br /&gt;
	disable_local_channels = no;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
serverhide {&lt;br /&gt;
	flatten_links = yes;&lt;br /&gt;
	links_delay = 5 minutes;&lt;br /&gt;
	hidden = no;&lt;br /&gt;
	disable_hidden = no;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
blacklist {&lt;br /&gt;
	host = &amp;quot;rbl.efnetrbl.org&amp;quot;;&lt;br /&gt;
	type = ipv4;&lt;br /&gt;
	reject_reason = &amp;quot;${nick}, your IP (${ip}) is listed in EFnet&#039;s RBL. For assistance, see http://efnetrbl.org/?i=${ip}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	/* Example of a blacklist that supports both IPv4 and IPv6 */&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;NickServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;NickServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;ChanServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;ChanServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;OperServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;OperServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;MemoServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;MemoServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;NS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;NickServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;CS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;ChanServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;OS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;OperServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;MS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;MemoServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
general {&lt;br /&gt;
	hide_error_messages = opers;&lt;br /&gt;
	hide_spoof_ips = yes;&lt;br /&gt;
	default_umodes = &amp;quot;+i&amp;quot;;&lt;br /&gt;
	default_operstring = &amp;quot;is an IRC Operator&amp;quot;;&lt;br /&gt;
	default_adminstring = &amp;quot;is a Server Administrator&amp;quot;;&lt;br /&gt;
	servicestring = &amp;quot;is a Network Service&amp;quot;;&lt;br /&gt;
	disable_fake_channels = no;&lt;br /&gt;
	tkline_expire_notices = no;&lt;br /&gt;
	default_floodcount = 10;&lt;br /&gt;
	failed_oper_notice = yes;&lt;br /&gt;
	dots_in_ident=2;&lt;br /&gt;
	min_nonwildcard = 4;&lt;br /&gt;
	min_nonwildcard_simple = 3;&lt;br /&gt;
	max_accept = 100;&lt;br /&gt;
	max_monitor = 100;&lt;br /&gt;
	anti_nick_flood = yes;&lt;br /&gt;
	max_nick_time = 20 seconds;&lt;br /&gt;
	max_nick_changes = 5;&lt;br /&gt;
	anti_spam_exit_message_time = 5 minutes;&lt;br /&gt;
	ts_warn_delta = 30 seconds;&lt;br /&gt;
	ts_max_delta = 5 minutes;&lt;br /&gt;
	client_exit = yes;&lt;br /&gt;
	collision_fnc = yes;&lt;br /&gt;
	resv_fnc = yes;&lt;br /&gt;
	global_snotices = yes;&lt;br /&gt;
	dline_with_reason = yes;&lt;br /&gt;
	kline_delay = 0 seconds;&lt;br /&gt;
	kline_with_reason = yes;&lt;br /&gt;
	kline_reason = &amp;quot;K-Lined&amp;quot;;&lt;br /&gt;
	identify_service = &amp;quot;NickServ@services.int&amp;quot;;&lt;br /&gt;
	identify_command = &amp;quot;IDENTIFY&amp;quot;;&lt;br /&gt;
	non_redundant_klines = yes;&lt;br /&gt;
	warn_no_nline = yes;&lt;br /&gt;
	use_propagated_bans = yes;&lt;br /&gt;
	stats_e_disabled = no;&lt;br /&gt;
	stats_c_oper_only=no;&lt;br /&gt;
	stats_h_oper_only=no;&lt;br /&gt;
	stats_y_oper_only=no;&lt;br /&gt;
	stats_o_oper_only=yes;&lt;br /&gt;
	stats_P_oper_only=no;&lt;br /&gt;
	stats_i_oper_only=masked;&lt;br /&gt;
	stats_k_oper_only=masked;&lt;br /&gt;
	map_oper_only = no;&lt;br /&gt;
	operspy_admin_only = no;&lt;br /&gt;
	operspy_dont_care_user_info = no;&lt;br /&gt;
	caller_id_wait = 1 minute;&lt;br /&gt;
	pace_wait_simple = 1 second;&lt;br /&gt;
	pace_wait = 10 seconds;&lt;br /&gt;
	short_motd = no;&lt;br /&gt;
	ping_cookie = no;&lt;br /&gt;
	connect_timeout = 30 seconds;&lt;br /&gt;
	default_ident_timeout = 5;&lt;br /&gt;
	disable_auth = no;&lt;br /&gt;
	no_oper_flood = yes;&lt;br /&gt;
	max_targets = 4;&lt;br /&gt;
	client_flood_max_lines = 20;&lt;br /&gt;
	use_whois_actually = no;&lt;br /&gt;
	oper_only_umodes = operwall, locops, servnotice;&lt;br /&gt;
	oper_umodes = locops, servnotice, operwall, wallop;&lt;br /&gt;
	oper_snomask = &amp;quot;+s&amp;quot;;&lt;br /&gt;
	burst_away = yes;&lt;br /&gt;
	nick_delay = 0 seconds; # 15 minutes if you want to enable this&lt;br /&gt;
	reject_ban_time = 1 minute;&lt;br /&gt;
	reject_after_count = 3;&lt;br /&gt;
	reject_duration = 5 minutes;&lt;br /&gt;
	throttle_duration = 60;&lt;br /&gt;
	throttle_count = 4;&lt;br /&gt;
	max_ratelimit_tokens = 30;&lt;br /&gt;
	away_interval = 30;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
modules {&lt;br /&gt;
	path = &amp;quot;/usr/lib/charybdis/modules&amp;quot;;&lt;br /&gt;
	path = &amp;quot;/usr/lib/charybdis/modules/autoload&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant part of the config file are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
serverinfo {&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
	sid = &amp;quot;01A&amp;quot;; &amp;lt;-----------   This must be unique. You can choose two cipher and one letter.&lt;br /&gt;
	hub = yes;   &amp;lt;-----------   This works as an hub. Allows other irc server to connects.&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
listen {&lt;br /&gt;
	port = 5000, 6665 .. 6669; &amp;lt;---- Port where charybdis is listening. You can also bind to a specific ip adding &amp;quot;host&amp;quot; directive. If not specifyied charybdis listen on all interfaces.&lt;br /&gt;
	sslport = 6697;            &amp;lt;---- Port for SSL connection. You need a certificate in order to use this feature.&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;  &amp;lt;----------- This is a masq used to match who can become operator. This support CIDR. If you want to allows only 10.0.0.0/24, you can choose &amp;quot;*@10.0.0.*&amp;quot;.&lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;; &amp;lt;---- Password used to become IRC Operator. &lt;br /&gt;
	flags = ~encrypted;            &amp;lt;---- Tilde &amp;quot;~&amp;quot; means not. So the password used in this block is not encrypted. Without &amp;quot;~&amp;quot;, you need to write the password in this block encrypted.&lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc2.alpinelab.lan&amp;quot; {                &amp;lt;----------- Descriptive name of the server you want to connect to.&lt;br /&gt;
	host=&amp;quot;10.0.2.10&amp;quot;;                     &amp;lt;----------- IP or HOST. They MUST be valid. If hostname, it MUST be an A record.&lt;br /&gt;
	send_password = &amp;quot;Password_To_Server&amp;quot;;     &amp;lt;------- Password you sent TO irc2. In irc2 this is &amp;quot;accept_password&amp;quot;.&lt;br /&gt;
	accept_password = &amp;quot;Password_From_Server&amp;quot;; &amp;lt;------- Password you expect to receive FROM irc2. In irc2 this is &amp;quot;send_password&amp;quot;&lt;br /&gt;
	flags = compressed, topicburst, autoconn; &amp;lt;------- Autoconn means that irc1 will try automatically to connect to irc2.&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
cluster {&lt;br /&gt;
	name = &amp;quot;*.alpinelab.lan&amp;quot;;             &amp;lt;----------- Masq to indicate what servers can share the information. Those information are written in the following &amp;quot;flags&amp;quot; entry.&lt;br /&gt;
	flags = kline, tkline, unkline, xline, txline, unxline, resv, tresv, unresv; &amp;lt;--- Check IRC documentation to understand the meaning of those flags. &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
shared {&lt;br /&gt;
	oper = &amp;quot;*@*&amp;quot;, &amp;quot;*&amp;quot;;  &amp;lt;----------- The user@host and the server must be on in order to set klines.               &lt;br /&gt;
	flags = all,rehash; &amp;lt;----------- flags: list of what to allow them to place. All oper will receive this.&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can even remove the *Serv entries. Charybdis itselfs does not have this features, you should use externa programs that works as bot for that (atheme services for example).&lt;br /&gt;
&lt;br /&gt;
In the other server, irc2, configuration is pretty similar.&lt;br /&gt;
&lt;br /&gt;
Those are the only difference of /etc/charybdis/ircd.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
serverinfo {&lt;br /&gt;
	sid = &amp;quot;02A&amp;quot;; &lt;br /&gt;
	hub = yes;   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;  &lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;; &lt;br /&gt;
	flags = ~encrypted;            &lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc1.alpinelab.lan&amp;quot; {                &lt;br /&gt;
	host=&amp;quot;10.0.1.10&amp;quot;;                     &lt;br /&gt;
	send_password = &amp;quot;Password_From_Server&amp;quot;; &lt;br /&gt;
	accept_password = &amp;quot;Password_To_Server&amp;quot;; &lt;br /&gt;
	flags = compressed, topicburst;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In flags directive, connect{} block, we do not set &amp;quot;autoconn&amp;quot;. &lt;br /&gt;
This means that irc1 will automatically connect to irc2, but not the contrary.&lt;br /&gt;
&lt;br /&gt;
Charybdis has a lot of other cool features, like ssl connection, spam blacklisting and so on. &lt;br /&gt;
Look at documentation here: [http://www.stack.nl/~jilles/irc/charybdis-oper-guide/]&lt;br /&gt;
&lt;br /&gt;
After having modifyied the ircd.conf in both server, fix the permissions:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|chown ircd /etc/charybdis/ircd.conf}}&lt;br /&gt;
{{Cmd|chmod 400 /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
== Configure Atheme-iris ==&lt;br /&gt;
&lt;br /&gt;
Atheme-iris is a nice webchat written in AJAX and Python. It&#039;s a fork of the famous qwebirc.&lt;br /&gt;
&lt;br /&gt;
Configuration in pretty simple.&lt;br /&gt;
&lt;br /&gt;
By default, atheme-iris will listen on all interfaces. If you want modify this behaviour, change /etc/conf.d/atheme-iris and set the IP address where atheme will bind.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[execution]&lt;br /&gt;
args: -n -p 3989&lt;br /&gt;
syslog_addr:&lt;br /&gt;
syslog_port: 514&lt;br /&gt;
&lt;br /&gt;
[irc]&lt;br /&gt;
server: localhost&lt;br /&gt;
port: 6667&lt;br /&gt;
ssl: false&lt;br /&gt;
bind_ip: 127.0.0.1&lt;br /&gt;
realname: http://irc1.alpinelab.lan&lt;br /&gt;
ident: nick&lt;br /&gt;
ident_string: webchat&lt;br /&gt;
webirc_mode: webirc&lt;br /&gt;
webirc_password: fish&lt;br /&gt;
&lt;br /&gt;
[athemeengine]&lt;br /&gt;
xmlrpc_path:&lt;br /&gt;
chan_list_enabled: true&lt;br /&gt;
chan_list_max_age: 120&lt;br /&gt;
chan_list_count: 3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[feedbackengine]&lt;br /&gt;
from: moo@moo.com&lt;br /&gt;
to: moo@moo.com&lt;br /&gt;
smtp_host: 127.0.0.1&lt;br /&gt;
smtp_port: 25&lt;br /&gt;
&lt;br /&gt;
[frontend]&lt;br /&gt;
base_url: http://irc1.alpinelab.lan:9090&lt;br /&gt;
network_name: AlpineLinux&lt;br /&gt;
app_title: %(network_name)s Web IRC&lt;br /&gt;
extra_html:&lt;br /&gt;
initial_nick:&lt;br /&gt;
prompt: true&lt;br /&gt;
chan_prompt: true&lt;br /&gt;
chan_autoconnect: true&lt;br /&gt;
static_base_url: /&lt;br /&gt;
dynamic_base_url: /&lt;br /&gt;
&lt;br /&gt;
[atheme]&lt;br /&gt;
nickserv_login: true&lt;br /&gt;
chan_list_on_start: true&lt;br /&gt;
chan_list_cloud_view: false&lt;br /&gt;
&lt;br /&gt;
[ui]&lt;br /&gt;
dedicated_msg_window: false&lt;br /&gt;
dedicated_notice_window: false&lt;br /&gt;
hide_joinparts: false&lt;br /&gt;
simple_color: false&lt;br /&gt;
fg_color: DDDDDD&lt;br /&gt;
fg_sec_color: 999999&lt;br /&gt;
bg_color: 111111&lt;br /&gt;
lastpos_line: true&lt;br /&gt;
nick_click_query: false&lt;br /&gt;
nick_colors: false&lt;br /&gt;
nick_status: false&lt;br /&gt;
flash_on_mention: false&lt;br /&gt;
beep_on_mention: false&lt;br /&gt;
&lt;br /&gt;
[adminengine]&lt;br /&gt;
hosts: 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
[proxy]&lt;br /&gt;
forwarded_for_header:&lt;br /&gt;
forwarded_for_ips: 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
[tuneback]&lt;br /&gt;
update_freq: 0.5&lt;br /&gt;
maxbuflen: 100000&lt;br /&gt;
maxsubscriptions: 1&lt;br /&gt;
maxlinelen: 600&lt;br /&gt;
dns_timeout: 5&lt;br /&gt;
http_ajax_request_timeout: 30&lt;br /&gt;
http_request_timeout: 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the [execution] block, parameters are overridden by /etc/conf.d/atheme-iris settings.&lt;br /&gt;
&lt;br /&gt;
Replicate the same configuration in irc2.alpinelab.lan. &lt;br /&gt;
&lt;br /&gt;
But in irc2 server, change the entry irc1.alpinelab.lan with irc2.alpinelab.lan.&lt;br /&gt;
&lt;br /&gt;
Atheme-iris will connect to charybdis on 127.0.0.1 ip, according with this directive:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;server: localhost&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That&#039;s all.&lt;br /&gt;
&lt;br /&gt;
Now, you can go with one browser to http://irc1.alpinelab.lan:9090 and another in http://irc2.alpinelab.lan:9090.&lt;br /&gt;
&lt;br /&gt;
Login with two different users in the same channel.&lt;br /&gt;
&lt;br /&gt;
You should view both users on both webclients.&lt;br /&gt;
&lt;br /&gt;
Happy chatting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When you login into webchat, you will see &amp;quot;webchat@127.0.0.1&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re wondering how change 127.0.0.1 with a spoofed address, you need another auth{} block in charybdis. Look at /etc/charybdis/reference.conf for details. &lt;br /&gt;
&lt;br /&gt;
If you want the real ip address of the client, you need to setup cgi:irc with atheme-iris, and Charybdis will use the  module called _mwebirc to &amp;quot;glue&amp;quot; himself with atheme-iris.&lt;br /&gt;
&lt;br /&gt;
== Useful links ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IRC Commands&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/List_of_Internet_Relay_Chat_commands&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*-Line flags&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/K-line_%28IRC%29#K-line&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=How_To_Setup_Your_Own_IRC_Network&amp;diff=9066</id>
		<title>How To Setup Your Own IRC Network</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=How_To_Setup_Your_Own_IRC_Network&amp;diff=9066"/>
		<updated>2013-03-06T15:01:15Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This doc aims to assist you on setup your own irc network with Alpine Linux.&lt;br /&gt;
&lt;br /&gt;
We will configure two irc daemons and a simple ajax webirc client.&lt;br /&gt;
&lt;br /&gt;
The irc daemons will work together sharing the channel, users and other informations.&lt;br /&gt;
&lt;br /&gt;
From charybdis point of view, this configuration is called &#039;&#039;&#039;&amp;quot;cluster&amp;quot;&#039;&#039;&#039;, but this word should not be understood with the common meaning of &amp;quot;cluster&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We assume that, as example, we want create Alpine Linux IRC Network.&lt;br /&gt;
&lt;br /&gt;
We have irc1 and irc2 servers, called respectively irc1.alpinelab.lan and irc2.alpinelab.lan.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Prerequisites are two PC with Alpine Linux installed (v2.5).&lt;br /&gt;
&lt;br /&gt;
Packages that we are going to install are:&lt;br /&gt;
&lt;br /&gt;
* Charybdis&lt;br /&gt;
* atheme-iris&lt;br /&gt;
&lt;br /&gt;
Both of those packages are in edge testing.&lt;br /&gt;
&lt;br /&gt;
You can easily use this pinning edge repo:&lt;br /&gt;
{{Cmd|vi /etc/apk/repositories}}&lt;br /&gt;
&lt;br /&gt;
Add the line:&lt;br /&gt;
{{Cmd|@edge http://dl-2.alpinelinux.org/alpine/edge/testing}}&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
{{Cmd|apk update}}&lt;br /&gt;
{{Cmd|apk add charybdis}}&lt;br /&gt;
{{Cmd|apk add atheme-iris}}&lt;br /&gt;
&lt;br /&gt;
== Configure Charybdis ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cp /etc/charybdis/example.conf /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|vi /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
Modify the file starting from /etc/charybdis/reference.conf (that is well documented).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
loadmodule &amp;quot;extensions/chm_operonly.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_account.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_canjoin.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_channel.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_extgecos.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_oper.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_realname.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_identify.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_mkpasswd.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_webirc.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_farconnect.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_globalkline.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_globaloper.so&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
serverinfo {&lt;br /&gt;
	name = &amp;quot;irc1.alpinelab.lan&amp;quot;;&lt;br /&gt;
	sid = &amp;quot;01A&amp;quot;;&lt;br /&gt;
        description = &amp;quot;Alpine Linux IRC Server&amp;quot;;&lt;br /&gt;
	network_name = &amp;quot;Alpine Linux Network&amp;quot;;&lt;br /&gt;
	network_desc = &amp;quot;Alpine Linux IRC network.&amp;quot;;&lt;br /&gt;
	hub = yes;&lt;br /&gt;
	default_max_clients = 10000;&lt;br /&gt;
	nicklen = 30;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
admin {&lt;br /&gt;
	name = &amp;quot;admin&amp;quot;;&lt;br /&gt;
	description = &amp;quot;Alpine Linux IRC network administrator&amp;quot;;&lt;br /&gt;
	email = &amp;quot;ircadmin@alpinelab.lan&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
log {&lt;br /&gt;
	fname_userlog = &amp;quot;logs/userlog&amp;quot;;&lt;br /&gt;
	#fname_fuserlog = &amp;quot;logs/fuserlog&amp;quot;;&lt;br /&gt;
	fname_operlog = &amp;quot;logs/operlog&amp;quot;;&lt;br /&gt;
	#fname_foperlog = &amp;quot;logs/foperlog&amp;quot;;&lt;br /&gt;
	fname_serverlog = &amp;quot;logs/serverlog&amp;quot;;&lt;br /&gt;
	#fname_klinelog = &amp;quot;logs/klinelog&amp;quot;;&lt;br /&gt;
	fname_killlog = &amp;quot;logs/killlog&amp;quot;;&lt;br /&gt;
	fname_operspylog = &amp;quot;logs/operspylog&amp;quot;;&lt;br /&gt;
	#fname_ioerrorlog = &amp;quot;logs/ioerror&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;users&amp;quot; {&lt;br /&gt;
	ping_time = 2 minutes;&lt;br /&gt;
	number_per_ident = 10;&lt;br /&gt;
	number_per_ip = 10;&lt;br /&gt;
	number_per_ip_global = 50;&lt;br /&gt;
	cidr_ipv4_bitlen = 24;&lt;br /&gt;
	cidr_ipv6_bitlen = 64;&lt;br /&gt;
	number_per_cidr = 200;&lt;br /&gt;
	max_number = 100;&lt;br /&gt;
	sendq = 400 kbytes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;opers&amp;quot; {&lt;br /&gt;
	ping_time = 5 minutes;&lt;br /&gt;
	number_per_ip = 10;&lt;br /&gt;
	max_number = 1000;&lt;br /&gt;
	sendq = 1 megabyte;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;server&amp;quot; {&lt;br /&gt;
	ping_time = 5 minutes;&lt;br /&gt;
	connectfreq = 5 minutes;&lt;br /&gt;
	max_number = 10;&lt;br /&gt;
	sendq = 4 megabytes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
listen {&lt;br /&gt;
	defer_accept = yes;&lt;br /&gt;
	port = 5000, 6665 .. 6669;&lt;br /&gt;
	sslport = 6697;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
auth {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;&lt;br /&gt;
	class = &amp;quot;users&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;local_op&amp;quot; {&lt;br /&gt;
	privs = oper:local_kill, oper:operwall;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;server_bot&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;local_op&amp;quot;;&lt;br /&gt;
	privs = oper:kline, oper:remoteban, snomask:nick_changes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;global_op&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;local_op&amp;quot;;&lt;br /&gt;
	privs = oper:global_kill, oper:routing, oper:kline, oper:unkline, oper:xline,&lt;br /&gt;
		oper:resv, oper:mass_notice, oper:remoteban;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;admin&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;global_op&amp;quot;;&lt;br /&gt;
	privs = oper:admin, oper:die, oper:rehash, oper:spy;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;&lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;;&lt;br /&gt;
	snomask = &amp;quot;+Zbfkrsuy&amp;quot;;&lt;br /&gt;
	flags = ~encrypted;&lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc2.alpinelab.lan&amp;quot; {&lt;br /&gt;
	host=&amp;quot;10.0.2.10&amp;quot;;&lt;br /&gt;
        send_password = &amp;quot;Password_To_Server&amp;quot;;&lt;br /&gt;
	accept_password = &amp;quot;Password_From_Server&amp;quot;; &lt;br /&gt;
	port = 6666;&lt;br /&gt;
	hub_mask = &amp;quot;*&amp;quot;;&lt;br /&gt;
	class = &amp;quot;server&amp;quot;;&lt;br /&gt;
	flags = compressed, topicburst, autoconn;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
service {&lt;br /&gt;
	name = &amp;quot;services.int&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
cluster {&lt;br /&gt;
	name = &amp;quot;*.alpinelab.lan&amp;quot;;&lt;br /&gt;
	flags = kline, tkline, unkline, xline, txline, unxline, resv, tresv, unresv;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
shared {&lt;br /&gt;
	oper = &amp;quot;*@*&amp;quot;, &amp;quot;*&amp;quot;;&lt;br /&gt;
	flags = all, rehash;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* exempt {}: IPs that are exempt from Dlines and rejectcache. (OLD d:) */&lt;br /&gt;
exempt {&lt;br /&gt;
	ip = &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
channel {&lt;br /&gt;
	use_invex = yes;&lt;br /&gt;
	use_except = yes;&lt;br /&gt;
	use_forward = yes;&lt;br /&gt;
	use_knock = yes;&lt;br /&gt;
	knock_delay = 5 minutes;&lt;br /&gt;
	knock_delay_channel = 1 minute;&lt;br /&gt;
	max_chans_per_user = 15;&lt;br /&gt;
	max_bans = 100;&lt;br /&gt;
	max_bans_large = 500;&lt;br /&gt;
	default_split_user_count = 0;&lt;br /&gt;
	default_split_server_count = 0;&lt;br /&gt;
	no_create_on_split = no;&lt;br /&gt;
	no_join_on_split = no;&lt;br /&gt;
	burst_topicwho = yes;&lt;br /&gt;
	kick_on_split_riding = no;&lt;br /&gt;
	only_ascii_channels = no;&lt;br /&gt;
	resv_forcepart = yes;&lt;br /&gt;
	channel_target_change = yes;&lt;br /&gt;
	disable_local_channels = no;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
serverhide {&lt;br /&gt;
	flatten_links = yes;&lt;br /&gt;
	links_delay = 5 minutes;&lt;br /&gt;
	hidden = no;&lt;br /&gt;
	disable_hidden = no;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
blacklist {&lt;br /&gt;
	host = &amp;quot;rbl.efnetrbl.org&amp;quot;;&lt;br /&gt;
	type = ipv4;&lt;br /&gt;
	reject_reason = &amp;quot;${nick}, your IP (${ip}) is listed in EFnet&#039;s RBL. For assistance, see http://efnetrbl.org/?i=${ip}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	/* Example of a blacklist that supports both IPv4 and IPv6 */&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;NickServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;NickServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;ChanServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;ChanServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;OperServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;OperServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;MemoServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;MemoServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;NS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;NickServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;CS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;ChanServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;OS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;OperServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;MS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;MemoServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
general {&lt;br /&gt;
	hide_error_messages = opers;&lt;br /&gt;
	hide_spoof_ips = yes;&lt;br /&gt;
	default_umodes = &amp;quot;+i&amp;quot;;&lt;br /&gt;
	default_operstring = &amp;quot;is an IRC Operator&amp;quot;;&lt;br /&gt;
	default_adminstring = &amp;quot;is a Server Administrator&amp;quot;;&lt;br /&gt;
	servicestring = &amp;quot;is a Network Service&amp;quot;;&lt;br /&gt;
	disable_fake_channels = no;&lt;br /&gt;
	tkline_expire_notices = no;&lt;br /&gt;
	default_floodcount = 10;&lt;br /&gt;
	failed_oper_notice = yes;&lt;br /&gt;
	dots_in_ident=2;&lt;br /&gt;
	min_nonwildcard = 4;&lt;br /&gt;
	min_nonwildcard_simple = 3;&lt;br /&gt;
	max_accept = 100;&lt;br /&gt;
	max_monitor = 100;&lt;br /&gt;
	anti_nick_flood = yes;&lt;br /&gt;
	max_nick_time = 20 seconds;&lt;br /&gt;
	max_nick_changes = 5;&lt;br /&gt;
	anti_spam_exit_message_time = 5 minutes;&lt;br /&gt;
	ts_warn_delta = 30 seconds;&lt;br /&gt;
	ts_max_delta = 5 minutes;&lt;br /&gt;
	client_exit = yes;&lt;br /&gt;
	collision_fnc = yes;&lt;br /&gt;
	resv_fnc = yes;&lt;br /&gt;
	global_snotices = yes;&lt;br /&gt;
	dline_with_reason = yes;&lt;br /&gt;
	kline_delay = 0 seconds;&lt;br /&gt;
	kline_with_reason = yes;&lt;br /&gt;
	kline_reason = &amp;quot;K-Lined&amp;quot;;&lt;br /&gt;
	identify_service = &amp;quot;NickServ@services.int&amp;quot;;&lt;br /&gt;
	identify_command = &amp;quot;IDENTIFY&amp;quot;;&lt;br /&gt;
	non_redundant_klines = yes;&lt;br /&gt;
	warn_no_nline = yes;&lt;br /&gt;
	use_propagated_bans = yes;&lt;br /&gt;
	stats_e_disabled = no;&lt;br /&gt;
	stats_c_oper_only=no;&lt;br /&gt;
	stats_h_oper_only=no;&lt;br /&gt;
	stats_y_oper_only=no;&lt;br /&gt;
	stats_o_oper_only=yes;&lt;br /&gt;
	stats_P_oper_only=no;&lt;br /&gt;
	stats_i_oper_only=masked;&lt;br /&gt;
	stats_k_oper_only=masked;&lt;br /&gt;
	map_oper_only = no;&lt;br /&gt;
	operspy_admin_only = no;&lt;br /&gt;
	operspy_dont_care_user_info = no;&lt;br /&gt;
	caller_id_wait = 1 minute;&lt;br /&gt;
	pace_wait_simple = 1 second;&lt;br /&gt;
	pace_wait = 10 seconds;&lt;br /&gt;
	short_motd = no;&lt;br /&gt;
	ping_cookie = no;&lt;br /&gt;
	connect_timeout = 30 seconds;&lt;br /&gt;
	default_ident_timeout = 5;&lt;br /&gt;
	disable_auth = no;&lt;br /&gt;
	no_oper_flood = yes;&lt;br /&gt;
	max_targets = 4;&lt;br /&gt;
	client_flood_max_lines = 20;&lt;br /&gt;
	use_whois_actually = no;&lt;br /&gt;
	oper_only_umodes = operwall, locops, servnotice;&lt;br /&gt;
	oper_umodes = locops, servnotice, operwall, wallop;&lt;br /&gt;
	oper_snomask = &amp;quot;+s&amp;quot;;&lt;br /&gt;
	burst_away = yes;&lt;br /&gt;
	nick_delay = 0 seconds; # 15 minutes if you want to enable this&lt;br /&gt;
	reject_ban_time = 1 minute;&lt;br /&gt;
	reject_after_count = 3;&lt;br /&gt;
	reject_duration = 5 minutes;&lt;br /&gt;
	throttle_duration = 60;&lt;br /&gt;
	throttle_count = 4;&lt;br /&gt;
	max_ratelimit_tokens = 30;&lt;br /&gt;
	away_interval = 30;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
modules {&lt;br /&gt;
	path = &amp;quot;/usr/lib/charybdis/modules&amp;quot;;&lt;br /&gt;
	path = &amp;quot;/usr/lib/charybdis/modules/autoload&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant part of the config file are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
serverinfo {&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
	sid = &amp;quot;01A&amp;quot;; &amp;lt;-----------   This must be unique. You can choose two cipher and one letter.&lt;br /&gt;
	hub = yes;   &amp;lt;-----------   This works as an hub. Allows other irc server to connects.&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
listen {&lt;br /&gt;
	port = 5000, 6665 .. 6669; &amp;lt;---- Port where charybdis is listening. You can also bind to a specific ip adding &amp;quot;host&amp;quot; directive. If not specifyied charybdis listen on all interfaces.&lt;br /&gt;
	sslport = 6697;            &amp;lt;---- Port for SSL connection. You need a certificate in order to use this feature.&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;  &amp;lt;----------- This is a masq used to match who can become operator. This support CIDR. If you want to allows only 10.0.0.0/24, you can choose &amp;quot;*@10.0.0.*&amp;quot;.&lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;; &amp;lt;---- Password used to become IRC Operator. &lt;br /&gt;
	flags = ~encrypted;            &amp;lt;---- Tilde &amp;quot;~&amp;quot; means not. So the password used in this block is not encrypted. Without &amp;quot;~&amp;quot;, you need to write the password in this block encrypted.&lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc2.alpinelab.lan&amp;quot; {                &amp;lt;----------- Descriptive name of the server you want to connect to.&lt;br /&gt;
	host=&amp;quot;10.0.2.10&amp;quot;;                     &amp;lt;----------- IP or HOST. They MUST be valid. If hostname, it MUST be an A record.&lt;br /&gt;
	send_password = &amp;quot;Password_To_Server&amp;quot;;     &amp;lt;------- Password you sent TO irc2. In irc2 this is &amp;quot;accept_password&amp;quot;.&lt;br /&gt;
	accept_password = &amp;quot;Password_From_Server&amp;quot;; &amp;lt;------- Password you expect to receive FROM irc2. In irc2 this is &amp;quot;send_password&amp;quot;&lt;br /&gt;
	flags = compressed, topicburst, autoconn; &amp;lt;------- Autoconn means that irc1 will try automatically to connect to irc2.&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
cluster {&lt;br /&gt;
	name = &amp;quot;*.alpinelab.lan&amp;quot;;             &amp;lt;----------- Masq to indicate what servers can share the information. Those information are written in the following &amp;quot;flags&amp;quot; entry.&lt;br /&gt;
	flags = kline, tkline, unkline, xline, txline, unxline, resv, tresv, unresv; &amp;lt;--- Check IRC documentation to understand the meaning of those flags. &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
shared {&lt;br /&gt;
	oper = &amp;quot;*@*&amp;quot;, &amp;quot;*&amp;quot;;  &amp;lt;----------- The user@host and the server must be on in order to set klines.               &lt;br /&gt;
	flags = all,rehash; &amp;lt;----------- flags: list of what to allow them to place. All oper will receive this.&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the other server, irc2, configuration is pretty similar.&lt;br /&gt;
&lt;br /&gt;
Those are the only difference of /etc/charybdis/ircd.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
serverinfo {&lt;br /&gt;
	sid = &amp;quot;02A&amp;quot;; &lt;br /&gt;
	hub = yes;   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;  &lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;; &lt;br /&gt;
	flags = ~encrypted;            &lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc1.alpinelab.lan&amp;quot; {                &lt;br /&gt;
	host=&amp;quot;10.0.1.10&amp;quot;;                     &lt;br /&gt;
	send_password = &amp;quot;Password_From_Server&amp;quot;; &lt;br /&gt;
	accept_password = &amp;quot;Password_To_Server&amp;quot;; &lt;br /&gt;
	flags = compressed, topicburst;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In flags directive, connect{} block, we do not set &amp;quot;autoconn&amp;quot;. &lt;br /&gt;
This means that irc1 will automatically connect to irc2, but not the contrary.&lt;br /&gt;
&lt;br /&gt;
Charybdis has a lot of other cool features, like ssl connection, spam blacklisting and so on. &lt;br /&gt;
Look at documentation here: [http://www.stack.nl/~jilles/irc/charybdis-oper-guide/]&lt;br /&gt;
&lt;br /&gt;
After having modifyied the ircd.conf in both server, fix the permissions:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|chown ircd /etc/charybdis/ircd.conf}}&lt;br /&gt;
{{Cmd|chmod 400 /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
== Configure Atheme-iris ==&lt;br /&gt;
&lt;br /&gt;
Atheme-iris is a nice webchat written in AJAX and Python. It&#039;s a fork of the famous qwebirc.&lt;br /&gt;
&lt;br /&gt;
Configuration in pretty simple.&lt;br /&gt;
&lt;br /&gt;
By default, atheme-iris will listen on all interfaces. If you want modify this behaviour, change /etc/conf.d/atheme-iris and set the IP address where atheme will bind.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[execution]&lt;br /&gt;
args: -n -p 3989&lt;br /&gt;
syslog_addr:&lt;br /&gt;
syslog_port: 514&lt;br /&gt;
&lt;br /&gt;
[irc]&lt;br /&gt;
server: localhost&lt;br /&gt;
port: 6667&lt;br /&gt;
ssl: false&lt;br /&gt;
bind_ip: 127.0.0.1&lt;br /&gt;
realname: http://irc1.alpinelab.lan&lt;br /&gt;
ident: nick&lt;br /&gt;
ident_string: webchat&lt;br /&gt;
webirc_mode: webirc&lt;br /&gt;
webirc_password: fish&lt;br /&gt;
&lt;br /&gt;
[athemeengine]&lt;br /&gt;
xmlrpc_path:&lt;br /&gt;
chan_list_enabled: true&lt;br /&gt;
chan_list_max_age: 120&lt;br /&gt;
chan_list_count: 3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[feedbackengine]&lt;br /&gt;
from: moo@moo.com&lt;br /&gt;
to: moo@moo.com&lt;br /&gt;
smtp_host: 127.0.0.1&lt;br /&gt;
smtp_port: 25&lt;br /&gt;
&lt;br /&gt;
[frontend]&lt;br /&gt;
base_url: http://irc1.alpinelab.lan:9090&lt;br /&gt;
network_name: AlpineLinux&lt;br /&gt;
app_title: %(network_name)s Web IRC&lt;br /&gt;
extra_html:&lt;br /&gt;
initial_nick:&lt;br /&gt;
prompt: true&lt;br /&gt;
chan_prompt: true&lt;br /&gt;
chan_autoconnect: true&lt;br /&gt;
static_base_url: /&lt;br /&gt;
dynamic_base_url: /&lt;br /&gt;
&lt;br /&gt;
[atheme]&lt;br /&gt;
nickserv_login: true&lt;br /&gt;
chan_list_on_start: true&lt;br /&gt;
chan_list_cloud_view: false&lt;br /&gt;
&lt;br /&gt;
[ui]&lt;br /&gt;
dedicated_msg_window: false&lt;br /&gt;
dedicated_notice_window: false&lt;br /&gt;
hide_joinparts: false&lt;br /&gt;
simple_color: false&lt;br /&gt;
fg_color: DDDDDD&lt;br /&gt;
fg_sec_color: 999999&lt;br /&gt;
bg_color: 111111&lt;br /&gt;
lastpos_line: true&lt;br /&gt;
nick_click_query: false&lt;br /&gt;
nick_colors: false&lt;br /&gt;
nick_status: false&lt;br /&gt;
flash_on_mention: false&lt;br /&gt;
beep_on_mention: false&lt;br /&gt;
&lt;br /&gt;
[adminengine]&lt;br /&gt;
hosts: 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
[proxy]&lt;br /&gt;
forwarded_for_header:&lt;br /&gt;
forwarded_for_ips: 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
[tuneback]&lt;br /&gt;
update_freq: 0.5&lt;br /&gt;
maxbuflen: 100000&lt;br /&gt;
maxsubscriptions: 1&lt;br /&gt;
maxlinelen: 600&lt;br /&gt;
dns_timeout: 5&lt;br /&gt;
http_ajax_request_timeout: 30&lt;br /&gt;
http_request_timeout: 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the [execution] block, parameters are overridden by /etc/conf.d/atheme-iris settings.&lt;br /&gt;
&lt;br /&gt;
Replicate the same configuration in irc2.alpinelab.lan. &lt;br /&gt;
&lt;br /&gt;
But in irc2 server, change the entry irc1.alpinelab.lan with irc2.alpinelab.lan.&lt;br /&gt;
&lt;br /&gt;
Atheme-iris will connect to charybdis on 127.0.0.1 ip, according with this directive:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;server: localhost&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That&#039;s all.&lt;br /&gt;
&lt;br /&gt;
Now, you can go with one browser to http://irc1.alpinelab.lan:9090 and another in http://irc2.alpinelab.lan:9090.&lt;br /&gt;
&lt;br /&gt;
Login with two different users in the same channel.&lt;br /&gt;
&lt;br /&gt;
You should view both users on both webclients.&lt;br /&gt;
&lt;br /&gt;
Happy chatting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When you login into webchat, you will see &amp;quot;webchat@127.0.0.1&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
If you&#039;re wondering how change 127.0.0.1 with a spoofed address, you need another auth{} block in charybdis. Look at /etc/charybdis/reference.conf for details. &lt;br /&gt;
&lt;br /&gt;
If you want the real ip address of the client, you need to setup cgi:irc with atheme-iris, and Charybdis will use the  module called _mwebirc to &amp;quot;glue&amp;quot; himself with atheme-iris.&lt;br /&gt;
&lt;br /&gt;
== Useful links ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IRC Commands&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/List_of_Internet_Relay_Chat_commands&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*-Line flags&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/K-line_%28IRC%29#K-line&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=How_To_Setup_Your_Own_IRC_Network&amp;diff=9065</id>
		<title>How To Setup Your Own IRC Network</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=How_To_Setup_Your_Own_IRC_Network&amp;diff=9065"/>
		<updated>2013-03-06T15:00:23Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This doc aims to assist you on setup your own irc network with Alpine Linux.&lt;br /&gt;
&lt;br /&gt;
We will configure two irc daemons and a simple ajax webirc client.&lt;br /&gt;
&lt;br /&gt;
The irc daemons will work together sharing the channel, users and other informations.&lt;br /&gt;
&lt;br /&gt;
From charybdis point of view, this configuration is called &#039;&#039;&#039;&amp;quot;cluster&amp;quot;&#039;&#039;&#039;, but this word should not be understood with the common meaning of &amp;quot;cluster&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We assume that, as example, we want create Alpine Linux IRC Network.&lt;br /&gt;
&lt;br /&gt;
We have irc1 and irc2 servers, called respectively irc1.alpinelab.lan and irc2.alpinelab.lan.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Prerequisites are two PC with Alpine Linux installed (v2.5).&lt;br /&gt;
&lt;br /&gt;
Packages that we are going to install are:&lt;br /&gt;
&lt;br /&gt;
* Charybdis&lt;br /&gt;
* atheme-iris&lt;br /&gt;
&lt;br /&gt;
Both of those packages are in edge testing.&lt;br /&gt;
&lt;br /&gt;
You can easily use this pinning edge repo:&lt;br /&gt;
{{Cmd|vi /etc/apk/repositories}}&lt;br /&gt;
&lt;br /&gt;
Add the line:&lt;br /&gt;
{{Cmd|@edge http://dl-2.alpinelinux.org/alpine/edge/testing}}&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
{{Cmd|apk update}}&lt;br /&gt;
{{Cmd|apk add charybdis}}&lt;br /&gt;
{{Cmd|apk add atheme-iris}}&lt;br /&gt;
&lt;br /&gt;
== Configure Charybdis ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cp /etc/charybdis/example.conf /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|vi /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
Modify the file starting from /etc/charybdis/reference.conf (that is well documented).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
loadmodule &amp;quot;extensions/chm_operonly.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_account.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_canjoin.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_channel.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_extgecos.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_oper.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_realname.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_identify.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_mkpasswd.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_webirc.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_farconnect.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_globalkline.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_globaloper.so&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
serverinfo {&lt;br /&gt;
	name = &amp;quot;irc1.alpinelab.lan&amp;quot;;&lt;br /&gt;
	sid = &amp;quot;01A&amp;quot;;&lt;br /&gt;
        description = &amp;quot;Alpine Linux IRC Server&amp;quot;;&lt;br /&gt;
	network_name = &amp;quot;Alpine Linux Network&amp;quot;;&lt;br /&gt;
	network_desc = &amp;quot;Alpine Linux IRC network.&amp;quot;;&lt;br /&gt;
	hub = yes;&lt;br /&gt;
	default_max_clients = 10000;&lt;br /&gt;
	nicklen = 30;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
admin {&lt;br /&gt;
	name = &amp;quot;admin&amp;quot;;&lt;br /&gt;
	description = &amp;quot;Alpine Linux IRC network administrator&amp;quot;;&lt;br /&gt;
	email = &amp;quot;ircadmin@alpinelab.lan&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
log {&lt;br /&gt;
	fname_userlog = &amp;quot;logs/userlog&amp;quot;;&lt;br /&gt;
	#fname_fuserlog = &amp;quot;logs/fuserlog&amp;quot;;&lt;br /&gt;
	fname_operlog = &amp;quot;logs/operlog&amp;quot;;&lt;br /&gt;
	#fname_foperlog = &amp;quot;logs/foperlog&amp;quot;;&lt;br /&gt;
	fname_serverlog = &amp;quot;logs/serverlog&amp;quot;;&lt;br /&gt;
	#fname_klinelog = &amp;quot;logs/klinelog&amp;quot;;&lt;br /&gt;
	fname_killlog = &amp;quot;logs/killlog&amp;quot;;&lt;br /&gt;
	fname_operspylog = &amp;quot;logs/operspylog&amp;quot;;&lt;br /&gt;
	#fname_ioerrorlog = &amp;quot;logs/ioerror&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;users&amp;quot; {&lt;br /&gt;
	ping_time = 2 minutes;&lt;br /&gt;
	number_per_ident = 10;&lt;br /&gt;
	number_per_ip = 10;&lt;br /&gt;
	number_per_ip_global = 50;&lt;br /&gt;
	cidr_ipv4_bitlen = 24;&lt;br /&gt;
	cidr_ipv6_bitlen = 64;&lt;br /&gt;
	number_per_cidr = 200;&lt;br /&gt;
	max_number = 100;&lt;br /&gt;
	sendq = 400 kbytes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;opers&amp;quot; {&lt;br /&gt;
	ping_time = 5 minutes;&lt;br /&gt;
	number_per_ip = 10;&lt;br /&gt;
	max_number = 1000;&lt;br /&gt;
	sendq = 1 megabyte;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;server&amp;quot; {&lt;br /&gt;
	ping_time = 5 minutes;&lt;br /&gt;
	connectfreq = 5 minutes;&lt;br /&gt;
	max_number = 10;&lt;br /&gt;
	sendq = 4 megabytes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
listen {&lt;br /&gt;
	defer_accept = yes;&lt;br /&gt;
	port = 5000, 6665 .. 6669;&lt;br /&gt;
	sslport = 6697;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
auth {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;&lt;br /&gt;
	class = &amp;quot;users&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;local_op&amp;quot; {&lt;br /&gt;
	privs = oper:local_kill, oper:operwall;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;server_bot&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;local_op&amp;quot;;&lt;br /&gt;
	privs = oper:kline, oper:remoteban, snomask:nick_changes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;global_op&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;local_op&amp;quot;;&lt;br /&gt;
	privs = oper:global_kill, oper:routing, oper:kline, oper:unkline, oper:xline,&lt;br /&gt;
		oper:resv, oper:mass_notice, oper:remoteban;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;admin&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;global_op&amp;quot;;&lt;br /&gt;
	privs = oper:admin, oper:die, oper:rehash, oper:spy;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;&lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;;&lt;br /&gt;
	snomask = &amp;quot;+Zbfkrsuy&amp;quot;;&lt;br /&gt;
	flags = ~encrypted;&lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc2.alpinelab.lan&amp;quot; {&lt;br /&gt;
	host=&amp;quot;10.0.2.10&amp;quot;;&lt;br /&gt;
        send_password = &amp;quot;Password_To_Server&amp;quot;;&lt;br /&gt;
	accept_password = &amp;quot;Password_From_Server&amp;quot;; &lt;br /&gt;
	port = 6666;&lt;br /&gt;
	hub_mask = &amp;quot;*&amp;quot;;&lt;br /&gt;
	class = &amp;quot;server&amp;quot;;&lt;br /&gt;
	flags = compressed, topicburst, autoconn;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
service {&lt;br /&gt;
	name = &amp;quot;services.int&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
cluster {&lt;br /&gt;
	name = &amp;quot;*.alpinelab.lan&amp;quot;;&lt;br /&gt;
	flags = kline, tkline, unkline, xline, txline, unxline, resv, tresv, unresv;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
shared {&lt;br /&gt;
	oper = &amp;quot;*@*&amp;quot;, &amp;quot;*&amp;quot;;&lt;br /&gt;
	flags = all, rehash;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* exempt {}: IPs that are exempt from Dlines and rejectcache. (OLD d:) */&lt;br /&gt;
exempt {&lt;br /&gt;
	ip = &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
channel {&lt;br /&gt;
	use_invex = yes;&lt;br /&gt;
	use_except = yes;&lt;br /&gt;
	use_forward = yes;&lt;br /&gt;
	use_knock = yes;&lt;br /&gt;
	knock_delay = 5 minutes;&lt;br /&gt;
	knock_delay_channel = 1 minute;&lt;br /&gt;
	max_chans_per_user = 15;&lt;br /&gt;
	max_bans = 100;&lt;br /&gt;
	max_bans_large = 500;&lt;br /&gt;
	default_split_user_count = 0;&lt;br /&gt;
	default_split_server_count = 0;&lt;br /&gt;
	no_create_on_split = no;&lt;br /&gt;
	no_join_on_split = no;&lt;br /&gt;
	burst_topicwho = yes;&lt;br /&gt;
	kick_on_split_riding = no;&lt;br /&gt;
	only_ascii_channels = no;&lt;br /&gt;
	resv_forcepart = yes;&lt;br /&gt;
	channel_target_change = yes;&lt;br /&gt;
	disable_local_channels = no;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
serverhide {&lt;br /&gt;
	flatten_links = yes;&lt;br /&gt;
	links_delay = 5 minutes;&lt;br /&gt;
	hidden = no;&lt;br /&gt;
	disable_hidden = no;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
blacklist {&lt;br /&gt;
	host = &amp;quot;rbl.efnetrbl.org&amp;quot;;&lt;br /&gt;
	type = ipv4;&lt;br /&gt;
	reject_reason = &amp;quot;${nick}, your IP (${ip}) is listed in EFnet&#039;s RBL. For assistance, see http://efnetrbl.org/?i=${ip}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	/* Example of a blacklist that supports both IPv4 and IPv6 */&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;NickServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;NickServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;ChanServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;ChanServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;OperServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;OperServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;MemoServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;MemoServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;NS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;NickServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;CS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;ChanServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;OS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;OperServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;MS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;MemoServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
general {&lt;br /&gt;
	hide_error_messages = opers;&lt;br /&gt;
	hide_spoof_ips = yes;&lt;br /&gt;
	default_umodes = &amp;quot;+i&amp;quot;;&lt;br /&gt;
	default_operstring = &amp;quot;is an IRC Operator&amp;quot;;&lt;br /&gt;
	default_adminstring = &amp;quot;is a Server Administrator&amp;quot;;&lt;br /&gt;
	servicestring = &amp;quot;is a Network Service&amp;quot;;&lt;br /&gt;
	disable_fake_channels = no;&lt;br /&gt;
	tkline_expire_notices = no;&lt;br /&gt;
	default_floodcount = 10;&lt;br /&gt;
	failed_oper_notice = yes;&lt;br /&gt;
	dots_in_ident=2;&lt;br /&gt;
	min_nonwildcard = 4;&lt;br /&gt;
	min_nonwildcard_simple = 3;&lt;br /&gt;
	max_accept = 100;&lt;br /&gt;
	max_monitor = 100;&lt;br /&gt;
	anti_nick_flood = yes;&lt;br /&gt;
	max_nick_time = 20 seconds;&lt;br /&gt;
	max_nick_changes = 5;&lt;br /&gt;
	anti_spam_exit_message_time = 5 minutes;&lt;br /&gt;
	ts_warn_delta = 30 seconds;&lt;br /&gt;
	ts_max_delta = 5 minutes;&lt;br /&gt;
	client_exit = yes;&lt;br /&gt;
	collision_fnc = yes;&lt;br /&gt;
	resv_fnc = yes;&lt;br /&gt;
	global_snotices = yes;&lt;br /&gt;
	dline_with_reason = yes;&lt;br /&gt;
	kline_delay = 0 seconds;&lt;br /&gt;
	kline_with_reason = yes;&lt;br /&gt;
	kline_reason = &amp;quot;K-Lined&amp;quot;;&lt;br /&gt;
	identify_service = &amp;quot;NickServ@services.int&amp;quot;;&lt;br /&gt;
	identify_command = &amp;quot;IDENTIFY&amp;quot;;&lt;br /&gt;
	non_redundant_klines = yes;&lt;br /&gt;
	warn_no_nline = yes;&lt;br /&gt;
	use_propagated_bans = yes;&lt;br /&gt;
	stats_e_disabled = no;&lt;br /&gt;
	stats_c_oper_only=no;&lt;br /&gt;
	stats_h_oper_only=no;&lt;br /&gt;
	stats_y_oper_only=no;&lt;br /&gt;
	stats_o_oper_only=yes;&lt;br /&gt;
	stats_P_oper_only=no;&lt;br /&gt;
	stats_i_oper_only=masked;&lt;br /&gt;
	stats_k_oper_only=masked;&lt;br /&gt;
	map_oper_only = no;&lt;br /&gt;
	operspy_admin_only = no;&lt;br /&gt;
	operspy_dont_care_user_info = no;&lt;br /&gt;
	caller_id_wait = 1 minute;&lt;br /&gt;
	pace_wait_simple = 1 second;&lt;br /&gt;
	pace_wait = 10 seconds;&lt;br /&gt;
	short_motd = no;&lt;br /&gt;
	ping_cookie = no;&lt;br /&gt;
	connect_timeout = 30 seconds;&lt;br /&gt;
	default_ident_timeout = 5;&lt;br /&gt;
	disable_auth = no;&lt;br /&gt;
	no_oper_flood = yes;&lt;br /&gt;
	max_targets = 4;&lt;br /&gt;
	client_flood_max_lines = 20;&lt;br /&gt;
	use_whois_actually = no;&lt;br /&gt;
	oper_only_umodes = operwall, locops, servnotice;&lt;br /&gt;
	oper_umodes = locops, servnotice, operwall, wallop;&lt;br /&gt;
	oper_snomask = &amp;quot;+s&amp;quot;;&lt;br /&gt;
	burst_away = yes;&lt;br /&gt;
	nick_delay = 0 seconds; # 15 minutes if you want to enable this&lt;br /&gt;
	reject_ban_time = 1 minute;&lt;br /&gt;
	reject_after_count = 3;&lt;br /&gt;
	reject_duration = 5 minutes;&lt;br /&gt;
	throttle_duration = 60;&lt;br /&gt;
	throttle_count = 4;&lt;br /&gt;
	max_ratelimit_tokens = 30;&lt;br /&gt;
	away_interval = 30;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
modules {&lt;br /&gt;
	path = &amp;quot;/usr/lib/charybdis/modules&amp;quot;;&lt;br /&gt;
	path = &amp;quot;/usr/lib/charybdis/modules/autoload&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant part of the config file are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
serverinfo {&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
	sid = &amp;quot;01A&amp;quot;; &amp;lt;-----------   This must be unique. You can choose two cipher and one letter.&lt;br /&gt;
	hub = yes;   &amp;lt;-----------   This works as an hub. Allows other irc server to connects.&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
listen {&lt;br /&gt;
	port = 5000, 6665 .. 6669; &amp;lt;---- Port where charybdis is listening. You can also bind to a specific ip adding &amp;quot;host&amp;quot; directive. If not specifyied charybdis listen on all interfaces.&lt;br /&gt;
	sslport = 6697;            &amp;lt;---- Port for SSL connection. You need a certificate in order to use this feature.&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;  &amp;lt;----------- This is a masq used to match who can become operator. This support CIDR. If you want to allows only 10.0.0.0/24, you can choose &amp;quot;*@10.0.0.*&amp;quot;.&lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;; &amp;lt;---- Password used to become IRC Operator. &lt;br /&gt;
	flags = ~encrypted;            &amp;lt;---- Tilde &amp;quot;~&amp;quot; means not. So the password used in this block is not encrypted. Without &amp;quot;~&amp;quot;, you need to write the password in this block encrypted.&lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc2.alpinelab.lan&amp;quot; {                &amp;lt;----------- Descriptive name of the server you want to connect to.&lt;br /&gt;
	host=&amp;quot;10.0.2.10&amp;quot;;                     &amp;lt;----------- IP or HOST. They MUST be valid. If hostname, it MUST be an A record.&lt;br /&gt;
	send_password = &amp;quot;Password_To_Server&amp;quot;;     &amp;lt;------- Password you sent TO irc2. In irc2 this is &amp;quot;accept_password&amp;quot;.&lt;br /&gt;
	accept_password = &amp;quot;Password_From_Server&amp;quot;; &amp;lt;------- Password you expect to receive FROM irc2. In irc2 this is &amp;quot;send_password&amp;quot;&lt;br /&gt;
	flags = compressed, topicburst, autoconn; &amp;lt;------- Autoconn means that irc1 will try automatically to connect to irc2.&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
cluster {&lt;br /&gt;
	name = &amp;quot;*.alpinelab.lan&amp;quot;;             &amp;lt;----------- Masq to indicate what servers can share the information. Those information are written in the following &amp;quot;flags&amp;quot; entry.&lt;br /&gt;
	flags = kline, tkline, unkline, xline, txline, unxline, resv, tresv, unresv; &amp;lt;--- Check IRC documentation to understand the meaning of those flags. &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
shared {&lt;br /&gt;
	oper = &amp;quot;*@*&amp;quot;, &amp;quot;*&amp;quot;;  &amp;lt;----------- The user@host and the server must be on in order to set klines.               &lt;br /&gt;
	flags = all,rehash; &amp;lt;----------- flags: list of what to allow them to place. All oper will receive this.&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the other server, irc2, configuration is pretty similar.&lt;br /&gt;
&lt;br /&gt;
Those are the only difference of /etc/charybdis/ircd.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
serverinfo {&lt;br /&gt;
	sid = &amp;quot;02A&amp;quot;; &lt;br /&gt;
	hub = yes;   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;  &lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;; &lt;br /&gt;
	flags = ~encrypted;            &lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc1.alpinelab.lan&amp;quot; {                &lt;br /&gt;
	host=&amp;quot;10.0.1.10&amp;quot;;                     &lt;br /&gt;
	send_password = &amp;quot;Password_From_Server&amp;quot;; &lt;br /&gt;
	accept_password = &amp;quot;Password_To_Server&amp;quot;; &lt;br /&gt;
	flags = compressed, topicburst;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In flags directive, connect{} block, we do not set &amp;quot;autoconn&amp;quot;. &lt;br /&gt;
This means that irc1 will automatically connect to irc2, but not the contrary.&lt;br /&gt;
&lt;br /&gt;
Charybdis has a lot of other cool features, like ssl connection, spam blacklisting and so on. &lt;br /&gt;
Look at documentation here: [http://www.stack.nl/~jilles/irc/charybdis-oper-guide/]&lt;br /&gt;
&lt;br /&gt;
After having modifyied the ircd.conf in both server, fix the permissions:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|chown ircd /etc/charybdis/ircd.conf}}&lt;br /&gt;
{{Cmd|chmod 400 /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
== Configure Atheme-iris ==&lt;br /&gt;
&lt;br /&gt;
Atheme-iris is a nice webchat written in AJAX and Python. It&#039;s a fork of the famous qwebirc.&lt;br /&gt;
&lt;br /&gt;
Configuration in pretty simple.&lt;br /&gt;
&lt;br /&gt;
By default, atheme-iris will listen on all interfaces. If you want modify this behaviour, change /etc/conf.d/atheme-iris and set the IP address where atheme will bind.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[execution]&lt;br /&gt;
args: -n -p 3989&lt;br /&gt;
syslog_addr:&lt;br /&gt;
syslog_port: 514&lt;br /&gt;
&lt;br /&gt;
[irc]&lt;br /&gt;
server: localhost&lt;br /&gt;
port: 6667&lt;br /&gt;
ssl: false&lt;br /&gt;
bind_ip: 127.0.0.1&lt;br /&gt;
realname: http://irc1.alpinelab.lan&lt;br /&gt;
ident: nick&lt;br /&gt;
ident_string: webchat&lt;br /&gt;
webirc_mode: webirc&lt;br /&gt;
webirc_password: fish&lt;br /&gt;
&lt;br /&gt;
[athemeengine]&lt;br /&gt;
xmlrpc_path:&lt;br /&gt;
chan_list_enabled: true&lt;br /&gt;
chan_list_max_age: 120&lt;br /&gt;
chan_list_count: 3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[feedbackengine]&lt;br /&gt;
from: moo@moo.com&lt;br /&gt;
to: moo@moo.com&lt;br /&gt;
smtp_host: 127.0.0.1&lt;br /&gt;
smtp_port: 25&lt;br /&gt;
&lt;br /&gt;
[frontend]&lt;br /&gt;
base_url: http://irc1.alpinelab.lan:9090&lt;br /&gt;
network_name: AlpineLinux&lt;br /&gt;
app_title: %(network_name)s Web IRC&lt;br /&gt;
extra_html:&lt;br /&gt;
initial_nick:&lt;br /&gt;
prompt: true&lt;br /&gt;
chan_prompt: true&lt;br /&gt;
chan_autoconnect: true&lt;br /&gt;
static_base_url: /&lt;br /&gt;
dynamic_base_url: /&lt;br /&gt;
&lt;br /&gt;
[atheme]&lt;br /&gt;
nickserv_login: true&lt;br /&gt;
chan_list_on_start: true&lt;br /&gt;
chan_list_cloud_view: false&lt;br /&gt;
&lt;br /&gt;
[ui]&lt;br /&gt;
dedicated_msg_window: false&lt;br /&gt;
dedicated_notice_window: false&lt;br /&gt;
hide_joinparts: false&lt;br /&gt;
simple_color: false&lt;br /&gt;
fg_color: DDDDDD&lt;br /&gt;
fg_sec_color: 999999&lt;br /&gt;
bg_color: 111111&lt;br /&gt;
lastpos_line: true&lt;br /&gt;
nick_click_query: false&lt;br /&gt;
nick_colors: false&lt;br /&gt;
nick_status: false&lt;br /&gt;
flash_on_mention: false&lt;br /&gt;
beep_on_mention: false&lt;br /&gt;
&lt;br /&gt;
[adminengine]&lt;br /&gt;
hosts: 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
[proxy]&lt;br /&gt;
forwarded_for_header:&lt;br /&gt;
forwarded_for_ips: 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
[tuneback]&lt;br /&gt;
update_freq: 0.5&lt;br /&gt;
maxbuflen: 100000&lt;br /&gt;
maxsubscriptions: 1&lt;br /&gt;
maxlinelen: 600&lt;br /&gt;
dns_timeout: 5&lt;br /&gt;
http_ajax_request_timeout: 30&lt;br /&gt;
http_request_timeout: 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the [execution] block, parameters are overridden by /etc/conf.d/atheme-iris settings.&lt;br /&gt;
&lt;br /&gt;
Replicate the same configuration in irc2.alpinelab.lan. &lt;br /&gt;
&lt;br /&gt;
But in irc2 server, change the entry irc1.alpinelab.lan with irc2.alpinelab.lan.&lt;br /&gt;
&lt;br /&gt;
Atheme-iris will connect to charybdis on 127.0.0.1 ip, according with this directive:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;server: localhost&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That&#039;s all.&lt;br /&gt;
&lt;br /&gt;
Now, you can go with one browser to http://irc1.alpinelab.lan:9090 and another in http://irc2.alpinelab.lan:9090.&lt;br /&gt;
&lt;br /&gt;
Login with two different users in the same channel.&lt;br /&gt;
&lt;br /&gt;
You should view both users on both webclients.&lt;br /&gt;
&lt;br /&gt;
Happy chatting.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
When you login into webchat, you will see &amp;quot;webchat@127.0.0.1&amp;quot;. If you&#039;re wondering how change 127.0.0.1 with a spoofed address, you need another auth{} block in charybdis. Look at reference.conf for details. &lt;br /&gt;
If you want the real ip address of the client, you need to setup cgi:irc with atheme-iris, and Charybdis will use the  module called _mwebirc to &amp;quot;glue&amp;quot; himself with atheme-iris.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Useful links ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IRC Commands&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/List_of_Internet_Relay_Chat_commands&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*-Line flags&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/K-line_%28IRC%29#K-line&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=How_To_Setup_Your_Own_IRC_Network&amp;diff=9064</id>
		<title>How To Setup Your Own IRC Network</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=How_To_Setup_Your_Own_IRC_Network&amp;diff=9064"/>
		<updated>2013-03-06T14:55:22Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: /* Prerequisites */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This doc aims to assist you on setup your own irc network with Alpine Linux.&lt;br /&gt;
We will configure two irc daemons and a simple ajax webirc client.&lt;br /&gt;
The irc daemons will work together sharing the channel, users and other informations.&lt;br /&gt;
From charybdis point of view, this configuration is called &amp;quot;cluster&amp;quot;, but this word should not be understood with the common meaning of &amp;quot;cluster&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We assume that, as example, we want create Alpine Linux IRC Network.&lt;br /&gt;
We have irc1 and irc2 servers.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Prerequisites are two PC with Alpine Linux installed (v2.5).&lt;br /&gt;
&lt;br /&gt;
Packages that we are going to install are:&lt;br /&gt;
&lt;br /&gt;
* Charybdis&lt;br /&gt;
* atheme-iris&lt;br /&gt;
&lt;br /&gt;
Both of those packages are in edge testing.&lt;br /&gt;
&lt;br /&gt;
You can easily use this pinning edge repo:&lt;br /&gt;
{{Cmd|vi /etc/apk/repositories}}&lt;br /&gt;
&lt;br /&gt;
Add the line:&lt;br /&gt;
{{Cmd|@edge http://dl-2.alpinelinux.org/alpine/edge/testing}}&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
{{Cmd|apk update}}&lt;br /&gt;
{{Cmd|apk add charybdis}}&lt;br /&gt;
{{Cmd|apk add atheme-iris}}&lt;br /&gt;
&lt;br /&gt;
== Configure Charybdis ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cp /etc/charybdis/example.conf /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|vi /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
Modify the file starting from /etc/charybdis/reference.conf (that is well documented).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
loadmodule &amp;quot;extensions/chm_operonly.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_account.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_canjoin.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_channel.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_extgecos.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_oper.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_realname.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_identify.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_mkpasswd.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_webirc.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_farconnect.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_globalkline.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_globaloper.so&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
serverinfo {&lt;br /&gt;
	name = &amp;quot;irc1.alpinelab.lan&amp;quot;;&lt;br /&gt;
	sid = &amp;quot;01A&amp;quot;;&lt;br /&gt;
        description = &amp;quot;Alpine Linux IRC Server&amp;quot;;&lt;br /&gt;
	network_name = &amp;quot;Alpine Linux Network&amp;quot;;&lt;br /&gt;
	network_desc = &amp;quot;Alpine Linux IRC network.&amp;quot;;&lt;br /&gt;
	hub = yes;&lt;br /&gt;
	default_max_clients = 10000;&lt;br /&gt;
	nicklen = 30;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
admin {&lt;br /&gt;
	name = &amp;quot;admin&amp;quot;;&lt;br /&gt;
	description = &amp;quot;Alpine Linux IRC network administrator&amp;quot;;&lt;br /&gt;
	email = &amp;quot;ircadmin@alpinelab.lan&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
log {&lt;br /&gt;
	fname_userlog = &amp;quot;logs/userlog&amp;quot;;&lt;br /&gt;
	#fname_fuserlog = &amp;quot;logs/fuserlog&amp;quot;;&lt;br /&gt;
	fname_operlog = &amp;quot;logs/operlog&amp;quot;;&lt;br /&gt;
	#fname_foperlog = &amp;quot;logs/foperlog&amp;quot;;&lt;br /&gt;
	fname_serverlog = &amp;quot;logs/serverlog&amp;quot;;&lt;br /&gt;
	#fname_klinelog = &amp;quot;logs/klinelog&amp;quot;;&lt;br /&gt;
	fname_killlog = &amp;quot;logs/killlog&amp;quot;;&lt;br /&gt;
	fname_operspylog = &amp;quot;logs/operspylog&amp;quot;;&lt;br /&gt;
	#fname_ioerrorlog = &amp;quot;logs/ioerror&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;users&amp;quot; {&lt;br /&gt;
	ping_time = 2 minutes;&lt;br /&gt;
	number_per_ident = 10;&lt;br /&gt;
	number_per_ip = 10;&lt;br /&gt;
	number_per_ip_global = 50;&lt;br /&gt;
	cidr_ipv4_bitlen = 24;&lt;br /&gt;
	cidr_ipv6_bitlen = 64;&lt;br /&gt;
	number_per_cidr = 200;&lt;br /&gt;
	max_number = 100;&lt;br /&gt;
	sendq = 400 kbytes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;opers&amp;quot; {&lt;br /&gt;
	ping_time = 5 minutes;&lt;br /&gt;
	number_per_ip = 10;&lt;br /&gt;
	max_number = 1000;&lt;br /&gt;
	sendq = 1 megabyte;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;server&amp;quot; {&lt;br /&gt;
	ping_time = 5 minutes;&lt;br /&gt;
	connectfreq = 5 minutes;&lt;br /&gt;
	max_number = 10;&lt;br /&gt;
	sendq = 4 megabytes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
listen {&lt;br /&gt;
	defer_accept = yes;&lt;br /&gt;
	port = 5000, 6665 .. 6669;&lt;br /&gt;
	sslport = 6697;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
auth {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;&lt;br /&gt;
	class = &amp;quot;users&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;local_op&amp;quot; {&lt;br /&gt;
	privs = oper:local_kill, oper:operwall;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;server_bot&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;local_op&amp;quot;;&lt;br /&gt;
	privs = oper:kline, oper:remoteban, snomask:nick_changes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;global_op&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;local_op&amp;quot;;&lt;br /&gt;
	privs = oper:global_kill, oper:routing, oper:kline, oper:unkline, oper:xline,&lt;br /&gt;
		oper:resv, oper:mass_notice, oper:remoteban;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;admin&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;global_op&amp;quot;;&lt;br /&gt;
	privs = oper:admin, oper:die, oper:rehash, oper:spy;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;&lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;;&lt;br /&gt;
	snomask = &amp;quot;+Zbfkrsuy&amp;quot;;&lt;br /&gt;
	flags = ~encrypted;&lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc2.alpinelab.lan&amp;quot; {&lt;br /&gt;
	host=&amp;quot;10.0.2.10&amp;quot;;&lt;br /&gt;
        send_password = &amp;quot;Password_To_Server&amp;quot;;&lt;br /&gt;
	accept_password = &amp;quot;Password_From_Server&amp;quot;; &lt;br /&gt;
	port = 6666;&lt;br /&gt;
	hub_mask = &amp;quot;*&amp;quot;;&lt;br /&gt;
	class = &amp;quot;server&amp;quot;;&lt;br /&gt;
	flags = compressed, topicburst, autoconn;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
service {&lt;br /&gt;
	name = &amp;quot;services.int&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
cluster {&lt;br /&gt;
	name = &amp;quot;*.alpinelab.lan&amp;quot;;&lt;br /&gt;
	flags = kline, tkline, unkline, xline, txline, unxline, resv, tresv, unresv;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
shared {&lt;br /&gt;
	oper = &amp;quot;*@*&amp;quot;, &amp;quot;*&amp;quot;;&lt;br /&gt;
	flags = all, rehash;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* exempt {}: IPs that are exempt from Dlines and rejectcache. (OLD d:) */&lt;br /&gt;
exempt {&lt;br /&gt;
	ip = &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
channel {&lt;br /&gt;
	use_invex = yes;&lt;br /&gt;
	use_except = yes;&lt;br /&gt;
	use_forward = yes;&lt;br /&gt;
	use_knock = yes;&lt;br /&gt;
	knock_delay = 5 minutes;&lt;br /&gt;
	knock_delay_channel = 1 minute;&lt;br /&gt;
	max_chans_per_user = 15;&lt;br /&gt;
	max_bans = 100;&lt;br /&gt;
	max_bans_large = 500;&lt;br /&gt;
	default_split_user_count = 0;&lt;br /&gt;
	default_split_server_count = 0;&lt;br /&gt;
	no_create_on_split = no;&lt;br /&gt;
	no_join_on_split = no;&lt;br /&gt;
	burst_topicwho = yes;&lt;br /&gt;
	kick_on_split_riding = no;&lt;br /&gt;
	only_ascii_channels = no;&lt;br /&gt;
	resv_forcepart = yes;&lt;br /&gt;
	channel_target_change = yes;&lt;br /&gt;
	disable_local_channels = no;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
serverhide {&lt;br /&gt;
	flatten_links = yes;&lt;br /&gt;
	links_delay = 5 minutes;&lt;br /&gt;
	hidden = no;&lt;br /&gt;
	disable_hidden = no;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
blacklist {&lt;br /&gt;
	host = &amp;quot;rbl.efnetrbl.org&amp;quot;;&lt;br /&gt;
	type = ipv4;&lt;br /&gt;
	reject_reason = &amp;quot;${nick}, your IP (${ip}) is listed in EFnet&#039;s RBL. For assistance, see http://efnetrbl.org/?i=${ip}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	/* Example of a blacklist that supports both IPv4 and IPv6 */&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;NickServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;NickServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;ChanServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;ChanServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;OperServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;OperServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;MemoServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;MemoServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;NS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;NickServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;CS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;ChanServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;OS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;OperServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;MS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;MemoServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
general {&lt;br /&gt;
	hide_error_messages = opers;&lt;br /&gt;
	hide_spoof_ips = yes;&lt;br /&gt;
	default_umodes = &amp;quot;+i&amp;quot;;&lt;br /&gt;
	default_operstring = &amp;quot;is an IRC Operator&amp;quot;;&lt;br /&gt;
	default_adminstring = &amp;quot;is a Server Administrator&amp;quot;;&lt;br /&gt;
	servicestring = &amp;quot;is a Network Service&amp;quot;;&lt;br /&gt;
	disable_fake_channels = no;&lt;br /&gt;
	tkline_expire_notices = no;&lt;br /&gt;
	default_floodcount = 10;&lt;br /&gt;
	failed_oper_notice = yes;&lt;br /&gt;
	dots_in_ident=2;&lt;br /&gt;
	min_nonwildcard = 4;&lt;br /&gt;
	min_nonwildcard_simple = 3;&lt;br /&gt;
	max_accept = 100;&lt;br /&gt;
	max_monitor = 100;&lt;br /&gt;
	anti_nick_flood = yes;&lt;br /&gt;
	max_nick_time = 20 seconds;&lt;br /&gt;
	max_nick_changes = 5;&lt;br /&gt;
	anti_spam_exit_message_time = 5 minutes;&lt;br /&gt;
	ts_warn_delta = 30 seconds;&lt;br /&gt;
	ts_max_delta = 5 minutes;&lt;br /&gt;
	client_exit = yes;&lt;br /&gt;
	collision_fnc = yes;&lt;br /&gt;
	resv_fnc = yes;&lt;br /&gt;
	global_snotices = yes;&lt;br /&gt;
	dline_with_reason = yes;&lt;br /&gt;
	kline_delay = 0 seconds;&lt;br /&gt;
	kline_with_reason = yes;&lt;br /&gt;
	kline_reason = &amp;quot;K-Lined&amp;quot;;&lt;br /&gt;
	identify_service = &amp;quot;NickServ@services.int&amp;quot;;&lt;br /&gt;
	identify_command = &amp;quot;IDENTIFY&amp;quot;;&lt;br /&gt;
	non_redundant_klines = yes;&lt;br /&gt;
	warn_no_nline = yes;&lt;br /&gt;
	use_propagated_bans = yes;&lt;br /&gt;
	stats_e_disabled = no;&lt;br /&gt;
	stats_c_oper_only=no;&lt;br /&gt;
	stats_h_oper_only=no;&lt;br /&gt;
	stats_y_oper_only=no;&lt;br /&gt;
	stats_o_oper_only=yes;&lt;br /&gt;
	stats_P_oper_only=no;&lt;br /&gt;
	stats_i_oper_only=masked;&lt;br /&gt;
	stats_k_oper_only=masked;&lt;br /&gt;
	map_oper_only = no;&lt;br /&gt;
	operspy_admin_only = no;&lt;br /&gt;
	operspy_dont_care_user_info = no;&lt;br /&gt;
	caller_id_wait = 1 minute;&lt;br /&gt;
	pace_wait_simple = 1 second;&lt;br /&gt;
	pace_wait = 10 seconds;&lt;br /&gt;
	short_motd = no;&lt;br /&gt;
	ping_cookie = no;&lt;br /&gt;
	connect_timeout = 30 seconds;&lt;br /&gt;
	default_ident_timeout = 5;&lt;br /&gt;
	disable_auth = no;&lt;br /&gt;
	no_oper_flood = yes;&lt;br /&gt;
	max_targets = 4;&lt;br /&gt;
	client_flood_max_lines = 20;&lt;br /&gt;
	use_whois_actually = no;&lt;br /&gt;
	oper_only_umodes = operwall, locops, servnotice;&lt;br /&gt;
	oper_umodes = locops, servnotice, operwall, wallop;&lt;br /&gt;
	oper_snomask = &amp;quot;+s&amp;quot;;&lt;br /&gt;
	burst_away = yes;&lt;br /&gt;
	nick_delay = 0 seconds; # 15 minutes if you want to enable this&lt;br /&gt;
	reject_ban_time = 1 minute;&lt;br /&gt;
	reject_after_count = 3;&lt;br /&gt;
	reject_duration = 5 minutes;&lt;br /&gt;
	throttle_duration = 60;&lt;br /&gt;
	throttle_count = 4;&lt;br /&gt;
	max_ratelimit_tokens = 30;&lt;br /&gt;
	away_interval = 30;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
modules {&lt;br /&gt;
	path = &amp;quot;/usr/lib/charybdis/modules&amp;quot;;&lt;br /&gt;
	path = &amp;quot;/usr/lib/charybdis/modules/autoload&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant part of the config file are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
serverinfo {&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
	sid = &amp;quot;01A&amp;quot;; &amp;lt;-----------   This must be unique. You can choose two cipher and one letter.&lt;br /&gt;
	hub = yes;   &amp;lt;-----------   This works as an hub. Allows other irc server to connects.&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
listen {&lt;br /&gt;
	port = 5000, 6665 .. 6669; &amp;lt;---- Port where charybdis is listening. You can also bind to a specific ip adding &amp;quot;host&amp;quot; directive. If not specifyied charybdis listen on all interfaces.&lt;br /&gt;
	sslport = 6697;            &amp;lt;---- Port for SSL connection. You need a certificate in order to use this feature.&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;  &amp;lt;----------- This is a masq used to match who can become operator. This support CIDR. If you want to allows only 10.0.0.0/24, you can choose &amp;quot;*@10.0.0.*&amp;quot;.&lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;; &amp;lt;---- Password used to become IRC Operator. &lt;br /&gt;
	flags = ~encrypted;            &amp;lt;---- Tilde &amp;quot;~&amp;quot; means not. So the password used in this block is not encrypted. Without &amp;quot;~&amp;quot;, you need to write the password in this block encrypted.&lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc2.alpinelab.lan&amp;quot; {                &amp;lt;----------- Descriptive name of the server you want to connect to.&lt;br /&gt;
	host=&amp;quot;10.0.2.10&amp;quot;;                     &amp;lt;----------- IP or HOST. They MUST be valid. If hostname, it MUST be an A record.&lt;br /&gt;
	send_password = &amp;quot;Password_To_Server&amp;quot;;     &amp;lt;------- Password you sent TO irc2. In irc2 this is &amp;quot;accept_password&amp;quot;.&lt;br /&gt;
	accept_password = &amp;quot;Password_From_Server&amp;quot;; &amp;lt;------- Password you expect to receive FROM irc2. In irc2 this is &amp;quot;send_password&amp;quot;&lt;br /&gt;
	flags = compressed, topicburst, autoconn; &amp;lt;------- Autoconn means that irc1 will try automatically to connect to irc2.&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
cluster {&lt;br /&gt;
	name = &amp;quot;*.alpinelab.lan&amp;quot;;             &amp;lt;----------- Masq to indicate what servers can share the information. Those information are written in the following &amp;quot;flags&amp;quot; entry.&lt;br /&gt;
	flags = kline, tkline, unkline, xline, txline, unxline, resv, tresv, unresv; &amp;lt;--- Check IRC documentation to understand the meaning of those flags. &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
shared {&lt;br /&gt;
	oper = &amp;quot;*@*&amp;quot;, &amp;quot;*&amp;quot;;  &amp;lt;----------- The user@host and the server must be on in order to set klines.               &lt;br /&gt;
	flags = all,rehash; &amp;lt;----------- flags: list of what to allow them to place. All oper will receive this.&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the other server, irc2, configuration is pretty similar.&lt;br /&gt;
&lt;br /&gt;
Those are the only difference of /etc/charybdis/ircd.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
serverinfo {&lt;br /&gt;
	sid = &amp;quot;02A&amp;quot;; &lt;br /&gt;
	hub = yes;   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;  &lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;; &lt;br /&gt;
	flags = ~encrypted;            &lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc1.alpinelab.lan&amp;quot; {                &lt;br /&gt;
	host=&amp;quot;10.0.1.10&amp;quot;;                     &lt;br /&gt;
	send_password = &amp;quot;Password_From_Server&amp;quot;; &lt;br /&gt;
	accept_password = &amp;quot;Password_To_Server&amp;quot;; &lt;br /&gt;
	flags = compressed, topicburst;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In flags directive, connect{} block, we do not set &amp;quot;autoconn&amp;quot;. &lt;br /&gt;
This means that irc1 will automatically connect to irc2, but not the contrary.&lt;br /&gt;
&lt;br /&gt;
Charybdis has a lot of other cool features, like ssl connection, spam blacklisting and so on. &lt;br /&gt;
Look at documentation here: [http://www.stack.nl/~jilles/irc/charybdis-oper-guide/]&lt;br /&gt;
&lt;br /&gt;
After having modifyied the ircd.conf in both server, fix the permissions:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|chown ircd /etc/charybdis/ircd.conf}}&lt;br /&gt;
{{Cmd|chmod 400 /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
== Configure Atheme-iris ==&lt;br /&gt;
&lt;br /&gt;
Atheme-iris is a nice webchat written in AJAX and Python. It&#039;s a fork of the famous qwebirc.&lt;br /&gt;
&lt;br /&gt;
Configuration in pretty simple.&lt;br /&gt;
&lt;br /&gt;
By default, atheme-iris will listen on all interfaces. If you want modify this behaviour, change /etc/conf.d/atheme-iris and set the IP address where atheme will bind.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[execution]&lt;br /&gt;
args: -n -p 3989&lt;br /&gt;
syslog_addr:&lt;br /&gt;
syslog_port: 514&lt;br /&gt;
&lt;br /&gt;
[irc]&lt;br /&gt;
server: localhost&lt;br /&gt;
port: 6667&lt;br /&gt;
ssl: false&lt;br /&gt;
bind_ip: 127.0.0.1&lt;br /&gt;
realname: http://irc1.alpinelab.lan&lt;br /&gt;
ident: nick&lt;br /&gt;
ident_string: webchat&lt;br /&gt;
webirc_mode: webirc&lt;br /&gt;
webirc_password: fish&lt;br /&gt;
&lt;br /&gt;
[athemeengine]&lt;br /&gt;
xmlrpc_path:&lt;br /&gt;
chan_list_enabled: true&lt;br /&gt;
chan_list_max_age: 120&lt;br /&gt;
chan_list_count: 3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[feedbackengine]&lt;br /&gt;
from: moo@moo.com&lt;br /&gt;
to: moo@moo.com&lt;br /&gt;
smtp_host: 127.0.0.1&lt;br /&gt;
smtp_port: 25&lt;br /&gt;
&lt;br /&gt;
[frontend]&lt;br /&gt;
base_url: http://irc1.alpinelab.lan:9090&lt;br /&gt;
network_name: AlpineLinux&lt;br /&gt;
app_title: %(network_name)s Web IRC&lt;br /&gt;
extra_html:&lt;br /&gt;
initial_nick:&lt;br /&gt;
prompt: true&lt;br /&gt;
chan_prompt: true&lt;br /&gt;
chan_autoconnect: true&lt;br /&gt;
static_base_url: /&lt;br /&gt;
dynamic_base_url: /&lt;br /&gt;
&lt;br /&gt;
[atheme]&lt;br /&gt;
nickserv_login: true&lt;br /&gt;
chan_list_on_start: true&lt;br /&gt;
chan_list_cloud_view: false&lt;br /&gt;
&lt;br /&gt;
[ui]&lt;br /&gt;
dedicated_msg_window: false&lt;br /&gt;
dedicated_notice_window: false&lt;br /&gt;
hide_joinparts: false&lt;br /&gt;
simple_color: false&lt;br /&gt;
fg_color: DDDDDD&lt;br /&gt;
fg_sec_color: 999999&lt;br /&gt;
bg_color: 111111&lt;br /&gt;
lastpos_line: true&lt;br /&gt;
nick_click_query: false&lt;br /&gt;
nick_colors: false&lt;br /&gt;
nick_status: false&lt;br /&gt;
flash_on_mention: false&lt;br /&gt;
beep_on_mention: false&lt;br /&gt;
&lt;br /&gt;
[adminengine]&lt;br /&gt;
hosts: 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
[proxy]&lt;br /&gt;
forwarded_for_header:&lt;br /&gt;
forwarded_for_ips: 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
[tuneback]&lt;br /&gt;
update_freq: 0.5&lt;br /&gt;
maxbuflen: 100000&lt;br /&gt;
maxsubscriptions: 1&lt;br /&gt;
maxlinelen: 600&lt;br /&gt;
dns_timeout: 5&lt;br /&gt;
http_ajax_request_timeout: 30&lt;br /&gt;
http_request_timeout: 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the [execution] block, parameters are overridden by /etc/conf.d/atheme-iris settings.&lt;br /&gt;
&lt;br /&gt;
Replicate the same configuration in irc2.alpinelab.lan. &lt;br /&gt;
&lt;br /&gt;
But in irc2 server, change the entry irc1.alpinelab.lan with irc2.alpinelab.lan.&lt;br /&gt;
&lt;br /&gt;
Atheme-iris will connect to charybdis on 127.0.0.1 ip, according with this directive:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;server: localhost&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That&#039;s all.&lt;br /&gt;
&lt;br /&gt;
Now, you can go with one browser to http://irc1.alpinelab.lan:9090 and another in http://irc2.alpinelab.lan:9090.&lt;br /&gt;
&lt;br /&gt;
Login with two different users in the same channel.&lt;br /&gt;
&lt;br /&gt;
You should view both users on both webclients.&lt;br /&gt;
&lt;br /&gt;
Happy chatting.&lt;br /&gt;
&lt;br /&gt;
== Useful links ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IRC Commands&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/List_of_Internet_Relay_Chat_commands&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*-Line flags&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/K-line_%28IRC%29#K-line&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=How_To_Setup_Your_Own_IRC_Network&amp;diff=9063</id>
		<title>How To Setup Your Own IRC Network</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=How_To_Setup_Your_Own_IRC_Network&amp;diff=9063"/>
		<updated>2013-03-06T14:53:48Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: /* Useful links: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This doc aims to assist you on setup your own irc network with Alpine Linux.&lt;br /&gt;
We will configure two irc daemons and a simple ajax webirc client.&lt;br /&gt;
The irc daemons will work together sharing the channel, users and other informations.&lt;br /&gt;
From charybdis point of view, this configuration is called &amp;quot;cluster&amp;quot;, but this word should not be understood with the common meaning of &amp;quot;cluster&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We assume that, as example, we want create Alpine Linux IRC Network.&lt;br /&gt;
We have irc1 and irc2 servers.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Prerequisites are two PC with Alpine Linux installed (v2.5).&lt;br /&gt;
&lt;br /&gt;
Packages that we are going to install are:&lt;br /&gt;
&lt;br /&gt;
- Charybdis &lt;br /&gt;
- atheme-iris&lt;br /&gt;
&lt;br /&gt;
Both of those packages are in edge testing.&lt;br /&gt;
&lt;br /&gt;
You can easily use this pinning edge repo:&lt;br /&gt;
{{Cmd|vi /etc/apk/repositories}}&lt;br /&gt;
&lt;br /&gt;
Add the line&lt;br /&gt;
{{Cmd|@edge http://dl-2.alpinelinux.org/alpine/edge/testing}}&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
{{Cmd|apk update}}&lt;br /&gt;
{{Cmd|apk add charybdis}}&lt;br /&gt;
{{Cmd|apk add atheme-iris}}&lt;br /&gt;
&lt;br /&gt;
== Configure Charybdis ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cp /etc/charybdis/example.conf /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|vi /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
Modify the file starting from /etc/charybdis/reference.conf (that is well documented).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
loadmodule &amp;quot;extensions/chm_operonly.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_account.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_canjoin.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_channel.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_extgecos.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_oper.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_realname.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_identify.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_mkpasswd.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_webirc.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_farconnect.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_globalkline.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_globaloper.so&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
serverinfo {&lt;br /&gt;
	name = &amp;quot;irc1.alpinelab.lan&amp;quot;;&lt;br /&gt;
	sid = &amp;quot;01A&amp;quot;;&lt;br /&gt;
        description = &amp;quot;Alpine Linux IRC Server&amp;quot;;&lt;br /&gt;
	network_name = &amp;quot;Alpine Linux Network&amp;quot;;&lt;br /&gt;
	network_desc = &amp;quot;Alpine Linux IRC network.&amp;quot;;&lt;br /&gt;
	hub = yes;&lt;br /&gt;
	default_max_clients = 10000;&lt;br /&gt;
	nicklen = 30;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
admin {&lt;br /&gt;
	name = &amp;quot;admin&amp;quot;;&lt;br /&gt;
	description = &amp;quot;Alpine Linux IRC network administrator&amp;quot;;&lt;br /&gt;
	email = &amp;quot;ircadmin@alpinelab.lan&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
log {&lt;br /&gt;
	fname_userlog = &amp;quot;logs/userlog&amp;quot;;&lt;br /&gt;
	#fname_fuserlog = &amp;quot;logs/fuserlog&amp;quot;;&lt;br /&gt;
	fname_operlog = &amp;quot;logs/operlog&amp;quot;;&lt;br /&gt;
	#fname_foperlog = &amp;quot;logs/foperlog&amp;quot;;&lt;br /&gt;
	fname_serverlog = &amp;quot;logs/serverlog&amp;quot;;&lt;br /&gt;
	#fname_klinelog = &amp;quot;logs/klinelog&amp;quot;;&lt;br /&gt;
	fname_killlog = &amp;quot;logs/killlog&amp;quot;;&lt;br /&gt;
	fname_operspylog = &amp;quot;logs/operspylog&amp;quot;;&lt;br /&gt;
	#fname_ioerrorlog = &amp;quot;logs/ioerror&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;users&amp;quot; {&lt;br /&gt;
	ping_time = 2 minutes;&lt;br /&gt;
	number_per_ident = 10;&lt;br /&gt;
	number_per_ip = 10;&lt;br /&gt;
	number_per_ip_global = 50;&lt;br /&gt;
	cidr_ipv4_bitlen = 24;&lt;br /&gt;
	cidr_ipv6_bitlen = 64;&lt;br /&gt;
	number_per_cidr = 200;&lt;br /&gt;
	max_number = 100;&lt;br /&gt;
	sendq = 400 kbytes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;opers&amp;quot; {&lt;br /&gt;
	ping_time = 5 minutes;&lt;br /&gt;
	number_per_ip = 10;&lt;br /&gt;
	max_number = 1000;&lt;br /&gt;
	sendq = 1 megabyte;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;server&amp;quot; {&lt;br /&gt;
	ping_time = 5 minutes;&lt;br /&gt;
	connectfreq = 5 minutes;&lt;br /&gt;
	max_number = 10;&lt;br /&gt;
	sendq = 4 megabytes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
listen {&lt;br /&gt;
	defer_accept = yes;&lt;br /&gt;
	port = 5000, 6665 .. 6669;&lt;br /&gt;
	sslport = 6697;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
auth {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;&lt;br /&gt;
	class = &amp;quot;users&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;local_op&amp;quot; {&lt;br /&gt;
	privs = oper:local_kill, oper:operwall;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;server_bot&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;local_op&amp;quot;;&lt;br /&gt;
	privs = oper:kline, oper:remoteban, snomask:nick_changes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;global_op&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;local_op&amp;quot;;&lt;br /&gt;
	privs = oper:global_kill, oper:routing, oper:kline, oper:unkline, oper:xline,&lt;br /&gt;
		oper:resv, oper:mass_notice, oper:remoteban;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;admin&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;global_op&amp;quot;;&lt;br /&gt;
	privs = oper:admin, oper:die, oper:rehash, oper:spy;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;&lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;;&lt;br /&gt;
	snomask = &amp;quot;+Zbfkrsuy&amp;quot;;&lt;br /&gt;
	flags = ~encrypted;&lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc2.alpinelab.lan&amp;quot; {&lt;br /&gt;
	host=&amp;quot;10.0.2.10&amp;quot;;&lt;br /&gt;
        send_password = &amp;quot;Password_To_Server&amp;quot;;&lt;br /&gt;
	accept_password = &amp;quot;Password_From_Server&amp;quot;; &lt;br /&gt;
	port = 6666;&lt;br /&gt;
	hub_mask = &amp;quot;*&amp;quot;;&lt;br /&gt;
	class = &amp;quot;server&amp;quot;;&lt;br /&gt;
	flags = compressed, topicburst, autoconn;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
service {&lt;br /&gt;
	name = &amp;quot;services.int&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
cluster {&lt;br /&gt;
	name = &amp;quot;*.alpinelab.lan&amp;quot;;&lt;br /&gt;
	flags = kline, tkline, unkline, xline, txline, unxline, resv, tresv, unresv;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
shared {&lt;br /&gt;
	oper = &amp;quot;*@*&amp;quot;, &amp;quot;*&amp;quot;;&lt;br /&gt;
	flags = all, rehash;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* exempt {}: IPs that are exempt from Dlines and rejectcache. (OLD d:) */&lt;br /&gt;
exempt {&lt;br /&gt;
	ip = &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
channel {&lt;br /&gt;
	use_invex = yes;&lt;br /&gt;
	use_except = yes;&lt;br /&gt;
	use_forward = yes;&lt;br /&gt;
	use_knock = yes;&lt;br /&gt;
	knock_delay = 5 minutes;&lt;br /&gt;
	knock_delay_channel = 1 minute;&lt;br /&gt;
	max_chans_per_user = 15;&lt;br /&gt;
	max_bans = 100;&lt;br /&gt;
	max_bans_large = 500;&lt;br /&gt;
	default_split_user_count = 0;&lt;br /&gt;
	default_split_server_count = 0;&lt;br /&gt;
	no_create_on_split = no;&lt;br /&gt;
	no_join_on_split = no;&lt;br /&gt;
	burst_topicwho = yes;&lt;br /&gt;
	kick_on_split_riding = no;&lt;br /&gt;
	only_ascii_channels = no;&lt;br /&gt;
	resv_forcepart = yes;&lt;br /&gt;
	channel_target_change = yes;&lt;br /&gt;
	disable_local_channels = no;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
serverhide {&lt;br /&gt;
	flatten_links = yes;&lt;br /&gt;
	links_delay = 5 minutes;&lt;br /&gt;
	hidden = no;&lt;br /&gt;
	disable_hidden = no;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
blacklist {&lt;br /&gt;
	host = &amp;quot;rbl.efnetrbl.org&amp;quot;;&lt;br /&gt;
	type = ipv4;&lt;br /&gt;
	reject_reason = &amp;quot;${nick}, your IP (${ip}) is listed in EFnet&#039;s RBL. For assistance, see http://efnetrbl.org/?i=${ip}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	/* Example of a blacklist that supports both IPv4 and IPv6 */&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;NickServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;NickServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;ChanServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;ChanServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;OperServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;OperServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;MemoServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;MemoServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;NS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;NickServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;CS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;ChanServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;OS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;OperServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;MS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;MemoServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
general {&lt;br /&gt;
	hide_error_messages = opers;&lt;br /&gt;
	hide_spoof_ips = yes;&lt;br /&gt;
	default_umodes = &amp;quot;+i&amp;quot;;&lt;br /&gt;
	default_operstring = &amp;quot;is an IRC Operator&amp;quot;;&lt;br /&gt;
	default_adminstring = &amp;quot;is a Server Administrator&amp;quot;;&lt;br /&gt;
	servicestring = &amp;quot;is a Network Service&amp;quot;;&lt;br /&gt;
	disable_fake_channels = no;&lt;br /&gt;
	tkline_expire_notices = no;&lt;br /&gt;
	default_floodcount = 10;&lt;br /&gt;
	failed_oper_notice = yes;&lt;br /&gt;
	dots_in_ident=2;&lt;br /&gt;
	min_nonwildcard = 4;&lt;br /&gt;
	min_nonwildcard_simple = 3;&lt;br /&gt;
	max_accept = 100;&lt;br /&gt;
	max_monitor = 100;&lt;br /&gt;
	anti_nick_flood = yes;&lt;br /&gt;
	max_nick_time = 20 seconds;&lt;br /&gt;
	max_nick_changes = 5;&lt;br /&gt;
	anti_spam_exit_message_time = 5 minutes;&lt;br /&gt;
	ts_warn_delta = 30 seconds;&lt;br /&gt;
	ts_max_delta = 5 minutes;&lt;br /&gt;
	client_exit = yes;&lt;br /&gt;
	collision_fnc = yes;&lt;br /&gt;
	resv_fnc = yes;&lt;br /&gt;
	global_snotices = yes;&lt;br /&gt;
	dline_with_reason = yes;&lt;br /&gt;
	kline_delay = 0 seconds;&lt;br /&gt;
	kline_with_reason = yes;&lt;br /&gt;
	kline_reason = &amp;quot;K-Lined&amp;quot;;&lt;br /&gt;
	identify_service = &amp;quot;NickServ@services.int&amp;quot;;&lt;br /&gt;
	identify_command = &amp;quot;IDENTIFY&amp;quot;;&lt;br /&gt;
	non_redundant_klines = yes;&lt;br /&gt;
	warn_no_nline = yes;&lt;br /&gt;
	use_propagated_bans = yes;&lt;br /&gt;
	stats_e_disabled = no;&lt;br /&gt;
	stats_c_oper_only=no;&lt;br /&gt;
	stats_h_oper_only=no;&lt;br /&gt;
	stats_y_oper_only=no;&lt;br /&gt;
	stats_o_oper_only=yes;&lt;br /&gt;
	stats_P_oper_only=no;&lt;br /&gt;
	stats_i_oper_only=masked;&lt;br /&gt;
	stats_k_oper_only=masked;&lt;br /&gt;
	map_oper_only = no;&lt;br /&gt;
	operspy_admin_only = no;&lt;br /&gt;
	operspy_dont_care_user_info = no;&lt;br /&gt;
	caller_id_wait = 1 minute;&lt;br /&gt;
	pace_wait_simple = 1 second;&lt;br /&gt;
	pace_wait = 10 seconds;&lt;br /&gt;
	short_motd = no;&lt;br /&gt;
	ping_cookie = no;&lt;br /&gt;
	connect_timeout = 30 seconds;&lt;br /&gt;
	default_ident_timeout = 5;&lt;br /&gt;
	disable_auth = no;&lt;br /&gt;
	no_oper_flood = yes;&lt;br /&gt;
	max_targets = 4;&lt;br /&gt;
	client_flood_max_lines = 20;&lt;br /&gt;
	use_whois_actually = no;&lt;br /&gt;
	oper_only_umodes = operwall, locops, servnotice;&lt;br /&gt;
	oper_umodes = locops, servnotice, operwall, wallop;&lt;br /&gt;
	oper_snomask = &amp;quot;+s&amp;quot;;&lt;br /&gt;
	burst_away = yes;&lt;br /&gt;
	nick_delay = 0 seconds; # 15 minutes if you want to enable this&lt;br /&gt;
	reject_ban_time = 1 minute;&lt;br /&gt;
	reject_after_count = 3;&lt;br /&gt;
	reject_duration = 5 minutes;&lt;br /&gt;
	throttle_duration = 60;&lt;br /&gt;
	throttle_count = 4;&lt;br /&gt;
	max_ratelimit_tokens = 30;&lt;br /&gt;
	away_interval = 30;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
modules {&lt;br /&gt;
	path = &amp;quot;/usr/lib/charybdis/modules&amp;quot;;&lt;br /&gt;
	path = &amp;quot;/usr/lib/charybdis/modules/autoload&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant part of the config file are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
serverinfo {&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
	sid = &amp;quot;01A&amp;quot;; &amp;lt;-----------   This must be unique. You can choose two cipher and one letter.&lt;br /&gt;
	hub = yes;   &amp;lt;-----------   This works as an hub. Allows other irc server to connects.&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
listen {&lt;br /&gt;
	port = 5000, 6665 .. 6669; &amp;lt;---- Port where charybdis is listening. You can also bind to a specific ip adding &amp;quot;host&amp;quot; directive. If not specifyied charybdis listen on all interfaces.&lt;br /&gt;
	sslport = 6697;            &amp;lt;---- Port for SSL connection. You need a certificate in order to use this feature.&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;  &amp;lt;----------- This is a masq used to match who can become operator. This support CIDR. If you want to allows only 10.0.0.0/24, you can choose &amp;quot;*@10.0.0.*&amp;quot;.&lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;; &amp;lt;---- Password used to become IRC Operator. &lt;br /&gt;
	flags = ~encrypted;            &amp;lt;---- Tilde &amp;quot;~&amp;quot; means not. So the password used in this block is not encrypted. Without &amp;quot;~&amp;quot;, you need to write the password in this block encrypted.&lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc2.alpinelab.lan&amp;quot; {                &amp;lt;----------- Descriptive name of the server you want to connect to.&lt;br /&gt;
	host=&amp;quot;10.0.2.10&amp;quot;;                     &amp;lt;----------- IP or HOST. They MUST be valid. If hostname, it MUST be an A record.&lt;br /&gt;
	send_password = &amp;quot;Password_To_Server&amp;quot;;     &amp;lt;------- Password you sent TO irc2. In irc2 this is &amp;quot;accept_password&amp;quot;.&lt;br /&gt;
	accept_password = &amp;quot;Password_From_Server&amp;quot;; &amp;lt;------- Password you expect to receive FROM irc2. In irc2 this is &amp;quot;send_password&amp;quot;&lt;br /&gt;
	flags = compressed, topicburst, autoconn; &amp;lt;------- Autoconn means that irc1 will try automatically to connect to irc2.&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
cluster {&lt;br /&gt;
	name = &amp;quot;*.alpinelab.lan&amp;quot;;             &amp;lt;----------- Masq to indicate what servers can share the information. Those information are written in the following &amp;quot;flags&amp;quot; entry.&lt;br /&gt;
	flags = kline, tkline, unkline, xline, txline, unxline, resv, tresv, unresv; &amp;lt;--- Check IRC documentation to understand the meaning of those flags. &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
shared {&lt;br /&gt;
	oper = &amp;quot;*@*&amp;quot;, &amp;quot;*&amp;quot;;  &amp;lt;----------- The user@host and the server must be on in order to set klines.               &lt;br /&gt;
	flags = all,rehash; &amp;lt;----------- flags: list of what to allow them to place. All oper will receive this.&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the other server, irc2, configuration is pretty similar.&lt;br /&gt;
&lt;br /&gt;
Those are the only difference of /etc/charybdis/ircd.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
serverinfo {&lt;br /&gt;
	sid = &amp;quot;02A&amp;quot;; &lt;br /&gt;
	hub = yes;   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;  &lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;; &lt;br /&gt;
	flags = ~encrypted;            &lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc1.alpinelab.lan&amp;quot; {                &lt;br /&gt;
	host=&amp;quot;10.0.1.10&amp;quot;;                     &lt;br /&gt;
	send_password = &amp;quot;Password_From_Server&amp;quot;; &lt;br /&gt;
	accept_password = &amp;quot;Password_To_Server&amp;quot;; &lt;br /&gt;
	flags = compressed, topicburst;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In flags directive, connect{} block, we do not set &amp;quot;autoconn&amp;quot;. &lt;br /&gt;
This means that irc1 will automatically connect to irc2, but not the contrary.&lt;br /&gt;
&lt;br /&gt;
Charybdis has a lot of other cool features, like ssl connection, spam blacklisting and so on. &lt;br /&gt;
Look at documentation here: [http://www.stack.nl/~jilles/irc/charybdis-oper-guide/]&lt;br /&gt;
&lt;br /&gt;
After having modifyied the ircd.conf in both server, fix the permissions:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|chown ircd /etc/charybdis/ircd.conf}}&lt;br /&gt;
{{Cmd|chmod 400 /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
== Configure Atheme-iris ==&lt;br /&gt;
&lt;br /&gt;
Atheme-iris is a nice webchat written in AJAX and Python. It&#039;s a fork of the famous qwebirc.&lt;br /&gt;
&lt;br /&gt;
Configuration in pretty simple.&lt;br /&gt;
&lt;br /&gt;
By default, atheme-iris will listen on all interfaces. If you want modify this behaviour, change /etc/conf.d/atheme-iris and set the IP address where atheme will bind.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[execution]&lt;br /&gt;
args: -n -p 3989&lt;br /&gt;
syslog_addr:&lt;br /&gt;
syslog_port: 514&lt;br /&gt;
&lt;br /&gt;
[irc]&lt;br /&gt;
server: localhost&lt;br /&gt;
port: 6667&lt;br /&gt;
ssl: false&lt;br /&gt;
bind_ip: 127.0.0.1&lt;br /&gt;
realname: http://irc1.alpinelab.lan&lt;br /&gt;
ident: nick&lt;br /&gt;
ident_string: webchat&lt;br /&gt;
webirc_mode: webirc&lt;br /&gt;
webirc_password: fish&lt;br /&gt;
&lt;br /&gt;
[athemeengine]&lt;br /&gt;
xmlrpc_path:&lt;br /&gt;
chan_list_enabled: true&lt;br /&gt;
chan_list_max_age: 120&lt;br /&gt;
chan_list_count: 3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[feedbackengine]&lt;br /&gt;
from: moo@moo.com&lt;br /&gt;
to: moo@moo.com&lt;br /&gt;
smtp_host: 127.0.0.1&lt;br /&gt;
smtp_port: 25&lt;br /&gt;
&lt;br /&gt;
[frontend]&lt;br /&gt;
base_url: http://irc1.alpinelab.lan:9090&lt;br /&gt;
network_name: AlpineLinux&lt;br /&gt;
app_title: %(network_name)s Web IRC&lt;br /&gt;
extra_html:&lt;br /&gt;
initial_nick:&lt;br /&gt;
prompt: true&lt;br /&gt;
chan_prompt: true&lt;br /&gt;
chan_autoconnect: true&lt;br /&gt;
static_base_url: /&lt;br /&gt;
dynamic_base_url: /&lt;br /&gt;
&lt;br /&gt;
[atheme]&lt;br /&gt;
nickserv_login: true&lt;br /&gt;
chan_list_on_start: true&lt;br /&gt;
chan_list_cloud_view: false&lt;br /&gt;
&lt;br /&gt;
[ui]&lt;br /&gt;
dedicated_msg_window: false&lt;br /&gt;
dedicated_notice_window: false&lt;br /&gt;
hide_joinparts: false&lt;br /&gt;
simple_color: false&lt;br /&gt;
fg_color: DDDDDD&lt;br /&gt;
fg_sec_color: 999999&lt;br /&gt;
bg_color: 111111&lt;br /&gt;
lastpos_line: true&lt;br /&gt;
nick_click_query: false&lt;br /&gt;
nick_colors: false&lt;br /&gt;
nick_status: false&lt;br /&gt;
flash_on_mention: false&lt;br /&gt;
beep_on_mention: false&lt;br /&gt;
&lt;br /&gt;
[adminengine]&lt;br /&gt;
hosts: 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
[proxy]&lt;br /&gt;
forwarded_for_header:&lt;br /&gt;
forwarded_for_ips: 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
[tuneback]&lt;br /&gt;
update_freq: 0.5&lt;br /&gt;
maxbuflen: 100000&lt;br /&gt;
maxsubscriptions: 1&lt;br /&gt;
maxlinelen: 600&lt;br /&gt;
dns_timeout: 5&lt;br /&gt;
http_ajax_request_timeout: 30&lt;br /&gt;
http_request_timeout: 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the [execution] block, parameters are overridden by /etc/conf.d/atheme-iris settings.&lt;br /&gt;
&lt;br /&gt;
Replicate the same configuration in irc2.alpinelab.lan. &lt;br /&gt;
&lt;br /&gt;
But in irc2 server, change the entry irc1.alpinelab.lan with irc2.alpinelab.lan.&lt;br /&gt;
&lt;br /&gt;
Atheme-iris will connect to charybdis on 127.0.0.1 ip, according with this directive:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;server: localhost&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That&#039;s all.&lt;br /&gt;
&lt;br /&gt;
Now, you can go with one browser to http://irc1.alpinelab.lan:9090 and another in http://irc2.alpinelab.lan:9090.&lt;br /&gt;
&lt;br /&gt;
Login with two different users in the same channel.&lt;br /&gt;
&lt;br /&gt;
You should view both users on both webclients.&lt;br /&gt;
&lt;br /&gt;
Happy chatting.&lt;br /&gt;
&lt;br /&gt;
== Useful links ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IRC Commands&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/List_of_Internet_Relay_Chat_commands&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*-Line flags&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/K-line_%28IRC%29#K-line&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=How_To_Setup_Your_Own_IRC_Network&amp;diff=9062</id>
		<title>How To Setup Your Own IRC Network</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=How_To_Setup_Your_Own_IRC_Network&amp;diff=9062"/>
		<updated>2013-03-06T14:53:07Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: Created page with &amp;quot;This doc aims to assist you on setup your own irc network with Alpine Linux. We will configure two irc daemons and a simple ajax webirc client. The irc daemons will work toget...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This doc aims to assist you on setup your own irc network with Alpine Linux.&lt;br /&gt;
We will configure two irc daemons and a simple ajax webirc client.&lt;br /&gt;
The irc daemons will work together sharing the channel, users and other informations.&lt;br /&gt;
From charybdis point of view, this configuration is called &amp;quot;cluster&amp;quot;, but this word should not be understood with the common meaning of &amp;quot;cluster&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
We assume that, as example, we want create Alpine Linux IRC Network.&lt;br /&gt;
We have irc1 and irc2 servers.&lt;br /&gt;
&lt;br /&gt;
== Prerequisites ==&lt;br /&gt;
&lt;br /&gt;
Prerequisites are two PC with Alpine Linux installed (v2.5).&lt;br /&gt;
&lt;br /&gt;
Packages that we are going to install are:&lt;br /&gt;
&lt;br /&gt;
- Charybdis &lt;br /&gt;
- atheme-iris&lt;br /&gt;
&lt;br /&gt;
Both of those packages are in edge testing.&lt;br /&gt;
&lt;br /&gt;
You can easily use this pinning edge repo:&lt;br /&gt;
{{Cmd|vi /etc/apk/repositories}}&lt;br /&gt;
&lt;br /&gt;
Add the line&lt;br /&gt;
{{Cmd|@edge http://dl-2.alpinelinux.org/alpine/edge/testing}}&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
{{Cmd|apk update}}&lt;br /&gt;
{{Cmd|apk add charybdis}}&lt;br /&gt;
{{Cmd|apk add atheme-iris}}&lt;br /&gt;
&lt;br /&gt;
== Configure Charybdis ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cp /etc/charybdis/example.conf /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|vi /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
Modify the file starting from /etc/charybdis/reference.conf (that is well documented).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
loadmodule &amp;quot;extensions/chm_operonly.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_account.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_canjoin.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_channel.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_extgecos.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_oper.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/extb_realname.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_identify.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_mkpasswd.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/m_webirc.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_farconnect.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_globalkline.so&amp;quot;;&lt;br /&gt;
loadmodule &amp;quot;extensions/sno_globaloper.so&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
serverinfo {&lt;br /&gt;
	name = &amp;quot;irc1.alpinelab.lan&amp;quot;;&lt;br /&gt;
	sid = &amp;quot;01A&amp;quot;;&lt;br /&gt;
        description = &amp;quot;Alpine Linux IRC Server&amp;quot;;&lt;br /&gt;
	network_name = &amp;quot;Alpine Linux Network&amp;quot;;&lt;br /&gt;
	network_desc = &amp;quot;Alpine Linux IRC network.&amp;quot;;&lt;br /&gt;
	hub = yes;&lt;br /&gt;
	default_max_clients = 10000;&lt;br /&gt;
	nicklen = 30;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
admin {&lt;br /&gt;
	name = &amp;quot;admin&amp;quot;;&lt;br /&gt;
	description = &amp;quot;Alpine Linux IRC network administrator&amp;quot;;&lt;br /&gt;
	email = &amp;quot;ircadmin@alpinelab.lan&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
log {&lt;br /&gt;
	fname_userlog = &amp;quot;logs/userlog&amp;quot;;&lt;br /&gt;
	#fname_fuserlog = &amp;quot;logs/fuserlog&amp;quot;;&lt;br /&gt;
	fname_operlog = &amp;quot;logs/operlog&amp;quot;;&lt;br /&gt;
	#fname_foperlog = &amp;quot;logs/foperlog&amp;quot;;&lt;br /&gt;
	fname_serverlog = &amp;quot;logs/serverlog&amp;quot;;&lt;br /&gt;
	#fname_klinelog = &amp;quot;logs/klinelog&amp;quot;;&lt;br /&gt;
	fname_killlog = &amp;quot;logs/killlog&amp;quot;;&lt;br /&gt;
	fname_operspylog = &amp;quot;logs/operspylog&amp;quot;;&lt;br /&gt;
	#fname_ioerrorlog = &amp;quot;logs/ioerror&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;users&amp;quot; {&lt;br /&gt;
	ping_time = 2 minutes;&lt;br /&gt;
	number_per_ident = 10;&lt;br /&gt;
	number_per_ip = 10;&lt;br /&gt;
	number_per_ip_global = 50;&lt;br /&gt;
	cidr_ipv4_bitlen = 24;&lt;br /&gt;
	cidr_ipv6_bitlen = 64;&lt;br /&gt;
	number_per_cidr = 200;&lt;br /&gt;
	max_number = 100;&lt;br /&gt;
	sendq = 400 kbytes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;opers&amp;quot; {&lt;br /&gt;
	ping_time = 5 minutes;&lt;br /&gt;
	number_per_ip = 10;&lt;br /&gt;
	max_number = 1000;&lt;br /&gt;
	sendq = 1 megabyte;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
class &amp;quot;server&amp;quot; {&lt;br /&gt;
	ping_time = 5 minutes;&lt;br /&gt;
	connectfreq = 5 minutes;&lt;br /&gt;
	max_number = 10;&lt;br /&gt;
	sendq = 4 megabytes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
listen {&lt;br /&gt;
	defer_accept = yes;&lt;br /&gt;
	port = 5000, 6665 .. 6669;&lt;br /&gt;
	sslport = 6697;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
auth {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;&lt;br /&gt;
	class = &amp;quot;users&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;local_op&amp;quot; {&lt;br /&gt;
	privs = oper:local_kill, oper:operwall;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;server_bot&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;local_op&amp;quot;;&lt;br /&gt;
	privs = oper:kline, oper:remoteban, snomask:nick_changes;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;global_op&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;local_op&amp;quot;;&lt;br /&gt;
	privs = oper:global_kill, oper:routing, oper:kline, oper:unkline, oper:xline,&lt;br /&gt;
		oper:resv, oper:mass_notice, oper:remoteban;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
privset &amp;quot;admin&amp;quot; {&lt;br /&gt;
	extends = &amp;quot;global_op&amp;quot;;&lt;br /&gt;
	privs = oper:admin, oper:die, oper:rehash, oper:spy;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;&lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;;&lt;br /&gt;
	snomask = &amp;quot;+Zbfkrsuy&amp;quot;;&lt;br /&gt;
	flags = ~encrypted;&lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc2.alpinelab.lan&amp;quot; {&lt;br /&gt;
	host=&amp;quot;10.0.2.10&amp;quot;;&lt;br /&gt;
        send_password = &amp;quot;Password_To_Server&amp;quot;;&lt;br /&gt;
	accept_password = &amp;quot;Password_From_Server&amp;quot;; &lt;br /&gt;
	port = 6666;&lt;br /&gt;
	hub_mask = &amp;quot;*&amp;quot;;&lt;br /&gt;
	class = &amp;quot;server&amp;quot;;&lt;br /&gt;
	flags = compressed, topicburst, autoconn;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
service {&lt;br /&gt;
	name = &amp;quot;services.int&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
cluster {&lt;br /&gt;
	name = &amp;quot;*.alpinelab.lan&amp;quot;;&lt;br /&gt;
	flags = kline, tkline, unkline, xline, txline, unxline, resv, tresv, unresv;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
shared {&lt;br /&gt;
	oper = &amp;quot;*@*&amp;quot;, &amp;quot;*&amp;quot;;&lt;br /&gt;
	flags = all, rehash;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
/* exempt {}: IPs that are exempt from Dlines and rejectcache. (OLD d:) */&lt;br /&gt;
exempt {&lt;br /&gt;
	ip = &amp;quot;127.0.0.1&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
channel {&lt;br /&gt;
	use_invex = yes;&lt;br /&gt;
	use_except = yes;&lt;br /&gt;
	use_forward = yes;&lt;br /&gt;
	use_knock = yes;&lt;br /&gt;
	knock_delay = 5 minutes;&lt;br /&gt;
	knock_delay_channel = 1 minute;&lt;br /&gt;
	max_chans_per_user = 15;&lt;br /&gt;
	max_bans = 100;&lt;br /&gt;
	max_bans_large = 500;&lt;br /&gt;
	default_split_user_count = 0;&lt;br /&gt;
	default_split_server_count = 0;&lt;br /&gt;
	no_create_on_split = no;&lt;br /&gt;
	no_join_on_split = no;&lt;br /&gt;
	burst_topicwho = yes;&lt;br /&gt;
	kick_on_split_riding = no;&lt;br /&gt;
	only_ascii_channels = no;&lt;br /&gt;
	resv_forcepart = yes;&lt;br /&gt;
	channel_target_change = yes;&lt;br /&gt;
	disable_local_channels = no;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
serverhide {&lt;br /&gt;
	flatten_links = yes;&lt;br /&gt;
	links_delay = 5 minutes;&lt;br /&gt;
	hidden = no;&lt;br /&gt;
	disable_hidden = no;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
blacklist {&lt;br /&gt;
	host = &amp;quot;rbl.efnetrbl.org&amp;quot;;&lt;br /&gt;
	type = ipv4;&lt;br /&gt;
	reject_reason = &amp;quot;${nick}, your IP (${ip}) is listed in EFnet&#039;s RBL. For assistance, see http://efnetrbl.org/?i=${ip}&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
	/* Example of a blacklist that supports both IPv4 and IPv6 */&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;NickServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;NickServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;ChanServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;ChanServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;OperServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;OperServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;MemoServ&amp;quot; {&lt;br /&gt;
	target = &amp;quot;MemoServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;NS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;NickServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;CS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;ChanServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;OS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;OperServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
alias &amp;quot;MS&amp;quot; {&lt;br /&gt;
	target = &amp;quot;MemoServ&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
general {&lt;br /&gt;
	hide_error_messages = opers;&lt;br /&gt;
	hide_spoof_ips = yes;&lt;br /&gt;
	default_umodes = &amp;quot;+i&amp;quot;;&lt;br /&gt;
	default_operstring = &amp;quot;is an IRC Operator&amp;quot;;&lt;br /&gt;
	default_adminstring = &amp;quot;is a Server Administrator&amp;quot;;&lt;br /&gt;
	servicestring = &amp;quot;is a Network Service&amp;quot;;&lt;br /&gt;
	disable_fake_channels = no;&lt;br /&gt;
	tkline_expire_notices = no;&lt;br /&gt;
	default_floodcount = 10;&lt;br /&gt;
	failed_oper_notice = yes;&lt;br /&gt;
	dots_in_ident=2;&lt;br /&gt;
	min_nonwildcard = 4;&lt;br /&gt;
	min_nonwildcard_simple = 3;&lt;br /&gt;
	max_accept = 100;&lt;br /&gt;
	max_monitor = 100;&lt;br /&gt;
	anti_nick_flood = yes;&lt;br /&gt;
	max_nick_time = 20 seconds;&lt;br /&gt;
	max_nick_changes = 5;&lt;br /&gt;
	anti_spam_exit_message_time = 5 minutes;&lt;br /&gt;
	ts_warn_delta = 30 seconds;&lt;br /&gt;
	ts_max_delta = 5 minutes;&lt;br /&gt;
	client_exit = yes;&lt;br /&gt;
	collision_fnc = yes;&lt;br /&gt;
	resv_fnc = yes;&lt;br /&gt;
	global_snotices = yes;&lt;br /&gt;
	dline_with_reason = yes;&lt;br /&gt;
	kline_delay = 0 seconds;&lt;br /&gt;
	kline_with_reason = yes;&lt;br /&gt;
	kline_reason = &amp;quot;K-Lined&amp;quot;;&lt;br /&gt;
	identify_service = &amp;quot;NickServ@services.int&amp;quot;;&lt;br /&gt;
	identify_command = &amp;quot;IDENTIFY&amp;quot;;&lt;br /&gt;
	non_redundant_klines = yes;&lt;br /&gt;
	warn_no_nline = yes;&lt;br /&gt;
	use_propagated_bans = yes;&lt;br /&gt;
	stats_e_disabled = no;&lt;br /&gt;
	stats_c_oper_only=no;&lt;br /&gt;
	stats_h_oper_only=no;&lt;br /&gt;
	stats_y_oper_only=no;&lt;br /&gt;
	stats_o_oper_only=yes;&lt;br /&gt;
	stats_P_oper_only=no;&lt;br /&gt;
	stats_i_oper_only=masked;&lt;br /&gt;
	stats_k_oper_only=masked;&lt;br /&gt;
	map_oper_only = no;&lt;br /&gt;
	operspy_admin_only = no;&lt;br /&gt;
	operspy_dont_care_user_info = no;&lt;br /&gt;
	caller_id_wait = 1 minute;&lt;br /&gt;
	pace_wait_simple = 1 second;&lt;br /&gt;
	pace_wait = 10 seconds;&lt;br /&gt;
	short_motd = no;&lt;br /&gt;
	ping_cookie = no;&lt;br /&gt;
	connect_timeout = 30 seconds;&lt;br /&gt;
	default_ident_timeout = 5;&lt;br /&gt;
	disable_auth = no;&lt;br /&gt;
	no_oper_flood = yes;&lt;br /&gt;
	max_targets = 4;&lt;br /&gt;
	client_flood_max_lines = 20;&lt;br /&gt;
	use_whois_actually = no;&lt;br /&gt;
	oper_only_umodes = operwall, locops, servnotice;&lt;br /&gt;
	oper_umodes = locops, servnotice, operwall, wallop;&lt;br /&gt;
	oper_snomask = &amp;quot;+s&amp;quot;;&lt;br /&gt;
	burst_away = yes;&lt;br /&gt;
	nick_delay = 0 seconds; # 15 minutes if you want to enable this&lt;br /&gt;
	reject_ban_time = 1 minute;&lt;br /&gt;
	reject_after_count = 3;&lt;br /&gt;
	reject_duration = 5 minutes;&lt;br /&gt;
	throttle_duration = 60;&lt;br /&gt;
	throttle_count = 4;&lt;br /&gt;
	max_ratelimit_tokens = 30;&lt;br /&gt;
	away_interval = 30;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
modules {&lt;br /&gt;
	path = &amp;quot;/usr/lib/charybdis/modules&amp;quot;;&lt;br /&gt;
	path = &amp;quot;/usr/lib/charybdis/modules/autoload&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Relevant part of the config file are:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
serverinfo {&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
	sid = &amp;quot;01A&amp;quot;; &amp;lt;-----------   This must be unique. You can choose two cipher and one letter.&lt;br /&gt;
	hub = yes;   &amp;lt;-----------   This works as an hub. Allows other irc server to connects.&lt;br /&gt;
        .&lt;br /&gt;
        .&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
listen {&lt;br /&gt;
	port = 5000, 6665 .. 6669; &amp;lt;---- Port where charybdis is listening. You can also bind to a specific ip adding &amp;quot;host&amp;quot; directive. If not specifyied charybdis listen on all interfaces.&lt;br /&gt;
	sslport = 6697;            &amp;lt;---- Port for SSL connection. You need a certificate in order to use this feature.&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;  &amp;lt;----------- This is a masq used to match who can become operator. This support CIDR. If you want to allows only 10.0.0.0/24, you can choose &amp;quot;*@10.0.0.*&amp;quot;.&lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;; &amp;lt;---- Password used to become IRC Operator. &lt;br /&gt;
	flags = ~encrypted;            &amp;lt;---- Tilde &amp;quot;~&amp;quot; means not. So the password used in this block is not encrypted. Without &amp;quot;~&amp;quot;, you need to write the password in this block encrypted.&lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc2.alpinelab.lan&amp;quot; {                &amp;lt;----------- Descriptive name of the server you want to connect to.&lt;br /&gt;
	host=&amp;quot;10.0.2.10&amp;quot;;                     &amp;lt;----------- IP or HOST. They MUST be valid. If hostname, it MUST be an A record.&lt;br /&gt;
	send_password = &amp;quot;Password_To_Server&amp;quot;;     &amp;lt;------- Password you sent TO irc2. In irc2 this is &amp;quot;accept_password&amp;quot;.&lt;br /&gt;
	accept_password = &amp;quot;Password_From_Server&amp;quot;; &amp;lt;------- Password you expect to receive FROM irc2. In irc2 this is &amp;quot;send_password&amp;quot;&lt;br /&gt;
	flags = compressed, topicburst, autoconn; &amp;lt;------- Autoconn means that irc1 will try automatically to connect to irc2.&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
cluster {&lt;br /&gt;
	name = &amp;quot;*.alpinelab.lan&amp;quot;;             &amp;lt;----------- Masq to indicate what servers can share the information. Those information are written in the following &amp;quot;flags&amp;quot; entry.&lt;br /&gt;
	flags = kline, tkline, unkline, xline, txline, unxline, resv, tresv, unresv; &amp;lt;--- Check IRC documentation to understand the meaning of those flags. &lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
shared {&lt;br /&gt;
	oper = &amp;quot;*@*&amp;quot;, &amp;quot;*&amp;quot;;  &amp;lt;----------- The user@host and the server must be on in order to set klines.               &lt;br /&gt;
	flags = all,rehash; &amp;lt;----------- flags: list of what to allow them to place. All oper will receive this.&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the other server, irc2, configuration is pretty similar.&lt;br /&gt;
&lt;br /&gt;
Those are the only difference of /etc/charybdis/ircd.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
serverinfo {&lt;br /&gt;
	sid = &amp;quot;02A&amp;quot;; &lt;br /&gt;
	hub = yes;   &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
operator &amp;quot;ircadmin&amp;quot; {&lt;br /&gt;
	user = &amp;quot;*@*&amp;quot;;  &lt;br /&gt;
	password = &amp;quot;MyStrongPassword&amp;quot;; &lt;br /&gt;
	flags = ~encrypted;            &lt;br /&gt;
	privset = &amp;quot;admin&amp;quot;;&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
connect &amp;quot;irc1.alpinelab.lan&amp;quot; {                &lt;br /&gt;
	host=&amp;quot;10.0.1.10&amp;quot;;                     &lt;br /&gt;
	send_password = &amp;quot;Password_From_Server&amp;quot;; &lt;br /&gt;
	accept_password = &amp;quot;Password_To_Server&amp;quot;; &lt;br /&gt;
	flags = compressed, topicburst;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In flags directive, connect{} block, we do not set &amp;quot;autoconn&amp;quot;. &lt;br /&gt;
This means that irc1 will automatically connect to irc2, but not the contrary.&lt;br /&gt;
&lt;br /&gt;
Charybdis has a lot of other cool features, like ssl connection, spam blacklisting and so on. &lt;br /&gt;
Look at documentation here: [http://www.stack.nl/~jilles/irc/charybdis-oper-guide/]&lt;br /&gt;
&lt;br /&gt;
After having modifyied the ircd.conf in both server, fix the permissions:&lt;br /&gt;
&lt;br /&gt;
{{Cmd|chown ircd /etc/charybdis/ircd.conf}}&lt;br /&gt;
{{Cmd|chmod 400 /etc/charybdis/ircd.conf}}&lt;br /&gt;
&lt;br /&gt;
== Configure Atheme-iris ==&lt;br /&gt;
&lt;br /&gt;
Atheme-iris is a nice webchat written in AJAX and Python. It&#039;s a fork of the famous qwebirc.&lt;br /&gt;
&lt;br /&gt;
Configuration in pretty simple.&lt;br /&gt;
&lt;br /&gt;
By default, atheme-iris will listen on all interfaces. If you want modify this behaviour, change /etc/conf.d/atheme-iris and set the IP address where atheme will bind.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[execution]&lt;br /&gt;
args: -n -p 3989&lt;br /&gt;
syslog_addr:&lt;br /&gt;
syslog_port: 514&lt;br /&gt;
&lt;br /&gt;
[irc]&lt;br /&gt;
server: localhost&lt;br /&gt;
port: 6667&lt;br /&gt;
ssl: false&lt;br /&gt;
bind_ip: 127.0.0.1&lt;br /&gt;
realname: http://irc1.alpinelab.lan&lt;br /&gt;
ident: nick&lt;br /&gt;
ident_string: webchat&lt;br /&gt;
webirc_mode: webirc&lt;br /&gt;
webirc_password: fish&lt;br /&gt;
&lt;br /&gt;
[athemeengine]&lt;br /&gt;
xmlrpc_path:&lt;br /&gt;
chan_list_enabled: true&lt;br /&gt;
chan_list_max_age: 120&lt;br /&gt;
chan_list_count: 3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[feedbackengine]&lt;br /&gt;
from: moo@moo.com&lt;br /&gt;
to: moo@moo.com&lt;br /&gt;
smtp_host: 127.0.0.1&lt;br /&gt;
smtp_port: 25&lt;br /&gt;
&lt;br /&gt;
[frontend]&lt;br /&gt;
base_url: http://irc1.alpinelab.lan:9090&lt;br /&gt;
network_name: AlpineLinux&lt;br /&gt;
app_title: %(network_name)s Web IRC&lt;br /&gt;
extra_html:&lt;br /&gt;
initial_nick:&lt;br /&gt;
prompt: true&lt;br /&gt;
chan_prompt: true&lt;br /&gt;
chan_autoconnect: true&lt;br /&gt;
static_base_url: /&lt;br /&gt;
dynamic_base_url: /&lt;br /&gt;
&lt;br /&gt;
[atheme]&lt;br /&gt;
nickserv_login: true&lt;br /&gt;
chan_list_on_start: true&lt;br /&gt;
chan_list_cloud_view: false&lt;br /&gt;
&lt;br /&gt;
[ui]&lt;br /&gt;
dedicated_msg_window: false&lt;br /&gt;
dedicated_notice_window: false&lt;br /&gt;
hide_joinparts: false&lt;br /&gt;
simple_color: false&lt;br /&gt;
fg_color: DDDDDD&lt;br /&gt;
fg_sec_color: 999999&lt;br /&gt;
bg_color: 111111&lt;br /&gt;
lastpos_line: true&lt;br /&gt;
nick_click_query: false&lt;br /&gt;
nick_colors: false&lt;br /&gt;
nick_status: false&lt;br /&gt;
flash_on_mention: false&lt;br /&gt;
beep_on_mention: false&lt;br /&gt;
&lt;br /&gt;
[adminengine]&lt;br /&gt;
hosts: 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
[proxy]&lt;br /&gt;
forwarded_for_header:&lt;br /&gt;
forwarded_for_ips: 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
[tuneback]&lt;br /&gt;
update_freq: 0.5&lt;br /&gt;
maxbuflen: 100000&lt;br /&gt;
maxsubscriptions: 1&lt;br /&gt;
maxlinelen: 600&lt;br /&gt;
dns_timeout: 5&lt;br /&gt;
http_ajax_request_timeout: 30&lt;br /&gt;
http_request_timeout: 5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In the [execution] block, parameters are overridden by /etc/conf.d/atheme-iris settings.&lt;br /&gt;
&lt;br /&gt;
Replicate the same configuration in irc2.alpinelab.lan. &lt;br /&gt;
&lt;br /&gt;
But in irc2 server, change the entry irc1.alpinelab.lan with irc2.alpinelab.lan.&lt;br /&gt;
&lt;br /&gt;
Atheme-iris will connect to charybdis on 127.0.0.1 ip, according with this directive:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;server: localhost&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That&#039;s all.&lt;br /&gt;
&lt;br /&gt;
Now, you can go with one browser to http://irc1.alpinelab.lan:9090 and another in http://irc2.alpinelab.lan:9090.&lt;br /&gt;
&lt;br /&gt;
Login with two different users in the same channel.&lt;br /&gt;
&lt;br /&gt;
You should view both users on both webclients.&lt;br /&gt;
&lt;br /&gt;
Happy chatting.&lt;br /&gt;
&lt;br /&gt;
== Useful links: ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IRC Commands&#039;&#039;&#039;&lt;br /&gt;
[http://en.wikipedia.org/wiki/List_of_Internet_Relay_Chat_commands]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;*-Line flags&#039;&#039;&#039;&lt;br /&gt;
[http://en.wikipedia.org/wiki/K-line_%28IRC%29#K-line]&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=OpenVCP&amp;diff=8627</id>
		<title>OpenVCP</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=OpenVCP&amp;diff=8627"/>
		<updated>2012-10-26T18:18:58Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: /* Installing openvcp web access */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OpenVCP is a Open-Source VServer Control Panel published under the GNU General Public Licence (GPL). OpenVCP is developed for use with Linux in combination with Linux-Vserver (  http://www.linux-vserver.org ). It provides a web-based interface to manage a whole farm of VServer hosts, build guests, control the guests, account traffic and much more.&lt;br /&gt;
&lt;br /&gt;
== Install openvcp daemon ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add util-vserver util-vserver-dev php-tls sqlite sqlite-dev libxml2 libxml2-dev libpcap libpcap-dev rsync libtool alpine-sdk}}&lt;br /&gt;
&lt;br /&gt;
Download &lt;br /&gt;
&lt;br /&gt;
{{Cmd|cd /tmp/&lt;br /&gt;
wget http://files.openvcp.org/openvcpd-0.5rc3.tar.gz}}&lt;br /&gt;
&lt;br /&gt;
Unpack and delete tar file&lt;br /&gt;
&lt;br /&gt;
{{Cmd|tar zxvf openvcpd-0.5rc3.tar.gz}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cd openvcpd-0.5rc3/}}&lt;br /&gt;
&lt;br /&gt;
Configure Compile &amp;amp; install the daemon&lt;br /&gt;
&lt;br /&gt;
{{Cmd|&amp;lt;nowiki&amp;gt;./configure --prefix=/usr --sysconfdir=/etc&lt;br /&gt;
make&lt;br /&gt;
make install&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Create directories &lt;br /&gt;
&lt;br /&gt;
{{Cmd|mkdir -p /vservers/backups&lt;br /&gt;
mkdir -p /vservers/userbackups&lt;br /&gt;
mkdir -p /vservers/images}}&lt;br /&gt;
&lt;br /&gt;
Edit the config file&lt;br /&gt;
&lt;br /&gt;
Change &amp;quot;IP&amp;quot; to your own ip and &amp;quot;Ifaces&amp;quot; to the interface you want to measure traffic on&lt;br /&gt;
&lt;br /&gt;
{{Cmd|nano /etc/openvcpd.conf}}&lt;br /&gt;
&lt;br /&gt;
Copy some images to your image directory usually &amp;quot;/vservers/images&amp;quot; (e.g.:  http://www.openvcp.org/wiki/Downloads. ( These Images are just folders that contain a Linux system ) &lt;br /&gt;
&lt;br /&gt;
Start the daemon &lt;br /&gt;
&lt;br /&gt;
{{Cmd|openvcpd}}&lt;br /&gt;
&lt;br /&gt;
== Install openvcp web access with Lighttpd ==&lt;br /&gt;
&lt;br /&gt;
{{:Setting Up Lighttpd With FastCGI}}&lt;br /&gt;
&lt;br /&gt;
Install extra packages&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add mysql mysql-client php-mysql php-mysqli php-gettext php-sockets}}&lt;br /&gt;
&lt;br /&gt;
== Configuring MySql ==&lt;br /&gt;
&lt;br /&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;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Create the openvcp database&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Note: you can import the database from command line or from the openvcp web page later.&lt;br /&gt;
&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
&lt;br /&gt;
 CREATE DATABASE openvcp;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON openvcp.* TO &amp;quot;root&amp;quot;;&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
 EXIT&lt;br /&gt;
&lt;br /&gt;
== Installing openvcp web access ==&lt;br /&gt;
&lt;br /&gt;
Make webapps folder&lt;br /&gt;
&lt;br /&gt;
 mkdir /usr/share/webapps/ -p&lt;br /&gt;
&lt;br /&gt;
Download &lt;br /&gt;
&lt;br /&gt;
 cd /usr/share/webapps/&lt;br /&gt;
 wget http://files.openvcp.org/openvcp-web-0.5rc3.tar.gz&lt;br /&gt;
&lt;br /&gt;
Unpack and delete tar file&lt;br /&gt;
&lt;br /&gt;
 tar zxvf openvcp-web-0.5rc3.tar.gz&lt;br /&gt;
 rm openvcp-web-0.5rc3.tar.gz&lt;br /&gt;
&lt;br /&gt;
Change Folder Persmissions&lt;br /&gt;
&lt;br /&gt;
 chmod -R 777 /usr/share/webapps/openvcp/core/cache&lt;br /&gt;
&lt;br /&gt;
Make symlinks to openvcp&lt;br /&gt;
&lt;br /&gt;
 ln -s /usr/share/webapps/openvcp/ /var/www/localhost/htdocs/openvcp&lt;br /&gt;
&lt;br /&gt;
== Configuring openvcp web access ==&lt;br /&gt;
&lt;br /&gt;
Browse to: http://WEBSERVER_IP_ADDRESS/openvcp/ and Install openvcp completing the information as appropriate from the web browser.&lt;br /&gt;
&lt;br /&gt;
Openvcp Installation steps:&lt;br /&gt;
&lt;br /&gt;
Welcome to the setup of OpenVCP &lt;br /&gt;
&lt;br /&gt;
MySQL&lt;br /&gt;
&lt;br /&gt;
* host: 			&#039;&#039;&#039;localhost&#039;&#039;&#039;&lt;br /&gt;
* dn:				&#039;&#039;&#039;openvcp&#039;&#039;&#039;&lt;br /&gt;
* user: 			&#039;&#039;&#039;root&#039;&#039;&#039;&lt;br /&gt;
* Password:			&#039;&#039;&#039;password&#039;&#039;&#039;&lt;br /&gt;
* prefix:			&#039;&#039;&#039;openvcp_&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Other&lt;br /&gt;
&lt;br /&gt;
* location:			&#039;&#039;&#039;/openvcp&#039;&#039;&#039;&lt;br /&gt;
relative to webroot&lt;br /&gt;
* default locale:	&#039;&#039;&#039;en_US&#039;&#039;&#039;&lt;br /&gt;
* admin email:		&#039;&#039;&#039;yourname@email.com&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After set all click on &amp;quot;setup&amp;quot; to finish the installation. &lt;br /&gt;
&lt;br /&gt;
Congratulations, you installed openvcp!&lt;br /&gt;
&lt;br /&gt;
You have openvcp web access system working, to access go to http://WEBSERVER_IP_ADDRESS/openvcp/ user: &#039;&#039;Admin&#039;&#039; password: &#039;&#039;test&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:Virtualization]]&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=OpenVCP&amp;diff=8626</id>
		<title>OpenVCP</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=OpenVCP&amp;diff=8626"/>
		<updated>2012-10-26T18:16:36Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: /* Configuring MySql */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OpenVCP is a Open-Source VServer Control Panel published under the GNU General Public Licence (GPL). OpenVCP is developed for use with Linux in combination with Linux-Vserver (  http://www.linux-vserver.org ). It provides a web-based interface to manage a whole farm of VServer hosts, build guests, control the guests, account traffic and much more.&lt;br /&gt;
&lt;br /&gt;
== Install openvcp daemon ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add util-vserver util-vserver-dev php-tls sqlite sqlite-dev libxml2 libxml2-dev libpcap libpcap-dev rsync libtool alpine-sdk}}&lt;br /&gt;
&lt;br /&gt;
Download &lt;br /&gt;
&lt;br /&gt;
{{Cmd|cd /tmp/&lt;br /&gt;
wget http://files.openvcp.org/openvcpd-0.5rc3.tar.gz}}&lt;br /&gt;
&lt;br /&gt;
Unpack and delete tar file&lt;br /&gt;
&lt;br /&gt;
{{Cmd|tar zxvf openvcpd-0.5rc3.tar.gz}}&lt;br /&gt;
&lt;br /&gt;
{{Cmd|cd openvcpd-0.5rc3/}}&lt;br /&gt;
&lt;br /&gt;
Configure Compile &amp;amp; install the daemon&lt;br /&gt;
&lt;br /&gt;
{{Cmd|&amp;lt;nowiki&amp;gt;./configure --prefix=/usr --sysconfdir=/etc&lt;br /&gt;
make&lt;br /&gt;
make install&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
&lt;br /&gt;
Create directories &lt;br /&gt;
&lt;br /&gt;
{{Cmd|mkdir -p /vservers/backups&lt;br /&gt;
mkdir -p /vservers/userbackups&lt;br /&gt;
mkdir -p /vservers/images}}&lt;br /&gt;
&lt;br /&gt;
Edit the config file&lt;br /&gt;
&lt;br /&gt;
Change &amp;quot;IP&amp;quot; to your own ip and &amp;quot;Ifaces&amp;quot; to the interface you want to measure traffic on&lt;br /&gt;
&lt;br /&gt;
{{Cmd|nano /etc/openvcpd.conf}}&lt;br /&gt;
&lt;br /&gt;
Copy some images to your image directory usually &amp;quot;/vservers/images&amp;quot; (e.g.:  http://www.openvcp.org/wiki/Downloads. ( These Images are just folders that contain a Linux system ) &lt;br /&gt;
&lt;br /&gt;
Start the daemon &lt;br /&gt;
&lt;br /&gt;
{{Cmd|openvcpd}}&lt;br /&gt;
&lt;br /&gt;
== Install openvcp web access with Lighttpd ==&lt;br /&gt;
&lt;br /&gt;
{{:Setting Up Lighttpd With FastCGI}}&lt;br /&gt;
&lt;br /&gt;
Install extra packages&lt;br /&gt;
&lt;br /&gt;
{{Cmd|apk add mysql mysql-client php-mysql php-mysqli php-gettext php-sockets}}&lt;br /&gt;
&lt;br /&gt;
== Configuring MySql ==&lt;br /&gt;
&lt;br /&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;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Create the openvcp database&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Note: you can import the database from command line or from the openvcp web page later.&lt;br /&gt;
&lt;br /&gt;
 mysql -u root -p&lt;br /&gt;
&lt;br /&gt;
 CREATE DATABASE openvcp;&lt;br /&gt;
 GRANT ALL PRIVILEGES ON openvcp.* TO &amp;quot;root&amp;quot;;&lt;br /&gt;
 FLUSH PRIVILEGES;&lt;br /&gt;
 EXIT&lt;br /&gt;
&lt;br /&gt;
== Installing openvcp web access ==&lt;br /&gt;
&lt;br /&gt;
Make webapps folder&lt;br /&gt;
&lt;br /&gt;
{Cmd|mkdir /usr/share/webapps/ -p}}&lt;br /&gt;
&lt;br /&gt;
Download &lt;br /&gt;
&lt;br /&gt;
{Cmd|cd /usr/share/webapps/&lt;br /&gt;
wget http://files.openvcp.org/openvcp-web-0.5rc3.tar.gz}}&lt;br /&gt;
&lt;br /&gt;
Unpack and delete tar file&lt;br /&gt;
&lt;br /&gt;
{Cmd|tar zxvf openvcp-web-0.5rc3.tar.gz&lt;br /&gt;
rm openvcp-web-0.5rc3.tar.gz}}&lt;br /&gt;
&lt;br /&gt;
Change Folder Persmissions&lt;br /&gt;
&lt;br /&gt;
{Cmd|chmod -R 777 /usr/share/webapps/openvcp/core/cache}}&lt;br /&gt;
&lt;br /&gt;
Make symlinks to openvcp&lt;br /&gt;
&lt;br /&gt;
{Cmd|ln -s /usr/share/webapps/openvcp/ /var/www/localhost/htdocs/openvcp}}&lt;br /&gt;
&lt;br /&gt;
== Configuring openvcp web access ==&lt;br /&gt;
&lt;br /&gt;
Browse to: http://WEBSERVER_IP_ADDRESS/openvcp/ and Install openvcp completing the information as appropriate from the web browser.&lt;br /&gt;
&lt;br /&gt;
Openvcp Installation steps:&lt;br /&gt;
&lt;br /&gt;
Welcome to the setup of OpenVCP &lt;br /&gt;
&lt;br /&gt;
MySQL&lt;br /&gt;
&lt;br /&gt;
* host: 			&#039;&#039;&#039;localhost&#039;&#039;&#039;&lt;br /&gt;
* dn:				&#039;&#039;&#039;openvcp&#039;&#039;&#039;&lt;br /&gt;
* user: 			&#039;&#039;&#039;root&#039;&#039;&#039;&lt;br /&gt;
* Password:			&#039;&#039;&#039;password&#039;&#039;&#039;&lt;br /&gt;
* prefix:			&#039;&#039;&#039;openvcp_&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Other&lt;br /&gt;
&lt;br /&gt;
* location:			&#039;&#039;&#039;/openvcp&#039;&#039;&#039;&lt;br /&gt;
relative to webroot&lt;br /&gt;
* default locale:	&#039;&#039;&#039;en_US&#039;&#039;&#039;&lt;br /&gt;
* admin email:		&#039;&#039;&#039;yourname@email.com&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After set all click on &amp;quot;setup&amp;quot; to finish the installation. &lt;br /&gt;
&lt;br /&gt;
Congratulations, you installed openvcp!&lt;br /&gt;
&lt;br /&gt;
You have openvcp web access system working, to access go to http://WEBSERVER_IP_ADDRESS/openvcp/ user: &#039;&#039;Admin&#039;&#039; password: &#039;&#039;test&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[[Category:Server]]&lt;br /&gt;
[[Category:Virtualization]]&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Cvechecker&amp;diff=8186</id>
		<title>Cvechecker</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Cvechecker&amp;diff=8186"/>
		<updated>2012-05-25T07:49:05Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Draft}}&lt;br /&gt;
&lt;br /&gt;
= How to check Alpine Security with CVEChecker = &lt;br /&gt;
&lt;br /&gt;
== How Does it works ==&lt;br /&gt;
&lt;br /&gt;
From the homepage of cvechecker: http://cvechecker.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
     cvechecker is an useful tool which helps to compare packeges installed in your distribution with the Common Vulnerabilities Exposure.&lt;br /&gt;
     Is not a bullet-proof method and you will most likely have many false positives (vulnerability is fixed with a revision-release, but the tool isn’t able to detect the revision itself), &lt;br /&gt;
     yet it is still better than nothing.&lt;br /&gt;
     The idea is to automatize security check. But, clearly, this is not (and must not be) the only way to check security.&lt;br /&gt;
     With the proper reporting in place, you are immediately warned when a new CVE has been released that might match your system.&lt;br /&gt;
     You can then take the appropriate steps (acknowledge report, verify incident, fix package or mark as false positive).&lt;br /&gt;
     Those are the steps:&lt;br /&gt;
    - pull in the latest CVE entries as well as software/version detection rules (Adminsitrative task only)&lt;br /&gt;
    - generate a list of files to scan&lt;br /&gt;
    - gather installed software/version information&lt;br /&gt;
    - output which CVE entries might affect your system&lt;br /&gt;
    - generate a report informing you about the CVE entries&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
cvechecker is available in edge main repo. If you are running a stable version of alpine, you can add the package from edge in this way:&lt;br /&gt;
&lt;br /&gt;
     apk update -X http://rsync.alpinelinux.org/alpine/edge/main &amp;amp;&amp;amp; apk add -X http://rsync.alpinelinux.org/alpine/edge/main cvechecker&lt;br /&gt;
&lt;br /&gt;
== Configuration with sqlite ==&lt;br /&gt;
&lt;br /&gt;
CVEChecker&#039;s installation scripts create an user and a group, both called &amp;quot;cvechecker&amp;quot;, in order to have a user with minimum privileges to run cvechecker.&lt;br /&gt;
In this folder cvechecker will creates the database (according with the cvechecker.conf, we use sqlite3. But also mysql is supported. This could be useful if you want to share only one DB with many routers/servers running Alpine)&lt;br /&gt;
&lt;br /&gt;
Before use cvechecker you should configure cvechecker to use sqlite, then populate the DB with cve entries.&lt;br /&gt;
According with our settings, /etc/cvechecker.conf would looks like:&lt;br /&gt;
&lt;br /&gt;
     # Generic settings&lt;br /&gt;
     # &lt;br /&gt;
     dbtype = &amp;quot;sqlite&amp;quot;; &lt;br /&gt;
     #dbtype=&amp;quot;mysql&amp;quot;;&lt;br /&gt;
     cvecache = &amp;quot;/var/cvechecker/cache&amp;quot;;&lt;br /&gt;
     datadir = &amp;quot;/usr/share/cvechecker&amp;quot;;&lt;br /&gt;
     stringcmd = &amp;quot;/usr/bin/strings -n 3 &#039;@file@&#039;&amp;quot;;&lt;br /&gt;
     version_url = &amp;quot;http://cvechecker.svn.sourceforge.net/viewvc/cvechecker/versions.dat&amp;quot;;&lt;br /&gt;
     #userkey = &amp;quot;servertag&amp;quot;;&lt;br /&gt;
     #&lt;br /&gt;
     # For Sqlite3&lt;br /&gt;
     #&lt;br /&gt;
     sqlite3: {&lt;br /&gt;
       localdb = &amp;quot;/var/cvechecker/local&amp;quot;;&lt;br /&gt;
       globaldb = &amp;quot;/var/cvechecker/global.db&amp;quot;;&lt;br /&gt;
     };&lt;br /&gt;
     # &lt;br /&gt;
     # For MySQL&lt;br /&gt;
     # &lt;br /&gt;
     mysql: {&lt;br /&gt;
       dbname = &amp;quot;cvechecker&amp;quot;;&lt;br /&gt;
       dbuser = &amp;quot;cvechecker&amp;quot;;&lt;br /&gt;
       dbpass = &amp;quot;cvecheckpass&amp;quot;;&lt;br /&gt;
       dbhost = &amp;quot;$IPADDRESS_OF_MYSQL_SERVER&amp;quot;;&lt;br /&gt;
     };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, you can initialize the DB with:&lt;br /&gt;
&lt;br /&gt;
    cvechecker -i&lt;br /&gt;
&lt;br /&gt;
DB is ready.&lt;br /&gt;
Now, we should configure cvechecker to use mysql then populate the DB with cve entries.&lt;br /&gt;
&lt;br /&gt;
== Configuration with MySQL ==&lt;br /&gt;
&lt;br /&gt;
MySQL is another backend that cvechecker is able to use. Could be useful if you have several cvechecker installed in your network. In that way, you have only one &amp;quot;repository&amp;quot; of CVEs that needs to be updated.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     apk add mysql mysql-client&lt;br /&gt;
  &lt;br /&gt;
     /etc/init.d/mysql setup&lt;br /&gt;
&lt;br /&gt;
     /etc/init.d/mysql start &amp;amp;&amp;amp; rc-update add mysql default&lt;br /&gt;
&lt;br /&gt;
     /usr/bin/mysqladmin -u root password &#039;new-password&#039;&lt;br /&gt;
&lt;br /&gt;
create a db user for cvechecker:&lt;br /&gt;
&lt;br /&gt;
    mysql -u root -p&lt;br /&gt;
    mysql&amp;gt;CREATE DATABASE cvechecker;&lt;br /&gt;
    mysql&amp;gt;CREATE USER &#039;cvechecker&#039;@&#039;%&#039; IDENTIFIED BY &#039;cvecheckpass&#039;;&lt;br /&gt;
    mysql&amp;gt;GRANT ALL ON cvechecker.* TO &#039;cvechecker&#039;@&#039;localhost&#039;;&lt;br /&gt;
    mysql&amp;gt;GRANT ALL ON cvechecker.* TO &#039;cvechecker&#039;@&#039;%&#039;;&lt;br /&gt;
    mysql&amp;gt;FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
I set % because the DB and the users should allow access from other hosts. You can restrict this to allow only your domain.&lt;br /&gt;
&lt;br /&gt;
You have two way to create tables into DB:&lt;br /&gt;
&lt;br /&gt;
=== Via .sql script ===&lt;br /&gt;
&lt;br /&gt;
Login as cvechecker into mysql:&lt;br /&gt;
&lt;br /&gt;
     mysql -D cvechecker -u cvechecker -p &lt;br /&gt;
     mysql&amp;gt;source /usr/share/cvechecker/mysql_cvechecker.sql;&lt;br /&gt;
&lt;br /&gt;
DB is ready.&lt;br /&gt;
Now, we should configure cvechecker to use mysql then populate the DB with cve entries.&lt;br /&gt;
&lt;br /&gt;
=== Via cvechecker ===&lt;br /&gt;
&lt;br /&gt;
After you configured the DB, you can create tables with:&lt;br /&gt;
&lt;br /&gt;
     cvechecker -i&lt;br /&gt;
&lt;br /&gt;
But in order to make it works, you have to configure DB settings in cvechecker.conf.&lt;br /&gt;
According with our settings, /etc/cvechecker.conf would looks like:&lt;br /&gt;
&lt;br /&gt;
     # Generic settings&lt;br /&gt;
     # &lt;br /&gt;
     #dbtype = &amp;quot;sqlite&amp;quot;; &lt;br /&gt;
     dbtype=&amp;quot;mysql&amp;quot;;&lt;br /&gt;
     cvecache = &amp;quot;/var/cvechecker/cache&amp;quot;;&lt;br /&gt;
     datadir = &amp;quot;/usr/share/cvechecker&amp;quot;;&lt;br /&gt;
     stringcmd = &amp;quot;/usr/bin/strings -n 3 &#039;@file@&#039;&amp;quot;;&lt;br /&gt;
     version_url = &amp;quot;http://cvechecker.svn.sourceforge.net/viewvc/cvechecker/versions.dat&amp;quot;;&lt;br /&gt;
     #userkey = &amp;quot;servertag&amp;quot;;&lt;br /&gt;
     #&lt;br /&gt;
     # For Sqlite3&lt;br /&gt;
     #&lt;br /&gt;
     sqlite3: {&lt;br /&gt;
       localdb = &amp;quot;/var/cvechecker/local&amp;quot;;&lt;br /&gt;
       globaldb = &amp;quot;/var/cvechecker/global.db&amp;quot;;&lt;br /&gt;
     };&lt;br /&gt;
     # &lt;br /&gt;
     # For MySQL&lt;br /&gt;
     # &lt;br /&gt;
     mysql: {&lt;br /&gt;
       dbname = &amp;quot;cvechecker&amp;quot;;&lt;br /&gt;
       dbuser = &amp;quot;cvechecker&amp;quot;;&lt;br /&gt;
       dbpass = &amp;quot;cvecheckpass&amp;quot;;&lt;br /&gt;
       dbhost = &amp;quot;$IPADDRESS_OF_MYSQL_SERVER&amp;quot;;&lt;br /&gt;
     };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039;&lt;br /&gt;
Running cvechecker -i (initialize database) it removes ALL entries in the DB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Using CVEChecker ===&lt;br /&gt;
&lt;br /&gt;
After the db is created, you have to pull the necessary data from the Internet:&lt;br /&gt;
&lt;br /&gt;
     pullcves pull&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
According with the manual, &amp;quot;This will take a very long time, so please be patient (loading over half a million CVE entries in a database is a time consuming - but one-time - activity). &lt;br /&gt;
Future pulls will not take this much time as they will not redownload the CVE entries from all previous years (unless you ask it to).&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(If you&#039;re behind a proxy, you should set it from env variable or with wget.rc)&lt;br /&gt;
&lt;br /&gt;
Could be useful to crontab this task, maybe every day. Become the cvecheker user and run &amp;quot;crontab -e&amp;quot;.&lt;br /&gt;
Insert the following to run pullcves every day at 5:00 AM&lt;br /&gt;
&lt;br /&gt;
     *       5       *       *       *       /usr/bin/pullcves pull&lt;br /&gt;
&lt;br /&gt;
Now, make a list of executables file as well as /proc/version and allows cvechecker to verify if there are kernel-related CVE entries for your Linux kernel and software installed.&lt;br /&gt;
&lt;br /&gt;
     find / -type f -perm -o+x &amp;gt; /tmp/cvecheck.tmp&lt;br /&gt;
     cat /proc/version &amp;gt;&amp;gt; /tmp/cvecheck.tmp&lt;br /&gt;
&lt;br /&gt;
Now, in /tmp/cvecheck.tmp you&#039;ll have all the binaries of your system with their version.&lt;br /&gt;
Check if there are cve with the following:&lt;br /&gt;
&lt;br /&gt;
     cvechecker -b /tmp/cvecheck.tmp&lt;br /&gt;
          &lt;br /&gt;
If you want, you can create a report with the entries (if they are found):&lt;br /&gt;
&lt;br /&gt;
     cvechecker -r&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Simple script that helps to do it automatically. Copy and past it, save it as run_cvecheck.sh and give it exec permissions.&lt;br /&gt;
&lt;br /&gt;
     #!/bin/sh&lt;br /&gt;
     tempfile=/tmp/cvecheck.tmp&lt;br /&gt;
     EMAILADMIN=&amp;lt;%EMAIL ADDRESS USED FOR THIS TASK%&amp;gt;&lt;br /&gt;
     find / -type f -perm -o+x &amp;gt; $tempfile&lt;br /&gt;
     cat /proc/version &amp;gt;&amp;gt; $tempfile&lt;br /&gt;
     cvechecker -b $tempfile &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 	# Run cvechecker against the software list&lt;br /&gt;
     cvechecker -r &amp;gt; $tempfile &amp;gt; /dev/null 2&amp;gt;&amp;amp;1	# Create a report &lt;br /&gt;
     if [ -s &amp;quot;$tempfile&amp;quot; ] ; then			# If exists and non-zero, send it via email	&lt;br /&gt;
      mail $EMAILADMIN -s &amp;quot;CVE Checker&amp;quot; &amp;lt; $tempfile	&lt;br /&gt;
     fi ;&lt;br /&gt;
     rm $tempfile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;:&lt;br /&gt;
if you want to send email, syou have to add mailx and configure an smtp server (like ssmtp). But this information goes beyond the purpose of this doc.&lt;br /&gt;
&lt;br /&gt;
In order to make the last rows sent via email, you should configure an smtp server. Widely used is ssmtp. &lt;br /&gt;
&lt;br /&gt;
Coul be a good idea run this script as cronjob.&lt;br /&gt;
&lt;br /&gt;
So, you can do the same you did with pullcves: become the cvecheker user and run &amp;quot;crontab -e&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     *       6       *       *       *       /var/cvechecker/run_cvecheck.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Create Report ===&lt;br /&gt;
&lt;br /&gt;
CVEChecker generate reports in a CSV format.  Could be nice generate an html from this CSV.&lt;br /&gt;
&lt;br /&gt;
This is a sample script that uses csv2xml and cvereport.xsl (two scripts that comes with cvechecker) that allows the generation of html file starting by csv.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     #!/bin/sh&lt;br /&gt;
     tempfile=/tmp/cvecheck.tmp&lt;br /&gt;
     EMAILADMIN=root@localhost&lt;br /&gt;
     WEBDIR=/var/www/localhost/htdocs/cvechecker/&lt;br /&gt;
     CONFFILE=/etc/cvechecker.conf&lt;br /&gt;
     DATADIR=$(awk -F&#039;=&#039; &#039;/^datadir/ {print $2}&#039; ${CONFFILE} | awk -F&#039;&amp;quot;&#039; &#039;{print $2}&#039;);&lt;br /&gt;
     find / -type f -perm -o+x &amp;gt; $tempfile&lt;br /&gt;
     cat /proc/version &amp;gt;&amp;gt; $tempfile&lt;br /&gt;
     cvechecker -b $tempfile &amp;gt; /dev/null 2&amp;gt;&amp;amp;1        # Run cvechecker against the software list&lt;br /&gt;
     if [ -s &amp;quot;$tempfile&amp;quot; ] ; then                    # If exists and non-zero, send it via email     &lt;br /&gt;
         mail $EMAILADMIN -s &amp;quot;CVE Checker&amp;quot; &amp;lt; $tempfile&lt;br /&gt;
     fi ;&lt;br /&gt;
     # Create Report. &lt;br /&gt;
     # FYI: acknowledgements.xml is an hard-coded file name.&lt;br /&gt;
     cvechecker -rC &amp;gt; $WEBDIR/report.csv&lt;br /&gt;
     awk -F, -f ${DATADIR}/csv2xml.awk $WEBDIR/report.csv &amp;gt; ${DATADIR}/acknowledgements.xml&lt;br /&gt;
     xsltproc ${DATADIR}/cvereport.xsl $DATADIR/acknowledgements.xml &amp;gt; ${WEBDIR}/report.html&lt;br /&gt;
     printf &amp;quot;done\n&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Note&#039;&#039;&#039;: &lt;br /&gt;
the html generated is pretty ugly, because cvereport.xsl has hard-coded the css file which is stored in /usr/share/cvechecker dir. Filename is report.css&lt;br /&gt;
You can copy the report.css file into $WEBDIR in order to have a nicer html file.&lt;br /&gt;
&lt;br /&gt;
That&#039;s all. Enjoy Alpine!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Security]]&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Cvechecker&amp;diff=8060</id>
		<title>Cvechecker</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Cvechecker&amp;diff=8060"/>
		<updated>2012-05-17T11:39:20Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Draft}}&lt;br /&gt;
&lt;br /&gt;
= How to check Alpine Security with CVEChecker = &lt;br /&gt;
&lt;br /&gt;
== How Does it works ==&lt;br /&gt;
&lt;br /&gt;
From the homepage of cvechecker: http://cvechecker.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
     cvechecker is an useful tool which helps to compare packeges installed in your distribution with the Common Vulnerabilities Exposure.&lt;br /&gt;
     Is not a bullet-proof method and you will most likely have many false positives (vulnerability is fixed with a revision-release, but the tool isn’t able to detect the revision itself), &lt;br /&gt;
     yet it is still better than nothing.&lt;br /&gt;
     The idea is to automatize security check. But, clearly, this is not (and must not be) the only way to check security.&lt;br /&gt;
     With the proper reporting in place, you are immediately warned when a new CVE has been released that might match your system.&lt;br /&gt;
     You can then take the appropriate steps (acknowledge report, verify incident, fix package or mark as false positive).&lt;br /&gt;
     Those are the steps:&lt;br /&gt;
    - pull in the latest CVE entries as well as software/version detection rules (Adminsitrative task only)&lt;br /&gt;
    - generate a list of files to scan&lt;br /&gt;
    - gather installed software/version information&lt;br /&gt;
    - output which CVE entries might affect your system&lt;br /&gt;
    - generate a report informing you about the CVE entries&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
cvechecker is available in edge main repo. If you are running a stable version of alpine, you can add the package from edge in this way:&lt;br /&gt;
&lt;br /&gt;
     apk update -X http://rsync.alpinelinux.org/alpine/edge/main &amp;amp;&amp;amp; apk add -X http://rsync.alpinelinux.org/alpine/edge/main cvechecker&lt;br /&gt;
&lt;br /&gt;
== Configuration with sqlite ==&lt;br /&gt;
&lt;br /&gt;
CVEChecker&#039;s installation scripts create an user and a group, both called &amp;quot;cvechecker&amp;quot;, in order to have a user with minimum privileges to run cvechecker.&lt;br /&gt;
In this folder cvechecker will creates the database (according with the cvechecker.conf, we use sqlite3. But also mysql is supported. This could be useful if you want to share only one DB with many routers/servers running Alpine)&lt;br /&gt;
&lt;br /&gt;
Before use cvechecker you should configure cvechecker to use sqlite, then populate the DB with cve entries.&lt;br /&gt;
According with our settings, /etc/cvechecker.conf would looks like:&lt;br /&gt;
&lt;br /&gt;
     # Generic settings&lt;br /&gt;
     # &lt;br /&gt;
     dbtype = &amp;quot;sqlite&amp;quot;; &lt;br /&gt;
     #dbtype=&amp;quot;mysql&amp;quot;;&lt;br /&gt;
     cvecache = &amp;quot;/var/cvechecker/cache&amp;quot;;&lt;br /&gt;
     datadir = &amp;quot;/usr/share/cvechecker&amp;quot;;&lt;br /&gt;
     stringcmd = &amp;quot;/usr/bin/strings -n 3 &#039;@file@&#039;&amp;quot;;&lt;br /&gt;
     version_url = &amp;quot;http://cvechecker.svn.sourceforge.net/viewvc/cvechecker/versions.dat&amp;quot;;&lt;br /&gt;
     #userkey = &amp;quot;servertag&amp;quot;;&lt;br /&gt;
     #&lt;br /&gt;
     # For Sqlite3&lt;br /&gt;
     #&lt;br /&gt;
     sqlite3: {&lt;br /&gt;
       localdb = &amp;quot;/var/cvechecker/local&amp;quot;;&lt;br /&gt;
       globaldb = &amp;quot;/var/cvechecker/global.db&amp;quot;;&lt;br /&gt;
     };&lt;br /&gt;
     # &lt;br /&gt;
     # For MySQL&lt;br /&gt;
     # &lt;br /&gt;
     mysql: {&lt;br /&gt;
       dbname = &amp;quot;cvechecker&amp;quot;;&lt;br /&gt;
       dbuser = &amp;quot;cvechecker&amp;quot;;&lt;br /&gt;
       dbpass = &amp;quot;cvecheckpass&amp;quot;;&lt;br /&gt;
       dbhost = &amp;quot;$IPADDRESS_OF_MYSQL_SERVER&amp;quot;;&lt;br /&gt;
     };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, you can initialize the DB with:&lt;br /&gt;
&lt;br /&gt;
    cvechecker -i&lt;br /&gt;
&lt;br /&gt;
DB is ready.&lt;br /&gt;
Now, we should configure cvechecker to use mysql then populate the DB with cve entries.&lt;br /&gt;
&lt;br /&gt;
== Configuration with MySQL ==&lt;br /&gt;
&lt;br /&gt;
MySQL is another backend that cvechecker is able to use. Could be useful if you have several cvechecker installed in your network. In that way, you have only one &amp;quot;repository&amp;quot; of CVEs that needs to be updated.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     apk add mysql mysql-client&lt;br /&gt;
  &lt;br /&gt;
     /etc/init.d/mysql setup&lt;br /&gt;
&lt;br /&gt;
     /etc/init.d/mysql start &amp;amp;&amp;amp; rc-update add mysql default&lt;br /&gt;
&lt;br /&gt;
     /usr/bin/mysqladmin -u root password &#039;new-password&#039;&lt;br /&gt;
&lt;br /&gt;
create a db user for cvechecker:&lt;br /&gt;
&lt;br /&gt;
    mysql -u root -p&lt;br /&gt;
    mysql&amp;gt;CREATE DATABASE cvechecker;&lt;br /&gt;
    mysql&amp;gt;CREATE USER &#039;cvechecker&#039;@&#039;%&#039; IDENTIFIED BY &#039;cvecheckpass&#039;;&lt;br /&gt;
    mysql&amp;gt;GRANT ALL ON cvechecker.* TO &#039;cvechecker&#039;@&#039;localhost&#039;;&lt;br /&gt;
    mysql&amp;gt;GRANT ALL ON cvechecker.* TO &#039;cvechecker&#039;@&#039;%&#039;;&lt;br /&gt;
    mysql&amp;gt;FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
I set % because the DB and the users should allow access from other hosts. You can restrict this to allow only your domain.&lt;br /&gt;
&lt;br /&gt;
You have two way to create tables into DB:&lt;br /&gt;
&lt;br /&gt;
=== Via .sql script ===&lt;br /&gt;
&lt;br /&gt;
Login as cvechecker into mysql:&lt;br /&gt;
&lt;br /&gt;
     mysql -D cvechecker -u cvechecker -p &lt;br /&gt;
     mysql&amp;gt;source /usr/share/cvechecker/mysql_cvechecker.sql;&lt;br /&gt;
&lt;br /&gt;
DB is ready.&lt;br /&gt;
Now, we should configure cvechecker to use mysql then populate the DB with cve entries.&lt;br /&gt;
&lt;br /&gt;
=== Via cvechecker ===&lt;br /&gt;
&lt;br /&gt;
After you configured the DB, you can create tables with:&lt;br /&gt;
&lt;br /&gt;
     cvechecker -i&lt;br /&gt;
&lt;br /&gt;
But in order to make it works, you have to configure DB settings in cvechecker.conf.&lt;br /&gt;
According with our settings, /etc/cvechecker.conf would looks like:&lt;br /&gt;
&lt;br /&gt;
     # Generic settings&lt;br /&gt;
     # &lt;br /&gt;
     #dbtype = &amp;quot;sqlite&amp;quot;; &lt;br /&gt;
     dbtype=&amp;quot;mysql&amp;quot;;&lt;br /&gt;
     cvecache = &amp;quot;/var/cvechecker/cache&amp;quot;;&lt;br /&gt;
     datadir = &amp;quot;/usr/share/cvechecker&amp;quot;;&lt;br /&gt;
     stringcmd = &amp;quot;/usr/bin/strings -n 3 &#039;@file@&#039;&amp;quot;;&lt;br /&gt;
     version_url = &amp;quot;http://cvechecker.svn.sourceforge.net/viewvc/cvechecker/versions.dat&amp;quot;;&lt;br /&gt;
     #userkey = &amp;quot;servertag&amp;quot;;&lt;br /&gt;
     #&lt;br /&gt;
     # For Sqlite3&lt;br /&gt;
     #&lt;br /&gt;
     sqlite3: {&lt;br /&gt;
       localdb = &amp;quot;/var/cvechecker/local&amp;quot;;&lt;br /&gt;
       globaldb = &amp;quot;/var/cvechecker/global.db&amp;quot;;&lt;br /&gt;
     };&lt;br /&gt;
     # &lt;br /&gt;
     # For MySQL&lt;br /&gt;
     # &lt;br /&gt;
     mysql: {&lt;br /&gt;
       dbname = &amp;quot;cvechecker&amp;quot;;&lt;br /&gt;
       dbuser = &amp;quot;cvechecker&amp;quot;;&lt;br /&gt;
       dbpass = &amp;quot;cvecheckpass&amp;quot;;&lt;br /&gt;
       dbhost = &amp;quot;$IPADDRESS_OF_MYSQL_SERVER&amp;quot;;&lt;br /&gt;
     };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039;&lt;br /&gt;
Running cvechecker -i (initialize database) it removes ALL entries in the DB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Using CVEChecker ===&lt;br /&gt;
&lt;br /&gt;
After the db is created, you have to pull the necessary data from the Internet:&lt;br /&gt;
&lt;br /&gt;
     pullcves pull&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
According with the manual, &amp;quot;This will take a very long time, so please be patient (loading over half a million CVE entries in a database is a time consuming - but one-time - activity). &lt;br /&gt;
Future pulls will not take this much time as they will not redownload the CVE entries from all previous years (unless you ask it to).&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(If you&#039;re behind a proxy, you should set it from env variable or with wget.rc)&lt;br /&gt;
&lt;br /&gt;
Could be useful to crontab this task, maybe every day. Become the cvecheker user and run &amp;quot;crontab -e&amp;quot;.&lt;br /&gt;
Insert the following to run pullcves every day at 5:00 AM&lt;br /&gt;
&lt;br /&gt;
     *       5       *       *       *       /usr/bin/pullcves pull&lt;br /&gt;
&lt;br /&gt;
Now, make a list of executables file as well as /proc/version and allows cvechecker to verify if there are kernel-related CVE entries for your Linux kernel and software installed.&lt;br /&gt;
&lt;br /&gt;
     find / -type f -perm -o+x &amp;gt; /tmp/cvecheck.tmp&lt;br /&gt;
     cat /proc/version &amp;gt;&amp;gt; /tmp/cvecheck.tmp&lt;br /&gt;
&lt;br /&gt;
Now, in /tmp/cvecheck.tmp you&#039;ll have all the binaries of your system with their version.&lt;br /&gt;
Check if there are cve with the following:&lt;br /&gt;
&lt;br /&gt;
     cvechecker -b /tmp/cvecheck.tmp&lt;br /&gt;
          &lt;br /&gt;
If you want, you can create a report with the entries (if they are found):&lt;br /&gt;
&lt;br /&gt;
     cvechecker -r&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Simple script that helps to do it automatically. Copy and past it, save it as run_cvecheck.sh and give it exec permissions.&lt;br /&gt;
&lt;br /&gt;
     #!/bin/sh&lt;br /&gt;
     tempfile=/tmp/cvecheck.tmp&lt;br /&gt;
     EMAILADMIN=&amp;lt;%EMAIL ADDRESS USED FOR THIS TASK%&amp;gt;&lt;br /&gt;
     find / -type f -perm -o+x &amp;gt; $tempfile&lt;br /&gt;
     cat /proc/version &amp;gt;&amp;gt; $tempfile&lt;br /&gt;
     cvechecker -b $tempfile &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 	# Run cvechecker against the software list&lt;br /&gt;
     cvechecker -r &amp;gt; $tempfile &amp;gt; /dev/null 2&amp;gt;&amp;amp;1	# Create a report &lt;br /&gt;
     if [ -s &amp;quot;$tempfile&amp;quot; ] ; then			# If exists and non-zero, send it via email	&lt;br /&gt;
      mail $EMAILADMIN -s &amp;quot;CVE Checker&amp;quot; &amp;lt; $tempfile	&lt;br /&gt;
     fi ;&lt;br /&gt;
     rm $tempfile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to make the last rows sent via email, you should configure an smtp server. Widely used is ssmtp. &lt;br /&gt;
&lt;br /&gt;
Coul be a good idea run this script as cronjob.&lt;br /&gt;
&lt;br /&gt;
So, you can do the same you did with pullcves: become the cvecheker user and run &amp;quot;crontab -e&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     *       6       *       *       *       /var/cvechecker/run_cvecheck.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s all. Enjoy Alpine!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Security]]&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Cvechecker&amp;diff=8041</id>
		<title>Cvechecker</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Cvechecker&amp;diff=8041"/>
		<updated>2012-05-16T13:49:49Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Draft}}&lt;br /&gt;
&lt;br /&gt;
= How to check Alpine Security with CVEChecker = &lt;br /&gt;
&lt;br /&gt;
== How Does it works ==&lt;br /&gt;
&lt;br /&gt;
From the homepage of cvechecker: http://cvechecker.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
     cvechecker is an useful tool which helps to compare packeges installed in your distribution with the Common Vulnerabilities Exposure.&lt;br /&gt;
     Is not a bullet-proof method and you will most likely have many false positives (vulnerability is fixed with a revision-release, but the tool isn’t able to detect the revision itself), &lt;br /&gt;
     yet it is still better than nothing.&lt;br /&gt;
     The idea is to automatize security check. But, clearly, this is not (and must not be) the only way to check security.&lt;br /&gt;
     With the proper reporting in place, you are immediately warned when a new CVE has been released that might match your system.&lt;br /&gt;
     You can then take the appropriate steps (acknowledge report, verify incident, fix package or mark as false positive).&lt;br /&gt;
     Those are the steps:&lt;br /&gt;
    - pull in the latest CVE entries as well as software/version detection rules (Adminsitrative task only)&lt;br /&gt;
    - generate a list of files to scan&lt;br /&gt;
    - gather installed software/version information&lt;br /&gt;
    - output which CVE entries might affect your system&lt;br /&gt;
    - generate a report informing you about the CVE entries&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
cvechecker is available in edge main repo. If you are running a stable version of alpine, you can add the package from edge in this way:&lt;br /&gt;
&lt;br /&gt;
     apk update -X http://rsync.alpinelinux.org/alpine/edge/main &amp;amp;&amp;amp; apk add -X http://rsync.alpinelinux.org/alpine/edge/main cvechecker&lt;br /&gt;
&lt;br /&gt;
== Configuration with sqlite ==&lt;br /&gt;
&lt;br /&gt;
CVEChecker&#039;s installation scripts create an user and a group, both called &amp;quot;cvechecker&amp;quot;, in order to have a user with minimum privileges to run cvechecker.&lt;br /&gt;
In this folder cvechecker will creates the database (according with the cvechecker.conf, we use sqlite3. But also mysql is supported. This could be useful if you want to share only one DB with many routers/servers running Alpine)&lt;br /&gt;
&lt;br /&gt;
Before use cvechecker you should configure cvechecker to use sqlite, then populate the DB with cve entries.&lt;br /&gt;
According with our settings, /etc/cvechecker.conf would looks like:&lt;br /&gt;
&lt;br /&gt;
     # Generic settings&lt;br /&gt;
     # &lt;br /&gt;
     dbtype = &amp;quot;sqlite&amp;quot;; &lt;br /&gt;
     #dbtype=&amp;quot;mysql&amp;quot;;&lt;br /&gt;
     cvecache = &amp;quot;/var/cvechecker/cache&amp;quot;;&lt;br /&gt;
     datadir = &amp;quot;/usr/share/cvechecker&amp;quot;;&lt;br /&gt;
     stringcmd = &amp;quot;/usr/bin/strings -n 3 &#039;@file@&#039;&amp;quot;;&lt;br /&gt;
     version_url = &amp;quot;http://cvechecker.svn.sourceforge.net/viewvc/cvechecker/versions.dat&amp;quot;;&lt;br /&gt;
     #userkey = &amp;quot;servertag&amp;quot;;&lt;br /&gt;
     #&lt;br /&gt;
     # For Sqlite3&lt;br /&gt;
     #&lt;br /&gt;
     sqlite3: {&lt;br /&gt;
       localdb = &amp;quot;/var/cvechecker/local&amp;quot;;&lt;br /&gt;
       globaldb = &amp;quot;/var/cvechecker/global.db&amp;quot;;&lt;br /&gt;
     };&lt;br /&gt;
     # &lt;br /&gt;
     # For MySQL&lt;br /&gt;
     # &lt;br /&gt;
     mysql: {&lt;br /&gt;
       dbname = &amp;quot;cvechecker&amp;quot;;&lt;br /&gt;
       dbuser = &amp;quot;cvechecker&amp;quot;;&lt;br /&gt;
       dbpass = &amp;quot;cvecheckpass&amp;quot;;&lt;br /&gt;
       dbhost = &amp;quot;$IPADDRESS_OF_MYSQL_SERVER&amp;quot;;&lt;br /&gt;
     };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, you can initialize the DB with:&lt;br /&gt;
&lt;br /&gt;
    cvechecker -i&lt;br /&gt;
&lt;br /&gt;
DB is ready.&lt;br /&gt;
Now, we should configure cvechecker to use mysql then populate the DB with cve entries.&lt;br /&gt;
&lt;br /&gt;
== Configuration with MySQL ==&lt;br /&gt;
&lt;br /&gt;
MySQL is another backend that cvechecker is able to use. Could be useful if you have several cvechecker installed in your network. In that way, you have only one &amp;quot;repository&amp;quot; of CVEs that needs to be updated.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     apk add mysql mysql-client&lt;br /&gt;
  &lt;br /&gt;
     /etc/init.d/mysql setup&lt;br /&gt;
&lt;br /&gt;
     /etc/init.d/mysql start &amp;amp;&amp;amp; rc-update add mysql default&lt;br /&gt;
&lt;br /&gt;
     /usr/bin/mysqladmin -u root password &#039;new-password&#039;&lt;br /&gt;
&lt;br /&gt;
create a db user for cvechecker:&lt;br /&gt;
&lt;br /&gt;
    mysql -u root -p&lt;br /&gt;
    mysql&amp;gt;CREATE DATABASE cvechecker;&lt;br /&gt;
    mysql&amp;gt;CREATE USER &#039;cvechecker&#039;@&#039;%&#039; IDENTIFIED BY &#039;cvecheckpass&#039;;&lt;br /&gt;
    mysql&amp;gt;GRANT ALL ON cvechecker.* TO &#039;cvechecker&#039;@&#039;localhost&#039;;&lt;br /&gt;
    mysql&amp;gt;GRANT ALL ON cvechecker.* TO &#039;cvechecker&#039;@&#039;%&#039;;&lt;br /&gt;
    mysql&amp;gt;FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
I set % because the DB and the users should allow access from other hosts. You can restrict this to allow only your domain.&lt;br /&gt;
&lt;br /&gt;
Login as cvechecker into mysql:&lt;br /&gt;
&lt;br /&gt;
     mysql -D cvechecker -u cvechecker -p &lt;br /&gt;
     mysql&amp;gt;source /usr/share/cvechecker/mysql_cvechecker.sql;&lt;br /&gt;
&lt;br /&gt;
DB is ready.&lt;br /&gt;
Now, we should configure cvechecker to use mysql then populate the DB with cve entries.&lt;br /&gt;
&lt;br /&gt;
According with our settings, /etc/cvechecker.conf would looks like:&lt;br /&gt;
&lt;br /&gt;
     # Generic settings&lt;br /&gt;
     # &lt;br /&gt;
     #dbtype = &amp;quot;sqlite&amp;quot;; &lt;br /&gt;
     dbtype=&amp;quot;mysql&amp;quot;;&lt;br /&gt;
     cvecache = &amp;quot;/var/cvechecker/cache&amp;quot;;&lt;br /&gt;
     datadir = &amp;quot;/usr/share/cvechecker&amp;quot;;&lt;br /&gt;
     stringcmd = &amp;quot;/usr/bin/strings -n 3 &#039;@file@&#039;&amp;quot;;&lt;br /&gt;
     version_url = &amp;quot;http://cvechecker.svn.sourceforge.net/viewvc/cvechecker/versions.dat&amp;quot;;&lt;br /&gt;
     #userkey = &amp;quot;servertag&amp;quot;;&lt;br /&gt;
     #&lt;br /&gt;
     # For Sqlite3&lt;br /&gt;
     #&lt;br /&gt;
     sqlite3: {&lt;br /&gt;
       localdb = &amp;quot;/var/cvechecker/local&amp;quot;;&lt;br /&gt;
       globaldb = &amp;quot;/var/cvechecker/global.db&amp;quot;;&lt;br /&gt;
     };&lt;br /&gt;
     # &lt;br /&gt;
     # For MySQL&lt;br /&gt;
     # &lt;br /&gt;
     mysql: {&lt;br /&gt;
       dbname = &amp;quot;cvechecker&amp;quot;;&lt;br /&gt;
       dbuser = &amp;quot;cvechecker&amp;quot;;&lt;br /&gt;
       dbpass = &amp;quot;cvecheckpass&amp;quot;;&lt;br /&gt;
       dbhost = &amp;quot;$IPADDRESS_OF_MYSQL_SERVER&amp;quot;;&lt;br /&gt;
     };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039;&lt;br /&gt;
Running cvechecker -i (initialize database) it removes ALL entries in the DB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Using CVEChecker ===&lt;br /&gt;
&lt;br /&gt;
After the db is created, you have to pull the necessary data from the Internet:&lt;br /&gt;
&lt;br /&gt;
     pullcves pull&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
According with the manual, &amp;quot;This will take a very long time, so please be patient (loading over half a million CVE entries in a database is a time consuming - but one-time - activity). &lt;br /&gt;
Future pulls will not take this much time as they will not redownload the CVE entries from all previous years (unless you ask it to).&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(If you&#039;re behind a proxy, you should set it from env variable or with wget.rc)&lt;br /&gt;
&lt;br /&gt;
Could be useful to crontab this task, maybe every day. Become the cvecheker user and run &amp;quot;crontab -e&amp;quot;.&lt;br /&gt;
Insert the following to run pullcves every day at 5:00 AM&lt;br /&gt;
&lt;br /&gt;
     *       5       *       *       *       /usr/bin/pullcves pull&lt;br /&gt;
&lt;br /&gt;
Now, make a list of executables file as well as /proc/version and allows cvechecker to verify if there are kernel-related CVE entries for your Linux kernel and software installed.&lt;br /&gt;
&lt;br /&gt;
     find / -type f -perm -o+x &amp;gt; /tmp/cvecheck.tmp&lt;br /&gt;
     cat /proc/version &amp;gt;&amp;gt; /tmp/cvecheck.tmp&lt;br /&gt;
&lt;br /&gt;
Now, in /tmp/cvecheck.tmp you&#039;ll have all the binaries of your system with their version.&lt;br /&gt;
Check if there are cve with the following:&lt;br /&gt;
&lt;br /&gt;
     cvechecker -b /tmp/cvecheck.tmp&lt;br /&gt;
          &lt;br /&gt;
If you want, you can create a report with the entries (if they are found):&lt;br /&gt;
&lt;br /&gt;
     cvechecker -r&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Simple script that helps to do it automatically. Copy and past it, save it as run_cvecheck.sh and give it exec permissions.&lt;br /&gt;
&lt;br /&gt;
     #!/bin/sh&lt;br /&gt;
     tempfile=/tmp/cvecheck.tmp&lt;br /&gt;
     EMAILADMIN=&amp;lt;%EMAIL ADDRESS USED FOR THIS TASK%&amp;gt;&lt;br /&gt;
     find / -type f -perm -o+x &amp;gt; $tempfile&lt;br /&gt;
     cat /proc/version &amp;gt;&amp;gt; $tempfile&lt;br /&gt;
     cvechecker -b $tempfile &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 	# Run cvechecker against the software list&lt;br /&gt;
     cvechecker -r &amp;gt; $tempfile &amp;gt; /dev/null 2&amp;gt;&amp;amp;1	# Create a report &lt;br /&gt;
     if [ -s &amp;quot;$tempfile&amp;quot; ] ; then			# If exists and non-zero, send it via email	&lt;br /&gt;
      mail $EMAILADMIN -s &amp;quot;CVE Checker&amp;quot; &amp;lt; $tempfile	&lt;br /&gt;
     fi ;&lt;br /&gt;
     rm $tempfile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to make the last rows sent via email, you should configure an smtp server. Widely used is ssmtp. &lt;br /&gt;
&lt;br /&gt;
Coul be a good idea run this script as cronjob.&lt;br /&gt;
&lt;br /&gt;
So, you can do the same you did with pullcves: become the cvecheker user and run &amp;quot;crontab -e&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     *       6       *       *       *       /var/cvechecker/run_cvecheck.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s all. Enjoy Alpine!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Security]]&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Cvechecker&amp;diff=8040</id>
		<title>Cvechecker</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Cvechecker&amp;diff=8040"/>
		<updated>2012-05-16T13:46:02Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Draft}}&lt;br /&gt;
&lt;br /&gt;
= How to check Alpine Security with CVEChecker = &lt;br /&gt;
&lt;br /&gt;
== How Does it works ==&lt;br /&gt;
&lt;br /&gt;
From the homepage of cvechecker: http://cvechecker.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
     cvechecker is an useful tool which helps to compare packeges installed in your distribution with the Common Vulnerabilities Exposure.&lt;br /&gt;
     Is not a bullet-proof method and you will most likely have many false positives (vulnerability is fixed with a revision-release, but the tool isn’t able to detect the revision itself), &lt;br /&gt;
     yet it is still better than nothing.&lt;br /&gt;
     The idea is to automatize security check. But, clearly, this is not (and must not be) the only way to check security.&lt;br /&gt;
     With the proper reporting in place, you are immediately warned when a new CVE has been released that might match your system.&lt;br /&gt;
     You can then take the appropriate steps (acknowledge report, verify incident, fix package or mark as false positive).&lt;br /&gt;
     Those are the steps:&lt;br /&gt;
    - pull in the latest CVE entries as well as software/version detection rules (Adminsitrative task only)&lt;br /&gt;
    - generate a list of files to scan&lt;br /&gt;
    - gather installed software/version information&lt;br /&gt;
    - output which CVE entries might affect your system&lt;br /&gt;
    - generate a report informing you about the CVE entries&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
cvechecker is available in edge main repo. If you are running a stable version of alpine, you can add the package from edge in this way:&lt;br /&gt;
&lt;br /&gt;
     apk update -X http://rsync.alpinelinux.org/alpine/edge/main &amp;amp;&amp;amp; apk add -X http://rsync.alpinelinux.org/alpine/edge/main cvechecker&lt;br /&gt;
&lt;br /&gt;
== Configuration with sqlite ==&lt;br /&gt;
&lt;br /&gt;
CVEChecker&#039;s installation scripts create an user and a group, both called &amp;quot;cvechecker&amp;quot;, in order to have a user with minimum privileges to run cvechecker.&lt;br /&gt;
In this folder cvechecker will creates the database (according with the cvechecker.conf, we use sqlite3. But also mysql is supported. This could be useful if you want to share only one DB with many routers/servers running Alpine)&lt;br /&gt;
&lt;br /&gt;
Before use cvechecker you should configure cvechecker to use sqlite, then populate the DB with cve entries.&lt;br /&gt;
According with our settings, /etc/cvechecker.conf would looks like:&lt;br /&gt;
&lt;br /&gt;
     # Generic settings&lt;br /&gt;
     # &lt;br /&gt;
     dbtype = &amp;quot;sqlite&amp;quot;; &lt;br /&gt;
     #dbtype=&amp;quot;mysql&amp;quot;;&lt;br /&gt;
     cvecache = &amp;quot;/var/cvechecker/cache&amp;quot;;&lt;br /&gt;
     datadir = &amp;quot;/usr/share/cvechecker&amp;quot;;&lt;br /&gt;
     stringcmd = &amp;quot;/usr/bin/strings -n 3 &#039;@file@&#039;&amp;quot;;&lt;br /&gt;
     version_url = &amp;quot;http://cvechecker.svn.sourceforge.net/viewvc/cvechecker/versions.dat&amp;quot;;&lt;br /&gt;
     #userkey = &amp;quot;servertag&amp;quot;;&lt;br /&gt;
     #&lt;br /&gt;
     # For Sqlite3&lt;br /&gt;
     #&lt;br /&gt;
     sqlite3: {&lt;br /&gt;
       localdb = &amp;quot;/var/cvechecker/local&amp;quot;;&lt;br /&gt;
       globaldb = &amp;quot;/var/cvechecker/global.db&amp;quot;;&lt;br /&gt;
     };&lt;br /&gt;
     # &lt;br /&gt;
     # For MySQL&lt;br /&gt;
     # &lt;br /&gt;
     mysql: {&lt;br /&gt;
       dbname = &amp;quot;cvechecker&amp;quot;;&lt;br /&gt;
       dbuser = &amp;quot;cvechecker&amp;quot;;&lt;br /&gt;
       dbpass = &amp;quot;cvecheckpass&amp;quot;;&lt;br /&gt;
       dbhost = &amp;quot;$IPADDRESS_OF_MYSQL_SERVER&amp;quot;;&lt;br /&gt;
     };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, you can initialize the DB with:&lt;br /&gt;
&lt;br /&gt;
    cvechecker -i&lt;br /&gt;
&lt;br /&gt;
DB is ready.&lt;br /&gt;
Now, we should configure cvechecker to use mysql then populate the DB with cve entries.&lt;br /&gt;
&lt;br /&gt;
== Configuration with MySQL ==&lt;br /&gt;
&lt;br /&gt;
MySQL is another backend that cvechecker is able to use. Could be useful if you have several cvechecker installed in your network. In that way, you have only one &amp;quot;repository&amp;quot; of CVEs that needs to be updated.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     apk add mysql mysql-client&lt;br /&gt;
  &lt;br /&gt;
     /etc/init.d/mysql setup&lt;br /&gt;
&lt;br /&gt;
     /etc/init.d/mysql start &amp;amp;&amp;amp; rc-update add mysql default&lt;br /&gt;
&lt;br /&gt;
     /usr/bin/mysqladmin -u root password &#039;new-password&#039;&lt;br /&gt;
&lt;br /&gt;
create a db user for cvechecker:&lt;br /&gt;
&lt;br /&gt;
    mysql -u root -p&lt;br /&gt;
    mysql&amp;gt;CREATE DATABASE cvechecker;&lt;br /&gt;
    mysql&amp;gt;CREATE USER &#039;cvechecker&#039;@&#039;%&#039; IDENTIFIED BY &#039;cvecheckpass&#039;;&lt;br /&gt;
    mysql&amp;gt;GRANT ALL ON cvechecker.* TO &#039;cvechecker&#039;@&#039;localhost&#039;;&lt;br /&gt;
    mysql&amp;gt;GRANT ALL ON cvechecker.* TO &#039;cvechecker&#039;@&#039;%&#039;;&lt;br /&gt;
    mysql&amp;gt;FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
I set % because the DB and the users should allow access from other hosts. You can restrict this to allow only your domain.&lt;br /&gt;
&lt;br /&gt;
Login as cvechecker into mysql:&lt;br /&gt;
&lt;br /&gt;
     mysql -D cvechecker -u cvechecker -p &lt;br /&gt;
     mysql&amp;gt;source /usr/share/cvechecker/mysql_cvechecker.sql;&lt;br /&gt;
&lt;br /&gt;
DB is ready.&lt;br /&gt;
Now, we should configure cvechecker to use mysql then populate the DB with cve entries.&lt;br /&gt;
&lt;br /&gt;
According with our settings, /etc/cvechecker.conf would looks like:&lt;br /&gt;
&lt;br /&gt;
     # Generic settings&lt;br /&gt;
     # &lt;br /&gt;
     #dbtype = &amp;quot;sqlite&amp;quot;; &lt;br /&gt;
     dbtype=&amp;quot;mysql&amp;quot;;&lt;br /&gt;
     cvecache = &amp;quot;/var/cvechecker/cache&amp;quot;;&lt;br /&gt;
     datadir = &amp;quot;/usr/share/cvechecker&amp;quot;;&lt;br /&gt;
     stringcmd = &amp;quot;/usr/bin/strings -n 3 &#039;@file@&#039;&amp;quot;;&lt;br /&gt;
     version_url = &amp;quot;http://cvechecker.svn.sourceforge.net/viewvc/cvechecker/versions.dat&amp;quot;;&lt;br /&gt;
     #userkey = &amp;quot;servertag&amp;quot;;&lt;br /&gt;
     #&lt;br /&gt;
     # For Sqlite3&lt;br /&gt;
     #&lt;br /&gt;
     sqlite3: {&lt;br /&gt;
       localdb = &amp;quot;/var/cvechecker/local&amp;quot;;&lt;br /&gt;
       globaldb = &amp;quot;/var/cvechecker/global.db&amp;quot;;&lt;br /&gt;
     };&lt;br /&gt;
     # &lt;br /&gt;
     # For MySQL&lt;br /&gt;
     # &lt;br /&gt;
     mysql: {&lt;br /&gt;
       dbname = &amp;quot;cvechecker&amp;quot;;&lt;br /&gt;
       dbuser = &amp;quot;cvechecker&amp;quot;;&lt;br /&gt;
       dbpass = &amp;quot;cvecheckpass&amp;quot;;&lt;br /&gt;
       dbhost = &amp;quot;$IPADDRESS_OF_MYSQL_SERVER&amp;quot;;&lt;br /&gt;
     };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039;&lt;br /&gt;
Running cvechecker -i (initialize database) it removes ALL entries in the DB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Using CVEChecker ===&lt;br /&gt;
&lt;br /&gt;
After the db is created, you have to pull the necessary data from the Internet:&lt;br /&gt;
&lt;br /&gt;
     pullcves pull&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
According with the manual, &amp;quot;This will take a very long time, so please be patient (loading over half a million CVE entries in a database is a time consuming - but one-time - activity). &lt;br /&gt;
Future pulls will not take this much time as they will not redownload the CVE entries from all previous years (unless you ask it to).&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(If you&#039;re behind a proxy, you should set it from env variable or with wget.rc)&lt;br /&gt;
&lt;br /&gt;
Could be useful to crontab this task, maybe every day. Become the cvecheker user and run &amp;quot;crontab -e&amp;quot;.&lt;br /&gt;
Insert the following to run pullcves every day at 5:00 AM&lt;br /&gt;
&lt;br /&gt;
     *       5       *       *       *       /usr/bin/pullcves pull&lt;br /&gt;
&lt;br /&gt;
Now, make a list of executables file as well as /proc/version and allows cvechecker to verify if there are kernel-related CVE entries for your Linux kernel and software installed.&lt;br /&gt;
&lt;br /&gt;
     find / -type f -perm -o+x &amp;gt; /tmp/cvecheck.tmp&lt;br /&gt;
     cat /proc/version &amp;gt;&amp;gt; /tmp/cvecheck.tmp&lt;br /&gt;
&lt;br /&gt;
Now, in /tmp/cvecheck.tmp you&#039;ll have all the binaries of your system with their version.&lt;br /&gt;
Check if there are cve with the following:&lt;br /&gt;
&lt;br /&gt;
     cvechecker -b /tmp/cvecheck.tmp&lt;br /&gt;
          &lt;br /&gt;
If you want, you can create a report with the entries (if they are found):&lt;br /&gt;
&lt;br /&gt;
     cvechecker -r&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Simple script that helps to do it automatically. Copy and past it, save it as run_cvecheck.sh and give it exec permissions.&lt;br /&gt;
&lt;br /&gt;
     #!/bin/sh&lt;br /&gt;
     tempfile=/tmp/cvecheck.tmp&lt;br /&gt;
     EMAILADMIN=&amp;lt;%EMAIL ADDRESS USED FOR THIS TASK%&amp;gt;&lt;br /&gt;
     find / -type f -perm -o+x &amp;gt; $tempfile&lt;br /&gt;
     cat /proc/version &amp;gt;&amp;gt; $tempfile&lt;br /&gt;
     cvechecker -b $tempfile &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 	# Run cvechecker against the software list&lt;br /&gt;
     cvechecker -r &amp;gt; $tempfile &amp;gt; /dev/null 2&amp;gt;&amp;amp;1	# Create a report &lt;br /&gt;
     if [ -s &amp;quot;$tempfile&amp;quot; ] ; then			# If exists and non-zero, send it via email	&lt;br /&gt;
      mail $EMAILADMIN -s &amp;quot;CVE Checker&amp;quot; &amp;lt; $tempfile	&lt;br /&gt;
     fi ;&lt;br /&gt;
     rm $tempfile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to make the last rows sent via email, you should configure an smtp server. Widely used is ssmtp. &lt;br /&gt;
&lt;br /&gt;
Coul be a good idea run this script as cronjob.&lt;br /&gt;
&lt;br /&gt;
So, you can do the same you did with pullcves: become the cvecheker user and run &amp;quot;crontab -e&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     *       6       *       *       *       /var/cvechecker/run_cvecheck.sh&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
That&#039;s all. Enjoy Alpine!&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Cvechecker&amp;diff=8039</id>
		<title>Cvechecker</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Cvechecker&amp;diff=8039"/>
		<updated>2012-05-16T13:44:22Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: Created page with &amp;quot;{{Draft}}  = How to check Alpine Security with CVEChecker =   == How Does it works ==  From the homepage of cvechecker: http://cvechecker.sourceforge.net/       cvechecker is an ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Draft}}&lt;br /&gt;
&lt;br /&gt;
= How to check Alpine Security with CVEChecker = &lt;br /&gt;
&lt;br /&gt;
== How Does it works ==&lt;br /&gt;
&lt;br /&gt;
From the homepage of cvechecker: http://cvechecker.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
     cvechecker is an useful tool which helps to compare packeges installed in your distribution with the Common Vulnerabilities Exposure.&lt;br /&gt;
     Is not a bullet-proof method and you will most likely have many false positives (vulnerability is fixed with a revision-release, but the tool isn’t able to detect the revision itself), &lt;br /&gt;
     yet it is still better than nothing.&lt;br /&gt;
     The idea is to automatize security check. But, clearly, this is not (and must not be) the only way to check security.&lt;br /&gt;
     With the proper reporting in place, you are immediately warned when a new CVE has been released that might match your system.&lt;br /&gt;
     You can then take the appropriate steps (acknowledge report, verify incident, fix package or mark as false positive).&lt;br /&gt;
     Those are the steps:&lt;br /&gt;
    - pull in the latest CVE entries as well as software/version detection rules (Adminsitrative task only)&lt;br /&gt;
    - generate a list of files to scan&lt;br /&gt;
    - gather installed software/version information&lt;br /&gt;
    - output which CVE entries might affect your system&lt;br /&gt;
    - generate a report informing you about the CVE entries&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
cvechecker is available in edge main repo. If you are running a stable version of alpine, you can add the package from edge in this way:&lt;br /&gt;
&lt;br /&gt;
     apk update -X http://rsync.alpinelinux.org/alpine/edge/main &amp;amp;&amp;amp; apk add -X http://rsync.alpinelinux.org/alpine/edge/main cvechecker&lt;br /&gt;
&lt;br /&gt;
== Configuration with sqlite ==&lt;br /&gt;
&lt;br /&gt;
CVEChecker&#039;s installation scripts create an user and a group, both called &amp;quot;cvechecker&amp;quot;, in order to have a user with minimum privileges to run cvechecker.&lt;br /&gt;
In this folder cvechecker will creates the database (according with the cvechecker.conf, we use sqlite3. But also mysql is supported. This could be useful if you want to share only one DB with many routers/servers running Alpine)&lt;br /&gt;
&lt;br /&gt;
Before use cvechecker you should configure cvechecker to use sqlite, then populate the DB with cve entries.&lt;br /&gt;
According with our settings, /etc/cvechecker.conf would looks like:&lt;br /&gt;
&lt;br /&gt;
     # Generic settings&lt;br /&gt;
     # &lt;br /&gt;
     dbtype = &amp;quot;sqlite&amp;quot;; &lt;br /&gt;
     #dbtype=&amp;quot;mysql&amp;quot;;&lt;br /&gt;
     cvecache = &amp;quot;/var/cvechecker/cache&amp;quot;;&lt;br /&gt;
     datadir = &amp;quot;/usr/share/cvechecker&amp;quot;;&lt;br /&gt;
     stringcmd = &amp;quot;/usr/bin/strings -n 3 &#039;@file@&#039;&amp;quot;;&lt;br /&gt;
     version_url = &amp;quot;http://cvechecker.svn.sourceforge.net/viewvc/cvechecker/versions.dat&amp;quot;;&lt;br /&gt;
     #userkey = &amp;quot;servertag&amp;quot;;&lt;br /&gt;
     #&lt;br /&gt;
     # For Sqlite3&lt;br /&gt;
     #&lt;br /&gt;
     sqlite3: {&lt;br /&gt;
       localdb = &amp;quot;/var/cvechecker/local&amp;quot;;&lt;br /&gt;
       globaldb = &amp;quot;/var/cvechecker/global.db&amp;quot;;&lt;br /&gt;
     };&lt;br /&gt;
     # &lt;br /&gt;
     # For MySQL&lt;br /&gt;
     # &lt;br /&gt;
     mysql: {&lt;br /&gt;
       dbname = &amp;quot;cvechecker&amp;quot;;&lt;br /&gt;
       dbuser = &amp;quot;cvechecker&amp;quot;;&lt;br /&gt;
       dbpass = &amp;quot;cvecheckpass&amp;quot;;&lt;br /&gt;
       dbhost = &amp;quot;$IPADDRESS_OF_MYSQL_SERVER&amp;quot;;&lt;br /&gt;
     };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now, you can initialize the DB with:&lt;br /&gt;
&lt;br /&gt;
    cvechecker -i&lt;br /&gt;
&lt;br /&gt;
DB is ready.&lt;br /&gt;
Now, we should configure cvechecker to use mysql then populate the DB with cve entries.&lt;br /&gt;
&lt;br /&gt;
== Configuration with MySQL ==&lt;br /&gt;
&lt;br /&gt;
MySQL is another backend that cvechecker is able to use. Could be useful if you have several cvechecker installed in your network. In that way, you have only one &amp;quot;repository&amp;quot; of CVEs that needs to be updated.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     apk add mysql mysql-client&lt;br /&gt;
  &lt;br /&gt;
     /etc/init.d/mysql setup&lt;br /&gt;
&lt;br /&gt;
     /etc/init.d/mysql start &amp;amp;&amp;amp; rc-update add mysql default&lt;br /&gt;
&lt;br /&gt;
     /usr/bin/mysqladmin -u root password &#039;new-password&#039;&lt;br /&gt;
&lt;br /&gt;
create a db user for cvechecker:&lt;br /&gt;
&lt;br /&gt;
    mysql -u root -p&lt;br /&gt;
    mysql&amp;gt;CREATE DATABASE cvechecker;&lt;br /&gt;
    mysql&amp;gt;CREATE USER &#039;cvechecker&#039;@&#039;%&#039; IDENTIFIED BY &#039;cvecheckpass&#039;;&lt;br /&gt;
    mysql&amp;gt;GRANT ALL ON cvechecker.* TO &#039;cvechecker&#039;@&#039;localhost&#039;;&lt;br /&gt;
    mysql&amp;gt;GRANT ALL ON cvechecker.* TO &#039;cvechecker&#039;@&#039;%&#039;;&lt;br /&gt;
    mysql&amp;gt;FLUSH PRIVILEGES;&lt;br /&gt;
&lt;br /&gt;
I set % because the DB and the users should allow access from other hosts. You can restrict this to allow only your domain.&lt;br /&gt;
&lt;br /&gt;
Login as cvechecker into mysql:&lt;br /&gt;
&lt;br /&gt;
     mysql -D cvechecker -u cvechecker -p &lt;br /&gt;
     mysql&amp;gt;source /usr/share/cvechecker/mysql_cvechecker.sql;&lt;br /&gt;
&lt;br /&gt;
DB is ready.&lt;br /&gt;
Now, we should configure cvechecker to use mysql then populate the DB with cve entries.&lt;br /&gt;
&lt;br /&gt;
According with our settings, /etc/cvechecker.conf would looks like:&lt;br /&gt;
&lt;br /&gt;
     # Generic settings&lt;br /&gt;
     # &lt;br /&gt;
     #dbtype = &amp;quot;sqlite&amp;quot;; &lt;br /&gt;
     dbtype=&amp;quot;mysql&amp;quot;;&lt;br /&gt;
     cvecache = &amp;quot;/var/cvechecker/cache&amp;quot;;&lt;br /&gt;
     datadir = &amp;quot;/usr/share/cvechecker&amp;quot;;&lt;br /&gt;
     stringcmd = &amp;quot;/usr/bin/strings -n 3 &#039;@file@&#039;&amp;quot;;&lt;br /&gt;
     version_url = &amp;quot;http://cvechecker.svn.sourceforge.net/viewvc/cvechecker/versions.dat&amp;quot;;&lt;br /&gt;
     #userkey = &amp;quot;servertag&amp;quot;;&lt;br /&gt;
     #&lt;br /&gt;
     # For Sqlite3&lt;br /&gt;
     #&lt;br /&gt;
     sqlite3: {&lt;br /&gt;
       localdb = &amp;quot;/var/cvechecker/local&amp;quot;;&lt;br /&gt;
       globaldb = &amp;quot;/var/cvechecker/global.db&amp;quot;;&lt;br /&gt;
     };&lt;br /&gt;
     # &lt;br /&gt;
     # For MySQL&lt;br /&gt;
     # &lt;br /&gt;
     mysql: {&lt;br /&gt;
       dbname = &amp;quot;cvechecker&amp;quot;;&lt;br /&gt;
       dbuser = &amp;quot;cvechecker&amp;quot;;&lt;br /&gt;
       dbpass = &amp;quot;cvecheckpass&amp;quot;;&lt;br /&gt;
       dbhost = &amp;quot;$IPADDRESS_OF_MYSQL_SERVER&amp;quot;;&lt;br /&gt;
     };&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE:&#039;&#039;&#039;&lt;br /&gt;
Running cvechecker -i (initialize database) it removes ALL entries in the DB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Using CVEChecker ===&lt;br /&gt;
&lt;br /&gt;
After the db is created, you have to pull the necessary data from the Internet:&lt;br /&gt;
&lt;br /&gt;
     pullcves pull&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
According with the manual, &amp;quot;This will take a very long time, so please be patient (loading over half a million CVE entries in a database is a time consuming - but one-time - activity). &lt;br /&gt;
Future pulls will not take this much time as they will not redownload the CVE entries from all previous years (unless you ask it to).&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(If you&#039;re behind a proxy, you should set it from env variable or with wget.rc)&lt;br /&gt;
&lt;br /&gt;
Could be useful to crontab this task, maybe every day. Become the cvecheker user and run &amp;quot;crontab -e&amp;quot;.&lt;br /&gt;
Insert the following to run pullcves every day at 5:00 AM&lt;br /&gt;
&lt;br /&gt;
     *       5       *       *       *       /usr/bin/pullcves pull&lt;br /&gt;
&lt;br /&gt;
Now, make a list of executables file as well as /proc/version and allows cvechecker to verify if there are kernel-related CVE entries for your Linux kernel and software installed.&lt;br /&gt;
&lt;br /&gt;
     find / -type f -perm -o+x &amp;gt; /tmp/cvecheck.tmp&lt;br /&gt;
     cat /proc/version &amp;gt;&amp;gt; /tmp/cvecheck.tmp&lt;br /&gt;
&lt;br /&gt;
Now, in /tmp/cvecheck.tmp you&#039;ll have all the binaries of your system with their version.&lt;br /&gt;
Check if there are cve with the following:&lt;br /&gt;
&lt;br /&gt;
     cvechecker -b /tmp/cvecheck.tmp&lt;br /&gt;
          &lt;br /&gt;
If you want, you can create a report with the entries (if they are found):&lt;br /&gt;
&lt;br /&gt;
     cvechecker -r&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Simple script that helps to do it automatically. Copy and past it, save it as run_cvecheck.sh and give it exec permissions.&lt;br /&gt;
&lt;br /&gt;
     #!/bin/sh&lt;br /&gt;
     tempfile=/tmp/cvecheck.tmp&lt;br /&gt;
     EMAILADMIN=&amp;lt;%EMAIL ADDRESS USED FOR THIS TASK%&amp;gt;&lt;br /&gt;
     find / -type f -perm -o+x &amp;gt; $tempfile&lt;br /&gt;
     cat /proc/version &amp;gt;&amp;gt; $tempfile&lt;br /&gt;
     cvechecker -b $tempfile &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 	# Run cvechecker against the software list&lt;br /&gt;
     cvechecker -r &amp;gt; $tempfile &amp;gt; /dev/null 2&amp;gt;&amp;amp;1	# Create a report &lt;br /&gt;
     if [ -s &amp;quot;$tempfile&amp;quot; ] ; then			# If exists and non-zero, send it via email	&lt;br /&gt;
      mail $EMAILADMIN -s &amp;quot;CVE Checker&amp;quot; &amp;lt; $tempfile	&lt;br /&gt;
     fi ;&lt;br /&gt;
     rm $tempfile&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In order to make the last rows sent via email, you should configure an smtp server. Widely used is ssmtp.&lt;br /&gt;
This also can be run as cronjob.&lt;br /&gt;
So, you can do the same you did with pullcves: become the cvecheker user and run &amp;quot;crontab -e&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     *       6       *       *       *       /var/cvechecker/run_cvecheck.sh&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Tutorials_and_Howtos&amp;diff=5618</id>
		<title>Tutorials and Howtos</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Tutorials_and_Howtos&amp;diff=5618"/>
		<updated>2011-08-02T09:12:39Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: /* Web Applications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:package_edutainment.svg|left|link=]]&lt;br /&gt;
{{TOC right}}&#039;&#039;&#039;Welcome to Tutorials and Howtos, a place of basic and advanced configuration tasks for your Alpine Linux.&#039;&#039;&#039;&lt;br /&gt;
The tutorials are hands-on and the reader is expected to try and achieve the goals described in each step, possibly with the help of a good examples. The output in one step is the starting point for the following step.&amp;lt;br/&amp;gt;&lt;br /&gt;
Howtos are smaller articles explaining how to perform a particular task with Alpine Linux. We encourage people to send in both complete articles as well as requesting topics to be covered. If you think you have the skills and knowledge to write an Alpine Linux related article please do so on this Wiki. If you want to request a topic, please add your request in this page [[Talk:Tutorials_and_Howtos|Discussion]]. 	&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
* [[Setting up a basic vserver]]&lt;br /&gt;
* [[Setting up Logical Volumes with LVM]]&lt;br /&gt;
* [[Replacing non-Alpine Linux with Alpine remotely]]&lt;br /&gt;
* [[XFCE Setup]]&lt;br /&gt;
* [[Gnome Setup]]&lt;br /&gt;
* [[Enable Serial Console on Boot]]&lt;br /&gt;
* [[Alpine Linux package management#Local_Cache | How to enable APK caching]]&lt;br /&gt;
* [[Installing Alpine on a virtual machine| Installation of Alpine Linux in a virtual machine]]&lt;br /&gt;
* [[Setting up Alpine in a chroot]]&lt;br /&gt;
* [[Upgrading to Edge]]&lt;br /&gt;
* [[Setting up a software raid1 array]]&lt;br /&gt;
* [[Manually editing a existing apkovl]]&lt;br /&gt;
&lt;br /&gt;
== Networking ==&lt;br /&gt;
* [[Configure Networking]]&lt;br /&gt;
* [[Howto Configure a Network Bridge]]&lt;br /&gt;
* [[Howto Configure static routes]]&lt;br /&gt;
* [[Using serial modem]]&lt;br /&gt;
* [[Using HSDPA modem]]&lt;br /&gt;
* [[Using Alpine on Windows domain with IPSEC isolation]]&lt;br /&gt;
* [[Setting up Satellite Internet Connection]]&lt;br /&gt;
* [[Connecting to a wireless accesspoint]]&lt;br /&gt;
* [[Fault Tolerant Routing with Alpine Linux]]&lt;br /&gt;
&lt;br /&gt;
== iSCSI ==&lt;br /&gt;
* [[iSCSI Target and Initiator Configuration]]&lt;br /&gt;
* [[iSCSI Raid and Clustered File Systems]]&lt;br /&gt;
* [[High performance SCST iSCSI Target on Linux software Raid]]&lt;br /&gt;
&lt;br /&gt;
== Network Services ==&lt;br /&gt;
* [[Setting Up Lighttpd With FastCGI]]&lt;br /&gt;
* [[Setting up a OpenVPN-server with Alpine]]&lt;br /&gt;
* [[Setting up Zaptel/Asterisk on Alpine]]&lt;br /&gt;
* [[Setting up Transmission (bittorrent) with Clutch WebUI]]&lt;br /&gt;
* [[Hosting services on Alpine]] &#039;&#039;(This applies to hosting mail, webservices and other services)&#039;&#039;&lt;br /&gt;
** [[Setting up postfix with virtual domains]]&lt;br /&gt;
** [[Protecting your email server with Alpine]]&lt;br /&gt;
** [[Hosting Web/Email services on Alpine]]&lt;br /&gt;
* [[Setting up a ssh-server]]&lt;br /&gt;
* [[Multiple Instances of Services]]&lt;br /&gt;
* [[ISP Mail Server HowTo]] &#039;&#039;(Postfix+PostfixAdmin+DoveCot+Roundcube+ClamAV+Spamd - A full-serivce ISP mail server)&#039;&#039;&lt;br /&gt;
** [[ISP Mail Server Upgrade 2.x]]&lt;br /&gt;
** [[ISP Mail Server 2.x HowTo]] &#039;&#039;(Beta, please test)&#039;&#039;&lt;br /&gt;
* [[Freepbx on Alpine Linux]]&lt;br /&gt;
* [[Apache authentication: NTLM Single Signon]]&lt;br /&gt;
* [[Generating SSL certs with ACF]]&lt;br /&gt;
* [[Changing passwords for ACF]]&lt;br /&gt;
* [[Freeradius Active Directory Integration]]&lt;br /&gt;
* [[High Availability High Performance Web Cache]] &#039;&#039;uCarp + HAProxy for High Availability Services such as Squid web proxy&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Web Applications ==&lt;br /&gt;
* [[2600hz]] &#039;&#039;FreeSWITCH, Asterisk GUI web acces tool.&#039;&#039;&lt;br /&gt;
* [[Awstats]] &#039;&#039;Free log file analyzer.&#039;&#039;&lt;br /&gt;
* [[Drupal]] &#039;&#039;Content Management System (CMS) written in PHP.&#039;&#039;&lt;br /&gt;
* [[EyeOS]] &#039;&#039;Cloud Computing Desktop.&#039;&#039;&lt;br /&gt;
* [[FreePBX_V3]] &#039;&#039;FreeSWITCH, Asterisk GUI web acces tool.&#039;&#039;&lt;br /&gt;
* [[Glpi]] &#039;&#039;Information Resource-Manager.&#039;&#039;&lt;br /&gt;
* [[MediaWiki]] &#039;&#039;Free web-based wiki software application&#039;&#039;&lt;br /&gt;
* [[Pastebin]] &#039;&#039;Pastebin software application&#039;&#039;&lt;br /&gt;
* [[Phpizabi]] &#039;&#039;Social Networking Platform.&#039;&#039;&lt;br /&gt;
* [[PhpPgAdmin]] &#039;&#039;Web-based administration tool for PostgreSQL.&#039;&#039;&lt;br /&gt;
* [[Phpmyadmin]] &#039;&#039;Web-based administration tool for MYSQL.&#039;&#039;&lt;br /&gt;
* [[Redmine]] &#039;&#039;Project management system &#039;&#039;&lt;br /&gt;
* [[Request-Tracker]] &#039;&#039;Ticket system&#039;&#039;&lt;br /&gt;
* [[Roundcube]] &#039;&#039;Webmail system&#039;&#039;&lt;br /&gt;
* [[Statusnet]] &#039;&#039;Microblogging Platform.&#039;&#039;&lt;br /&gt;
* [[Sqstat]] &#039;&#039;Script to look active squid users connections.&#039;&#039;&lt;br /&gt;
* [[Webmin]] &#039;&#039;A web-based interface for Linux system.&#039;&#039;&lt;br /&gt;
* [[WordPress]] &#039;&#039;Web software to create website or blog. &#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Monitoring ==&lt;br /&gt;
* [[Traffic monitoring]] &#039;&#039;(For Alpine Linux firewalls)&#039;&#039;&lt;br /&gt;
* [[Setting up traffic monitoring using rrdtool (and snmp)]]&lt;br /&gt;
* [[Setting up Smokeping]] &#039;&#039;(Smokeping network latency monitoring)&#039;&#039;&lt;br /&gt;
* [[Setting up Cacti]]&lt;br /&gt;
* [[Setting up NRPE daemon]] &#039;&#039;(Performs remote Nagios checks)&#039;&#039;&lt;br /&gt;
* [[Setting up Zabbix]]&lt;br /&gt;
* [[Setting Up Fprobe And Ntop]] &#039;&#039;NetFlow collection and analysis&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Misc ==&lt;br /&gt;
* [[Setting up lm_sensors]]&lt;br /&gt;
* [[Formatting HD/Floppy/Other]]&lt;br /&gt;
* [[Screen on console]]&lt;br /&gt;
* [[Using espeak on Alpine Linux]]&lt;br /&gt;
* [[IPTV How To]]&lt;br /&gt;
* [[Pllua]]&lt;br /&gt;
* [[Error message on boot: Address space collision: host bridge window conflicts with Adaptor ROM]]&lt;br /&gt;
&lt;br /&gt;
== Drafts ==&lt;br /&gt;
Those are not finished yet.&lt;br /&gt;
* [[Install Alpine on coLinux]]&lt;br /&gt;
* [[Using Racoon for Remote Sites]]&lt;br /&gt;
* [[Setting up Transparent Squid Proxy]] &#039;&#039;(Covers Squid proxy and URL Filtering system)&#039;&#039;&lt;br /&gt;
** [[Obtaining user information via SNMP]] &#039;&#039;(Using the Squark Squid authentication helper)&#039;&#039;&lt;br /&gt;
* [[Setting up Streaming an Asterisk Channel]]&lt;br /&gt;
* [[Setting up A Network Monitoring and Inventory System]] &#039;&#039;((Nagios + OpenAudit and related components)&#039;&#039;&lt;br /&gt;
* [[Intrusion Detection using Snort]] &#039;&#039;Installing and configuring Snort and related applications on Alpine 2.0.x&#039;&#039;&lt;br /&gt;
* [[IP Accounting]] &#039;&#039;Installing and configuring pmacct for IP Accounting, Netflow/sFlow collector&#039;&#039;&lt;br /&gt;
* [[Howto Setup a Wireless Access Point]] &#039;&#039;Setting up Secure Wireless AP w/ WPA encryption with bridge to wired network&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Obsolete Docs ==&lt;br /&gt;
Those are candidates for rewriting/removal.&lt;br /&gt;
* [[Bootstrapping Alpine on Soekris net4xxx]]&lt;br /&gt;
* [[Bootstrapping Alpine on PC Engines ALIX.3]]&lt;br /&gt;
* [[Setting up a /var partition on software IDE raid1]]&lt;br /&gt;
* [[Native Harddisk Install]]&lt;br /&gt;
* [[Installing XUbuntu using Alpine boot floppy]]&lt;br /&gt;
* [[Setting up trac wiki]]&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Pastebin&amp;diff=5617</id>
		<title>Pastebin</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Pastebin&amp;diff=5617"/>
		<updated>2011-08-02T09:07:45Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: /* How To Install Your Own Pastebin Service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= How To Install Your Own Pastebin Service =&lt;br /&gt;
&lt;br /&gt;
A quick&#039;n dirty doc about how to install a provate pastebin service.&lt;br /&gt;
&lt;br /&gt;
There are a lot of pastebin service (http://en.wikipedia.org/wiki/Comparison_of_pastebins). We&#039;re going to use the oldest pastebin service, without DB support but only file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* An up-and-running Web server (here are quoted apache, but is also possible to add nginx and lighttpd configuration) with modules:&lt;br /&gt;
* PHP&lt;br /&gt;
* vhosts&lt;br /&gt;
* mod_rewrite (for Apache and lighttpd, or NginxHttpRewriteModule for nginx)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Download Pastebin setup file ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|wget http://pastebin.dixo.net/pastebin.tar.gz}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Web Server Configuration to host pastebin ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Apache&#039;&#039;&#039;&lt;br /&gt;
Unzip the downloaded file in the web server vhosts dir:&lt;br /&gt;
{{&lt;br /&gt;
Cmd|tar -zxvf pastebin.tar.gz -C /var/www/vhosts&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Rename vhosts dir:&lt;br /&gt;
{{&lt;br /&gt;
Cmd|mv /var/www/vhosts/pastebin-0.60 /var/www/vhosts/pastebin&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* Edit /etc/apache/httpd.conf and add the following:&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
                ServerName  pastebin.my.domain&lt;br /&gt;
                DocumentRoot /var/www/vhosts/pastebin/public_html&lt;br /&gt;
                ErrorLog /var/log/apache2/pastebin-error.log&lt;br /&gt;
                CustomLog /var/log/apache2/pastebin-access.log common&lt;br /&gt;
                php_value include_path .:/var/www/vhosts/pastebin/lib&lt;br /&gt;
                php_value register_globals off&lt;br /&gt;
                DirectoryIndex pastebin.php&lt;br /&gt;
                RewriteEngine on&lt;br /&gt;
                RewriteLog /var/log/apache2/pastebin-rewrite.log&lt;br /&gt;
                RewriteRule /([a-z0-9]+)$ /pastebin.php?show=$1 [L]&lt;br /&gt;
        &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;lighttpd&#039;&#039;&#039;&lt;br /&gt;
* Edit lighttpd.conf:&lt;br /&gt;
 $HTTP[&amp;quot;host&amp;quot;] =~ &amp;quot;(^|\.)paste.bin\.com$&amp;quot; {&lt;br /&gt;
    server.document-root = &amp;quot;/var/www/vhosts/pastebin/public_html&amp;quot;&lt;br /&gt;
    accesslog.filename = &amp;quot;/var/log/lighttpd/pastebin/access.log&amp;quot;&lt;br /&gt;
     fastcgi.server = (&lt;br /&gt;
        &amp;quot;.php&amp;quot; =&amp;gt; (&lt;br /&gt;
            &amp;quot;localhost&amp;quot; =&amp;gt; (&lt;br /&gt;
                &amp;quot;bin-path&amp;quot; =&amp;gt; &amp;quot;/usr/bin/php-cgi&amp;quot;,&lt;br /&gt;
                &amp;quot;socket&amp;quot; =&amp;gt; &amp;quot;/tmp/php-pastebin.socket&amp;quot;,&lt;br /&gt;
                &amp;quot;min-procs&amp;quot; =&amp;gt; 1,&lt;br /&gt;
                 &amp;quot;max-procs&amp;quot; =&amp;gt; 2,&lt;br /&gt;
                 &amp;quot;bin-copy-environment&amp;quot; =&amp;gt; (&lt;br /&gt;
                     &amp;quot;PATH&amp;quot;, &amp;quot;SHELL&amp;quot;, &amp;quot;USER&amp;quot;&lt;br /&gt;
                 )&lt;br /&gt;
             )&lt;br /&gt;
         )&lt;br /&gt;
     )&lt;br /&gt;
     compress.cache-dir = &amp;quot;/var/www/cache/pastebin/&amp;quot;&lt;br /&gt;
     url.rewrite-once = (&lt;br /&gt;
         &amp;quot;^/(pastebin.css)&amp;quot; =&amp;gt; &amp;quot;$0&amp;quot;,&lt;br /&gt;
         &amp;quot;^/(pastebin.js)&amp;quot; =&amp;gt; &amp;quot;$0&amp;quot;,&lt;br /&gt;
         &amp;quot;^/diff/(.*)&amp;quot; =&amp;gt; &amp;quot;/pastebin.php?diff=$1&amp;quot;,&lt;br /&gt;
         &amp;quot;^/(.*)&amp;quot; =&amp;gt; &amp;quot;/pastebin.php?show=$1&amp;quot;&lt;br /&gt;
     )&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nginx&#039;&#039;&#039;&lt;br /&gt;
* Edit nginx.conf (this is the significative part).&lt;br /&gt;
 rewrite ^/([a-z0-9]+)$/pastebin.php?show=$1 last;&lt;br /&gt;
&lt;br /&gt;
[[N.B. Nginx and Lighttpd configuration was not tested. These directive give you an idea on how is possibile to implement pastebin on those web servers.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configure pastebin ==&lt;br /&gt;
&lt;br /&gt;
The configuration file is outside the directory &amp;quot;public_html&amp;quot;, but is in &amp;quot;/lib/config&amp;quot; dir.&lt;br /&gt;
&lt;br /&gt;
Copy&#039;&#039;&#039; default.conf.php&#039;&#039;&#039; into file that match your fqdn where pastebin service is hosted (e.g. pastebin.mydomain.com) with .conf.php extension.&lt;br /&gt;
&lt;br /&gt;
In this case, will be: &#039;&#039;&#039;pastebin.mydomain.com.conf.php&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Edit &#039;&#039;&#039;pastebin.mydomain.com.conf.php&#039;&#039;&#039; and modify the following part:&lt;br /&gt;
&lt;br /&gt;
 $CONF[&#039;dbsystem&#039;]=&#039;file&#039;;&lt;br /&gt;
 $CONF[&#039;base_domain_elements&#039;]=2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The others directive are not mandatory, but should be modified according with your needs.&lt;br /&gt;
&lt;br /&gt;
The [[first]] directive mean that the backend must be a file instead of mysql (that is by default).&lt;br /&gt;
&lt;br /&gt;
The [[second]] specify which part of the filename &#039;&#039;&#039;pastebin.mydomain.com.conf.php&#039;&#039;&#039; is the domain name. &lt;br /&gt;
&lt;br /&gt;
In this case the number is 2: mydomain and com.&lt;br /&gt;
&lt;br /&gt;
Now, you have to create the directory that will contain the posts file. &lt;br /&gt;
&lt;br /&gt;
According with &#039;&#039;&#039;db.file.class.php&#039;&#039;&#039; the directory must be &#039;&#039;&#039;$_SERVER[&#039;DOCUMENT_ROOT&#039;].&#039;/../posts/&#039;&#039;&#039; and must be writable by the user which runs webserver daemon.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|mkdir -p /var/www/vhosts/pastebin/posts&lt;br /&gt;
chown apache:apache /var/www/vhosts/pastebin/posts&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Now, restart the web server. Pastebin service should be reachable on pastebin.mydomain.com&lt;br /&gt;
&lt;br /&gt;
[[Pastebin]]&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Pastebin&amp;diff=5616</id>
		<title>Pastebin</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Pastebin&amp;diff=5616"/>
		<updated>2011-08-02T09:05:34Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: /* How To Install Pastebin Service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= How To Install Your Own Pastebin Service =&lt;br /&gt;
&lt;br /&gt;
A quick&#039;n dirty doc about how to install a provate pastebin service.&lt;br /&gt;
&lt;br /&gt;
There are a lot of pastebin service (http://en.wikipedia.org/wiki/Comparison_of_pastebins). We&#039;re going to use the oldest pastebin service, without DB support but only file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* An up-and-running Web server (here are quoted apache, but is also possible to add nginx and lighttpd configuration) with modules:&lt;br /&gt;
* PHP&lt;br /&gt;
* vhosts&lt;br /&gt;
* mod_rewrite (for Apache and lighttpd, or NginxHttpRewriteModule for nginx)&lt;br /&gt;
&lt;br /&gt;
== Download Pastebin setup file ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|wget http://pastebin.dixo.net/pastebin.tar.gz}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Web Server Configuration to host pastebin ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Apache&#039;&#039;&#039;&lt;br /&gt;
Unzip the downloaded file in the web server vhosts dir:&lt;br /&gt;
{{&lt;br /&gt;
Cmd|tar -zxvf pastebin.tar.gz -C /var/www/vhosts&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Rename vhosts dir:&lt;br /&gt;
{{&lt;br /&gt;
Cmd|mv /var/www/vhosts/pastebin-0.60 /var/www/vhosts/pastebin&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* Edit /etc/apache/httpd.conf and add the following:&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
                ServerName  pastebin.my.domain&lt;br /&gt;
                DocumentRoot /var/www/vhosts/pastebin/public_html&lt;br /&gt;
                ErrorLog /var/log/apache2/pastebin-error.log&lt;br /&gt;
                CustomLog /var/log/apache2/pastebin-access.log common&lt;br /&gt;
                php_value include_path .:/var/www/vhosts/pastebin/lib&lt;br /&gt;
                php_value register_globals off&lt;br /&gt;
                DirectoryIndex pastebin.php&lt;br /&gt;
                RewriteEngine on&lt;br /&gt;
                RewriteLog /var/log/apache2/pastebin-rewrite.log&lt;br /&gt;
                RewriteRule /([a-z0-9]+)$ /pastebin.php?show=$1 [L]&lt;br /&gt;
        &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;lighttpd&#039;&#039;&#039;&lt;br /&gt;
* Edit lighttpd.conf:&lt;br /&gt;
 $HTTP[&amp;quot;host&amp;quot;] =~ &amp;quot;(^|\.)paste.bin\.com$&amp;quot; {&lt;br /&gt;
    server.document-root = &amp;quot;/var/www/vhosts/pastebin/public_html&amp;quot;&lt;br /&gt;
    accesslog.filename = &amp;quot;/var/log/lighttpd/pastebin/access.log&amp;quot;&lt;br /&gt;
     fastcgi.server = (&lt;br /&gt;
        &amp;quot;.php&amp;quot; =&amp;gt; (&lt;br /&gt;
            &amp;quot;localhost&amp;quot; =&amp;gt; (&lt;br /&gt;
                &amp;quot;bin-path&amp;quot; =&amp;gt; &amp;quot;/usr/bin/php-cgi&amp;quot;,&lt;br /&gt;
                &amp;quot;socket&amp;quot; =&amp;gt; &amp;quot;/tmp/php-pastebin.socket&amp;quot;,&lt;br /&gt;
                &amp;quot;min-procs&amp;quot; =&amp;gt; 1,&lt;br /&gt;
                 &amp;quot;max-procs&amp;quot; =&amp;gt; 2,&lt;br /&gt;
                 &amp;quot;bin-copy-environment&amp;quot; =&amp;gt; (&lt;br /&gt;
                     &amp;quot;PATH&amp;quot;, &amp;quot;SHELL&amp;quot;, &amp;quot;USER&amp;quot;&lt;br /&gt;
                 )&lt;br /&gt;
             )&lt;br /&gt;
         )&lt;br /&gt;
     )&lt;br /&gt;
     compress.cache-dir = &amp;quot;/var/www/cache/pastebin/&amp;quot;&lt;br /&gt;
     url.rewrite-once = (&lt;br /&gt;
         &amp;quot;^/(pastebin.css)&amp;quot; =&amp;gt; &amp;quot;$0&amp;quot;,&lt;br /&gt;
         &amp;quot;^/(pastebin.js)&amp;quot; =&amp;gt; &amp;quot;$0&amp;quot;,&lt;br /&gt;
         &amp;quot;^/diff/(.*)&amp;quot; =&amp;gt; &amp;quot;/pastebin.php?diff=$1&amp;quot;,&lt;br /&gt;
         &amp;quot;^/(.*)&amp;quot; =&amp;gt; &amp;quot;/pastebin.php?show=$1&amp;quot;&lt;br /&gt;
     )&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nginx&#039;&#039;&#039;&lt;br /&gt;
* Edit nginx.conf (this is the significative part).&lt;br /&gt;
 rewrite ^/([a-z0-9]+)$/pastebin.php?show=$1 last;&lt;br /&gt;
&lt;br /&gt;
[[N.B. Nginx and Lighttpd configuration was not tested. These directive give you an idea on how is possibile to implement pastebin on those web servers.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configure pastebin ==&lt;br /&gt;
&lt;br /&gt;
The configuration file is outside the directory &amp;quot;public_html&amp;quot;, but is in &amp;quot;/lib/config&amp;quot; dir.&lt;br /&gt;
&lt;br /&gt;
Copy&#039;&#039;&#039; default.conf.php&#039;&#039;&#039; into file that match your fqdn where pastebin service is hosted (e.g. pastebin.mydomain.com) with .conf.php extension.&lt;br /&gt;
&lt;br /&gt;
In this case, will be: &#039;&#039;&#039;pastebin.mydomain.com.conf.php&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Edit &#039;&#039;&#039;pastebin.mydomain.com.conf.php&#039;&#039;&#039; and modify the following part:&lt;br /&gt;
&lt;br /&gt;
 $CONF[&#039;dbsystem&#039;]=&#039;file&#039;;&lt;br /&gt;
 $CONF[&#039;base_domain_elements&#039;]=2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The others directive are not mandatory, but should be modified according with your needs.&lt;br /&gt;
&lt;br /&gt;
The [[first]] directive mean that the backend must be a file instead of mysql (that is by default).&lt;br /&gt;
&lt;br /&gt;
The [[second]] specify which part of the filename &#039;&#039;&#039;pastebin.mydomain.com.conf.php&#039;&#039;&#039; is the domain name. &lt;br /&gt;
&lt;br /&gt;
In this case the number is 2: mydomain and com.&lt;br /&gt;
&lt;br /&gt;
Now, you have to create the directory that will contain the posts file. &lt;br /&gt;
&lt;br /&gt;
According with &#039;&#039;&#039;db.file.class.php&#039;&#039;&#039; the directory must be &#039;&#039;&#039;$_SERVER[&#039;DOCUMENT_ROOT&#039;].&#039;/../posts/&#039;&#039;&#039; and must be writable by the user which runs webserver daemon.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|mkdir -p /var/www/vhosts/pastebin/posts&lt;br /&gt;
chown apache:apache /var/www/vhosts/pastebin/posts&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Now, restart the web server. Pastebin service should be reachable on pastebin.mydomain.com&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Pastebin&amp;diff=5615</id>
		<title>Pastebin</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Pastebin&amp;diff=5615"/>
		<updated>2011-08-02T09:05:17Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: /* How To Install Pastebin Service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= How To Install Pastebin Service =&lt;br /&gt;
&lt;br /&gt;
A quick&#039;n dirty doc about how to install a provate pastebin service.&lt;br /&gt;
&lt;br /&gt;
There are a lot of pastebin service (http://en.wikipedia.org/wiki/Comparison_of_pastebins). We&#039;re going to use the oldest pastebin service, without DB support but only file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* An up-and-running Web server (here are quoted apache, but is also possible to add nginx and lighttpd configuration) with modules:&lt;br /&gt;
* PHP&lt;br /&gt;
* vhosts&lt;br /&gt;
* mod_rewrite (for Apache and lighttpd, or NginxHttpRewriteModule for nginx)&lt;br /&gt;
&lt;br /&gt;
== Download Pastebin setup file ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|wget http://pastebin.dixo.net/pastebin.tar.gz}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Web Server Configuration to host pastebin ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Apache&#039;&#039;&#039;&lt;br /&gt;
Unzip the downloaded file in the web server vhosts dir:&lt;br /&gt;
{{&lt;br /&gt;
Cmd|tar -zxvf pastebin.tar.gz -C /var/www/vhosts&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Rename vhosts dir:&lt;br /&gt;
{{&lt;br /&gt;
Cmd|mv /var/www/vhosts/pastebin-0.60 /var/www/vhosts/pastebin&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* Edit /etc/apache/httpd.conf and add the following:&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
                ServerName  pastebin.my.domain&lt;br /&gt;
                DocumentRoot /var/www/vhosts/pastebin/public_html&lt;br /&gt;
                ErrorLog /var/log/apache2/pastebin-error.log&lt;br /&gt;
                CustomLog /var/log/apache2/pastebin-access.log common&lt;br /&gt;
                php_value include_path .:/var/www/vhosts/pastebin/lib&lt;br /&gt;
                php_value register_globals off&lt;br /&gt;
                DirectoryIndex pastebin.php&lt;br /&gt;
                RewriteEngine on&lt;br /&gt;
                RewriteLog /var/log/apache2/pastebin-rewrite.log&lt;br /&gt;
                RewriteRule /([a-z0-9]+)$ /pastebin.php?show=$1 [L]&lt;br /&gt;
        &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;lighttpd&#039;&#039;&#039;&lt;br /&gt;
* Edit lighttpd.conf:&lt;br /&gt;
 $HTTP[&amp;quot;host&amp;quot;] =~ &amp;quot;(^|\.)paste.bin\.com$&amp;quot; {&lt;br /&gt;
    server.document-root = &amp;quot;/var/www/vhosts/pastebin/public_html&amp;quot;&lt;br /&gt;
    accesslog.filename = &amp;quot;/var/log/lighttpd/pastebin/access.log&amp;quot;&lt;br /&gt;
     fastcgi.server = (&lt;br /&gt;
        &amp;quot;.php&amp;quot; =&amp;gt; (&lt;br /&gt;
            &amp;quot;localhost&amp;quot; =&amp;gt; (&lt;br /&gt;
                &amp;quot;bin-path&amp;quot; =&amp;gt; &amp;quot;/usr/bin/php-cgi&amp;quot;,&lt;br /&gt;
                &amp;quot;socket&amp;quot; =&amp;gt; &amp;quot;/tmp/php-pastebin.socket&amp;quot;,&lt;br /&gt;
                &amp;quot;min-procs&amp;quot; =&amp;gt; 1,&lt;br /&gt;
                 &amp;quot;max-procs&amp;quot; =&amp;gt; 2,&lt;br /&gt;
                 &amp;quot;bin-copy-environment&amp;quot; =&amp;gt; (&lt;br /&gt;
                     &amp;quot;PATH&amp;quot;, &amp;quot;SHELL&amp;quot;, &amp;quot;USER&amp;quot;&lt;br /&gt;
                 )&lt;br /&gt;
             )&lt;br /&gt;
         )&lt;br /&gt;
     )&lt;br /&gt;
     compress.cache-dir = &amp;quot;/var/www/cache/pastebin/&amp;quot;&lt;br /&gt;
     url.rewrite-once = (&lt;br /&gt;
         &amp;quot;^/(pastebin.css)&amp;quot; =&amp;gt; &amp;quot;$0&amp;quot;,&lt;br /&gt;
         &amp;quot;^/(pastebin.js)&amp;quot; =&amp;gt; &amp;quot;$0&amp;quot;,&lt;br /&gt;
         &amp;quot;^/diff/(.*)&amp;quot; =&amp;gt; &amp;quot;/pastebin.php?diff=$1&amp;quot;,&lt;br /&gt;
         &amp;quot;^/(.*)&amp;quot; =&amp;gt; &amp;quot;/pastebin.php?show=$1&amp;quot;&lt;br /&gt;
     )&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nginx&#039;&#039;&#039;&lt;br /&gt;
* Edit nginx.conf (this is the significative part).&lt;br /&gt;
 rewrite ^/([a-z0-9]+)$/pastebin.php?show=$1 last;&lt;br /&gt;
&lt;br /&gt;
[[N.B. Nginx and Lighttpd configuration was not tested. These directive give you an idea on how is possibile to implement pastebin on those web servers.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configure pastebin ==&lt;br /&gt;
&lt;br /&gt;
The configuration file is outside the directory &amp;quot;public_html&amp;quot;, but is in &amp;quot;/lib/config&amp;quot; dir.&lt;br /&gt;
&lt;br /&gt;
Copy&#039;&#039;&#039; default.conf.php&#039;&#039;&#039; into file that match your fqdn where pastebin service is hosted (e.g. pastebin.mydomain.com) with .conf.php extension.&lt;br /&gt;
&lt;br /&gt;
In this case, will be: &#039;&#039;&#039;pastebin.mydomain.com.conf.php&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Edit &#039;&#039;&#039;pastebin.mydomain.com.conf.php&#039;&#039;&#039; and modify the following part:&lt;br /&gt;
&lt;br /&gt;
 $CONF[&#039;dbsystem&#039;]=&#039;file&#039;;&lt;br /&gt;
 $CONF[&#039;base_domain_elements&#039;]=2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The others directive are not mandatory, but should be modified according with your needs.&lt;br /&gt;
&lt;br /&gt;
The [[first]] directive mean that the backend must be a file instead of mysql (that is by default).&lt;br /&gt;
&lt;br /&gt;
The [[second]] specify which part of the filename &#039;&#039;&#039;pastebin.mydomain.com.conf.php&#039;&#039;&#039; is the domain name. &lt;br /&gt;
&lt;br /&gt;
In this case the number is 2: mydomain and com.&lt;br /&gt;
&lt;br /&gt;
Now, you have to create the directory that will contain the posts file. &lt;br /&gt;
&lt;br /&gt;
According with &#039;&#039;&#039;db.file.class.php&#039;&#039;&#039; the directory must be &#039;&#039;&#039;$_SERVER[&#039;DOCUMENT_ROOT&#039;].&#039;/../posts/&#039;&#039;&#039; and must be writable by the user which runs webserver daemon.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|mkdir -p /var/www/vhosts/pastebin/posts&lt;br /&gt;
chown apache:apache /var/www/vhosts/pastebin/posts&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Now, restart the web server. Pastebin service should be reachable on pastebin.mydomain.com&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Pastebin&amp;diff=5614</id>
		<title>Pastebin</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Pastebin&amp;diff=5614"/>
		<updated>2011-08-02T09:04:37Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: /* How To Install Pastebin Service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= How To Install Pastebin Service =&lt;br /&gt;
&lt;br /&gt;
A quick&#039;n dirty doc about how to install a provate pastebin service.&lt;br /&gt;
&lt;br /&gt;
There are a lot of pastebin service (http://en.wikipedia.org/wiki/Comparison_of_pastebins). We&#039;re going to use the oldest pastebin service, without DB support but only file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* An up-and-running Web server (here are quoted apache, but is also possible to add nginx and lighttpd configuration) with modules:&lt;br /&gt;
* PHP&lt;br /&gt;
* vhosts&lt;br /&gt;
* mod_rewrite (for Apache and lighttpd, or NginxHttpRewriteModule for nginx)&lt;br /&gt;
&lt;br /&gt;
== Download Pastebin setup file ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|wget http://pastebin.dixo.net/pastebin.tar.gz}}&lt;br /&gt;
&lt;br /&gt;
== Web Server Configuration to host pastebin ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Apache&#039;&#039;&#039;&lt;br /&gt;
Unzip the downloaded file in the web server vhosts dir:&lt;br /&gt;
{{&lt;br /&gt;
Cmd|tar -zxvf pastebin.tar.gz -C /var/www/vhosts&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Rename vhosts dir:&lt;br /&gt;
{{&lt;br /&gt;
Cmd|mv /var/www/vhosts/pastebin-0.60 /var/www/vhosts/pastebin&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* Edit /etc/apache/httpd.conf and add the following:&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
                ServerName  pastebin.my.domain&lt;br /&gt;
                DocumentRoot /var/www/vhosts/pastebin/public_html&lt;br /&gt;
                ErrorLog /var/log/apache2/pastebin-error.log&lt;br /&gt;
                CustomLog /var/log/apache2/pastebin-access.log common&lt;br /&gt;
                php_value include_path .:/var/www/vhosts/pastebin/lib&lt;br /&gt;
                php_value register_globals off&lt;br /&gt;
                DirectoryIndex pastebin.php&lt;br /&gt;
                RewriteEngine on&lt;br /&gt;
                RewriteLog /var/log/apache2/pastebin-rewrite.log&lt;br /&gt;
                RewriteRule /([a-z0-9]+)$ /pastebin.php?show=$1 [L]&lt;br /&gt;
        &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;lighttpd&#039;&#039;&#039;&lt;br /&gt;
* Edit lighttpd.conf:&lt;br /&gt;
 $HTTP[&amp;quot;host&amp;quot;] =~ &amp;quot;(^|\.)paste.bin\.com$&amp;quot; {&lt;br /&gt;
    server.document-root = &amp;quot;/var/www/vhosts/pastebin/public_html&amp;quot;&lt;br /&gt;
    accesslog.filename = &amp;quot;/var/log/lighttpd/pastebin/access.log&amp;quot;&lt;br /&gt;
     fastcgi.server = (&lt;br /&gt;
        &amp;quot;.php&amp;quot; =&amp;gt; (&lt;br /&gt;
            &amp;quot;localhost&amp;quot; =&amp;gt; (&lt;br /&gt;
                &amp;quot;bin-path&amp;quot; =&amp;gt; &amp;quot;/usr/bin/php-cgi&amp;quot;,&lt;br /&gt;
                &amp;quot;socket&amp;quot; =&amp;gt; &amp;quot;/tmp/php-pastebin.socket&amp;quot;,&lt;br /&gt;
                &amp;quot;min-procs&amp;quot; =&amp;gt; 1,&lt;br /&gt;
                 &amp;quot;max-procs&amp;quot; =&amp;gt; 2,&lt;br /&gt;
                 &amp;quot;bin-copy-environment&amp;quot; =&amp;gt; (&lt;br /&gt;
                     &amp;quot;PATH&amp;quot;, &amp;quot;SHELL&amp;quot;, &amp;quot;USER&amp;quot;&lt;br /&gt;
                 )&lt;br /&gt;
             )&lt;br /&gt;
         )&lt;br /&gt;
     )&lt;br /&gt;
     compress.cache-dir = &amp;quot;/var/www/cache/pastebin/&amp;quot;&lt;br /&gt;
     url.rewrite-once = (&lt;br /&gt;
         &amp;quot;^/(pastebin.css)&amp;quot; =&amp;gt; &amp;quot;$0&amp;quot;,&lt;br /&gt;
         &amp;quot;^/(pastebin.js)&amp;quot; =&amp;gt; &amp;quot;$0&amp;quot;,&lt;br /&gt;
         &amp;quot;^/diff/(.*)&amp;quot; =&amp;gt; &amp;quot;/pastebin.php?diff=$1&amp;quot;,&lt;br /&gt;
         &amp;quot;^/(.*)&amp;quot; =&amp;gt; &amp;quot;/pastebin.php?show=$1&amp;quot;&lt;br /&gt;
     )&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nginx&#039;&#039;&#039;&lt;br /&gt;
* Edit nginx.conf (this is the significative part).&lt;br /&gt;
 rewrite ^/([a-z0-9]+)$/pastebin.php?show=$1 last;&lt;br /&gt;
&lt;br /&gt;
[[N.B. Nginx and Lighttpd configuration was not tested. These directive give you an idea on how is possibile to implement pastebin on those web servers.]]&lt;br /&gt;
&lt;br /&gt;
== Configure pastebin ==&lt;br /&gt;
&lt;br /&gt;
The configuration file is outside the directory &amp;quot;public_html&amp;quot;, but is in &amp;quot;/lib/config&amp;quot; dir.&lt;br /&gt;
&lt;br /&gt;
Copy&#039;&#039;&#039; default.conf.php&#039;&#039;&#039; into file that match your fqdn where pastebin service is hosted (e.g. pastebin.mydomain.com) with .conf.php extension.&lt;br /&gt;
&lt;br /&gt;
In this case, will be: &#039;&#039;&#039;pastebin.mydomain.com.conf.php&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Edit &#039;&#039;&#039;pastebin.mydomain.com.conf.php&#039;&#039;&#039; and modify the following part:&lt;br /&gt;
&lt;br /&gt;
 $CONF[&#039;dbsystem&#039;]=&#039;file&#039;;&lt;br /&gt;
 $CONF[&#039;base_domain_elements&#039;]=2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The others directive are not mandatory, but should be modified according with your needs.&lt;br /&gt;
&lt;br /&gt;
The [[first]] directive mean that the backend must be a file instead of mysql (that is by default).&lt;br /&gt;
&lt;br /&gt;
The [[second]] specify which part of the filename &#039;&#039;&#039;pastebin.mydomain.com.conf.php&#039;&#039;&#039; is the domain name. &lt;br /&gt;
&lt;br /&gt;
In this case the number is 2: mydomain and com.&lt;br /&gt;
&lt;br /&gt;
Now, you have to create the directory that will contain the posts file. &lt;br /&gt;
&lt;br /&gt;
According with &#039;&#039;&#039;db.file.class.php&#039;&#039;&#039; the directory must be &#039;&#039;&#039;$_SERVER[&#039;DOCUMENT_ROOT&#039;].&#039;/../posts/&#039;&#039;&#039; and must be writable by the user which runs webserver daemon.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|mkdir -p /var/www/vhosts/pastebin/posts&lt;br /&gt;
chown apache:apache /var/www/vhosts/pastebin/posts&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Now, restart the web server. Pastebin service should be reachable on pastebin.mydomain.com&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Pastebin&amp;diff=5613</id>
		<title>Pastebin</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Pastebin&amp;diff=5613"/>
		<updated>2011-08-02T09:03:54Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: /* How To Install Pastebin Service */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= How To Install Pastebin Service =&lt;br /&gt;
&lt;br /&gt;
A quick&#039;n dirty doc about how to install a provate pastebin service.&lt;br /&gt;
&lt;br /&gt;
There are a lot of pastebin service (http://en.wikipedia.org/wiki/Comparison_of_pastebins). We&#039;re going to use the oldest pastebin service, without DB support but only file.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* An up-and-running Web server (here are quoted apache, but is also possible to add nginx and lighttpd configuration) with modules:&lt;br /&gt;
* PHP&lt;br /&gt;
* vhosts&lt;br /&gt;
* mod_rewrite (for Apache and lighttpd, or NginxHttpRewriteModule for nginx)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Download Pastebin setup file ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|wget http://pastebin.dixo.net/pastebin.tar.gz}}&lt;br /&gt;
&lt;br /&gt;
== Web Server Configuration to host pastebin ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Apache&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Unzip the downloaded file in the web server vhosts dir:&lt;br /&gt;
{{&lt;br /&gt;
Cmd|tar -zxvf pastebin.tar.gz -C /var/www/vhosts&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Rename vhosts dir:&lt;br /&gt;
{{&lt;br /&gt;
Cmd|mv /var/www/vhosts/pastebin-0.60 /var/www/vhosts/pastebin&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* Edit /etc/apache/httpd.conf and add the following:&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
                ServerName  pastebin.my.domain&lt;br /&gt;
                DocumentRoot /var/www/vhosts/pastebin/public_html&lt;br /&gt;
                ErrorLog /var/log/apache2/pastebin-error.log&lt;br /&gt;
                CustomLog /var/log/apache2/pastebin-access.log common&lt;br /&gt;
                php_value include_path .:/var/www/vhosts/pastebin/lib&lt;br /&gt;
                php_value register_globals off&lt;br /&gt;
                DirectoryIndex pastebin.php&lt;br /&gt;
                RewriteEngine on&lt;br /&gt;
                RewriteLog /var/log/apache2/pastebin-rewrite.log&lt;br /&gt;
                RewriteRule /([a-z0-9]+)$ /pastebin.php?show=$1 [L]&lt;br /&gt;
        &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;lighttpd&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Edit lighttpd.conf:&lt;br /&gt;
 $HTTP[&amp;quot;host&amp;quot;] =~ &amp;quot;(^|\.)paste.bin\.com$&amp;quot; {&lt;br /&gt;
    server.document-root = &amp;quot;/var/www/vhosts/pastebin/public_html&amp;quot;&lt;br /&gt;
    accesslog.filename = &amp;quot;/var/log/lighttpd/pastebin/access.log&amp;quot;&lt;br /&gt;
     fastcgi.server = (&lt;br /&gt;
        &amp;quot;.php&amp;quot; =&amp;gt; (&lt;br /&gt;
            &amp;quot;localhost&amp;quot; =&amp;gt; (&lt;br /&gt;
                &amp;quot;bin-path&amp;quot; =&amp;gt; &amp;quot;/usr/bin/php-cgi&amp;quot;,&lt;br /&gt;
                &amp;quot;socket&amp;quot; =&amp;gt; &amp;quot;/tmp/php-pastebin.socket&amp;quot;,&lt;br /&gt;
                &amp;quot;min-procs&amp;quot; =&amp;gt; 1,&lt;br /&gt;
                 &amp;quot;max-procs&amp;quot; =&amp;gt; 2,&lt;br /&gt;
                 &amp;quot;bin-copy-environment&amp;quot; =&amp;gt; (&lt;br /&gt;
                     &amp;quot;PATH&amp;quot;, &amp;quot;SHELL&amp;quot;, &amp;quot;USER&amp;quot;&lt;br /&gt;
                 )&lt;br /&gt;
             )&lt;br /&gt;
         )&lt;br /&gt;
     )&lt;br /&gt;
     compress.cache-dir = &amp;quot;/var/www/cache/pastebin/&amp;quot;&lt;br /&gt;
     url.rewrite-once = (&lt;br /&gt;
         &amp;quot;^/(pastebin.css)&amp;quot; =&amp;gt; &amp;quot;$0&amp;quot;,&lt;br /&gt;
         &amp;quot;^/(pastebin.js)&amp;quot; =&amp;gt; &amp;quot;$0&amp;quot;,&lt;br /&gt;
         &amp;quot;^/diff/(.*)&amp;quot; =&amp;gt; &amp;quot;/pastebin.php?diff=$1&amp;quot;,&lt;br /&gt;
         &amp;quot;^/(.*)&amp;quot; =&amp;gt; &amp;quot;/pastebin.php?show=$1&amp;quot;&lt;br /&gt;
     )&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Nginx&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Edit nginx.conf (this is the significative part).&lt;br /&gt;
 rewrite ^/([a-z0-9]+)$/pastebin.php?show=$1 last;&lt;br /&gt;
&lt;br /&gt;
[[N.B. Nginx and Lighttpd configuration was not tested. These directive give you an idea on how is possibile to implement pastebin on those web servers.]]&lt;br /&gt;
&lt;br /&gt;
== Configure pastebin ==&lt;br /&gt;
&lt;br /&gt;
The configuration file is outside the directory &amp;quot;public_html&amp;quot;, but is in &amp;quot;/lib/config&amp;quot; dir.&lt;br /&gt;
&lt;br /&gt;
Copy&#039;&#039;&#039; default.conf.php&#039;&#039;&#039; into file that match your fqdn where pastebin service is hosted (e.g. pastebin.mydomain.com) with .conf.php extension.&lt;br /&gt;
&lt;br /&gt;
In this case, will be: &#039;&#039;&#039;pastebin.mydomain.com.conf.php&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Edit &#039;&#039;&#039;pastebin.mydomain.com.conf.php&#039;&#039;&#039; and modify the following part:&lt;br /&gt;
&lt;br /&gt;
 $CONF[&#039;dbsystem&#039;]=&#039;file&#039;;&lt;br /&gt;
 $CONF[&#039;base_domain_elements&#039;]=2;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The others directive are not mandatory, but should be modified according with your needs.&lt;br /&gt;
&lt;br /&gt;
The [[first]] directive mean that the backend must be a file instead of mysql (that is by default).&lt;br /&gt;
&lt;br /&gt;
The [[second]] specify which part of the filename &#039;&#039;&#039;pastebin.mydomain.com.conf.php&#039;&#039;&#039; is the domain name. &lt;br /&gt;
&lt;br /&gt;
In this case the number is 2: mydomain and com.&lt;br /&gt;
&lt;br /&gt;
Now, you have to create the directory that will contain the posts file. &lt;br /&gt;
&lt;br /&gt;
According with &#039;&#039;&#039;db.file.class.php&#039;&#039;&#039; the directory must be &#039;&#039;&#039;$_SERVER[&#039;DOCUMENT_ROOT&#039;].&#039;/../posts/&#039;&#039;&#039; and must be writable by the user which runs webserver daemon.&lt;br /&gt;
&lt;br /&gt;
{{Cmd|mkdir -p /var/www/vhosts/pastebin/posts&lt;br /&gt;
chown apache:apache /var/www/vhosts/pastebin/posts&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Now, restart the web server. Pastebin service should be reachable on pastebin.mydomain.com&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
	<entry>
		<id>https://wiki.alpinelinux.org/w/index.php?title=Pastebin&amp;diff=5612</id>
		<title>Pastebin</title>
		<link rel="alternate" type="text/html" href="https://wiki.alpinelinux.org/w/index.php?title=Pastebin&amp;diff=5612"/>
		<updated>2011-08-02T07:59:22Z</updated>

		<summary type="html">&lt;p&gt;Fcolista: Created page with &amp;quot;= How To Install Pastebin Service =  A quick&amp;#039;n dirty doc about how to install a provate pastebin service.  There are a lot of pastebin service (http://en.wikipedia.org/wiki/Compa...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= How To Install Pastebin Service =&lt;br /&gt;
&lt;br /&gt;
A quick&#039;n dirty doc about how to install a provate pastebin service.&lt;br /&gt;
&lt;br /&gt;
There are a lot of pastebin service (http://en.wikipedia.org/wiki/Comparison_of_pastebins). We&#039;re going to use the oldest pastebin service.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Requirements:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* An up-and-running Web server (here are quoted apache, nginx and lighttpd configuration) with modules:&lt;br /&gt;
* PHP&lt;br /&gt;
* vhosts&lt;br /&gt;
* mod_rewrite (for Apache and lighttpd, or NginxHttpRewriteModule for nginx)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Download Pastebin setup file ==&lt;br /&gt;
&lt;br /&gt;
{{Cmd|wget http://pastebin.dixo.net/pastebin.tar.gz}}&lt;br /&gt;
&lt;br /&gt;
== Web Server Configuration to host pastebin ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Apache&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Unzip the downloaded file in the apache vhosts dir:&lt;br /&gt;
{{&lt;br /&gt;
Cmd|tar -zxvf pastebin.tar.gz -C /var/www/vhosts&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Rename vhosts dir:&lt;br /&gt;
{{&lt;br /&gt;
Cmd|mv /var/www/vhosts/pastebin-0.60 /var/www/vhosts/pastebin&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* Edit /etc/apache/httpd.conf and add the following:&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
                ServerName  pastebin.my.domain&lt;br /&gt;
                DocumentRoot /var/www/vhosts/pastebin/public_html&lt;br /&gt;
                ErrorLog /var/log/apache2/pastebin-error.log&lt;br /&gt;
                CustomLog /var/log/apache2/pastebin-access.log common&lt;br /&gt;
                php_value include_path .:/var/www/vhosts/pastebin/lib&lt;br /&gt;
                php_value register_globals off&lt;br /&gt;
                DirectoryIndex pastebin.php&lt;br /&gt;
                RewriteEngine on&lt;br /&gt;
                RewriteLog /var/log/apache2/pastebin-rewrite.log&lt;br /&gt;
                RewriteRule /([a-z0-9]+)$ /pastebin.php?show=$1 [L]&lt;br /&gt;
        &amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nginx&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Fcolista</name></author>
	</entry>
</feed>