[tor-commits] [tor-browser-build/master] Bug 30558: Optionally enable Namecoin

gk at torproject.org gk at torproject.org
Wed Dec 18 14:19:36 UTC 2019


commit dc1fa8a4b18468440e589c685eafb266211595dc
Author: JeremyRand <jeremyrand at airmail.cc>
Date:   Wed Dec 18 13:50:27 2019 +0000

    Bug 30558: Optionally enable Namecoin
    
    Namecoin will be enabled if all the following are true:
    
    * rbm var/namecoin is set to 1 at build time
        * This is true for nightly on linux only
    * env var TOR_ENABLE_NAMECOIN=1 is set at run-time
---
 projects/aiohttp/build                             |  14 ++
 projects/aiohttp/config                            |  11 ++
 projects/aiohttp_socks/build                       |  14 ++
 projects/aiohttp_socks/config                      |  11 ++
 projects/aiorpcx/build                             |  14 ++
 projects/aiorpcx/config                            |  11 ++
 projects/async_timeout/build                       |  14 ++
 projects/async_timeout/config                      |  11 ++
 projects/attr/build                                |  14 ++
 projects/attr/config                               |  11 ++
 projects/certifi/build                             |  16 ++
 projects/certifi/config                            |  13 ++
 projects/certifi/roots_of_top_10_issuers.pem       | 217 +++++++++++++++++++++
 projects/chardet/build                             |  14 ++
 projects/chardet/config                            |  11 ++
 projects/dns/build                                 |  17 ++
 projects/dns/config                                |  11 ++
 projects/ecdsa/build                               |  14 ++
 projects/ecdsa/config                              |  11 ++
 projects/electrum-nmc/build                        |  42 ++++
 projects/electrum-nmc/config                       |  48 +++++
 projects/firefox/build                             |  10 +
 projects/firefox/config                            |   5 +
 projects/firefox/namecoin-etld.patch               |  25 +++
 projects/firefox/namecoin-torbutton.patch          | 105 ++++++++++
 projects/goansicolor/config                        |  16 ++
 projects/gobtcd/config                             |  32 +++
 projects/gobtcd2/config                            |  32 +++
 projects/gobtclog/config                           |  16 ++
 projects/gobtcutil/config                          |  23 +++
 projects/gobuildinfo/config                        |  31 +++
 projects/goconfigurable/config                     |  16 ++
 projects/godegoutils/config                        |  22 +++
 projects/godexlogconfig/config                     |  40 ++++
 projects/godns/config                              |  26 +++
 projects/goeasyconfig/config                       |  35 ++++
 projects/gogroupcache/config                       |  18 ++
 projects/goisatty/config                           |  20 ++
 projects/gokingpin/config                          |  23 +++
 projects/gomadns/config                            |  40 ++++
 projects/goncbtcjson/config                        |  20 ++
 projects/goncrpcclient/config                      |  23 +++
 projects/gopflag/config                            |  16 ++
 projects/gopretty/config                           |  20 ++
 projects/goservice/config                          |  44 +++++
 projects/gosocks/config                            |  18 ++
 projects/gosvcutils/config                         |  47 +++++
 projects/gosystemd/config                          |  29 +++
 projects/gotemplate/config                         |  16 ++
 projects/gotext/config                             |  16 ++
 projects/gotoml/config                             |  16 ++
 projects/gounits/config                            |  16 ++
 projects/gowebsocket/config                        |  16 ++
 projects/goxcryptoed25519/config                   |  19 ++
 projects/goxcryptoripemd160/config                 |  19 ++
 projects/goxlog/config                             |  23 +++
 projects/goxnetip/config                           |  24 +++
 projects/goxsysunix/config                         |  19 ++
 projects/idna/build                                |  14 ++
 projects/idna/config                               |  11 ++
 projects/idna_ssl/build                            |  14 ++
 projects/idna_ssl/config                           |  11 ++
 projects/jsonrpclib/build                          |  14 ++
 projects/jsonrpclib/config                         |  11 ++
 projects/multidict/build                           |  14 ++
 projects/multidict/config                          |  11 ++
 projects/ncdns/build                               |  31 +++
 projects/ncdns/config                              |  82 ++++++++
 projects/ncprop279/build                           |  32 +++
 projects/ncprop279/config                          |  32 +++
 projects/pyaes/build                               |  14 ++
 projects/pyaes/config                              |  11 ++
 projects/six/build                                 |  14 ++
 projects/six/config                                |  11 ++
 projects/stemns/build                              |  25 +++
 projects/stemns/config                             |  17 ++
 projects/stemns/settings_port.py                   |   1 +
 projects/stemns/settings_services.py               |   4 +
 .../Bundle-Data/linux/Data/Electrum-NMC/config     |   6 +
 .../linux/Data/ncprop279/ncprop279.conf            |  12 ++
 projects/tor-browser/build                         |  25 ++-
 projects/tor-browser/config                        |  12 ++
 projects/tor-browser/namecoin.patch                |  83 ++++++++
 projects/typing_extensions/build                   |  14 ++
 projects/typing_extensions/config                  |  11 ++
 projects/yarl/build                                |  14 ++
 projects/yarl/config                               |  11 ++
 rbm.conf                                           |   5 +
 88 files changed, 2041 insertions(+), 1 deletion(-)

diff --git a/projects/aiohttp/build b/projects/aiohttp/build
new file mode 100644
index 0000000..e0f9400
--- /dev/null
+++ b/projects/aiohttp/build
@@ -0,0 +1,14 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+
+tar xvf [% project %]-[% c('version') %].tar.gz
+
+mkdir -p /var/tmp/dist/[% project %]
+cd /var/tmp/dist/
+
+cp -a $rootdir/[% project %]*/[% project %]/*.py ./[% project %]/
+
+[% c('tar', {
+        tar_src => '.',
+        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+        }) %]
diff --git a/projects/aiohttp/config b/projects/aiohttp/config
new file mode 100644
index 0000000..79f8f64
--- /dev/null
+++ b/projects/aiohttp/config
@@ -0,0 +1,11 @@
+# vim: filetype=yaml sw=2
+version: 3.5.4
+git_url: https://github.com/aio-libs/aiohttp.git
+git_hash: f6f647eb828fa738610d61481f11fa51e42599e9
+# TODO: This Git repo doesn't use GPG sigs.  We should pester them about that.
+filename: "[% project %]-[% c('version') %]-[% c('var/build_id') %].tar.gz"
+var:
+  container:
+    use_container: 1
+input_files:
+  - project: container-image
diff --git a/projects/aiohttp_socks/build b/projects/aiohttp_socks/build
new file mode 100644
index 0000000..0747718
--- /dev/null
+++ b/projects/aiohttp_socks/build
@@ -0,0 +1,14 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+
+tar xvf [% project %]-[% c('version') %].tar.gz
+
+mkdir -p /var/tmp/dist/
+cd /var/tmp/dist/
+
+cp -a $rootdir/[% project %]*/[% project %] ./[% project %]
+
+[% c('tar', {
+        tar_src => '.',
+        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+        }) %]
diff --git a/projects/aiohttp_socks/config b/projects/aiohttp_socks/config
new file mode 100644
index 0000000..3e24f2f
--- /dev/null
+++ b/projects/aiohttp_socks/config
@@ -0,0 +1,11 @@
+# vim: filetype=yaml sw=2
+version: 0.2.2
+git_url: https://github.com/romis2012/aiohttp-socks.git
+git_hash: 3252f4bdd37fb9a7360481977f800189cb3e3aca
+# TODO: This Git repo doesn't use GPG sigs.  We should pester them about that.
+filename: "[% project %]-[% c('version') %]-[% c('var/build_id') %].tar.gz"
+var:
+  container:
+    use_container: 1
+input_files:
+  - project: container-image
diff --git a/projects/aiorpcx/build b/projects/aiorpcx/build
new file mode 100644
index 0000000..0747718
--- /dev/null
+++ b/projects/aiorpcx/build
@@ -0,0 +1,14 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+
+tar xvf [% project %]-[% c('version') %].tar.gz
+
+mkdir -p /var/tmp/dist/
+cd /var/tmp/dist/
+
+cp -a $rootdir/[% project %]*/[% project %] ./[% project %]
+
+[% c('tar', {
+        tar_src => '.',
+        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+        }) %]
diff --git a/projects/aiorpcx/config b/projects/aiorpcx/config
new file mode 100644
index 0000000..fd8eb5a
--- /dev/null
+++ b/projects/aiorpcx/config
@@ -0,0 +1,11 @@
+# vim: filetype=yaml sw=2
+version: 0.18.3
+git_url: https://github.com/kyuupichan/aiorpcX.git
+git_hash: 4f39366e5dee3fd0a857e53f383c628807cd2715
+# TODO: This Git repo doesn't use GPG sigs.  We should pester them about that.
+filename: "[% project %]-[% c('version') %]-[% c('var/build_id') %].tar.gz"
+var:
+  container:
+    use_container: 1
+input_files:
+  - project: container-image
diff --git a/projects/async_timeout/build b/projects/async_timeout/build
new file mode 100644
index 0000000..e0f9400
--- /dev/null
+++ b/projects/async_timeout/build
@@ -0,0 +1,14 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+
+tar xvf [% project %]-[% c('version') %].tar.gz
+
+mkdir -p /var/tmp/dist/[% project %]
+cd /var/tmp/dist/
+
+cp -a $rootdir/[% project %]*/[% project %]/*.py ./[% project %]/
+
+[% c('tar', {
+        tar_src => '.',
+        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+        }) %]
diff --git a/projects/async_timeout/config b/projects/async_timeout/config
new file mode 100644
index 0000000..1e0faa7
--- /dev/null
+++ b/projects/async_timeout/config
@@ -0,0 +1,11 @@
+# vim: filetype=yaml sw=2
+version: 3.0.1
+git_url: https://github.com/aio-libs/async-timeout.git
+git_hash: 992fd174a5282258228b74127914f4b8135bf30a
+# TODO: This Git repo doesn't use GPG sigs.  We should pester them about that.
+filename: "[% project %]-[% c('version') %]-[% c('var/build_id') %].tar.gz"
+var:
+  container:
+    use_container: 1
+input_files:
+  - project: container-image
diff --git a/projects/attr/build b/projects/attr/build
new file mode 100644
index 0000000..296b5f4
--- /dev/null
+++ b/projects/attr/build
@@ -0,0 +1,14 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+
+tar xvf [% project %]-[% c('version') %].tar.gz
+
+mkdir -p /var/tmp/dist/[% project %]
+cd /var/tmp/dist/
+
+cp -a $rootdir/[% project %]*/src/[% project %]/*.py ./[% project %]
+
+[% c('tar', {
+        tar_src => '.',
+        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+        }) %]
diff --git a/projects/attr/config b/projects/attr/config
new file mode 100644
index 0000000..bf62203
--- /dev/null
+++ b/projects/attr/config
@@ -0,0 +1,11 @@
+# vim: filetype=yaml sw=2
+version: 19.1.0
+git_url: https://github.com/python-attrs/attrs.git
+git_hash: 0356f0603eb5d8d4e7bae132ab80847fff4abcfc
+# TODO: This Git repo uses GPG sigs; we should switch from commit hash to GPG verification.
+filename: "[% project %]-[% c('version') %]-[% c('var/build_id') %].tar.gz"
+var:
+  container:
+    use_container: 1
+input_files:
+  - project: container-image
diff --git a/projects/certifi/build b/projects/certifi/build
new file mode 100644
index 0000000..7531001
--- /dev/null
+++ b/projects/certifi/build
@@ -0,0 +1,16 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+
+tar xvf [% project %]-[% c('version') %].tar.gz
+
+mkdir -p /var/tmp/dist/
+cd /var/tmp/dist/
+
+cp -a $rootdir/[% project %]*/[% project %] ./[% project %]
+
+cp $rootdir/roots_of_top_10_issuers.pem ./[% project %]/cacert.pem
+
+[% c('tar', {
+        tar_src => '.',
+        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+        }) %]
diff --git a/projects/certifi/config b/projects/certifi/config
new file mode 100644
index 0000000..cd1120d
--- /dev/null
+++ b/projects/certifi/config
@@ -0,0 +1,13 @@
+# vim: filetype=yaml sw=2
+version: 2019.3.9
+filename: "[% project %]-[% c('version') %]-[% c('var/build_id') %].tar.gz"
+var:
+  container:
+    use_container: 1
+
+input_files:
+  - project: container-image
+  - URL: https://files.pythonhosted.org/packages/source/c/certifi/certifi-[% c("version") %].tar.gz
+    sha256sum: b26104d6835d1f5e49452a26eb2ff87fe7090b89dfcaee5ea2212697e1e1d7ae
+    # TODO: This package uses GPG sigs; we should switch from SHA256 hash to GPG verification.
+  - filename: roots_of_top_10_issuers.pem
diff --git a/projects/certifi/roots_of_top_10_issuers.pem b/projects/certifi/roots_of_top_10_issuers.pem
new file mode 100644
index 0000000..2d53dd8
--- /dev/null
+++ b/projects/certifi/roots_of_top_10_issuers.pem
@@ -0,0 +1,217 @@
+# This file contains the root CA's used by the top 10 HTTPS cert issuers for
+# the Alexa Top 1 Million as of February 2019, according to Scott Helme's HTTPS
+# issuer list and crt.sh's root CA database.  Each root CA is copied verbatim
+# from cacert.pem from certifi-2019.3.9.
+
+# Issuer: CN=DST Root CA X3 O=Digital Signature Trust Co.
+# Subject: CN=DST Root CA X3 O=Digital Signature Trust Co.
+# Label: "DST Root CA X3"
+# Serial: 91299735575339953335919266965803778155
+# MD5 Fingerprint: 41:03:52:dc:0f:f7:50:1b:16:f0:02:8e:ba:6f:45:c5
+# SHA1 Fingerprint: da:c9:02:4f:54:d8:f6:df:94:93:5f:b1:73:26:38:ca:6a:d7:7c:13
+# SHA256 Fingerprint: 06:87:26:03:31:a7:24:03:d9:09:f1:05:e6:9b:cf:0d:32:e1:bd:24:93:ff:c6:d9:20:6d:11:bc:d6:77:07:39
+-----BEGIN CERTIFICATE-----
+MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
+MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
+DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow
+PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
+Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
+AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O
+rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq
+OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b
+xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw
+7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD
+aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
+HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG
+SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69
+ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
+AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
+R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
+JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
+Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
+-----END CERTIFICATE-----
+
+# Issuer: CN=COMODO RSA Certification Authority O=COMODO CA Limited
+# Subject: CN=COMODO RSA Certification Authority O=COMODO CA Limited
+# Label: "COMODO RSA Certification Authority"
+# Serial: 101909084537582093308941363524873193117
+# MD5 Fingerprint: 1b:31:b0:71:40:36:cc:14:36:91:ad:c4:3e:fd:ec:18
+# SHA1 Fingerprint: af:e5:d2:44:a8:d1:19:42:30:ff:47:9f:e2:f8:97:bb:cd:7a:8c:b4
+# SHA256 Fingerprint: 52:f0:e1:c4:e5:8e:c6:29:29:1b:60:31:7f:07:46:71:b8:5d:7e:a8:0d:5b:07:27:34:63:53:4b:32:b4:02:34
+-----BEGIN CERTIFICATE-----
+MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCB
+hTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
+A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNV
+BAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMTAwMTE5
+MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgT
+EkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
+Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNh
+dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR
+6FSS0gpWsawNJN3Fz0RndJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8X
+pz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZFGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC
+9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+5eNu/Nio5JIk2kNrYrhV
+/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pGx8cgoLEf
+Zd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z
++pUX2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7w
+qP/0uK3pN/u6uPQLOvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZah
+SL0896+1DSJMwBGB7FY79tOi4lu3sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVIC
+u9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+CGCe01a60y1Dma/RMhnEw6abf
+Fobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5WdYgGq/yapiq
+crxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E
+FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB
+/wQFMAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvl
+wFTPoCWOAvn9sKIN9SCYPBMtrFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM
+4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+nq6PK7o9mfjYcwlYRm6mnPTXJ9OV
+2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSgtZx8jb8uk2Intzna
+FxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwWsRqZ
+CuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiK
+boHGhfKppC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmcke
+jkk9u+UJueBPSZI9FoJAzMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yL
+S0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHqZJx64SIDqZxubw5lT2yHh17zbqD5daWb
+QOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk527RH89elWsn2/x20Kk4yl
+0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7ILaZRfyHB
+NVOFBkpdn627G190
+-----END CERTIFICATE-----
+
+# Issuer: CN=COMODO ECC Certification Authority O=COMODO CA Limited
+# Subject: CN=COMODO ECC Certification Authority O=COMODO CA Limited
+# Label: "COMODO ECC Certification Authority"
+# Serial: 41578283867086692638256921589707938090
+# MD5 Fingerprint: 7c:62:ff:74:9d:31:53:5e:68:4a:d5:78:aa:1e:bf:23
+# SHA1 Fingerprint: 9f:74:4e:9f:2b:4d:ba:ec:0f:31:2c:50:b6:56:3b:8e:2d:93:c3:11
+# SHA256 Fingerprint: 17:93:92:7a:06:14:54:97:89:ad:ce:2f:8f:34:f7:f0:b6:6d:0f:3a:e3:a3:b8:4d:21:ec:15:db:ba:4f:ad:c7
+-----BEGIN CERTIFICATE-----
+MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL
+MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
+BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT
+IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw
+MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy
+ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N
+T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv
+biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR
+FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J
+cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW
+BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
+BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm
+fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv
+GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
+-----END CERTIFICATE-----
+
+# Issuer: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc.
+# Subject: CN=Go Daddy Root Certificate Authority - G2 O=GoDaddy.com, Inc.
+# Label: "Go Daddy Root Certificate Authority - G2"
+# Serial: 0
+# MD5 Fingerprint: 80:3a:bc:22:c1:e6:fb:8d:9b:3b:27:4a:32:1b:9a:01
+# SHA1 Fingerprint: 47:be:ab:c9:22:ea:e8:0e:78:78:34:62:a7:9f:45:c2:54:fd:e6:8b
+# SHA256 Fingerprint: 45:14:0b:32:47:eb:9c:c8:c5:b4:f0:d7:b5:30:91:f7:32:92:08:9e:6e:5a:63:e2:74:9d:d3:ac:a9:19:8e:da
+-----BEGIN CERTIFICATE-----
+MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx
+EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT
+EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp
+ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz
+NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH
+EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE
+AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD
+E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH
+/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy
+DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh
+GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR
+tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA
+AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
+FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX
+WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu
+9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr
+gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo
+2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
+LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI
+4uJEvlz36hz1
+-----END CERTIFICATE-----
+
+# Issuer: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust
+# Subject: CN=Baltimore CyberTrust Root O=Baltimore OU=CyberTrust
+# Label: "Baltimore CyberTrust Root"
+# Serial: 33554617
+# MD5 Fingerprint: ac:b6:94:a5:9c:17:e0:d7:91:52:9b:b1:97:06:a6:e4
+# SHA1 Fingerprint: d4:de:20:d0:5e:66:fc:53:fe:1a:50:88:2c:78:db:28:52:ca:e4:74
+# SHA256 Fingerprint: 16:af:57:a9:f6:76:b0:ab:12:60:95:aa:5e:ba:de:f2:2a:b3:11:19:d6:44:ac:95:cd:4b:93:db:f3:f2:6a:eb
+-----BEGIN CERTIFICATE-----
+MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
+RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
+VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
+DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
+ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
+VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
+mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
+IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
+mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
+XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
+dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
+jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
+BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
+DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
+9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
+jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
+Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
+ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
+R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
+-----END CERTIFICATE-----
+
+# Issuer: CN=Amazon Root CA 1 O=Amazon
+# Subject: CN=Amazon Root CA 1 O=Amazon
+# Label: "Amazon Root CA 1"
+# Serial: 143266978916655856878034712317230054538369994
+# MD5 Fingerprint: 43:c6:bf:ae:ec:fe:ad:2f:18:c6:88:68:30:fc:c8:e6
+# SHA1 Fingerprint: 8d:a7:f9:65:ec:5e:fc:37:91:0f:1c:6e:59:fd:c1:cc:6a:6e:de:16
+# SHA256 Fingerprint: 8e:cd:e6:88:4f:3d:87:b1:12:5b:a3:1a:c3:fc:b1:3d:70:16:de:7f:57:cc:90:4f:e1:cb:97:c6:ae:98:19:6e
+-----BEGIN CERTIFICATE-----
+MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF
+ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6
+b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL
+MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv
+b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj
+ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM
+9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw
+IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6
+VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L
+93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm
+jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
+AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA
+A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI
+U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs
+N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv
+o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU
+5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy
+rqXRfboQnoZsG4q5WTP468SQvvG5
+-----END CERTIFICATE-----
+
+# Issuer: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com
+# Subject: CN=DigiCert Global Root CA O=DigiCert Inc OU=www.digicert.com
+# Label: "DigiCert Global Root CA"
+# Serial: 10944719598952040374951832963794454346
+# MD5 Fingerprint: 79:e4:a9:84:0d:7d:3a:96:d7:c0:4f:e2:43:4c:89:2e
+# SHA1 Fingerprint: a8:98:5d:3a:65:e5:e5:c4:b2:d7:d6:6d:40:c6:dd:2f:b1:9c:54:36
+# SHA256 Fingerprint: 43:48:a0:e9:44:4c:78:cb:26:5e:05:8d:5e:89:44:b4:d8:4f:96:62:bd:26:db:25:7f:89:34:a4:43:c7:01:61
+-----BEGIN CERTIFICATE-----
+MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
+MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
+d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
+QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
+MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
+b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
+9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
+CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
+nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
+43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
+T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
+gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
+BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
+TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
+DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
+hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
+06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
+PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
+YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
+CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
+-----END CERTIFICATE-----
+
diff --git a/projects/chardet/build b/projects/chardet/build
new file mode 100644
index 0000000..0747718
--- /dev/null
+++ b/projects/chardet/build
@@ -0,0 +1,14 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+
+tar xvf [% project %]-[% c('version') %].tar.gz
+
+mkdir -p /var/tmp/dist/
+cd /var/tmp/dist/
+
+cp -a $rootdir/[% project %]*/[% project %] ./[% project %]
+
+[% c('tar', {
+        tar_src => '.',
+        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+        }) %]
diff --git a/projects/chardet/config b/projects/chardet/config
new file mode 100644
index 0000000..94884fb
--- /dev/null
+++ b/projects/chardet/config
@@ -0,0 +1,11 @@
+# vim: filetype=yaml sw=2
+version: 3.0.4
+git_url: https://github.com/chardet/chardet.git
+git_hash: 9b8c5c2fb118d76c6beeab9affd01c332732a530
+# TODO: This Git repo doesn't use GPG sigs.  We should pester them about that.
+filename: "[% project %]-[% c('version') %]-[% c('var/build_id') %].tar.gz"
+var:
+  container:
+    use_container: 1
+input_files:
+  - project: container-image
diff --git a/projects/dns/build b/projects/dns/build
new file mode 100644
index 0000000..c610ada
--- /dev/null
+++ b/projects/dns/build
@@ -0,0 +1,17 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+
+shopt -s globstar
+
+unzip dnspython-[% c('version') %].zip
+
+mkdir -p /var/tmp/dist/[% project %]
+
+cd $rootdir/dnspython*/[% project %]
+cp --parents **/*.py /var/tmp/dist/[% project %]/
+
+cd /var/tmp/dist/
+[% c('tar', {
+        tar_src => '.',
+        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+        }) %]
diff --git a/projects/dns/config b/projects/dns/config
new file mode 100644
index 0000000..e18fc85
--- /dev/null
+++ b/projects/dns/config
@@ -0,0 +1,11 @@
+# vim: filetype=yaml sw=2
+version: 1.16.0
+filename: "[% project %]-[% c('version') %]-[% c('var/build_id') %].tar.gz"
+var:
+  container:
+    use_container: 1
+input_files:
+  - project: container-image
+  - URL: https://files.pythonhosted.org/packages/source/d/dnspython/dnspython-[% c("version") %].zip
+    sha256sum: 36c5e8e38d4369a08b6780b7f27d790a292b2b08eea01607865bf0936c558e01
+    # TODO: This package uses GPG sigs; we should switch from SHA256 hash to GPG verification.
diff --git a/projects/ecdsa/build b/projects/ecdsa/build
new file mode 100644
index 0000000..0747718
--- /dev/null
+++ b/projects/ecdsa/build
@@ -0,0 +1,14 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+
+tar xvf [% project %]-[% c('version') %].tar.gz
+
+mkdir -p /var/tmp/dist/
+cd /var/tmp/dist/
+
+cp -a $rootdir/[% project %]*/[% project %] ./[% project %]
+
+[% c('tar', {
+        tar_src => '.',
+        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+        }) %]
diff --git a/projects/ecdsa/config b/projects/ecdsa/config
new file mode 100644
index 0000000..e4ee567
--- /dev/null
+++ b/projects/ecdsa/config
@@ -0,0 +1,11 @@
+# vim: filetype=yaml sw=2
+version: 0.13.2
+git_url: https://github.com/warner/python-ecdsa.git
+git_hash: bb359d32e93acc3eb4d216aff4ba0e7531599cfb
+# TODO: This Git repo doesn't use GPG sigs.  We should pester them about that.
+filename: "[% project %]-[% c('version') %]-[% c('var/build_id') %].tar.gz"
+var:
+  container:
+    use_container: 1
+input_files:
+  - project: container-image
diff --git a/projects/electrum-nmc/build b/projects/electrum-nmc/build
new file mode 100644
index 0000000..8371744
--- /dev/null
+++ b/projects/electrum-nmc/build
@@ -0,0 +1,42 @@
+#!/bin/sh
+[% c("var/set_default_env") -%]
+mkdir -p /var/tmp/build/[% project %]
+tar -C /var/tmp/build/[% project %] -xf [% project %]-[% c("version") %].tar.gz
+
+cd /var/tmp/build/[% project %]/[% project %]-*
+
+mkdir packages
+cd packages
+
+[% FOREACH dep = ['aiohttp', 'aiohttp_socks', 'aiorpcx', 'async_timeout', 'attr', 'certifi', 'chardet', 'dns', 'ecdsa', 'idna', 'idna_ssl', 'jsonrpclib', 'multidict', 'pyaes', 'six', 'typing_extensions', 'yarl'] -%]
+  tar -C . -xf $rootdir/[% c('input_files_by_name/' _ dep) %]
+[% END -%]
+
+mkdir -p /var/tmp/dist/
+cd /var/tmp/dist/
+
+cp -a /var/tmp/build/[% project %]/[% project %]* ./Electrum-NMC
+
+cd ./Electrum-NMC
+# Remove GUI, since it's not used in Tor Browser.
+rm -r electrum_nmc/electrum/gui/
+# Remove plugins, since they're not used in Tor Browser.
+rm -r electrum_nmc/electrum/plugins/*/
+# Remove wallet functionality, since it's not used in Tor Browser.
+mv electrum_nmc/electrum/null_impl/null_wallet/*.py electrum_nmc/electrum/
+rm -r electrum_nmc/electrum/null_impl/
+# Remove some other files that aren't needed.  We have to leave
+# electrum-nmc.desktop there, because it's used in run_electrum_nmc's is_local
+# detection.
+rm -r .git*
+rm -r .travis*
+rm -r contrib/
+rm -r electrum_nmc/electrum/tests/
+rm -r pubkeys
+rm -r tox.ini
+cd ../
+
+[% c('tar', {
+        tar_src => '.',
+        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+        }) %]
diff --git a/projects/electrum-nmc/config b/projects/electrum-nmc/config
new file mode 100644
index 0000000..57cabe5
--- /dev/null
+++ b/projects/electrum-nmc/config
@@ -0,0 +1,48 @@
+# vim: filetype=yaml sw=2
+filename: 'Electrum-NMC-[% c("version") %]-[% c("var/build_id") %].tar.gz'
+version: 3.3.8
+git_url: https://github.com/namecoin/electrum-nmc.git
+# Note: this Git hash has a couple of fixes on top of the 3.3.8 tag, which
+# aren't yet in a release tag.
+git_hash: 74b87da8f2ddbbf33c23cc8e63b0e1515f427d86
+# TODO: This Git repo uses GPG sigs; we should switch from commit hash to GPG verification.
+var:
+  container:
+    use_container: 1
+
+input_files:
+  - project: container-image
+  - project: aiohttp
+    name: aiohttp
+  - project: aiohttp_socks
+    name: aiohttp_socks
+  - project: aiorpcx
+    name: aiorpcx
+  - project: async_timeout
+    name: async_timeout
+  - project: attr
+    name: attr
+  - project: certifi
+    name: certifi
+  - project: chardet
+    name: chardet
+  - project: dns
+    name: dns
+  - project: ecdsa
+    name: ecdsa
+  - project: idna
+    name: idna
+  - project: idna_ssl
+    name: idna_ssl
+  - project: jsonrpclib
+    name: jsonrpclib
+  - project: multidict
+    name: multidict
+  - project: pyaes
+    name: pyaes
+  - project: six
+    name: six
+  - project: typing_extensions
+    name: typing_extensions
+  - project: yarl
+    name: yarl
diff --git a/projects/firefox/build b/projects/firefox/build
index 5179634..b42b301 100644
--- a/projects/firefox/build
+++ b/projects/firefox/build
@@ -92,11 +92,21 @@ fi
   export LDFLAGS="-Wl,--no-insert-timestamp"
 [% END -%]
 
+[% IF c("var/namecoin") %]
+  patch -p1 < $rootdir/namecoin-etld.patch
+[% END -%]
+
 [% IF ! c("var/android") %]
   # Place a copy of the Tor Launcher sources under browser/extensions
   tar -C browser/extensions -xf $rootdir/[% c('input_files_by_name/tor-launcher') %]
 [% END -%]
 
+[% IF c("var/namecoin") %]
+  pushd toolkit/torproject/torbutton
+  patch -p1 < $rootdir/namecoin-torbutton.patch
+  popd
+[% END %]
+
 rm -f configure
 rm -f js/src/configure
 
diff --git a/projects/firefox/config b/projects/firefox/config
index c6f840b..0931a3f 100644
--- a/projects/firefox/config
+++ b/projects/firefox/config
@@ -182,3 +182,8 @@ input_files:
   - project: tba-translation
     name: tba-translation
     enable: '[% c("var/android") %]'
+  - filename: namecoin-torbutton.patch
+    enable: '[% c("var/namecoin") %]'
+    # TorButton patch authored by Arthur Edelstein, from https://github.com/arthuredelstein/torbutton/ branch 2.1.10-namecoin
+  - filename: namecoin-etld.patch
+    enable: '[% c("var/namecoin") %]'
diff --git a/projects/firefox/namecoin-etld.patch b/projects/firefox/namecoin-etld.patch
new file mode 100644
index 0000000..4a97f99
--- /dev/null
+++ b/projects/firefox/namecoin-etld.patch
@@ -0,0 +1,25 @@
+diff --git a/mobile/android/app/src/main/assets/publicsuffixlist b/mobile/android/app/src/main/assets/publicsuffixlist
+index 7f834b1..6874b40 100644
+--- a/mobile/android/app/src/main/assets/publicsuffixlist
++++ b/mobile/android/app/src/main/assets/publicsuffixlist
+@@ -3005,6 +3005,8 @@ edu.mn
+ gov.mn
+ london
+ fashion
++onion
++bit.onion
+ creditunion
+ vision
+ eurovision
+diff --git a/netwerk/dns/effective_tld_names.dat b/netwerk/dns/effective_tld_names.dat
+index 9dd962a..3402b20 100644
+--- a/netwerk/dns/effective_tld_names.dat
++++ b/netwerk/dns/effective_tld_names.dat
+@@ -5480,6 +5480,7 @@ pro.om
+ 
+ // onion : https://tools.ietf.org/html/rfc7686
+ onion
++bit.onion
+ 
+ // org : https://en.wikipedia.org/wiki/.org
+ org
diff --git a/projects/firefox/namecoin-torbutton.patch b/projects/firefox/namecoin-torbutton.patch
new file mode 100644
index 0000000..11cf7a1
--- /dev/null
+++ b/projects/firefox/namecoin-torbutton.patch
@@ -0,0 +1,105 @@
+diff --git a/chrome/content/tor-circuit-display.js b/chrome/content/tor-circuit-display.js
+index 5ecbe7d..f771150 100644
+--- a/chrome/content/tor-circuit-display.js
++++ b/chrome/content/tor-circuit-display.js
+@@ -49,7 +49,11 @@ let credentialsToNodeDataMap = new Map(),
+     knownCircuitIDs = new Map(),
+     // A mutable map that records the SOCKS credentials for the
+     // latest channels for each browser + domain.
+-    browserToCredentialsMap = new Map();
++    browserToCredentialsMap = new Map(),
++    // A mutable map from stream id to .bit[.onion] domains
++    bitTargets = {},
++    // A mutable map from .bit[.onion] domains to .onion domains.
++    bitToOnionMap = {};
+ 
+ // __trimQuotes(s)__.
+ // Removes quotation marks around a quoted string.
+@@ -126,6 +130,28 @@ let getCircuitStatusByID = async function (aController, circuitID) {
+   return null;
+ };
+ 
++// __collectBitTargets(aContoller)__.
++// Watches for STREAM NEW events. When a NEW event occurs, we will see
++// the stream's target domain. If that target is a .bit domain, then
++// we want to be sure to record this so we can later record if it is
++// remapped to a .onion domain.
++let collectBitTargets = function (aController) {
++  return aController.watchEvent(
++    "STREAM",
++    streamEvent => streamEvent.StreamStatus === "NEW",
++    async (streamEvent) => {
++      logger.eclog(3, "new streamEvent:" + JSON.stringify(streamEvent));
++      if (streamEvent && streamEvent.StreamID && streamEvent.Target) {
++        let targetDomain = streamEvent.Target.split(":")[0];
++        if (targetDomain.endsWith(".bit") ||
++            targetDomain.endsWith(".bit.onion")) {
++          bitTargets[streamEvent.StreamID] = Services.eTLD.getBaseDomainFromHost(targetDomain);
++          logger.eclog(3, "stream on .bit domain: " + targetDomain);
++        }
++      }
++    });
++};
++
+ // __collectIsolationData(aController, updateUI)__.
+ // Watches for STREAM SENTCONNECT events. When a SENTCONNECT event occurs, then
+ // we assume isolation settings (SOCKS username+password) are now fixed for the
+@@ -139,6 +165,15 @@ let collectIsolationData = function (aController, updateUI) {
+     "STREAM",
+     streamEvent => streamEvent.StreamStatus === "SENTCONNECT",
+     async (streamEvent) => {
++      logger.eclog(3, "sentconnect streamEvent:" + JSON.stringify(streamEvent));
++      // Collect any stream target that might be an onion.
++      if (streamEvent && streamEvent.StreamID && streamEvent.Target) {
++        let targetDomain = streamEvent.Target.split(":")[0];
++	if (targetDomain.endsWith(".onion")) {
++          bitToOnionMap[bitTargets[streamEvent.StreamID]] = targetDomain;
++          logger.eclog(3, "mapped " + bitTargets[streamEvent.StreamID] + " to " + targetDomain);
++        }
++      }
+       if (!knownCircuitIDs.get(streamEvent.CircuitID)) {
+         logger.eclog(3, "streamEvent.CircuitID: " + streamEvent.CircuitID);
+         knownCircuitIDs.set(streamEvent.CircuitID, true);
+@@ -306,12 +341,14 @@ let updateCircuitDisplay = function () {
+          (i === 0 && nodeData[0].type !== "bridge") ?
+            ["span", { class: "circuit-guard-info" }, uiString("guard")] : null);
+     }
+-    if (domain.endsWith(".onion")) {
++    logger.eclog(3, "bit to onion map:" + JSON.stringify(bitToOnionMap) + ", domain: " + domain);
++    let mappedOnion = bitToOnionMap[domain];
++    if (domain.endsWith(".onion") || mappedOnion) {
+       for (let i = 0; i < 3; ++i) {
+         li(uiString("relay"));
+       }
+     }
+-    li(domain);
++    li(domain, " ", mappedOnion ? ["span", { class: "circuit-ip-address" }, mappedOnion] : null);
+     // Hide the note about guards if we are using a bridge.
+     document.getElementById("circuit-guard-note-container").style.display =
+       (nodeData[0].type === "bridge") ? "none" : "block";
+@@ -418,6 +455,7 @@ let setupDisplay = function (ipcFile, host, port, password, enablePrefName) {
+       stopCollectingIsolationData = null,
+       stopCollectingBrowserCredentials = null,
+       stopEnsuringCorrectPopupDimensions = null,
++      stopCollectingBitTargets = null,
+       stop = function() {
+         syncDisplayWithSelectedTab(false);
+         if (myController) {
+@@ -430,6 +468,9 @@ let setupDisplay = function (ipcFile, host, port, password, enablePrefName) {
+           if (stopEnsuringCorrectPopupDimensions) {
+             stopEnsuringCorrectPopupDimensions();
+           }
++	  if (stopCollectingBitTargets) {
++	    stopCollectingBitTargets();
++	  }
+           myController = null;
+         }
+       },
+@@ -444,6 +485,7 @@ let setupDisplay = function (ipcFile, host, port, password, enablePrefName) {
+             stop();
+           });
+           syncDisplayWithSelectedTab(true);
++          stopCollectingBitTargets = collectBitTargets(myController);
+           stopCollectingIsolationData = collectIsolationData(myController, updateCircuitDisplay);
+           stopCollectingBrowserCredentials = collectBrowserCredentials();
+           stopEnsuringCorrectPopupDimensions = ensureCorrectPopupDimensions();
diff --git a/projects/goansicolor/config b/projects/goansicolor/config
new file mode 100644
index 0000000..6d1a73e
--- /dev/null
+++ b/projects/goansicolor/config
@@ -0,0 +1,16 @@
+version: '[% c("abbrev") %]'
+git_url:  https://github.com/shiena/ansicolor.git
+git_hash: a422bbe96644373c5753384a59d678f7d261ff10
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/shiena/ansicolor
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
diff --git a/projects/gobtcd/config b/projects/gobtcd/config
new file mode 100644
index 0000000..56dcca4
--- /dev/null
+++ b/projects/gobtcd/config
@@ -0,0 +1,32 @@
+version: '[% c("abbrev") %]'
+git_url:  https://github.com/namecoin/btcd.git
+git_hash: 6cfad711d4ee7367b3ab9dc572097438dbca56eb
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/namecoin/btcd
+  go_lib_install:
+    - github.com/namecoin/btcd/btcjson
+    - github.com/namecoin/btcd/rpcclient
+  go_lib_deps:
+    - gobtclog
+    - gobtcutil
+    - gosocks
+    - gowebsocket
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
+  - name: gobtclog
+    project: gobtclog
+  - name: gobtcutil
+    project: gobtcutil
+  - name: gosocks
+    project: gosocks
+  - name: gowebsocket
+    project: gowebsocket
diff --git a/projects/gobtcd2/config b/projects/gobtcd2/config
new file mode 100644
index 0000000..5324737
--- /dev/null
+++ b/projects/gobtcd2/config
@@ -0,0 +1,32 @@
+# vim: filetype=yaml sw=2
+
+# You're probably wondering why gobtcd2 is a thing, rather than being part of
+# gobtcd.  gobtcd builds the btcjson and rpcclient subpackages of btcd.
+# gobtcd2 builds the btcec, chaincfg, chaincfg/chainhash, and wire subpackages
+# of btcd.  The former set depends on gobtcutil, which depends on the latter
+# set.  This is fine for the dependency management done by "go get", which
+# operates on a per-package level rather than a per-repo level.  Alas, since
+# rbm instead operates on a per-repo level (since each project is one repo),
+# splitting it up was necessary.
+
+version: '[% c("abbrev") %]'
+git_url: '[% pc("gobtcd", "git_url") %]'
+git_hash: '[% pc("gobtcd", "git_hash") %]'
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/btcsuite/btcd
+  go_lib_install:
+    - github.com/btcsuite/btcd/btcec
+    - github.com/btcsuite/btcd/chaincfg
+    - github.com/btcsuite/btcd/chaincfg/chainhash
+    - github.com/btcsuite/btcd/wire
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
diff --git a/projects/gobtclog/config b/projects/gobtclog/config
new file mode 100644
index 0000000..9fcb6c6
--- /dev/null
+++ b/projects/gobtclog/config
@@ -0,0 +1,16 @@
+version: '[% c("abbrev") %]'
+git_url:  https://github.com/btcsuite/btclog.git
+git_hash: 84c8d2346e9fc8c7b947e243b9c24e6df9fd206a
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/btcsuite/btclog
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
diff --git a/projects/gobtcutil/config b/projects/gobtcutil/config
new file mode 100644
index 0000000..63a8f90
--- /dev/null
+++ b/projects/gobtcutil/config
@@ -0,0 +1,23 @@
+version: '[% c("abbrev") %]'
+git_url:  https://github.com/btcsuite/btcutil.git
+git_hash: 9e5f4b9a998d263e3ce9c56664a7816001ac8000
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/btcsuite/btcutil
+  go_lib_deps:
+    - gobtcd2
+    - goxcryptoripemd160
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
+  - name: gobtcd2
+    project: gobtcd2
+  - name: goxcryptoripemd160
+    project: goxcryptoripemd160
diff --git a/projects/gobuildinfo/config b/projects/gobuildinfo/config
new file mode 100644
index 0000000..5ca103c
--- /dev/null
+++ b/projects/gobuildinfo/config
@@ -0,0 +1,31 @@
+version: '[% c("abbrev") %]'
+git_url:  https://github.com/hlandau/buildinfo.git
+git_hash: 337a29b5499734e584d4630ce535af64c5fe7813
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/hlandau/buildinfo
+  go_lib_deps:
+    - goeasyconfig
+  build_go_lib_pre: |
+    [% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
+
+    tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/binutils') %]
+    export PATH="/var/tmp/dist/binutils/bin:$PATH"
+
+    export CGO_ENABLED=1
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
+  - name: '[% c("var/compiler") %]'
+    project: '[% c("var/compiler") %]'
+  - name: binutils
+    project: binutils
+  - name: goeasyconfig
+    project: goeasyconfig
diff --git a/projects/goconfigurable/config b/projects/goconfigurable/config
new file mode 100644
index 0000000..07bace5
--- /dev/null
+++ b/projects/goconfigurable/config
@@ -0,0 +1,16 @@
+version: '[% c("abbrev") %]'
+git_url:  https://github.com/hlandau/configurable.git
+git_hash: 34642c4c8cbf56801d0e34f0e82187305983ac26
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: gopkg.in/hlandau/configurable.v1
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
diff --git a/projects/godegoutils/config b/projects/godegoutils/config
new file mode 100644
index 0000000..f4f380a
--- /dev/null
+++ b/projects/godegoutils/config
@@ -0,0 +1,22 @@
+version: '[% c("abbrev") %]'
+git_url:  https://github.com/hlandau/degoutils.git
+git_hash: 8fa2440b63444dad556d76366f1c3ee070c8a577
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/hlandau/degoutils
+  go_lib_install:
+    - github.com/hlandau/degoutils/net
+  go_lib_deps:
+    - goxnet
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
+  - name: goxnet
+    project: goxnet
diff --git a/projects/godexlogconfig/config b/projects/godexlogconfig/config
new file mode 100644
index 0000000..0dccbe2
--- /dev/null
+++ b/projects/godexlogconfig/config
@@ -0,0 +1,40 @@
+version: '[% c("abbrev") %]'
+git_url:  https://github.com/hlandau/dexlogconfig.git
+git_hash: 244f29bd260884993b176cd14ef2f7631f6f3c18
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/hlandau/dexlogconfig
+  go_lib_deps:
+    - gobuildinfo
+    - goeasyconfig
+    - gosystemd
+    - goxlog
+  build_go_lib_pre: |
+    [% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
+
+    tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/binutils') %]
+    export PATH="/var/tmp/dist/binutils/bin:$PATH"
+
+    export CGO_ENABLED=1
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
+  - name: '[% c("var/compiler") %]'
+    project: '[% c("var/compiler") %]'
+  - name: binutils
+    project: binutils
+  - name: goxlog
+    project: goxlog
+  - name: goeasyconfig
+    project: goeasyconfig
+  - name: gosystemd
+    project: gosystemd
+  - name: gobuildinfo
+    project: gobuildinfo
diff --git a/projects/godns/config b/projects/godns/config
new file mode 100644
index 0000000..a005c32
--- /dev/null
+++ b/projects/godns/config
@@ -0,0 +1,26 @@
+version: 1.1.22
+git_url:  https://github.com/miekg/dns.git
+git_hash: 1e224ff5dead8366ed6fcdcb832794be42e73f0e
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/miekg/dns
+  go_lib_deps:
+    - goxcryptoed25519
+    - goxnetip
+    - goxsysunix
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
+  - name: goxcryptoed25519
+    project: goxcryptoed25519
+  - name: goxnetip
+    project: goxnetip
+  - name: goxsysunix
+    project: goxsysunix
diff --git a/projects/goeasyconfig/config b/projects/goeasyconfig/config
new file mode 100644
index 0000000..a87283e
--- /dev/null
+++ b/projects/goeasyconfig/config
@@ -0,0 +1,35 @@
+version: 1.0.17
+git_url:  https://github.com/hlandau/easyconfig.git
+git_hash: c31249162931b4963bbe6e501cccb60d23271a3f
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: gopkg.in/hlandau/easyconfig.v1
+  go_lib_deps:
+    - goconfigurable
+    - gosvcutils
+    - gotoml
+    - gopflag
+    - gokingpin
+  go_lib_install:
+    - gopkg.in/hlandau/easyconfig.v1
+    - gopkg.in/hlandau/easyconfig.v1/cflag
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
+  - name: goconfigurable
+    project: goconfigurable
+  - name: gosvcutils
+    project: gosvcutils
+  - name: gotoml
+    project: gotoml
+  - name: gopflag
+    project: gopflag
+  - name: gokingpin
+    project: gokingpin
diff --git a/projects/gogroupcache/config b/projects/gogroupcache/config
new file mode 100644
index 0000000..5646737
--- /dev/null
+++ b/projects/gogroupcache/config
@@ -0,0 +1,18 @@
+version: '[% c("abbrev") %]'
+git_url:  https://github.com/golang/groupcache.git
+git_hash: 611e8accdfc92c4187d399e95ce826046d4c8d73
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/golang/groupcache
+  go_lib_install:
+    - github.com/golang/groupcache/lru
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
diff --git a/projects/goisatty/config b/projects/goisatty/config
new file mode 100644
index 0000000..0f5fc17
--- /dev/null
+++ b/projects/goisatty/config
@@ -0,0 +1,20 @@
+version: 0.0.10
+git_url:  https://github.com/mattn/go-isatty.git
+git_hash: 88ba11cfdc67c7588b30042edf244b2875f892b6
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/mattn/go-isatty
+  go_lib_deps:
+    - goxsysunix
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
+  - name: goxsysunix
+    project: goxsysunix
diff --git a/projects/gokingpin/config b/projects/gokingpin/config
new file mode 100644
index 0000000..dd209f4
--- /dev/null
+++ b/projects/gokingpin/config
@@ -0,0 +1,23 @@
+version: 2.2.6
+git_url:  https://github.com/alecthomas/kingpin.git
+git_hash: 947dcec5ba9c011838740e680966fd7087a71d0d
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: gopkg.in/alecthomas/kingpin.v2
+  go_lib_deps:
+    - gotemplate
+    - gounits
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
+  - name: gotemplate
+    project: gotemplate
+  - name: gounits
+    project: gounits
diff --git a/projects/gomadns/config b/projects/gomadns/config
new file mode 100644
index 0000000..a53f410
--- /dev/null
+++ b/projects/gomadns/config
@@ -0,0 +1,40 @@
+version: 2.0.1
+git_url:  https://github.com/hlandau/madns.git
+git_hash: 26979b3e4b5aa3e0bd53cf0a014f9eaf43b578e3
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: gopkg.in/hlandau/madns.v2
+  go_lib_deps:
+    - godns
+    - gobuildinfo
+    - goxlog
+  go_lib_install:
+    - gopkg.in/hlandau/madns.v2
+    - gopkg.in/hlandau/madns.v2/merr
+  build_go_lib_pre: |
+    [% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
+
+    tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/binutils') %]
+    export PATH="/var/tmp/dist/binutils/bin:$PATH"
+
+    export CGO_ENABLED=1
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
+  - name: '[% c("var/compiler") %]'
+    project: '[% c("var/compiler") %]'
+  - name: binutils
+    project: binutils
+  - name: godns
+    project: godns
+  - name: gobuildinfo
+    project: gobuildinfo
+  - name: goxlog
+    project: goxlog
diff --git a/projects/goncbtcjson/config b/projects/goncbtcjson/config
new file mode 100644
index 0000000..708bfc8
--- /dev/null
+++ b/projects/goncbtcjson/config
@@ -0,0 +1,20 @@
+version: '[% c("abbrev") %]'
+git_url:  https://github.com/namecoin/ncbtcjson.git
+git_hash: 0d2f400334751d149ca21bfd4535c9d2274f7264
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/namecoin/ncbtcjson
+  go_lib_deps:
+    - gobtcd
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
+  - name: gobtcd
+    project: gobtcd
diff --git a/projects/goncrpcclient/config b/projects/goncrpcclient/config
new file mode 100644
index 0000000..122700c
--- /dev/null
+++ b/projects/goncrpcclient/config
@@ -0,0 +1,23 @@
+version: '[% c("abbrev") %]'
+git_url:  https://github.com/namecoin/ncrpcclient.git
+git_hash: 858e1a5acd8b2da56462f50323633cdf2fe80977
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/namecoin/ncrpcclient
+  go_lib_deps:
+    - gobtcd
+    - goncbtcjson
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
+  - name: gobtcd
+    project: gobtcd
+  - name: goncbtcjson
+    project: goncbtcjson
diff --git a/projects/gopflag/config b/projects/gopflag/config
new file mode 100644
index 0000000..16141cc
--- /dev/null
+++ b/projects/gopflag/config
@@ -0,0 +1,16 @@
+version: '[% c("abbrev") %]'
+git_url:  https://github.com/ogier/pflag.git
+git_hash: 45c278ab3607870051a2ea9040bb85fcb8557481
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/ogier/pflag
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
diff --git a/projects/gopretty/config b/projects/gopretty/config
new file mode 100644
index 0000000..a2ceecf
--- /dev/null
+++ b/projects/gopretty/config
@@ -0,0 +1,20 @@
+version: '[% c("abbrev") %]'
+git_url:  https://github.com/kr/pretty.git
+git_hash: 71e7e49937503c662b9b636fd6b2c14b1aa818a5
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/kr/pretty
+  go_lib_deps:
+    - gotext
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
+  - name: gotext
+    project: gotext
diff --git a/projects/goservice/config b/projects/goservice/config
new file mode 100644
index 0000000..67eff54
--- /dev/null
+++ b/projects/goservice/config
@@ -0,0 +1,44 @@
+version: '[% c("abbrev") %]'
+git_url:  https://github.com/hlandau/service.git
+git_hash: 0496f910e39ef577ba805f512f6e1b80d652c4b9
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: gopkg.in/hlandau/service.v2
+  go_lib_deps:
+    - gosvcutils
+    - goeasyconfig
+  build_go_lib_pre: |
+    [% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
+
+    tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/binutils') %]
+    export PATH="/var/tmp/dist/binutils/bin:$PATH"
+
+    export CGO_ENABLED=1
+
+targets:
+  linux-i686:
+    var:
+      arch_deps:
+        - libcap-dev:i386
+  linux-x86_64:
+    var:
+      arch_deps:
+        - libcap-dev
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
+  - name: '[% c("var/compiler") %]'
+    project: '[% c("var/compiler") %]'
+  - name: binutils
+    project: binutils
+  - name: gosvcutils
+    project: gosvcutils
+  - name: goeasyconfig
+    project: goeasyconfig
diff --git a/projects/gosocks/config b/projects/gosocks/config
new file mode 100644
index 0000000..1d9a5a8
--- /dev/null
+++ b/projects/gosocks/config
@@ -0,0 +1,18 @@
+version: '[% c("abbrev") %]'
+git_url:  https://github.com/btcsuite/go-socks.git
+git_hash: 4720035b7bfd2a9bb130b1c184f8bbe41b6f0d0f
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/btcsuite/go-socks
+  go_lib_install:
+    - github.com/btcsuite/go-socks/socks
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
diff --git a/projects/gosvcutils/config b/projects/gosvcutils/config
new file mode 100644
index 0000000..b941e05
--- /dev/null
+++ b/projects/gosvcutils/config
@@ -0,0 +1,47 @@
+version: 1.0.10
+git_url:  https://github.com/hlandau/svcutils.git
+git_hash: c25dac49e50cbbcbef8c81b089f56156f4067729
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: gopkg.in/hlandau/svcutils.v1
+  go_lib_install:
+    - gopkg.in/hlandau/svcutils.v1
+    - gopkg.in/hlandau/svcutils.v1/caps
+    - gopkg.in/hlandau/svcutils.v1/chroot
+    - gopkg.in/hlandau/svcutils.v1/dupfd
+    - gopkg.in/hlandau/svcutils.v1/exepath
+    - gopkg.in/hlandau/svcutils.v1/passwd
+    - gopkg.in/hlandau/svcutils.v1/pidfile
+    - gopkg.in/hlandau/svcutils.v1/setuid
+    - gopkg.in/hlandau/svcutils.v1/systemd
+  build_go_lib_pre: |
+    [% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
+
+    tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/binutils') %]
+    export PATH="/var/tmp/dist/binutils/bin:$PATH"
+
+    export CGO_ENABLED=1
+
+targets:
+  linux-i686:
+    var:
+      arch_deps:
+        - libcap-dev:i386
+  linux-x86_64:
+    var:
+      arch_deps:
+        - libcap-dev
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
+  - name: '[% c("var/compiler") %]'
+    project: '[% c("var/compiler") %]'
+  - name: binutils
+    project: binutils
diff --git a/projects/gosystemd/config b/projects/gosystemd/config
new file mode 100644
index 0000000..daa9f79
--- /dev/null
+++ b/projects/gosystemd/config
@@ -0,0 +1,29 @@
+version: 21
+git_url:  https://github.com/coreos/go-systemd.git
+git_hash: d3cd4ed1dbcf5835feba465b180436db54f20228
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/coreos/go-systemd
+  go_lib_install:
+    - github.com/coreos/go-systemd/journal
+  build_go_lib_pre: |
+    [% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
+
+    tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/binutils') %]
+    export PATH="/var/tmp/dist/binutils/bin:$PATH"
+
+    export CGO_ENABLED=1
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
+  - name: '[% c("var/compiler") %]'
+    project: '[% c("var/compiler") %]'
+  - name: binutils
+    project: binutils
diff --git a/projects/gotemplate/config b/projects/gotemplate/config
new file mode 100644
index 0000000..62cddc9
--- /dev/null
+++ b/projects/gotemplate/config
@@ -0,0 +1,16 @@
+version: '[% c("abbrev") %]'
+git_url:  https://github.com/alecthomas/template.git
+git_hash: fb15b899a75114aa79cc930e33c46b577cc664b1
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/alecthomas/template
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
diff --git a/projects/gotext/config b/projects/gotext/config
new file mode 100644
index 0000000..5493329
--- /dev/null
+++ b/projects/gotext/config
@@ -0,0 +1,16 @@
+version: 0.1.0
+git_url:  https://github.com/kr/text.git
+git_hash: e2ffdb16a802fe2bb95e2e35ff34f0e53aeef34f
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/kr/text
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
diff --git a/projects/gotoml/config b/projects/gotoml/config
new file mode 100644
index 0000000..c40c582
--- /dev/null
+++ b/projects/gotoml/config
@@ -0,0 +1,16 @@
+version: '[% c("abbrev") %]'
+git_url:  https://github.com/BurntSushi/toml.git
+git_hash: 3012a1dbe2e4bd1391d42b32f0577cb7bbc7f005
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/BurntSushi/toml
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
diff --git a/projects/gounits/config b/projects/gounits/config
new file mode 100644
index 0000000..8cf7395
--- /dev/null
+++ b/projects/gounits/config
@@ -0,0 +1,16 @@
+version: '[% c("abbrev") %]'
+git_url:  https://github.com/alecthomas/units.git
+git_hash: f65c72e2690dc4b403c8bd637baf4611cd4c069b
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/alecthomas/units
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
diff --git a/projects/gowebsocket/config b/projects/gowebsocket/config
new file mode 100644
index 0000000..1e103d3
--- /dev/null
+++ b/projects/gowebsocket/config
@@ -0,0 +1,16 @@
+version: '[% c("abbrev") %]'
+git_url:  https://github.com/btcsuite/websocket.git
+git_hash: 31079b6807923eb23992c421b114992b95131b55
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/btcsuite/websocket
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
diff --git a/projects/goxcryptoed25519/config b/projects/goxcryptoed25519/config
new file mode 100644
index 0000000..d065de1
--- /dev/null
+++ b/projects/goxcryptoed25519/config
@@ -0,0 +1,19 @@
+# vim: filetype=yaml sw=2
+version: '[% c("abbrev") %]'
+git_url: '[% pc("goxcrypto", "git_url") %]'
+git_hash: '[% pc("goxcrypto", "git_hash") %]'
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: golang.org/x/crypto
+  go_lib_install:
+    - golang.org/x/crypto/ed25519
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
diff --git a/projects/goxcryptoripemd160/config b/projects/goxcryptoripemd160/config
new file mode 100644
index 0000000..b14e71d
--- /dev/null
+++ b/projects/goxcryptoripemd160/config
@@ -0,0 +1,19 @@
+# vim: filetype=yaml sw=2
+version: '[% c("abbrev") %]'
+git_url: '[% pc("goxcrypto", "git_url") %]'
+git_hash: '[% pc("goxcrypto", "git_hash") %]'
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: golang.org/x/crypto
+  go_lib_install:
+    - golang.org/x/crypto/ripemd160
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
diff --git a/projects/goxlog/config b/projects/goxlog/config
new file mode 100644
index 0000000..fa47d30
--- /dev/null
+++ b/projects/goxlog/config
@@ -0,0 +1,23 @@
+version: 1.0.0
+git_url:  https://github.com/hlandau/xlog.git
+git_hash: 197ef798aed28e08ed3e176e678fda81be993a31
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: github.com/hlandau/xlog
+  go_lib_deps:
+    - goisatty
+    - goansicolor
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
+  - name: goisatty
+    project: goisatty
+  - name: goansicolor
+    project: goansicolor
diff --git a/projects/goxnetip/config b/projects/goxnetip/config
new file mode 100644
index 0000000..db1c85e
--- /dev/null
+++ b/projects/goxnetip/config
@@ -0,0 +1,24 @@
+# vim: filetype=yaml sw=2
+version: '[% c("abbrev") %]'
+git_url: '[% pc("goxnet", "git_url") %]'
+git_hash: '[% pc("goxnet", "git_hash") %]'
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: golang.org/x/net
+  go_lib_install:
+    - golang.org/x/net/ipv4
+    - golang.org/x/net/ipv6
+  go_lib_deps:
+    - goxsysunix
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
+  - name: goxsysunix
+    project: goxsysunix
diff --git a/projects/goxsysunix/config b/projects/goxsysunix/config
new file mode 100644
index 0000000..a2fe03c
--- /dev/null
+++ b/projects/goxsysunix/config
@@ -0,0 +1,19 @@
+# vim: filetype=yaml sw=2
+version: '[% c("abbrev") %]'
+git_url: '[% pc("goxsys", "git_url") %]'
+git_hash: '[% pc("goxsys", "git_hash") %]'
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+build: '[% c("projects/go/var/build_go_lib") %]'
+
+var:
+  container:
+    use_container: 1
+  go_lib: golang.org/x/sys
+  go_lib_install:
+    - golang.org/x/sys/unix
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
diff --git a/projects/idna/build b/projects/idna/build
new file mode 100644
index 0000000..0747718
--- /dev/null
+++ b/projects/idna/build
@@ -0,0 +1,14 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+
+tar xvf [% project %]-[% c('version') %].tar.gz
+
+mkdir -p /var/tmp/dist/
+cd /var/tmp/dist/
+
+cp -a $rootdir/[% project %]*/[% project %] ./[% project %]
+
+[% c('tar', {
+        tar_src => '.',
+        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+        }) %]
diff --git a/projects/idna/config b/projects/idna/config
new file mode 100644
index 0000000..c499a80
--- /dev/null
+++ b/projects/idna/config
@@ -0,0 +1,11 @@
+# vim: filetype=yaml sw=2
+version: 2.8
+git_url: https://github.com/kjd/idna.git
+git_hash: 1cdf175e259b299be76f49c3ddc8794214f9931f
+# TODO: This Git repo doesn't use GPG sigs.  We should pester them about that.
+filename: "[% project %]-[% c('version') %]-[% c('var/build_id') %].tar.gz"
+var:
+  container:
+    use_container: 1
+input_files:
+  - project: container-image
diff --git a/projects/idna_ssl/build b/projects/idna_ssl/build
new file mode 100644
index 0000000..6f65b22
--- /dev/null
+++ b/projects/idna_ssl/build
@@ -0,0 +1,14 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+
+tar xvf [% project %]-[% c('version') %].tar.gz
+
+mkdir -p /var/tmp/dist/
+cd /var/tmp/dist/
+
+cp -a $rootdir/[% project %]*/[% project %].py ./[% project %].py
+
+[% c('tar', {
+        tar_src => '.',
+        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+        }) %]
diff --git a/projects/idna_ssl/config b/projects/idna_ssl/config
new file mode 100644
index 0000000..7331027
--- /dev/null
+++ b/projects/idna_ssl/config
@@ -0,0 +1,11 @@
+# vim: filetype=yaml sw=2
+version: 1.1.0
+git_url: https://github.com/aio-libs/idna-ssl.git
+git_hash: 1ab8304810f8bd9a880c0a013276cddd3c6e9551
+# TODO: This Git repo uses GPG sigs; we should switch from commit hash to GPG verification.
+filename: "[% project %]-[% c('version') %]-[% c('var/build_id') %].tar.gz"
+var:
+  container:
+    use_container: 1
+input_files:
+  - project: container-image
diff --git a/projects/jsonrpclib/build b/projects/jsonrpclib/build
new file mode 100644
index 0000000..0747718
--- /dev/null
+++ b/projects/jsonrpclib/build
@@ -0,0 +1,14 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+
+tar xvf [% project %]-[% c('version') %].tar.gz
+
+mkdir -p /var/tmp/dist/
+cd /var/tmp/dist/
+
+cp -a $rootdir/[% project %]*/[% project %] ./[% project %]
+
+[% c('tar', {
+        tar_src => '.',
+        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+        }) %]
diff --git a/projects/jsonrpclib/config b/projects/jsonrpclib/config
new file mode 100644
index 0000000..e5b469b
--- /dev/null
+++ b/projects/jsonrpclib/config
@@ -0,0 +1,11 @@
+# vim: filetype=yaml sw=2
+version: 0.4.0
+git_url: https://github.com/tcalmant/jsonrpclib.git
+git_hash: fe9fcf2c99973507f7055d6c9e05e155957c2549
+# TODO: This Git repo doesn't use GPG sigs.  We should pester them about that.
+filename: "[% project %]-[% c('version') %]-[% c('var/build_id') %].tar.gz"
+var:
+  container:
+    use_container: 1
+input_files:
+  - project: container-image
diff --git a/projects/multidict/build b/projects/multidict/build
new file mode 100644
index 0000000..e0f9400
--- /dev/null
+++ b/projects/multidict/build
@@ -0,0 +1,14 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+
+tar xvf [% project %]-[% c('version') %].tar.gz
+
+mkdir -p /var/tmp/dist/[% project %]
+cd /var/tmp/dist/
+
+cp -a $rootdir/[% project %]*/[% project %]/*.py ./[% project %]/
+
+[% c('tar', {
+        tar_src => '.',
+        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+        }) %]
diff --git a/projects/multidict/config b/projects/multidict/config
new file mode 100644
index 0000000..d242b08
--- /dev/null
+++ b/projects/multidict/config
@@ -0,0 +1,11 @@
+# vim: filetype=yaml sw=2
+version: 4.5.2
+git_url: https://github.com/aio-libs/multidict.git
+git_hash: bd40998bf220820a7d636d5f02912c8d4abcac23
+# TODO: This Git repo doesn't use GPG sigs.  We should pester them about that.
+filename: "[% project %]-[% c('version') %]-[% c('var/build_id') %].tar.gz"
+var:
+  container:
+    use_container: 1
+input_files:
+  - project: container-image
diff --git a/projects/ncdns/build b/projects/ncdns/build
new file mode 100644
index 0000000..5ec0bc8
--- /dev/null
+++ b/projects/ncdns/build
@@ -0,0 +1,31 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+[% pc('go', 'var/setup', { go_tarfile => c('input_files_by_name/go') }) %]
+[% pc(c('var/compiler'), 'var/setup', { compiler_tarfile => c('input_files_by_name/' _ c('var/compiler')) }) %]
+
+tar -C /var/tmp/dist -xf $rootdir/[% c('input_files_by_name/binutils') %]
+export PATH="/var/tmp/dist/binutils/bin:$PATH"
+export CGO_ENABLED=1
+distdir=/var/tmp/dist/[% project %]
+mkdir -p $distdir
+
+[% FOREACH dep = c("var/go_lib_deps") -%]
+  tar -C /var/tmp/dist -xf [% c('input_files_by_name/' _ dep) %]
+[% END -%]
+
+mkdir -p $GOPATH/src/github.com/namecoin
+tar -C $GOPATH/src/github.com/namecoin -xf [% project %]-[% c('version') %].tar.gz
+mv $GOPATH/src/github.com/namecoin/ncdns-[% c('version') %] $GOPATH/src/github.com/namecoin/ncdns
+
+TAGS="-tags no_namecoin_tls"
+
+[% FOREACH inst IN c("var/go_lib_install") %]
+  go install $TAGS -ldflags '-s' [% inst %]
+[% END %]
+
+cd /var/tmp/dist
+
+[% c('tar', {
+  tar_src => [ 'gopath' ],
+  tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+}) %]
diff --git a/projects/ncdns/config b/projects/ncdns/config
new file mode 100644
index 0000000..0785e51
--- /dev/null
+++ b/projects/ncdns/config
@@ -0,0 +1,82 @@
+#version: 0.0.9
+# Using latest master branch because we need the stream isolation and
+# disable_namecoin_tlsa features.  Once they're in a tagged release, we'll go
+# back to using a version number here.
+version: '[% c("abbrev") %]'
+git_url: https://github.com/namecoin/ncdns.git
+# Using latest master branch because we need the stream isolation and
+# disable_namecoin_tlsa features.  Once they're in a tagged release, we'll go
+# back to using a hash that corresponds to a tag here.
+git_hash: 'ca0fe5552806a4275f38468c4d3fbcb2cba1cb79'
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+var:
+  container:
+    use_container: 1
+  go_lib_deps:
+    - gogroupcache
+    - godegoutils
+    - godexlogconfig
+    - goncbtcjson
+    - goncrpcclient
+    - gobtcd
+    - gopretty
+    - godns
+    - gomadns
+    - goeasyconfig
+    - goservice
+    - goxnet
+  go_lib_install:
+    - github.com/namecoin/ncdns
+    - github.com/namecoin/ncdns/backend
+    - github.com/namecoin/ncdns/namecoin
+    - github.com/namecoin/ncdns/ncdomain
+    - github.com/namecoin/ncdns/ncdt
+    - github.com/namecoin/ncdns/rrtourl
+    - github.com/namecoin/ncdns/server
+    - github.com/namecoin/ncdns/testutil
+    - github.com/namecoin/ncdns/tlshook
+    - github.com/namecoin/ncdns/util
+
+targets:
+  linux-i686:
+    var:
+      arch_deps:
+        - libcap-dev:i386
+  linux-x86_64:
+    var:
+      arch_deps:
+        - libcap-dev
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
+  - name: '[% c("var/compiler") %]'
+    project: '[% c("var/compiler") %]'
+  - name: binutils
+    project: binutils
+  - name: godexlogconfig
+    project: godexlogconfig
+  - name: goeasyconfig
+    project: goeasyconfig
+  - name: goservice
+    project: goservice
+  - name: gogroupcache
+    project: gogroupcache
+  - name: goncbtcjson
+    project: goncbtcjson
+  - name: goncrpcclient
+    project: goncrpcclient
+  - name: gobtcd
+    project: gobtcd
+  - name: godns
+    project: godns
+  - name: gomadns
+    project: gomadns
+  - name: gopretty
+    project: gopretty
+  - name: godegoutils
+    project: godegoutils
+  - name: goxnet
+    project: goxnet
diff --git a/projects/ncprop279/build b/projects/ncprop279/build
new file mode 100644
index 0000000..a035277
--- /dev/null
+++ b/projects/ncprop279/build
@@ -0,0 +1,32 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+[% pc('go', 'var/setup', { go_tarfile => c('input_files_by_name/go') }) %]
+export CGO_ENABLED=0
+distdir=/var/tmp/dist/[% project %]
+mkdir -p $distdir
+
+[% FOREACH dep = c("var/go_lib_deps") -%]
+  tar -C /var/tmp/dist -xf [% c('input_files_by_name/' _ dep) %]
+[% END -%]
+
+mkdir -p $GOPATH/src/github.com/namecoin
+tar -C $GOPATH/src/github.com/namecoin -xf [% project %]-[% c('version') %].tar.gz
+mv $GOPATH/src/github.com/namecoin/ncprop279-[% c('version') %] $GOPATH/src/github.com/namecoin/ncprop279
+
+TAGS="-tags no_namecoin_tls"
+
+go install $TAGS -ldflags '-s' github.com/namecoin/ncprop279
+
+[% IF c("var/linux-x86_64") -%]
+  GOPATHBIN="${GOPATH}/bin"
+[% ELSE -%]
+  GOPATHBIN="${GOPATH}/bin/${GOOS}_${GOARCH}"
+[% END -%]
+
+cp -a $GOPATHBIN/ncprop279 $distdir/
+
+cd $distdir
+[% c('tar', {
+     tar_src   => [ '.' ],
+     tar_args  => '-czf ' _ dest_dir _ '/' _ c('filename'),
+   }) %]
diff --git a/projects/ncprop279/config b/projects/ncprop279/config
new file mode 100644
index 0000000..5d4ee51
--- /dev/null
+++ b/projects/ncprop279/config
@@ -0,0 +1,32 @@
+#version: '0.0.2'
+# Using latest master branch because we need the stream isolation feature.
+# Once it's in a tagged release, we'll go back to using a version number here.
+version: '[% c("abbrev") %]'
+git_url:  https://github.com/namecoin/ncprop279.git
+# Using latest master branch because we need the stream isolation feature.
+# Once it's in a tagged release, we'll go back to using a hash that corresponds
+# to a tag here.
+git_hash: '7bdd741d70258407f66aab52b24788f1acccc56b'
+filename: '[% project %]-[% c("version") %]-[% c("var/osname") %]-[% c("var/build_id") %].tar.gz'
+
+var:
+  container:
+    use_container: 1
+  go_lib_deps:
+    - godns
+    - goeasyconfig
+    - gomadns
+    - ncdns
+
+input_files:
+  - project: container-image
+  - name: go
+    project: go
+  - name: godns
+    project: godns
+  - name: goeasyconfig
+    project: goeasyconfig
+  - name: gomadns
+    project: gomadns
+  - name: ncdns
+    project: ncdns
diff --git a/projects/pyaes/build b/projects/pyaes/build
new file mode 100644
index 0000000..0747718
--- /dev/null
+++ b/projects/pyaes/build
@@ -0,0 +1,14 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+
+tar xvf [% project %]-[% c('version') %].tar.gz
+
+mkdir -p /var/tmp/dist/
+cd /var/tmp/dist/
+
+cp -a $rootdir/[% project %]*/[% project %] ./[% project %]
+
+[% c('tar', {
+        tar_src => '.',
+        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+        }) %]
diff --git a/projects/pyaes/config b/projects/pyaes/config
new file mode 100644
index 0000000..6fba344
--- /dev/null
+++ b/projects/pyaes/config
@@ -0,0 +1,11 @@
+# vim: filetype=yaml sw=2
+version: 1.6.1
+filename: "[% project %]-[% c('version') %]-[% c('var/build_id') %].tar.gz"
+var:
+  container:
+    use_container: 1
+input_files:
+  - project: container-image
+  - URL: https://files.pythonhosted.org/packages/source/p/pyaes/pyaes-[% c("version") %].tar.gz
+    sha256sum: 02c1b1405c38d3c370b085fb952dd8bea3fadcee6411ad99f312cc129c536d8f
+    # TODO: This version doesn't show up as a Git tag; where did it come from?
diff --git a/projects/six/build b/projects/six/build
new file mode 100644
index 0000000..6f65b22
--- /dev/null
+++ b/projects/six/build
@@ -0,0 +1,14 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+
+tar xvf [% project %]-[% c('version') %].tar.gz
+
+mkdir -p /var/tmp/dist/
+cd /var/tmp/dist/
+
+cp -a $rootdir/[% project %]*/[% project %].py ./[% project %].py
+
+[% c('tar', {
+        tar_src => '.',
+        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+        }) %]
diff --git a/projects/six/config b/projects/six/config
new file mode 100644
index 0000000..e0945d1
--- /dev/null
+++ b/projects/six/config
@@ -0,0 +1,11 @@
+# vim: filetype=yaml sw=2
+version: 1.12.0
+git_url: https://github.com/benjaminp/six.git
+git_hash: d927b9e27617abca8dbf4d66cc9265ebbde261d6
+# TODO: This Git repo doesn't use GPG sigs.  We should pester them about that.
+filename: "[% project %]-[% c('version') %]-[% c('var/build_id') %].tar.gz"
+var:
+  container:
+    use_container: 1
+input_files:
+  - project: container-image
diff --git a/projects/stemns/build b/projects/stemns/build
new file mode 100644
index 0000000..3784894
--- /dev/null
+++ b/projects/stemns/build
@@ -0,0 +1,25 @@
+#!/bin/sh
+[% c("var/set_default_env") -%]
+distdir=/var/tmp/dist/StemNS
+mkdir /var/tmp/build
+mkdir /var/tmp/dist
+
+# Extract StemNS
+tar -C /var/tmp/build -xf [% project %]-[% c('version') %].tar.gz
+
+cp -a /var/tmp/build/[% project %]-[% c('version') %] ${distdir}
+
+# Extract Stem
+tar -C /var/tmp/build -xf stem-[% c("var/stem-version") %].tar.gz
+
+cp -a /var/tmp/build/stem-[% c("var/stem-version") %]/stem ${distdir}/stem
+
+# Apply settings
+cp -a settings_port.py settings_services.py ${distdir}/
+
+cd /var/tmp/dist/
+
+[% c('tar', {
+        tar_src => '.',
+        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+        }) %]
diff --git a/projects/stemns/config b/projects/stemns/config
new file mode 100644
index 0000000..6c83335
--- /dev/null
+++ b/projects/stemns/config
@@ -0,0 +1,17 @@
+# vim: filetype=yaml sw=2
+version: '[% c("abbrev") %]'
+git_url: https://github.com/namecoin/StemNS.git
+git_hash: '32ed59be344d6bb949faa4a2bf70ae058bfe4d21'
+filename: '[% project %]-[% c("version") %]-[% c("var/build_id") %].tar.gz'
+var:
+  container:
+    use_container: 1
+  stem-version: 1.7.1
+
+input_files:
+  - project: container-image
+  - URL: 'https://files.pythonhosted.org/packages/source/s/stem/stem-[% c("var/stem-version") %].tar.gz'
+    sha256sum: c9eaf3116cb60c15995cbd3dec3a5cbc50e9bb6e062c4d6d42201e566f498ca2
+    # TODO: This sha256sum was grabbed from PyPI and hasn't been verified.  We should probably switch to using an OpenPGP sig.
+  - filename: settings_port.py
+  - filename: settings_services.py
diff --git a/projects/stemns/settings_port.py b/projects/stemns/settings_port.py
new file mode 100644
index 0000000..e9f290d
--- /dev/null
+++ b/projects/stemns/settings_port.py
@@ -0,0 +1 @@
+tor_control_port = 9151
diff --git a/projects/stemns/settings_services.py b/projects/stemns/settings_services.py
new file mode 100644
index 0000000..57897f0
--- /dev/null
+++ b/projects/stemns/settings_services.py
@@ -0,0 +1,4 @@
+_service_to_command = {
+    "bit.onion": ['TorBrowser/ncprop279/ncprop279', '--conf=TorBrowser/Data/ncprop279/ncprop279.conf'],
+    "bit": ['TorBrowser/ncprop279/ncprop279', '--conf=TorBrowser/Data/ncprop279/ncprop279.conf'],
+}
diff --git a/projects/tor-browser/Bundle-Data/linux/Data/Electrum-NMC/config b/projects/tor-browser/Bundle-Data/linux/Data/Electrum-NMC/config
new file mode 100644
index 0000000..df1ab17
--- /dev/null
+++ b/projects/tor-browser/Bundle-Data/linux/Data/Electrum-NMC/config
@@ -0,0 +1,6 @@
+{
+    "proxy": "socks5:127.0.0.1:9150::",
+    "rpcpassword": "password",
+    "rpcport": 8336,
+    "rpcuser": "user"
+}
\ No newline at end of file
diff --git a/projects/tor-browser/Bundle-Data/linux/Data/ncprop279/ncprop279.conf b/projects/tor-browser/Bundle-Data/linux/Data/ncprop279/ncprop279.conf
new file mode 100644
index 0000000..afcba1b
--- /dev/null
+++ b/projects/tor-browser/Bundle-Data/linux/Data/ncprop279/ncprop279.conf
@@ -0,0 +1,12 @@
+[ncprop279]
+
+namecoinrpcaddress="127.0.0.1:8336"
+namecoinrpcusername="user"
+namecoinrpcpassword="password"
+namecoinrpctimeout="10000"
+onlyonion="true"
+
+[xlog]
+
+# Uncomment this to enable debug logging
+#severity="DEBUG"
diff --git a/projects/tor-browser/build b/projects/tor-browser/build
index 2979658..2c72e03 100644
--- a/projects/tor-browser/build
+++ b/projects/tor-browser/build
@@ -61,6 +61,11 @@ tar -C "$TBDIR[% IF c("var/osx") %]/Contents/Resources[% END %]" -xf [% c('input
   cat > ${TB_STAGE_DIR}/Browser/start-tor-browser << 'RBM_TB_EOF'
 [% INCLUDE 'RelativeLink/start-tor-browser' -%]
 RBM_TB_EOF
+  [% IF c("var/namecoin") %]
+    pushd ${TB_STAGE_DIR}/Browser/
+    patch -p1 < $rootdir/namecoin.patch
+    popd
+  [% END %]
   chmod +x ${TB_STAGE_DIR}/Browser/start-tor-browser
   # Make sure we get the desired scrollbar behavior with Gtk3, see bug 27546.
   GTK_SETTINGS_DIR=${TB_STAGE_DIR}/Browser/.config/gtk-3.0
@@ -70,6 +75,17 @@ RBM_TB_EOF
 
 tar -C ${TB_STAGE_DIR} -xf [% c('input_files_by_name/firefox') %]/tor-browser.tar.gz
 tar -C "$TBDIR[% IF ! c("var/osx") %]/TorBrowser[% END %]" -xf [% c('input_files_by_name/tor') %]/tor.tar.gz
+[% IF c("var/namecoin") %]
+  # Extract Electrum-NMC
+  tar -C "$TBDIR/TorBrowser" -xf [% c('input_files_by_name/electrum-nmc') %]
+
+  # Extract ncprop279
+  mkdir "$TBDIR/TorBrowser/ncprop279"
+  tar -C "$TBDIR/TorBrowser/ncprop279" -xf [% c('input_files_by_name/ncprop279') %]
+
+  # Extract StemNS
+  tar -C "$TBDIR/TorBrowser" -xf [% c('input_files_by_name/stemns') %]
+[% END %]
 
 [% IF c("var/linux");
      SET bundledata_osname = 'linux';
@@ -105,7 +121,14 @@ tar -C "$TBDIR[% IF ! c("var/osx") %]/TorBrowser[% END %]" -xf [% c('input_files
 
 mkdir -p "$TBDIR/$DOCSPATH"
 cp -a Bundle-Data/Docs/* "$TBDIR/$DOCSPATH"
-tar -C Bundle-Data/[% bundledata_osname %] -c . | tar -C "$TBDIR[% IF ! c("var/osx") %]/TorBrowser[% END %]" -x
+[% IF c("var/namecoin") %]
+  EXCLUDE_ELECTRUM=""
+  EXCLUDE_NCPROP279=""
+[% ELSE %]
+  EXCLUDE_ELECTRUM="--exclude=*Electrum-NMC*"
+  EXCLUDE_NCPROP279="--exclude=*ncprop279*"
+[% END %]
+tar -C Bundle-Data/[% bundledata_osname %] "${EXCLUDE_ELECTRUM}" "${EXCLUDE_NCPROP279}" -c . | tar -C "$TBDIR[% IF ! c("var/osx") %]/TorBrowser[% END %]" -x
 
 cat Bundle-Data/PTConfigs/[% bundledata_osname %]/torrc-defaults-appendix >> "$TBDIR/$TORCONFIGPATH/torrc-defaults"
 [% IF ! c("var/snowflake") %]
diff --git a/projects/tor-browser/config b/projects/tor-browser/config
index 819ebad..85d8bff 100644
--- a/projects/tor-browser/config
+++ b/projects/tor-browser/config
@@ -14,6 +14,7 @@ var:
     - unzip
     - bzip2
     - xz-utils
+    - patch
 
 targets:
   linux-i686:
@@ -104,3 +105,14 @@ input_files:
     name: apktool
     sha256sum: a0f116e8916d6f21160e1559847bb8b8c32ee71900f321cafeadbe37b87ebcc1
     enable: '[% c("var/android") %]'
+  - name: electrum-nmc
+    project: electrum-nmc
+    enable: '[% c("var/namecoin") %]'
+  - name: ncprop279
+    project: ncprop279
+    enable: '[% c("var/namecoin") %]'
+  - name: stemns
+    project: stemns
+    enable: '[% c("var/namecoin") %]'
+  - filename: namecoin.patch
+    enable: '[% c("var/namecoin") %]'
diff --git a/projects/tor-browser/namecoin.patch b/projects/tor-browser/namecoin.patch
new file mode 100644
index 0000000..f0c2cd0
--- /dev/null
+++ b/projects/tor-browser/namecoin.patch
@@ -0,0 +1,83 @@
+diff -ru RelativeLink/start-tor-browser RelativeLinkNamecoin/start-tor-browser
+--- RelativeLink/start-tor-browser	2019-11-03 06:56:36.062938844 +0000
++++ RelativeLinkNamecoin/start-tor-browser	2019-12-13 12:00:58.000000000 +0000
+@@ -169,6 +169,11 @@
+     detach=0
+ fi
+ 
++# We can't detach and enable Namecoin at the same time..
++if [ "$TOR_ENABLE_NAMECOIN" = 1 -a "$detach" -eq 1 ]; then
++    detach=0
++fi
++
+ if [ "$show_output" -eq 0 ]; then
+     # If the user hasn't requested 'debug mode' or --help, close stdout and stderr,
+     # to keep Firefox and the stuff loaded by/for it (including the
+@@ -352,6 +357,55 @@
+ #
+ # The --class parameter was added to fix bug 11102.
+ 
++# The Namecoin support in this script is a placeholder proof-of-concept only.
++# In the real world this would be moved to Tor Launcher.
++terminate_namecoin () {
++    echo "Terminating Namecoin..."
++    kill ${ELECTRUM_NMC_PID}
++    kill -s SIGKILL ${STEM_NS_PID}
++    echo "Terminated Namecoin."
++}
++if [ "${TOR_ENABLE_NAMECOIN}" = 1 ]; then
++    python3 -c 'import sys; exit(0) if sys.version_info[:2] >= (3, 6) else exit(1)'
++    if [ "$?" -ne 0 ]; then
++        complain "Namecoin requires at least Python 3.6."
++        exit 1
++    fi
++
++    if [ "$show_usage" -eq 1 ]; then
++        # No help exists for Namecoin
++        TOR_ENABLE_NAMECOIN=0
++    elif [ "$detach" -eq 1 ] ; then
++        # No support yet for detached Namecoin
++        TOR_ENABLE_NAMECOIN=0
++    elif [ "$log_output" -eq 1 -a "$show_output" -eq 1 ]; then
++        # No support yet for logging Namecoin
++        TOR_ENABLE_NAMECOIN=0
++    elif [ "$show_output" -eq 1 ]; then
++        # Launch Namecoin in verbose mode
++        echo "Launching Namecoin..."
++        trap terminate_namecoin SIGINT SIGTERM
++        grep --quiet "__LeaveStreamsUnattached 1" TorBrowser/Data/Tor/torrc-defaults || echo "__LeaveStreamsUnattached 1" >> TorBrowser/Data/Tor/torrc-defaults
++        TorBrowser/Electrum-NMC/run_electrum_nmc daemon -v --dir "TorBrowser/Data/Electrum-NMC/" &
++        ELECTRUM_NMC_PID=$!
++        python3 TorBrowser/StemNS/poc.py &
++        STEM_NS_PID=$!
++        echo "Launched Namecoin."
++    else
++        # Launch Namecoin
++        trap terminate_namecoin SIGINT SIGTERM
++        grep --quiet "__LeaveStreamsUnattached 1" TorBrowser/Data/Tor/torrc-defaults || echo "__LeaveStreamsUnattached 1" >> TorBrowser/Data/Tor/torrc-defaults
++        TorBrowser/Electrum-NMC/run_electrum_nmc daemon --dir "TorBrowser/Data/Electrum-NMC/" &
++        ELECTRUM_NMC_PID=$!
++        python3 TorBrowser/StemNS/poc.py &
++        STEM_NS_PID=$!
++    fi
++fi
++
++if [ "${TOR_ENABLE_NAMECOIN}" != 1 ]; then
++    perl -i -p -e 's/__LeaveStreamsUnattached 1\n//' TorBrowser/Data/Tor/torrc-defaults
++fi
++
+ if [ "$show_usage" -eq 1 ]; then
+     # Display Firefox help, then our help
+     TOR_CONTROL_PASSWD=${TOR_CONTROL_PASSWD} ./firefox --class "Tor Browser" \
+@@ -373,4 +427,10 @@
+         -profile TorBrowser/Data/Browser/profile.default "${@}" > "$logfile" 2>&1 </dev/null
+ fi
+ 
+-exit $?
++FIREFOX_EXIT_CODE=$?
++
++if [ "${TOR_ENABLE_NAMECOIN}" = 1 ]; then
++    terminate_namecoin
++fi
++
++exit ${FIREFOX_EXIT_CODE}
diff --git a/projects/typing_extensions/build b/projects/typing_extensions/build
new file mode 100644
index 0000000..2628ad1
--- /dev/null
+++ b/projects/typing_extensions/build
@@ -0,0 +1,14 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+
+tar xvf [% project %]-[% c('version') %].tar.gz
+
+mkdir -p /var/tmp/dist/
+cd /var/tmp/dist/
+
+cp -a $rootdir/[% project %]*/[% project %]/src_py3/[% project %].py ./[% project %].py
+
+[% c('tar', {
+        tar_src => '.',
+        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+        }) %]
diff --git a/projects/typing_extensions/config b/projects/typing_extensions/config
new file mode 100644
index 0000000..4926d82
--- /dev/null
+++ b/projects/typing_extensions/config
@@ -0,0 +1,11 @@
+# vim: filetype=yaml sw=2
+version: 3.7.4
+git_url: https://github.com/python/typing.git
+git_hash: baf63c5924a2b9695175df5d47ced40596024b78
+# TODO: This Git repo uses GPG sigs; we should switch from commit hash to GPG verification.
+filename: "[% project %]-[% c('version') %]-[% c('var/build_id') %].tar.gz"
+var:
+  container:
+    use_container: 1
+input_files:
+  - project: container-image
diff --git a/projects/yarl/build b/projects/yarl/build
new file mode 100644
index 0000000..e0f9400
--- /dev/null
+++ b/projects/yarl/build
@@ -0,0 +1,14 @@
+#!/bin/bash
+[% c("var/set_default_env") -%]
+
+tar xvf [% project %]-[% c('version') %].tar.gz
+
+mkdir -p /var/tmp/dist/[% project %]
+cd /var/tmp/dist/
+
+cp -a $rootdir/[% project %]*/[% project %]/*.py ./[% project %]/
+
+[% c('tar', {
+        tar_src => '.',
+        tar_args => '-czf ' _ dest_dir _ '/' _ c('filename'),
+        }) %]
diff --git a/projects/yarl/config b/projects/yarl/config
new file mode 100644
index 0000000..506bec1
--- /dev/null
+++ b/projects/yarl/config
@@ -0,0 +1,11 @@
+# vim: filetype=yaml sw=2
+version: 1.3.0
+git_url: https://github.com/aio-libs/yarl.git
+git_hash: 619cc2203b8888fb9ad552c4a3da6f8b31d1fbac
+# TODO: This Git repo doesn't use GPG sigs.  We should pester them about that.
+filename: "[% project %]-[% c('version') %]-[% c('var/build_id') %].tar.gz"
+var:
+  container:
+    use_container: 1
+input_files:
+  - project: container-image
diff --git a/rbm.conf b/rbm.conf
index 0fe7acb..31f60bb 100644
--- a/rbm.conf
+++ b/rbm.conf
@@ -233,6 +233,7 @@ targets:
       android_min_api_x86: 16
       android_min_api_x86_64: 21
       snowflake: 0
+      namecoin: 0
       CC: '$ANDROID_NDK_HOME/[% c("var/toolchain_arch") %]/bin/clang'
       CXX: '$ANDROID_NDK_HOME/[% c("var/toolchain_arch") %]/bin/clang++'
       container:
@@ -275,6 +276,8 @@ targets:
       # We only build snowflake on the alpha and nightly
       # channels for now.
       snowflake: '[% c("var/alpha") || c("var/nightly") %]'
+      # Only build Namecoin for linux on nightly
+      namecoin: '[% c("var/nightly") %]'
       container:
         suite: wheezy
         arch: amd64
@@ -327,6 +330,7 @@ targets:
       # We only build snowflake on the alpha and nightly
       # channels for now.
       snowflake: '[% c("var/alpha") || c("var/nightly") %]'
+      namecoin: 0
       deps:
         - build-essential
         - python
@@ -355,6 +359,7 @@ targets:
       # We only build snowflake on the alpha and nightly
       # channels for now.
       snowflake: '[% c("var/alpha") || c("var/nightly") %]'
+      namecoin: 0
       deps:
         - build-essential
         - python





More information about the tor-commits mailing list