<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://maemo.octonezd.me/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=93.200.111.117</id>
	<title>Maemo Wiki Mirror - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://maemo.octonezd.me/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=93.200.111.117"/>
	<link rel="alternate" type="text/html" href="https://maemo.octonezd.me/index.php/Special:Contributions/93.200.111.117"/>
	<updated>2026-04-22T03:21:41Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://maemo.octonezd.me/index.php?title=Migrating_to_Community-driven_Infrastructure&amp;diff=25885</id>
		<title>Migrating to Community-driven Infrastructure</title>
		<link rel="alternate" type="text/html" href="https://maemo.octonezd.me/index.php?title=Migrating_to_Community-driven_Infrastructure&amp;diff=25885"/>
		<updated>2013-05-03T20:46:26Z</updated>

		<summary type="html">&lt;p&gt;93.200.111.117: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
[up to date as of 2013-02-08]&lt;br /&gt;
&lt;br /&gt;
Albeit Nokia&#039;s plans about discontinuation of maemo support been known since spring 2012, Nokia gave &amp;quot;Go&amp;quot; to Nemein (service provider on behalf of Nokia) for the real migration work not earlier than 2 weeks before christmas 2012.&lt;br /&gt;
&lt;br /&gt;
As of January, 18th 2013 the *.maemo.org infrastructure has been consolidated from a 20+ physical servers (aka &amp;quot;irons&amp;quot;) to current config and completely migrated to new locations independant of Nokia servers. This task been accomplished by Nemein. Talk.maemo.org forum been integrated with the other infra, many thanks to Nemein for donating the VM for that. Also many thanks to Nemein for this incredible piece of work done during times when others (as well as the guys there) usually are already away for winter holidays.&lt;br /&gt;
&lt;br /&gt;
The current setup (see below) consists of around 10 Virtual Machines hosted by Nemein on their xen-grid. This is an interim solution. Nokia paid Nemein for this consolidation/migration and hosting until end of February.&lt;br /&gt;
&lt;br /&gt;
Handing over control of servers still pending, right now (2013-01-30) it&#039;s still Nemein and affiliates to control that infra. &lt;br /&gt;
&lt;br /&gt;
Transfer of control over (*.)maemo.org DNS entries (&amp;quot;the domain&amp;quot;) is still being negotiated between Nokia and HiFo, all DNS changes done so far been done by Nokia dnsmaster on Nemein&#039;s request &lt;br /&gt;
&lt;br /&gt;
The plans of council and HiFo board so far are: kindly ask Nemein to have  *.maemo.org nicely bundled. We hope for this setup to be free of major known bugs (I.E. autobuilder working, repository working albeit maybe slow) when Nemein hands us the package.&lt;br /&gt;
&lt;br /&gt;
[2013-02-08] Negotiations about direct migration to one of our 3 options (see below) are ongoing.&lt;br /&gt;
&lt;br /&gt;
===further plans, state of migration===&lt;br /&gt;
Further plans are to migrate again to some hosted root servers, either on a sponsor like http://osuosl.org/about-osuosl or to our own stuff we may rent from e.g. Hetzner.&lt;br /&gt;
&lt;br /&gt;
[2013-02-08] currently we&#039;re in negotiations about 3 possible ways into future hosting:&lt;br /&gt;
* osuosl (could provide VM or rootservers or CoLo [UPS server shipping: 48h:1200EUR, 7d:630EUR, +customs])&lt;br /&gt;
* IPHH, a ISP in Hamburg. Falk contacted them and they are willing to offer CoLo basically free of charge. Of course we will put their name on our maemo.org frontpage to give due credit. HW service will be done by Falk. (costs ~300EUR for setup and HW upgrade, plus 50..300EUR for shipping the iron to Hamburg)&lt;br /&gt;
* get own paid rootservers, like 2 of http://www.hetzner.de/en/hosting/produkte_rootserver/ex10 (costs ~300EUR/month, 400EUR setup)&lt;br /&gt;
Depending on option chosen, we might or might not keep the SuperMicro.&lt;br /&gt;
&lt;br /&gt;
[2013-02-17] Hildon Foundation board has agreed on following IPHH if the contract is good and keeping OSUOSL open as an alternative.  Sending iron to IPHH on 2013-02-18/19, and also negotiating with OSUOSL about how a possible migration to them would look like so we get a decent checklist in case we need it.&lt;br /&gt;
&lt;br /&gt;
Falk&#039;s mail forwarded form IPHH to HiFo:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Hi everyone, &lt;br /&gt;
&lt;br /&gt;
these are the details, what IPHH is willing to offer us. &lt;br /&gt;
&lt;br /&gt;
Best regards, &lt;br /&gt;
&lt;br /&gt;
Falk &lt;br /&gt;
&lt;br /&gt;
Begin forwarded message:&lt;br /&gt;
&lt;br /&gt;
&amp;gt; From: Rene Sasse &amp;lt;support@iphh.xxx&amp;gt;&lt;br /&gt;
&amp;gt; Subject: [IPHH #442659] Re: maemo.org&lt;br /&gt;
&amp;gt; Date: 18. Februar 2013 11:08:33 MEZ&lt;br /&gt;
&amp;gt; To: falk@fourecks.xxx&lt;br /&gt;
&amp;gt; Cc: joerg@openmoko.xxx&lt;br /&gt;
&amp;gt; Reply-To: support@iphh.xxx&lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;gt; Falk,&lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;gt; IPHH offers the following services to Hildon Foundation for one year free of &lt;br /&gt;
&amp;gt; charge: &lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;gt; * Colocation/electricity for the following devices: &lt;br /&gt;
&amp;gt; - 1 Server (2RU)&lt;br /&gt;
&amp;gt; - 1 Switch (1RU) &lt;br /&gt;
&amp;gt; * 1 100MBit/s Uplink Port&lt;br /&gt;
&amp;gt; * A /27 IPv4 Network &lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;gt; This offer is valid for one year and has to be discussed for renewal after 11 &lt;br /&gt;
&amp;gt; month.&lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;gt; Legal Contact will be: &lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;gt; Hildon Foundation&lt;br /&gt;
&amp;gt; 120 West 10th Street, Erie, PA, 16501, USA&lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;gt; Technical Contact will be: &lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;gt; Falk Stern (FS7182-RIPE)&lt;br /&gt;
&amp;gt; Rathmann-Cohrs-Straße 12, 21357 Bardowick, Germany &lt;br /&gt;
&amp;gt; Mobile: +49-160-71560xx&lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;gt; best regards&lt;br /&gt;
&amp;gt; Rene&lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;gt; -- &lt;br /&gt;
&amp;gt; Rene Sasse                           E-Mail: support@iphh.xxx&lt;br /&gt;
&amp;gt; Technical Consultant                 Tel: +49 (0)40 374919-xx&lt;br /&gt;
&amp;gt; IPHH Internet Port Hamburg GmbH      Fax: +49 (0)40 374919-xx&lt;br /&gt;
&amp;gt; Wendenstrasse 408                    AG Hamburg, HRB 76071&lt;br /&gt;
&amp;gt; D-20537 Hamburg                      Geschaeftsfuehrung: Axel G. Kroeger--7E94C7404EC25FD69CC85C3653348297&lt;br /&gt;
&amp;gt; &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Iron to move form:  ( http://nemein.com/fi/ )&lt;br /&gt;
 Nemein Oy&lt;br /&gt;
 tel. +358 20-198 6030&lt;br /&gt;
 Vilhonvuorenkatu 11 D, 8 krs&lt;br /&gt;
 00500 Helsinki, FINLAND&lt;br /&gt;
 FIN-1647219-2&lt;br /&gt;
    support AT nemein.com&lt;br /&gt;
&lt;br /&gt;
to ( http://www.iphh.net/en/contact.html )&lt;br /&gt;
  IPHH Internet Port Hamburg GmbH&lt;br /&gt;
  #444615&lt;br /&gt;
  Wendenstrasse 408&lt;br /&gt;
  20537 Hamburg&lt;br /&gt;
  Germany&lt;br /&gt;
 T : +49 40 37 49 19-0&lt;br /&gt;
 F : +49 40 37 49 19-29&lt;br /&gt;
 E : info@iphh.net&lt;br /&gt;
&lt;br /&gt;
Package details:&lt;br /&gt;
 size &lt;br /&gt;
   x: 100cm&lt;br /&gt;
   y: 66cm&lt;br /&gt;
   z: 28cm&lt;br /&gt;
 weight: ~40kg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Shipping accomplished:&lt;br /&gt;
 Shipment number 1139212793&lt;br /&gt;
 	 Status from Wed, 20.02.2013 10:57 hours	 Delivered - signed for by Herr POLROK*&lt;br /&gt;
 	Recipient	TPHH&lt;br /&gt;
 	Delivered on	Herr POLROK*&lt;br /&gt;
via DHL account provided by Nokia/Pekka (many thanks!) on 2013-02-19. &lt;br /&gt;
Courtesy Aslan and Eero of Nemein.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Hosting migration timing plan: &lt;br /&gt;
 https://docs.google.com/spreadsheet/ccc?key=0AuQnrvWRbTtzdFhERzlDbEp0eVNQQTdfNWpQbzdIT0E&amp;amp;usp=sharing&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Alternatives - however obvious - for the above plans have been discussed with Nemein and HiFo and are not feasible. E.G. there was no way we could get the money instead of the server iron hardware. Sustaining the current xen-grid based VM hosting would be ~1500EUR per month plus a basically not evadable 2200EUR on top for maintenace. We want to switch away from that by all means, thus the 2nd migration.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
This page is intended as a central place where status and other operational information can be gathered.&lt;br /&gt;
&lt;br /&gt;
=== Plan for migration / Timeline  [2013-03-15]===&lt;br /&gt;
&lt;br /&gt;
* Friday, 22.2. (falk)&lt;br /&gt;
** Rack Hardware @ IPHH - Hardware is racked &lt;br /&gt;
** Install base system (CentOS 6.3 with patches from xes)&lt;br /&gt;
&lt;br /&gt;
* Saturday, 23.2. (xes/falk)&lt;br /&gt;
** Start migrating repository.m.o &lt;br /&gt;
** Start migrating VMs with static data&lt;br /&gt;
&lt;br /&gt;
* ... (hidden DNS master set up)&lt;br /&gt;
** sync databases, switch DNS entries&lt;br /&gt;
** DNS switched [Nokia] to new IPs on 2013-03-14 1700UTC. Final sync established 1900. since then machines up and running on *new*&lt;br /&gt;
&lt;br /&gt;
VMs we need to migrate: &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Name !! Disk Size !! Location of act. instance !! _migrated? !! _Comments on *new* instance&lt;br /&gt;
|+&lt;br /&gt;
| static || 30G || nemein || synced+up || works&lt;br /&gt;
|+&lt;br /&gt;
| wiki || 20G || nemein || synced+up || works&lt;br /&gt;
|+&lt;br /&gt;
| repository || 900G || nemein || synced+up || We need to check the disk size, this might be too big for current hw, maybe split tablets-dev off.&lt;br /&gt;
|+&lt;br /&gt;
| mail || 20G || nemein || synced+up || also has lists&lt;br /&gt;
|+&lt;br /&gt;
| scratchbox || 100G || iphh || setup! || will be setup new&lt;br /&gt;
|+&lt;br /&gt;
| vcs || 50G || nemein || synced+up || has NFS mounts from garage and repository (copying)&lt;br /&gt;
|+&lt;br /&gt;
| garage || 100G || nemein || synced+up || has NFS mounts from stage and vcs (copied, seems to work)&lt;br /&gt;
|+&lt;br /&gt;
| db || 100G || nemein || synced+up || works, needs tuning&lt;br /&gt;
|+&lt;br /&gt;
| builder || 50G || nemein || copied+up || still needs fixing several aspects&lt;br /&gt;
|+&lt;br /&gt;
| talk || 20G || nemein || synced+up || up since 2013-03-13, via HTTP-forward&lt;br /&gt;
|+&lt;br /&gt;
| dns || ?? || ipph || setup! || dns records/serial incomplete, bind inactive&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== State of final migration ===&lt;br /&gt;
&lt;br /&gt;
* talk.maemo.org is running on &amp;quot;new&amp;quot; hardware&lt;br /&gt;
* DNS switchover should happened at 14.3., around 17:00UTC&lt;br /&gt;
* all VM got synced and are up and running. *old* should be out of business when DNS change propagated&lt;br /&gt;
&lt;br /&gt;
=== Setup with IPHH ===&lt;br /&gt;
&lt;br /&gt;
==== Networks ====&lt;br /&gt;
&lt;br /&gt;
We have 2 /28 Subnets (213.128.137.0/28 and 213.128.137.16/28)&lt;br /&gt;
&lt;br /&gt;
Networks are configured as follows: &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! IPv4 !! IPv6 !! VLAN !! Xen Bridge !! default GW &lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.0/28 || not yet || 1 || xenbr0 || 213.128.137.14&lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.16/28 || not yet || 2 || xenbr1 || 213.128.137.17&lt;br /&gt;
|+ &lt;br /&gt;
| 10.0.1.0/24 || not yet || 3 || xenbr2 || 10.0.1.1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
IP Plan for vlan 1&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! IPv4 !! IPv6 !! Hostname &lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.1 || n/a || firewall-carp&lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.2 || n/a || firewall-a&lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.3 || n/a || firewall-b&lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.4 || n/a || blade-a&lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.5 || n/a || blade-b&lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.6 || n/a || portforwarding for monitor&lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.7 || n/a || &lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.8 || n/a || &lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.9 || n/a || &lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.10 || n/a || &lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.11 || n/a || &lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.12 || n/a || IPHH Router 1&lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.13 || n/a || IPHH Router 2&lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.14 || n/a || IPHH-VRRP&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
IP Plan for vlan 2&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! IPv4 !! IPv6 !! Hostname !! Aliases&lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.17 || n/a || firewall-carp || - &lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.18 || n/a || firewall-a || - &lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.19 || n/a || firewall-b || - &lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.20 || n/a || www || static, maemo.org, planet, downloads &lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.21 || n/a || wiki || bugs&lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.22 || n/a || repository || stage&lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.23 || n/a || mail || lists &lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.24 || n/a || scratchbox || -&lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.25 || n/a || vcs || drop&lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.26 || n/a || garage || -&lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.27 || n/a || builder || -&lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.28 || n/a || talk || -&lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.29 || n/a || DNS || - &lt;br /&gt;
|+&lt;br /&gt;
| 213.128.137.30 || n/a || - || -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
IP Plan for vlan 3&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! IPv4 !! IPv6 !! Hostname &lt;br /&gt;
|+&lt;br /&gt;
| 10.0.1.1 || n/a || firewall-carp&lt;br /&gt;
|+&lt;br /&gt;
| 10.0.1.2 || n/a || firewall-a&lt;br /&gt;
|+&lt;br /&gt;
| 10.0.1.3 || n/a || firewall-b&lt;br /&gt;
|+&lt;br /&gt;
| 10.0.1.10 || n/a || db&lt;br /&gt;
|+&lt;br /&gt;
| 10.0.1.11 || n/a || monitor&lt;br /&gt;
|+&lt;br /&gt;
| 10.0.1.200 || n/a || blade-a/IPMI&lt;br /&gt;
|+&lt;br /&gt;
| 10.0.1.201 || n/a || blade-b/IPMI&lt;br /&gt;
|+&lt;br /&gt;
| 10.0.1.202 || n/a || maemo-switch&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==== Disk Layout of blade-[ab] ====&lt;br /&gt;
&lt;br /&gt;
Both disks have the following partitioning: &lt;br /&gt;
&lt;br /&gt;
RAID1 Volume for /boot (/dev/md0), consisting of /dev/sda1 and /dev/sdb1 (200M)&lt;br /&gt;
&lt;br /&gt;
RAID1 Volume /dev/md1 consisting of /dev/sda2 and /dev/sdb2 (around 970G)&lt;br /&gt;
The RAID1 Volume contains a physical LVM volume. &lt;br /&gt;
We only have one VolumeGroup (vg_blade[ab]), which has LogVol00 with 20G as root volume, LogVol01 with 2 Gig as swap and vmstore with the rest as VM Storage mounted on /vmstore.&lt;br /&gt;
&lt;br /&gt;
==== Tips &amp;amp; Tricks for migration ====&lt;br /&gt;
&lt;br /&gt;
Copying: &lt;br /&gt;
&lt;br /&gt;
Create an image on vmhost&lt;br /&gt;
&amp;lt;pre&amp;gt;fallocate -l 200g image.img&amp;lt;/pre&amp;gt;&lt;br /&gt;
or, in case fallocate is unavailable&lt;br /&gt;
&amp;lt;pre&amp;gt;dd if=/dev/zero of=image.img bs=1 count=1 seek=200G&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Attach as loop-device&lt;br /&gt;
&amp;lt;pre&amp;gt;losetup -f image.img&amp;lt;/pre&amp;gt; (find the loop-device and create a filesystem on it)&lt;br /&gt;
&lt;br /&gt;
Copy stuff &lt;br /&gt;
&amp;lt;pre&amp;gt;tar --create -p -j --one-file-system . | pv -br | ssh root@host &#039;cd /mountpoint  ; tar xpj &#039;&amp;lt;/pre&amp;gt; or&lt;br /&gt;
&amp;lt;pre&amp;gt;cd / ; rsync -arvSxz . root@host:/mount/point&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Stuff to do [2013-03-15] ==== &lt;br /&gt;
&lt;br /&gt;
* Implement a proper service monitoring for all machines and applications - nagios pending, http://monitor.maemo.org/ganglia/&lt;br /&gt;
* Setup a common policy for root/user accounts and sudo permissions&lt;br /&gt;
* Change root-passwords - done&lt;br /&gt;
* Make SSH root-login key-only - done?&lt;br /&gt;
* Find out, what to sync for final migration - done&lt;br /&gt;
* Configure internal DNS server in /etc/resolv.conf&lt;br /&gt;
* Coordinate DNS setup with Nokia - partially done&lt;br /&gt;
* Consolidate Databases - WIP&lt;br /&gt;
* Add disks to system - done, 4TB on blade-a&lt;br /&gt;
* Setup bugtracking system for infrastructure - done: roundup?&lt;br /&gt;
* fix NFS mounts - WIP&lt;br /&gt;
* update VMs to 3.2.0-38&lt;br /&gt;
&lt;br /&gt;
==== Problems we walked into ====&lt;br /&gt;
&lt;br /&gt;
===== Machines throwing their network away =====&lt;br /&gt;
&lt;br /&gt;
Apparently, XEN has issues if a vm sends too many/too large network packets. &lt;br /&gt;
&lt;br /&gt;
http://lists.xen.org/archives/html/xen-devel/2013-01/msg00198.html&lt;br /&gt;
has an interesting read about that problem. &lt;br /&gt;
&lt;br /&gt;
Symptom:&lt;br /&gt;
&lt;br /&gt;
  xenbr1: port 8(vif51.0) entered forwarding state&lt;br /&gt;
  vif vif-51-0 vif51.0: Too many frags&lt;br /&gt;
  vif vif-51-0 vif51.0: fatal error; disabling device&lt;br /&gt;
  xenbr1: port 8(vif51.0) entered disabled state&lt;br /&gt;
&lt;br /&gt;
in dmesg&lt;br /&gt;
&lt;br /&gt;
Temporary fix: Disable all offloading on eth0&lt;br /&gt;
&lt;br /&gt;
  for i in rx tx sg tso gso gro lro; do&lt;br /&gt;
          ethtool -K eth0 $i off&lt;br /&gt;
  done&lt;br /&gt;
&lt;br /&gt;
Source of this problem: &lt;br /&gt;
&lt;br /&gt;
https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/commit/include/linux/skbuff.h?h=v3.3.1&amp;amp;id=9d4dde5215779f4099730194ad30624fdba3d8b2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We fixed that problem on our machines by ensuring dom0 and domU use same MAX_SKB_FRAGS&lt;br /&gt;
&lt;br /&gt;
== Inventory (obsolete, please update) ==&lt;br /&gt;
&lt;br /&gt;
As a first step we try to gather information about the present infrastructure at *.maemo.org. This &amp;quot;inventory&amp;quot; is intended to provide an overview about all components of the infrastructure as well as to provide information that will later on aid during the actual migration.&lt;br /&gt;
&lt;br /&gt;
Currently the following topics are considered important for the migration:&lt;br /&gt;
&lt;br /&gt;
* Legal Issues (Names, Trademarks, Domain Names, etc.)&lt;br /&gt;
* Infrastructure (Web Site, Forum, Wiki, Autobuilder, Mailinglists, Garage, etc.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Legal Issues ==&lt;br /&gt;
&lt;br /&gt;
=== What is the state about the name &amp;quot;Maemo&amp;quot;? ===&lt;br /&gt;
&amp;quot;... Maemo is currently a registered trademark of Nokia and the domain name is owned by Nokia.&lt;br /&gt;
&lt;br /&gt;
=== Who owns &amp;quot;maemo.org&amp;quot;? ===&lt;br /&gt;
Negotiations about domain ownership still ongoing between Hildon Foundation board and Nokia (2013-01-20), if community can&#039;t get control over the DNS, we might revert to maemocommunity.org.&lt;br /&gt;
&lt;br /&gt;
 Domain ID:D105692361-LROR&amp;lt;br /&amp;gt;&lt;br /&gt;
 Domain Name:MAEMO.ORG&amp;lt;br /&amp;gt;&lt;br /&gt;
 Created On:07-Feb-2005 16:26:32 UTC&amp;lt;br /&amp;gt;&lt;br /&gt;
 Last Updated On:07-Jan-2013 10:25:55 UTC&amp;lt;br /&amp;gt;&lt;br /&gt;
 Expiration Date:07-Feb-2014 16:26:32 UTC&amp;lt;br /&amp;gt;&lt;br /&gt;
 Sponsoring Registrar:MarkMonitor Inc. (R37-LROR)&amp;lt;br /&amp;gt;&lt;br /&gt;
 Registrant ID:mmr-31461&amp;lt;br /&amp;gt;&lt;br /&gt;
 Registrant Name:Nokia Corporation&amp;lt;br /&amp;gt;&lt;br /&gt;
 Registrant Organization:Nokia Corporation&amp;lt;br /&amp;gt;&lt;br /&gt;
 Registrant Street1:P.O.Box 226&amp;lt;br /&amp;gt;&lt;br /&gt;
 Registrant Street2:Nokia Group&amp;lt;br /&amp;gt;&lt;br /&gt;
 Registrant Postal Code:00045&amp;lt;br /&amp;gt;&lt;br /&gt;
 Registrant Country:FI&amp;lt;br /&amp;gt;&lt;br /&gt;
 Registrant Phone:+358.718008000&amp;lt;br /&amp;gt;&lt;br /&gt;
 Registrant FAX:+358.718034496&amp;lt;br /&amp;gt;&lt;br /&gt;
 Registrant Email:dnsauthority@nokia.com&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We&#039;re planning to ask Nokia to allow a hidden primary [http://fengnet.com/book/DNS.and.BIND.5th.Edition/dns5-CHP-16-sect-1.html] for maemo.org, that we will host on a persistent VM (dns) sponsored by Nemein (thanks Eero! :-D ). The purpose is to allow swift changes of IPs under maemo.org without bothering Nokia&#039;s DNSmaster, as long as the domain still belongs to Nokia. Once the domain will get transferred to HiFo, this will become less useful but also not exactly any problem. in 6 months or so we can consider tearing down the hidden primary and manage our domain directly.&lt;br /&gt;
&lt;br /&gt;
== What is needed for the community to run maemo.org? ==&lt;br /&gt;
TMO forums donated to Hildon Foundation: http://maemo.org/community/board/tmo_forums_donated_to_hildon_foundation/&lt;br /&gt;
&lt;br /&gt;
== What are the costs? ==&lt;br /&gt;
Nokia paid for hosting until end of February.&lt;br /&gt;
Current (2013-01-30) interim config (VM on Nemein&#039;s xen-grid) will cost 1300EUR/month for the VM, plus 2200EUR/month for the maintenance. For the colocation rackspace, traffic, energy etc of the iron(s) Nokia donates to community there will be another 500+EUR/month. All excl VAT.&lt;br /&gt;
&lt;br /&gt;
At end of February we hope to drop the xen-grid VM since they shall run in a virtualization on our iron by then.&lt;br /&gt;
&lt;br /&gt;
If you&#039;re willing to donate, please visit http://hildonfoundation.org/support/&lt;br /&gt;
&lt;br /&gt;
== What about the personal information of the users? ==&lt;br /&gt;
Please refer to the privacy policy posted on the website.  If you want info about what&#039;s the data stored about you inside *maemo.org, or want this data / your account getting permanently deleted, please contact council@maemo.org&lt;br /&gt;
&lt;br /&gt;
== Operational Platform ==&lt;br /&gt;
[2013-03-20] All of maemo.org is running on our supermicro server colocated at IPHH&lt;br /&gt;
&lt;br /&gt;
List of hardware Nokia will donate to HiFo, according to Nemein&#039;s plans. [2013-02-08]&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable wikitable&amp;quot; border=&amp;quot;2&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! ID&lt;br /&gt;
! Hostname&lt;br /&gt;
! Mgmt IP Address&lt;br /&gt;
! OOB Mgmt IP Address&lt;br /&gt;
! Type (Virtual / Baremetal)&lt;br /&gt;
! System Admin&lt;br /&gt;
! HW Vendor&lt;br /&gt;
! HW Model&lt;br /&gt;
! Form Factor&lt;br /&gt;
! CPU&lt;br /&gt;
! Memory&lt;br /&gt;
! Disk&lt;br /&gt;
! Acquisition Date&lt;br /&gt;
! Warranty&lt;br /&gt;
! Services&lt;br /&gt;
! Comment&lt;br /&gt;
|-&lt;br /&gt;
| 01&lt;br /&gt;
| blade-a.maemo.org&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Baremetal&lt;br /&gt;
| Falk(warfare)&lt;br /&gt;
| Supermicro&lt;br /&gt;
| http://www.supermicro.nl/products/system/2u/2027/SYS-2027TR-HTRF.cfm?parts=SHOW&lt;br /&gt;
| 2U 19&amp;quot; Rackmount&lt;br /&gt;
| Intel® Xeon® processor E5-2620&lt;br /&gt;
| 32GB&lt;br /&gt;
| (raid1:2*)1TB, 2*2TB=4TB aux.&lt;br /&gt;
|&lt;br /&gt;
| 3 years&lt;br /&gt;
| Falk (for HH CoLo)&lt;br /&gt;
| only 2 of the 4 blades populated&lt;br /&gt;
|-&lt;br /&gt;
| 02&lt;br /&gt;
| blade-b.maemo.org&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Baremetal&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| Intel® Xeon® processor E5-2620&lt;br /&gt;
| 32GB&lt;br /&gt;
|  (raid1:2*)1TB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== OS and virtulization on community iron (planning, discussion) ===&lt;br /&gt;
Please don&#039;t forget to tag your contributions with your nick!&lt;br /&gt;
====Server OS====&lt;br /&gt;
===== alternative A =====&lt;br /&gt;
blabla-OS&lt;br /&gt;
===== alternative B =====&lt;br /&gt;
===== alternative C =====&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Virtualization====&lt;br /&gt;
===== alternative A =====&lt;br /&gt;
XEN (with OS blabla of above)&lt;br /&gt;
===== alternative B =====&lt;br /&gt;
VMware&lt;br /&gt;
===== alternative C =====&lt;br /&gt;
&lt;br /&gt;
=== Services ===&lt;br /&gt;
The following table is intended to give a concise and easily perceivable overview of the *.maemo.org services. Please use the next sub-section for providing more detailed information.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable wikitable&amp;quot; border=&amp;quot;2&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Resource&lt;br /&gt;
! URL (If Applicable)&lt;br /&gt;
! Migration Status (DONE/WIP/NST)&lt;br /&gt;
! Service Maintainer&lt;br /&gt;
! System Admin&lt;br /&gt;
! Software Name&lt;br /&gt;
! Software Version&lt;br /&gt;
! Software License&lt;br /&gt;
! Known Issues&lt;br /&gt;
! Last status update&lt;br /&gt;
|-&lt;br /&gt;
| Maemo Main Web Site&lt;br /&gt;
| http://www.maemo.org&lt;br /&gt;
| style=&amp;quot;background-color:yellow;&amp;quot; |&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; BUGS&lt;br /&gt;
| ?&lt;br /&gt;
| Nemein&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| orphaned links/404s: http://maemo.org/community/council/system_operator_needed/; &#039;&#039;&#039;Login doesn&#039;t work&#039;&#039;&#039;&lt;br /&gt;
|  2013-01-25&lt;br /&gt;
|-&lt;br /&gt;
| Maemo Forums&lt;br /&gt;
| http://talk.maemo.org&lt;br /&gt;
| style=&amp;quot;background-color:lime;&amp;quot; |&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; DONE&lt;br /&gt;
| [[User:chemist|chemist]], Reggie&lt;br /&gt;
| Falk, [[User:chemist|chemist]]&lt;br /&gt;
| vBulletin&lt;br /&gt;
|&lt;br /&gt;
| Unlimited duration, no upgrades included, acquired on 2012-20-12&lt;br /&gt;
| Captcha image issues&lt;br /&gt;
| 2013-02-10&lt;br /&gt;
|-&lt;br /&gt;
| Maemo Wiki&lt;br /&gt;
| http://wiki.maemo.org&lt;br /&gt;
| style=&amp;quot;background-color:yellow;&amp;quot; |&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; BUGS&lt;br /&gt;
| ?&lt;br /&gt;
| Nemein&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;(Watch) Email not working&#039;&#039;&#039;; random connection timeouts&lt;br /&gt;
| 2013-01-25&lt;br /&gt;
|-&lt;br /&gt;
| Repositories&lt;br /&gt;
| http://repository.maemo.org&lt;br /&gt;
| style=&amp;quot;background-color:yellow;&amp;quot; |&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; BUGS&lt;br /&gt;
| X-Fade, Merlin1981&lt;br /&gt;
| Nemein&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| former akamai serverfarm, now points to stage.m.o VM master of farm. &#039;&#039;&#039;Hashsum errors legacy&#039;&#039;&#039;&lt;br /&gt;
| 2013-02-20&lt;br /&gt;
|-&lt;br /&gt;
| Blog aggregator&lt;br /&gt;
| http://planet.maemo.org&lt;br /&gt;
| style=&amp;quot;background-color:lime;&amp;quot; |&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; DONE&lt;br /&gt;
| ?&lt;br /&gt;
| Nemein&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|login flawed?&lt;br /&gt;
| 2013-02-10&lt;br /&gt;
|-&lt;br /&gt;
| Maemo Garage&lt;br /&gt;
| https://garage.maemo.org/&lt;br /&gt;
| style=&amp;quot;background-color:lime;&amp;quot; |&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; DONE&lt;br /&gt;
| ?, Woody&lt;br /&gt;
| Nemein&lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2013-01-25&lt;br /&gt;
|-&lt;br /&gt;
| Maemo Autobuilder&lt;br /&gt;
| &lt;br /&gt;
| style=&amp;quot;background-color:red;&amp;quot; |&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; NST&lt;br /&gt;
| X-Fade&lt;br /&gt;
| Nemein&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;OFFLINE&#039;&#039;&#039;, x-fade working on it&lt;br /&gt;
| 2013-02-20&lt;br /&gt;
|-&lt;br /&gt;
| Maemo Nameservers&lt;br /&gt;
| &lt;br /&gt;
| style=&amp;quot;background-color:yellow;&amp;quot; |&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; WIP&lt;br /&gt;
| Merlin, Falk&lt;br /&gt;
| Nokia&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Still using Nokia Nameservers; following hidden primary plan til domain transfer to HiFo established&lt;br /&gt;
| 2013-01-25&lt;br /&gt;
|-&lt;br /&gt;
| Drop&lt;br /&gt;
| http://drop.maemo.org&lt;br /&gt;
| style=&amp;quot;background-color:yellow;&amp;quot; |&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; WIP&lt;br /&gt;
| X-Fade&lt;br /&gt;
| Nemein&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 2013-02-10&lt;br /&gt;
|-&lt;br /&gt;
| VCS&lt;br /&gt;
| http://vcs.maemo.org&lt;br /&gt;
| style=&amp;quot;background-color:yellow;&amp;quot; |&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; WIP&lt;br /&gt;
| &lt;br /&gt;
| Nemein&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| 2013-02-10&lt;br /&gt;
|-&lt;br /&gt;
| Listserv&lt;br /&gt;
| https://lists.maemo.org&lt;br /&gt;
| style=&amp;quot;background-color:yellow;&amp;quot; |&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; BUGS&lt;br /&gt;
| &lt;br /&gt;
| Nemein&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;occasional lockups resp interface down&#039;&#039;&#039;&lt;br /&gt;
| 2013-02-20&lt;br /&gt;
|-&lt;br /&gt;
| Static&lt;br /&gt;
| http://static.maemo.org&lt;br /&gt;
| style=&amp;quot;background-color:yellow;&amp;quot; |&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; WIP&lt;br /&gt;
|&lt;br /&gt;
| Nemein&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| &#039;&#039;&#039;temporary fix via NAT port81 redir&#039;&#039;&#039;, instable?&lt;br /&gt;
| 2013-02-20 &lt;br /&gt;
|-&lt;br /&gt;
| Stage&lt;br /&gt;
| http://stage.maemo.org&lt;br /&gt;
| obsolete&lt;br /&gt;
| X-Fade&lt;br /&gt;
| Nemein&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| VM got assigned to repository.m.o&lt;br /&gt;
| 2013-02-20 &lt;br /&gt;
|-&lt;br /&gt;
| Bugs&lt;br /&gt;
| http://bugs.maemo.org&lt;br /&gt;
| style=&amp;quot;background-color:lime;&amp;quot; |&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; DONE&lt;br /&gt;
| Andre&lt;br /&gt;
| Nemein&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| -&lt;br /&gt;
| 2013-01-25&lt;br /&gt;
|-&lt;br /&gt;
| Scratchbox&lt;br /&gt;
| http://scratchbox.org/&lt;br /&gt;
| style=&amp;quot;background-color:yellow;&amp;quot; |&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; WIP&lt;br /&gt;
| thedead1440&lt;br /&gt;
| Nemein, thedead1440&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| 80.248.164.245, Logica Finland Oy, migration pending&lt;br /&gt;
| 2013-02-20&lt;br /&gt;
|-&lt;br /&gt;
| Voting Infrastructure &lt;br /&gt;
| ?&lt;br /&gt;
| style=&amp;quot;background-color:yellow;&amp;quot; |&amp;lt;span style=&amp;quot;display:none&amp;quot;&amp;gt;1&amp;lt;/span&amp;gt; WIP&lt;br /&gt;
| woody14619&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| 2013-02-20&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== More Detailed Information ===&lt;br /&gt;
In this sub section more detailed information about the entries in the table can be placed. The intent is to keep the table concise while still being able to have all relevant information at hand.&lt;br /&gt;
&lt;br /&gt;
List of VMs and their associated IPs:&lt;br /&gt;
 IP adresses&lt;br /&gt;
 188.117.59.198      test.maemo.org&lt;br /&gt;
 # www.maemo.org      maemo.org&lt;br /&gt;
 188.117.59.200      www.maemo.org&lt;br /&gt;
 188.117.59.200      planet.maemo.org&lt;br /&gt;
 188.117.59.200      static.maemo.org&lt;br /&gt;
 188.117.59.199      drop.maemo.org&lt;br /&gt;
 188.117.59.207      garage.maemo.org&lt;br /&gt;
 188.117.59.204      lists.maemo.org&lt;br /&gt;
 188.117.59.202      wiki.maemo.org&lt;br /&gt;
 188.117.59.212      bugs.maemo.org&lt;br /&gt;
 # 188.117.59.203      repository.maemo.org  scrubbed&lt;br /&gt;
 188.117.59.205      stage.maemo.org  repository.maemo.org (reassigned)&lt;br /&gt;
 188.117.59.206      vcs.maemo.org&lt;br /&gt;
&lt;br /&gt;
List of internal IP/VM&lt;br /&gt;
 127.0.0.1  MaemoTemplate&lt;br /&gt;
 10.0.0.1   maemo static maintenance&lt;br /&gt;
 10.0.0.2   wiki bugs&lt;br /&gt;
 10.0.0.121   stage repository&lt;br /&gt;
 10.0.0.4   mail smtp lists&lt;br /&gt;
 10.0.0.5   scratchbox&lt;br /&gt;
 10.0.0.6   dns&lt;br /&gt;
 #10.0.0.7   repository&lt;br /&gt;
 10.0.0.9   vcs drop&lt;br /&gt;
 10.0.0.10  garage&lt;br /&gt;
 10.0.0.11  db backup&lt;br /&gt;
 10.0.0.12  builder&lt;br /&gt;
 10.0.0.254 fw&lt;br /&gt;
&lt;br /&gt;
Cpu Cores, RAM (in MB), storage (DISK, in GB), of the VMs&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Current VMs actually in use (some more were reserved originally since it&lt;br /&gt;
was not certain what services could be merged)&lt;br /&gt;
&lt;br /&gt;
Name    C   RAM     DISK&lt;br /&gt;
------------------------&lt;br /&gt;
MaemoFW 1   1024    10&lt;br /&gt;
Builder 1   4096    150&lt;br /&gt;
garage  2   8192    100&lt;br /&gt;
test    2   2048    30&lt;br /&gt;
wikib   2   2048    50&lt;br /&gt;
www     2   6144    70&lt;br /&gt;
vcs     2   8192    200&lt;br /&gt;
db      2   8192    260&lt;br /&gt;
mail    2   2048    30&lt;br /&gt;
stage   2   2048    870&lt;br /&gt;
talk    2   4096    15&lt;br /&gt;
========================&lt;br /&gt;
        20  48128   1785&lt;br /&gt;
&lt;br /&gt;
sb      2   2048    30&lt;br /&gt;
dns     2   2048    30&lt;br /&gt;
========================&lt;br /&gt;
        25  52224   1845&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Forum (talk.maemo.org) ====&lt;br /&gt;
Unlike the other services, talk.maemo.org is not behind the endian firewall. Maintenence access is not via test jumpserver.&lt;br /&gt;
&lt;br /&gt;
 Software: vBulletin&lt;br /&gt;
 licence: Unlimited duration, no upgrades included, acquired on 2012-20-12&lt;br /&gt;
&lt;br /&gt;
=== Scratchbox ===&lt;br /&gt;
Scratchbox is also sponsored by Nokia. (Please verify?) &lt;br /&gt;
Scratchbox is required for running the Fremantle and Harmattan SDK.&lt;br /&gt;
&lt;br /&gt;
Currently there&#039;s a VM on Nemein&#039;s xen-grid named &amp;quot;scratchbox&amp;quot;, but state of the case is unclear.&lt;br /&gt;
&lt;br /&gt;
===Tracker for Sysops and Maintainers===&lt;br /&gt;
This tracker is meant for maemo staff and affiliated only &lt;br /&gt;
 web frontend: roundup.fourecks.de/maemo/&lt;br /&gt;
 mail access (read docs!): maemo-issue AT fourecks.de&lt;br /&gt;
&lt;br /&gt;
===Service Maintainers (please update/augment/fix)===&lt;br /&gt;
(please don&#039;t usually pester maintainers directly! First try to contact council@maemo.org, we&#039;ll forward)&lt;br /&gt;
&lt;br /&gt;
These are the Service Maintainers (in spe), for services like forum (tmo), wiki, bugs, etc. They are (generally) not sysops of the machines their service is running on.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! From !! Nick !! Full Name !! E-Mail !! Services Maintained !! Status !! Comments &lt;br /&gt;
|+&lt;br /&gt;
| Nemein || mashiara || Rambo Eero af Heurlin ||  eero.afheurlin at &amp;lt;to be disclosed by owner&amp;gt; || (sysop) || || [leaving?] ||&lt;br /&gt;
|+&lt;br /&gt;
| Nemein || x-fade || Niels Breet || Niels&amp;lt;at&amp;gt;maemo.org || (mail, IRC, builder, ???...) || || [leaving?] ||&lt;br /&gt;
|+&lt;br /&gt;
| Nemein || ferenc || Ferenc Szekely ||  ferenc&amp;lt;at&amp;gt;maemo.org || (mail, sysop, ???...) || || [leaving?] ||&lt;br /&gt;
|+&lt;br /&gt;
| maemo || warfare || Falk Stern || falk&amp;lt;at&amp;gt;fourecks.de || (maemo master sysop) || ||&lt;br /&gt;
|+&lt;br /&gt;
| maemo || chemist || Ruediger Schiller || webmaster&amp;lt;at&amp;gt;talk.m.o || Talk || || ||&lt;br /&gt;
|+&lt;br /&gt;
| maemo || merlin1991 || Christian Ratzenhofer || &amp;lt;at&amp;gt; || Repos || || [preliminary accepted] ||&lt;br /&gt;
|+&lt;br /&gt;
| ??? || andre_ || Andre Klapper || ???&amp;lt;at&amp;gt;??? || Bugs || || [???] ||&lt;br /&gt;
|+&lt;br /&gt;
| || || || || ??? (wiki) || ||&lt;br /&gt;
|+&lt;br /&gt;
| || || || || (planet???) || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Unsorted Hints ==&lt;br /&gt;
=== ssh access ===&lt;br /&gt;
All legacy accounts got ported to new infra.&lt;br /&gt;
&lt;br /&gt;
Access to any VM is via plain direct ssh:&lt;br /&gt;
 ssh &amp;lt;user&amp;gt;@&amp;lt;VM&amp;gt;.maemo.org&lt;br /&gt;
&lt;br /&gt;
=== backup ===&lt;br /&gt;
we&#039;re doing backups to the 4TB auxiliary storage on blade-a, using backupPC:&lt;br /&gt;
 ssh -L8088:localhost:80 blade-a&lt;br /&gt;
 konqueror http://localhost:8088&lt;br /&gt;
backup-master is Falk&lt;br /&gt;
&lt;br /&gt;
talk VM sysop (chem|st) has access to it and control over own backups, via ssh confic on blade-a:&lt;br /&gt;
 command=&amp;quot;sleep 1d&amp;quot;,permitopen=&amp;quot;127.0.0.1:80&amp;quot;  &amp;lt;ssh-pubkey&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Steering ==&lt;br /&gt;
&lt;br /&gt;
council is in charge of any steering. &lt;br /&gt;
&lt;br /&gt;
Joerg Reisenweber got appointed for &amp;quot;maemo.org infra administration coordinator&amp;quot; and thus is the single point of coordination for any detail questions.&lt;br /&gt;
&lt;br /&gt;
If you got any questions, suggestions, critics, whatever, please contact Joerg (DocScrutinizer) or any other of council members via IRC. or send a mail to council AT maemo.org. We&#039;re just community&#039;s proxies acting in best intention to do what&#039;s probably community&#039;s best interest. If you don&#039;t agree with what we do or have suggestions how we could do better, please holler. Best place: Friday 1800UTC IRC:(freenode.net)#maemo-meeting&lt;br /&gt;
&lt;br /&gt;
== More ==&lt;br /&gt;
&lt;br /&gt;
* OBS @ TiZen or SuSe : https://bugs.tizen.org/jira/browse/TINF-48?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Autobuilder and friends ==&lt;br /&gt;
&lt;br /&gt;
maemo autobuilder setup &lt;br /&gt;
&lt;br /&gt;
autobuilder consists of multiple VMs &lt;br /&gt;
&lt;br /&gt;
=== drop VM ===&lt;br /&gt;
this VM has /etc/passwd synchronised with garage and ~ folders mounted via NFS from garage&lt;br /&gt;
&lt;br /&gt;
account synchronisation is handled by scripts running on garage VM and then sync is triggered using ssh and scripts in /usr/local/bin&lt;br /&gt;
&lt;br /&gt;
packages are uploaded to /mnt/incoming-builder via SCP &lt;br /&gt;
&lt;br /&gt;
=== garage VM ===&lt;br /&gt;
this is the VM where stuff happens&lt;br /&gt;
&lt;br /&gt;
password/account sync to gforge/postgresql is done using &lt;br /&gt;
 */10 *   * * *   root    /usr/local/bin/add_groups_users_git_ssh.sh &amp;gt; /tmp/add_groups_users_git_ssh.log dev/null 2&amp;gt;&amp;amp;1&lt;br /&gt;
this also updates ~/.ssh/authorized_keys &lt;br /&gt;
&lt;br /&gt;
garage also handles web extras-uploader (/var/lib/extras-assistant/) - package is uploaded and then moved to the same folder as packages uploaded to drop and then chowned using &lt;br /&gt;
&lt;br /&gt;
 /var/lib/extras-assistant/bin/copy_package_files_to_autobuilder.sh&lt;br /&gt;
&lt;br /&gt;
A lot of jobs on garage VM is done using local root crontab (/var/spool/cron/crontabs/root)&lt;br /&gt;
&lt;br /&gt;
after package is uploaded it&#039;s processed by buildME&lt;br /&gt;
&lt;br /&gt;
buildME runs as builder user and it&#039;s started from cron every minute&lt;br /&gt;
 * * * * * builder /home/builder/buildme &lt;br /&gt;
&lt;br /&gt;
buildme is configured using /etc/buildme.conf&lt;br /&gt;
&lt;br /&gt;
buildme takes care of couple things&lt;br /&gt;
* verify that .tar.gz and other files are correct (checked using checksum from .dsc file)&lt;br /&gt;
* select free destination (buildme can handle parallel builds on multiple hosts/users)&lt;br /&gt;
* scp all required files to selected destination&lt;br /&gt;
* start sbdmock on the destination&lt;br /&gt;
* copy results back and resulting .deb to repository incoming folder (result_dir = /mnt/builder/%(product)s and repo_queue = /mnt/incoming/extras-devel/%(product)s/) &lt;br /&gt;
* send emails to list and user uploading package&lt;br /&gt;
&lt;br /&gt;
=== builder VM ===&lt;br /&gt;
&lt;br /&gt;
this VM has standard installation of scratchbox with no targets configured (it&#039;s not required for sbdmock)&lt;br /&gt;
&lt;br /&gt;
when sbdmock is started it cleans up old build folder, creates new target and prepares build enviroment and then runs dpkg-buildpackage &lt;br /&gt;
&lt;br /&gt;
sbdmock also generates logfiles that are parsed by buildme &lt;br /&gt;
&lt;br /&gt;
=== repository/stage VM ===&lt;br /&gt;
&lt;br /&gt;
this is where repository management happens&lt;br /&gt;
 */2 * * * *     repository      /home/repository/queue-manage-extras-devel.sh&lt;br /&gt;
 */5 * * * *     repository      /home/repository/queue-manage-extras.sh&lt;br /&gt;
 */5 * * * *     repository      /home/repository/queue-manage-community-testing.sh&lt;br /&gt;
 */5 * * * *     repository      /home/repository/queue-manage-community.sh&lt;br /&gt;
&lt;br /&gt;
those scripts (and scripts inside /home/repository/queue-manager-extras) check for new packages in repository incoming folder and then move those to /var/repository/staging, regenerate Packages &lt;br /&gt;
&lt;br /&gt;
(using sums that were previously cached) and sign it if required and then if any changes happened&lt;br /&gt;
 #touch .changed file, so we know that we need to sync to live&lt;br /&gt;
 touch /var/repository/staging/community/.$dist.changed&lt;br /&gt;
&lt;br /&gt;
this file is then checked by &lt;br /&gt;
 1003     10634     1  0 Mar18 ?        00:00:00 /bin/sh /usr/local/bin/packages/rqp.sh&lt;br /&gt;
started by /etc/init.d/repository-qp&lt;br /&gt;
&lt;br /&gt;
this script starts rsync when required to sync to live repository&lt;br /&gt;
&lt;br /&gt;
this script also starts repository-queue-proc.php that processes repository updates coming from midgard (old package cleanup and promotions)&lt;/div&gt;</summary>
		<author><name>93.200.111.117</name></author>
	</entry>
	<entry>
		<id>https://maemo.octonezd.me/index.php?title=Maemo.org_team/How_Elections_Work&amp;diff=18476</id>
		<title>Maemo.org team/How Elections Work</title>
		<link rel="alternate" type="text/html" href="https://maemo.octonezd.me/index.php?title=Maemo.org_team/How_Elections_Work&amp;diff=18476"/>
		<updated>2013-05-03T20:45:19Z</updated>

		<summary type="html">&lt;p&gt;93.200.111.117: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page details the current [http://maemo.org/vote voting system] and how it works.  It is presented as a means of offering transparency into how voting is handled and how the current system provides both anonymity and verifiability in community elections and referendums. &lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
The voting system provides voters with a multiple-choice interface which can be used to create an ordered list of selected options.  Voters can select some, none, or all of the choices, and order those choices as they prefer them.&lt;br /&gt;
&lt;br /&gt;
For multi-seat elections, voters may choose any number of candidates, be that greater than, equal to, or less than the number of seats (see Single Transferable Vote below). For the special case of a two-choice referendum, voters should be aware that there is no (additional) sense in choosing both options, though the voting system may in fact allow them to do so. &#039;&#039;Only the first selection in a 2 option election will be counted.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Voters that dislike the choices, or want a choice not presented, may show their desire to participate by choosing nothing and casting an empty ballot. If enough voters cast empty ballots it can affect an election by making fewer (or no) candidates reach the required &amp;quot;quorum&amp;quot; levels to be elected.&lt;br /&gt;
&lt;br /&gt;
= Parts of an Election =&lt;br /&gt;
&lt;br /&gt;
The current voting process is divided into several pieces.  Some of these are not visible to the voter, or are taken as a given.  To ease the process of explaining the process, we will follow the &amp;quot;life&amp;quot; of a single vote, from the creation of the election to the final results.&lt;br /&gt;
&lt;br /&gt;
== Elections ==&lt;br /&gt;
&lt;br /&gt;
Elections are created by an administrator (often Council) and stored in the database with several vital fields about that election.  Included are the start and stop times, the title of the election, text about the election, candidates for the election, and the number of &amp;quot;winners&amp;quot;.  The contents of these tables generally show up in one form or another in the interface for voters.&lt;br /&gt;
&lt;br /&gt;
== Electorate ==&lt;br /&gt;
&lt;br /&gt;
The system also contains an electorate list; the list of &#039;&#039;users eligible to vote&#039;&#039; in an election.  That list generally gets updated from the main maemo.org list before elections are started. The date this happens is the relevant date for calculating karma, account age, and so on. Only users that meet the conditions &#039;&#039;at that date&#039;&#039; are included to the electorate table.  It is &#039;&#039;&#039;difficult&#039;&#039;&#039; (but not impossible) to update or adjust this list after elections have started.  To avoid complexity it is asked that voters check their account settings, &#039;&#039;&#039;particularly their email address,&#039;&#039;&#039; and setup any linkages needed at least a few weeks before elections start.&lt;br /&gt;
&lt;br /&gt;
== Voting Tokens ==&lt;br /&gt;
&lt;br /&gt;
When an election is setup and ready to be used, and the electorate is verified, an administrator instructs the system to create and mail tokens for the electorate.  A script in the system then generates a random voting token for every member of the electorate, and mails that token to each voter.  The voting token, used as a password for the voting login screen, is valid for one vote in the election for a given voter.  Administrators never see these tokens (aside from any token they may get as a voter).&lt;br /&gt;
&lt;br /&gt;
The tokens are stored in a separate table, with a numeric pointer to the voter and election for which it is to be used.  Storing them this way, in separate tables, makes it harder for an administrator to &amp;quot;accidentally&amp;quot; see a voter&#039;s e-mail and token together if they need to look at the database for any reason.  The odds of anyone guessing a token is also quite slim, and both the token and e-mail address is required to log in to vote.&lt;br /&gt;
&lt;br /&gt;
== Voting Process ==&lt;br /&gt;
&lt;br /&gt;
The entire voting process is state driven.  When a voter chooses an election and logs in, the system validates the token to allow them into the voting interface.  This is a &amp;quot;courtesy validation&amp;quot; to allow the voter to know that the token is still valid.  Nothing is altered by this step.&lt;br /&gt;
&lt;br /&gt;
The list of choices is presented to the voter, and stored in a &#039;&#039;javascript applet&#039;&#039; in the voters browser that allows the voter to chose as many options as they like, in the order they like (note that you can undo choices by clicking on the list of chosen items).  When the voter is happy with their choice(s) and proper order, they submit the choices for validation and confirmation.  The vote selection is validated, displayed to the voter to confirm that the system got their choice(s) and order correct, and the voter is asked to submit the vote for final processing.&lt;br /&gt;
&lt;br /&gt;
The next step is the most complex and critical.  Once the vote has been submitted, several things happen all in one single action:&lt;br /&gt;
# A random vote validation string is created for this vote.&lt;br /&gt;
# The vote is prepared for entry into the list of votes with this random string.&lt;br /&gt;
# The system atomically (as one step):&lt;br /&gt;
## Validates that the vote token is still valid&lt;br /&gt;
## Adds the vote to the list of votes&lt;br /&gt;
## Deletes the valid vote token&lt;br /&gt;
&lt;br /&gt;
At this stage, one of two things happens:&lt;br /&gt;
* If an error occurs, all sub-steps are undone, leaving a valid vote token, and an error is reported to the voter.&lt;br /&gt;
* If all works as expected, the random vote validation string is presented to the voter.&lt;br /&gt;
&lt;br /&gt;
Lets look at those sub-steps a little closer:&lt;br /&gt;
&lt;br /&gt;
The first sub-step generates a random validation string for your vote.  When the vote is stored in the vote table, that is the *only* reference as to &amp;quot;who&amp;quot; cast this vote.  Being that it&#039;s random, the only way one can know it is by seeing it on their screen, just after submitting their vote.  This is important because &#039;&#039;&#039;it allows each voter to validate the public ballot later&#039;&#039;&#039; by looking up their unique entry to verify their vote was counted as they cast it.&lt;br /&gt;
&lt;br /&gt;
The third step guarantees that a voter always has either a vote token, or has a vote cast with a random validation string.  This prevents multiple votes per voter, and prevents technical problems from leaving a voter stranded without a vote.  For this reason, &#039;&#039;&#039;at any time up to the point one hits the &amp;quot;submit vote&amp;quot; button on the validation page, and gets a validation token random string displayed, one may close their browser, or hit back, to change their choices, or start all over anew with the process.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Post Election Ballot Validation ==&lt;br /&gt;
&lt;br /&gt;
Once the vote has closed, the ballot of all votes cast is &#039;&#039;publicly&#039;&#039; viewable (and downloadable) by everyone.  The list includes the votes cast, including the order of the choices for multi-choice votes, and the random validation strings for each vote.  Since each voter knows his or her validation string, they can validate their vote is correct.  They can also count the votes, and validate that the &#039;&#039;results&#039;&#039; of the election are correct.  But since only one random validation string is known per voter, voters (as well as admins) can not determine who voted for which candidates in the election.  Since there are no links to the original owner or starting token in the final voting table, there&#039;s also no way for an administrator (or anyone with database access) to determine who voted for which candidates either.&lt;br /&gt;
&lt;br /&gt;
= Technical Details =&lt;br /&gt;
&lt;br /&gt;
This area is for a more technical look at how things work, and may be less interesting for the general voter.&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
For those interested, the voting code is public domain and can be reviewed.  At this point, the entire voting system consists of PHP code, a small piece of javascript that runs in the browser, and a perl script that handles e-mail delivery.  Since the addition of the admin interface, even the administration functions are now in PHP.  The OpenSTV portion is written in perl, and is also opensource, though there is a requested donation (which has been made on behalf of Maemo for our use of it).&lt;br /&gt;
&lt;br /&gt;
== Database Setup ==&lt;br /&gt;
&lt;br /&gt;
The database schema for the voting database is also checked in as an SQL script that can be used to create all tables needed for the scripts to function.  Any updates to tables should be included in this schema.&lt;br /&gt;
&lt;br /&gt;
=== Individual Tables ===&lt;br /&gt;
&lt;br /&gt;
There are several tables in the election interface.  Below is a brief description of each, as they exist at the time of writing this wiki page.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Table Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| admin_users&lt;br /&gt;
| This table contains the information needed to validate users of the administration interface.&lt;br /&gt;
|-&lt;br /&gt;
| elections&lt;br /&gt;
| This contains a list of all elections, past, present, and future.&lt;br /&gt;
|-&lt;br /&gt;
| election_anon_tokens&lt;br /&gt;
| This contains a list of all validation strings ever made, and indicates which election the token was made for, but not which voter.&lt;br /&gt;
|-&lt;br /&gt;
| election_choices&lt;br /&gt;
| This contains the choices for all elections, from Yes/No to candidates for elections.&lt;br /&gt;
|-&lt;br /&gt;
| election_results&lt;br /&gt;
| This contains html blobs that are shown as official election results.&lt;br /&gt;
|-&lt;br /&gt;
| election_tmp_tokens&lt;br /&gt;
| This contains the list of all tokens for all elections.  Each token knows which voter and election it belongs to (via numeric index). Obsolete tokens (for elections that are closed) shall get deleted from this table.&lt;br /&gt;
|-&lt;br /&gt;
| election_votes&lt;br /&gt;
| This contains the actual votes for an election.  The only references here are to election_anon_tokens, to indicate which votes go to which verification string.&lt;br /&gt;
|-&lt;br /&gt;
| electorate&lt;br /&gt;
| This contains the list of all eligible voters for all elections.&lt;br /&gt;
|-&lt;br /&gt;
| midgard_users&lt;br /&gt;
| This is a temporary table, imported from Midgard and/or the garage to allow scripts to update the electorate in an easier fashion. Creation date of this table determines the karma, account age etc used to decide eligibility of a user.&lt;br /&gt;
|-&lt;br /&gt;
| outbound_email&lt;br /&gt;
| This system handles queuing and batching mail to prevent us from looking like spammers. Temporary table. Depletes as mails get sent out.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Cloning Voting Tokens ==&lt;br /&gt;
&lt;br /&gt;
One option available for administrators is to &amp;quot;clone&amp;quot; voting tokens from one election into another.  This allows one &amp;quot;password&amp;quot; to be used in two or more elections.  This process is often desirable when two elections are happening at the same time or in close succession, as it cuts down on the number of tokens mailed out, and eliminates confusion about which voting token string to use for a given election.&lt;br /&gt;
&lt;br /&gt;
For example, the Coding Competitions often have 5 to 10 categories, each with a separate election.   Having 5 to 10 tokens mailed to voters could cause spam triggers, and/or could confuse voters as to which token to use for which category.  Instead, one token is created, and cloned to the other categories.  The allows a voter to use the same e-mail and password to vote in all Coding Competition elections, but still only allows one vote per voter per category. &lt;br /&gt;
&lt;br /&gt;
Cloning works because each token has a reference to the voter and election for which it exists.  When a token is cloned a &#039;&#039;&#039;copy&#039;&#039;&#039; is made with a &#039;&#039;different&#039;&#039; election identifier.  This means two tokens exist with the same random &amp;quot;string&amp;quot;, but each points to the same user and a &#039;&#039;different&#039;&#039; election.  When a voter casts a vote in one election, just the token for that election gets destroyed.&lt;br /&gt;
&lt;br /&gt;
This is also the reason tokens can&#039;t be cloned after voting has opened on an election.  Since voting tokens are destroyed as the vote is cast, cloning from an active election would mean those who already voted in the election would not have a token to copy, and thus would not be able to vote in the cloned election.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=1&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! align=&amp;quot;center&amp;quot;| Voting Tokens&lt;br /&gt;
! align=&amp;quot;center&amp;quot;|           Votes &amp;amp; Verify Strings                &lt;br /&gt;
|-&lt;br /&gt;
! Setup Referendum 1 &lt;br /&gt;
|&lt;br /&gt;
 &#039;&#039;&#039;(3UA9VTp,Alice,Ref1)&#039;&#039;&#039; &lt;br /&gt;
 &#039;&#039;&#039;(oUB3VTq,Bob,Ref1)&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;(yUC9VTr,Chad,Ref1)&#039;&#039;&#039;&lt;br /&gt;
 ... [all eligible electorate]  &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! Clone Referendum 1 to Election 2 &lt;br /&gt;
|&lt;br /&gt;
 (3UA9VTp,Alice,Ref1)&lt;br /&gt;
 (oUB3VTq,Bob,Ref1) &lt;br /&gt;
 (yUC9VTr,Chad,Ref1)&lt;br /&gt;
 ... &lt;br /&gt;
 &#039;&#039;&#039;(3UA9VTp,Alice,Elect2)&#039;&#039;&#039; &lt;br /&gt;
 &#039;&#039;&#039;(oUB3VTq,Bob,Elect2)&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;(yUC9VTr,Chad,Elect2)&#039;&#039;&#039; &lt;br /&gt;
 ... &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! Alice &amp;amp; Chad Vote In Referendum 1 &lt;br /&gt;
|&lt;br /&gt;
 &amp;lt;strike&amp;gt;(3UA9VTp,Alice,Ref1)&amp;lt;/strike&amp;gt;&lt;br /&gt;
 (oUB3VTq,Bob,Ref1)&lt;br /&gt;
 &amp;lt;strike&amp;gt;(yUC9VTr,Chad,Ref1)&amp;lt;/strike&amp;gt;&lt;br /&gt;
 ... &lt;br /&gt;
 (3UA9VTp,Alice,Elect2) &lt;br /&gt;
 (oUB3VTq,Bob,Elect2)&lt;br /&gt;
 (yUC9VTr,Chad,Elect2)&lt;br /&gt;
 ... &lt;br /&gt;
|&lt;br /&gt;
 &#039;&#039;&#039;&amp;quot;Yes&amp;quot; &amp;amp;rArr; OMGuVotedN0wg0prty (Ref1)&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;&amp;quot;No&amp;quot; &amp;amp;rArr; Yualw4ysSoN3gatlve (Ref1)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Alice &amp;amp; Bob Vote In Election 2 &lt;br /&gt;
|&lt;br /&gt;
 (oUB3VTq,Bob,Ref1) &lt;br /&gt;
 ...&lt;br /&gt;
 (wUZ3VT5,Zarrah,Ref1)&lt;br /&gt;
 &amp;lt;strike&amp;gt;(3UA9VTp,Alice,Elect2)&amp;lt;/strike&amp;gt; &lt;br /&gt;
 &amp;lt;strike&amp;gt;(oUB3VTq,Bob,Elect2)&amp;lt;/strike&amp;gt; &lt;br /&gt;
 (yUC9VTr,Chad,Elect2)&lt;br /&gt;
 ...&lt;br /&gt;
|&lt;br /&gt;
 &amp;quot;Yes&amp;quot; &amp;amp;rArr; OMGuVotedN0wg0prty (Ref1)&lt;br /&gt;
 &amp;quot;No&amp;quot;  &amp;amp;rArr; Yualw4ysSoN3gatlve (Ref1)&lt;br /&gt;
 &#039;&#039;&#039;&amp;quot;Kyle&amp;quot;,&amp;quot;Lucy&amp;quot; &amp;amp;rArr; M4nUVote4YurBudzEh (Elect2)&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;&amp;quot;Jim&amp;quot;,&amp;quot;Mandy&amp;quot; &amp;amp;rArr; OMGuVotedTo0g0prty (Elect2)&#039;&#039;&#039;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>93.200.111.117</name></author>
	</entry>
	<entry>
		<id>https://maemo.octonezd.me/index.php?title=Maemo.org_team/How_Elections_Work&amp;diff=18477</id>
		<title>Maemo.org team/How Elections Work</title>
		<link rel="alternate" type="text/html" href="https://maemo.octonezd.me/index.php?title=Maemo.org_team/How_Elections_Work&amp;diff=18477"/>
		<updated>2013-05-03T20:44:46Z</updated>

		<summary type="html">&lt;p&gt;93.200.111.117: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page details the current [http://maemo.org/vote voting system] and how it works.  It is presented as a means of offering transparency into how voting is handled and how the current system provides both anonymity and verifiability in community elections and referendums. &lt;br /&gt;
&lt;br /&gt;
foobar (just testing)&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
The voting system provides voters with a multiple-choice interface which can be used to create an ordered list of selected options.  Voters can select some, none, or all of the choices, and order those choices as they prefer them.&lt;br /&gt;
&lt;br /&gt;
For multi-seat elections, voters may choose any number of candidates, be that greater than, equal to, or less than the number of seats (see Single Transferable Vote below). For the special case of a two-choice referendum, voters should be aware that there is no (additional) sense in choosing both options, though the voting system may in fact allow them to do so. &#039;&#039;Only the first selection in a 2 option election will be counted.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Voters that dislike the choices, or want a choice not presented, may show their desire to participate by choosing nothing and casting an empty ballot. If enough voters cast empty ballots it can affect an election by making fewer (or no) candidates reach the required &amp;quot;quorum&amp;quot; levels to be elected.&lt;br /&gt;
&lt;br /&gt;
= Parts of an Election =&lt;br /&gt;
&lt;br /&gt;
The current voting process is divided into several pieces.  Some of these are not visible to the voter, or are taken as a given.  To ease the process of explaining the process, we will follow the &amp;quot;life&amp;quot; of a single vote, from the creation of the election to the final results.&lt;br /&gt;
&lt;br /&gt;
== Elections ==&lt;br /&gt;
&lt;br /&gt;
Elections are created by an administrator (often Council) and stored in the database with several vital fields about that election.  Included are the start and stop times, the title of the election, text about the election, candidates for the election, and the number of &amp;quot;winners&amp;quot;.  The contents of these tables generally show up in one form or another in the interface for voters.&lt;br /&gt;
&lt;br /&gt;
== Electorate ==&lt;br /&gt;
&lt;br /&gt;
The system also contains an electorate list; the list of &#039;&#039;users eligible to vote&#039;&#039; in an election.  That list generally gets updated from the main maemo.org list before elections are started. The date this happens is the relevant date for calculating karma, account age, and so on. Only users that meet the conditions &#039;&#039;at that date&#039;&#039; are included to the electorate table.  It is &#039;&#039;&#039;difficult&#039;&#039;&#039; (but not impossible) to update or adjust this list after elections have started.  To avoid complexity it is asked that voters check their account settings, &#039;&#039;&#039;particularly their email address,&#039;&#039;&#039; and setup any linkages needed at least a few weeks before elections start.&lt;br /&gt;
&lt;br /&gt;
== Voting Tokens ==&lt;br /&gt;
&lt;br /&gt;
When an election is setup and ready to be used, and the electorate is verified, an administrator instructs the system to create and mail tokens for the electorate.  A script in the system then generates a random voting token for every member of the electorate, and mails that token to each voter.  The voting token, used as a password for the voting login screen, is valid for one vote in the election for a given voter.  Administrators never see these tokens (aside from any token they may get as a voter).&lt;br /&gt;
&lt;br /&gt;
The tokens are stored in a separate table, with a numeric pointer to the voter and election for which it is to be used.  Storing them this way, in separate tables, makes it harder for an administrator to &amp;quot;accidentally&amp;quot; see a voter&#039;s e-mail and token together if they need to look at the database for any reason.  The odds of anyone guessing a token is also quite slim, and both the token and e-mail address is required to log in to vote.&lt;br /&gt;
&lt;br /&gt;
== Voting Process ==&lt;br /&gt;
&lt;br /&gt;
The entire voting process is state driven.  When a voter chooses an election and logs in, the system validates the token to allow them into the voting interface.  This is a &amp;quot;courtesy validation&amp;quot; to allow the voter to know that the token is still valid.  Nothing is altered by this step.&lt;br /&gt;
&lt;br /&gt;
The list of choices is presented to the voter, and stored in a &#039;&#039;javascript applet&#039;&#039; in the voters browser that allows the voter to chose as many options as they like, in the order they like (note that you can undo choices by clicking on the list of chosen items).  When the voter is happy with their choice(s) and proper order, they submit the choices for validation and confirmation.  The vote selection is validated, displayed to the voter to confirm that the system got their choice(s) and order correct, and the voter is asked to submit the vote for final processing.&lt;br /&gt;
&lt;br /&gt;
The next step is the most complex and critical.  Once the vote has been submitted, several things happen all in one single action:&lt;br /&gt;
# A random vote validation string is created for this vote.&lt;br /&gt;
# The vote is prepared for entry into the list of votes with this random string.&lt;br /&gt;
# The system atomically (as one step):&lt;br /&gt;
## Validates that the vote token is still valid&lt;br /&gt;
## Adds the vote to the list of votes&lt;br /&gt;
## Deletes the valid vote token&lt;br /&gt;
&lt;br /&gt;
At this stage, one of two things happens:&lt;br /&gt;
* If an error occurs, all sub-steps are undone, leaving a valid vote token, and an error is reported to the voter.&lt;br /&gt;
* If all works as expected, the random vote validation string is presented to the voter.&lt;br /&gt;
&lt;br /&gt;
Lets look at those sub-steps a little closer:&lt;br /&gt;
&lt;br /&gt;
The first sub-step generates a random validation string for your vote.  When the vote is stored in the vote table, that is the *only* reference as to &amp;quot;who&amp;quot; cast this vote.  Being that it&#039;s random, the only way one can know it is by seeing it on their screen, just after submitting their vote.  This is important because &#039;&#039;&#039;it allows each voter to validate the public ballot later&#039;&#039;&#039; by looking up their unique entry to verify their vote was counted as they cast it.&lt;br /&gt;
&lt;br /&gt;
The third step guarantees that a voter always has either a vote token, or has a vote cast with a random validation string.  This prevents multiple votes per voter, and prevents technical problems from leaving a voter stranded without a vote.  For this reason, &#039;&#039;&#039;at any time up to the point one hits the &amp;quot;submit vote&amp;quot; button on the validation page, and gets a validation token random string displayed, one may close their browser, or hit back, to change their choices, or start all over anew with the process.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Post Election Ballot Validation ==&lt;br /&gt;
&lt;br /&gt;
Once the vote has closed, the ballot of all votes cast is &#039;&#039;publicly&#039;&#039; viewable (and downloadable) by everyone.  The list includes the votes cast, including the order of the choices for multi-choice votes, and the random validation strings for each vote.  Since each voter knows his or her validation string, they can validate their vote is correct.  They can also count the votes, and validate that the &#039;&#039;results&#039;&#039; of the election are correct.  But since only one random validation string is known per voter, voters (as well as admins) can not determine who voted for which candidates in the election.  Since there are no links to the original owner or starting token in the final voting table, there&#039;s also no way for an administrator (or anyone with database access) to determine who voted for which candidates either.&lt;br /&gt;
&lt;br /&gt;
= Technical Details =&lt;br /&gt;
&lt;br /&gt;
This area is for a more technical look at how things work, and may be less interesting for the general voter.&lt;br /&gt;
&lt;br /&gt;
== Source Code ==&lt;br /&gt;
&lt;br /&gt;
For those interested, the voting code is public domain and can be reviewed.  At this point, the entire voting system consists of PHP code, a small piece of javascript that runs in the browser, and a perl script that handles e-mail delivery.  Since the addition of the admin interface, even the administration functions are now in PHP.  The OpenSTV portion is written in perl, and is also opensource, though there is a requested donation (which has been made on behalf of Maemo for our use of it).&lt;br /&gt;
&lt;br /&gt;
== Database Setup ==&lt;br /&gt;
&lt;br /&gt;
The database schema for the voting database is also checked in as an SQL script that can be used to create all tables needed for the scripts to function.  Any updates to tables should be included in this schema.&lt;br /&gt;
&lt;br /&gt;
=== Individual Tables ===&lt;br /&gt;
&lt;br /&gt;
There are several tables in the election interface.  Below is a brief description of each, as they exist at the time of writing this wiki page.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Table Name&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
| admin_users&lt;br /&gt;
| This table contains the information needed to validate users of the administration interface.&lt;br /&gt;
|-&lt;br /&gt;
| elections&lt;br /&gt;
| This contains a list of all elections, past, present, and future.&lt;br /&gt;
|-&lt;br /&gt;
| election_anon_tokens&lt;br /&gt;
| This contains a list of all validation strings ever made, and indicates which election the token was made for, but not which voter.&lt;br /&gt;
|-&lt;br /&gt;
| election_choices&lt;br /&gt;
| This contains the choices for all elections, from Yes/No to candidates for elections.&lt;br /&gt;
|-&lt;br /&gt;
| election_results&lt;br /&gt;
| This contains html blobs that are shown as official election results.&lt;br /&gt;
|-&lt;br /&gt;
| election_tmp_tokens&lt;br /&gt;
| This contains the list of all tokens for all elections.  Each token knows which voter and election it belongs to (via numeric index). Obsolete tokens (for elections that are closed) shall get deleted from this table.&lt;br /&gt;
|-&lt;br /&gt;
| election_votes&lt;br /&gt;
| This contains the actual votes for an election.  The only references here are to election_anon_tokens, to indicate which votes go to which verification string.&lt;br /&gt;
|-&lt;br /&gt;
| electorate&lt;br /&gt;
| This contains the list of all eligible voters for all elections.&lt;br /&gt;
|-&lt;br /&gt;
| midgard_users&lt;br /&gt;
| This is a temporary table, imported from Midgard and/or the garage to allow scripts to update the electorate in an easier fashion. Creation date of this table determines the karma, account age etc used to decide eligibility of a user.&lt;br /&gt;
|-&lt;br /&gt;
| outbound_email&lt;br /&gt;
| This system handles queuing and batching mail to prevent us from looking like spammers. Temporary table. Depletes as mails get sent out.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Cloning Voting Tokens ==&lt;br /&gt;
&lt;br /&gt;
One option available for administrators is to &amp;quot;clone&amp;quot; voting tokens from one election into another.  This allows one &amp;quot;password&amp;quot; to be used in two or more elections.  This process is often desirable when two elections are happening at the same time or in close succession, as it cuts down on the number of tokens mailed out, and eliminates confusion about which voting token string to use for a given election.&lt;br /&gt;
&lt;br /&gt;
For example, the Coding Competitions often have 5 to 10 categories, each with a separate election.   Having 5 to 10 tokens mailed to voters could cause spam triggers, and/or could confuse voters as to which token to use for which category.  Instead, one token is created, and cloned to the other categories.  The allows a voter to use the same e-mail and password to vote in all Coding Competition elections, but still only allows one vote per voter per category. &lt;br /&gt;
&lt;br /&gt;
Cloning works because each token has a reference to the voter and election for which it exists.  When a token is cloned a &#039;&#039;&#039;copy&#039;&#039;&#039; is made with a &#039;&#039;different&#039;&#039; election identifier.  This means two tokens exist with the same random &amp;quot;string&amp;quot;, but each points to the same user and a &#039;&#039;different&#039;&#039; election.  When a voter casts a vote in one election, just the token for that election gets destroyed.&lt;br /&gt;
&lt;br /&gt;
This is also the reason tokens can&#039;t be cloned after voting has opened on an election.  Since voting tokens are destroyed as the vote is cast, cloning from an active election would mean those who already voted in the election would not have a token to copy, and thus would not be able to vote in the cloned election.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border=1&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
! align=&amp;quot;center&amp;quot;| Voting Tokens&lt;br /&gt;
! align=&amp;quot;center&amp;quot;|           Votes &amp;amp; Verify Strings                &lt;br /&gt;
|-&lt;br /&gt;
! Setup Referendum 1 &lt;br /&gt;
|&lt;br /&gt;
 &#039;&#039;&#039;(3UA9VTp,Alice,Ref1)&#039;&#039;&#039; &lt;br /&gt;
 &#039;&#039;&#039;(oUB3VTq,Bob,Ref1)&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;(yUC9VTr,Chad,Ref1)&#039;&#039;&#039;&lt;br /&gt;
 ... [all eligible electorate]  &lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
! Clone Referendum 1 to Election 2 &lt;br /&gt;
|&lt;br /&gt;
 (3UA9VTp,Alice,Ref1)&lt;br /&gt;
 (oUB3VTq,Bob,Ref1) &lt;br /&gt;
 (yUC9VTr,Chad,Ref1)&lt;br /&gt;
 ... &lt;br /&gt;
 &#039;&#039;&#039;(3UA9VTp,Alice,Elect2)&#039;&#039;&#039; &lt;br /&gt;
 &#039;&#039;&#039;(oUB3VTq,Bob,Elect2)&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;(yUC9VTr,Chad,Elect2)&#039;&#039;&#039; &lt;br /&gt;
 ... &lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! Alice &amp;amp; Chad Vote In Referendum 1 &lt;br /&gt;
|&lt;br /&gt;
 &amp;lt;strike&amp;gt;(3UA9VTp,Alice,Ref1)&amp;lt;/strike&amp;gt;&lt;br /&gt;
 (oUB3VTq,Bob,Ref1)&lt;br /&gt;
 &amp;lt;strike&amp;gt;(yUC9VTr,Chad,Ref1)&amp;lt;/strike&amp;gt;&lt;br /&gt;
 ... &lt;br /&gt;
 (3UA9VTp,Alice,Elect2) &lt;br /&gt;
 (oUB3VTq,Bob,Elect2)&lt;br /&gt;
 (yUC9VTr,Chad,Elect2)&lt;br /&gt;
 ... &lt;br /&gt;
|&lt;br /&gt;
 &#039;&#039;&#039;&amp;quot;Yes&amp;quot; &amp;amp;rArr; OMGuVotedN0wg0prty (Ref1)&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;&amp;quot;No&amp;quot; &amp;amp;rArr; Yualw4ysSoN3gatlve (Ref1)&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
! Alice &amp;amp; Bob Vote In Election 2 &lt;br /&gt;
|&lt;br /&gt;
 (oUB3VTq,Bob,Ref1) &lt;br /&gt;
 ...&lt;br /&gt;
 (wUZ3VT5,Zarrah,Ref1)&lt;br /&gt;
 &amp;lt;strike&amp;gt;(3UA9VTp,Alice,Elect2)&amp;lt;/strike&amp;gt; &lt;br /&gt;
 &amp;lt;strike&amp;gt;(oUB3VTq,Bob,Elect2)&amp;lt;/strike&amp;gt; &lt;br /&gt;
 (yUC9VTr,Chad,Elect2)&lt;br /&gt;
 ...&lt;br /&gt;
|&lt;br /&gt;
 &amp;quot;Yes&amp;quot; &amp;amp;rArr; OMGuVotedN0wg0prty (Ref1)&lt;br /&gt;
 &amp;quot;No&amp;quot;  &amp;amp;rArr; Yualw4ysSoN3gatlve (Ref1)&lt;br /&gt;
 &#039;&#039;&#039;&amp;quot;Kyle&amp;quot;,&amp;quot;Lucy&amp;quot; &amp;amp;rArr; M4nUVote4YurBudzEh (Elect2)&#039;&#039;&#039;&lt;br /&gt;
 &#039;&#039;&#039;&amp;quot;Jim&amp;quot;,&amp;quot;Mandy&amp;quot; &amp;amp;rArr; OMGuVotedTo0g0prty (Elect2)&#039;&#039;&#039;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>93.200.111.117</name></author>
	</entry>
</feed>