[Cryptech-Commits] [user/sra/build-tools] 01/01: Initial commit of my silly build script collection.

git at cryptech.is git at cryptech.is
Mon May 4 03:21:26 UTC 2015


This is an automated email from the git hooks/post-receive script.

sra at hactrn.net pushed a commit to branch master
in repository user/sra/build-tools.

commit 5206bcd72f52bece3ff35268a2284ec4e84c6109
Author: Rob Austein <sra at hactrn.net>
Date:   Sun May 3 23:15:33 2015 -0400

    Initial commit of my silly build script collection.
---
 Build-Xilinx.sh    | 28 ++++++++++++++++++
 README.md          |  6 ++++
 http-sync-repos.py | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 http-what-repos.py | 58 ++++++++++++++++++++++++++++++++++++
 ssh-sync-repos.py  | 27 +++++++++++++++++
 ssh-what-repos.py  | 15 ++++++++++
 6 files changed, 220 insertions(+)

diff --git a/Build-Xilinx.sh b/Build-Xilinx.sh
new file mode 100755
index 0000000..c9ac7f3
--- /dev/null
+++ b/Build-Xilinx.sh
@@ -0,0 +1,28 @@
+#!/bin/sh -
+
+# Wrapper script for building Xilinx images on Caerbannog (32-bit Debian Wheezy VM).
+
+# Pick a target:
+
+#TARGET=core/platform/novena/i2c/build
+TARGET=core/platform/novena/eim/build
+
+# Pull fresh copies of all the repositories
+
+$HOME/http-sync-repos.py
+
+# Move to the target's build area
+
+cd $HOME/Cryptech/$TARGET
+
+# Run command line version of the Xilinx build environment (thanks, Paul!)
+#
+# Since Paul was developing this on a 64-bit VM and I'm using a 32-bit
+# VM, I need to override a few settings on the make command line.
+
+make isedir='/opt/Xilinx/14.7/ISE_DS' xil_env='. $(isedir)/settings32.sh'
+
+# At this point, if all went well, there should be a .bit file, which
+# I can now move to my Novena board.
+
+scp -p novena_eim.bit tym:
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..9eb39e2
--- /dev/null
+++ b/README.md
@@ -0,0 +1,6 @@
+Build tools
+===========
+
+A collection of scripts I find useful when working with the Cryptech
+git repositories.  YMMV.  No warantee expressed or implied.  If one of
+these scripts breaks, you get to keep both pieces.
diff --git a/http-sync-repos.py b/http-sync-repos.py
new file mode 100755
index 0000000..97e3d7f
--- /dev/null
+++ b/http-sync-repos.py
@@ -0,0 +1,86 @@
+#!/usr/bin/env python
+
+# Synchronize Cryptech git repositories by scraping URLs from the
+# automatically generated Trac page.  Yes, we know too much about how
+# the generation script and Trac format this page, c'est la vie.
+#
+# Python's built-in support for HTTPS is a bit primative, we could do
+# better with something like PyCURL, but we want this to run with just
+# the standard Python libraries, so we're stranded in kludge city.
+
+from urllib import urlopen
+from xml.etree.ElementTree import ElementTree
+from subprocess import check_call
+from tempfile import NamedTemporaryFile
+import sys
+import os
+
+# URL for automatically generated Trac page listing repositories.
+
+trac_page = "https://wiki.cryptech.is/wiki/GitRepositories"
+
+# PEM-encoded CA certificate covering Cryptech web services.
+
+cacert = '''\
+-----BEGIN CERTIFICATE-----
+MIIERzCCAy+gAwIBAgIBADANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJVUzEL
+MAkGA1UECBMCTUExEDAOBgNVBAcTB1JlYWRpbmcxITAfBgNVBAoTGEdydW5jaHdl
+YXRoZXIgQXNzb2NpYXRlczEkMCIGCSqGSIb3DQEJARYVcG9zdG1hc3RlckBoYWN0
+cm4ubmV0MCAXDTEwMDkyNTA1MzQ0MloYDzIxMDkwOTI1MDUzNDQyWjB1MQswCQYD
+VQQGEwJVUzELMAkGA1UECBMCTUExEDAOBgNVBAcTB1JlYWRpbmcxITAfBgNVBAoT
+GEdydW5jaHdlYXRoZXIgQXNzb2NpYXRlczEkMCIGCSqGSIb3DQEJARYVcG9zdG1h
+c3RlckBoYWN0cm4ubmV0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+wf723VEaWozuyJCytEgFkEMXDd17RTChb4RCpqFrlswbKEk4/Vw7IvBeLYNfl5F8
+1hx6ca7CU4qD+4tVkanJ7dJhT9a1jWPKjx/Xz8rpZBSDzgiDZNlgX4giDHjG3Ju8
+QcT9Elpx4SEBxeaVEl2AXXsShv1PrSpCt9WUdS+0NQkA7z3cXASNPOBFoITM37pC
+21nuQuocpjFTaGXw5s3/FhVgcKSUHmQN5UdYK5N2w7pcn7UV2v92UFYSG9cEjQL5
+DfPqzJeLemzmUl+XBqSfY/gPCyJdAPOudflnFyptVv3BrmMQYEyJBeRnt2o5aYWd
+q1w2wB2HPsEglm1K19gEoQIDAQABo4HfMIHcMAwGA1UdEwQFMAMBAf8wCwYDVR0P
+BAQDAgEGMB0GA1UdDgQWBBQkrUZV1MeYpBcTnpsuT60UPRjCZjCBnwYDVR0jBIGX
+MIGUgBQkrUZV1MeYpBcTnpsuT60UPRjCZqF5pHcwdTELMAkGA1UEBhMCVVMxCzAJ
+BgNVBAgTAk1BMRAwDgYDVQQHEwdSZWFkaW5nMSEwHwYDVQQKExhHcnVuY2h3ZWF0
+aGVyIEFzc29jaWF0ZXMxJDAiBgkqhkiG9w0BCQEWFXBvc3RtYXN0ZXJAaGFjdHJu
+Lm5ldIIBADANBgkqhkiG9w0BAQUFAAOCAQEAMeBzm4x6hlwbcrR8AcjSP4S/8+pW
+4WsmkuKlZMyP/E4rc2DpVBi9WRnLtQoQ+FDU47VkG1D97i+HYx1Ky7W8oU4YB3Xr
+ptoAenVmiQOVnbMluuQlxBa8JbOizt+BzL0NJEC6gHvCYT5SmFFsJgXBQZNPpRJb
+cDzuilf3b6vCFtRL+hD75VFLkljQWUWt59cNPGhtBItsq3q72LZ2ftPgk9ufC2h3
+whlvaaZldSFGnPRcFgXYYUootSh0yUW2lIHn52s/tPRN6XXnrdz+cLUCCchSkPOi
+Q9q/UFgaXUetsqlb56PINOrLZUpAfqC4xFBVVo2oI0ubFq173QlATQpn/w==
+-----END CERTIFICATE-----
+'''
+
+try:
+  ssl_cert_file = NamedTemporaryFile("w")
+  ssl_cert_file.write(cacert)
+  ssl_cert_file.flush()
+  try:
+    os.fchmod(ssl_cert_file.fileno(), 0600)
+  except:
+    pass
+  os.environ["SSL_CERT_FILE"]  = ssl_cert_file.name # OpenSSL looks for this
+  os.environ["GIT_SSL_CAINFO"] = ssl_cert_file.name # Git looks for this
+
+  head = "https://git.cryptech.is/"
+  tail = ".git"
+  errs = 0
+
+  for elt in ElementTree(file = urlopen(trac_page)).iter("{http://www.w3.org/1999/xhtml}tt"):
+    if elt.text.startswith(head) and elt.text.endswith(tail):
+      url  = elt.text
+      repo = url[len(head):-len(tail)]
+      pull = os.path.isdir(repo)
+      print
+      print url
+      try:
+        if pull:
+          check_call(("git", "pull"), cwd = repo)
+        else:
+          check_call(("git", "clone", url, repo))
+      except:
+        print "** Error", "pulling" if pull else "cloning", repo
+        errs += 1
+
+finally:
+  ssl_cert_file.close()
+
+sys.exit(errs)
diff --git a/http-what-repos.py b/http-what-repos.py
new file mode 100755
index 0000000..27125bd
--- /dev/null
+++ b/http-what-repos.py
@@ -0,0 +1,58 @@
+#!/usr/bin/env python
+
+# List Cryptech git repository URLs by scraping them from the
+# automatically generated Trac page.  Yes, we know too much about how
+# the generation script and Trac format this page, c'est la vie.
+
+from urllib import urlopen
+from xml.etree.ElementTree import ElementTree
+from tempfile import NamedTemporaryFile
+from os import environ, fchmod
+
+url = "https://wiki.cryptech.is/wiki/GitRepositories"
+
+cacert = '''\
+-----BEGIN CERTIFICATE-----
+MIIERzCCAy+gAwIBAgIBADANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJVUzEL
+MAkGA1UECBMCTUExEDAOBgNVBAcTB1JlYWRpbmcxITAfBgNVBAoTGEdydW5jaHdl
+YXRoZXIgQXNzb2NpYXRlczEkMCIGCSqGSIb3DQEJARYVcG9zdG1hc3RlckBoYWN0
+cm4ubmV0MCAXDTEwMDkyNTA1MzQ0MloYDzIxMDkwOTI1MDUzNDQyWjB1MQswCQYD
+VQQGEwJVUzELMAkGA1UECBMCTUExEDAOBgNVBAcTB1JlYWRpbmcxITAfBgNVBAoT
+GEdydW5jaHdlYXRoZXIgQXNzb2NpYXRlczEkMCIGCSqGSIb3DQEJARYVcG9zdG1h
+c3RlckBoYWN0cm4ubmV0MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
+wf723VEaWozuyJCytEgFkEMXDd17RTChb4RCpqFrlswbKEk4/Vw7IvBeLYNfl5F8
+1hx6ca7CU4qD+4tVkanJ7dJhT9a1jWPKjx/Xz8rpZBSDzgiDZNlgX4giDHjG3Ju8
+QcT9Elpx4SEBxeaVEl2AXXsShv1PrSpCt9WUdS+0NQkA7z3cXASNPOBFoITM37pC
+21nuQuocpjFTaGXw5s3/FhVgcKSUHmQN5UdYK5N2w7pcn7UV2v92UFYSG9cEjQL5
+DfPqzJeLemzmUl+XBqSfY/gPCyJdAPOudflnFyptVv3BrmMQYEyJBeRnt2o5aYWd
+q1w2wB2HPsEglm1K19gEoQIDAQABo4HfMIHcMAwGA1UdEwQFMAMBAf8wCwYDVR0P
+BAQDAgEGMB0GA1UdDgQWBBQkrUZV1MeYpBcTnpsuT60UPRjCZjCBnwYDVR0jBIGX
+MIGUgBQkrUZV1MeYpBcTnpsuT60UPRjCZqF5pHcwdTELMAkGA1UEBhMCVVMxCzAJ
+BgNVBAgTAk1BMRAwDgYDVQQHEwdSZWFkaW5nMSEwHwYDVQQKExhHcnVuY2h3ZWF0
+aGVyIEFzc29jaWF0ZXMxJDAiBgkqhkiG9w0BCQEWFXBvc3RtYXN0ZXJAaGFjdHJu
+Lm5ldIIBADANBgkqhkiG9w0BAQUFAAOCAQEAMeBzm4x6hlwbcrR8AcjSP4S/8+pW
+4WsmkuKlZMyP/E4rc2DpVBi9WRnLtQoQ+FDU47VkG1D97i+HYx1Ky7W8oU4YB3Xr
+ptoAenVmiQOVnbMluuQlxBa8JbOizt+BzL0NJEC6gHvCYT5SmFFsJgXBQZNPpRJb
+cDzuilf3b6vCFtRL+hD75VFLkljQWUWt59cNPGhtBItsq3q72LZ2ftPgk9ufC2h3
+whlvaaZldSFGnPRcFgXYYUootSh0yUW2lIHn52s/tPRN6XXnrdz+cLUCCchSkPOi
+Q9q/UFgaXUetsqlb56PINOrLZUpAfqC4xFBVVo2oI0ubFq173QlATQpn/w==
+-----END CERTIFICATE-----
+'''
+
+try:
+  ssl_cert_file = NamedTemporaryFile("w")
+  ssl_cert_file.write(cacert)
+  ssl_cert_file.flush()
+  try:
+    fchmod(ssl_cert_file.fileno(), 0600)
+  except:
+    pass
+  environ["SSL_CERT_FILE"]  = ssl_cert_file.name # OpenSSL looks for this
+  environ["GIT_SSL_CAINFO"] = ssl_cert_file.name # Git looks for this
+
+  for x in ElementTree(file = urlopen(url)).iter("{http://www.w3.org/1999/xhtml}tt"):
+    if x.text.startswith("https://git.cryptech.is/") and x.text.endswith(".git"):
+      print x.text
+
+finally:
+  ssl_cert_file.close()
diff --git a/ssh-sync-repos.py b/ssh-sync-repos.py
new file mode 100755
index 0000000..803f65a
--- /dev/null
+++ b/ssh-sync-repos.py
@@ -0,0 +1,27 @@
+#!/usr/bin/env python
+#
+# Synchronize Cryptech git repositories via SSH by asking gitolite for a JSON
+# listing of repositories.  Not useful unless you have an SSH account, sorry.
+
+import json, subprocess, os.path, sys
+
+user = "git at git.cryptech.is"
+cmd  = "ssh %s info -json -lc" % user
+info = json.loads(subprocess.check_output(cmd.split()))
+errs = 0
+
+for repo in sorted(info["repos"]):
+  try:
+    if all(c not in repo for c in "*?[]"):
+      print
+      print repo
+      pull = os.path.isdir(repo)
+      if pull:
+	subprocess.check_call(("git", "pull"), cwd = repo)
+      else:
+	subprocess.check_call(("git", "clone", "%s:%s.git" % (user, repo), repo))
+  except:
+    print "** Error", "pulling" if pull else "cloning", repo
+    errs += 1
+
+sys.exit(errs)
diff --git a/ssh-what-repos.py b/ssh-what-repos.py
new file mode 100755
index 0000000..3e09720
--- /dev/null
+++ b/ssh-what-repos.py
@@ -0,0 +1,15 @@
+#!/usr/bin/env python
+#
+# List Cryptech git repositories via SSH by asking gitolite for a JSON
+# listing.  Not useful unless you have an SSH account, sorry, and not
+# really all that much more interesting than normal gitolite output.
+
+import json, subprocess
+
+cmd = "ssh git at git.cryptech.is info -json -lc"
+
+info = json.loads(subprocess.check_output(cmd.split()))
+
+for name in sorted(info["repos"]):
+  if name != "gitolite-admin" and not any(c in name for c in "*?[]"):
+    print name



More information about the Commits mailing list