<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.sugarlabs.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Chimosky</id>
	<title>Sugar Labs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.sugarlabs.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Chimosky"/>
	<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/go/Special:Contributions/Chimosky"/>
	<updated>2026-05-19T23:09:26Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.0</generator>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/smtp&amp;diff=104786</id>
		<title>Service/smtp</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/smtp&amp;diff=104786"/>
		<updated>2026-02-24T07:31:59Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: switch to sunjammer.sl.o as I changed the cert because of mta-sts&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
{|class=wikitable&lt;br /&gt;
! hostname           !! service    !! port !! function&lt;br /&gt;
|-&lt;br /&gt;
| sunjammer.sugarlabs.org || smtp       || 25   || Local delivery (plain SMTP)&lt;br /&gt;
|-&lt;br /&gt;
| sunjammer.sugarlabs.org || [http://www.faqs.org/rfcs/rfc2476.html submission] || 587  || SMTP with STARTTLS, legacy&lt;br /&gt;
|-&lt;br /&gt;
| sunjammer.sugarlabs.org || [https://tools.ietf.org/html/rfc6409 submissions]  || 465  || Email relay (SMTP with SSL, password authentication required)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/sunjammer]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* postmaster AT sugarlabs DOT org&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]]&lt;br /&gt;
* (add yourself here if you tend to the postmaster [[Machine/rt|RT]] queue)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
* Users with a Sugar Labs [[Service/shell|shell account]] on [[Machine/sunjammer|sunjammer]] can use our SMTP relay for personal email submission. &#039;&#039;Any abuse will be prosecuted.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The [https://tools.ietf.org/html/rfc6409 submissions] port (465) is preferred for email relay. Unauthenticated and unencrypted connections are not allowed to relay.&lt;br /&gt;
&lt;br /&gt;
* All email originating from the sugarlabs.org domain must be submitted through our SMTP server. &#039;&#039;&#039;Failure to do so may result in your email being blocked by spam filters.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== SPF ==&lt;br /&gt;
&lt;br /&gt;
Our domains use a non-strict (~all) [http://en.wikipedia.org/wiki/Sender_Policy_Framework SPF] records.&lt;br /&gt;
&lt;br /&gt;
You can add an spf record in the zone file in the form&lt;br /&gt;
&lt;br /&gt;
  hostname         TXT     &amp;quot;v=spf1 redirect=_spf.hostname.sugarlabs.org&amp;quot;&lt;br /&gt;
  _spf.hostname    TXT     &amp;quot;v=spf1 ip4:IPv4_of_hostname/mask ip6:IPv6_of_hostname/mask a:hostname.sugarlabs.org mx:hostname.sugarlabs.org ~all&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;a&#039;&#039;&#039; and &#039;&#039;&#039;mx&#039;&#039;&#039; values are authorized mail server by domain name and authorized server by domain MX record, the MX record should also be defined&lt;br /&gt;
for hostname.&lt;br /&gt;
&lt;br /&gt;
Also maintain spacing and formatting for each section you add in the zone file.&lt;br /&gt;
&lt;br /&gt;
== DKIM ==&lt;br /&gt;
&lt;br /&gt;
Our domain publishes a [http://en.wikipedia.org/wiki/DKIM DKIM] key.&lt;br /&gt;
&lt;br /&gt;
To test DKIM, send an email to autorespond+dkim@dk.elandsys.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To generate an ed25519 key to use for DKIM, you can use openssl&lt;br /&gt;
&lt;br /&gt;
  # Generate ed25519 key&lt;br /&gt;
  $ openssl genpkey -algorithm ed25519 -out dkim_private.pem&lt;br /&gt;
  # Generate public key from private key&lt;br /&gt;
  $ openssl pkey -in dkim_private.pem -pubout -out dkim_public.pem&lt;br /&gt;
&lt;br /&gt;
For ed25519 keys, the p value in the DKIM record must only contain the BASE64 encoded public key, without an ASN.1 structure&lt;br /&gt;
&lt;br /&gt;
  $ openssl asn1parse -in dkim_public.pem -offset 12 -noout -out /dev/stdout | openssl base64&lt;br /&gt;
  VGhpcyBpcyBqc3V0ZSBhc29ka2ZvYXNrZWpkZmtsc2pkZgo=&lt;br /&gt;
&lt;br /&gt;
Your entry would look like this&lt;br /&gt;
&lt;br /&gt;
  selector1._domainkey.hostname      TXT     &amp;quot;v=DKIM1; g=*; k=ed25519; p=VGhpcyBpcyBqc3V0ZSBhc29ka2ZvYXNrZWpkZmtsc2pkZgo=&amp;quot;&lt;br /&gt;
  _adsp._domainkey.hostname          TXT     &amp;quot;dkim=unknown&amp;quot;&lt;br /&gt;
&lt;br /&gt;
When using an ed25519 key, you&#039;ll need to add a fallback RSA key for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
  # Generate rsa key&lt;br /&gt;
  $ openssl genrsa -out rsa_private.key 2048&lt;br /&gt;
  # Generate public key from private key&lt;br /&gt;
  $ openssl rsa -in rsa_private.key -pubout -outform der 2&amp;gt;/dev/null | openssl base64 -A&lt;br /&gt;
&lt;br /&gt;
You can then add a KeyTable and SigningTable to your opendkim.conf&lt;br /&gt;
&lt;br /&gt;
  KeyTable                refile:/etc/opendkim/KeyTable&lt;br /&gt;
  SigningTable            refile:/etc/opendkim/SigningTable&lt;br /&gt;
&lt;br /&gt;
  # Contents of KeyTable with both keys&lt;br /&gt;
  selector1._domainkey.hostname.sugarlabs.org hostname.domain-name:selector1:/path/to/selector1/private/*.key&lt;br /&gt;
  selector2._domainkey.hostname.sugarlabs.org hostname.domain-name:selector2:/path/to/selector2/private/*.key&lt;br /&gt;
&lt;br /&gt;
  # Contents of SigningTable&lt;br /&gt;
  *@hostname.domain-name selector1._domainkey.hostname.sugarlabs.org&lt;br /&gt;
  *@hostname.domain-name selector2._domainkey.hostname.sugarlabs.org&lt;br /&gt;
&lt;br /&gt;
Then add a DKIM record for the second selector &lt;br /&gt;
&lt;br /&gt;
  w-mail._domainkey.weblate       IN      TXT     (&amp;quot;v=DKIM1; h=sha256; k=rsa; p=&amp;quot;*&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
The value of p is the public key of the generated RSA key above.&lt;br /&gt;
&lt;br /&gt;
Ensure your private keys are on hostname.&lt;br /&gt;
&lt;br /&gt;
== Set up ==&lt;br /&gt;
&lt;br /&gt;
=== Thunderbird ===&lt;br /&gt;
&lt;br /&gt;
These are the settings for setting up SMTP with Thunderbird. Note that you use your LDAP username and password, and that the username __&#039;&#039;&#039;does not&#039;&#039;&#039;__ have &amp;quot;@sugarlabs.org&amp;quot; at the end.&lt;br /&gt;
&lt;br /&gt;
{|class=wikitable&lt;br /&gt;
! Server name        !! Port       !! Connection security !! Authentication method !! User name&lt;br /&gt;
|-&lt;br /&gt;
| smtp.sugarlabs.org || 587       || STARTTLS   || Normal Password || your LDAP username -- AND WITHOUT @SUGARLABS.ORG AT THE END!&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot from 2024-06-13 22-45-20.png|thumb|left|example of smtp set up in thunderbird ]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Service/imap]]&lt;br /&gt;
* [[Service/webmail]]&lt;br /&gt;
* [[Service/email]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Service|imap]]&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/lists&amp;diff=104781</id>
		<title>Service/lists</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/lists&amp;diff=104781"/>
		<updated>2026-02-04T22:44:30Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Undo mistake.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* https://lists.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/bender]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* For problems concerning a specific mailing-list, please contact the individual administrator reported on in the mailing-list summary page&lt;br /&gt;
* Technical contact for Mailman and general sugarlabs.org email routing: &#039;&#039;&#039;postmaster AT sugarlabs DOT org&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
For non-emergency calls, preferably send email to the administrative contact above.&lt;br /&gt;
&lt;br /&gt;
* [[User:bernie|Bernie Innocenti]]&lt;br /&gt;
* [[User:Chimosky|Chihurumnaya Ibiam]]&lt;br /&gt;
&lt;br /&gt;
== Requesting a new mailing list ==&lt;br /&gt;
&lt;br /&gt;
The best way to start a new mailing list is to begin a discussion on a related list that already exists,&lt;br /&gt;
and once the discussion becomes active, to ask for a separate list for that topic or that sort of traffic.&lt;br /&gt;
&lt;br /&gt;
When you have a critical mass of people regularly talking about the same topic, request a mailing list by&lt;br /&gt;
emailing the following information to the administrative contact:&lt;br /&gt;
&lt;br /&gt;
# The name you want for your mailing list, with alternative names if the first one is taken&lt;br /&gt;
# A description of the list, its purpose, and why it&#039;s needed (being able to say &amp;quot;we&#039;ve been talking on this other list for a while, and the discussion has grown too big - see these archive links&amp;quot; is helpful)&lt;br /&gt;
# The name/email of the list admin, and of at least one other moderator (minimum one admin and one moderator)&lt;br /&gt;
# At least 10 names/emails of people who want to be the initial subscribers&lt;br /&gt;
&lt;br /&gt;
It may take up to 48h to hear a response back, so please be patient!&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | User&lt;br /&gt;
|{{Code|mailman}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Home&lt;br /&gt;
|{{Code|/opt/mailman}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Daemon&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/systemd/system/mailman3.service}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/systemd/system/mailmanweb.service}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/systemd/system/uwsgi.service}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Logs&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/log/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/opt/mailman/web/logs/*}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/opt/mailman/mm/var/logs/*}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Config&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/nginx/sites-available/mailman.sugarlabs.org}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/mailman3/*}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Ports&lt;br /&gt;
|&lt;br /&gt;
{{Code|443}} HTTP server&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|ss -tnlp}} View service ports&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Admin scripts&lt;br /&gt;
|&lt;br /&gt;
{{Code|/opt/mailman/mm/bin/}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sysadmin Recipes ==&lt;br /&gt;
&lt;br /&gt;
=== Adding a new a mailing list ===&lt;br /&gt;
&lt;br /&gt;
* Login to mailman user.&lt;br /&gt;
&lt;br /&gt;
* Create the list:&lt;br /&gt;
&lt;br /&gt;
 python3 create-list.py --list LISTNAME&lt;br /&gt;
&lt;br /&gt;
Mailman3 has separate parts and the core communicates with a [https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/rest.html REST API], &lt;br /&gt;
the script is aimed to make it easier to create a list, and can be viewed&lt;br /&gt;
to see how to authenticate to the API.&lt;br /&gt;
&lt;br /&gt;
* Send additional instructions to list administrator&lt;br /&gt;
&lt;br /&gt;
 I created the new list LISTNAME@lists.sugarlabs.org.&lt;br /&gt;
 &lt;br /&gt;
 You are the list admin, and should have received a welcome message&lt;br /&gt;
 with your admin password. You can share this role with others, if&lt;br /&gt;
 you wish, or nominate one or more moderators.&lt;br /&gt;
 &lt;br /&gt;
 Feel free to make any configuration changes you need. In particular,&lt;br /&gt;
 you may want to add a meaningful summary and description of what this&lt;br /&gt;
 list is about. Please, notify systems@ if you change security or privacy&lt;br /&gt;
 related settings.&lt;br /&gt;
&lt;br /&gt;
After making changes to any config, restart all three services as django has quite the&lt;br /&gt;
persistent cache.&lt;br /&gt;
&lt;br /&gt;
You can make any changes you need to make to any list using the mailmanclient, see [https://docs.mailman3.org/projects/mailmanclient/en/latest/src/mailmanclient/docs/using.html mailmanclient] for more info.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Mailing_Lists]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Service|zzz]]&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/lists&amp;diff=104780</id>
		<title>Service/lists</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/lists&amp;diff=104780"/>
		<updated>2026-02-04T22:43:01Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Add mailmanclient doc.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Adding a new a mailing list ===&lt;br /&gt;
&lt;br /&gt;
* Login to mailman user.&lt;br /&gt;
&lt;br /&gt;
* Create the list:&lt;br /&gt;
&lt;br /&gt;
 python3 create-list.py --list LISTNAME&lt;br /&gt;
&lt;br /&gt;
Mailman3 has separate parts and the core communicates with a [https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/rest.html REST API], &lt;br /&gt;
the script is aimed to make it easier to create a list, and can be viewed&lt;br /&gt;
to see how to authenticate to the API.&lt;br /&gt;
&lt;br /&gt;
* Send additional instructions to list administrator&lt;br /&gt;
&lt;br /&gt;
 I created the new list LISTNAME@lists.sugarlabs.org.&lt;br /&gt;
 &lt;br /&gt;
 You are the list admin, and should have received a welcome message&lt;br /&gt;
 with your admin password. You can share this role with others, if&lt;br /&gt;
 you wish, or nominate one or more moderators.&lt;br /&gt;
 &lt;br /&gt;
 Feel free to make any configuration changes you need. In particular,&lt;br /&gt;
 you may want to add a meaningful summary and description of what this&lt;br /&gt;
 list is about. Please, notify systems@ if you change security or privacy&lt;br /&gt;
 related settings.&lt;br /&gt;
&lt;br /&gt;
After making changes to any config, restart all three services as django has quite the&lt;br /&gt;
persistent cache.&lt;br /&gt;
&lt;br /&gt;
You can make any changes you need to make to any list using the mailmanclient, see [https://docs.mailman3.org/projects/mailmanclient/en/latest/src/mailmanclient/docs/using.html mailmanclient] for more info.&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/lists&amp;diff=104773</id>
		<title>Service/lists</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/lists&amp;diff=104773"/>
		<updated>2026-01-31T21:38:45Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Remove mailman hostname as it no longer exists.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* https://lists.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/bender]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* For problems concerning a specific mailing-list, please contact the individual administrator reported on in the mailing-list summary page&lt;br /&gt;
* Technical contact for Mailman and general sugarlabs.org email routing: &#039;&#039;&#039;postmaster AT sugarlabs DOT org&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
For non-emergency calls, preferably send email to the administrative contact above.&lt;br /&gt;
&lt;br /&gt;
* [[User:bernie|Bernie Innocenti]]&lt;br /&gt;
* [[User:Chimosky|Chihurumnaya Ibiam]]&lt;br /&gt;
&lt;br /&gt;
== Requesting a new mailing list ==&lt;br /&gt;
&lt;br /&gt;
The best way to start a new mailing list is to begin a discussion on a related list that already exists,&lt;br /&gt;
and once the discussion becomes active, to ask for a separate list for that topic or that sort of traffic.&lt;br /&gt;
&lt;br /&gt;
When you have a critical mass of people regularly talking about the same topic, request a mailing list by&lt;br /&gt;
emailing the following information to the administrative contact:&lt;br /&gt;
&lt;br /&gt;
# The name you want for your mailing list, with alternative names if the first one is taken&lt;br /&gt;
# A description of the list, its purpose, and why it&#039;s needed (being able to say &amp;quot;we&#039;ve been talking on this other list for a while, and the discussion has grown too big - see these archive links&amp;quot; is helpful)&lt;br /&gt;
# The name/email of the list admin, and of at least one other moderator (minimum one admin and one moderator)&lt;br /&gt;
# At least 10 names/emails of people who want to be the initial subscribers&lt;br /&gt;
&lt;br /&gt;
It may take up to 48h to hear a response back, so please be patient!&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | User&lt;br /&gt;
|{{Code|mailman}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Home&lt;br /&gt;
|{{Code|/opt/mailman}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Daemon&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/systemd/system/mailman3.service}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/systemd/system/mailmanweb.service}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/systemd/system/uwsgi.service}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Logs&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/log/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/opt/mailman/web/logs/*}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/opt/mailman/mm/var/logs/*}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Config&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/nginx/sites-available/mailman.sugarlabs.org}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/mailman3/*}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Ports&lt;br /&gt;
|&lt;br /&gt;
{{Code|443}} HTTP server&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|ss -tnlp}} View service ports&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Admin scripts&lt;br /&gt;
|&lt;br /&gt;
{{Code|/opt/mailman/mm/bin/}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sysadmin Recipes ==&lt;br /&gt;
&lt;br /&gt;
=== Adding a new a mailing list ===&lt;br /&gt;
&lt;br /&gt;
* Login to mailman user.&lt;br /&gt;
&lt;br /&gt;
* Create the list:&lt;br /&gt;
&lt;br /&gt;
 python3 create-list.py --list LISTNAME&lt;br /&gt;
&lt;br /&gt;
Mailman3 has separate parts and the core communicates with a [https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/rest.html REST API], &lt;br /&gt;
the script is aimed to make it easier to create a list, and can be viewed&lt;br /&gt;
to see how to authenticate to the API.&lt;br /&gt;
&lt;br /&gt;
* Send additional instructions to list administrator&lt;br /&gt;
&lt;br /&gt;
 I created the new list LISTNAME@lists.sugarlabs.org.&lt;br /&gt;
 &lt;br /&gt;
 You are the list admin, and should have received a welcome message&lt;br /&gt;
 with your admin password. You can share this role with others, if&lt;br /&gt;
 you wish, or nominate one or more moderators.&lt;br /&gt;
 &lt;br /&gt;
 Feel free to make any configuration changes you need. In particular,&lt;br /&gt;
 you may want to add a meaningful summary and description of what this&lt;br /&gt;
 list is about. Please, notify systems@ if you change security or privacy&lt;br /&gt;
 related settings.&lt;br /&gt;
&lt;br /&gt;
After making changes to any config, restart all three services as django has quite the&lt;br /&gt;
persistent cache.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Mailing_Lists]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Service|zzz]]&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/lists&amp;diff=104769</id>
		<title>Service/lists</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/lists&amp;diff=104769"/>
		<updated>2026-01-24T01:12:57Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Note for config changes.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* https://lists.sugarlabs.org/&lt;br /&gt;
* https://mailman.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/bender]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* For problems concerning a specific mailing-list, please contact the individual administrator reported on in the mailing-list summary page&lt;br /&gt;
* Technical contact for Mailman and general sugarlabs.org email routing: &#039;&#039;&#039;postmaster AT sugarlabs DOT org&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
For non-emergency calls, preferably send email to the administrative contact above.&lt;br /&gt;
&lt;br /&gt;
* [[User:bernie|Bernie Innocenti]]&lt;br /&gt;
* [[User:Chimosky|Chihurumnaya Ibiam]]&lt;br /&gt;
&lt;br /&gt;
== Requesting a new mailing list ==&lt;br /&gt;
&lt;br /&gt;
The best way to start a new mailing list is to begin a discussion on a related list that already exists,&lt;br /&gt;
and once the discussion becomes active, to ask for a separate list for that topic or that sort of traffic.&lt;br /&gt;
&lt;br /&gt;
When you have a critical mass of people regularly talking about the same topic, request a mailing list by&lt;br /&gt;
emailing the following information to the administrative contact:&lt;br /&gt;
&lt;br /&gt;
# The name you want for your mailing list, with alternative names if the first one is taken&lt;br /&gt;
# A description of the list, its purpose, and why it&#039;s needed (being able to say &amp;quot;we&#039;ve been talking on this other list for a while, and the discussion has grown too big - see these archive links&amp;quot; is helpful)&lt;br /&gt;
# The name/email of the list admin, and of at least one other moderator (minimum one admin and one moderator)&lt;br /&gt;
# At least 10 names/emails of people who want to be the initial subscribers&lt;br /&gt;
&lt;br /&gt;
It may take up to 48h to hear a response back, so please be patient!&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | User&lt;br /&gt;
|{{Code|mailman}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Home&lt;br /&gt;
|{{Code|/opt/mailman}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Daemon&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/systemd/system/mailman3.service}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/systemd/system/mailmanweb.service}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/systemd/system/uwsgi.service}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Logs&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/log/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/opt/mailman/web/logs/*}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/opt/mailman/mm/var/logs/*}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Config&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/nginx/sites-available/mailman.sugarlabs.org}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/mailman3/*}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Ports&lt;br /&gt;
|&lt;br /&gt;
{{Code|443}} HTTP server&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|ss -tnlp}} View service ports&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Admin scripts&lt;br /&gt;
|&lt;br /&gt;
{{Code|/opt/mailman/mm/bin/}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sysadmin Recipes ==&lt;br /&gt;
&lt;br /&gt;
=== Adding a new a mailing list ===&lt;br /&gt;
&lt;br /&gt;
* Login to mailman user.&lt;br /&gt;
&lt;br /&gt;
* Create the list:&lt;br /&gt;
&lt;br /&gt;
 python3 create-list.py --list LISTNAME&lt;br /&gt;
&lt;br /&gt;
Mailman3 has separate parts and the core communicates with a [https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/rest.html REST API], &lt;br /&gt;
the script is aimed to make it easier to create a list, and can be viewed&lt;br /&gt;
to see how to authenticate to the API.&lt;br /&gt;
&lt;br /&gt;
* Send additional instructions to list administrator&lt;br /&gt;
&lt;br /&gt;
 I created the new list LISTNAME@lists.sugarlabs.org.&lt;br /&gt;
 &lt;br /&gt;
 You are the list admin, and should have received a welcome message&lt;br /&gt;
 with your admin password. You can share this role with others, if&lt;br /&gt;
 you wish, or nominate one or more moderators.&lt;br /&gt;
 &lt;br /&gt;
 Feel free to make any configuration changes you need. In particular,&lt;br /&gt;
 you may want to add a meaningful summary and description of what this&lt;br /&gt;
 list is about. Please, notify systems@ if you change security or privacy&lt;br /&gt;
 related settings.&lt;br /&gt;
&lt;br /&gt;
After making changes to any config, restart all three services as django has quite the&lt;br /&gt;
persistent cache.&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Mailing_Lists]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Service|zzz]]&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/lists&amp;diff=104768</id>
		<title>Service/lists</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/lists&amp;diff=104768"/>
		<updated>2026-01-24T01:08:50Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* https://lists.sugarlabs.org/&lt;br /&gt;
* https://mailman.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/bender]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* For problems concerning a specific mailing-list, please contact the individual administrator reported on in the mailing-list summary page&lt;br /&gt;
* Technical contact for Mailman and general sugarlabs.org email routing: &#039;&#039;&#039;postmaster AT sugarlabs DOT org&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
For non-emergency calls, preferably send email to the administrative contact above.&lt;br /&gt;
&lt;br /&gt;
* [[User:bernie|Bernie Innocenti]]&lt;br /&gt;
* [[User:Chimosky|Chihurumnaya Ibiam]]&lt;br /&gt;
&lt;br /&gt;
== Requesting a new mailing list ==&lt;br /&gt;
&lt;br /&gt;
The best way to start a new mailing list is to begin a discussion on a related list that already exists,&lt;br /&gt;
and once the discussion becomes active, to ask for a separate list for that topic or that sort of traffic.&lt;br /&gt;
&lt;br /&gt;
When you have a critical mass of people regularly talking about the same topic, request a mailing list by&lt;br /&gt;
emailing the following information to the administrative contact:&lt;br /&gt;
&lt;br /&gt;
# The name you want for your mailing list, with alternative names if the first one is taken&lt;br /&gt;
# A description of the list, its purpose, and why it&#039;s needed (being able to say &amp;quot;we&#039;ve been talking on this other list for a while, and the discussion has grown too big - see these archive links&amp;quot; is helpful)&lt;br /&gt;
# The name/email of the list admin, and of at least one other moderator (minimum one admin and one moderator)&lt;br /&gt;
# At least 10 names/emails of people who want to be the initial subscribers&lt;br /&gt;
&lt;br /&gt;
It may take up to 48h to hear a response back, so please be patient!&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | User&lt;br /&gt;
|{{Code|mailman}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Home&lt;br /&gt;
|{{Code|/opt/mailman}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Daemon&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/systemd/system/mailman3.service}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/systemd/system/mailmanweb.service}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/systemd/system/uwsgi.service}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Logs&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/log/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/opt/mailman/web/logs/*}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/opt/mailman/mm/var/logs/*}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Config&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/nginx/sites-available/mailman.sugarlabs.org}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/mailman3/*}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Ports&lt;br /&gt;
|&lt;br /&gt;
{{Code|443}} HTTP server&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|ss -tnlp}} View service ports&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Admin scripts&lt;br /&gt;
|&lt;br /&gt;
{{Code|/opt/mailman/mm/bin/}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sysadmin Recipes ==&lt;br /&gt;
&lt;br /&gt;
=== Adding a new a mailing list ===&lt;br /&gt;
&lt;br /&gt;
* Login to mailman user.&lt;br /&gt;
&lt;br /&gt;
* Create the list:&lt;br /&gt;
&lt;br /&gt;
 python3 create-list.py --list LISTNAME&lt;br /&gt;
&lt;br /&gt;
Mailman3 has separate parts and the core communicates with a [https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/rest.html REST API], &lt;br /&gt;
the script is aimed to make it easier to create a list, and can be viewed&lt;br /&gt;
to see how to authenticate to the API.&lt;br /&gt;
&lt;br /&gt;
* Send additional instructions to list administrator&lt;br /&gt;
&lt;br /&gt;
 I created the new list LISTNAME@lists.sugarlabs.org.&lt;br /&gt;
 &lt;br /&gt;
 You are the list admin, and should have received a welcome message&lt;br /&gt;
 with your admin password. You can share this role with others, if&lt;br /&gt;
 you wish, or nominate one or more moderators.&lt;br /&gt;
 &lt;br /&gt;
 Feel free to make any configuration changes you need. In particular,&lt;br /&gt;
 you may want to add a meaningful summary and description of what this&lt;br /&gt;
 list is about. Please, notify systems@ if you change security or privacy&lt;br /&gt;
 related settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Mailing_Lists]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Service|zzz]]&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/lists&amp;diff=104767</id>
		<title>Service/lists</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/lists&amp;diff=104767"/>
		<updated>2026-01-24T01:07:27Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Add mailman hostname and change machine.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* https://lists.sugarlabs.org/&lt;br /&gt;
* https://mailman.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/bender]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* For problems concerning a specific mailing-list, please contact the individual administrator reported on in the mailing-list summary page&lt;br /&gt;
* Technical contact for Mailman and general sugarlabs.org email routing: &#039;&#039;&#039;postmaster AT sugarlabs DOT org&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
For non-emergency calls, preferably send email to the administrative contact above.&lt;br /&gt;
&lt;br /&gt;
* [[User:bernie|Bernie Innocenti]]&lt;br /&gt;
* [[User:Chimosky|Chihurumnaya Ibiam]]&lt;br /&gt;
&lt;br /&gt;
== Requesting a new mailing list ==&lt;br /&gt;
&lt;br /&gt;
The best way to start a new mailing list is to begin a discussion on a related list that already exists,&lt;br /&gt;
and once the discussion becomes active, to ask for a separate list for that topic or that sort of traffic.&lt;br /&gt;
&lt;br /&gt;
When you have a critical mass of people regularly talking about the same topic, request a mailing list by&lt;br /&gt;
emailing the following information to the administrative contact:&lt;br /&gt;
&lt;br /&gt;
# The name you want for your mailing list, with alternative names if the first one is taken&lt;br /&gt;
# A description of the list, its purpose, and why it&#039;s needed (being able to say &amp;quot;we&#039;ve been talking on this other list for a while, and the discussion has grown too big - see these archive links&amp;quot; is helpful)&lt;br /&gt;
# The name/email of the list admin, and of at least one other moderator (minimum one admin and one moderator)&lt;br /&gt;
# At least 10 names/emails of people who want to be the initial subscribers&lt;br /&gt;
&lt;br /&gt;
It may take up to 48h to hear a response back, so please be patient!&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | User&lt;br /&gt;
|{{Code|mailman}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Home&lt;br /&gt;
|{{Code|/opt/mailman}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Daemon&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/systemd/system/mailman3.service}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/systemd/system/mailmanweb.service}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/systemd/system/uwsgi.service}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Logs&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/log/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/opt/mailman/web/logs/*}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/opt/mailman/mm/var/logs/*}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Config&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/nginx/sites-available/mailman.sugarlabs.org}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/mailman3/*}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Ports&lt;br /&gt;
|&lt;br /&gt;
{{Code|443}} HTTP server&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|ss -tnlp}} View service ports&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Admin scripts&lt;br /&gt;
|&lt;br /&gt;
{{Code|/opt/mailman/mm/bin/}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sysadmin Recipes ==&lt;br /&gt;
&lt;br /&gt;
=== Adding a new a mailing list ===&lt;br /&gt;
&lt;br /&gt;
* Login to mailman user.&lt;br /&gt;
&lt;br /&gt;
* Create the list:&lt;br /&gt;
&lt;br /&gt;
 python3 create-list.py --list LISTNAME&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mailman3 has separate parts and the core communicates with a [https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/rest.html REST API], &lt;br /&gt;
the script is aimed to make it easier to create a list, and can be viewed&lt;br /&gt;
to see how to authenticate to the API.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Send additional instructions to list administrator&lt;br /&gt;
&lt;br /&gt;
 I created the new list LISTNAME@lists.sugarlabs.org.&lt;br /&gt;
 &lt;br /&gt;
 You are the list admin, and should have received a welcome message&lt;br /&gt;
 with your admin password. You can share this role with others, if&lt;br /&gt;
 you wish, or nominate one or more moderators.&lt;br /&gt;
 &lt;br /&gt;
 Feel free to make any configuration changes you need. In particular,&lt;br /&gt;
 you may want to add a meaningful summary and description of what this&lt;br /&gt;
 list is about. Please, notify systems@ if you change security or privacy&lt;br /&gt;
 related settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Mailing_Lists]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Service|zzz]]&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/lists&amp;diff=104766</id>
		<title>Service/lists</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/lists&amp;diff=104766"/>
		<updated>2026-01-24T01:04:38Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Change information to reflect move to mailman3.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* https://lists.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/sunjammer]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* For problems concerning a specific mailing-list, please contact the individual administrator reported on in the mailing-list summary page&lt;br /&gt;
* Technical contact for Mailman and general sugarlabs.org email routing: &#039;&#039;&#039;postmaster AT sugarlabs DOT org&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
For non-emergency calls, preferably send email to the administrative contact above.&lt;br /&gt;
&lt;br /&gt;
* [[User:bernie|Bernie Innocenti]]&lt;br /&gt;
* [[User:Chimosky|Chihurumnaya Ibiam]]&lt;br /&gt;
&lt;br /&gt;
== Requesting a new mailing list ==&lt;br /&gt;
&lt;br /&gt;
The best way to start a new mailing list is to begin a discussion on a related list that already exists,&lt;br /&gt;
and once the discussion becomes active, to ask for a separate list for that topic or that sort of traffic.&lt;br /&gt;
&lt;br /&gt;
When you have a critical mass of people regularly talking about the same topic, request a mailing list by&lt;br /&gt;
emailing the following information to the administrative contact:&lt;br /&gt;
&lt;br /&gt;
# The name you want for your mailing list, with alternative names if the first one is taken&lt;br /&gt;
# A description of the list, its purpose, and why it&#039;s needed (being able to say &amp;quot;we&#039;ve been talking on this other list for a while, and the discussion has grown too big - see these archive links&amp;quot; is helpful)&lt;br /&gt;
# The name/email of the list admin, and of at least one other moderator (minimum one admin and one moderator)&lt;br /&gt;
# At least 10 names/emails of people who want to be the initial subscribers&lt;br /&gt;
&lt;br /&gt;
It may take up to 48h to hear a response back, so please be patient!&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | User&lt;br /&gt;
|{{Code|mailman}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Home&lt;br /&gt;
|{{Code|/opt/mailman}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Daemon&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/systemd/system/mailman3.service}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/systemd/system/mailmanweb.service}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/systemd/system/uwsgi.service}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Logs&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/log/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/opt/mailman/web/logs/*}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/opt/mailman/mm/var/logs/*}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Config&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/nginx/sites-available/mailman.sugarlabs.org}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/mailman3/*}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Ports&lt;br /&gt;
|&lt;br /&gt;
{{Code|443}} HTTP server&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|ss -tnlp}} View service ports&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Admin scripts&lt;br /&gt;
|&lt;br /&gt;
{{Code|/opt/mailman/mm/bin/}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Sysadmin Recipes ==&lt;br /&gt;
&lt;br /&gt;
=== Adding a new a mailing list ===&lt;br /&gt;
&lt;br /&gt;
* Login to mailman user.&lt;br /&gt;
&lt;br /&gt;
* Create the list:&lt;br /&gt;
&lt;br /&gt;
 python3 create-list.py --list LISTNAME&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Mailman3 has separate parts and the core communicates with a [https://docs.mailman3.org/projects/mailman/en/latest/src/mailman/rest/docs/rest.html REST API], &lt;br /&gt;
the script is aimed to make it easier to create a list, and can be viewed&lt;br /&gt;
to see how to authenticate to the API.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Send additional instructions to list administrator&lt;br /&gt;
&lt;br /&gt;
 I created the new list LISTNAME@lists.sugarlabs.org.&lt;br /&gt;
 &lt;br /&gt;
 You are the list admin, and should have received a welcome message&lt;br /&gt;
 with your admin password. You can share this role with others, if&lt;br /&gt;
 you wish, or nominate one or more moderators.&lt;br /&gt;
 &lt;br /&gt;
 Feel free to make any configuration changes you need. In particular,&lt;br /&gt;
 you may want to add a meaningful summary and description of what this&lt;br /&gt;
 list is about. Please, notify systems@ if you change security or privacy&lt;br /&gt;
 related settings.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[Mailing_Lists]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Service|zzz]]&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Machine/bender&amp;diff=104640</id>
		<title>Machine/bender</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Machine/bender&amp;diff=104640"/>
		<updated>2025-06-03T17:49:04Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: /* Machines */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Info ==&lt;br /&gt;
Bender and [[Machine/papert | Papert]] are two twin blade servers donated to Sugar Labs in 2021.&lt;br /&gt;
&lt;br /&gt;
Bender is our primary KVM host, while Papert is a hot standby and [[Service/backup|backup]] machine.&lt;br /&gt;
&lt;br /&gt;
== Hostnames ==&lt;br /&gt;
* bender.sugarlabs.org&lt;br /&gt;
* papert.sugarlabs.org&lt;br /&gt;
&lt;br /&gt;
== Machines == &lt;br /&gt;
* [[Machine/lightwave]], [[Service/Nameservers]],&lt;br /&gt;
* [[Machine/weblate]], with [[Service/Weblate]], or https://weblate.sugarlabs.org and https://translate.sugarlabs.org&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
* HPE ProLiant DL360 Gen10 1RU server&lt;br /&gt;
** Dual socket, current configuration has one CPU&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/199342/intel-xeon-gold-5218r-processor-27-5m-cache-2-10-ghz.html Xeon Gold 5218R]&lt;br /&gt;
** 20 cores/40 threads&lt;br /&gt;
** 2.1GHz base frequency, 4.0GHz max turbo frequency&lt;br /&gt;
** 27.5MB of cache&lt;br /&gt;
* 64GB RAM&lt;br /&gt;
* 2TB NVMe SSD&lt;br /&gt;
&lt;br /&gt;
[[Image:BenderRacked.jpg|thumb|320px]]&lt;br /&gt;
&lt;br /&gt;
== Admins ==&lt;br /&gt;
* [[User:MrBIOS|Alex Perez]], MrBIOS on #sugar Libera.chat IRC network&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]], @bernie:matrix.org on Sugar Systems&lt;br /&gt;
&lt;br /&gt;
== Hosting ==&lt;br /&gt;
&lt;br /&gt;
[[Image:SonicColo.jpg|thumb|320px]]&lt;br /&gt;
&lt;br /&gt;
Hosted by Sonic in Santa Rosa CA&lt;br /&gt;
&lt;br /&gt;
== Network configuration ==&lt;br /&gt;
&lt;br /&gt;
Network configuration is managed via [https://netplan.io/ netplan]. To modify, do:&lt;br /&gt;
&lt;br /&gt;
 vi /etc/netplan/bender.yaml&lt;br /&gt;
 netplan generate&lt;br /&gt;
 netplan apply&lt;br /&gt;
&lt;br /&gt;
=== IPv4 ===&lt;br /&gt;
&lt;br /&gt;
Bender and Papert are globally accessible through a public, static IPv4 address&lt;br /&gt;
&lt;br /&gt;
Sonic assigned a /28 network to Sugar Labs. IP assignments are managed in our DNS configuration. Search for &amp;quot;Sonic IP pool&amp;quot; in &amp;lt;code&amp;gt;masters/sugarlabs.org.zone&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Usable IPv4 addresses: 192.184.220.210 ~ 192.184.220.222 (13 addresses)&lt;br /&gt;
* Subnet Mask:     255.255.255.240&lt;br /&gt;
* Default Gateway: 192.184.220.209&lt;br /&gt;
* DNS:             8.8.8.8, 8.8.4.4&lt;br /&gt;
&lt;br /&gt;
=== IPv6 ===&lt;br /&gt;
IPv6 configuration is a bit weird.&lt;br /&gt;
&lt;br /&gt;
 * Public block: 2001:5a8:601:f::/64&lt;br /&gt;
 * Sonic gateway: 2001:5a8:5:3a::15:0/127&lt;br /&gt;
 * Transport IP: 2001:5a8:5:3a::15:1/127&lt;br /&gt;
&lt;br /&gt;
The gateway is configured to route all traffic for our netblock to the transport IP, which is currently assigned to bender.&lt;br /&gt;
&lt;br /&gt;
=== Bridges ===&lt;br /&gt;
The br0 bridge is created at startup and shared with the virtual machines hosted on Bender. It gives the VMs unfiltered access to the external network. There&#039;s no DHCP, all machines must define a static IP configuration, taking care not to stomp onto each other.&lt;br /&gt;
&lt;br /&gt;
There is also a virbr0 bridge created by libvirt on startup from &amp;lt;code&amp;gt;/etc/libvirt/qemu/networks/default.xml&amp;lt;/code&amp;gt;. This is a NAT interface and is not meant for VMs directly serving on the Internet.&lt;br /&gt;
&lt;br /&gt;
Guests simply need to be configured to accept IPv6 routing advertisements. The DNS must be assigned manually.&lt;br /&gt;
&lt;br /&gt;
== Virtualization ==&lt;br /&gt;
&lt;br /&gt;
Virtual machines are KVM guests managed with libvirt.&lt;br /&gt;
&lt;br /&gt;
=== Storage ===&lt;br /&gt;
&lt;br /&gt;
All virtual disks come from a pool backed by the main LVM VG:&lt;br /&gt;
&lt;br /&gt;
  virsh # pool-define-as nvme-pool logical --source-name nvme-pool &lt;br /&gt;
  Pool nvme-pool defined&lt;br /&gt;
  &lt;br /&gt;
  virsh # pool-start nvme-pool&lt;br /&gt;
  Pool nvme-pool started&lt;br /&gt;
  &lt;br /&gt;
  virsh # pool-autostart nvme-pool&lt;br /&gt;
  Pool nvme-pool marked as autostarted&lt;br /&gt;
  &lt;br /&gt;
  virsh # pool-info nvme-pool&lt;br /&gt;
  Name:           nvme-pool&lt;br /&gt;
  UUID:           5812819f-b8bf-484e-98fb-2e100fe83df2&lt;br /&gt;
  State:          running&lt;br /&gt;
  Persistent:     yes&lt;br /&gt;
  Autostart:      yes&lt;br /&gt;
  Capacity:       1.64 TiB&lt;br /&gt;
  Allocation:     250.00 GiB&lt;br /&gt;
  Available:      1.40 TiB&lt;br /&gt;
&lt;br /&gt;
Disks assigned to VMs will appear here:&lt;br /&gt;
&lt;br /&gt;
 virsh # vol-list nvme-pool&lt;br /&gt;
  Name         Path&lt;br /&gt;
 -----------------------------------------&lt;br /&gt;
  aslo1-root   /dev/nvme-pool/aslo1-root&lt;br /&gt;
  aslo1-srv    /dev/nvme-pool/aslo1-srv&lt;br /&gt;
  backup       /dev/nvme-pool/backup&lt;br /&gt;
&lt;br /&gt;
Disks can be created, listed and deleted using the vol-* commands:&lt;br /&gt;
&lt;br /&gt;
  virsh # vol-create-as nvme-pool testvm-root 20G&lt;br /&gt;
  Vol testvm-root created&lt;br /&gt;
  &lt;br /&gt;
  virsh # vol-info testvm-root --pool nvme-pool&lt;br /&gt;
  Name:           testvm-root&lt;br /&gt;
  Type:           block&lt;br /&gt;
  Capacity:       20.00 GiB&lt;br /&gt;
  Allocation:     20.00 GiB&lt;br /&gt;
  &lt;br /&gt;
  virsh # vol-delete testvm-root --pool nvme-pool&lt;br /&gt;
  Vol testvm-root deleted&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: avoid allocating large VM volumes as image file within the host&#039;s root filesystem, as they&#039;re slow and hard to manage. It&#039;s ok to use images for test VMs.&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Machine&amp;diff=104639</id>
		<title>Machine</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Machine&amp;diff=104639"/>
		<updated>2025-06-03T17:48:51Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Add translate.sugarlabs.org domain name as it also points to weblate.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{TeamHeader|Infrastructure Team}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Computing hardware or virtual machines maintained by the Sugar Labs [[Infrastructure Team]].&lt;br /&gt;
&lt;br /&gt;
== Physical ==&lt;br /&gt;
&lt;br /&gt;
* [[Machine/justice]]&lt;br /&gt;
* [[Machine/freedom]]&lt;br /&gt;
* [[Machine/bender]]&lt;br /&gt;
* [[Machine/papert]]&lt;br /&gt;
&lt;br /&gt;
== Virtual ==&lt;br /&gt;
&lt;br /&gt;
* [[Machine/lightwave]], with [[Service/Nameservers]],&lt;br /&gt;
* [[Machine/pootle]], with [[Service/translate]], or https://translate.sugarlabs.org,&lt;br /&gt;
* [[Machine/aslo]], with [[Service/activities]] aslo, or https://activities.laptop.org,&lt;br /&gt;
* [[Machine/library]],&lt;br /&gt;
* [[Machine/aslo3]], with [[Service/activities3]] aslo-v3, https://github.com/sugarlabs/aslo-v3,&lt;br /&gt;
* [[Machine/jita]], with [[Service/git]], [[Service/jabber]], [[Service/meeting]], [[Service/obs]], [[Service/chat]], [[Service/cgit]], [[Service/blacklist]], [[Service/stats]],&lt;br /&gt;
* [[Machine/amnesia]],&lt;br /&gt;
* [[Machine/beacon]], &amp;lt;!-- last audited by quozl on 6th november 2018 using `sudo virsh list --all` --&amp;gt;&lt;br /&gt;
* [[Machine/weblate]], with [[Service/Weblate]], or https://weblate.sugarlabs.org and https://translate.sugarlabs.org, &lt;br /&gt;
* [[Machine/containers]]&lt;br /&gt;
&lt;br /&gt;
== Containers ==&lt;br /&gt;
&lt;br /&gt;
* org.sugarlabs.bugs&lt;br /&gt;
* org.sugarlabs.developer-rebuilder&lt;br /&gt;
* org.sugarlabs.www-rebuilder&lt;br /&gt;
* org.sugarlabs.use-socialhelp&lt;br /&gt;
* org.sugarlabs.socialhelp_sso&lt;br /&gt;
* local_discourse/app&lt;br /&gt;
* org.turtleartday.www-rebuilder&lt;br /&gt;
* org.sugarlabs.help-rebuilder&amp;lt;!-- last audited by quozl on 26th november using `docker ps` --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Student Listing ==&lt;br /&gt;
&lt;br /&gt;
This list was made by a GCI 2018 student.&lt;br /&gt;
&lt;br /&gt;
* [[Machine/backup]]&lt;br /&gt;
* [[Machine/bender]]&lt;br /&gt;
* [[Machine/freedom]]&lt;br /&gt;
* [[Machine/jita]]&lt;br /&gt;
* [[Machine/justice]]&lt;br /&gt;
* [[Machine/lightwave]]&lt;br /&gt;
* [[Machine/pootle]]&lt;br /&gt;
* [[Machine/schools]]&lt;br /&gt;
* [[Machine/schoolserver]]&lt;br /&gt;
* [[Machine/trinity]]&lt;br /&gt;
&lt;br /&gt;
== Automatic Listing ==&lt;br /&gt;
&lt;br /&gt;
This list is generated automatically from Wiki pages that have a prefix of &amp;quot;Machine&amp;quot;.  It may contain subpages of machines.  It may contain machines that have been decommissioned; kept as historical data against future need.&lt;br /&gt;
&lt;br /&gt;
{{Special:PrefixIndex/Machine/}}&lt;br /&gt;
&lt;br /&gt;
[[Image:Sugarlabs systems.jpg|frame]]&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Machine/justice&amp;diff=104638</id>
		<title>Machine/justice</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Machine/justice&amp;diff=104638"/>
		<updated>2025-06-03T17:48:09Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Remove lightwave as it&amp;#039;s no longer hosted on justice, also remove aslo4 as that&amp;#039;s hosted on sunjammer.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{TOCright}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Hostnames ==&lt;br /&gt;
* justice.sugarlabs.org&lt;br /&gt;
* freedom.sugarlabs.org&lt;br /&gt;
&lt;br /&gt;
== Info ==&lt;br /&gt;
&lt;br /&gt;
Freedom and Justice are two twin KVM hosts bought by Sugar Labs in 2012.&lt;br /&gt;
&lt;br /&gt;
Justice is currently our primary VM hosting box, while freedom is a hot-standby running some secondary services in docker containers and backups.&lt;br /&gt;
&lt;br /&gt;
== Machines ==&lt;br /&gt;
&lt;br /&gt;
The following machines services are hosted:&lt;br /&gt;
&lt;br /&gt;
* [[Machine/pootle]], [[Service/translate]],&lt;br /&gt;
* [[Service/activities]] aslo,&lt;br /&gt;
* [[Machine/library]],&lt;br /&gt;
* [[Machine/jita]], [[Service/git]], [[Service/jabber]], [[Service/meeting]], [[Service/obs]], [[Service/chat]], [[Service/cgit]], [[Service/blacklist]], [[Service/stats]],&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
* 2U rack-mountable case&lt;br /&gt;
* Motherboard Supermicro H8SGL (or maybe H8SGL-F)&lt;br /&gt;
* 8-core Opteron 6212 @ 1.7GHz&lt;br /&gt;
* 64GB RAM&lt;br /&gt;
* 2x1TB RAID1&lt;br /&gt;
&lt;br /&gt;
== Management ==&lt;br /&gt;
The two servers have SMT management cards from Supermicro with a seriously awful web interface:&lt;br /&gt;
* [http://justice-mng.sugarlabs.org/ justice-mng.sugarlabs.org]&lt;br /&gt;
* [http://freedom-mng.sugarlabs.org/ freedom-mng.sugarlas.org]&lt;br /&gt;
Of course you need a separate account. Full KVM support requires the Java browser plugin (yuck!), so we mostly use them for the big reset button in case a server hangs (it happened about once per year).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Use a long, unguessable password, but not one you&#039;re also using elsewhere! A few years ago, a backdoor was discovered in this firmware which would reveal all passwords in plaintext with a simple telnet! Also, login uses unencrypted http.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
It&#039;s also possible to talk to the management card from Linux using ipmitool.&lt;br /&gt;
&lt;br /&gt;
Both cards are running firmware version 3.16, which patched a huge backdoor that would trivially reveal all passwords in plaintext. No kidding.  There&#039;s a [https://www.supermicro.com/support/resources/bios_ipmi.php?vendor=2&amp;amp;keywords=H8S newer firmware version], but attempts to update to it failed with both Chrome and Firefox (error: &amp;quot;413 - Request Entity Too Large&amp;quot;). I suspect a bug in their http POST implementation :-(&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
* Justice: Ubuntu 18.04 LTS Bionic&lt;br /&gt;
* Freedom: Ubuntu 18.04 LTS Bionic&lt;br /&gt;
&lt;br /&gt;
== Location ==&lt;br /&gt;
Hosted by the [http://media.mit.edu/ MIT Media Lab] in server room E15-243.&lt;br /&gt;
&lt;br /&gt;
== Admins ==&lt;br /&gt;
* [[User:MrBIOS|Alex Perez]], aperezbios on #sugar libera.chat&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]], bernie on #sugar libera.chat&lt;br /&gt;
* [[User:Srevin03|Srevin Saju]], srevinsaju on #sugar on libera.chat&lt;br /&gt;
&lt;br /&gt;
== Network configuration ==&lt;br /&gt;
Justice is globally accessible through public, static IPv4.&lt;br /&gt;
The IPv6 /64 subnet (6to4) is currently experimental and not associated with AAAA records.&lt;br /&gt;
&lt;br /&gt;
== Hosted VMs ==&lt;br /&gt;
All KVM virtual machines are managed by libvirtd.&lt;br /&gt;
&lt;br /&gt;
See [[Sysadmin/Add virtual machine]] for creating new VMs.&lt;br /&gt;
&lt;br /&gt;
{{Special:PrefixIndex/{{PAGENAME}}/}}&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Machine/bender&amp;diff=104637</id>
		<title>Machine/bender</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Machine/bender&amp;diff=104637"/>
		<updated>2025-06-03T17:46:05Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Add translate.sugarlabs.org domain name as it also points to weblate.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Info ==&lt;br /&gt;
Bender and [[Machine/papert | Papert]] are two twin blade servers donated to Sugar Labs in 2021.&lt;br /&gt;
&lt;br /&gt;
Bender is our primary KVM host, while Papert is a hot standby and [[Service/backup|backup]] machine.&lt;br /&gt;
&lt;br /&gt;
== Hostnames ==&lt;br /&gt;
* bender.sugarlabs.org&lt;br /&gt;
* papert.sugarlabs.org&lt;br /&gt;
&lt;br /&gt;
== Machines == &lt;br /&gt;
* [[Machine/lightwave]], [[Service/Nameservers]],&lt;br /&gt;
* [[Machine/weblate]], with [[Service/Weblate]], or https://weblate.sugarlabs.org, https://translate.sugarlabs.org&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
* HPE ProLiant DL360 Gen10 1RU server&lt;br /&gt;
** Dual socket, current configuration has one CPU&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/199342/intel-xeon-gold-5218r-processor-27-5m-cache-2-10-ghz.html Xeon Gold 5218R]&lt;br /&gt;
** 20 cores/40 threads&lt;br /&gt;
** 2.1GHz base frequency, 4.0GHz max turbo frequency&lt;br /&gt;
** 27.5MB of cache&lt;br /&gt;
* 64GB RAM&lt;br /&gt;
* 2TB NVMe SSD&lt;br /&gt;
&lt;br /&gt;
[[Image:BenderRacked.jpg|thumb|320px]]&lt;br /&gt;
&lt;br /&gt;
== Admins ==&lt;br /&gt;
* [[User:MrBIOS|Alex Perez]], MrBIOS on #sugar Libera.chat IRC network&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]], @bernie:matrix.org on Sugar Systems&lt;br /&gt;
&lt;br /&gt;
== Hosting ==&lt;br /&gt;
&lt;br /&gt;
[[Image:SonicColo.jpg|thumb|320px]]&lt;br /&gt;
&lt;br /&gt;
Hosted by Sonic in Santa Rosa CA&lt;br /&gt;
&lt;br /&gt;
== Network configuration ==&lt;br /&gt;
&lt;br /&gt;
Network configuration is managed via [https://netplan.io/ netplan]. To modify, do:&lt;br /&gt;
&lt;br /&gt;
 vi /etc/netplan/bender.yaml&lt;br /&gt;
 netplan generate&lt;br /&gt;
 netplan apply&lt;br /&gt;
&lt;br /&gt;
=== IPv4 ===&lt;br /&gt;
&lt;br /&gt;
Bender and Papert are globally accessible through a public, static IPv4 address&lt;br /&gt;
&lt;br /&gt;
Sonic assigned a /28 network to Sugar Labs. IP assignments are managed in our DNS configuration. Search for &amp;quot;Sonic IP pool&amp;quot; in &amp;lt;code&amp;gt;masters/sugarlabs.org.zone&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Usable IPv4 addresses: 192.184.220.210 ~ 192.184.220.222 (13 addresses)&lt;br /&gt;
* Subnet Mask:     255.255.255.240&lt;br /&gt;
* Default Gateway: 192.184.220.209&lt;br /&gt;
* DNS:             8.8.8.8, 8.8.4.4&lt;br /&gt;
&lt;br /&gt;
=== IPv6 ===&lt;br /&gt;
IPv6 configuration is a bit weird.&lt;br /&gt;
&lt;br /&gt;
 * Public block: 2001:5a8:601:f::/64&lt;br /&gt;
 * Sonic gateway: 2001:5a8:5:3a::15:0/127&lt;br /&gt;
 * Transport IP: 2001:5a8:5:3a::15:1/127&lt;br /&gt;
&lt;br /&gt;
The gateway is configured to route all traffic for our netblock to the transport IP, which is currently assigned to bender.&lt;br /&gt;
&lt;br /&gt;
=== Bridges ===&lt;br /&gt;
The br0 bridge is created at startup and shared with the virtual machines hosted on Bender. It gives the VMs unfiltered access to the external network. There&#039;s no DHCP, all machines must define a static IP configuration, taking care not to stomp onto each other.&lt;br /&gt;
&lt;br /&gt;
There is also a virbr0 bridge created by libvirt on startup from &amp;lt;code&amp;gt;/etc/libvirt/qemu/networks/default.xml&amp;lt;/code&amp;gt;. This is a NAT interface and is not meant for VMs directly serving on the Internet.&lt;br /&gt;
&lt;br /&gt;
Guests simply need to be configured to accept IPv6 routing advertisements. The DNS must be assigned manually.&lt;br /&gt;
&lt;br /&gt;
== Virtualization ==&lt;br /&gt;
&lt;br /&gt;
Virtual machines are KVM guests managed with libvirt.&lt;br /&gt;
&lt;br /&gt;
=== Storage ===&lt;br /&gt;
&lt;br /&gt;
All virtual disks come from a pool backed by the main LVM VG:&lt;br /&gt;
&lt;br /&gt;
  virsh # pool-define-as nvme-pool logical --source-name nvme-pool &lt;br /&gt;
  Pool nvme-pool defined&lt;br /&gt;
  &lt;br /&gt;
  virsh # pool-start nvme-pool&lt;br /&gt;
  Pool nvme-pool started&lt;br /&gt;
  &lt;br /&gt;
  virsh # pool-autostart nvme-pool&lt;br /&gt;
  Pool nvme-pool marked as autostarted&lt;br /&gt;
  &lt;br /&gt;
  virsh # pool-info nvme-pool&lt;br /&gt;
  Name:           nvme-pool&lt;br /&gt;
  UUID:           5812819f-b8bf-484e-98fb-2e100fe83df2&lt;br /&gt;
  State:          running&lt;br /&gt;
  Persistent:     yes&lt;br /&gt;
  Autostart:      yes&lt;br /&gt;
  Capacity:       1.64 TiB&lt;br /&gt;
  Allocation:     250.00 GiB&lt;br /&gt;
  Available:      1.40 TiB&lt;br /&gt;
&lt;br /&gt;
Disks assigned to VMs will appear here:&lt;br /&gt;
&lt;br /&gt;
 virsh # vol-list nvme-pool&lt;br /&gt;
  Name         Path&lt;br /&gt;
 -----------------------------------------&lt;br /&gt;
  aslo1-root   /dev/nvme-pool/aslo1-root&lt;br /&gt;
  aslo1-srv    /dev/nvme-pool/aslo1-srv&lt;br /&gt;
  backup       /dev/nvme-pool/backup&lt;br /&gt;
&lt;br /&gt;
Disks can be created, listed and deleted using the vol-* commands:&lt;br /&gt;
&lt;br /&gt;
  virsh # vol-create-as nvme-pool testvm-root 20G&lt;br /&gt;
  Vol testvm-root created&lt;br /&gt;
  &lt;br /&gt;
  virsh # vol-info testvm-root --pool nvme-pool&lt;br /&gt;
  Name:           testvm-root&lt;br /&gt;
  Type:           block&lt;br /&gt;
  Capacity:       20.00 GiB&lt;br /&gt;
  Allocation:     20.00 GiB&lt;br /&gt;
  &lt;br /&gt;
  virsh # vol-delete testvm-root --pool nvme-pool&lt;br /&gt;
  Vol testvm-root deleted&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: avoid allocating large VM volumes as image file within the host&#039;s root filesystem, as they&#039;re slow and hard to manage. It&#039;s ok to use images for test VMs.&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Machine/bender&amp;diff=104636</id>
		<title>Machine/bender</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Machine/bender&amp;diff=104636"/>
		<updated>2025-06-03T17:43:32Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Add machines hosted on weblate.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Info ==&lt;br /&gt;
Bender and [[Machine/papert | Papert]] are two twin blade servers donated to Sugar Labs in 2021.&lt;br /&gt;
&lt;br /&gt;
Bender is our primary KVM host, while Papert is a hot standby and [[Service/backup|backup]] machine.&lt;br /&gt;
&lt;br /&gt;
== Hostnames ==&lt;br /&gt;
* bender.sugarlabs.org&lt;br /&gt;
* papert.sugarlabs.org&lt;br /&gt;
&lt;br /&gt;
== Machines == &lt;br /&gt;
* [[Machine/lightwave]], [[Service/Nameservers]],&lt;br /&gt;
* [[Machine/weblate]], with [[Service/Weblate]], or https://weblate.sugarlabs.org&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
* HPE ProLiant DL360 Gen10 1RU server&lt;br /&gt;
** Dual socket, current configuration has one CPU&lt;br /&gt;
* [https://ark.intel.com/content/www/us/en/ark/products/199342/intel-xeon-gold-5218r-processor-27-5m-cache-2-10-ghz.html Xeon Gold 5218R]&lt;br /&gt;
** 20 cores/40 threads&lt;br /&gt;
** 2.1GHz base frequency, 4.0GHz max turbo frequency&lt;br /&gt;
** 27.5MB of cache&lt;br /&gt;
* 64GB RAM&lt;br /&gt;
* 2TB NVMe SSD&lt;br /&gt;
&lt;br /&gt;
[[Image:BenderRacked.jpg|thumb|320px]]&lt;br /&gt;
&lt;br /&gt;
== Admins ==&lt;br /&gt;
* [[User:MrBIOS|Alex Perez]], MrBIOS on #sugar Libera.chat IRC network&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]], @bernie:matrix.org on Sugar Systems&lt;br /&gt;
&lt;br /&gt;
== Hosting ==&lt;br /&gt;
&lt;br /&gt;
[[Image:SonicColo.jpg|thumb|320px]]&lt;br /&gt;
&lt;br /&gt;
Hosted by Sonic in Santa Rosa CA&lt;br /&gt;
&lt;br /&gt;
== Network configuration ==&lt;br /&gt;
&lt;br /&gt;
Network configuration is managed via [https://netplan.io/ netplan]. To modify, do:&lt;br /&gt;
&lt;br /&gt;
 vi /etc/netplan/bender.yaml&lt;br /&gt;
 netplan generate&lt;br /&gt;
 netplan apply&lt;br /&gt;
&lt;br /&gt;
=== IPv4 ===&lt;br /&gt;
&lt;br /&gt;
Bender and Papert are globally accessible through a public, static IPv4 address&lt;br /&gt;
&lt;br /&gt;
Sonic assigned a /28 network to Sugar Labs. IP assignments are managed in our DNS configuration. Search for &amp;quot;Sonic IP pool&amp;quot; in &amp;lt;code&amp;gt;masters/sugarlabs.org.zone&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* Usable IPv4 addresses: 192.184.220.210 ~ 192.184.220.222 (13 addresses)&lt;br /&gt;
* Subnet Mask:     255.255.255.240&lt;br /&gt;
* Default Gateway: 192.184.220.209&lt;br /&gt;
* DNS:             8.8.8.8, 8.8.4.4&lt;br /&gt;
&lt;br /&gt;
=== IPv6 ===&lt;br /&gt;
IPv6 configuration is a bit weird.&lt;br /&gt;
&lt;br /&gt;
 * Public block: 2001:5a8:601:f::/64&lt;br /&gt;
 * Sonic gateway: 2001:5a8:5:3a::15:0/127&lt;br /&gt;
 * Transport IP: 2001:5a8:5:3a::15:1/127&lt;br /&gt;
&lt;br /&gt;
The gateway is configured to route all traffic for our netblock to the transport IP, which is currently assigned to bender.&lt;br /&gt;
&lt;br /&gt;
=== Bridges ===&lt;br /&gt;
The br0 bridge is created at startup and shared with the virtual machines hosted on Bender. It gives the VMs unfiltered access to the external network. There&#039;s no DHCP, all machines must define a static IP configuration, taking care not to stomp onto each other.&lt;br /&gt;
&lt;br /&gt;
There is also a virbr0 bridge created by libvirt on startup from &amp;lt;code&amp;gt;/etc/libvirt/qemu/networks/default.xml&amp;lt;/code&amp;gt;. This is a NAT interface and is not meant for VMs directly serving on the Internet.&lt;br /&gt;
&lt;br /&gt;
Guests simply need to be configured to accept IPv6 routing advertisements. The DNS must be assigned manually.&lt;br /&gt;
&lt;br /&gt;
== Virtualization ==&lt;br /&gt;
&lt;br /&gt;
Virtual machines are KVM guests managed with libvirt.&lt;br /&gt;
&lt;br /&gt;
=== Storage ===&lt;br /&gt;
&lt;br /&gt;
All virtual disks come from a pool backed by the main LVM VG:&lt;br /&gt;
&lt;br /&gt;
  virsh # pool-define-as nvme-pool logical --source-name nvme-pool &lt;br /&gt;
  Pool nvme-pool defined&lt;br /&gt;
  &lt;br /&gt;
  virsh # pool-start nvme-pool&lt;br /&gt;
  Pool nvme-pool started&lt;br /&gt;
  &lt;br /&gt;
  virsh # pool-autostart nvme-pool&lt;br /&gt;
  Pool nvme-pool marked as autostarted&lt;br /&gt;
  &lt;br /&gt;
  virsh # pool-info nvme-pool&lt;br /&gt;
  Name:           nvme-pool&lt;br /&gt;
  UUID:           5812819f-b8bf-484e-98fb-2e100fe83df2&lt;br /&gt;
  State:          running&lt;br /&gt;
  Persistent:     yes&lt;br /&gt;
  Autostart:      yes&lt;br /&gt;
  Capacity:       1.64 TiB&lt;br /&gt;
  Allocation:     250.00 GiB&lt;br /&gt;
  Available:      1.40 TiB&lt;br /&gt;
&lt;br /&gt;
Disks assigned to VMs will appear here:&lt;br /&gt;
&lt;br /&gt;
 virsh # vol-list nvme-pool&lt;br /&gt;
  Name         Path&lt;br /&gt;
 -----------------------------------------&lt;br /&gt;
  aslo1-root   /dev/nvme-pool/aslo1-root&lt;br /&gt;
  aslo1-srv    /dev/nvme-pool/aslo1-srv&lt;br /&gt;
  backup       /dev/nvme-pool/backup&lt;br /&gt;
&lt;br /&gt;
Disks can be created, listed and deleted using the vol-* commands:&lt;br /&gt;
&lt;br /&gt;
  virsh # vol-create-as nvme-pool testvm-root 20G&lt;br /&gt;
  Vol testvm-root created&lt;br /&gt;
  &lt;br /&gt;
  virsh # vol-info testvm-root --pool nvme-pool&lt;br /&gt;
  Name:           testvm-root&lt;br /&gt;
  Type:           block&lt;br /&gt;
  Capacity:       20.00 GiB&lt;br /&gt;
  Allocation:     20.00 GiB&lt;br /&gt;
  &lt;br /&gt;
  virsh # vol-delete testvm-root --pool nvme-pool&lt;br /&gt;
  Vol testvm-root deleted&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: avoid allocating large VM volumes as image file within the host&#039;s root filesystem, as they&#039;re slow and hard to manage. It&#039;s ok to use images for test VMs.&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Chimosky&amp;diff=104634</id>
		<title>User:Chimosky</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Chimosky&amp;diff=104634"/>
		<updated>2025-06-01T16:45:25Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Testing update 2&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ibiam Chihurumnaya ==&lt;br /&gt;
My name is Ibiam Chihurumnaya, I&#039;m from Nigeria. You can contact me on&lt;br /&gt;
&lt;br /&gt;
*Email ibiamchihurumnaya AT sugarlabs DOT org&lt;br /&gt;
*[https://github.com/chimosky Github ]&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=User:Chimosky&amp;diff=104633</id>
		<title>User:Chimosky</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=User:Chimosky&amp;diff=104633"/>
		<updated>2025-06-01T16:44:52Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Test for update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ibiam Chihurumnaya ==&lt;br /&gt;
My name is Ibiam Chihurumnaya, I&#039;m from Nigeria. You can contact me&lt;br /&gt;
&lt;br /&gt;
*Email ibiamchihurumnaya AT sugarlabs DOT org&lt;br /&gt;
*[https://github.com/chimosky Github ]&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Oversight_Board/2025-2026-candidates&amp;diff=104424</id>
		<title>Oversight Board/2025-2026-candidates</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Oversight_Board/2025-2026-candidates&amp;diff=104424"/>
		<updated>2024-11-25T13:36:36Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Election==&lt;br /&gt;
&lt;br /&gt;
There are to be three (3) [https://www.sugarlabs.org/leadership/ Board of Director] seats to be elected for the 2025-2026 period, currently held by Lionel Laské and Alex Perez, as well as one empty seat.&lt;br /&gt;
&lt;br /&gt;
==Calendar==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Stage I&lt;br /&gt;
|November 8&lt;br /&gt;
|Announcement of election date and first call for candidates.&lt;br /&gt;
|-&lt;br /&gt;
|Stage II&lt;br /&gt;
|~~November 22~~ November 24 ([https://www.sugarlabs.org/community/2024/11/22/elections-extension/ extension])&lt;br /&gt;
|Deadline to receive [[#Candidates|candidacy applications]] and candidate bios; and deadline to receive [https://forms.gle/48F6h5wdV6BpSro66 ballot applications].&lt;br /&gt;
|-&lt;br /&gt;
|Stage III&lt;br /&gt;
|November 27&lt;br /&gt;
|Ballots to be sent by email; If you do not receive your ballot by the following day, please email elections@sugarlabs.org&lt;br /&gt;
|-&lt;br /&gt;
|Stage IV&lt;br /&gt;
|December 13&lt;br /&gt;
|Deadline to vote&lt;br /&gt;
|-&lt;br /&gt;
|Stage V&lt;br /&gt;
|December 19&lt;br /&gt;
|Election results announced&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Candidates== &lt;br /&gt;
&lt;br /&gt;
Candidates should create a Wiki entry at [[/Candidate Name|Candidates&#039; Wiki submissions]], one entry per candidate, 1500 characters maximum length, sharing their vision and motivation. &lt;br /&gt;
&lt;br /&gt;
Candidates should read and understand the terms of the [[Sugar_Labs/Governance|Sugar Labs Inc.&#039;s Bylaws]], as well as any domestic and international laws governing participation in a US-based 501(c)(3) nonprofit board.&lt;br /&gt;
&lt;br /&gt;
{{Special:PrefixIndex/Oversight_Board/2025-2026-candidates/}}&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
This election is being run by Devin Ulibarri, executive director for Sugar Labs. We welcome volunteers to assist in running our elections. Please email volunteering@sugarlabs.org if you are interested in volunteering.&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Oversight_Board/2025-2026-candidates&amp;diff=104399</id>
		<title>Oversight Board/2025-2026-candidates</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Oversight_Board/2025-2026-candidates&amp;diff=104399"/>
		<updated>2024-11-18T13:51:52Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Add prefix of candidates.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Election==&lt;br /&gt;
&lt;br /&gt;
There are to be three (3) [https://www.sugarlabs.org/leadership/ Board of Director] seats to be elected for the 2025-2026 period, currently held by Lionel Laské and Alex Perez, as well as one empty seat.&lt;br /&gt;
&lt;br /&gt;
==Calendar==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Stage I&lt;br /&gt;
|November 8&lt;br /&gt;
|Announcement of election date and first call for candidates.&lt;br /&gt;
|-&lt;br /&gt;
|Stage II&lt;br /&gt;
|November 22&lt;br /&gt;
|Deadline to receive [[#Candidates|candidacy applications]] and candidate bios; and deadline to receive [https://forms.gle/48F6h5wdV6BpSro66 ballot applications].&lt;br /&gt;
|-&lt;br /&gt;
|Stage III&lt;br /&gt;
|November 27&lt;br /&gt;
|Ballots to be sent by email; If you do not receive your ballot by the following day, please email elections@sugarlabs.org&lt;br /&gt;
|-&lt;br /&gt;
|Stage IV&lt;br /&gt;
|December 13&lt;br /&gt;
|Deadline to vote&lt;br /&gt;
|-&lt;br /&gt;
|Stage V&lt;br /&gt;
|December 19&lt;br /&gt;
|Election results announced&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Candidates== &lt;br /&gt;
&lt;br /&gt;
Candidates should create a Wiki entry at [[/Candidate Name|Candidates&#039; Wiki submissions]], one entry per candidate, 1500 characters maximum length, sharing their vision and motivation. &lt;br /&gt;
&lt;br /&gt;
Candidates should read and understand the terms of the [[Sugar_Labs/Governance|Sugar Labs Inc.&#039;s Bylaws]], as well as any domestic and international laws governing participation in a US-based 501(c)(3) nonprofit board.&lt;br /&gt;
&lt;br /&gt;
{{Special:PrefixIndex/Oversight_Board/2025-2026-candidates/}}&lt;br /&gt;
&lt;br /&gt;
===Template Name of Candidate===&lt;br /&gt;
&lt;br /&gt;
Template text from candidate, template text from candidate...&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
&lt;br /&gt;
This election is being run by Devin Ulibarri, executive director for Sugar Labs. We welcome volunteers to assist in running our elections. Please email volunteering@sugarlabs.org if you are interested in volunteering.&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Development_Team/Source_Code&amp;diff=104358</id>
		<title>Development Team/Source Code</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Development_Team/Source_Code&amp;diff=104358"/>
		<updated>2024-10-08T22:46:02Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Remove unstable section.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{TeamHeader|Development Team|home=Development Team Home|roadmap_link={{Upcoming Stable Release}}/Roadmap}}&lt;br /&gt;
&lt;br /&gt;
{{Developers}}&lt;br /&gt;
&lt;br /&gt;
If you want to package Sugar for your favourite distribution or just want to examine Sugar&#039;s lovely code ;) you can find all the source code of each module at the links below.&lt;br /&gt;
&lt;br /&gt;
== Stable ==&lt;br /&gt;
&lt;br /&gt;
* [[{{Current Stable Release}}|Sucrose {{Current Stable Release}}]]&lt;br /&gt;
&lt;br /&gt;
{{:Development Team/Release/Modules}}&lt;br /&gt;
== Honey ==&lt;br /&gt;
:&amp;lt;span style=&amp;quot;font-size: 150%&amp;quot;&amp;gt;(Activities developed &#039;&#039;in the wild&#039;&#039;)&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:See [[Activities]].&lt;br /&gt;
&lt;br /&gt;
== Dependencies ==&lt;br /&gt;
&lt;br /&gt;
The Sugar interface is based on the GNOME and freedesktop software&lt;br /&gt;
stacks, using technologies like Gtk+, dbus, xorg,&lt;br /&gt;
matchbox-window-manager and gconf. It is written in Python, making it&lt;br /&gt;
easily extended. For the collaboration part, Sugar is using the&lt;br /&gt;
telepathy framework.&lt;br /&gt;
&lt;br /&gt;
The activities depend on technologies like xulrunner for the browser,&lt;br /&gt;
abiword for the write activity and squeak for etoys.&lt;br /&gt;
&lt;br /&gt;
* [http://www.gnome.org/ GNOME]&lt;br /&gt;
* [http://www.freedesktop.org/wiki/ freedesktop]&lt;br /&gt;
* [http://www.gtk.org/ Gtk+]&lt;br /&gt;
* [http://www.freedesktop.org/wiki/Software/dbus dbus]&lt;br /&gt;
* [http://www.x.org/wiki/Home X Windows System]&lt;br /&gt;
* &amp;lt;strike&amp;gt;[http://matchbox-project.org/ matchbox]&amp;lt;/strike&amp;gt; [http://blogs.gnome.org/metacity metacity]&lt;br /&gt;
* [http://www.gnome.org/projects/gconf/ gconf]&lt;br /&gt;
* [http://telepathy.freedesktop.org/wiki/ telepathy]&lt;br /&gt;
* [http://developer.mozilla.org/en/XULRunner xulrunner]&lt;br /&gt;
* [http://www.abisource.com/ abiword]&lt;br /&gt;
* [http://www.squeak.org/ squeak]&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:Installing Sugar]]&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Template:Current_Stable_Release&amp;diff=104357</id>
		<title>Template:Current Stable Release</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Template:Current_Stable_Release&amp;diff=104357"/>
		<updated>2024-10-08T22:44:48Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Update latest release.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;0.121&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This template returns the current stable release number.&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=0.121&amp;diff=104356</id>
		<title>0.121</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=0.121&amp;diff=104356"/>
		<updated>2024-10-08T22:36:21Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Notes ==&lt;br /&gt;
&lt;br /&gt;
Sugar 0.121 is a new stable release of the Sugar Learning Platform. It was released on 5th February 2024. The original release announcement can be viewed at the [https://lists.sugarlabs.org/archive/sugar-devel/2024-February/059610.html sugar-devel mailing list archives].&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
* [https://download.sugarlabs.org/sources/sucrose/glucose/sugar-artwork/sugar-artwork-0.121.tar.xz sugar-artwork-0.121.tar.xz]&lt;br /&gt;
* [https://download.sugarlabs.org/sources/sucrose/glucose/sugar-datastore/sugar-datastore-0.121.tar.xz sugar-datastore-0.121.tar.xz]&lt;br /&gt;
* [https://download.sugarlabs.org/sources/sucrose/glucose/sugar-toolkit-gtk3/sugar-toolkit-gtk3-0.121.tar.xz sugar-toolkit-gtk3-0.121.tar.xz]&lt;br /&gt;
* [https://download.sugarlabs.org/sources/sucrose/glucose/sugar/sugar-0.121.tar.xz sugar-0.121.tar.xz]&lt;br /&gt;
&lt;br /&gt;
== What&#039;s fixed == &lt;br /&gt;
&lt;br /&gt;
* Fix text clipping cannot be removed from frame. (Bhavya)&lt;br /&gt;
* Buddy.props.keys is no longer a quoted bytes. (Ibiam Chihurumnaya)&lt;br /&gt;
* Build warnings from gcc fixed in sugar-toolkit-gtk3. (Ibiam Chihurumnaya)&lt;br /&gt;
* DescriptionItem cursor now visible; makes it easier to edit text in the description box. (Ibiam Chihurumnaya)&lt;br /&gt;
* Port to WebKit2-4.1 API; support for WebKit2-4.0 API has been dropped. (Ibiam Chihurumnaya)&lt;br /&gt;
* Fix this web page could not be loaded in Browse and MiniBrowser (James Cameron)&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=0.121&amp;diff=104355</id>
		<title>0.121</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=0.121&amp;diff=104355"/>
		<updated>2024-10-08T22:35:57Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Created page with &amp;quot;== Notes ==  Sugar 0.121 is a new stable release of the Sugar Learning Platform. It was released on 5th February 2024. The original release announcement can be viewed at the [...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Notes ==&lt;br /&gt;
&lt;br /&gt;
Sugar 0.121 is a new stable release of the Sugar Learning Platform. It was released on 5th February 2024. The original release announcement can be viewed at the [https://lists.sugarlabs.org/archive/sugar-devel/2024-February/059610.html sugar-devel mailing list archives].&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
* [https://download.sugarlabs.org/sources/sucrose/glucose/sugar-artwork/sugar-artwork-0.121.tar.xz sugar-artwork-0.121.tar.xz]&lt;br /&gt;
* [https://download.sugarlabs.org/sources/sucrose/glucose/sugar-datastore/sugar-datastore-0.121.tar.xz sugar-datastore-0.121.tar.xz]&lt;br /&gt;
* [https://download.sugarlabs.org/sources/sucrose/glucose/sugar-toolkit-gtk3/sugar-toolkit-gtk3-0.121.tar.xz sugar-toolkit-gtk3-0.121.tar.xz]&lt;br /&gt;
* [https://download.sugarlabs.org/sources/sucrose/glucose/sugar/sugar-0.121.tar.xz sugar-0.121.tar.xz]&lt;br /&gt;
&lt;br /&gt;
== What&#039;s fixed == &lt;br /&gt;
&lt;br /&gt;
* Fix text clipping cannot be removed from frame (Bhavya)&lt;br /&gt;
* Buddy.props.keys is no longer a quoted bytes. (Ibiam Chihurumnaya)&lt;br /&gt;
* Build warnings from gcc fixed in sugar-toolkit-gtk3 (Ibiam Chihurumnaya)&lt;br /&gt;
* DescriptionItem cursor now visible; makes it easier to edit text in the description box. (Ibiam Chihurumnaya)&lt;br /&gt;
* Port to WebKit2-4.1 API; support for WebKit2-4.0 API has been dropped.(Ibiam Chihurumnaya)&lt;br /&gt;
* Fix this web page could not be loaded in Browse and MiniBrowser (James Cameron)&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104352</id>
		<title>Service/Weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104352"/>
		<updated>2024-10-04T16:45:53Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Changes to adding translation component workflow&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* https://weblate.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/weblate]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* admin AT weblate DOT sugarlabs DOT org&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
For non-emergency calls, preferably send email to the administrative contact.&lt;br /&gt;
&lt;br /&gt;
* [[User:Chimosky|Chihurumnaya Ibiam]] has assumed maintainership tasks.&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]] has system admin privs, but takes care only of OS-level administration.&lt;br /&gt;
* [[User:MrBIOS|Alex Perez]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | User&lt;br /&gt;
|{{Code|weblate}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Home&lt;br /&gt;
|{{Code|/home/weblate/weblate-docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Daemon&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/init.d/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/init.d/docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Logs&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/log/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|docker logs weblate-docker-weblate-1}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Config&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/nginx/sites-enabled/weblate}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/home/weblate/weblate-docker/docker-compose.yml}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Ports&lt;br /&gt;
|&lt;br /&gt;
{{Code|443}} HTTP server&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|8080}} weblate docker container port&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Volumes&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_postgres-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_redis-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-cache}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Upgrade Notes ==&lt;br /&gt;
&lt;br /&gt;
Weblate has [https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container upgrade notes] on upgrading the docker container.&lt;br /&gt;
&lt;br /&gt;
== Maintenance Notes ==&lt;br /&gt;
Weblate is maintained. (ibiam has step-up to be maintainer)&lt;br /&gt;
&lt;br /&gt;
After a restart, make sure to run saslauthd to enable authentication for postfix;&lt;br /&gt;
{{Code|&#039;&#039;&#039;saslauthd -a shadow&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
Important files and directories in the root directory, {{Code|/home/weblate/weblate-docker}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;docker-compose.yml&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains definitions for all the services and volumes used by weblate, which includes weblate, database and cache with volumes weblate-cache, weblate-data, postgres-data, redis-data.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;environment&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains environment variables used by container.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
=== Create new Weblate translation component ===&lt;br /&gt;
&lt;br /&gt;
* Create new translation component in Weblate admin menu, &#039;&#039;Add new translation component&#039;&#039;;&lt;br /&gt;
* Select Project, we currently have {{Code|core-sugar}} and {{Code|Sugar-Activities}}, core-sugar contains sugar core APIs.&lt;br /&gt;
* Set version control system to Git.&lt;br /&gt;
* Set source code repository link - using ssh -. &lt;br /&gt;
* Set repository branch.&lt;br /&gt;
* Set File format gettext PO file, File mask po/*.po&lt;br /&gt;
* Set Repository push URL to enable autoupdate of changes to Github from weblate.&lt;br /&gt;
* Leave Push branch empty as repository branch would be used. &lt;br /&gt;
* On Github, add hook {{Code|https://weblate.sugarlabs.org/hooks/github/}} to activity repo as it&#039;s used for automated flow of updates to weblate.&lt;br /&gt;
* Check license in activity repo matches Translation license selected by weblate or set to the right license.&lt;br /&gt;
* Add all needed langs; when adding from Github, weblate automatically adds all the PO files and you&#039;ll only need to do this if the only PO file the activity has is the template PO file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If an upload is incomplete, return to translation component, then Manage-&amp;gt;Repository maintenance-&amp;gt;Rescan, this will re-scan the repo and add all the po files.&lt;br /&gt;
&lt;br /&gt;
== Synchronization ==&lt;br /&gt;
&lt;br /&gt;
Weblate automatically pushes changes to Github when there&#039;s a change on weblate because of the Git version control above, the hooks configured in the repos make it easy for weblate to pull changes from Github.&lt;br /&gt;
&lt;br /&gt;
== Backups ==&lt;br /&gt;
Weblate currently backs up to papert using [https://docs.weblate.org/en/weblate-5.4.2/admin/backup.html#remote-backups borgbackup] at {{Code|&#039;&#039;&#039;/home/weblate/backups&#039;&#039;&#039;}}.&lt;br /&gt;
&lt;br /&gt;
You can view the list of backups with {{Code|&#039;&#039;&#039;borg list /home/weblate/backups&#039;&#039;&#039;}} which will ask for a passphrase, &lt;br /&gt;
the passphrase can be found in weblate admin page -&amp;gt; Backup -&amp;gt; Backup service credentials.&lt;br /&gt;
Borg&#039;s access is restricted to that directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104351</id>
		<title>Service/Weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104351"/>
		<updated>2024-10-04T16:43:49Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Remove GH action code as it&amp;#039;s not needed anymore.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* https://weblate.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/weblate]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* admin AT weblate DOT sugarlabs DOT org&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
For non-emergency calls, preferably send email to the administrative contact.&lt;br /&gt;
&lt;br /&gt;
* [[User:Chimosky|Chihurumnaya Ibiam]] has assumed maintainership tasks.&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]] has system admin privs, but takes care only of OS-level administration.&lt;br /&gt;
* [[User:MrBIOS|Alex Perez]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | User&lt;br /&gt;
|{{Code|weblate}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Home&lt;br /&gt;
|{{Code|/home/weblate/weblate-docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Daemon&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/init.d/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/init.d/docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Logs&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/log/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|docker logs weblate-docker-weblate-1}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Config&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/nginx/sites-enabled/weblate}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/home/weblate/weblate-docker/docker-compose.yml}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Ports&lt;br /&gt;
|&lt;br /&gt;
{{Code|443}} HTTP server&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|8080}} weblate docker container port&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Volumes&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_postgres-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_redis-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-cache}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Upgrade Notes ==&lt;br /&gt;
&lt;br /&gt;
Weblate has [https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container upgrade notes] on upgrading the docker container.&lt;br /&gt;
&lt;br /&gt;
== Maintenance Notes ==&lt;br /&gt;
Weblate is maintained. (ibiam has step-up to be maintainer)&lt;br /&gt;
&lt;br /&gt;
After a restart, make sure to run saslauthd to enable authentication for postfix;&lt;br /&gt;
{{Code|&#039;&#039;&#039;saslauthd -a shadow&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
Important files and directories in the root directory, {{Code|/home/weblate/weblate-docker}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;docker-compose.yml&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains definitions for all the services and volumes used by weblate, which includes weblate, database and cache with volumes weblate-cache, weblate-data, postgres-data, redis-data.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;environment&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains environment variables used by container.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
=== Create new Weblate translation component ===&lt;br /&gt;
&lt;br /&gt;
* Create new translation component in Weblate admin menu, &#039;&#039;Add new translation component&#039;&#039;;&lt;br /&gt;
* Select Project, we currently have {{Code|core-sugar}} and {{Code|Sugar-Activities}}, core-sugar contains sugar core APIs.&lt;br /&gt;
* Set version control system to Git.&lt;br /&gt;
* Set source code repository link - using ssh -. &lt;br /&gt;
* Set repository branch.&lt;br /&gt;
* Set File format gettext PO file, File mask po/*.po&lt;br /&gt;
* Set Repository push URL to enable autoupdate of changes to Github from weblate.&lt;br /&gt;
* Set Push branch to weblate-sync which would be used to create a PR. &lt;br /&gt;
* On Github, add hook {{Code|https://weblate.sugarlabs.org/hooks/github/}} to activity repo as it&#039;s used for automated flow of updates to weblate.&lt;br /&gt;
* Check license in activity repo matches Translation license selected by weblate or set to the right license.&lt;br /&gt;
* Add all needed langs; when adding from Github, weblate automatically adds all the PO files and you&#039;ll only need to do this if the only PO file the activity has is the template PO file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If an upload is incomplete, return to translation component, then Manage-&amp;gt;Repository maintenance-&amp;gt;Rescan, this will re-scan the repo and add all the po files.&lt;br /&gt;
&lt;br /&gt;
== Synchronization ==&lt;br /&gt;
&lt;br /&gt;
Weblate automatically pushes changes to Github when there&#039;s a change on weblate because of the Git version control above, the hooks configured in the repos make it easy for weblate to pull changes from Github.&lt;br /&gt;
&lt;br /&gt;
== Backups ==&lt;br /&gt;
Weblate currently backs up to papert using [https://docs.weblate.org/en/weblate-5.4.2/admin/backup.html#remote-backups borgbackup] at {{Code|&#039;&#039;&#039;/home/weblate/backups&#039;&#039;&#039;}}.&lt;br /&gt;
&lt;br /&gt;
You can view the list of backups with {{Code|&#039;&#039;&#039;borg list /home/weblate/backups&#039;&#039;&#039;}} which will ask for a passphrase, &lt;br /&gt;
the passphrase can be found in weblate admin page -&amp;gt; Backup -&amp;gt; Backup service credentials.&lt;br /&gt;
Borg&#039;s access is restricted to that directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Machine/containers&amp;diff=104350</id>
		<title>Machine/containers</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Machine/containers&amp;diff=104350"/>
		<updated>2024-10-03T13:52:09Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Write basic containers details.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* https://containers.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Services ==&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
This machine hosts only container workloads.&lt;br /&gt;
&lt;br /&gt;
== Location ==&lt;br /&gt;
&lt;br /&gt;
KVM virtual machine hosted on [[Machine/bender]]&lt;br /&gt;
&lt;br /&gt;
== Admins ==&lt;br /&gt;
&lt;br /&gt;
* [[User:Chimosky|Chihurumnaya Ibiam]], Ibiam on [https://matrix.to/#/#sugar-systems:matrix.org #sugar-systems matrix channel] (general containers admin)&lt;br /&gt;
&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]], Bernie on [https://matrix.to/#/#sugar-systems:matrix.org #sugar-systems matrix channel] (only machine-level issues)&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Machine&amp;diff=104349</id>
		<title>Machine</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Machine&amp;diff=104349"/>
		<updated>2024-10-03T13:49:58Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: /* Virtual */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{TeamHeader|Infrastructure Team}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Computing hardware or virtual machines maintained by the Sugar Labs [[Infrastructure Team]].&lt;br /&gt;
&lt;br /&gt;
== Physical ==&lt;br /&gt;
&lt;br /&gt;
* [[Machine/justice]]&lt;br /&gt;
* [[Machine/freedom]]&lt;br /&gt;
* [[Machine/bender]]&lt;br /&gt;
* [[Machine/papert]]&lt;br /&gt;
&lt;br /&gt;
== Virtual ==&lt;br /&gt;
&lt;br /&gt;
* [[Machine/lightwave]], with [[Service/Nameservers]],&lt;br /&gt;
* [[Machine/pootle]], with [[Service/translate]], or https://translate.sugarlabs.org,&lt;br /&gt;
* [[Machine/aslo]], with [[Service/activities]] aslo, or https://activities.laptop.org,&lt;br /&gt;
* [[Machine/library]],&lt;br /&gt;
* [[Machine/aslo3]], with [[Service/activities3]] aslo-v3, https://github.com/sugarlabs/aslo-v3,&lt;br /&gt;
* [[Machine/jita]], with [[Service/git]], [[Service/jabber]], [[Service/meeting]], [[Service/obs]], [[Service/chat]], [[Service/cgit]], [[Service/blacklist]], [[Service/stats]],&lt;br /&gt;
* [[Machine/amnesia]],&lt;br /&gt;
* [[Machine/beacon]], &amp;lt;!-- last audited by quozl on 6th november 2018 using `sudo virsh list --all` --&amp;gt;&lt;br /&gt;
* [[Machine/weblate]], with [[Service/Weblate]], or https://weblate.sugarlabs.org,&lt;br /&gt;
* [[Machine/containers]]&lt;br /&gt;
&lt;br /&gt;
== Containers ==&lt;br /&gt;
&lt;br /&gt;
* org.sugarlabs.bugs&lt;br /&gt;
* org.sugarlabs.developer-rebuilder&lt;br /&gt;
* org.sugarlabs.www-rebuilder&lt;br /&gt;
* org.sugarlabs.use-socialhelp&lt;br /&gt;
* org.sugarlabs.socialhelp_sso&lt;br /&gt;
* local_discourse/app&lt;br /&gt;
* org.turtleartday.www-rebuilder&lt;br /&gt;
* org.sugarlabs.help-rebuilder&amp;lt;!-- last audited by quozl on 26th november using `docker ps` --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Student Listing ==&lt;br /&gt;
&lt;br /&gt;
This list was made by a GCI 2018 student.&lt;br /&gt;
&lt;br /&gt;
* [[Machine/backup]]&lt;br /&gt;
* [[Machine/bender]]&lt;br /&gt;
* [[Machine/freedom]]&lt;br /&gt;
* [[Machine/jita]]&lt;br /&gt;
* [[Machine/justice]]&lt;br /&gt;
* [[Machine/lightwave]]&lt;br /&gt;
* [[Machine/pootle]]&lt;br /&gt;
* [[Machine/schools]]&lt;br /&gt;
* [[Machine/schoolserver]]&lt;br /&gt;
* [[Machine/trinity]]&lt;br /&gt;
&lt;br /&gt;
== Automatic Listing ==&lt;br /&gt;
&lt;br /&gt;
This list is generated automatically from Wiki pages that have a prefix of &amp;quot;Machine&amp;quot;.  It may contain subpages of machines.  It may contain machines that have been decommissioned; kept as historical data against future need.&lt;br /&gt;
&lt;br /&gt;
{{Special:PrefixIndex/Machine/}}&lt;br /&gt;
&lt;br /&gt;
[[Image:Sugarlabs systems.jpg|frame]]&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104323</id>
		<title>Service/Weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104323"/>
		<updated>2024-08-29T00:28:38Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Use ssh to clone repos as we&amp;#039;re using git for the version control system.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* https://weblate.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/weblate]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* admin AT weblate DOT sugarlabs DOT org&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
For non-emergency calls, preferably send email to the administrative contact.&lt;br /&gt;
&lt;br /&gt;
* [[User:Chimosky|Chihurumnaya Ibiam]] has assumed maintainership tasks.&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]] has system admin privs, but takes care only of OS-level administration.&lt;br /&gt;
* [[User:MrBIOS|Alex Perez]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | User&lt;br /&gt;
|{{Code|weblate}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Home&lt;br /&gt;
|{{Code|/home/weblate/weblate-docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Daemon&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/init.d/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/init.d/docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Logs&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/log/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|docker logs weblate-docker-weblate-1}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Config&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/nginx/sites-enabled/weblate}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/home/weblate/weblate-docker/docker-compose.yml}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Ports&lt;br /&gt;
|&lt;br /&gt;
{{Code|443}} HTTP server&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|8080}} weblate docker container port&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Volumes&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_postgres-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_redis-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-cache}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Upgrade Notes ==&lt;br /&gt;
&lt;br /&gt;
Weblate has [https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container upgrade notes] on upgrading the docker container.&lt;br /&gt;
&lt;br /&gt;
== Maintenance Notes ==&lt;br /&gt;
Weblate is maintained. (ibiam has step-up to be maintainer)&lt;br /&gt;
&lt;br /&gt;
After a restart, make sure to run saslauthd to enable authentication for postfix;&lt;br /&gt;
{{Code|&#039;&#039;&#039;saslauthd -a shadow&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
Important files and directories in the root directory, {{Code|/home/weblate/weblate-docker}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;docker-compose.yml&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains definitions for all the services and volumes used by weblate, which includes weblate, database and cache with volumes weblate-cache, weblate-data, postgres-data, redis-data.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;environment&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains environment variables used by container.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
=== Create new Weblate translation component ===&lt;br /&gt;
&lt;br /&gt;
* Create new translation component in Weblate admin menu, &#039;&#039;Add new translation component&#039;&#039;;&lt;br /&gt;
* Select Project, we currently have {{Code|core-sugar}} and {{Code|Sugar-Activities}}, core-sugar contains sugar core APIs.&lt;br /&gt;
* Set version control system to Git.&lt;br /&gt;
* Set source code repository link - using ssh -. &lt;br /&gt;
* Set repository branch.&lt;br /&gt;
* Set File format gettext PO file, File mask po/*.po&lt;br /&gt;
* Set Repository push URL to enable autoupdate of changes to Github from weblate.&lt;br /&gt;
* Set Push branch to weblate-sync which would be used to create a PR. &lt;br /&gt;
* On Github, add hook {{Code|https://weblate.sugarlabs.org/hooks/github/}} to activity repo as it&#039;s used for automated flow of updates to weblate.&lt;br /&gt;
* Check license in activity repo matches Translation license selected by weblate or set to the right license.&lt;br /&gt;
* Add all needed langs; when adding from Github, weblate automatically adds all the PO files and you&#039;ll only need to do this if the only PO file the activity has is the template PO file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If an upload is incomplete, return to translation component, then Manage-&amp;gt;Repository maintenance-&amp;gt;Rescan, this will re-scan the repo and add all the po files.&lt;br /&gt;
&lt;br /&gt;
== Synchronization ==&lt;br /&gt;
&lt;br /&gt;
Weblate automatically pushes changes to Github when there&#039;s a change on weblate because of the Github pull request version control above and the Github configuration can be found in the &lt;br /&gt;
environment file, the hooks configured in the repos make it easy for weblate to pull changes from Github.&lt;br /&gt;
&lt;br /&gt;
Add this workflow to {{Code|&#039;&#039;&#039;.github/workflows/weblate-sync.yaml&#039;&#039;&#039;}} in the Github repo;&lt;br /&gt;
&lt;br /&gt;
  name: Weblate - Create PR when weblate pushes changes&lt;br /&gt;
  on:&lt;br /&gt;
  push:&lt;br /&gt;
    branches:&lt;br /&gt;
      - weblate-sync&lt;br /&gt;
  jobs:&lt;br /&gt;
  weblateSync:&lt;br /&gt;
    runs-on: ubuntu-latest&lt;br /&gt;
    steps:&lt;br /&gt;
      - uses: actions/checkout@v4&lt;br /&gt;
      - name: Create Pull Request&lt;br /&gt;
        run: gh pr create --base main --head weblate-sync -t &amp;quot;Weblate Synchronization&amp;quot; --body &amp;quot;&amp;quot;&lt;br /&gt;
        env:&lt;br /&gt;
          GH_TOKEN: ${\{ github.token }}&lt;br /&gt;
&lt;br /&gt;
This will automatically open a pull-request whenever weblate pushes changes to Github, be sure to drop the&lt;br /&gt;
{{Code|\}} in {{Code|GH_TOKEN}}&lt;br /&gt;
&lt;br /&gt;
== Backups ==&lt;br /&gt;
Weblate currently backs up to papert using [https://docs.weblate.org/en/weblate-5.4.2/admin/backup.html#remote-backups borgbackup] at {{Code|&#039;&#039;&#039;/home/weblate/backups&#039;&#039;&#039;}}.&lt;br /&gt;
&lt;br /&gt;
You can view the list of backups with {{Code|&#039;&#039;&#039;borg list /home/weblate/backups&#039;&#039;&#039;}} which will ask for a passphrase, &lt;br /&gt;
the passphrase can be found in weblate admin page -&amp;gt; Backup -&amp;gt; Backup service credentials.&lt;br /&gt;
Borg&#039;s access is restricted to that directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104309</id>
		<title>Service/Weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104309"/>
		<updated>2024-08-27T21:31:03Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* https://weblate.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/weblate]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* admin AT weblate DOT sugarlabs DOT org&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
For non-emergency calls, preferably send email to the administrative contact.&lt;br /&gt;
&lt;br /&gt;
* [[User:Chimosky|Chihurumnaya Ibiam]] has assumed maintainership tasks.&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]] has system admin privs, but takes care only of OS-level administration.&lt;br /&gt;
* [[User:MrBIOS|Alex Perez]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | User&lt;br /&gt;
|{{Code|weblate}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Home&lt;br /&gt;
|{{Code|/home/weblate/weblate-docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Daemon&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/init.d/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/init.d/docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Logs&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/log/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|docker logs weblate-docker-weblate-1}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Config&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/nginx/sites-enabled/weblate}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/home/weblate/weblate-docker/docker-compose.yml}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Ports&lt;br /&gt;
|&lt;br /&gt;
{{Code|443}} HTTP server&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|8080}} weblate docker container port&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Volumes&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_postgres-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_redis-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-cache}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Upgrade Notes ==&lt;br /&gt;
&lt;br /&gt;
Weblate has [https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container upgrade notes] on upgrading the docker container.&lt;br /&gt;
&lt;br /&gt;
== Maintenance Notes ==&lt;br /&gt;
Weblate is maintained. (ibiam has step-up to be maintainer)&lt;br /&gt;
&lt;br /&gt;
After a restart, make sure to run saslauthd to enable authentication for postfix;&lt;br /&gt;
{{Code|&#039;&#039;&#039;saslauthd -a shadow&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
Important files and directories in the root directory, {{Code|/home/weblate/weblate-docker}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;docker-compose.yml&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains definitions for all the services and volumes used by weblate, which includes weblate, database and cache with volumes weblate-cache, weblate-data, postgres-data, redis-data.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;environment&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains environment variables used by container.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
=== Create new Weblate translation component ===&lt;br /&gt;
&lt;br /&gt;
* Create new translation component in Weblate admin menu, &#039;&#039;Add new translation component&#039;&#039;;&lt;br /&gt;
* Select Project, we currently have {{Code|core-sugar}} and {{Code|Sugar-Activities}}, core-sugar contains sugar core APIs.&lt;br /&gt;
* Set version control system to GitHub pull request.&lt;br /&gt;
* Set source code repository link - using https -. &lt;br /&gt;
* Set repository branch.&lt;br /&gt;
* Set File format gettext PO file, File mask po/*.po&lt;br /&gt;
* Set Repository push URL to enable autoupdate of changes to Github from weblate.&lt;br /&gt;
* Set Push branch to weblate-sync which would be used to create a PR. &lt;br /&gt;
* On Github, add hook {{Code|https://weblate.sugarlabs.org/hooks/github/}} to activity repo as it&#039;s used for automated flow of updates to weblate.&lt;br /&gt;
* Check license in activity repo matches Translation license selected by weblate or set to the right license.&lt;br /&gt;
* Add all needed langs; when adding from Github, weblate automatically adds all the PO files and you&#039;ll only need to do this if the only PO file the activity has is the template PO file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If an upload is incomplete, return to translation component, then Manage-&amp;gt;Repository maintenance-&amp;gt;Rescan, this will re-scan the repo and add all the po files.&lt;br /&gt;
&lt;br /&gt;
== Synchronization ==&lt;br /&gt;
&lt;br /&gt;
Weblate automatically pushes changes to Github when there&#039;s a change on weblate because of the Github pull request version control above and the Github configuration can be found in the &lt;br /&gt;
environment file, the hooks configured in the repos make it easy for weblate to pull changes from Github.&lt;br /&gt;
&lt;br /&gt;
Add this workflow to {{Code|&#039;&#039;&#039;.github/workflows/weblate-sync.yaml&#039;&#039;&#039;}} in the Github repo;&lt;br /&gt;
&lt;br /&gt;
  name: Weblate - Create PR when weblate pushes changes&lt;br /&gt;
  on:&lt;br /&gt;
  push:&lt;br /&gt;
    branches:&lt;br /&gt;
      - weblate-sync&lt;br /&gt;
  jobs:&lt;br /&gt;
  weblateSync:&lt;br /&gt;
    runs-on: ubuntu-latest&lt;br /&gt;
    steps:&lt;br /&gt;
      - uses: actions/checkout@v4&lt;br /&gt;
      - name: Create Pull Request&lt;br /&gt;
        run: gh pr create --base main --head weblate-sync -t &amp;quot;Weblate Synchronization&amp;quot; --body &amp;quot;&amp;quot;&lt;br /&gt;
        env:&lt;br /&gt;
          GH_TOKEN: ${\{ github.token }}&lt;br /&gt;
&lt;br /&gt;
This will automatically open a pull-request whenever weblate pushes changes to Github, be sure to drop the&lt;br /&gt;
{{Code|\}} in {{Code|GH_TOKEN}}&lt;br /&gt;
&lt;br /&gt;
== Backups ==&lt;br /&gt;
Weblate currently backs up to papert using [https://docs.weblate.org/en/weblate-5.4.2/admin/backup.html#remote-backups borgbackup] at {{Code|&#039;&#039;&#039;/home/weblate/backups&#039;&#039;&#039;}}.&lt;br /&gt;
&lt;br /&gt;
You can view the list of backups with {{Code|&#039;&#039;&#039;borg list /home/weblate/backups&#039;&#039;&#039;}} which will ask for a passphrase, &lt;br /&gt;
the passphrase can be found in weblate admin page -&amp;gt; Backup -&amp;gt; Backup service credentials.&lt;br /&gt;
Borg&#039;s access is restricted to that directory.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104308</id>
		<title>Service/Weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104308"/>
		<updated>2024-08-27T21:18:07Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* https://weblate.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/weblate]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* admin AT weblate DOT sugarlabs DOT org&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
For non-emergency calls, preferably send email to the administrative contact.&lt;br /&gt;
&lt;br /&gt;
* [[User:Chimosky|Chihurumnaya Ibiam]] has assumed maintainership tasks.&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]] has system admin privs, but takes care only of OS-level administration.&lt;br /&gt;
* [[User:MrBIOS|Alex Perez]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | User&lt;br /&gt;
|{{Code|weblate}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Home&lt;br /&gt;
|{{Code|/home/weblate/weblate-docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Daemon&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/init.d/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/init.d/docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Logs&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/log/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|docker logs weblate-docker-weblate-1}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Config&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/nginx/sites-enabled/weblate}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/home/weblate/weblate-docker/docker-compose.yml}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Ports&lt;br /&gt;
|&lt;br /&gt;
{{Code|443}} HTTP server&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|8080}} weblate docker container port&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Volumes&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_postgres-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_redis-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-cache}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Upgrade Notes ==&lt;br /&gt;
&lt;br /&gt;
Weblate has [https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container upgrade notes] on upgrading the docker container.&lt;br /&gt;
&lt;br /&gt;
== Maintenance Notes ==&lt;br /&gt;
Weblate is maintained. (ibiam has step-up to be maintainer)&lt;br /&gt;
&lt;br /&gt;
After a restart, make sure to run saslauthd to enable authentication for postfix;&lt;br /&gt;
{{Code|&#039;&#039;&#039;saslauthd -a shadow&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
Important files and directories in the root directory, {{Code|/home/weblate/weblate-docker}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;docker-compose.yml&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains definitions for all the services and volumes used by weblate, which includes weblate, database and cache with volumes weblate-cache, weblate-data, postgres-data, redis-data.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;environment&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains environment variables used by container.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
=== Create new Weblate translation component ===&lt;br /&gt;
&lt;br /&gt;
* Create new translation component in Weblate admin menu, &#039;&#039;Add new translation component&#039;&#039;;&lt;br /&gt;
* Select Project, we currently have {{Code|core-sugar}} and {{Code|Sugar-Activities}}, core-sugar contains sugar core APIs.&lt;br /&gt;
* Set version control system to GitHub pull request.&lt;br /&gt;
* Set source code repository link - using https -. &lt;br /&gt;
* Set repository branch.&lt;br /&gt;
* Set File format gettext PO file, File mask po/*.po&lt;br /&gt;
* Set Repository push URL to enable autoupdate of changes to Github from weblate.&lt;br /&gt;
* Set Push branch to weblate-sync which would be used to create a PR. &lt;br /&gt;
* On Github, add hook {{Code|https://weblate.sugarlabs.org/hooks/github/}} to activity repo as it&#039;s used for automated flow of updates to weblate.&lt;br /&gt;
* Check license in activity repo matches Translation license selected by weblate or set to the right license.&lt;br /&gt;
* Add all needed langs; when adding from Github, weblate automatically adds all the PO files and you&#039;ll only need to do this if the only PO file the activity has is the template PO file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If an upload is incomplete, return to translation component, then Manage-&amp;gt;Repository maintenance-&amp;gt;Rescan, this will re-scan the repo and add all the po files.&lt;br /&gt;
&lt;br /&gt;
== Synchronization ==&lt;br /&gt;
&lt;br /&gt;
Weblate automatically pushes changes to Github when there&#039;s a change on weblate because of the Github pull request version control above and the Github configuration can be found in the &lt;br /&gt;
environment file, the hooks configured in the repos make it easy for weblate to pull changes from Github.&lt;br /&gt;
&lt;br /&gt;
Add this workflow to {{Code|&#039;&#039;&#039;.github/workflows/weblate-sync.yaml&#039;&#039;&#039;}} in the Github repo;&lt;br /&gt;
&lt;br /&gt;
  name: Weblate - Create PR when weblate pushes changes&lt;br /&gt;
  on:&lt;br /&gt;
  push:&lt;br /&gt;
    branches:&lt;br /&gt;
      - weblate-sync&lt;br /&gt;
  jobs:&lt;br /&gt;
  weblateSync:&lt;br /&gt;
    runs-on: ubuntu-latest&lt;br /&gt;
    steps:&lt;br /&gt;
      - uses: actions/checkout@v4&lt;br /&gt;
      - name: Create Pull Request&lt;br /&gt;
        run: gh pr create --base main --head weblate-sync -t &amp;quot;Weblate Synchronization&amp;quot; --body &amp;quot;&amp;quot;&lt;br /&gt;
        env:&lt;br /&gt;
          GH_TOKEN: ${\{ github.token }}&lt;br /&gt;
&lt;br /&gt;
This will automatically open a pull-request whenever weblate pushes changes to Github, be sure to drop the&lt;br /&gt;
{{Code|\}} in {{Code|GH_TOKEN}}&lt;br /&gt;
&lt;br /&gt;
== Backups ==&lt;br /&gt;
Weblate currently backs up to papert using [https://docs.weblate.org/en/weblate-5.4.2/admin/backup.html#remote-backups borgbackup] at {{Code|&#039;&#039;&#039;/home/weblate/backups&#039;&#039;&#039;}}.&lt;br /&gt;
&lt;br /&gt;
You can view the list of backups with {{Code|&#039;&#039;&#039;borg list /home/weblate/backups&#039;&#039;&#039;}} which will ask for a passphrase, &lt;br /&gt;
the passphrase can be found in weblate admin page -&amp;gt; Backup -&amp;gt; Backup service credentials&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104133</id>
		<title>Service/Weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104133"/>
		<updated>2024-04-04T18:03:59Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: FIx typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* https://weblate.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/weblate]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* admin AT weblate DOT sugarlabs DOT org&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
For non-emergency calls, preferably send email to the administrative contact.&lt;br /&gt;
&lt;br /&gt;
* [[User:Chimosky|Chihurumnaya Ibiam]] has assumed maintainership tasks.&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]] has system admin privs, but takes care only of OS-level administration.&lt;br /&gt;
* [[User:MrBIOS|Alex Perez]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | User&lt;br /&gt;
|{{Code|weblate}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Home&lt;br /&gt;
|{{Code|/home/weblate/weblate-docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Daemon&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/init.d/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/init.d/docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Logs&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/log/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|docker logs weblate-docker-weblate-1}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Config&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/nginx/sites-enabled/weblate}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/home/weblate/weblate-docker/docker-compose.yml}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Ports&lt;br /&gt;
|&lt;br /&gt;
{{Code|443}} HTTP server&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|8080}} weblate docker container port&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Volumes&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_postgres-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_redis-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-cache}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Upgrade Notes ==&lt;br /&gt;
&lt;br /&gt;
Weblate has [https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container upgrade notes] on upgrading the docker container.&lt;br /&gt;
&lt;br /&gt;
== Maintenance Notes ==&lt;br /&gt;
Weblate is maintained. (ibiam has step-up to be maintainer)&lt;br /&gt;
&lt;br /&gt;
After a restart, make sure to run saslauthd to enable authentication for postfix;&lt;br /&gt;
{{Code|&#039;&#039;&#039;saslauthd -a shadow&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
Important files and directories in the root directory, {{Code|/home/weblate/weblate-docker}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;docker-compose.yml&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains definitions for all the services and volumes used by weblate, which includes weblate, database and cache with volumes weblate-cache, weblate-data, postgres-data, redis-data.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;environment&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains environment variables used by container.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
=== Create new Weblate translation component ===&lt;br /&gt;
&lt;br /&gt;
* Create new translation component in Weblate admin menu, &#039;&#039;Add new translation component&#039;&#039;;&lt;br /&gt;
* Select Project, we currently have {{Code|core-sugar}} and {{Code|Sugar-Activities}}, core-sugar contains sugar core APIs.&lt;br /&gt;
* Set version control system to GitHub pull request.&lt;br /&gt;
* Set source code repository link - using https -. &lt;br /&gt;
* Set repository branch.&lt;br /&gt;
* Set File format gettext PO file, File mask po/*.po&lt;br /&gt;
* Set Repository push URL to enable autoupdate of changes to Github from weblate.&lt;br /&gt;
* Set Push branch to weblate-sync which would be used to create a PR. &lt;br /&gt;
* On Github, add hook {{Code|https://weblate.sugarlabs.org/hooks/github/}} to activity repo as it&#039;s used for automated flow of updates to weblate.&lt;br /&gt;
* Check license in activity repo matches Translation license selected by weblate or set to the right license.&lt;br /&gt;
* Add all needed langs; when adding from Github, weblate automatically adds all the PO files and you&#039;ll only need to do this if the only PO file the activity has is the template PO file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If an upload is incomplete, return to translation component, then Manage-&amp;gt;Repository maintenance-&amp;gt;Rescan, this will re-scan the repo and add all the po files.&lt;br /&gt;
&lt;br /&gt;
== Synchronization ==&lt;br /&gt;
&lt;br /&gt;
Weblate automatically pushes changes to Github when there&#039;s a change on weblate because of the Github pull request version control above and the Github configuration can be found in the &lt;br /&gt;
environment file, the hooks configured in the repos make it easy for weblate to pull changes from Github.&lt;br /&gt;
&lt;br /&gt;
Add this workflow to {{Code|&#039;&#039;&#039;.github/workflows/weblate-sync.yaml&#039;&#039;&#039;}} in the Github repo;&lt;br /&gt;
&lt;br /&gt;
  name: Weblate - Create PR when weblate pushes changes&lt;br /&gt;
  on:&lt;br /&gt;
  push:&lt;br /&gt;
    branches:&lt;br /&gt;
      - weblate-sync&lt;br /&gt;
  jobs:&lt;br /&gt;
  weblateSync:&lt;br /&gt;
    runs-on: ubuntu-latest&lt;br /&gt;
    steps:&lt;br /&gt;
      - uses: actions/checkout@v4&lt;br /&gt;
      - name: Create Pull Request&lt;br /&gt;
        run: gh pr create --base main --head weblate-sync -t &amp;quot;Weblate Synchronization&amp;quot; --body &amp;quot;&amp;quot;&lt;br /&gt;
        env:&lt;br /&gt;
          GH_TOKEN: ${\{ github.token }}&lt;br /&gt;
&lt;br /&gt;
This will automatically open a pull-request whenever weblate pushes changes to Github, be sure to drop the&lt;br /&gt;
{{Code|\}} in {{Code|GH_TOKEN}}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104132</id>
		<title>Service/Weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104132"/>
		<updated>2024-04-04T17:55:13Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Add weblate workflow script&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* https://weblate.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/weblate]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* admin AT weblate DOT sugarlabs DOT org&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
For non-emergency calls, preferably send email to the administrative contact.&lt;br /&gt;
&lt;br /&gt;
* [[User:Chimosky|Chihurumnaya Ibiam]] has assumed maintainership tasks.&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]] has system admin privs, but takes care only of OS-level administration.&lt;br /&gt;
* [[User:MrBIOS|Alex Perez]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | User&lt;br /&gt;
|{{Code|weblate}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Home&lt;br /&gt;
|{{Code|/home/weblate/weblate-docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Daemon&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/init.d/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/init.d/docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Logs&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/log/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|docker logs weblate-docker-weblate-1}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Config&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/nginx/sites-enabled/weblate}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/home/weblate/weblate-docker/docker-compose.yml}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Ports&lt;br /&gt;
|&lt;br /&gt;
{{Code|443}} HTTP server&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|8080}} weblate docker container port&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Volumes&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_postgres-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_redis-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-cache}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Upgrade Notes ==&lt;br /&gt;
&lt;br /&gt;
Weblate has [https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container upgrade notes] on upgrading the docker container.&lt;br /&gt;
&lt;br /&gt;
== Maintenance Notes ==&lt;br /&gt;
Weblate is maintained. (ibiam has step-up to be maintainer)&lt;br /&gt;
&lt;br /&gt;
After a restart, make sure to run saslauthd to enable authentication for postfix;&lt;br /&gt;
{{Code|&#039;&#039;&#039;saslauthd -a shadow&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
Important files and directories in the root directory, {{Code|/home/weblate/weblate-docker}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;docker-compose.yml&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains definitions for all the services and volumes used by weblate, which includes weblate, database and cache with volumes weblate-cache, weblate-data, postgres-data, redis-data.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;environment&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains environment variables used by container.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
=== Create new Weblate translation component ===&lt;br /&gt;
&lt;br /&gt;
* Create new translation component in Weblate admin menu, &#039;&#039;Add new translation component&#039;&#039;;&lt;br /&gt;
* Select Project, we currently have {{Code|core-sugar}} and {{Code|Sugar-Activities}}, core-sugar contains sugar core APIs.&lt;br /&gt;
* Set version control system to GitHub pull request.&lt;br /&gt;
* Set source code repository link - using https -. &lt;br /&gt;
* Set repository branch.&lt;br /&gt;
* Set File format gettext PO file, File mask po/*.po&lt;br /&gt;
* Set Repository push URL to enable autoupdate of changes to Github from weblate.&lt;br /&gt;
* Set Push branch to weblate-sync which would be used to create a PR. &lt;br /&gt;
* On Github, add hook {{Code|https://weblate.sugarlabs.org/hooks/github/}} to activity repo as it&#039;s used for automated flow of updates to weblate.&lt;br /&gt;
* Check license in activity repo matches Translation license selected by weblate or set to the right license.&lt;br /&gt;
* Add all needed langs; when adding from Github, weblate automatically adds all the PO files and you&#039;ll only need to do this if the only PO file the activity has is the template PO file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If an upload is incomplete, return to translation component, then Manage-&amp;gt;Repository maintenance-&amp;gt;Rescan, this will re-scan the repo and add all the po files.&lt;br /&gt;
&lt;br /&gt;
== Synchronization ==&lt;br /&gt;
&lt;br /&gt;
Weblate automatically pushes changes to Github when there&#039;s a change on weblate because of the Github pull request version control above and the Github configuration can be found in the &lt;br /&gt;
environment file, the hooks configured in the repos make it easy for weblate to pull changes from Github.&lt;br /&gt;
&lt;br /&gt;
Add this workflow to {{Code|&#039;&#039;&#039;.github/workflows/webalte-sync.yaml&#039;&#039;&#039;}} in the Github repo;&lt;br /&gt;
&lt;br /&gt;
  name: Weblate - Create PR when weblate pushes changes&lt;br /&gt;
  on:&lt;br /&gt;
  push:&lt;br /&gt;
    branches:&lt;br /&gt;
      - weblate-sync&lt;br /&gt;
  jobs:&lt;br /&gt;
  weblateSync:&lt;br /&gt;
    runs-on: ubuntu-latest&lt;br /&gt;
    steps:&lt;br /&gt;
      - uses: actions/checkout@v4&lt;br /&gt;
      - name: Create Pull Request&lt;br /&gt;
        run: gh pr create --base main --head weblate-sync -t &amp;quot;Weblate Synchronization&amp;quot; --body &amp;quot;&amp;quot;&lt;br /&gt;
        env:&lt;br /&gt;
          GH_TOKEN: ${\{ github.token }}&lt;br /&gt;
&lt;br /&gt;
This will automatically open a pull-request whenever weblate pushes changes to Github, be sure to drop the&lt;br /&gt;
{{Code|\}} in {{Code|GH_TOKEN}}&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/translate&amp;diff=104131</id>
		<title>Service/translate</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/translate&amp;diff=104131"/>
		<updated>2024-04-04T17:30:10Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Obsolete | Replaced by [[ Service/Weblate]]}}&lt;br /&gt;
&lt;br /&gt;
== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* http://translate.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/pootle]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* translate AT sugarlabs DOT org&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
For non-emergency calls, preferably send email to the administrative contact.&lt;br /&gt;
&lt;br /&gt;
* [[User:Sebastian|Sebastian Silva]] has assumed maintainership tasks&lt;br /&gt;
* [[User:Cjl|Chris Leonard]] has Pootle administrator privs, and heads the localization efforts.&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]] has system admin and Pootle administrator privs, but takes care only of OS-level administration.&lt;br /&gt;
* [[User:SayaminduDasgupta|Sayamindu Dasgupta]] is the former admin. He still has an emeritus sysadmin account and he can be very helpful if contacted by email.&lt;br /&gt;
&lt;br /&gt;
== Language Administrators ==&lt;br /&gt;
&lt;br /&gt;
Language administrators are typically native speakers of a given language that take on responsibility (granted by a Pootle administrator after a request to the Localization list) for reviewing and committing PO files for a given language.  Contacting language administrators is generally done by posting to the Localization list.&lt;br /&gt;
&lt;br /&gt;
More information on language administrator duties can be found on [[Translation_Team/Administration_QuickStart|this page]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Home&lt;br /&gt;
|{{Code|/var/lib/pootle}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Daemon&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/init.d/apache2}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/init.d/pootle}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Logs&lt;br /&gt;
|{{Code|/var/log/apache2}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Config&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/apache2/sites-enabled/000-default}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/cron.d/pootle}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/www/pootle/sugarlabs/pootle.conf}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Ports&lt;br /&gt;
|&lt;br /&gt;
{{Code|80}} HTTP server&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Upgrade notes ==&lt;br /&gt;
&lt;br /&gt;
*A backup of the DB and pootle localsettings.py must be done also.&lt;br /&gt;
*Backup of the /var/lib/pootle structure&lt;br /&gt;
*New versions of Django and Translate toolkit must be installed first&lt;br /&gt;
*Restore localsettings and DB backup&lt;br /&gt;
&lt;br /&gt;
== Mantainance Notes ==&lt;br /&gt;
&lt;br /&gt;
Pootle in Sugar is maintained. (icarito has step-up to be maint)&lt;br /&gt;
&lt;br /&gt;
== Migrated to Pootle 2.5.0 ==&lt;br /&gt;
&lt;br /&gt;
Notes on the process were recorded here:  [[Service/translate/Pootle2.5]]&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
&lt;br /&gt;
Important files and directories in the root directory, {{Code|/var/lib/pootle}}.&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;checkouts&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Sources are checked out in this directory and being used to keep final {{Code|.pot}} and {{Code|.po}} files. The hierarchy is:&lt;br /&gt;
&lt;br /&gt;
 checkouts/&#039;&#039;pootle-project&#039;&#039;/&#039;&#039;pootle-po-filename-without-po-suffix&#039;&#039;/&#039;&#039;sources&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;translations&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Pootle uses this directory as a sources of files to translate, it contains symlinks to files from the {{Code|checkouts}} directory. The hierarchy is:&lt;br /&gt;
&lt;br /&gt;
 translations/&#039;&#039;pootle-project&#039;&#039;/&#039;&#039;lang&#039;&#039;/&#039;&#039;symlinks-to-po-files&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;maintenance&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains some sugar-specific scripts to help maintain our Pootle instance, they are managed in http://git.sugarlabs.org/projects/pootle-helpers.&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;maintenance/helpers/potupdater/project_list.ini&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
This is an Ini file that contains configuration for all used sources repositories. Each section describes one sources repository, where section name is full path, in form of {{Code|/var/lib/pootle/checkouts/&#039;&#039;pootle-project&#039;&#039;/&#039;&#039;pootle-filename&#039;&#039;/&#039;&#039;some-path-within-sources&#039;&#039;/&#039;&#039;pot-file&#039;&#039;}}, to the {{Code|.pot}} file, and contains following options:&lt;br /&gt;
&lt;br /&gt;
* {{Code|project}} required, meaning-less project name;&lt;br /&gt;
* {{Code|vcs}} required, the type of VCS for; supported values are: {{Code|git}};&lt;br /&gt;
* {{Code|method}} required, the method how to generate {{Code|.pot}} files from sources; supported values are: {{Code|bundlebuilder}} for activities, {{Code|intltool}} for intltool based projects;&lt;br /&gt;
* {{Code|layout}} required, ?;&lt;br /&gt;
* {{Code|ignore-files}} optional, the semicolon separated list of file paths that are relative to the sources root; if {{Code|method}} is {{Code|bundlebuilder}} this value will be used to ignore while producing {{Code|.pot files}};&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
* {{Code|potupdater/pogenerator.py}} pulls from git and svn so we have updated sources, then it generates a new .pot file from them. Translated strings get reflected in the .po files in each module, and when the language maintainer clicks the Commit to VCS link, get pushed back to the upstream module.&lt;br /&gt;
* {{Code|admin/pootlepopulator.py}} checkout sources.&lt;br /&gt;
* {{Code|misc/pootle.cron}} all daily basis routines.&lt;br /&gt;
* &#039;&#039;...&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
=== Create new Pootle project ===&lt;br /&gt;
&lt;br /&gt;
* Create new project in Pootle admin menu, &#039;&#039;admin-&amp;gt;projects&#039;&#039;;&lt;br /&gt;
* Add all needed langs;&lt;br /&gt;
* Checkout all sources using command:&lt;br /&gt;
&lt;br /&gt;
 sudo -u pootle -i python maintenance/helpers/admin/pootlepopulator.py &#039;&#039;pootle-project&#039;&#039; &#039;&#039;git-clone-url&#039;&#039; &#039;&#039;pootle-filename-wo-po-suffix&#039;&#039; &#039;&#039;git-branch&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
To checkout the sugar in the branch sucrose-0.94 (in pootle is in the project glucose94) we sshould do: &lt;br /&gt;
&lt;br /&gt;
 cd /var/lib/pootle/&lt;br /&gt;
 sudo -u pootle -i python maintenance/helpers/admin/pootlepopulator.py glucose94 gitorious@git.sugarlabs.org:sugar/mainline.git sugar  sucrose-0.94&lt;br /&gt;
&lt;br /&gt;
* Add new sections to the [[#Files|project_list.ini]] file to describe new {{Code|.pot}} locations;&lt;br /&gt;
* Run {{Code|misc/pootle.cron}} script from {{Code|pootle}} user to generate all sufficient files;&lt;br /&gt;
* Click &#039;&#039;rescan the project files&#039;&#039; in &#039;&#039;Templates-&amp;gt;Project-&amp;gt;Files&#039;&#039; to reveal newly created {{Code|.pot}} files;&lt;br /&gt;
* Click &#039;&#039;Update from templates&#039;&#039; for all languages in newly created project to peek up {{Code|.po}} files symlinked by {{Code|misc/pootle.cron}} script.&lt;br /&gt;
&lt;br /&gt;
=== Adding activities ===&lt;br /&gt;
&lt;br /&gt;
Before registering new activity on http://translate.sugarlabs.org, make sure that:&lt;br /&gt;
&lt;br /&gt;
* New activity is being hosted on http://git.sugarlabs.org;&lt;br /&gt;
* The {{Code|pootle}} user was added to the repository with commit access rights;&lt;br /&gt;
* You have a proper {{Code|GIT_URL}} to clone repository from with commit permissions, e.g., {{Code|gitorious@git.sugarlabs.org:cartoon-builder/mainline.git}}; that might be found on home page in Gitorious, e.g., http://git.sugarlabs.org/cartoon-builder, in &#039;&#039;Clone &amp;amp; push urls&#039;&#039; field with selector &#039;&#039;SSH&#039;&#039;;&lt;br /&gt;
* You know the proper {{Code|CATEGORY}} name to register the project in;&lt;br /&gt;
* There is an unique {{Code|NAME}} of activity, this name will be used as a name of project in Pootle and directory name;&lt;br /&gt;
* You know the proper {{Code|BRANCH}} in Git repository to use for translation; by default, it is {{Code|master}}.&lt;br /&gt;
&lt;br /&gt;
To process the registration, login to translate.sugarlabs.org and enter:&lt;br /&gt;
&lt;br /&gt;
 sudo -u pootle python /var/lib/pootle/maintenance/helpers/admin/pootlepopulator.py &#039;&#039;&amp;lt;CATEGORY&amp;gt;&#039;&#039; &#039;&#039;&amp;lt;GIT_URL&amp;gt;&#039;&#039; /var/lib/pootle/checkouts/&#039;&#039;&amp;lt;CATEGORY&amp;gt;&#039;&#039;/&#039;&#039;&amp;lt;NAME&amp;gt;&#039;&#039; [&#039;&#039;&amp;lt;BRANCH&amp;gt;&#039;&#039;]&lt;br /&gt;
&lt;br /&gt;
After that, for [http://git.sugarlabs.org/pootle-helpers pootle-helper] project in {{Code|potupdater/project_list.ini}}, add the following strings:&lt;br /&gt;
&lt;br /&gt;
 [/var/lib/pootle/checkouts/&#039;&#039;&amp;lt;CATEGORY&amp;gt;&#039;&#039;/&#039;&#039;&amp;lt;NAME&amp;gt;&#039;&#039;/po/&#039;&#039;&amp;lt;.pot-filename&amp;gt;&#039;&#039;]&lt;br /&gt;
 project = &#039;&#039;&amp;lt;NAME&amp;gt;&#039;&#039;&lt;br /&gt;
 vcs = git&lt;br /&gt;
 method = bundlebuilder&lt;br /&gt;
 layout = gnu&lt;br /&gt;
&lt;br /&gt;
Commit new changes, and pull from on pootle VM:&lt;br /&gt;
&lt;br /&gt;
 (cd /var/lib/pootle/maintenance/helpers; sudo -u pootle git pull origin master)&lt;br /&gt;
&lt;br /&gt;
Do &#039;&#039;update from templates&#039;&#039; on the &#039;&#039;templates&#039;&#039; project on Pootle&#039;s frontend. And wait until daily cron job will populate languages for newly registered project, or run it immediately:&lt;br /&gt;
&lt;br /&gt;
 sudo -u pootle python /var/lib/pootle/maintenance/helpers/admin/add_langs.py&lt;br /&gt;
&lt;br /&gt;
Then your activity must be in place to be translated and &#039;&#039;commit to VCS/update from VCS&#039;&#039; links must be activated.&lt;br /&gt;
&lt;br /&gt;
=== Working with git in the pootle server ===&lt;br /&gt;
&lt;br /&gt;
The git operations must be done by the pootle user:&lt;br /&gt;
&lt;br /&gt;
 sudo -u pootle git log&lt;br /&gt;
&lt;br /&gt;
 sudo -u pootle git push origin  sucrose-0.82&lt;br /&gt;
&lt;br /&gt;
This script tell you when you can update different clones of activities, when new strings are added via gettext in each repo. &lt;br /&gt;
&lt;br /&gt;
 /var/lib/pootle/maintenance/helpers/potupdater/check_unmerged_translations.sh&lt;br /&gt;
&lt;br /&gt;
Other important script is pogenerator.py this script re-generates pot in each repo.&lt;br /&gt;
&lt;br /&gt;
=== Resolving conflicts === &lt;br /&gt;
&lt;br /&gt;
If the maintainer did a commit with a file in the po directory we will have a conflict, and Pootle can not do a pull.&lt;br /&gt;
&lt;br /&gt;
Pootle build the pot file from the sources, if we compare and the translations are updated in pootle &lt;br /&gt;
we can do a pull preserving the info in pootle:&lt;br /&gt;
&lt;br /&gt;
 sudo -u pootle git pull -s ours&lt;br /&gt;
&lt;br /&gt;
=== Checking that pootle is working ===&lt;br /&gt;
&lt;br /&gt;
* When commiting from pootle interface, repos in git reflect the commit as something similar to:&lt;br /&gt;
   &lt;br /&gt;
 pootle pushed 3fd0cf7b to taportfolio/mainline:master&lt;br /&gt;
 on March 04, 2011 01:32&lt;br /&gt;
 Commit from Sugar Labs: Translation System by user cjl.: 2 of 25 messages   translated (0 fuzzy).&lt;br /&gt;
&lt;br /&gt;
* Pogenerator.py (in cronjob), it&#039;s also giving mails with info like:&lt;br /&gt;
 &lt;br /&gt;
 Already up-to-date. or&lt;br /&gt;
 ####### Checking POT for Write (master) ######&lt;br /&gt;
&lt;br /&gt;
=== Etoys .pot update ===&lt;br /&gt;
&lt;br /&gt;
Go to Etoys translation directory (that is svn checkout from upstream project):&lt;br /&gt;
&lt;br /&gt;
 su - pootle&lt;br /&gt;
 cd ~/translations/etoys_new&lt;br /&gt;
&lt;br /&gt;
Since there is no need in changing .pot files on Pootle level, revert local changes if they present:&lt;br /&gt;
&lt;br /&gt;
 svn revert templates/*.pot&lt;br /&gt;
&lt;br /&gt;
Fetch new update from the upstream:&lt;br /&gt;
&lt;br /&gt;
 svn up templates&lt;br /&gt;
&lt;br /&gt;
=== Tips ===&lt;br /&gt;
&lt;br /&gt;
* How to manipulate users:&lt;br /&gt;
&lt;br /&gt;
 django-admin shell --settings=pootle.settings&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; from django.contrib.auth.models import User&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; u = User.objects.get(username=&#039;bernie&#039;)&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; u.is_superuser = True&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt; u.save()&lt;br /&gt;
&lt;br /&gt;
* Refresh stats, needed when the database and the checked out modules get out of sync:&lt;br /&gt;
&lt;br /&gt;
 sudo -u pootle django-admin refresh_stats --settings=pootle.settings&lt;br /&gt;
&lt;br /&gt;
* If you have a commit error file because of only read git url, please rm the old &#039;&#039;&#039;/var/lib/pootle/checkouts/&#039;&#039;&#039; files related with that activity or project and re run pootlepopulator.&lt;br /&gt;
&lt;br /&gt;
* Also if there are errors related with git add, is likely that some lang.po files are not versionated on pootle server, please run &#039;&#039;&#039;git add .&#039;&#039;&#039; inside the activity or project.&lt;br /&gt;
&lt;br /&gt;
* When there are &#039;&#039;&#039;commit to cvs/update to cvs&#039;&#039;&#039; links missing in activities or projects please check git url in .git/config , this URL must be writable by pootle.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
* http://translate.sourceforge.net/wiki/pootle/installation&lt;br /&gt;
* http://lists.laptop.org/listinfo/localization&lt;br /&gt;
* http://git.sugarlabs.org/pootle-helpers&lt;br /&gt;
* /usr/lib/python2.6/dist-packages/translate/storage/versioncontrol/git.py (Translate)&lt;br /&gt;
&lt;br /&gt;
[[Category:Service|translate]]&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Machine/pootle&amp;diff=104130</id>
		<title>Machine/pootle</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Machine/pootle&amp;diff=104130"/>
		<updated>2024-04-04T17:29:34Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* http://translate.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Services ==&lt;br /&gt;
&lt;br /&gt;
* [[Service/translate]]&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
This machine hosts only Pootle.&lt;br /&gt;
&lt;br /&gt;
== Location ==&lt;br /&gt;
&lt;br /&gt;
KVM virtual machine hosted on [[Machine/justice]]&lt;br /&gt;
&lt;br /&gt;
== Admins ==&lt;br /&gt;
&lt;br /&gt;
* [[User:Sebastian|Sebastian Silva]], icarito on #sugar Freenode (general pootle admin)&lt;br /&gt;
&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]], bernie on #sugar Freenode (only machine-level issues)&lt;br /&gt;
&lt;br /&gt;
* [[User:MrBIOS|Alex Perez]], MrBIOS on #sugar Freenode&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Machine/pootle&amp;diff=104129</id>
		<title>Machine/pootle</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Machine/pootle&amp;diff=104129"/>
		<updated>2024-04-04T17:29:01Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Obsolete | Replaced by [[ Service/Weblate]]}}&lt;br /&gt;
&lt;br /&gt;
== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* http://translate.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Services ==&lt;br /&gt;
&lt;br /&gt;
* [[Service/translate]]&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
This machine hosts only Pootle.&lt;br /&gt;
&lt;br /&gt;
== Location ==&lt;br /&gt;
&lt;br /&gt;
KVM virtual machine hosted on [[Machine/justice]]&lt;br /&gt;
&lt;br /&gt;
== Admins ==&lt;br /&gt;
&lt;br /&gt;
* [[User:Sebastian|Sebastian Silva]], icarito on #sugar Freenode (general pootle admin)&lt;br /&gt;
&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]], bernie on #sugar Freenode (only machine-level issues)&lt;br /&gt;
&lt;br /&gt;
* [[User:MrBIOS|Alex Perez]], MrBIOS on #sugar Freenode&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Sugar_on_a_Stick/Downloads&amp;diff=104110</id>
		<title>Sugar on a Stick/Downloads</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Sugar_on_a_Stick/Downloads&amp;diff=104110"/>
		<updated>2024-02-12T17:05:48Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Point to fedora SOAS download page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{TeamHeader|Sugar on a Stick|home=Project Home|xbgColor=ffe792|join_label=Get Involved}}&amp;lt;/noinclude&amp;gt;__NOTOC__&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;border: 0; border-width: 0; width: 350px;&amp;quot; | [[File:SugaronastickAvocado-320px.png|320px|left|link=https://spins.fedoraproject.org/soas/]]&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;border: 0; border-width: 0;&amp;quot; | &#039;&#039;&#039;[[Sugar on a Stick]]&#039;&#039;&#039; is a [https://fedoraproject.org/wiki/Overview Fedora&amp;lt;sup&amp;gt;®&amp;lt;/sup&amp;gt;] [https://spins.fedoraproject.org/soas Spin] operating system featuring the award-winning [[What is Sugar?|Sugar Learning Platform]].&lt;br /&gt;
&lt;br /&gt;
Sugar on a Stick will run on&lt;br /&gt;
* any 64-bit Notebook, Laptop, or Desktop computer,  with a minimum of 1GB RAM, that can run Linux, Windows or macOS, using a USB thumbdrive or stick, as a [[wikipedia:Live USB|Live USB]],&lt;br /&gt;
* a 32-bit computer with the TOAST version of Sugar (Trisquel on a Sugar Toast).  See [[Trisquel On A Sugar Toast]].&lt;br /&gt;
* a Raspberry Pi 2 or 3, using a microSD card&amp;lt;!-- it is not a Live system, but an installed system--&amp;gt;, or;&lt;br /&gt;
* any computer as a virtual machine.&lt;br /&gt;
&lt;br /&gt;
You can use Sugar on a Stick to demo Sugar almost anywhere without disturbing the contents of the computer you use, and if people like what they see, you can [[Tutorials/Installation/Install with liveinst|install]] Sugar on a Stick to their hard drives or other sticks from the demo stick.&lt;br /&gt;
&lt;br /&gt;
|-  style=&amp;quot;border: 0; border-width: 0; text-align: center&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;border: 0; border-width: 0; text-align: left&amp;quot; |&lt;br /&gt;
&amp;lt;!-- &amp;lt;span class=&amp;quot;linkgroup&amp;quot;&amp;gt;[[File:Download Mirabell.png|link=https://download.fedoraproject.org/pub/fedora/linux/releases/35/Spins/x86_64/iso/Fedora-SoaS-Live-x86_64-35-1.2.iso]]&amp;lt;/span&amp;gt; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;linkgroup&amp;quot;&amp;gt;[[File:Download Mirabell.png|link=https://fedoraproject.org/spins/soas/download]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
x86_64 (64-bit)&lt;br /&gt;
&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;border: 0; border-width: 0; text-align: left&amp;quot; |&lt;br /&gt;
&amp;lt;span class=&amp;quot;linkgroup&amp;quot;&amp;gt;[[File:Download Mirabell.png|link=https://download.fedoraproject.org/pub/fedora/linux/releases/35/Spins/armhfp/images/Fedora-SoaS-35-1.2.armhfp.raw.xz]]&amp;lt;/span&amp;gt;&lt;br /&gt;
armhfp Raspberry Pi 2 or 3, see [https://github.com/sugarlabs/sugar/blob/master/docs/rpi-soas.md How to install].&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; style=&amp;quot;border: 0; border-width: 0; text-align: left&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
* How to quickly demonstrate: ([[Sugar on a Stick/Installation Process|English]]), ([[Sugar on a Stick/Proceso de instalacion|en español]])&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;!-- See the [https://spins.fedoraproject.org/soas/download/index.html Spins download page]&amp;lt;br&amp;gt; for the following:&lt;br /&gt;
* ARM&amp;lt;sup&amp;gt;®&amp;lt;/sup&amp;gt; Technology downloads&lt;br /&gt;
* Some support links --&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&#039;&#039;&#039;[https://alt.fedoraproject.org/pub/alt/live-respins/ Fedora Live Respins]&#039;&#039;&#039; are like the official release but with officially updated Fedora components.&lt;br /&gt;
* Many bugs have been fixed in these Respins, but new ones may occasionally render the download unbootable.&lt;br /&gt;
* Checksums to verify the integrity of downloads are in a file at the top of the Respins directory.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Fedora and the Infinity design logo are trademarks of Red Hat, Inc.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Sugar_on_a_Stick/Downloads&amp;diff=104109</id>
		<title>Sugar on a Stick/Downloads</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Sugar_on_a_Stick/Downloads&amp;diff=104109"/>
		<updated>2024-02-12T16:56:18Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Undo revision 104108 by Chimosky (talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{TeamHeader|Sugar on a Stick|home=Project Home|xbgColor=ffe792|join_label=Get Involved}}&amp;lt;/noinclude&amp;gt;__NOTOC__&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;border: 0; border-width: 0; width: 350px;&amp;quot; | [[File:SugaronastickAvocado-320px.png|320px|left|link=https://spins.fedoraproject.org/soas/]]&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;border: 0; border-width: 0;&amp;quot; | &#039;&#039;&#039;[[Sugar on a Stick]]&#039;&#039;&#039; is a [https://fedoraproject.org/wiki/Overview Fedora&amp;lt;sup&amp;gt;®&amp;lt;/sup&amp;gt;] [https://spins.fedoraproject.org/soas Spin] operating system featuring the award-winning [[What is Sugar?|Sugar Learning Platform]].&lt;br /&gt;
&lt;br /&gt;
Sugar on a Stick will run on&lt;br /&gt;
* any 64-bit Notebook, Laptop, or Desktop computer,  with a minimum of 1GB RAM, that can run Linux, Windows or macOS, using a USB thumbdrive or stick, as a [[wikipedia:Live USB|Live USB]],&lt;br /&gt;
* a 32-bit computer with the TOAST version of Sugar (Trisquel on a Sugar Toast).  See [[Trisquel On A Sugar Toast]].&lt;br /&gt;
* a Raspberry Pi 2 or 3, using a microSD card&amp;lt;!-- it is not a Live system, but an installed system--&amp;gt;, or;&lt;br /&gt;
* any computer as a virtual machine.&lt;br /&gt;
&lt;br /&gt;
You can use Sugar on a Stick to demo Sugar almost anywhere without disturbing the contents of the computer you use, and if people like what they see, you can [[Tutorials/Installation/Install with liveinst|install]] Sugar on a Stick to their hard drives or other sticks from the demo stick.&lt;br /&gt;
&lt;br /&gt;
|-  style=&amp;quot;border: 0; border-width: 0; text-align: center&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;border: 0; border-width: 0; text-align: left&amp;quot; |&lt;br /&gt;
&amp;lt;!-- &amp;lt;span class=&amp;quot;linkgroup&amp;quot;&amp;gt;[[File:Download Mirabell.png|link=https://download.fedoraproject.org/pub/fedora/linux/releases/35/Spins/x86_64/iso/Fedora-SoaS-Live-x86_64-35-1.2.iso]]&amp;lt;/span&amp;gt; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;linkgroup&amp;quot;&amp;gt;[[File:Download Mirabell.png|link=http://download.sugarlabs.org/soas/Fedora-SoaS-Live-x86_64-F35-20220215.iso]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
x86_64 (64-bit)&lt;br /&gt;
&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;border: 0; border-width: 0; text-align: left&amp;quot; |&lt;br /&gt;
&amp;lt;span class=&amp;quot;linkgroup&amp;quot;&amp;gt;[[File:Download Mirabell.png|link=https://download.fedoraproject.org/pub/fedora/linux/releases/35/Spins/armhfp/images/Fedora-SoaS-35-1.2.armhfp.raw.xz]]&amp;lt;/span&amp;gt;&lt;br /&gt;
armhfp Raspberry Pi 2 or 3, see [https://github.com/sugarlabs/sugar/blob/master/docs/rpi-soas.md How to install].&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; style=&amp;quot;border: 0; border-width: 0; text-align: left&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
* How to quickly demonstrate: ([[Sugar on a Stick/Installation Process|English]]), ([[Sugar on a Stick/Proceso de instalacion|en español]])&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;!-- See the [https://spins.fedoraproject.org/soas/download/index.html Spins download page]&amp;lt;br&amp;gt; for the following:&lt;br /&gt;
* ARM&amp;lt;sup&amp;gt;®&amp;lt;/sup&amp;gt; Technology downloads&lt;br /&gt;
* Some support links --&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&#039;&#039;&#039;[https://alt.fedoraproject.org/pub/alt/live-respins/ Fedora Live Respins]&#039;&#039;&#039; are like the official release but with officially updated Fedora components.&lt;br /&gt;
* Many bugs have been fixed in these Respins, but new ones may occasionally render the download unbootable.&lt;br /&gt;
* Checksums to verify the integrity of downloads are in a file at the top of the Respins directory.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Fedora and the Infinity design logo are trademarks of Red Hat, Inc.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Sugar_on_a_Stick/Downloads&amp;diff=104108</id>
		<title>Sugar on a Stick/Downloads</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Sugar_on_a_Stick/Downloads&amp;diff=104108"/>
		<updated>2024-02-12T16:55:18Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Point to SOAS download page in fedora&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{TeamHeader|Sugar on a Stick|home=Project Home|xbgColor=ffe792|join_label=Get Involved}}&amp;lt;/noinclude&amp;gt;__NOTOC__&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| rowspan=&amp;quot;4&amp;quot; style=&amp;quot;border: 0; border-width: 0; width: 350px;&amp;quot; | [[File:SugaronastickAvocado-320px.png|320px|left|link=https://spins.fedoraproject.org/soas/]]&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;border: 0; border-width: 0;&amp;quot; | &#039;&#039;&#039;[[Sugar on a Stick]]&#039;&#039;&#039; is a [https://fedoraproject.org/wiki/Overview Fedora&amp;lt;sup&amp;gt;®&amp;lt;/sup&amp;gt;] [https://spins.fedoraproject.org/soas Spin] operating system featuring the award-winning [[What is Sugar?|Sugar Learning Platform]].&lt;br /&gt;
&lt;br /&gt;
Sugar on a Stick will run on&lt;br /&gt;
* any 64-bit Notebook, Laptop, or Desktop computer,  with a minimum of 1GB RAM, that can run Linux, Windows or macOS, using a USB thumbdrive or stick, as a [[wikipedia:Live USB|Live USB]],&lt;br /&gt;
* a 32-bit computer with the TOAST version of Sugar (Trisquel on a Sugar Toast).  See [[Trisquel On A Sugar Toast]].&lt;br /&gt;
* a Raspberry Pi 2 or 3, using a microSD card&amp;lt;!-- it is not a Live system, but an installed system--&amp;gt;, or;&lt;br /&gt;
* any computer as a virtual machine.&lt;br /&gt;
&lt;br /&gt;
You can use Sugar on a Stick to demo Sugar almost anywhere without disturbing the contents of the computer you use, and if people like what they see, you can [[Tutorials/Installation/Install with liveinst|install]] Sugar on a Stick to their hard drives or other sticks from the demo stick.&lt;br /&gt;
&lt;br /&gt;
|-  style=&amp;quot;border: 0; border-width: 0; text-align: center&amp;quot;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;border: 0; border-width: 0; text-align: left&amp;quot; |&lt;br /&gt;
&amp;lt;!-- &amp;lt;span class=&amp;quot;linkgroup&amp;quot;&amp;gt;[[File:Download Mirabell.png|link=https://fedoraproject.org/spins/soas/download]]&amp;lt;/span&amp;gt; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;linkgroup&amp;quot;&amp;gt;[[File:Download Mirabell.png|link=http://download.sugarlabs.org/soas/Fedora-SoaS-Live-x86_64-F35-20220215.iso]]&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
x86_64 (64-bit)&lt;br /&gt;
&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; style=&amp;quot;border: 0; border-width: 0; text-align: left&amp;quot; |&lt;br /&gt;
&amp;lt;span class=&amp;quot;linkgroup&amp;quot;&amp;gt;[[File:Download Mirabell.png|link=https://download.fedoraproject.org/pub/fedora/linux/releases/35/Spins/armhfp/images/Fedora-SoaS-35-1.2.armhfp.raw.xz]]&amp;lt;/span&amp;gt;&lt;br /&gt;
armhfp Raspberry Pi 2 or 3, see [https://github.com/sugarlabs/sugar/blob/master/docs/rpi-soas.md How to install].&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; style=&amp;quot;border: 0; border-width: 0; text-align: left&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
* How to quickly demonstrate: ([[Sugar on a Stick/Installation Process|English]]), ([[Sugar on a Stick/Proceso de instalacion|en español]])&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;lt;!-- See the [https://spins.fedoraproject.org/soas/download/index.html Spins download page]&amp;lt;br&amp;gt; for the following:&lt;br /&gt;
* ARM&amp;lt;sup&amp;gt;®&amp;lt;/sup&amp;gt; Technology downloads&lt;br /&gt;
* Some support links --&amp;gt;&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&#039;&#039;&#039;[https://alt.fedoraproject.org/pub/alt/live-respins/ Fedora Live Respins]&#039;&#039;&#039; are like the official release but with officially updated Fedora components.&lt;br /&gt;
* Many bugs have been fixed in these Respins, but new ones may occasionally render the download unbootable.&lt;br /&gt;
* Checksums to verify the integrity of downloads are in a file at the top of the Respins directory.&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Fedora and the Infinity design logo are trademarks of Red Hat, Inc.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Sysadmin/Letsencrypt&amp;diff=104107</id>
		<title>Sysadmin/Letsencrypt</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Sysadmin/Letsencrypt&amp;diff=104107"/>
		<updated>2024-01-01T12:25:10Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: /* Sites */  Add weblate&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Description ==&lt;br /&gt;
&lt;br /&gt;
Let’s Encrypt (LE) is a free, automated, and open certificate authority (CA), run for the public’s benefit. It is sponsored by the biggest Internet companies and browsers: Google (Chrome), Mozilla (Firefox), and so on. At the time of writing, LE is in public beta.&lt;br /&gt;
&lt;br /&gt;
Currently, we have LE installed on [[Machine/freedom]] and [[Machine/sunjammer]].&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
We have chosen &amp;lt;code&amp;gt;/opt/letsencrypt&amp;lt;/code&amp;gt; as the base or home directory for the LE client. The LE Client is a fully-featured, extensible client for the Let’s Encrypt CA (or any other CA that speaks the ACME protocol) that can automate the tasks of obtaining certificates and configuring webservers to use them.&lt;br /&gt;
&lt;br /&gt;
Because there is no a LE package for Ubuntu yet, we must clone the &amp;lt;code&amp;gt;letsencrypt-auto&amp;lt;/code&amp;gt; wrapper script. This script obtains some dependencies from the OS (apt-get) and puts others in a python virtual environment (Pip). The only requirement is Python 2.6 or Python 2.7.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;git clone https://github.com/letsencrypt/letsencrypt&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This client requires root access in order to write to &amp;lt;code&amp;gt;/etc/letsencrypt&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/var/log/letsencrypt&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;/var/lib/letsencrypt&amp;lt;/code&amp;gt;; to bind to ports 80 and 443 and to read and modify webserver configurations (for apache or nginx plugins).&lt;br /&gt;
&lt;br /&gt;
== Getting a certificate ==&lt;br /&gt;
&lt;br /&gt;
The Let’s Encrypt client supports a number of different &#039;&#039;plugins&#039;&#039; that can be used to obtain and/or install certificates. For the moment, we decided to get the certificates manually and apply the changes to the the web server with a script. We can use the Nginx plugin to automatically obtain and install the certificate but this plugin is still experimental.&lt;br /&gt;
&lt;br /&gt;
In order to automate the process (of getting the cert), we create a config file for each domain inside the folder &amp;lt;code&amp;gt;/etc/letsencrypt/config&amp;lt;/code&amp;gt;. For example, the config file for www.slo is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# We use a 4096 bit RSA key instead of 2048&lt;br /&gt;
rsa-key-size = 4096&lt;br /&gt;
&lt;br /&gt;
email = sysadmin@sugarlabs.org&lt;br /&gt;
domains = sugarlabs.org, www.sugarlabs.org&lt;br /&gt;
&lt;br /&gt;
authenticator = webroot&lt;br /&gt;
&lt;br /&gt;
# This is the webroot directory of your domain in which&lt;br /&gt;
# letsencrypt will write a hash in /.well-known/acme-challenge directory.&lt;br /&gt;
webroot-path = /srv/www-sugarlabs/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The LE validation server must have access to the domain (port 80) of which we want to get the certificate. In order to validate that the server control the domain, the LE CA will issue one or more sets of challenges. For example, provisioning an HTTP resource under a well-known URI. Usually, the resource requested will be located at &amp;lt;code&amp;gt;/.well-known/acme-challenge&amp;lt;/code&amp;gt; under the webroot folder of the requested site.&lt;br /&gt;
&lt;br /&gt;
In Nginx, we can define how to process a specific request with the location directive. Be sure to add the following lines to the server block inside Nginx:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
location &#039;/.well-known/acme-challenge&#039; {&lt;br /&gt;
        root /srv/www-sugarlabs/;&lt;br /&gt;
    }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get the certificate using the previous config file, we must execute the following command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;/opt/letsencrypt/letsencrypt-auto certonly --config /etc/letsencrypt/config/sugarlabs.org.ini &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
All generated keys and issued certificates can be found in &amp;lt;code&amp;gt;/etc/letsencrypt/live/sugarlabs.org/&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The same process can be applied for getting certs for other domains: &lt;br /&gt;
(1) create a subdomain.domain.tld config file,&lt;br /&gt;
(2) define the well-know resource and,&lt;br /&gt;
(3) request the certificate.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE&#039;&#039;&#039;: We had to comment out our CAA records in the DNS in order to obtain the certificates. CAA records forbids LE to issue certificates for a domain.&lt;br /&gt;
&lt;br /&gt;
== Renewing a Certificate ==&lt;br /&gt;
&lt;br /&gt;
Let’s Encrypt CA issues short lived certificates (90 days). In order to automate the renewal, we everyday automatically execute a script which checks the expiration day for every certificate and requests the renewal 15 days before the expiration day (this value is tweakable). After renewing the cert, the script reload the Nginx config.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
LE_CERTS=&#039;/etc/letsencrypt/live&#039;&lt;br /&gt;
LE_CONFIG_PATH=&#039;/etc/letsencrypt/config&#039;&lt;br /&gt;
LE_BIN=&#039;/opt/letsencrypt/letsencrypt-auto&#039;&lt;br /&gt;
WEB_SERVER=&#039;nginx&#039;&lt;br /&gt;
EXP_LIMIT=15&lt;br /&gt;
&lt;br /&gt;
for config in $(ls $LE_CONFIG_PATH/*.ini); do&lt;br /&gt;
   domain=$(basename &amp;quot;$config&amp;quot; .ini)&lt;br /&gt;
   DATE_NOW=$(date -d &amp;quot;now&amp;quot; +%s)&lt;br /&gt;
   EXP_DATE=$(date -d &amp;quot;`openssl x509 -in $LE_CERTS/$domain/cert.pem -text -noout | grep &amp;quot;Not After&amp;quot; | cut -c 25-`&amp;quot; +%s)&lt;br /&gt;
   EXP_DAYS=$(( (EXP_DATE - $DATE_NOW) / 86400 ))&lt;br /&gt;
   if (( $EXP_DAYS &amp;lt; $EXP_LIMIT )) ; then&lt;br /&gt;
        echo &amp;quot;The certificate for $domain is about to expire soon. Starting renewal...&amp;quot;&lt;br /&gt;
        $LE_BIN certonly --renew-by-default --config $config&lt;br /&gt;
        echo &amp;quot;Reloading $WEB_SERVER&amp;quot;&lt;br /&gt;
        /usr/sbin/service $WEB_SERVER reload&lt;br /&gt;
        echo &amp;quot;Renewal process finished for $domain&amp;quot;&lt;br /&gt;
   else&lt;br /&gt;
        echo &amp;quot;The certificate for $domain is up to date, no need for renewal ($EXP_DAYS days left for renewal).&amp;quot;&lt;br /&gt;
   fi&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The script is named &amp;lt;code&amp;gt;renew-letsencrypt.sh&amp;lt;/code&amp;gt; and is located in &amp;lt;code&amp;gt;/usr/local/bin &amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sites ==&lt;br /&gt;
&lt;br /&gt;
The sites currently with a LE SSL certificate are:&lt;br /&gt;
&lt;br /&gt;
 bugs.sugarlabs.org&lt;br /&gt;
 bundlebin.sugarlabs.org&lt;br /&gt;
 developer.sugarlabs.org&lt;br /&gt;
 freedom.sugarlabs.org&lt;br /&gt;
 help.sugarlabs.org&lt;br /&gt;
 hook.sugarlabs.org&lt;br /&gt;
 nagios.sugarlabs.org&lt;br /&gt;
 socialhelp.sugarlabs.org&lt;br /&gt;
 sugarlabs.org&lt;br /&gt;
 turtleartday.org&lt;br /&gt;
 use-socialhelp.sugarlabs.org&lt;br /&gt;
 vote.sugarlabs.org&lt;br /&gt;
&lt;br /&gt;
 download.sugarlabs.org&lt;br /&gt;
 ldap.sugarlabs.org&lt;br /&gt;
 lists.sugarlabs.org&lt;br /&gt;
 munin.sugarlabs.org&lt;br /&gt;
 musicblocks.sugarlabs.org&lt;br /&gt;
 people.sugarlabs.org&lt;br /&gt;
 static.sugarlabs.org&lt;br /&gt;
 sunjammer.sugarlabs.org&lt;br /&gt;
 turtle.sugarlabs.org&lt;br /&gt;
 wiki.sugarlabs.org&lt;br /&gt;
 weblate.sugarlabs.org&lt;br /&gt;
&lt;br /&gt;
== Contact ==&lt;br /&gt;
&lt;br /&gt;
* [[User:scg|Samuel]], scg on #sugar on Freenode.&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104106</id>
		<title>Service/Weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104106"/>
		<updated>2023-12-19T14:26:08Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: /* Maintenance Notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* https://weblate.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/weblate]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* admin AT weblate DOT sugarlabs DOT org&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
For non-emergency calls, preferably send email to the administrative contact.&lt;br /&gt;
&lt;br /&gt;
* [[User:Chimosky|Chihurumnaya Ibiam]] has assumed maintainership tasks.&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]] has system admin privs, but takes care only of OS-level administration.&lt;br /&gt;
* [[User:MrBIOS|Alex Perez]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | User&lt;br /&gt;
|{{Code|weblate}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Home&lt;br /&gt;
|{{Code|/home/weblate/weblate-docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Daemon&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/init.d/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/init.d/docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Logs&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/log/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|docker logs weblate-docker-weblate-1}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Config&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/nginx/sites-enabled/weblate}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/home/weblate/weblate-docker/docker-compose.yml}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Ports&lt;br /&gt;
|&lt;br /&gt;
{{Code|443}} HTTP server&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|8080}} weblate docker container port&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Volumes&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_postgres-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_redis-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-cache}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Upgrade Notes ==&lt;br /&gt;
&lt;br /&gt;
Weblate has [https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container upgrade notes] on upgrading the docker container.&lt;br /&gt;
&lt;br /&gt;
== Maintenance Notes ==&lt;br /&gt;
Weblate is maintained. (ibiam has step-up to be maintainer)&lt;br /&gt;
&lt;br /&gt;
After a restart, make sure to run saslauthd to enable authentication for postfix;&lt;br /&gt;
{{Code|&#039;&#039;&#039;saslauthd -a shadow&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
Important files and directories in the root directory, {{Code|/home/weblate/weblate-docker}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;docker-compose.yml&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains definitions for all the services and volumes used by weblate, which includes weblate, database and cache with volumes weblate-cache, weblate-data, postgres-data, redis-data.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;environment&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains environment variables used by container.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
=== Create new Weblate translation component ===&lt;br /&gt;
&lt;br /&gt;
* Create new translation component in Weblate admin menu, &#039;&#039;Add new translation component&#039;&#039;;&lt;br /&gt;
* Select Project, we currently have {{Code|core-sugar}} and {{Code|Sugar-Activities}}, core-sugar contains sugar core APIs.&lt;br /&gt;
* Set version control system to GitHub pull request.&lt;br /&gt;
* Set source code repository link - using https -. &lt;br /&gt;
* Set repository branch.&lt;br /&gt;
* Set File format gettext PO file, File mask po/*.po&lt;br /&gt;
* Set Repository push URL to enable autoupdate of changes to Github from weblate.&lt;br /&gt;
* Set Push branch to weblate-sync which would be used to create a PR. &lt;br /&gt;
* On Github, add hook {{Code|https://weblate.sugarlabs.org/hooks/github/}} to activity repo as it&#039;s used for automated flow of updates to weblate.&lt;br /&gt;
* Check license in activity repo matches Translation license selected by weblate or set to the right license.&lt;br /&gt;
* Add all needed langs; when adding from Github, weblate automatically adds all the PO files and you&#039;ll only need to do this if the only PO file the activity has is the template PO file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If an upload is incomplete, return to translation componet, then Manage-&amp;gt;Repository maintenance-&amp;gt;Rescan, this will re-scan the repo and add all the po files.&lt;br /&gt;
&lt;br /&gt;
== Synchronization ==&lt;br /&gt;
&lt;br /&gt;
Weblate automatically pushes changes to Github when there&#039;s a change on weblate because of the Github pull request version control above and the Github configuration can be found in the &lt;br /&gt;
environment file, the hooks configured in the repos make it easy for weblate to pull changes from Github.&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104105</id>
		<title>Service/Weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104105"/>
		<updated>2023-12-19T14:25:32Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Add saslauthd instructions&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* https://weblate.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/weblate]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* admin AT weblate DOT sugarlabs DOT org&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
For non-emergency calls, preferably send email to the administrative contact.&lt;br /&gt;
&lt;br /&gt;
* [[User:Chimosky|Chihurumnaya Ibiam]] has assumed maintainership tasks.&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]] has system admin privs, but takes care only of OS-level administration.&lt;br /&gt;
* [[User:MrBIOS|Alex Perez]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | User&lt;br /&gt;
|{{Code|weblate}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Home&lt;br /&gt;
|{{Code|/home/weblate/weblate-docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Daemon&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/init.d/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/init.d/docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Logs&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/log/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|docker logs weblate-docker-weblate-1}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Config&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/nginx/sites-enabled/weblate}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/home/weblate/weblate-docker/docker-compose.yml}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Ports&lt;br /&gt;
|&lt;br /&gt;
{{Code|443}} HTTP server&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|8080}} weblate docker container port&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Volumes&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_postgres-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_redis-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-cache}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Upgrade Notes ==&lt;br /&gt;
&lt;br /&gt;
Weblate has [https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container upgrade notes] on upgrading the docker container.&lt;br /&gt;
&lt;br /&gt;
== Maintenance Notes ==&lt;br /&gt;
Weblate is maintained. (ibiam has step-up to be maintainer)&lt;br /&gt;
&lt;br /&gt;
After a restart, make sure to run saslauthd to enable authentication for postfix;&lt;br /&gt;
{{Code|&#039;&#039;&#039;$ saslauthd -a shadow&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
Important files and directories in the root directory, {{Code|/home/weblate/weblate-docker}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;docker-compose.yml&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains definitions for all the services and volumes used by weblate, which includes weblate, database and cache with volumes weblate-cache, weblate-data, postgres-data, redis-data.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;environment&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains environment variables used by container.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
=== Create new Weblate translation component ===&lt;br /&gt;
&lt;br /&gt;
* Create new translation component in Weblate admin menu, &#039;&#039;Add new translation component&#039;&#039;;&lt;br /&gt;
* Select Project, we currently have {{Code|core-sugar}} and {{Code|Sugar-Activities}}, core-sugar contains sugar core APIs.&lt;br /&gt;
* Set version control system to GitHub pull request.&lt;br /&gt;
* Set source code repository link - using https -. &lt;br /&gt;
* Set repository branch.&lt;br /&gt;
* Set File format gettext PO file, File mask po/*.po&lt;br /&gt;
* Set Repository push URL to enable autoupdate of changes to Github from weblate.&lt;br /&gt;
* Set Push branch to weblate-sync which would be used to create a PR. &lt;br /&gt;
* On Github, add hook {{Code|https://weblate.sugarlabs.org/hooks/github/}} to activity repo as it&#039;s used for automated flow of updates to weblate.&lt;br /&gt;
* Check license in activity repo matches Translation license selected by weblate or set to the right license.&lt;br /&gt;
* Add all needed langs; when adding from Github, weblate automatically adds all the PO files and you&#039;ll only need to do this if the only PO file the activity has is the template PO file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If an upload is incomplete, return to translation componet, then Manage-&amp;gt;Repository maintenance-&amp;gt;Rescan, this will re-scan the repo and add all the po files.&lt;br /&gt;
&lt;br /&gt;
== Synchronization ==&lt;br /&gt;
&lt;br /&gt;
Weblate automatically pushes changes to Github when there&#039;s a change on weblate because of the Github pull request version control above and the Github configuration can be found in the &lt;br /&gt;
environment file, the hooks configured in the repos make it easy for weblate to pull changes from Github.&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104104</id>
		<title>Service/Weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104104"/>
		<updated>2023-12-08T12:14:54Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: /* Create new Weblate translation component */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* https://weblate.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/weblate]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* admin AT weblate DOT sugarlabs DOT org&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
For non-emergency calls, preferably send email to the administrative contact.&lt;br /&gt;
&lt;br /&gt;
* [[User:Chimosky|Chihurumnaya Ibiam]] has assumed maintainership tasks.&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]] has system admin privs, but takes care only of OS-level administration.&lt;br /&gt;
* [[User:MrBIOS|Alex Perez]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | User&lt;br /&gt;
|{{Code|weblate}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Home&lt;br /&gt;
|{{Code|/home/weblate/weblate-docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Daemon&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/init.d/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/init.d/docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Logs&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/log/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|docker logs weblate-docker-weblate-1}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Config&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/nginx/sites-enabled/weblate}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/home/weblate/weblate-docker/docker-compose.yml}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Ports&lt;br /&gt;
|&lt;br /&gt;
{{Code|443}} HTTP server&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|8080}} weblate docker container port&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Volumes&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_postgres-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_redis-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-cache}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Upgrade Notes ==&lt;br /&gt;
&lt;br /&gt;
Weblate has [https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container upgrade notes] on upgrading the docker container.&lt;br /&gt;
&lt;br /&gt;
== Maintenance Notes ==&lt;br /&gt;
Weblate is maintained. (ibiam has step-up to be maint)&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
Important files and directories in the root directory, {{Code|/home/weblate/weblate-docker}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;docker-compose.yml&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains definitions for all the services and volumes used by weblate, which includes weblate, database and cache with volumes weblate-cache, weblate-data, postgres-data, redis-data.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;environment&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains environment variables used by container.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
=== Create new Weblate translation component ===&lt;br /&gt;
&lt;br /&gt;
* Create new translation component in Weblate admin menu, &#039;&#039;Add new translation component&#039;&#039;;&lt;br /&gt;
* Select Project, we currently have {{Code|core-sugar}} and {{Code|Sugar-Activities}}, core-sugar contains sugar core APIs.&lt;br /&gt;
* Set version control system to GitHub pull request.&lt;br /&gt;
* Set source code repository link - using https -. &lt;br /&gt;
* Set repository branch.&lt;br /&gt;
* Set File format gettext PO file, File mask po/*.po&lt;br /&gt;
* Set Repository push URL to enable autoupdate of changes to Github from weblate.&lt;br /&gt;
* Set Push branch to weblate-sync which would be used to create a PR. &lt;br /&gt;
* On Github, add hook {{Code|https://weblate.sugarlabs.org/hooks/github/}} to activity repo as it&#039;s used for automated flow of updates to weblate.&lt;br /&gt;
* Check license in activity repo matches Translation license selected by weblate or set to the right license.&lt;br /&gt;
* Add all needed langs; when adding from Github, weblate automatically adds all the PO files and you&#039;ll only need to do this if the only PO file the activity has is the template PO file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If an upload is incomplete, return to translation componet, then Manage-&amp;gt;Repository maintenance-&amp;gt;Rescan, this will re-scan the repo and add all the po files.&lt;br /&gt;
&lt;br /&gt;
== Synchronization ==&lt;br /&gt;
&lt;br /&gt;
Weblate automatically pushes changes to Github when there&#039;s a change on weblate because of the Github pull request version control above and the Github configuration can be found in the &lt;br /&gt;
environment file, the hooks configured in the repos make it easy for weblate to pull changes from Github.&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104103</id>
		<title>Service/Weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104103"/>
		<updated>2023-12-08T12:01:17Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: /* Create new Weblate translation component */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* https://weblate.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/weblate]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* admin AT weblate DOT sugarlabs DOT org&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
For non-emergency calls, preferably send email to the administrative contact.&lt;br /&gt;
&lt;br /&gt;
* [[User:Chimosky|Chihurumnaya Ibiam]] has assumed maintainership tasks.&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]] has system admin privs, but takes care only of OS-level administration.&lt;br /&gt;
* [[User:MrBIOS|Alex Perez]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | User&lt;br /&gt;
|{{Code|weblate}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Home&lt;br /&gt;
|{{Code|/home/weblate/weblate-docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Daemon&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/init.d/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/init.d/docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Logs&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/log/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|docker logs weblate-docker-weblate-1}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Config&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/nginx/sites-enabled/weblate}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/home/weblate/weblate-docker/docker-compose.yml}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Ports&lt;br /&gt;
|&lt;br /&gt;
{{Code|443}} HTTP server&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|8080}} weblate docker container port&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Volumes&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_postgres-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_redis-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-cache}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Upgrade Notes ==&lt;br /&gt;
&lt;br /&gt;
Weblate has [https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container upgrade notes] on upgrading the docker container.&lt;br /&gt;
&lt;br /&gt;
== Maintenance Notes ==&lt;br /&gt;
Weblate is maintained. (ibiam has step-up to be maint)&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
Important files and directories in the root directory, {{Code|/home/weblate/weblate-docker}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;docker-compose.yml&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains definitions for all the services and volumes used by weblate, which includes weblate, database and cache with volumes weblate-cache, weblate-data, postgres-data, redis-data.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;environment&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains environment variables used by container.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
=== Create new Weblate translation component ===&lt;br /&gt;
&lt;br /&gt;
* Create new translation component in Weblate admin menu, &#039;&#039;Add new translation component&#039;&#039;;&lt;br /&gt;
* Select Project, we currently have {{Code|core-sugar}} and {{Code|Sugar-Activities}}, core-sugar contains sugar core APIs.&lt;br /&gt;
* Set version control system to GitHub pull request.&lt;br /&gt;
* Set source code repository link - using https -. &lt;br /&gt;
* Set repository branch.&lt;br /&gt;
* Set File format gettext PO file, File mask po/*.po&lt;br /&gt;
* Set Repository push URL to enable autoupdate of changes to Github from weblate.&lt;br /&gt;
* Set Push branch to weblate-sync which would be used to create a PR. &lt;br /&gt;
* On Github, add hook {{Code|https://weblate.sugarlabs.org/hooks/github/}} to activity repo as it&#039;s used for automated flow of updates to weblate.&lt;br /&gt;
* Check license in activity repo matches Translation license selected by weblate or set to the right license.&lt;br /&gt;
* Add all needed langs; when adding from Github, weblate automatically adds all the PO files and you&#039;ll only need to do this if the only PO file the activity has is the template PO file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t see the uploaded po files after uploading an activity, click the Activity then Manage-&amp;gt;Repository maintenance-&amp;gt;Rescan,&lt;br /&gt;
this will rescan the repo and add all the po files.&lt;br /&gt;
&lt;br /&gt;
== Synchronization ==&lt;br /&gt;
&lt;br /&gt;
Weblate automatically pushes changes to Github when there&#039;s a change on weblate because of the Github pull request version control above and the Github configuration can be found in the &lt;br /&gt;
environment file, the hooks configured in the repos make it easy for weblate to pull changes from Github.&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104102</id>
		<title>Service/Weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104102"/>
		<updated>2023-12-08T11:59:49Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* https://weblate.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/weblate]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* admin AT weblate DOT sugarlabs DOT org&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
For non-emergency calls, preferably send email to the administrative contact.&lt;br /&gt;
&lt;br /&gt;
* [[User:Chimosky|Chihurumnaya Ibiam]] has assumed maintainership tasks.&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]] has system admin privs, but takes care only of OS-level administration.&lt;br /&gt;
* [[User:MrBIOS|Alex Perez]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | User&lt;br /&gt;
|{{Code|weblate}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Home&lt;br /&gt;
|{{Code|/home/weblate/weblate-docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Daemon&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/init.d/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/init.d/docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Logs&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/log/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|docker logs weblate-docker-weblate-1}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Config&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/nginx/sites-enabled/weblate}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/home/weblate/weblate-docker/docker-compose.yml}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Ports&lt;br /&gt;
|&lt;br /&gt;
{{Code|443}} HTTP server&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|8080}} weblate docker container port&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Volumes&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_postgres-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_redis-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-cache}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Upgrade Notes ==&lt;br /&gt;
&lt;br /&gt;
Weblate has [https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container upgrade notes] on upgrading the docker container.&lt;br /&gt;
&lt;br /&gt;
== Maintenance Notes ==&lt;br /&gt;
Weblate is maintained. (ibiam has step-up to be maint)&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
Important files and directories in the root directory, {{Code|/home/weblate/weblate-docker}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;docker-compose.yml&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains definitions for all the services and volumes used by weblate, which includes weblate, database and cache with volumes weblate-cache, weblate-data, postgres-data, redis-data.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;environment&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains environment variables used by container.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
=== Create new Weblate translation component ===&lt;br /&gt;
&lt;br /&gt;
* Create new translation component in Weblate admin menu, &#039;&#039;Add new translation component&#039;&#039;;&lt;br /&gt;
* Select Project, we currently have {{Code|core-sugar}} and {{Code|Sugar-Activities}}, core-sugar contains sugar core APIs.&lt;br /&gt;
* Set version control system to GitHub pull request.&lt;br /&gt;
* Set source code repository link. &lt;br /&gt;
* Set repository branch.&lt;br /&gt;
* Set File format gettext PO file, File mask po/*.po&lt;br /&gt;
* Set Repository push URL to enable autoupdate of changes to Github from weblate.&lt;br /&gt;
* Set Push branch to weblate-sync which would be used to create a PR. &lt;br /&gt;
* On Github, add hook {{Code|https://weblate.sugarlabs.org/hooks/github/}} to activity repo as it&#039;s used for automated flow of updates to weblate.&lt;br /&gt;
* Check license in activity repo matches Translation license selected by weblate or set to the right license.&lt;br /&gt;
* Add all needed langs; when adding from Github, weblate automatically adds all the PO files and you&#039;ll only need to do this if the only PO file the activity has is the template PO file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you don&#039;t see the uploaded po files after uploading an activity, click the Activity then Manage-&amp;gt;Repository maintenance-&amp;gt;Rescan,&lt;br /&gt;
this will rescan the repo and add all the po files.&lt;br /&gt;
&lt;br /&gt;
== Synchronization ==&lt;br /&gt;
&lt;br /&gt;
Weblate automatically pushes changes to Github when there&#039;s a change on weblate because of the Github pull request version control above and the Github configuration can be found in the &lt;br /&gt;
environment file, the hooks configured in the repos make it easy for weblate to pull changes from Github.&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104101</id>
		<title>Service/Weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104101"/>
		<updated>2023-08-19T15:44:12Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* https://weblate.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/weblate]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* admin AT weblate DOT sugarlabs DOT org&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
For non-emergency calls, preferably send email to the administrative contact.&lt;br /&gt;
&lt;br /&gt;
* [[User:Chimosky|Chihurumnaya Ibiam]] has assumed maintainership tasks.&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]] has system admin privs, but takes care only of OS-level administration.&lt;br /&gt;
* [[User:MrBIOS|Alex Perez]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | User&lt;br /&gt;
|{{Code|weblate}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Home&lt;br /&gt;
|{{Code|/home/weblate/weblate-docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Daemon&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/init.d/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/init.d/docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Logs&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/log/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|docker logs weblate-docker-weblate-1}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Config&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/nginx/sites-enabled/weblate}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/home/weblate/weblate-docker/docker-compose.yml}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Ports&lt;br /&gt;
|&lt;br /&gt;
{{Code|443}} HTTP server&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|8080}} weblate docker container port&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Volumes&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_postgres-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_redis-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-cache}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Upgrade Notes ==&lt;br /&gt;
&lt;br /&gt;
Weblate has [https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container upgrade notes] on upgrading the docker container.&lt;br /&gt;
&lt;br /&gt;
== Maintenance Notes ==&lt;br /&gt;
Weblate is maintained. (ibiam has step-up to be maint)&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
Important files and directories in the root directory, {{Code|/home/weblate/weblate-docker}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;docker-compose.yml&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains definitions for all the services and volumes used by weblate, which includes weblate, database and cache with volumes weblate-cache, weblate-data, postgres-data, redis-data.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;environment&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains environment variables used by container.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
=== Create new Weblate translation component ===&lt;br /&gt;
&lt;br /&gt;
* Create new translation component in Weblate admin menu, &#039;&#039;Add new translation component&#039;&#039;;&lt;br /&gt;
* Select Project, we currently have {{Code|core-sugar}} and {{Code|Sugar-Activities}}, core-sugar contains sugar core APIs.&lt;br /&gt;
* Set version control system to GitHub pull request.&lt;br /&gt;
* Set source code repository link - ssh links would be preferred - &lt;br /&gt;
* Set repository branch.&lt;br /&gt;
* Set File format gettext PO file, File mask po/*.po&lt;br /&gt;
* Set Repository push URL to enable autoupdate of changes to Github from weblate.&lt;br /&gt;
* Set Push branch to weblate-sync which would be used to create a PR. &lt;br /&gt;
* On Github, add hook {{Code|https://weblate.sugarlabs.org/hooks/github/}} to activity repo as it&#039;s used for automated flow of updates to weblate.&lt;br /&gt;
* Check license in activity repo matches Translation license selected by weblate or set to the right license.&lt;br /&gt;
* Add all needed langs; when adding from Github, weblate automatically adds all the PO files and you&#039;ll only need to do this if the only PO file the activity has is the template PO file.&lt;br /&gt;
&lt;br /&gt;
== Synchronization ==&lt;br /&gt;
&lt;br /&gt;
Weblate automatically pushes changes to Github when there&#039;s a change on weblate because of the Github pull request version control above and the Github configuration can be found in the &lt;br /&gt;
environment file, the hooks configured in the repos make it easy for weblate to pull changes from Github.&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104100</id>
		<title>Service/Weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/Weblate&amp;diff=104100"/>
		<updated>2023-08-19T15:39:40Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Add weblate service info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* https://weblate.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/weblate]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* admin AT weblate DOT sugarlabs DOT org&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
For non-emergency calls, preferably send email to the administrative contact.&lt;br /&gt;
&lt;br /&gt;
* [[User:Chimosky|Chihurumnaya Ibiam]] has assumed maintainership tasks.&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]] has system admin privs, but takes care only of OS-level administration.&lt;br /&gt;
* [[User:MrBIOS|Alex Perez]]&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | User&lt;br /&gt;
|{{Code|weblate}}&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Home&lt;br /&gt;
|{{Code|/home/weblate/weblate-docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Daemon&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/init.d/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/etc/init.d/docker}}&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Logs&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/log/nginx}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|docker logs weblate-docker-weblate-1}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Config&lt;br /&gt;
|&lt;br /&gt;
{{Code|/etc/nginx/sites-enabled/weblate}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/home/weblate/weblate-docker/docker-compose.yml}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Ports&lt;br /&gt;
|&lt;br /&gt;
{{Code|443}} HTTP server&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|8080}} weblate docker container port&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
!scope=&amp;quot;row&amp;quot; | Volumes&lt;br /&gt;
|&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_postgres-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_redis-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-cache}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{Code|/var/lib/docker/volumes/weblate-docker_weblate-data}}&amp;lt;br&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Upgrade Notes ==&lt;br /&gt;
&lt;br /&gt;
Weblate has [https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container upgrade notes] on upgrading the docker container.&lt;br /&gt;
&lt;br /&gt;
== Maintenance Notes ==&lt;br /&gt;
Weblate is maintained. (ibiam has step-up to be maint)&lt;br /&gt;
&lt;br /&gt;
== Files ==&lt;br /&gt;
Important files and directories in the root directory, {{Code|/home/weblate/weblate-docker}}.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;docker-compose.yml&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains definitions for all the services and volumes used by weblate, which includes weblate, database and cache with volumes weblate-cache, weblate-data, postgres-data, redis-data.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
{{Code|&#039;&#039;&#039;environment&#039;&#039;&#039;}}&amp;lt;br&amp;gt;&lt;br /&gt;
Contains environment variables used by container.&lt;br /&gt;
&lt;br /&gt;
== Tips ==&lt;br /&gt;
&lt;br /&gt;
=== Create new Weblate translation component ===&lt;br /&gt;
&lt;br /&gt;
* Create new translation component in Weblate admin menu, &#039;&#039;Add new translation component&#039;&#039;;&lt;br /&gt;
* Select Project, we currently have {{Code|core-sugar}} and {{Code|Sugar-Activities}}, core-sugar contains sugar core APIs.&lt;br /&gt;
* Set version control system to GitHub pull request.&lt;br /&gt;
* Set source code repository link - ssh links would be preferred - &lt;br /&gt;
* Set repository branch.&lt;br /&gt;
* Set File format gettext PO file, File mask po/*.po&lt;br /&gt;
* Set Repository push URL to enable autoupdate of changes to Github from weblate.&lt;br /&gt;
* Set Push branch to weblate-sync which would be used to create a PR. &lt;br /&gt;
* On Github, add hook {{Code|https://weblate.sugarlabs.org/hooks/github/}} to activity repo as it&#039;s used for automated flow of updates to weblate.&lt;br /&gt;
* Check license in activity repo matches Translation license selected by weblate or set to the right license.&lt;br /&gt;
* Add all needed langs; when adding from Github, weblate automatically adds all the PO files and you&#039;ll only need to do this if the only PO file the activity&lt;br /&gt;
has is the template PO file.&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&lt;br /&gt;
https://docs.weblate.org/en/latest/admin/install/docker.html#upgrading-the-docker-container&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Machine&amp;diff=104099</id>
		<title>Machine</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Machine&amp;diff=104099"/>
		<updated>2023-08-19T14:19:40Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{TeamHeader|Infrastructure Team}}&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Computing hardware or virtual machines maintained by the Sugar Labs [[Infrastructure Team]].&lt;br /&gt;
&lt;br /&gt;
== Physical ==&lt;br /&gt;
&lt;br /&gt;
* [[Machine/justice]]&lt;br /&gt;
* [[Machine/freedom]]&lt;br /&gt;
* [[Machine/bender]]&lt;br /&gt;
* [[Machine/papert]]&lt;br /&gt;
&lt;br /&gt;
== Virtual ==&lt;br /&gt;
&lt;br /&gt;
* [[Machine/lightwave]], with [[Service/Nameservers]],&lt;br /&gt;
* [[Machine/pootle]], with [[Service/translate]], or https://translate.sugarlabs.org,&lt;br /&gt;
* [[Machine/aslo]], with [[Service/activities]] aslo, or https://activities.laptop.org,&lt;br /&gt;
* [[Machine/library]],&lt;br /&gt;
* [[Machine/aslo3]], with [[Service/activities3]] aslo-v3, https://github.com/sugarlabs/aslo-v3,&lt;br /&gt;
* [[Machine/jita]], with [[Service/git]], [[Service/jabber]], [[Service/meeting]], [[Service/obs]], [[Service/chat]], [[Service/cgit]], [[Service/blacklist]], [[Service/stats]],&lt;br /&gt;
* [[Machine/amnesia]],&lt;br /&gt;
* [[Machine/beacon]], &amp;lt;!-- last audited by quozl on 6th november 2018 using `sudo virsh list --all` --&amp;gt;&lt;br /&gt;
* [[Machine/weblate]], with [[Service/Weblate]], or https://weblate.sugarlabs.org,&lt;br /&gt;
&lt;br /&gt;
== Containers ==&lt;br /&gt;
&lt;br /&gt;
* org.sugarlabs.bugs&lt;br /&gt;
* org.sugarlabs.developer-rebuilder&lt;br /&gt;
* org.sugarlabs.www-rebuilder&lt;br /&gt;
* org.sugarlabs.use-socialhelp&lt;br /&gt;
* org.sugarlabs.socialhelp_sso&lt;br /&gt;
* local_discourse/app&lt;br /&gt;
* org.turtleartday.www-rebuilder&lt;br /&gt;
* org.sugarlabs.help-rebuilder&amp;lt;!-- last audited by quozl on 26th november using `docker ps` --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Student Listing ==&lt;br /&gt;
&lt;br /&gt;
This list was made by a GCI 2018 student.&lt;br /&gt;
&lt;br /&gt;
* [[Machine/backup]]&lt;br /&gt;
* [[Machine/bender]]&lt;br /&gt;
* [[Machine/freedom]]&lt;br /&gt;
* [[Machine/jita]]&lt;br /&gt;
* [[Machine/justice]]&lt;br /&gt;
* [[Machine/lightwave]]&lt;br /&gt;
* [[Machine/pootle]]&lt;br /&gt;
* [[Machine/schools]]&lt;br /&gt;
* [[Machine/schoolserver]]&lt;br /&gt;
* [[Machine/trinity]]&lt;br /&gt;
&lt;br /&gt;
== Automatic Listing ==&lt;br /&gt;
&lt;br /&gt;
This list is generated automatically from Wiki pages that have a prefix of &amp;quot;Machine&amp;quot;.  It may contain subpages of machines.  It may contain machines that have been decommissioned; kept as historical data against future need.&lt;br /&gt;
&lt;br /&gt;
{{Special:PrefixIndex/Machine/}}&lt;br /&gt;
&lt;br /&gt;
[[Image:Sugarlabs systems.jpg|frame]]&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Machine/weblate&amp;diff=104098</id>
		<title>Machine/weblate</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Machine/weblate&amp;diff=104098"/>
		<updated>2023-08-19T14:16:12Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Created page with &amp;quot;== Hostnames ==  * https://weblate.sugarlabs.org/  == Services ==  * Service/Weblate  == General Information ==  This machine hosts only Weblate.  == Location ==  KVM virt...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
* https://weblate.sugarlabs.org/&lt;br /&gt;
&lt;br /&gt;
== Services ==&lt;br /&gt;
&lt;br /&gt;
* [[Service/Weblate]]&lt;br /&gt;
&lt;br /&gt;
== General Information ==&lt;br /&gt;
&lt;br /&gt;
This machine hosts only Weblate.&lt;br /&gt;
&lt;br /&gt;
== Location ==&lt;br /&gt;
&lt;br /&gt;
KVM virtual machine hosted on [[Machine/bender]]&lt;br /&gt;
&lt;br /&gt;
== Admins ==&lt;br /&gt;
&lt;br /&gt;
* [[User:Chimosky|Chihurumnaya Ibiam]], Ibiam on [https://matrix.to/#/#sugar-systems:matrix.org #sugar-systems matrix channel] (general weblate admin)&lt;br /&gt;
&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]], Bernie on [https://matrix.to/#/#sugar-systems:matrix.org #sugar-systems matrix channel] (only machine-level issues)&lt;br /&gt;
&lt;br /&gt;
* [[User:MrBIOS|Alex Perez]], MrBIOS on [https://matrix.to/#/#sugar-systems:matrix.org #sugar-systems matrix channel]&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/smtp&amp;diff=104097</id>
		<title>Service/smtp</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/smtp&amp;diff=104097"/>
		<updated>2023-07-30T15:15:43Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
{|class=wikitable&lt;br /&gt;
! hostname           !! service    !! port !! function&lt;br /&gt;
|-&lt;br /&gt;
| smtp.sugarlabs.org || smtp       || 25   || Local delivery (plain SMTP)&lt;br /&gt;
|-&lt;br /&gt;
| smtp.sugarlabs.org || [http://www.faqs.org/rfcs/rfc2476.html submission] || 587  || SMTP with STARTTLS, legacy&lt;br /&gt;
|-&lt;br /&gt;
| smtp.sugarlabs.org || [https://tools.ietf.org/html/rfc6409 submissions]  || 465  || Email relay (SMTP with SSL, password authentication required)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/sunjammer]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* postmaster AT sugarlabs DOT org&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]]&lt;br /&gt;
* (add yourself here if you tend to the postmaster [[Machine/rt|RT]] queue)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
* Users with a Sugar Labs [[Service/shell|shell account]] on [[Machine/sunjammer|sunjammer]] can use our SMTP relay for personal email submission. &#039;&#039;Any abuse will be prosecuted.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The [https://tools.ietf.org/html/rfc6409 submissions] port (465) is preferred for email relay. Unauthenticated and unencrypted connections are not allowed to relay.&lt;br /&gt;
&lt;br /&gt;
* All email originating from the sugarlabs.org domain must be submitted through our SMTP server. &#039;&#039;&#039;Failure to do so may result in your email being blocked by spam filters.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== SPF ==&lt;br /&gt;
&lt;br /&gt;
Our domains use a non-strict (~all) [http://en.wikipedia.org/wiki/Sender_Policy_Framework SPF] records.&lt;br /&gt;
&lt;br /&gt;
You can add an spf record in the zone file in the form&lt;br /&gt;
&lt;br /&gt;
  hostname         TXT     &amp;quot;v=spf1 redirect=_spf.hostname.sugarlabs.org&amp;quot;&lt;br /&gt;
  _spf.hostname    TXT     &amp;quot;v=spf1 ip4:IPv4_of_hostname/mask ip6:IPv6_of_hostname/mask a:hostname.sugarlabs.org mx:hostname.sugarlabs.org ~all&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;a&#039;&#039;&#039; and &#039;&#039;&#039;mx&#039;&#039;&#039; values are authorized mail server by domain name and authorized server by domain MX record, the MX record should also be defined&lt;br /&gt;
for hostname.&lt;br /&gt;
&lt;br /&gt;
Also maintain spacing and formatting for each section you add in the zone file.&lt;br /&gt;
&lt;br /&gt;
== DKIM ==&lt;br /&gt;
&lt;br /&gt;
Our domain publishes a [http://en.wikipedia.org/wiki/DKIM DKIM] key.&lt;br /&gt;
&lt;br /&gt;
To test DKIM, send an email to autorespond+dkim@dk.elandsys.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To generate an ed25519 key to use for DKIM, you can use openssl&lt;br /&gt;
&lt;br /&gt;
  # Generate ed25519 key&lt;br /&gt;
  $ openssl genpkey -algorithm ed25519 -out dkim_private.pem&lt;br /&gt;
  # Generate public key from private key&lt;br /&gt;
  $ openssl pkey -in dkim_private.pem -pubout -out dkim_public.pem&lt;br /&gt;
&lt;br /&gt;
For ed25519 keys, the p value in the DKIM record must only contain the BASE64 encoded public key, without an ASN.1 structure&lt;br /&gt;
&lt;br /&gt;
  $ openssl asn1parse -in dkim_public.pem -offset 12 -noout -out /dev/stdout | openssl base64&lt;br /&gt;
  VGhpcyBpcyBqc3V0ZSBhc29ka2ZvYXNrZWpkZmtsc2pkZgo=&lt;br /&gt;
&lt;br /&gt;
Your entry would look like this&lt;br /&gt;
&lt;br /&gt;
  selector1._domainkey.hostname      TXT     &amp;quot;v=DKIM1; g=*; k=ed25519; p=VGhpcyBpcyBqc3V0ZSBhc29ka2ZvYXNrZWpkZmtsc2pkZgo=&amp;quot;&lt;br /&gt;
  _adsp._domainkey.hostname          TXT     &amp;quot;dkim=unknown&amp;quot;&lt;br /&gt;
&lt;br /&gt;
When using an ed25519 key, you&#039;ll need to add a fallback RSA key for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
  # Generate rsa key&lt;br /&gt;
  $ openssl genrsa -out rsa_private.key 2048&lt;br /&gt;
  # Generate public key from private key&lt;br /&gt;
  $ openssl rsa -in rsa_private.key -pubout -outform der 2&amp;gt;/dev/null | openssl base64 -A&lt;br /&gt;
&lt;br /&gt;
You can then add a KeyTable and SigningTable to your opendkim.conf&lt;br /&gt;
&lt;br /&gt;
  KeyTable                refile:/etc/opendkim/KeyTable&lt;br /&gt;
  SigningTable            refile:/etc/opendkim/SigningTable&lt;br /&gt;
&lt;br /&gt;
  # Contents of KeyTable with both keys&lt;br /&gt;
  selector1._domainkey.hostname.sugarlabs.org hostname.domain-name:selector1:/path/to/selector1/private/*.key&lt;br /&gt;
  selector2._domainkey.hostname.sugarlabs.org hostname.domain-name:selector2:/path/to/selector2/private/*.key&lt;br /&gt;
&lt;br /&gt;
  # Contents of SigningTable&lt;br /&gt;
  *@hostname.domain-name selector1._domainkey.hostname.sugarlabs.org&lt;br /&gt;
  *@hostname.domain-name selector2._domainkey.hostname.sugarlabs.org&lt;br /&gt;
&lt;br /&gt;
Then add a DKIM record for the second selector &lt;br /&gt;
&lt;br /&gt;
  w-mail._domainkey.weblate       IN      TXT     (&amp;quot;v=DKIM1; h=sha256; k=rsa; p=&amp;quot;*&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
The value of p is the public key of the generated RSA key above.&lt;br /&gt;
&lt;br /&gt;
Ensure your private keys are on hostname.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Service/imap]]&lt;br /&gt;
* [[Service/webmail]]&lt;br /&gt;
* [[Service/email]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Service|imap]]&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/smtp&amp;diff=104096</id>
		<title>Service/smtp</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/smtp&amp;diff=104096"/>
		<updated>2023-07-30T15:14:22Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
{|class=wikitable&lt;br /&gt;
! hostname           !! service    !! port !! function&lt;br /&gt;
|-&lt;br /&gt;
| smtp.sugarlabs.org || smtp       || 25   || Local delivery (plain SMTP)&lt;br /&gt;
|-&lt;br /&gt;
| smtp.sugarlabs.org || [http://www.faqs.org/rfcs/rfc2476.html submission] || 587  || SMTP with STARTTLS, legacy&lt;br /&gt;
|-&lt;br /&gt;
| smtp.sugarlabs.org || [https://tools.ietf.org/html/rfc6409 submissions]  || 465  || Email relay (SMTP with SSL, password authentication required)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/sunjammer]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* postmaster AT sugarlabs DOT org&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]]&lt;br /&gt;
* (add yourself here if you tend to the postmaster [[Machine/rt|RT]] queue)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
* Users with a Sugar Labs [[Service/shell|shell account]] on [[Machine/sunjammer|sunjammer]] can use our SMTP relay for personal email submission. &#039;&#039;Any abuse will be prosecuted.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The [https://tools.ietf.org/html/rfc6409 submissions] port (465) is preferred for email relay. Unauthenticated and unencrypted connections are not allowed to relay.&lt;br /&gt;
&lt;br /&gt;
* All email originating from the sugarlabs.org domain must be submitted through our SMTP server. &#039;&#039;&#039;Failure to do so may result in your email being blocked by spam filters.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== SPF ==&lt;br /&gt;
&lt;br /&gt;
Our domains use a non-strict (~all) [http://en.wikipedia.org/wiki/Sender_Policy_Framework SPF] records.&lt;br /&gt;
&lt;br /&gt;
You can add an spf record in the zone file in the form&lt;br /&gt;
&lt;br /&gt;
  hostname         TXT     &amp;quot;v=spf1 redirect=_spf.hostname.sugarlabs.org&amp;quot;&lt;br /&gt;
  _spf.hostname    TXT     &amp;quot;v=spf1 ip4:IPv4_of_hostname/mask ip6:IPv6_of_hostname/mask a:hostname.sugarlabs.org mx:hostname.sugarlabs.org ~all&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;a&#039;&#039;&#039; and &#039;&#039;&#039;mx&#039;&#039;&#039; values are authorized mail server by domain name and authorized server by domain MX record, the MX record should also be defined&lt;br /&gt;
for hostname.&lt;br /&gt;
&lt;br /&gt;
Also maintain spacing and formatting for each section you add in the zone file.&lt;br /&gt;
&lt;br /&gt;
== DKIM ==&lt;br /&gt;
&lt;br /&gt;
Our domain publishes a [http://en.wikipedia.org/wiki/DKIM DKIM] key.&lt;br /&gt;
&lt;br /&gt;
To test DKIM, send an email to autorespond+dkim@dk.elandsys.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To generate an ed25519 key to use for DKIM, you can use openssl&lt;br /&gt;
&lt;br /&gt;
  # Generate ed25519 key&lt;br /&gt;
  $ openssl genpkey -algorithm ed25519 -out dkim_private.pem&lt;br /&gt;
  # Generate public key from private key&lt;br /&gt;
  $ openssl pkey -in dkim_private.pem -pubout -out dkim_public.pem&lt;br /&gt;
&lt;br /&gt;
For ed25519 keys, the p value in the DKIM record must only contain the BASE64 encoded public key, without an ASN.1 structure&lt;br /&gt;
&lt;br /&gt;
  $ openssl asn1parse -in dkim_public.pem -offset 12 -noout -out /dev/stdout | openssl base64&lt;br /&gt;
  VGhpcyBpcyBqc3V0ZSBhc29ka2ZvYXNrZWpkZmtsc2pkZgo=&lt;br /&gt;
&lt;br /&gt;
Your entry would look like this&lt;br /&gt;
&lt;br /&gt;
  selector1._domainkey.hostname      TXT     &amp;quot;v=DKIM1; g=*; k=ed25519; p=VGhpcyBpcyBqc3V0ZSBhc29ka2ZvYXNrZWpkZmtsc2pkZgo=&amp;quot;&lt;br /&gt;
  _adsp._domainkey.hostname          TXT     &amp;quot;dkim=unknown&amp;quot;&lt;br /&gt;
&lt;br /&gt;
When using an ed25519 key, you&#039;ll need to add a fallback RSA key for backward compatibility.&lt;br /&gt;
&lt;br /&gt;
  # Generate rsa key&lt;br /&gt;
  $ openssl genrsa -out rsa_private.key 2048&lt;br /&gt;
  # Generate public key from private key&lt;br /&gt;
  $ openssl rsa -in rsa_private.key -pubout -outform der 2&amp;gt;/dev/null | openssl base64 -A&lt;br /&gt;
&lt;br /&gt;
You can then add a KeyTable and SigningTable to your opendkim.conf&lt;br /&gt;
&lt;br /&gt;
  KeyTable                refile:/etc/opendkim/KeyTable&lt;br /&gt;
  SigningTable            refile:/etc/opendkim/SigningTable&lt;br /&gt;
&lt;br /&gt;
  # Contents of KeyTable with both keys&lt;br /&gt;
  selector1._domainkey.hostname.domain-name hostname.domain-name:selector1:/path/to/selector1/private/*.key&lt;br /&gt;
  selector2._domainkey.hostname.domain-name hostname.domain-name:selector2:/path/to/selector2/private/*.key&lt;br /&gt;
&lt;br /&gt;
  # Contents of SigningTable&lt;br /&gt;
  *@hostname.domain-name selector1._domainkey.hostname.domain-name&lt;br /&gt;
  *@hostname.domain-name selector2._domainkey.hostname.domain-name&lt;br /&gt;
&lt;br /&gt;
Then add a DKIM record for the second selector &lt;br /&gt;
&lt;br /&gt;
  w-mail._domainkey.weblate       IN      TXT     (&amp;quot;v=DKIM1; h=sha256; k=rsa; p=&amp;quot;*&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
The value of p is the public key of the generated RSA key above.&lt;br /&gt;
&lt;br /&gt;
Ensure your private keys are on hostname.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Service/imap]]&lt;br /&gt;
* [[Service/webmail]]&lt;br /&gt;
* [[Service/email]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Service|imap]]&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/smtp&amp;diff=104095</id>
		<title>Service/smtp</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/smtp&amp;diff=104095"/>
		<updated>2023-07-29T13:05:47Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
{|class=wikitable&lt;br /&gt;
! hostname           !! service    !! port !! function&lt;br /&gt;
|-&lt;br /&gt;
| smtp.sugarlabs.org || smtp       || 25   || Local delivery (plain SMTP)&lt;br /&gt;
|-&lt;br /&gt;
| smtp.sugarlabs.org || [http://www.faqs.org/rfcs/rfc2476.html submission] || 587  || SMTP with STARTTLS, legacy&lt;br /&gt;
|-&lt;br /&gt;
| smtp.sugarlabs.org || [https://tools.ietf.org/html/rfc6409 submissions]  || 465  || Email relay (SMTP with SSL, password authentication required)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/sunjammer]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* postmaster AT sugarlabs DOT org&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]]&lt;br /&gt;
* (add yourself here if you tend to the postmaster [[Machine/rt|RT]] queue)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
* Users with a Sugar Labs [[Service/shell|shell account]] on [[Machine/sunjammer|sunjammer]] can use our SMTP relay for personal email submission. &#039;&#039;Any abuse will be prosecuted.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The [https://tools.ietf.org/html/rfc6409 submissions] port (465) is preferred for email relay. Unauthenticated and unencrypted connections are not allowed to relay.&lt;br /&gt;
&lt;br /&gt;
* All email originating from the sugarlabs.org domain must be submitted through our SMTP server. &#039;&#039;&#039;Failure to do so may result in your email being blocked by spam filters.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== SPF ==&lt;br /&gt;
&lt;br /&gt;
Our domains use a non-strict (~all) [http://en.wikipedia.org/wiki/Sender_Policy_Framework SPF] records.&lt;br /&gt;
&lt;br /&gt;
You can add an spf record in the zone file in the form&lt;br /&gt;
&lt;br /&gt;
  hostname         TXT     &amp;quot;v=spf1 redirect=_spf.hostname.sugarlabs.org&amp;quot;&lt;br /&gt;
  _spf.hostname    TXT     &amp;quot;v=spf1 ip4:IPv4_of_hostname/mask ip6:IPv6_of_hostname/mask a:hostname.sugarlabs.org mx:hostname.sugarlabs.org ~all&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;a&#039;&#039;&#039; and &#039;&#039;&#039;mx&#039;&#039;&#039; values are authorized mail server by domain name and authorized server by domain MX record, the MX record should also be defined&lt;br /&gt;
for hostname.&lt;br /&gt;
&lt;br /&gt;
Also maintain spacing and formatting for each section you add in the zone file.&lt;br /&gt;
&lt;br /&gt;
== DKIM ==&lt;br /&gt;
&lt;br /&gt;
Our domain publishes a [http://en.wikipedia.org/wiki/DKIM DKIM] key.&lt;br /&gt;
&lt;br /&gt;
To test DKIM, send an email to autorespond+dkim@dk.elandsys.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To generate an ed25519 key to use for DKIM, you can use openssl&lt;br /&gt;
&lt;br /&gt;
  # Generate ed25519 key&lt;br /&gt;
  $ openssl genpkey -algorithm ed25519 -out dkim_private.pem&lt;br /&gt;
  # Generate public key from private key&lt;br /&gt;
  $ openssl pkey -in dkim_private.pem -pubout -out dkim_public.pem&lt;br /&gt;
&lt;br /&gt;
For ed25519 keys, the p value in the DKIM record must only contain the BASE64 encoded public key, without an ASN.1 structure&lt;br /&gt;
&lt;br /&gt;
  $ openssl asn1parse -in dkim_public.pem -offset 12 -noout -out /dev/stdout | openssl base64&lt;br /&gt;
  VGhpcyBpcyBqc3V0ZSBhc29ka2ZvYXNrZWpkZmtsc2pkZgo=&lt;br /&gt;
&lt;br /&gt;
Your entry would look like this&lt;br /&gt;
&lt;br /&gt;
  default._domainkey.hostname      TXT     &amp;quot;v=DKIM1; g=*; k=ed25519; p=VGhpcyBpcyBqc3V0ZSBhc29ka2ZvYXNrZWpkZmtsc2pkZgo=&amp;quot;&lt;br /&gt;
  _adsp._domainkey.hostname        TXT     &amp;quot;dkim=unknown&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Ensure your private key is on hostname and specify the path to it when using a tool like opendkim - /etc/opendkim.conf -, with&lt;br /&gt;
the user and group of the key set to opendkim.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Service/imap]]&lt;br /&gt;
* [[Service/webmail]]&lt;br /&gt;
* [[Service/email]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Service|imap]]&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
	<entry>
		<id>https://wiki.sugarlabs.org/index.php?title=Service/smtp&amp;diff=104094</id>
		<title>Service/smtp</title>
		<link rel="alternate" type="text/html" href="https://wiki.sugarlabs.org/index.php?title=Service/smtp&amp;diff=104094"/>
		<updated>2023-07-29T12:51:53Z</updated>

		<summary type="html">&lt;p&gt;Chimosky: Make a and m bold.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Hostnames ==&lt;br /&gt;
&lt;br /&gt;
{|class=wikitable&lt;br /&gt;
! hostname           !! service    !! port !! function&lt;br /&gt;
|-&lt;br /&gt;
| smtp.sugarlabs.org || smtp       || 25   || Local delivery (plain SMTP)&lt;br /&gt;
|-&lt;br /&gt;
| smtp.sugarlabs.org || [http://www.faqs.org/rfcs/rfc2476.html submission] || 587  || SMTP with STARTTLS, legacy&lt;br /&gt;
|-&lt;br /&gt;
| smtp.sugarlabs.org || [https://tools.ietf.org/html/rfc6409 submissions]  || 465  || Email relay (SMTP with SSL, password authentication required)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Hosted on ==&lt;br /&gt;
&lt;br /&gt;
[[Machine/sunjammer]]&lt;br /&gt;
&lt;br /&gt;
== Administrative contact ==&lt;br /&gt;
&lt;br /&gt;
* postmaster AT sugarlabs DOT org&lt;br /&gt;
&lt;br /&gt;
== Sysadmins ==&lt;br /&gt;
&lt;br /&gt;
* [[User:Bernie|Bernie Innocenti]]&lt;br /&gt;
* (add yourself here if you tend to the postmaster [[Machine/rt|RT]] queue)&lt;br /&gt;
&lt;br /&gt;
== Notes ==&lt;br /&gt;
&lt;br /&gt;
* Users with a Sugar Labs [[Service/shell|shell account]] on [[Machine/sunjammer|sunjammer]] can use our SMTP relay for personal email submission. &#039;&#039;Any abuse will be prosecuted.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* The [https://tools.ietf.org/html/rfc6409 submissions] port (465) is preferred for email relay. Unauthenticated and unencrypted connections are not allowed to relay.&lt;br /&gt;
&lt;br /&gt;
* All email originating from the sugarlabs.org domain must be submitted through our SMTP server. &#039;&#039;&#039;Failure to do so may result in your email being blocked by spam filters.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== SPF ==&lt;br /&gt;
&lt;br /&gt;
Our domains use a non-strict (~all) [http://en.wikipedia.org/wiki/Sender_Policy_Framework SPF] records.&lt;br /&gt;
&lt;br /&gt;
You can add an spf record in the zone file in the form&lt;br /&gt;
&lt;br /&gt;
  hostname         TXT     &amp;quot;v=spf1 redirect=_spf.hostname.sugarlabs.org&amp;quot;&lt;br /&gt;
  _spf.hostname    TXT     &amp;quot;v=spf1 ip4:IPv4_of_hostname/mask ip6:IPv6_of_hostname/mask a:hostname.sugarlabs.org mx:hostname.sugarlabs.org ~all&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;a&#039;&#039;&#039; and &#039;&#039;&#039;mx&#039;&#039;&#039; values are authorized mail server by domain name and authorized server by domain MX record, the MX record should also be defined&lt;br /&gt;
for hostname.&lt;br /&gt;
&lt;br /&gt;
Also maintain spacing and formatting for each section you add in the zone file.&lt;br /&gt;
&lt;br /&gt;
== DKIM ==&lt;br /&gt;
&lt;br /&gt;
Our domain publishes a [http://en.wikipedia.org/wiki/DKIM DKIM] key.&lt;br /&gt;
&lt;br /&gt;
To test DKIM, send an email to autorespond+dkim@dk.elandsys.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To generate an ed25519 key to use for DKIM, you can use openssl&lt;br /&gt;
&lt;br /&gt;
  # Generate ed25519 key&lt;br /&gt;
  $ openssl genpkey -algorithm ed25519 -out dkim_private.pem&lt;br /&gt;
  # Generate public key from private key&lt;br /&gt;
  $ openssl pkey -in dkim_private.pem -pubout -out dkim_public.pem&lt;br /&gt;
&lt;br /&gt;
For ed25519 keys, the p value in the DKIM record must only contain the BASE64 encoded public key, without an ASN.1 structure&lt;br /&gt;
&lt;br /&gt;
  $ openssl asn1parse -in dkim_public.pem -offset 12 -noout -out /dev/stdout | openssl base64&lt;br /&gt;
  VGhpcyBpcyBqc3V0ZSBhc29ka2ZvYXNrZWpkZmtsc2pkZgo=&lt;br /&gt;
&lt;br /&gt;
Your entry would look like this&lt;br /&gt;
&lt;br /&gt;
  default._domainkey.hostname      TXT     &amp;quot;v=DKIM1; g=*; k=ed25519; p=VGhpcyBpcyBqc3V0ZSBhc29ka2ZvYXNrZWpkZmtsc2pkZgo=&amp;quot;&lt;br /&gt;
  _adsp._domainkey.hostname        TXT     &amp;quot;dkim=unknown&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Ensure your private key is on hostname and specify the path to it when using a tool like opendkim - /etc/opendkim.conf -, with&lt;br /&gt;
the user and group of the key being opendkim.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Service/imap]]&lt;br /&gt;
* [[Service/webmail]]&lt;br /&gt;
* [[Service/email]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Service|imap]]&lt;/div&gt;</summary>
		<author><name>Chimosky</name></author>
	</entry>
</feed>